diff --git a/.github/codeql/codeql-config.yml b/.github/codeql/codeql-config.yml
new file mode 100644
index 00000000..9d078a8f
--- /dev/null
+++ b/.github/codeql/codeql-config.yml
@@ -0,0 +1,15 @@
+name: agent-teams-codeql
+
+paths:
+ - src
+ - packages
+ - agent-teams-controller
+ - mcp-server
+ - scripts
+ - .github/workflows
+
+paths-ignore:
+ - '**/node_modules/**'
+ - 'test/**'
+ - 'landing/**'
+ - 'build/**'
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 4295bf21..32410bf2 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -88,6 +88,8 @@ jobs:
key: eslint-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml', 'eslint.config.*', 'src/**/*.ts', 'src/**/*.tsx') }}
- name: Validate workspace truth gate
+ env:
+ NODE_OPTIONS: --max-old-space-size=8192
run: pnpm check:ci
test:
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
new file mode 100644
index 00000000..f9242127
--- /dev/null
+++ b/.github/workflows/codeql.yml
@@ -0,0 +1,67 @@
+name: CodeQL
+
+on:
+ push:
+ branches: [main, dev]
+ paths:
+ - 'src/**'
+ - 'packages/**'
+ - 'agent-teams-controller/**'
+ - 'mcp-server/**'
+ - 'scripts/**'
+ - '.github/workflows/**'
+ - '.github/codeql/**'
+ - 'package.json'
+ - 'pnpm-lock.yaml'
+ - 'pnpm-workspace.yaml'
+ - 'tsconfig*.json'
+ pull_request:
+ paths:
+ - 'src/**'
+ - 'packages/**'
+ - 'agent-teams-controller/**'
+ - 'mcp-server/**'
+ - 'scripts/**'
+ - '.github/workflows/**'
+ - '.github/codeql/**'
+ - 'package.json'
+ - 'pnpm-lock.yaml'
+ - 'pnpm-workspace.yaml'
+ - 'tsconfig*.json'
+ schedule:
+ - cron: '34 3 * * 1'
+
+permissions:
+ contents: read
+
+jobs:
+ analyze:
+ name: Analyze (${{ matrix.language }})
+ runs-on: ubuntu-latest
+ timeout-minutes: 45
+ permissions:
+ actions: read
+ contents: read
+ security-events: write
+
+ strategy:
+ fail-fast: false
+ matrix:
+ language:
+ - actions
+ - javascript-typescript
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v6
+
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@v4
+ with:
+ languages: ${{ matrix.language }}
+ config-file: ./.github/codeql/codeql-config.yml
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@v4
+ with:
+ category: /language:${{ matrix.language }}
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 8aed232f..af3b310b 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -47,7 +47,12 @@ jobs:
shell: bash
run: |
PNPM_STORE="$(pnpm store path)"
- find "$PNPM_STORE" -path '*/node-gyp/gyp/gyp_main.py' -exec chmod +x {} \; 2>/dev/null || true
+ PNPM_BIN_DIR="$(dirname "$(command -v pnpm)")"
+ for path in "$PNPM_STORE" "${PNPM_HOME:-}" "$PNPM_BIN_DIR"; do
+ if [ -d "$path" ]; then
+ find "$path" -path '*/node-gyp/gyp/gyp_main.py' -exec chmod +x {} \; 2>/dev/null || true
+ fi
+ done
- name: Install dependencies
run: pnpm install --frozen-lockfile
@@ -341,7 +346,12 @@ jobs:
- name: Restore pnpm node-gyp executable bit
run: |
PNPM_STORE="$(pnpm store path)"
- find "$PNPM_STORE" -path '*/node-gyp/gyp/gyp_main.py' -exec chmod +x {} \; 2>/dev/null || true
+ PNPM_BIN_DIR="$(dirname "$(command -v pnpm)")"
+ for path in "$PNPM_STORE" "${PNPM_HOME:-}" "$PNPM_BIN_DIR"; do
+ if [ -d "$path" ]; then
+ find "$path" -path '*/node-gyp/gyp/gyp_main.py' -exec chmod +x {} \; 2>/dev/null || true
+ fi
+ done
- name: Install dependencies
run: pnpm install --frozen-lockfile
@@ -461,7 +471,12 @@ jobs:
shell: bash
run: |
PNPM_STORE="$(pnpm store path)"
- find "$PNPM_STORE" -path '*/node-gyp/gyp/gyp_main.py' -exec chmod +x {} \; 2>/dev/null || true
+ PNPM_BIN_DIR="$(dirname "$(command -v pnpm)")"
+ for path in "$PNPM_STORE" "${PNPM_HOME:-}" "$PNPM_BIN_DIR"; do
+ if [ -d "$path" ]; then
+ find "$path" -path '*/node-gyp/gyp/gyp_main.py' -exec chmod +x {} \; 2>/dev/null || true
+ fi
+ done
- name: Install dependencies
run: pnpm install --frozen-lockfile
@@ -585,7 +600,12 @@ jobs:
- name: Restore pnpm node-gyp executable bit
run: |
PNPM_STORE="$(pnpm store path)"
- find "$PNPM_STORE" -path '*/node-gyp/gyp/gyp_main.py' -exec chmod +x {} \; 2>/dev/null || true
+ PNPM_BIN_DIR="$(dirname "$(command -v pnpm)")"
+ for path in "$PNPM_STORE" "${PNPM_HOME:-}" "$PNPM_BIN_DIR"; do
+ if [ -d "$path" ]; then
+ find "$path" -path '*/node-gyp/gyp/gyp_main.py' -exec chmod +x {} \; 2>/dev/null || true
+ fi
+ done
- name: Install dependencies
run: pnpm install --frozen-lockfile
diff --git a/.github/workflows/reviewrouter-codex.yml b/.github/workflows/reviewrouter-codex.yml
index cd3014e9..2fee5e36 100644
--- a/.github/workflows/reviewrouter-codex.yml
+++ b/.github/workflows/reviewrouter-codex.yml
@@ -17,7 +17,7 @@ jobs:
steps:
- name: ReviewRouter Codex OAuth review
id: run_codex
- uses: 777genius/review-router@1603215454b4c5cf3387b40ae674a46eeb7ee96b
+ uses: 777genius/review-router@97fdbdf1685350ac9a7f29e0430e82c2360c2821
with:
mode: codex-oauth-rotating
api-url: "https://api.reviewrouter.site"
diff --git a/README.md b/README.md
index 85a8d719..191b3526 100644
--- a/README.md
+++ b/README.md
@@ -11,30 +11,30 @@
-
+
- You're the CTO, agents are your team. They handle tasks themselves, message each other, review each other. You just look at the kanban board and drink coffee.
+ You're the boss, agents are your team. They handle tasks themselves, message each other, review each other. You just look at the kanban board and drink coffee.
-
+
Free desktop app for AI agent teams. Start with a free model with no auth - no signup, API key, or card - or connect Claude/Codex/OpenCode provider access for more models. Not just coding agents.
-
+
-Watch demo on the site or here:
+Watch demo on the site or here:
[demo_new_15s.webm](https://github.com/user-attachments/assets/d78cf5a4-80fe-4a8b-a1db-fb272e18029c)
@@ -227,6 +227,12 @@ Use the desktop app as the primary product. The browser/web path is not needed f
No. You can start with the free model with no auth right away. If you want Claude, Codex, OpenCode/OpenRouter, or other provider-backed models, the app guides runtime detection/setup and provider authentication from the UI.
+
+What if the Linux app freezes or shows a blank window over RDP?
+
+Some RDP (Remote Desktop Protocol) sessions expose virtual GPU drivers that can break Electron rendering. Launch with `AGENT_TEAMS_DISABLE_GPU=1` to disable Electron hardware acceleration for that run, for example `AGENT_TEAMS_DISABLE_GPU=1 pnpm dev` from source or `AGENT_TEAMS_DISABLE_GPU=1 ./Agent.Teams.AI.AppImage` for AppImage builds.
+
+
Does it read or upload my code?
diff --git a/agent-teams-controller/package.json b/agent-teams-controller/package.json
index 902e6d05..9d486238 100644
--- a/agent-teams-controller/package.json
+++ b/agent-teams-controller/package.json
@@ -14,6 +14,6 @@
"test:watch": "vitest --config vitest.config.js"
},
"engines": {
- "node": ">=24.16.0 <25"
+ "node": ">=24.15.0 <25"
}
}
diff --git a/agent-teams-controller/src/internal/tasks.js b/agent-teams-controller/src/internal/tasks.js
index 27213f65..f16195bb 100644
--- a/agent-teams-controller/src/internal/tasks.js
+++ b/agent-teams-controller/src/internal/tasks.js
@@ -968,6 +968,7 @@ async function memberBriefing(context, memberName, options = {}) {
if (cwd) {
lines.push('', `Working directory: ${cwd}`);
+ lines.push('If an assigned task requires implementation, fixes, review follow-up, or concrete investigation, you may inspect, read/search, and edit files in this working directory as needed. Stay within the task scope, repository rules, and normal permission boundaries.');
}
lines.push(
diff --git a/agent-teams-controller/test/controller.test.js b/agent-teams-controller/test/controller.test.js
index ed42338a..0bce048a 100644
--- a/agent-teams-controller/test/controller.test.js
+++ b/agent-teams-controller/test/controller.test.js
@@ -157,6 +157,9 @@ describe('agent-teams-controller API', () => {
expect(briefing).toContain('Workflow:');
expect(briefing).toContain('Implement carefully');
expect(briefing).toContain('Working directory: /tmp/project-x');
+ expect(briefing).toContain(
+ 'If an assigned task requires implementation, fixes, review follow-up, or concrete investigation, you may inspect, read/search, and edit files in this working directory as needed.'
+ );
expect(briefing).toContain('Task briefing for bob:');
expect(briefing).toContain(
'Use task_briefing as your primary working queue whenever you need to see assigned work.'
diff --git a/docs/RELEASE.md b/docs/RELEASE.md
index 92089034..0444804c 100644
--- a/docs/RELEASE.md
+++ b/docs/RELEASE.md
@@ -109,6 +109,17 @@ git status
git push origin
```
+Before starting the app release workflow, check whether the orchestrator has
+new commits that must be included in the packaged runtime:
+
+- Pull and push the orchestrator repo first.
+- If the orchestrator changed after the current `runtime.lock.json` `sourceRef`,
+ bump the orchestrator `package.json` runtime version, create and push the
+ matching `v` tag, then update `runtime.lock.json` in this repo
+ to the same `version`, `sourceRef`, `releaseTag`, and runtime asset filenames.
+- Do not start the app release workflow while `runtime.lock.json` still points
+ at an older orchestrator tag.
+
### 2. Create tag and push
```bash
diff --git a/docs/screenshots/agent-graph-four-participants-layout-preview.svg b/docs/screenshots/agent-graph-four-participants-layout-preview.svg
deleted file mode 100644
index 2a03d844..00000000
--- a/docs/screenshots/agent-graph-four-participants-layout-preview.svg
+++ /dev/null
@@ -1,189 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4 participants - current radial layout
- Strict small-team preset: top / right / bottom / left around Lead
-
-
-
-
-
- Lead
- center reserved zone
-
-
-
-
- Participant 1
- top side
-
- slot 1
-
-
-
-
-
- Participant 2
- right side
-
- slot 2
-
-
-
-
-
- Participant 3
- bottom side
-
- slot 3
-
-
-
-
-
- Participant 4
- left side
-
- slot 4
-
-
\ No newline at end of file
diff --git a/docs/screenshots/agent-graph-row-orbit-layout-preview.svg b/docs/screenshots/agent-graph-row-orbit-layout-preview.svg
deleted file mode 100644
index 4ffbd6d1..00000000
--- a/docs/screenshots/agent-graph-row-orbit-layout-preview.svg
+++ /dev/null
@@ -1,125 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 8 participants
- 3 top / 2 at lead level / 3 bottom
- 12 participants
- 4 top / 2 + lead + 2 middle / 4 bottom
-
-
-
-
-
- top row
- lead row
- bottom row
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- lead
-
-
- alice reviewer
- nova developer
- tom developer
- jack developer
- atlas assistant
- bob developer
- maya qa
- kai ops
-
-
-
-
-
-
- top row
- lead row
- bottom row
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- lead
-
-
- alice
- nova
- tom
- jack
- atlas
- bob
- maya
- kai
- ivy
- rex
- zoe
- sam
-
-
diff --git a/docs/screenshots/cover-frame.png b/docs/screenshots/cover-frame.png
new file mode 100644
index 00000000..5ffef519
Binary files /dev/null and b/docs/screenshots/cover-frame.png differ
diff --git a/docs/screenshots/screenshots-animated.webp b/docs/screenshots/screenshots-animated.webp
new file mode 100644
index 00000000..000931d5
Binary files /dev/null and b/docs/screenshots/screenshots-animated.webp differ
diff --git a/landing/.gitignore b/landing/.gitignore
index 392f1564..f4956f78 100644
--- a/landing/.gitignore
+++ b/landing/.gitignore
@@ -5,6 +5,7 @@ node_modules
.env
--host/
product-docs/.vitepress/dist/
+product-docs/.vitepress/cache/
# Large video files
public/video/*.mp4
diff --git a/landing/README.md b/landing/README.md
index fb679a08..566c0b0f 100644
--- a/landing/README.md
+++ b/landing/README.md
@@ -14,9 +14,35 @@ pnpm generate
pnpm preview
```
+## Render static sites
+
+Landing and docs are deployed as separate Render Static Sites from the `main` branch.
+
+Landing:
+
+```bash
+corepack enable && pnpm install --frozen-lockfile --ignore-scripts && NUXT_PUBLIC_SITE_URL=$RENDER_EXTERNAL_URL NUXT_PUBLIC_DOCS_SITE_URL=https://agent-teams-ai-docs.onrender.com NUXT_PUBLIC_ROBOTS="index, follow" pnpm --filter agent-teams-landing generate
+```
+
+Publish path: `landing/.output/public`
+
+Docs:
+
+```bash
+corepack enable && pnpm install --frozen-lockfile --ignore-scripts && VITEPRESS_BASE=/ VITEPRESS_SITE_URL=$RENDER_EXTERNAL_URL VITEPRESS_LANDING_SITE_URL=https://agent-teams-ai-landing.onrender.com pnpm --filter agent-teams-landing docs:build
+```
+
+Publish path: `landing/product-docs/.vitepress/dist`
+
+Both sites set `NODE_VERSION=24.16.0` and `SKIP_INSTALL_DEPS=true`; the build command runs the pnpm install step explicitly with `--ignore-scripts`.
+
+When a custom landing domain is attached, update `VITEPRESS_LANDING_SITE_URL` on the docs site. When a custom docs domain is attached, `VITEPRESS_SITE_URL=$RENDER_EXTERNAL_URL` can stay unchanged for the Render preview URL or be replaced with the custom domain for canonical SEO.
+
## Notes
+
- Static-first (SSG) by design.
- Locale auto-detection: cookie -> browser settings -> fallback `en`.
- Theme auto-detection: localStorage -> system preference -> fallback `light`.
- Hero video uses the Mux Player embed. Set `NUXT_PUBLIC_MUX_PLAYBACK_ID` to override the default playback id without changing the code.
- Hero background can use a separate Mux asset via `NUXT_PUBLIC_MUX_BACKGROUND_PLAYBACK_ID`; otherwise it reuses `NUXT_PUBLIC_MUX_PLAYBACK_ID`.
+- Set `NUXT_PUBLIC_DOCS_SITE_URL` when the docs are deployed as a separate static site.
diff --git a/landing/assets/images/footer/robot-lead-lounge-v1.webp b/landing/assets/images/footer/robot-lead-lounge-v1.webp
index 67876934..da1bd5a8 100644
Binary files a/landing/assets/images/footer/robot-lead-lounge-v1.webp and b/landing/assets/images/footer/robot-lead-lounge-v1.webp differ
diff --git a/landing/assets/images/hero/robots/robot-avatar-cyan-cat-v1.webp b/landing/assets/images/hero/robots/robot-avatar-cyan-cat-v1.webp
index 27b392ae..b8ffa625 100644
Binary files a/landing/assets/images/hero/robots/robot-avatar-cyan-cat-v1.webp and b/landing/assets/images/hero/robots/robot-avatar-cyan-cat-v1.webp differ
diff --git a/landing/assets/images/hero/robots/robot-avatar-cyan-v1.webp b/landing/assets/images/hero/robots/robot-avatar-cyan-v1.webp
index ce12d9ba..707fc8f4 100644
Binary files a/landing/assets/images/hero/robots/robot-avatar-cyan-v1.webp and b/landing/assets/images/hero/robots/robot-avatar-cyan-v1.webp differ
diff --git a/landing/assets/images/hero/robots/robot-avatar-reviewer-teal-v1.webp b/landing/assets/images/hero/robots/robot-avatar-reviewer-teal-v1.webp
index d081566c..b466bd55 100644
Binary files a/landing/assets/images/hero/robots/robot-avatar-reviewer-teal-v1.webp and b/landing/assets/images/hero/robots/robot-avatar-reviewer-teal-v1.webp differ
diff --git a/landing/assets/images/hero/robots/robot-avatar-seated-magenta-v1.webp b/landing/assets/images/hero/robots/robot-avatar-seated-magenta-v1.webp
index 90f27c1e..1bc007ca 100644
Binary files a/landing/assets/images/hero/robots/robot-avatar-seated-magenta-v1.webp and b/landing/assets/images/hero/robots/robot-avatar-seated-magenta-v1.webp differ
diff --git a/landing/assets/images/hero/robots/robot-avatar-yellow-star-v1.webp b/landing/assets/images/hero/robots/robot-avatar-yellow-star-v1.webp
index f49a5450..3c18cf3b 100644
Binary files a/landing/assets/images/hero/robots/robot-avatar-yellow-star-v1.webp and b/landing/assets/images/hero/robots/robot-avatar-yellow-star-v1.webp differ
diff --git a/landing/assets/images/hero/robots/robot-red-purple-handshake-v1.webp b/landing/assets/images/hero/robots/robot-red-purple-handshake-v1.webp
index 98a0c794..5399a422 100644
Binary files a/landing/assets/images/hero/robots/robot-red-purple-handshake-v1.webp and b/landing/assets/images/hero/robots/robot-red-purple-handshake-v1.webp differ
diff --git a/landing/assets/styles/cyberpunk-hero.scss b/landing/assets/styles/cyberpunk-hero.scss
index e87b0f5e..14de0691 100644
--- a/landing/assets/styles/cyberpunk-hero.scss
+++ b/landing/assets/styles/cyberpunk-hero.scss
@@ -1943,8 +1943,12 @@
}
@media (max-width: 767px) {
+ #hero.cyber-hero {
+ padding-top: 64px;
+ }
+
.cyber-hero {
- padding: 84px 0 36px;
+ padding: 64px 0 8px;
}
.cyber-hero__background {
@@ -1962,19 +1966,21 @@
}
.cyber-hero__container {
- width: min(100% - 32px, 680px);
+ width: min(100% - 24px, 680px);
+ max-width: min(100% - 24px, 680px) !important;
+ padding-inline: 0 !important;
}
.cyber-hero__layout {
min-width: 0;
- gap: 0;
- overflow: hidden;
+ gap: 8px;
+ overflow: visible;
}
.cyber-hero__copy {
width: 100%;
max-width: 100%;
- padding-bottom: 0;
+ padding: 8px 0 0;
}
.cyber-hero__brand-lockup {
@@ -1988,28 +1994,40 @@
}
.cyber-hero__title {
- gap: 0.12em;
- font-size: clamp(2rem, 9.4vw, 3.1rem);
+ flex-wrap: wrap;
+ gap: 0.06em 0.12em;
+ margin-bottom: 16px;
+ max-width: 9.4em;
+ font-size: 2.35rem;
+ line-height: 0.96;
+ white-space: normal;
}
.cyber-hero__slogan {
display: flex;
width: 100%;
- padding: 10px 14px;
- letter-spacing: 0.04em;
+ margin-bottom: 16px;
+ padding: 9px 13px;
+ flex-wrap: wrap;
+ font-size: 0.72rem;
+ letter-spacing: 0.03em;
+ overflow-wrap: anywhere;
}
.cyber-hero__description {
- font-size: 1rem;
- line-height: 1.62;
+ margin-bottom: 18px;
+ max-width: 100%;
+ font-size: 0.95rem;
+ line-height: 1.5;
+ overflow-wrap: break-word;
}
.cyber-hero__providers {
- margin-bottom: 22px;
+ margin-bottom: 18px;
}
.cyber-hero__provider-list {
- gap: 12px 18px;
+ gap: 10px 14px;
}
.cyber-hero__provider {
@@ -2033,31 +2051,49 @@
.cyber-hero__actions {
display: grid;
grid-template-columns: 1fr;
+ gap: 12px;
+ margin-bottom: 12px;
}
.cyber-action-button.v-btn {
width: 100%;
- min-height: 72px !important;
+ min-height: 60px !important;
min-width: 0 !important;
- padding-inline: 20px !important;
+ padding-inline: 16px !important;
+ }
+
+ .cyber-action-button.v-btn .v-btn__content {
+ gap: 12px;
+ }
+
+ .cyber-action-button__icon {
+ width: 30px;
+ height: 30px;
+ }
+
+ .cyber-action-button__label {
+ font-size: 0.92rem;
+ }
+
+ .cyber-action-button__subtitle {
+ font-size: 0.62rem;
}
.cyber-hero__terminal-note {
- display: inline-flex;
- font-size: 0.68rem;
+ display: none;
}
.cyber-scene {
min-height: auto;
aspect-ratio: auto;
- padding: 96px 0 14px;
+ padding: 86px 0 2px;
transform: none;
}
.cyber-hero__scene {
width: 100%;
max-width: 100%;
- margin-top: 8px;
+ margin-top: 14px;
overflow: hidden;
}
@@ -2070,17 +2106,20 @@
position: relative;
left: auto;
top: auto;
- width: 100%;
+ width: min(100%, 320px);
+ margin-inline: auto;
transform: none;
}
.cyber-scene__robots {
inset: 0 0 auto;
- height: 96px;
+ z-index: 7;
+ height: 76px;
display: flex;
align-items: flex-end;
justify-content: center;
- gap: clamp(18px, 6vw, 34px);
+ gap: 18px;
+ overflow: visible;
}
.cyber-agent {
@@ -2089,7 +2128,7 @@
display: none;
left: auto;
top: auto;
- width: clamp(58px, 18vw, 74px);
+ width: 54px;
transform: none;
}
@@ -2099,7 +2138,7 @@
.cyber-agent[data-agent="planner"] {
z-index: auto;
- width: clamp(58px, 18vw, 74px);
+ width: 54px;
transform: none;
}
@@ -2145,93 +2184,18 @@
display: none;
}
- .cyber-feature-rail {
- grid-template-columns: 1fr;
- gap: 20px;
- padding: 0 4px;
- }
-
.cyber-feature-rail-shell {
- margin-top: clamp(104px, 24vw, 128px);
- }
-
- .cyber-feature-rail__collaboration {
- left: 31%;
- bottom: calc(100% + 8px);
- width: clamp(96px, 30vw, 124px);
- }
-
- .cyber-feature-rail__reviewer {
- --reviewer-robot-width: clamp(58px, 18vw, 72px);
-
- right: clamp(6px, 3vw, 16px);
- bottom: calc(100% + 8px);
- gap: 0;
- }
-
- .cyber-feature-rail__reviewer-card,
- .cyber-feature-rail__reviewer-bubble {
display: none;
}
+}
- .cyber-feature-rail__robot {
- top: 4px;
+@media (max-width: 360px) {
+ .cyber-hero__title {
+ font-size: 2.1rem;
}
- .cyber-feature-rail__item {
- grid-template-columns: 48px 44px minmax(0, 1fr);
- grid-template-rows: auto;
- align-items: center;
- justify-items: start;
- gap: 10px;
- padding: 0;
- text-align: left;
- }
-
- .cyber-feature-rail__icon {
- width: 44px;
- height: 44px;
- }
-
- .cyber-feature-rail__icon::before,
- .cyber-feature-rail__icon::after {
- width: 12px;
- height: 12px;
- }
-
- .cyber-feature-rail__icon .v-icon {
- font-size: 26px !important;
- }
-
- .cyber-feature-rail__node {
- width: 40px;
- height: 40px;
- font-size: 0.8rem;
- }
-
- .cyber-feature-rail__node::before {
- display: none;
- }
-
- .cyber-feature-rail__copy {
- max-width: none;
- padding: 8px 10px 9px;
- }
-
- .cyber-feature-rail__copy::before {
- inset: 0 -6px;
- border-radius: 14px;
- backdrop-filter: blur(9px) saturate(1.06);
- }
-
- .cyber-feature-rail__title {
- margin-bottom: 5px;
- font-size: 0.92rem;
- }
-
- .cyber-feature-rail__text {
- font-size: 0.78rem;
- line-height: 1.42;
+ .cyber-hero__provider-list {
+ gap: 9px 12px;
}
}
diff --git a/landing/components/layout/AppFooter.vue b/landing/components/layout/AppFooter.vue
index 7eb6cf17..e5a8b025 100644
--- a/landing/components/layout/AppFooter.vue
+++ b/landing/components/layout/AppFooter.vue
@@ -1,15 +1,18 @@
diff --git a/landing/components/layout/AppHeader.vue b/landing/components/layout/AppHeader.vue
index 5e629fc6..301bfe86 100644
--- a/landing/components/layout/AppHeader.vue
+++ b/landing/components/layout/AppHeader.vue
@@ -1,22 +1,28 @@
@@ -810,6 +816,29 @@ const navItems = computed(() => [
}
}
+@media (max-width: 360px) {
+ .app-header__inner {
+ width: min(100% - 24px, 680px);
+ }
+
+ .app-header__brand-frame {
+ padding-left: 10px;
+ padding-right: 34px;
+ }
+
+ .app-header__brand-frame :deep(.app-logo) {
+ gap: 8px;
+ }
+
+ .app-header__brand-frame :deep(.app-logo__text) {
+ font-size: 10px;
+ }
+
+ .app-header__mobile-actions {
+ margin-left: 8px;
+ }
+}
+
@media (prefers-reduced-motion: reduce) {
.app-header__hud-energy path {
animation: none;
diff --git a/landing/components/sections/DownloadSection.vue b/landing/components/sections/DownloadSection.vue
index 84e44bb6..5f82618f 100644
--- a/landing/components/sections/DownloadSection.vue
+++ b/landing/components/sections/DownloadSection.vue
@@ -974,9 +974,13 @@ const linuxRobotBubble = computed(() => t('download.readyToStart'));
}
.download-section__card {
+ display: grid;
+ grid-template-columns: 52px minmax(0, 1fr);
+ align-items: center;
padding: 20px 22px;
gap: 16px;
border-radius: 16px;
+ text-align: left;
}
.download-section__card-robot-seat {
@@ -989,13 +993,28 @@ const linuxRobotBubble = computed(() => t('download.readyToStart'));
border-radius: 14px;
}
+ .download-section__card-info {
+ min-width: 0;
+ }
+
.download-section__card-label {
font-size: 1.05rem;
}
.download-section__btn {
- padding: 8px 20px;
+ grid-column: 1 / -1;
+ justify-content: center;
+ width: 100%;
+ min-width: 0;
+ padding: 9px 18px;
font-size: 0.85rem;
+ box-sizing: border-box;
+ }
+
+ .download-section__card-indicator {
+ grid-column: 1 / -1;
+ justify-content: center;
+ margin-top: -4px;
}
}
diff --git a/landing/components/sections/HeroSection.vue b/landing/components/sections/HeroSection.vue
index d6c6dae5..b016b140 100644
--- a/landing/components/sections/HeroSection.vue
+++ b/landing/components/sections/HeroSection.vue
@@ -4,10 +4,12 @@ import {
mdiDownload,
} from "@mdi/js";
import { getLocalizedHeroMessages, type HeroMessagePhase } from "~/data/heroScene";
+import { buildDocsHref } from "~/utils/docsUrl";
const { content } = useLandingContent();
const { t, locale } = useI18n();
-const { baseURL } = useRuntimeConfig().app;
+const runtimeConfig = useRuntimeConfig();
+const { baseURL } = runtimeConfig.app;
const heroRef = ref(null);
const activeHeroMessageIndex = ref(0);
const heroMessagePhase = ref("cooldown");
@@ -21,7 +23,6 @@ const downloadStore = useDownloadStore();
const { resolve, data: releaseData } = useReleaseDownloads();
const { latestReleaseUrl, releaseDownloadUrl } = useGithubRepo();
const { selectedDownloadAsset } = useDownloadAssetPresentation();
-const withBase = (path: string) => `${baseURL.replace(/\/?$/, "/")}${path.replace(/^\/+/, "")}`;
useCyberHeroParallax(heroRef);
@@ -67,7 +68,11 @@ const heroDownloadUrl = computed(() => {
return resolve(asset.os, arch)?.url || releaseDownloadUrl(asset.fileName);
});
-const docsHref = computed(() => withBase(locale.value === "ru" ? "docs/ru/" : "docs/"));
+const docsHref = computed(() => buildDocsHref({
+ locale: locale.value,
+ docsSiteUrl: runtimeConfig.public.docsSiteUrl,
+ embeddedBaseURL: baseURL,
+}));
const downloadActionSubtitle = computed(() => {
if (!selectedDownloadAsset.value) {
return t("hero.platformDefault");
diff --git a/landing/content/bn.json b/landing/content/bn.json
index aa6598b7..3dd88f6b 100644
--- a/landing/content/bn.json
+++ b/landing/content/bn.json
@@ -1,7 +1,7 @@
{
"hero": {
"title": "Agent Teams",
- "subtitle": "তুমিই সেই লোক CTO; আপনার টিম. তারা নিজেদের কাজ করে, একে অপরের বার্তা, একে অপরের কোড পর্যালোচনা করে। তুমি শুধুকানবান বোর্ড আর কফির দিকে তাকাও।"
+ "subtitle": "তুমিই সেই লোক Boss; আপনার টিম. তারা নিজেদের কাজ করে, একে অপরের বার্তা, একে অপরের কোড পর্যালোচনা করে। তুমি শুধুকানবান বোর্ড আর কফির দিকে তাকাও।"
},
"features": [
{
diff --git a/landing/content/de.json b/landing/content/de.json
index c7479f6c..95d7acab 100644
--- a/landing/content/de.json
+++ b/landing/content/de.json
@@ -1,7 +1,7 @@
{
"hero": {
"title": "Agent Teams",
- "subtitle": "Sie sind der CTO, Agenten sind Ihr Team. Sie erledigen Aufgaben, kommunizieren untereinander, reviewen Code. Sie schauen aufs Kanban-Board und trinken Kaffee."
+ "subtitle": "Sie sind der Boss, Agenten sind Ihr Team. Sie erledigen Aufgaben, kommunizieren untereinander, reviewen Code. Sie schauen aufs Kanban-Board und trinken Kaffee."
},
"features": [
{
diff --git a/landing/content/en.json b/landing/content/en.json
index d6d1bff5..0e044460 100644
--- a/landing/content/en.json
+++ b/landing/content/en.json
@@ -1,7 +1,7 @@
{
"hero": {
"title": "Agent Teams",
- "subtitle": "You're the CTO, agents are your team. They handle tasks themselves, message each other, review each other's code. You just look at the kanban board and drink coffee."
+ "subtitle": "You're the Boss, agents are your team. They handle tasks themselves, message each other, review each other's code. You just look at the kanban board and drink coffee."
},
"features": [
{
diff --git a/landing/content/es.json b/landing/content/es.json
index 592d52e1..dc891a86 100644
--- a/landing/content/es.json
+++ b/landing/content/es.json
@@ -1,7 +1,7 @@
{
"hero": {
"title": "Agent Teams",
- "subtitle": "Tú eres el CTO, los agentes son tu equipo. Ellos manejan las tareas solos, se comunican entre sí, revisan el código del otro. Tú solo miras el tablero kanban y tomas café."
+ "subtitle": "Tú eres el Boss, los agentes son tu equipo. Ellos manejan las tareas solos, se comunican entre sí, revisan el código del otro. Tú solo miras el tablero kanban y tomas café."
},
"features": [
{
diff --git a/landing/content/fa.json b/landing/content/fa.json
new file mode 100644
index 00000000..7b5a922c
--- /dev/null
+++ b/landing/content/fa.json
@@ -0,0 +1,132 @@
+{
+ "hero": {
+ "title": "Agent Teams",
+ "subtitle": "شما Boss هستید و عاملها تیم شما هستند. آنها وظیفهها را خودشان انجام میدهند، به هم پیام میدهند و کد یکدیگر را بازبینی میکنند. شما فقط کانبان را میبینید و قهوه مینوشید."
+ },
+ "features": [
+ {
+ "id": "agentTeams",
+ "title": "تیمهای عامل",
+ "description": "تیمهایی با نقشهای مختلف بسازید. عاملها موازی و خودکار کار میکنند، با هم ارتباط میگیرند و بین تیمها همکاری میکنند."
+ },
+ {
+ "id": "kanban",
+ "title": "برد کانبان",
+ "description": "وضعیت وظیفهها هنگام کار عاملها در لحظه تغییر میکند. همه چیز از کشیدن و رها کردن تا تخصیص و بازبینی روی یک برد دیداری است."
+ },
+ {
+ "id": "codeReview",
+ "title": "بازبینی کد",
+ "description": "برای هر وظیفه نمای diff، پذیرش، رد و نظر دارید. ویرایشگر کد داخلی با پشتیبانی Git هم آماده است."
+ },
+ {
+ "id": "crossTeam",
+ "title": "ارتباط بین تیمها",
+ "description": "عاملها داخل یک تیم و بین تیمهای مختلف پیام میدهند. پیام مستقیم، نظر روی وظیفه و اکشنهای سریع."
+ },
+ {
+ "id": "soloMode",
+ "title": "حالت تکنفره",
+ "description": "با یک عامل شروع کنید که خودش وظیفهها را مدیریت میکند. هر وقت قدرت بیشتری خواستید آن را به تیم کامل گسترش دهید."
+ },
+ {
+ "id": "liveProcesses",
+ "title": "فرایندهای زنده",
+ "description": "عاملهای در حال اجرا را ببینید، URLها را در مرورگر باز کنید و مصرف توکن و context نشست را در لحظه پایش کنید."
+ }
+ ],
+ "faq": [
+ {
+ "id": "whatIsIt",
+ "question": "Agent Teams چیست؟",
+ "answer": "یک برنامه دسکتاپ برای هماهنگکردن تیمهای عامل AI با لایه هماهنگی محلی خودمان است. عاملها نقش دارند، مستقل کار میکنند، از طریق کانبان همکاری میکنند و میتوانند روی Anthropic یا Codex اجرا شوند."
+ },
+ {
+ "id": "isFree",
+ "question": "واقعاً رایگان است؟",
+ "answer": "بله. برنامه رایگان و متنباز است و میتوانید با یک مدل رایگان بدون احراز هویت شروع کنید - بدون ثبتنام، API key یا کارت اعتباری. اگر مدلهای بیشتری خواستید، Claude، Codex، OpenCode/OpenRouter یا provider پشتیبانیشده دیگری را وصل کنید."
+ },
+ {
+ "id": "platforms",
+ "question": "چه پلتفرمهایی پشتیبانی میشوند؟",
+ "answer": "macOS (Apple Silicon و Intel)، Windows و Linux."
+ },
+ {
+ "id": "howItWorks",
+ "question": "چطور کار میکند؟",
+ "answer": "برنامه را نصب کنید، تیم بسازید و نقشها را مشخص کنید. عاملها موازی شروع به کار میکنند. شما پیشرفت را روی کانبان میبینید، diff کد را بازبینی میکنید و مستقیم با عاملها حرف میزنید."
+ },
+ {
+ "id": "privacy",
+ "question": "کد من خصوصی میماند؟",
+ "answer": "همه چیز روی دستگاه شما بهصورت محلی اجرا میشود. دادهای به سرورهای بیرونی فرستاده نمیشود. کد، مکالمهها و فعالیت عاملها خصوصی میمانند."
+ },
+ {
+ "id": "requirements",
+ "question": "برای شروع چه لازم است؟",
+ "answer": "فقط برنامه را نصب کنید - با مدل رایگان بدون احراز هویت شروع کنید و هر وقت نیاز شد مدلهای provider-backed را از UI وصل کنید."
+ }
+ ],
+ "download": {
+ "title": "دانلود",
+ "note": "پلتفرم خود را انتخاب کنید و با تیمهای عامل AI شروع به ساختن کنید."
+ },
+ "testimonials": [
+ {
+ "id": "user1",
+ "name": "Alex K.",
+ "role": "Tech Lead",
+ "text": "بالاخره ابزاری که میگذارد عاملهای AI را مثل یک تیم engineering مدیریت کنم. کانبان برای کار موازی فوقالعاده است."
+ },
+ {
+ "id": "user2",
+ "name": "Sarah M.",
+ "role": "Full-stack Developer",
+ "text": "حالت solo برای کارهای سریع عالی است. وقتی توان بیشتری لازم دارم، در چند ثانیه یک تیم کامل راه میاندازم."
+ },
+ {
+ "id": "user3",
+ "name": "David R.",
+ "role": "Senior Engineer",
+ "text": "جریان بازبینی کد عالی است: diff برای هر وظیفه، پذیرش/رد و نظر. شبیه تیمی است که واقعاً دستورالعملها را دنبال میکند."
+ },
+ {
+ "id": "user4",
+ "name": "Yuki T.",
+ "role": "DevOps Engineer",
+ "text": "پایش فرایندهای زنده و context بسیار کاربردی است. دقیقاً میبینم هر عامل چه میکند."
+ },
+ {
+ "id": "user5",
+ "name": "Maria S.",
+ "role": "Indie Developer",
+ "text": "شروع بدون تنظیمات واقعاً واقعی است: نصب، یک بار ورود و در ۵ دقیقه عاملها روی کد من کار میکردند."
+ },
+ {
+ "id": "user6",
+ "name": "Chris L.",
+ "role": "Startup CTO",
+ "text": "روش نمونهسازی من را عوض کرد. برای بخشهای مختلف stack تیم میسازم و موازی جلو میروم."
+ }
+ ],
+ "pricing": [
+ {
+ "id": "free",
+ "name": "رایگان",
+ "price": "$0",
+ "period": "",
+ "description": "با مدل رایگان داخلی بدون احراز هویت شروع کنید. بدون ثبتنام، API key یا کارت اعتباری.",
+ "features": [
+ "مدل رایگان بدون احراز هویت برای اجراهای اول",
+ "برای تست به حساب یا ورود provider نیاز نیست",
+ "دسترسی اختیاری به Claude، Codex و OpenCode",
+ "تیمهای عامل نامحدود",
+ "کانبان با بهروزرسانی لحظهای",
+ "بازبینی کد با نمای diff",
+ "ارتباط بین تیمها",
+ "حالت solo و تیمی"
+ ],
+ "highlighted": true
+ }
+ ]
+}
diff --git a/landing/content/fil.json b/landing/content/fil.json
new file mode 100644
index 00000000..a045e0c5
--- /dev/null
+++ b/landing/content/fil.json
@@ -0,0 +1,132 @@
+{
+ "hero": {
+ "title": "Agent Teams",
+ "subtitle": "Ikaw ang Boss, ang mga agent ang team mo. Sila ang humahawak ng tasks, nagme-message sa isa't isa, at nagre-review ng code. Ikaw, titingin lang sa kanban board habang nagkakape."
+ },
+ "features": [
+ {
+ "id": "agentTeams",
+ "title": "Mga agent team",
+ "description": "Gumawa ng teams na may iba't ibang role. Autonomous at parallel magtrabaho ang agents, nag-uusap sila, at nakikipag-collaborate sa ibang teams."
+ },
+ {
+ "id": "kanban",
+ "title": "Kanban board",
+ "description": "Realtime nagbabago ang task status habang nagtatrabaho ang agents. Drag, assign, review - lahat nasa visual board."
+ },
+ {
+ "id": "codeReview",
+ "title": "Code review",
+ "description": "Diff view per task na may accept, reject, at comment. Built-in code editor na may Git support."
+ },
+ {
+ "id": "crossTeam",
+ "title": "Cross-team communication",
+ "description": "Nagme-message ang agents sa loob ng team at sa pagitan ng teams. Direct messages, task comments, at quick actions."
+ },
+ {
+ "id": "soloMode",
+ "title": "Solo mode",
+ "description": "Magsimula sa isang agent na self-managed ang tasks. I-expand sa full team kapag kailangan mo ng dagdag na power."
+ },
+ {
+ "id": "liveProcesses",
+ "title": "Live processes",
+ "description": "Tingnan ang running agents, magbukas ng URLs sa browser, at i-monitor ang token usage at session context realtime."
+ }
+ ],
+ "faq": [
+ {
+ "id": "whatIsIt",
+ "question": "Ano ang Agent Teams?",
+ "answer": "Desktop app para mag-orchestrate ng AI agent teams gamit ang sarili naming local coordination layer. May roles ang agents, autonomous silang nagtatrabaho, nagco-collaborate sa kanban board, at puwedeng tumakbo sa Anthropic o Codex."
+ },
+ {
+ "id": "isFree",
+ "question": "Libre ba talaga?",
+ "answer": "Oo. Libre at open source ang app. Puwede kang magsimula sa free model na walang auth - walang registration, API key, o credit card. Kung gusto mo ng mas maraming models, ikonekta ang Claude, Codex, OpenCode/OpenRouter, o ibang supported provider."
+ },
+ {
+ "id": "platforms",
+ "question": "Anong platforms ang supported?",
+ "answer": "macOS (Apple Silicon at Intel), Windows, at Linux."
+ },
+ {
+ "id": "howItWorks",
+ "question": "Paano ito gumagana?",
+ "answer": "I-install ang app, gumawa ng team, mag-assign ng roles. Magsisimulang magtrabaho ang agents nang parallel. Minomonitor mo ang progress sa kanban, nire-review ang diffs, at direktang nakikipag-usap sa agents."
+ },
+ {
+ "id": "privacy",
+ "question": "Private ba ang code ko?",
+ "answer": "Lahat ay tumatakbo locally sa machine mo. Walang data na ipinapadala sa external servers. Private ang code, conversations, at agent activity mo."
+ },
+ {
+ "id": "requirements",
+ "question": "Ano ang kailangan para magsimula?",
+ "answer": "I-install lang ang app - magsimula sa free model na walang auth, tapos ikonekta ang provider-backed models sa UI kapag kailangan."
+ }
+ ],
+ "download": {
+ "title": "Download",
+ "note": "Piliin ang platform mo at magsimulang mag-build gamit ang AI agent teams."
+ },
+ "testimonials": [
+ {
+ "id": "user1",
+ "name": "Alex K.",
+ "role": "Tech Lead",
+ "text": "Gumawa ng teams na may iba't ibang role. Autonomous at parallel magtrabaho ang agents, nag-uusap sila, at nakikipag-collaborate sa ibang teams."
+ },
+ {
+ "id": "user2",
+ "name": "Sarah M.",
+ "role": "Full-stack Developer",
+ "text": "Magsimula sa isang agent na self-managed ang tasks. I-expand sa full team kapag kailangan mo ng dagdag na power."
+ },
+ {
+ "id": "user3",
+ "name": "David R.",
+ "role": "Senior Engineer",
+ "text": "Diff view per task na may accept, reject, at comment. Built-in code editor na may Git support."
+ },
+ {
+ "id": "user4",
+ "name": "Yuki T.",
+ "role": "DevOps Engineer",
+ "text": "Tingnan ang running agents, magbukas ng URLs sa browser, at i-monitor ang token usage at session context realtime."
+ },
+ {
+ "id": "user5",
+ "name": "Maria S.",
+ "role": "Indie Developer",
+ "text": "I-install lang ang app - magsimula sa free model na walang auth, tapos ikonekta ang provider-backed models sa UI kapag kailangan."
+ },
+ {
+ "id": "user6",
+ "name": "Chris L.",
+ "role": "Startup CTO",
+ "text": "Nagme-message ang agents sa loob ng team at sa pagitan ng teams. Direct messages, task comments, at quick actions."
+ }
+ ],
+ "pricing": [
+ {
+ "id": "free",
+ "name": "Libre",
+ "price": "$0",
+ "period": "",
+ "description": "Oo. Libre at open source ang app. Puwede kang magsimula sa free model na walang auth - walang registration, API key, o credit card. Kung gusto mo ng mas maraming models, ikonekta ang Claude, Codex, OpenCode/OpenRouter, o ibang supported provider.",
+ "features": [
+ "Mga agent team",
+ "Kanban board",
+ "Code review",
+ "Cross-team communication",
+ "Solo mode",
+ "Live processes",
+ "Private ba ang code ko?",
+ "Ano ang kailangan para magsimula?"
+ ],
+ "highlighted": true
+ }
+ ]
+}
diff --git a/landing/content/fr.json b/landing/content/fr.json
index 75f7dc28..ae2954e7 100644
--- a/landing/content/fr.json
+++ b/landing/content/fr.json
@@ -1,7 +1,7 @@
{
"hero": {
"title": "Agent Teams",
- "subtitle": "Vous êtes le CTO, les agents sont votre équipe. Ils gèrent les tâches, communiquent entre eux, révisent le code. Vous regardez le kanban et buvez votre café."
+ "subtitle": "Vous êtes le Boss, les agents sont votre équipe. Ils gèrent les tâches, communiquent entre eux, révisent le code. Vous regardez le kanban et buvez votre café."
},
"features": [
{
diff --git a/landing/content/hi.json b/landing/content/hi.json
index f779b7b8..d66e96a6 100644
--- a/landing/content/hi.json
+++ b/landing/content/hi.json
@@ -1,7 +1,7 @@
{
"hero": {
"title": "Agent Teams",
- "subtitle": "आप CTO हैं, एजेंट आपकी टीम हैं। वे खुद टास्क संभालते हैं, आपस में बात करते हैं, एक-दूसरे का कोड रिव्यू करते हैं। आप बस कानबन बोर्ड देखें और कॉफी पिएँ।"
+ "subtitle": "आप Boss हैं, एजेंट आपकी टीम हैं। वे खुद टास्क संभालते हैं, आपस में बात करते हैं, एक-दूसरे का कोड रिव्यू करते हैं। आप बस कानबन बोर्ड देखें और कॉफी पिएँ।"
},
"features": [
{
diff --git a/landing/content/id.json b/landing/content/id.json
index 25686ef6..2ec9941b 100644
--- a/landing/content/id.json
+++ b/landing/content/id.json
@@ -1,7 +1,7 @@
{
"hero": {
"title": "Agent Teams",
- "subtitle": "Kau CTO, agen adalah tim Anda. Mereka menangani tugas mereka sendiri, saling mengirim pesan, meninjau kode masing-masing. Anda hanya melihat papan kanban dan minum kopi."
+ "subtitle": "Kau Boss, agen adalah tim Anda. Mereka menangani tugas mereka sendiri, saling mengirim pesan, meninjau kode masing-masing. Anda hanya melihat papan kanban dan minum kopi."
},
"features": [
{
diff --git a/landing/content/it.json b/landing/content/it.json
new file mode 100644
index 00000000..fe55f061
--- /dev/null
+++ b/landing/content/it.json
@@ -0,0 +1,132 @@
+{
+ "hero": {
+ "title": "Agent Teams",
+ "subtitle": "Tu sei il Boss, gli agenti sono il tuo team. Gestiscono i task da soli, si scrivono, rivedono il codice a vicenda. Tu guardi la kanban board e bevi caffe."
+ },
+ "features": [
+ {
+ "id": "agentTeams",
+ "title": "Team di agenti",
+ "description": "Crea team con ruoli diversi. Gli agenti lavorano in parallelo, comunicano tra loro e collaborano anche tra team."
+ },
+ {
+ "id": "kanban",
+ "title": "Kanban Board",
+ "description": "I task cambiano stato in tempo reale mentre gli agenti lavorano. Trascina, assegna e rivedi tutto su una board visiva."
+ },
+ {
+ "id": "codeReview",
+ "title": "Code review",
+ "description": "Vista diff per ogni task con accetta, rifiuta e commenta. Editor di codice integrato con supporto Git."
+ },
+ {
+ "id": "crossTeam",
+ "title": "Comunicazione tra team",
+ "description": "Gli agenti si scrivono dentro lo stesso team e tra team diversi. Messaggi diretti, commenti ai task e azioni rapide."
+ },
+ {
+ "id": "soloMode",
+ "title": "Modalita solo",
+ "description": "Parti con un solo agente che si gestisce i task. Quando serve piu potenza, espandi a un team completo."
+ },
+ {
+ "id": "liveProcesses",
+ "title": "Processi live",
+ "description": "Vedi gli agenti in esecuzione, apri URL nel browser e monitora token e contesto della sessione in tempo reale."
+ }
+ ],
+ "faq": [
+ {
+ "id": "whatIsIt",
+ "question": "Cos'e Agent Teams?",
+ "answer": "Un'app desktop per orchestrare team di agenti AI con un livello locale di coordinamento. Gli agenti hanno ruoli, lavorano in autonomia, collaborano tramite kanban board e possono usare Anthropic o Codex."
+ },
+ {
+ "id": "isFree",
+ "question": "E davvero gratuito?",
+ "answer": "Si. L'app e gratuita e open source, e puoi iniziare con un modello gratuito senza autenticazione - niente registrazione, API key o carta di credito. Se vuoi piu modelli, collega Claude, Codex, OpenCode/OpenRouter o un altro provider supportato."
+ },
+ {
+ "id": "platforms",
+ "question": "Quali piattaforme sono supportate?",
+ "answer": "macOS (Apple Silicon e Intel), Windows e Linux."
+ },
+ {
+ "id": "howItWorks",
+ "question": "Come funziona?",
+ "answer": "Installa l'app, crea un team e assegna i ruoli. Gli agenti iniziano a lavorare in parallelo. Tu segui i progressi sulla kanban board, rivedi i diff e comunichi direttamente con gli agenti."
+ },
+ {
+ "id": "privacy",
+ "question": "Il mio codice resta privato?",
+ "answer": "Tutto gira localmente sul tuo computer. Nessun dato viene inviato a server esterni. Codice, conversazioni e attivita degli agenti restano privati."
+ },
+ {
+ "id": "requirements",
+ "question": "Cosa serve per iniziare?",
+ "answer": "Basta installare l'app - parti con il modello gratuito senza autenticazione, poi collega modelli di provider dalla UI solo quando ti servono."
+ }
+ ],
+ "download": {
+ "title": "Download",
+ "note": "Scegli la tua piattaforma e inizia a costruire con team di agenti AI."
+ },
+ "testimonials": [
+ {
+ "id": "user1",
+ "name": "Alex K.",
+ "role": "Tech Lead",
+ "text": "Finalmente uno strumento che mi fa gestire agenti AI come un vero team di engineering. La kanban board cambia tutto per il lavoro in parallelo."
+ },
+ {
+ "id": "user2",
+ "name": "Sarah M.",
+ "role": "Full-stack Developer",
+ "text": "La modalita solo e perfetta per task veloci. Quando serve piu forza, avvio un team completo in pochi secondi."
+ },
+ {
+ "id": "user3",
+ "name": "David R.",
+ "role": "Senior Engineer",
+ "text": "Il flusso di code review e ottimo: diff per task, accetta/rifiuta, commenti. Sembra un team che segue davvero le istruzioni."
+ },
+ {
+ "id": "user4",
+ "name": "Yuki T.",
+ "role": "DevOps Engineer",
+ "text": "Monitoraggio dei processi live e tracking del contesto sono utilissimi. Vedo esattamente cosa sta facendo ogni agente."
+ },
+ {
+ "id": "user5",
+ "name": "Maria S.",
+ "role": "Indie Developer",
+ "text": "Onboarding zero-setup reale: app installata, login una volta, agenti al lavoro sul mio codice in 5 minuti."
+ },
+ {
+ "id": "user6",
+ "name": "Chris L.",
+ "role": "Startup CTO",
+ "text": "Ha cambiato il mio modo di prototipare. Creo team per parti diverse dello stack e li lascio lavorare in parallelo."
+ }
+ ],
+ "pricing": [
+ {
+ "id": "free",
+ "name": "Gratis",
+ "price": "0 €",
+ "period": "",
+ "description": "Inizia con il modello gratuito incluso senza autenticazione. Nessuna registrazione, API key o carta di credito.",
+ "features": [
+ "Modello gratuito senza autenticazione per i primi run",
+ "Nessun account o login provider richiesto per provare",
+ "Accesso opzionale a Claude, Codex e OpenCode",
+ "Team di agenti illimitati",
+ "Kanban board con aggiornamenti in tempo reale",
+ "Code review con vista diff",
+ "Comunicazione tra team",
+ "Modalita solo e team"
+ ],
+ "highlighted": true
+ }
+ ]
+}
diff --git a/landing/content/ja.json b/landing/content/ja.json
index 1d31c014..7bd39d21 100644
--- a/landing/content/ja.json
+++ b/landing/content/ja.json
@@ -1,7 +1,7 @@
{
"hero": {
"title": "Agent Teams",
- "subtitle": "あなたはCTO、エージェントはあなたのチーム。タスクを自分で処理し、互いにメッセージを送り、コードをレビューする。あなたはカンバンボードを見ながらコーヒーを飲むだけ。"
+ "subtitle": "あなたはBoss、エージェントはあなたのチーム。タスクを自分で処理し、互いにメッセージを送り、コードをレビューする。あなたはカンバンボードを見ながらコーヒーを飲むだけ。"
},
"features": [
{
diff --git a/landing/content/ko.json b/landing/content/ko.json
index fcbe1948..ca259ea6 100644
--- a/landing/content/ko.json
+++ b/landing/content/ko.json
@@ -1,7 +1,7 @@
{
"hero": {
"title": "Agent Teams",
- "subtitle": "당신은 CTO이고, 에이전트들은 당신의 팀입니다. 에이전트가 직접 작업을 처리하고, 서로 메시지를 주고받고, 서로의 코드를 리뷰합니다. 당신은 칸반 보드를 보며 커피만 마시면 됩니다."
+ "subtitle": "당신은 Boss이고, 에이전트들은 당신의 팀입니다. 에이전트가 직접 작업을 처리하고, 서로 메시지를 주고받고, 서로의 코드를 리뷰합니다. 당신은 칸반 보드를 보며 커피만 마시면 됩니다."
},
"features": [
{
diff --git a/landing/content/mr.json b/landing/content/mr.json
new file mode 100644
index 00000000..9ef5a5da
--- /dev/null
+++ b/landing/content/mr.json
@@ -0,0 +1,132 @@
+{
+ "hero": {
+ "title": "Agent Teams",
+ "subtitle": "तुम्ही Boss आहात आणि agents तुमची team आहे. ते tasks स्वतः हाताळतात, एकमेकांना messages करतात आणि code review करतात. तुम्ही फक्त kanban board पाहता आणि coffee पिता."
+ },
+ "features": [
+ {
+ "id": "agentTeams",
+ "title": "Agent teams",
+ "description": "वेगवेगळ्या roles असलेल्या teams तयार करा. Agents parallel आणि autonomous काम करतात, एकमेकांशी बोलतात आणि teams मधे collaborate करतात."
+ },
+ {
+ "id": "kanban",
+ "title": "Kanban board",
+ "description": "Agents काम करत असताना task status realtime बदलतो. Drag, assign, review - सगळे visual board वर."
+ },
+ {
+ "id": "codeReview",
+ "title": "Code review",
+ "description": "प्रत्येक task साठी diff view, accept, reject आणि comments. Git support असलेला built-in code editor."
+ },
+ {
+ "id": "crossTeam",
+ "title": "Teams मधला संवाद",
+ "description": "Agents team मध्ये आणि teams मधे messages करतात. Direct messages, task comments आणि quick actions."
+ },
+ {
+ "id": "soloMode",
+ "title": "Solo mode",
+ "description": "स्वतः tasks manage करणाऱ्या एका agent पासून सुरुवात करा. जास्त power हवी तेव्हा full team करा."
+ },
+ {
+ "id": "liveProcesses",
+ "title": "Live processes",
+ "description": "Running agents पहा, browser मध्ये URLs उघडा आणि token usage व session context realtime monitor करा."
+ }
+ ],
+ "faq": [
+ {
+ "id": "whatIsIt",
+ "question": "Agent Teams म्हणजे काय?",
+ "answer": "Local coordination layer सह AI agent teams orchestrate करणारा desktop app. Agents ना roles असतात, ते autonomous काम करतात, kanban board वर collaborate करतात आणि Anthropic किंवा Codex वर run होऊ शकतात."
+ },
+ {
+ "id": "isFree",
+ "question": "हे खरंच free आहे का?",
+ "answer": "हो. App free आणि open source आहे. Auth न लागणाऱ्या free model ने सुरुवात करू शकता - registration, API key किंवा credit card नाही. जास्त models हवे असतील तर Claude, Codex, OpenCode/OpenRouter किंवा supported provider connect करा."
+ },
+ {
+ "id": "platforms",
+ "question": "कोणते platforms support आहेत?",
+ "answer": "macOS (Apple Silicon आणि Intel), Windows आणि Linux."
+ },
+ {
+ "id": "howItWorks",
+ "question": "हे कसे काम करते?",
+ "answer": "App install करा, team तयार करा, roles assign करा. Agents parallel काम सुरू करतात. तुम्ही kanban वर progress पाहता, diffs review करता आणि agents शी directly बोलता."
+ },
+ {
+ "id": "privacy",
+ "question": "माझा code private राहतो का?",
+ "answer": "सगळे तुमच्या machine वर locally चालते. Data external servers कडे जात नाही. Code, conversations आणि agent activity private राहते."
+ },
+ {
+ "id": "requirements",
+ "question": "सुरुवात करण्यासाठी काय पाहिजे?",
+ "answer": "फक्त app install करा - auth नसलेल्या free model ने सुरुवात करा, नंतर गरज लागल्यावर UI मधून provider-backed models connect करा."
+ }
+ ],
+ "download": {
+ "title": "Download",
+ "note": "तुमचा platform निवडा आणि AI agent teams सोबत build करायला सुरुवात करा."
+ },
+ "testimonials": [
+ {
+ "id": "user1",
+ "name": "Alex K.",
+ "role": "Tech Lead",
+ "text": "वेगवेगळ्या roles असलेल्या teams तयार करा. Agents parallel आणि autonomous काम करतात, एकमेकांशी बोलतात आणि teams मधे collaborate करतात."
+ },
+ {
+ "id": "user2",
+ "name": "Sarah M.",
+ "role": "Full-stack Developer",
+ "text": "स्वतः tasks manage करणाऱ्या एका agent पासून सुरुवात करा. जास्त power हवी तेव्हा full team करा."
+ },
+ {
+ "id": "user3",
+ "name": "David R.",
+ "role": "Senior Engineer",
+ "text": "प्रत्येक task साठी diff view, accept, reject आणि comments. Git support असलेला built-in code editor."
+ },
+ {
+ "id": "user4",
+ "name": "Yuki T.",
+ "role": "DevOps Engineer",
+ "text": "Running agents पहा, browser मध्ये URLs उघडा आणि token usage व session context realtime monitor करा."
+ },
+ {
+ "id": "user5",
+ "name": "Maria S.",
+ "role": "Indie Developer",
+ "text": "फक्त app install करा - auth नसलेल्या free model ने सुरुवात करा, नंतर गरज लागल्यावर UI मधून provider-backed models connect करा."
+ },
+ {
+ "id": "user6",
+ "name": "Chris L.",
+ "role": "Startup CTO",
+ "text": "Agents team मध्ये आणि teams मधे messages करतात. Direct messages, task comments आणि quick actions."
+ }
+ ],
+ "pricing": [
+ {
+ "id": "free",
+ "name": "Free",
+ "price": "$0",
+ "period": "",
+ "description": "हो. App free आणि open source आहे. Auth न लागणाऱ्या free model ने सुरुवात करू शकता - registration, API key किंवा credit card नाही. जास्त models हवे असतील तर Claude, Codex, OpenCode/OpenRouter किंवा supported provider connect करा.",
+ "features": [
+ "Agent teams",
+ "Kanban board",
+ "Code review",
+ "Teams मधला संवाद",
+ "Solo mode",
+ "Live processes",
+ "माझा code private राहतो का?",
+ "सुरुवात करण्यासाठी काय पाहिजे?"
+ ],
+ "highlighted": true
+ }
+ ]
+}
diff --git a/landing/content/ms.json b/landing/content/ms.json
new file mode 100644
index 00000000..450586b0
--- /dev/null
+++ b/landing/content/ms.json
@@ -0,0 +1,132 @@
+{
+ "hero": {
+ "title": "Agent Teams",
+ "subtitle": "Anda Boss, agent ialah pasukan anda. Mereka urus task sendiri, mesej sesama sendiri dan review kod. Anda cuma lihat papan kanban sambil minum kopi."
+ },
+ "features": [
+ {
+ "id": "agentTeams",
+ "title": "Pasukan agent",
+ "description": "Cipta pasukan dengan role berbeza. Agent bekerja secara autonomi dan selari, berkomunikasi dan bekerjasama antara pasukan."
+ },
+ {
+ "id": "kanban",
+ "title": "Papan Kanban",
+ "description": "Status task berubah secara realtime semasa agent bekerja. Drag, assign dan review semuanya pada papan visual."
+ },
+ {
+ "id": "codeReview",
+ "title": "Review kod",
+ "description": "Paparan diff untuk setiap task dengan accept, reject dan comment. Editor kod terbina dalam dengan sokongan Git."
+ },
+ {
+ "id": "crossTeam",
+ "title": "Komunikasi antara pasukan",
+ "description": "Agent menghantar mesej dalam pasukan dan antara pasukan. Mesej terus, komen task dan tindakan pantas."
+ },
+ {
+ "id": "soloMode",
+ "title": "Mod solo",
+ "description": "Mulakan dengan satu agent yang mengurus task sendiri. Kembangkan kepada pasukan penuh bila perlukan lebih kuasa."
+ },
+ {
+ "id": "liveProcesses",
+ "title": "Proses live",
+ "description": "Lihat agent yang sedang berjalan, buka URL dalam browser dan pantau token usage serta session context secara realtime."
+ }
+ ],
+ "faq": [
+ {
+ "id": "whatIsIt",
+ "question": "Apa itu Agent Teams?",
+ "answer": "Aplikasi desktop untuk mengorkestra pasukan agent AI dengan lapisan koordinasi lokal kami. Agent mempunyai role, bekerja autonomi, bekerjasama melalui kanban board dan boleh berjalan pada Anthropic atau Codex."
+ },
+ {
+ "id": "isFree",
+ "question": "Betul-betul percuma?",
+ "answer": "Ya. Aplikasi ini percuma dan open source. Anda boleh mula dengan model percuma tanpa auth - tiada pendaftaran, API key atau kad kredit. Untuk lebih banyak model, sambungkan Claude, Codex, OpenCode/OpenRouter atau provider lain yang disokong."
+ },
+ {
+ "id": "platforms",
+ "question": "Platform apa yang disokong?",
+ "answer": "macOS (Apple Silicon dan Intel), Windows dan Linux."
+ },
+ {
+ "id": "howItWorks",
+ "question": "Bagaimana ia berfungsi?",
+ "answer": "Pasang aplikasi, cipta pasukan, tetapkan role. Agent mula bekerja secara selari. Anda pantau progress pada kanban, review diff dan berkomunikasi terus dengan agent."
+ },
+ {
+ "id": "privacy",
+ "question": "Adakah kod saya private?",
+ "answer": "Semuanya berjalan secara lokal pada mesin anda. Tiada data dihantar ke server luar. Kod, perbualan dan aktiviti agent kekal private."
+ },
+ {
+ "id": "requirements",
+ "question": "Apa yang diperlukan untuk mula?",
+ "answer": "Hanya pasang aplikasi - mula dengan model percuma tanpa auth, kemudian sambungkan model provider-backed dari UI bila diperlukan."
+ }
+ ],
+ "download": {
+ "title": "Muat turun",
+ "note": "Pilih platform anda dan mula membina dengan pasukan agent AI."
+ },
+ "testimonials": [
+ {
+ "id": "user1",
+ "name": "Alex K.",
+ "role": "Tech Lead",
+ "text": "Cipta pasukan dengan role berbeza. Agent bekerja secara autonomi dan selari, berkomunikasi dan bekerjasama antara pasukan."
+ },
+ {
+ "id": "user2",
+ "name": "Sarah M.",
+ "role": "Full-stack Developer",
+ "text": "Mulakan dengan satu agent yang mengurus task sendiri. Kembangkan kepada pasukan penuh bila perlukan lebih kuasa."
+ },
+ {
+ "id": "user3",
+ "name": "David R.",
+ "role": "Senior Engineer",
+ "text": "Paparan diff untuk setiap task dengan accept, reject dan comment. Editor kod terbina dalam dengan sokongan Git."
+ },
+ {
+ "id": "user4",
+ "name": "Yuki T.",
+ "role": "DevOps Engineer",
+ "text": "Lihat agent yang sedang berjalan, buka URL dalam browser dan pantau token usage serta session context secara realtime."
+ },
+ {
+ "id": "user5",
+ "name": "Maria S.",
+ "role": "Indie Developer",
+ "text": "Hanya pasang aplikasi - mula dengan model percuma tanpa auth, kemudian sambungkan model provider-backed dari UI bila diperlukan."
+ },
+ {
+ "id": "user6",
+ "name": "Chris L.",
+ "role": "Startup CTO",
+ "text": "Agent menghantar mesej dalam pasukan dan antara pasukan. Mesej terus, komen task dan tindakan pantas."
+ }
+ ],
+ "pricing": [
+ {
+ "id": "free",
+ "name": "Percuma",
+ "price": "$0",
+ "period": "",
+ "description": "Ya. Aplikasi ini percuma dan open source. Anda boleh mula dengan model percuma tanpa auth - tiada pendaftaran, API key atau kad kredit. Untuk lebih banyak model, sambungkan Claude, Codex, OpenCode/OpenRouter atau provider lain yang disokong.",
+ "features": [
+ "Pasukan agent",
+ "Papan Kanban",
+ "Review kod",
+ "Komunikasi antara pasukan",
+ "Mod solo",
+ "Proses live",
+ "Adakah kod saya private?",
+ "Apa yang diperlukan untuk mula?"
+ ],
+ "highlighted": true
+ }
+ ]
+}
diff --git a/landing/content/nl.json b/landing/content/nl.json
new file mode 100644
index 00000000..8a59dcea
--- /dev/null
+++ b/landing/content/nl.json
@@ -0,0 +1,132 @@
+{
+ "hero": {
+ "title": "Agent Teams",
+ "subtitle": "Jij bent de Boss, de agents zijn je team. Ze pakken taken zelf op, sturen elkaar berichten en reviewen elkaars code. Jij kijkt naar het kanbanbord en drinkt koffie."
+ },
+ "features": [
+ {
+ "id": "agentTeams",
+ "title": "Agent-teams",
+ "description": "Maak teams met verschillende rollen. Agents werken autonoom parallel, communiceren met elkaar en werken samen over teams heen."
+ },
+ {
+ "id": "kanban",
+ "title": "Kanbanbord",
+ "description": "Taken veranderen realtime van status terwijl agents werken. Sleep, wijs toe en review alles op een visueel bord."
+ },
+ {
+ "id": "codeReview",
+ "title": "Code review",
+ "description": "Diff-weergave per taak met accepteren, afwijzen en comments. Ingebouwde code-editor met Git-ondersteuning."
+ },
+ {
+ "id": "crossTeam",
+ "title": "Communicatie tussen teams",
+ "description": "Agents berichten elkaar binnen en tussen teams. Directe berichten, taakcomments en snelle acties."
+ },
+ {
+ "id": "soloMode",
+ "title": "Solo-modus",
+ "description": "Start met een enkele agent die taken zelf beheert. Breid uit naar een volledig team wanneer je meer kracht nodig hebt."
+ },
+ {
+ "id": "liveProcesses",
+ "title": "Live processen",
+ "description": "Bekijk draaiende agents, open URLs in de browser en monitor tokengebruik en sessiecontext realtime."
+ }
+ ],
+ "faq": [
+ {
+ "id": "whatIsIt",
+ "question": "Wat is Agent Teams?",
+ "answer": "Een desktop-app voor het orkestreren van AI-agentteams met onze eigen lokale coordinatielaag. Agents hebben rollen, werken autonoom, werken samen via kanban en kunnen draaien op Anthropic of Codex."
+ },
+ {
+ "id": "isFree",
+ "question": "Is het echt gratis?",
+ "answer": "Ja. De app is gratis en open source. Je kunt starten met een gratis model zonder auth - geen registratie, API keys of creditcard. Voor meer modellen koppel je Claude, Codex, OpenCode/OpenRouter of een andere ondersteunde provider."
+ },
+ {
+ "id": "platforms",
+ "question": "Welke platforms worden ondersteund?",
+ "answer": "macOS (Apple Silicon en Intel), Windows en Linux."
+ },
+ {
+ "id": "howItWorks",
+ "question": "Hoe werkt het?",
+ "answer": "Installeer de app, maak een team, wijs rollen toe. Agents gaan parallel aan de slag. Jij volgt de voortgang op het kanbanbord, reviewt diffs en praat direct met agents."
+ },
+ {
+ "id": "privacy",
+ "question": "Is mijn code prive?",
+ "answer": "Alles draait lokaal op je machine. Er wordt geen data naar externe servers gestuurd. Je code, gesprekken en agentactiviteit blijven prive."
+ },
+ {
+ "id": "requirements",
+ "question": "Wat heb ik nodig om te starten?",
+ "answer": "Alleen de app installeren - begin met het gratis model zonder auth en koppel provider-backed modellen pas in de UI wanneer je ze nodig hebt."
+ }
+ ],
+ "download": {
+ "title": "Downloaden",
+ "note": "Kies je platform en begin met bouwen met AI-agentteams."
+ },
+ "testimonials": [
+ {
+ "id": "user1",
+ "name": "Alex K.",
+ "role": "Tech Lead",
+ "text": "Maak teams met verschillende rollen. Agents werken autonoom parallel, communiceren met elkaar en werken samen over teams heen."
+ },
+ {
+ "id": "user2",
+ "name": "Sarah M.",
+ "role": "Full-stack Developer",
+ "text": "Start met een enkele agent die taken zelf beheert. Breid uit naar een volledig team wanneer je meer kracht nodig hebt."
+ },
+ {
+ "id": "user3",
+ "name": "David R.",
+ "role": "Senior Engineer",
+ "text": "Diff-weergave per taak met accepteren, afwijzen en comments. Ingebouwde code-editor met Git-ondersteuning."
+ },
+ {
+ "id": "user4",
+ "name": "Yuki T.",
+ "role": "DevOps Engineer",
+ "text": "Bekijk draaiende agents, open URLs in de browser en monitor tokengebruik en sessiecontext realtime."
+ },
+ {
+ "id": "user5",
+ "name": "Maria S.",
+ "role": "Indie Developer",
+ "text": "Alleen de app installeren - begin met het gratis model zonder auth en koppel provider-backed modellen pas in de UI wanneer je ze nodig hebt."
+ },
+ {
+ "id": "user6",
+ "name": "Chris L.",
+ "role": "Startup CTO",
+ "text": "Agents berichten elkaar binnen en tussen teams. Directe berichten, taakcomments en snelle acties."
+ }
+ ],
+ "pricing": [
+ {
+ "id": "free",
+ "name": "Gratis",
+ "price": "$0",
+ "period": "",
+ "description": "Ja. De app is gratis en open source. Je kunt starten met een gratis model zonder auth - geen registratie, API keys of creditcard. Voor meer modellen koppel je Claude, Codex, OpenCode/OpenRouter of een andere ondersteunde provider.",
+ "features": [
+ "Agent-teams",
+ "Kanbanbord",
+ "Code review",
+ "Communicatie tussen teams",
+ "Solo-modus",
+ "Live processen",
+ "Is mijn code prive?",
+ "Wat heb ik nodig om te starten?"
+ ],
+ "highlighted": true
+ }
+ ]
+}
diff --git a/landing/content/pl.json b/landing/content/pl.json
new file mode 100644
index 00000000..ce4c2df2
--- /dev/null
+++ b/landing/content/pl.json
@@ -0,0 +1,132 @@
+{
+ "hero": {
+ "title": "Agent Teams",
+ "subtitle": "Ty jestes Boss, a agenci sa Twoim zespolem. Sami prowadza zadania, pisza do siebie i sprawdzaja kod. Ty patrzysz na tablice kanban i pijesz kawe."
+ },
+ "features": [
+ {
+ "id": "agentTeams",
+ "title": "Zespoly agentow",
+ "description": "Tworz zespoly z roznymi rolami. Agenci pracuja autonomicznie rownolegle, komunikuja sie i wspolpracuja miedzy zespolami."
+ },
+ {
+ "id": "kanban",
+ "title": "Tablica Kanban",
+ "description": "Statusy zadan zmieniaja sie w czasie rzeczywistym. Przeciagaj, przypisuj i sprawdzaj wszystko na wizualnej tablicy."
+ },
+ {
+ "id": "codeReview",
+ "title": "Code review",
+ "description": "Widok diff dla kazdego zadania z akceptacja, odrzuceniem i komentarzami. Wbudowany edytor kodu z obsluga Git."
+ },
+ {
+ "id": "crossTeam",
+ "title": "Komunikacja miedzy zespolami",
+ "description": "Agenci pisza do siebie w zespole i miedzy zespolami. Wiadomosci bezposrednie, komentarze do zadan i szybkie akcje."
+ },
+ {
+ "id": "soloMode",
+ "title": "Tryb solo",
+ "description": "Zacznij od jednego agenta, ktory sam zarzadza zadaniami. Gdy potrzeba wiecej mocy, rozszerz go do pelnego zespolu."
+ },
+ {
+ "id": "liveProcesses",
+ "title": "Procesy live",
+ "description": "Widzisz dzialajacych agentow, otwierasz URL w przegladarce i monitorujesz tokeny oraz kontekst sesji w czasie rzeczywistym."
+ }
+ ],
+ "faq": [
+ {
+ "id": "whatIsIt",
+ "question": "Czym jest Agent Teams?",
+ "answer": "Aplikacja desktopowa do orkiestracji zespolow agentow AI z lokalna warstwa koordynacji. Agenci maja role, pracuja autonomicznie, wspolpracuja przez kanban i moga dzialac na Anthropic lub Codex."
+ },
+ {
+ "id": "isFree",
+ "question": "Czy to naprawde darmowe?",
+ "answer": "Tak. Aplikacja jest darmowa i open source. Mozesz zaczac od darmowego modelu bez logowania - bez rejestracji, kluczy API i karty kredytowej. Jesli chcesz wiecej modeli, podlacz Claude, Codex, OpenCode/OpenRouter lub innego wspieranego providera."
+ },
+ {
+ "id": "platforms",
+ "question": "Jakie platformy sa wspierane?",
+ "answer": "macOS (Apple Silicon i Intel), Windows oraz Linux."
+ },
+ {
+ "id": "howItWorks",
+ "question": "Jak to dziala?",
+ "answer": "Instalujesz aplikacje, tworzysz zespol, przypisujesz role. Agenci zaczynaja pracowac rownolegle. Ty sledzisz postep na kanbanie, sprawdzasz diffy i rozmawiasz z agentami."
+ },
+ {
+ "id": "privacy",
+ "question": "Czy moj kod jest prywatny?",
+ "answer": "Wszystko dziala lokalnie na Twoim komputerze. Dane nie sa wysylane na zewnetrzne serwery. Kod, rozmowy i aktywnosc agentow zostaja prywatne."
+ },
+ {
+ "id": "requirements",
+ "question": "Czego potrzebuje na start?",
+ "answer": "Wystarczy zainstalowac aplikacje - zacznij od darmowego modelu bez logowania, a modele providerow podlacz z UI dopiero wtedy, gdy beda potrzebne."
+ }
+ ],
+ "download": {
+ "title": "Pobierz",
+ "note": "Wybierz platforme i zacznij budowac z zespolami agentow AI."
+ },
+ "testimonials": [
+ {
+ "id": "user1",
+ "name": "Alex K.",
+ "role": "Tech Lead",
+ "text": "Wreszcie narzedzie, ktore pozwala zarzadzac agentami AI jak zespolem engineering. Kanban bardzo pomaga przy pracy rownoleglej."
+ },
+ {
+ "id": "user2",
+ "name": "Sarah M.",
+ "role": "Full-stack Developer",
+ "text": "Tryb solo jest idealny do szybkich zadan. Gdy potrzeba wiecej mocy, uruchamiam pelny zespol w kilka sekund."
+ },
+ {
+ "id": "user3",
+ "name": "David R.",
+ "role": "Senior Engineer",
+ "text": "Workflow code review jest swietny: diff per zadanie, akceptacja, odrzucenie, komentarze. Jak zespol, ktory naprawde slucha instrukcji."
+ },
+ {
+ "id": "user4",
+ "name": "Yuki T.",
+ "role": "DevOps Engineer",
+ "text": "Monitorowanie procesow live i kontekstu jest bardzo przydatne. Widze dokladnie, co robi kazdy agent."
+ },
+ {
+ "id": "user5",
+ "name": "Maria S.",
+ "role": "Indie Developer",
+ "text": "Zero-setup onboarding jest prawdziwy: aplikacja, jedno logowanie i po 5 minutach agenci pracowali na moim kodzie."
+ },
+ {
+ "id": "user6",
+ "name": "Chris L.",
+ "role": "Startup CTO",
+ "text": "To zmienilo moje prototypowanie. Tworze zespoly do roznych czesci stacka i puszczam je rownolegle."
+ }
+ ],
+ "pricing": [
+ {
+ "id": "free",
+ "name": "Darmowy",
+ "price": "0 zl",
+ "period": "",
+ "description": "Zacznij od wbudowanego darmowego modelu bez logowania. Bez rejestracji, klucza API i karty kredytowej.",
+ "features": [
+ "Darmowy model bez logowania na pierwsze uruchomienia",
+ "Bez konta i logowania providera do testu",
+ "Opcjonalny dostep do Claude, Codex i OpenCode",
+ "Nielimitowane zespoly agentow",
+ "Kanban z aktualizacjami live",
+ "Code review z widokiem diff",
+ "Komunikacja miedzy zespolami",
+ "Tryb solo i zespolowy"
+ ],
+ "highlighted": true
+ }
+ ]
+}
diff --git a/landing/content/pt.json b/landing/content/pt.json
index 6cee9a15..74a36bda 100644
--- a/landing/content/pt.json
+++ b/landing/content/pt.json
@@ -1,7 +1,7 @@
{
"hero": {
"title": "Agent Teams",
- "subtitle": "Você é o CTO, os agentes são sua equipe. Eles cuidam das tarefas sozinhos, se comunicam entre si, revisam o código uns dos outros. Você só olha o quadro kanban e toma café."
+ "subtitle": "Você é o Boss, os agentes são sua equipe. Eles cuidam das tarefas sozinhos, se comunicam entre si, revisam o código uns dos outros. Você só olha o quadro kanban e toma café."
},
"features": [
{
diff --git a/landing/content/ro.json b/landing/content/ro.json
new file mode 100644
index 00000000..3e744aab
--- /dev/null
+++ b/landing/content/ro.json
@@ -0,0 +1,132 @@
+{
+ "hero": {
+ "title": "Agent Teams",
+ "subtitle": "Tu esti Boss-ul, agentii sunt echipa ta. Ei gestioneaza taskurile singuri, isi trimit mesaje si isi fac code review. Tu te uiti la kanban board si bei cafea."
+ },
+ "features": [
+ {
+ "id": "agentTeams",
+ "title": "Echipe de agenti",
+ "description": "Creeaza echipe cu roluri diferite. Agentii lucreaza autonom in paralel, comunica intre ei si colaboreaza intre echipe."
+ },
+ {
+ "id": "kanban",
+ "title": "Kanban board",
+ "description": "Statusul taskurilor se schimba in timp real pe masura ce agentii lucreaza. Tragi, atribui si revizuiesti totul pe un board vizual."
+ },
+ {
+ "id": "codeReview",
+ "title": "Code review",
+ "description": "Diff view pentru fiecare task cu accept, reject si comentarii. Editor de cod integrat cu suport Git."
+ },
+ {
+ "id": "crossTeam",
+ "title": "Comunicare intre echipe",
+ "description": "Agentii isi trimit mesaje in aceeasi echipa si intre echipe. Mesaje directe, comentarii pe taskuri si actiuni rapide."
+ },
+ {
+ "id": "soloMode",
+ "title": "Mod solo",
+ "description": "Incepe cu un singur agent care isi gestioneaza taskurile. Extinde la o echipa completa cand ai nevoie de mai multa putere."
+ },
+ {
+ "id": "liveProcesses",
+ "title": "Procese live",
+ "description": "Vezi agentii care ruleaza, deschizi URL-uri in browser si monitorizezi token usage si session context in timp real."
+ }
+ ],
+ "faq": [
+ {
+ "id": "whatIsIt",
+ "question": "Ce este Agent Teams?",
+ "answer": "O aplicatie desktop pentru orchestrarea echipelor de agenti AI cu propriul nostru strat local de coordonare. Agentii au roluri, lucreaza autonom, colaboreaza prin kanban si pot rula pe Anthropic sau Codex."
+ },
+ {
+ "id": "isFree",
+ "question": "Chiar este gratuit?",
+ "answer": "Da. Aplicatia este gratuita si open source. Poti incepe cu un model gratuit fara auth - fara inregistrare, API key sau card. Pentru mai multe modele, conecteaza Claude, Codex, OpenCode/OpenRouter sau alt provider suportat."
+ },
+ {
+ "id": "platforms",
+ "question": "Ce platforme sunt suportate?",
+ "answer": "macOS (Apple Silicon si Intel), Windows si Linux."
+ },
+ {
+ "id": "howItWorks",
+ "question": "Cum functioneaza?",
+ "answer": "Instalezi aplicatia, creezi o echipa, atribui roluri. Agentii incep sa lucreze in paralel. Urmaresti progresul in kanban, revizuiesti diffs si comunici direct cu agentii."
+ },
+ {
+ "id": "privacy",
+ "question": "Codul meu ramane privat?",
+ "answer": "Totul ruleaza local pe masina ta. Nu se trimit date catre servere externe. Codul, conversatiile si activitatea agentilor raman private."
+ },
+ {
+ "id": "requirements",
+ "question": "De ce am nevoie pentru start?",
+ "answer": "Doar instalezi aplicatia - incepi cu modelul gratuit fara auth, apoi conectezi modele provider-backed din UI cand ai nevoie."
+ }
+ ],
+ "download": {
+ "title": "Descarca",
+ "note": "Alege platforma si incepe sa construiesti cu echipe de agenti AI."
+ },
+ "testimonials": [
+ {
+ "id": "user1",
+ "name": "Alex K.",
+ "role": "Tech Lead",
+ "text": "Creeaza echipe cu roluri diferite. Agentii lucreaza autonom in paralel, comunica intre ei si colaboreaza intre echipe."
+ },
+ {
+ "id": "user2",
+ "name": "Sarah M.",
+ "role": "Full-stack Developer",
+ "text": "Incepe cu un singur agent care isi gestioneaza taskurile. Extinde la o echipa completa cand ai nevoie de mai multa putere."
+ },
+ {
+ "id": "user3",
+ "name": "David R.",
+ "role": "Senior Engineer",
+ "text": "Diff view pentru fiecare task cu accept, reject si comentarii. Editor de cod integrat cu suport Git."
+ },
+ {
+ "id": "user4",
+ "name": "Yuki T.",
+ "role": "DevOps Engineer",
+ "text": "Vezi agentii care ruleaza, deschizi URL-uri in browser si monitorizezi token usage si session context in timp real."
+ },
+ {
+ "id": "user5",
+ "name": "Maria S.",
+ "role": "Indie Developer",
+ "text": "Doar instalezi aplicatia - incepi cu modelul gratuit fara auth, apoi conectezi modele provider-backed din UI cand ai nevoie."
+ },
+ {
+ "id": "user6",
+ "name": "Chris L.",
+ "role": "Startup CTO",
+ "text": "Agentii isi trimit mesaje in aceeasi echipa si intre echipe. Mesaje directe, comentarii pe taskuri si actiuni rapide."
+ }
+ ],
+ "pricing": [
+ {
+ "id": "free",
+ "name": "Gratuit",
+ "price": "$0",
+ "period": "",
+ "description": "Da. Aplicatia este gratuita si open source. Poti incepe cu un model gratuit fara auth - fara inregistrare, API key sau card. Pentru mai multe modele, conecteaza Claude, Codex, OpenCode/OpenRouter sau alt provider suportat.",
+ "features": [
+ "Echipe de agenti",
+ "Kanban board",
+ "Code review",
+ "Comunicare intre echipe",
+ "Mod solo",
+ "Procese live",
+ "Codul meu ramane privat?",
+ "De ce am nevoie pentru start?"
+ ],
+ "highlighted": true
+ }
+ ]
+}
diff --git a/landing/content/ru.json b/landing/content/ru.json
index 217dd874..8d2f5613 100644
--- a/landing/content/ru.json
+++ b/landing/content/ru.json
@@ -1,7 +1,7 @@
{
"hero": {
"title": "Agent Teams",
- "subtitle": "Вы — CTO, агенты — ваша команда. Они сами берут задачи, переписываются друг с другом, ревьюят код друг друга. А вы просто смотрите на канбан-доску и пьёте кофе."
+ "subtitle": "Вы — Boss, агенты — ваша команда. Они сами берут задачи, переписываются друг с другом, ревьюят код друг друга. А вы просто смотрите на канбан-доску и пьёте кофе."
},
"features": [
{
diff --git a/landing/content/sw.json b/landing/content/sw.json
new file mode 100644
index 00000000..7c01f7cc
--- /dev/null
+++ b/landing/content/sw.json
@@ -0,0 +1,132 @@
+{
+ "hero": {
+ "title": "Agent Teams",
+ "subtitle": "Wewe ndiye Boss, agents ni timu yako. Zinashughulikia tasks zenyewe, zinatumiana ujumbe na kureview code. Wewe unaangalia kanban board na kunywa kahawa."
+ },
+ "features": [
+ {
+ "id": "agentTeams",
+ "title": "Timu za agents",
+ "description": "Unda timu zenye roles tofauti. Agents hufanya kazi kwa kujitegemea na kwa parallel, huwasiliana na kushirikiana kati ya timu."
+ },
+ {
+ "id": "kanban",
+ "title": "Kanban board",
+ "description": "Status za tasks hubadilika realtime agents zinapofanya kazi. Drag, assign na review vyote kwenye board ya kuona."
+ },
+ {
+ "id": "codeReview",
+ "title": "Code review",
+ "description": "Diff view kwa kila task pamoja na accept, reject na comment. Code editor ya ndani yenye Git support."
+ },
+ {
+ "id": "crossTeam",
+ "title": "Mawasiliano kati ya timu",
+ "description": "Agents hutumiana ujumbe ndani ya timu na kati ya timu. Direct messages, task comments na quick actions."
+ },
+ {
+ "id": "soloMode",
+ "title": "Solo mode",
+ "description": "Anza na agent mmoja anayejisimamia tasks. Panua kuwa timu kamili unapohitaji nguvu zaidi."
+ },
+ {
+ "id": "liveProcesses",
+ "title": "Live processes",
+ "description": "Ona agents zinazoendelea, fungua URLs kwenye browser na fuatilia token usage na session context realtime."
+ }
+ ],
+ "faq": [
+ {
+ "id": "whatIsIt",
+ "question": "Agent Teams ni nini?",
+ "answer": "Desktop app ya kuendesha timu za AI agents kwa local coordination layer yetu. Agents zina roles, hufanya kazi autonomously, hushirikiana kupitia kanban board na zinaweza kutumia Anthropic au Codex."
+ },
+ {
+ "id": "isFree",
+ "question": "Je, ni bure kweli?",
+ "answer": "Ndiyo. App ni bure na open source. Unaweza kuanza na free model bila auth - hakuna registration, API key au credit card. Kwa models zaidi, unganisha Claude, Codex, OpenCode/OpenRouter au provider mwingine unaoungwa mkono."
+ },
+ {
+ "id": "platforms",
+ "question": "Ni platforms zipi zinaungwa mkono?",
+ "answer": "macOS (Apple Silicon na Intel), Windows na Linux."
+ },
+ {
+ "id": "howItWorks",
+ "question": "Inafanyaje kazi?",
+ "answer": "Install app, unda team, gawa roles. Agents zinaanza kufanya kazi parallel. Unaangalia progress kwenye kanban, kureview diffs na kuzungumza moja kwa moja na agents."
+ },
+ {
+ "id": "privacy",
+ "question": "Code yangu ni private?",
+ "answer": "Kila kitu huendeshwa locally kwenye machine yako. Hakuna data hutumwa kwa external servers. Code, conversations na agent activity zinabaki private."
+ },
+ {
+ "id": "requirements",
+ "question": "Ninahitaji nini kuanza?",
+ "answer": "Install app tu - anza na free model bila auth, kisha unganisha provider-backed models kwenye UI unapozihitaji."
+ }
+ ],
+ "download": {
+ "title": "Download",
+ "note": "Chagua platform yako na uanze kujenga na timu za AI agents."
+ },
+ "testimonials": [
+ {
+ "id": "user1",
+ "name": "Alex K.",
+ "role": "Tech Lead",
+ "text": "Unda timu zenye roles tofauti. Agents hufanya kazi kwa kujitegemea na kwa parallel, huwasiliana na kushirikiana kati ya timu."
+ },
+ {
+ "id": "user2",
+ "name": "Sarah M.",
+ "role": "Full-stack Developer",
+ "text": "Anza na agent mmoja anayejisimamia tasks. Panua kuwa timu kamili unapohitaji nguvu zaidi."
+ },
+ {
+ "id": "user3",
+ "name": "David R.",
+ "role": "Senior Engineer",
+ "text": "Diff view kwa kila task pamoja na accept, reject na comment. Code editor ya ndani yenye Git support."
+ },
+ {
+ "id": "user4",
+ "name": "Yuki T.",
+ "role": "DevOps Engineer",
+ "text": "Ona agents zinazoendelea, fungua URLs kwenye browser na fuatilia token usage na session context realtime."
+ },
+ {
+ "id": "user5",
+ "name": "Maria S.",
+ "role": "Indie Developer",
+ "text": "Install app tu - anza na free model bila auth, kisha unganisha provider-backed models kwenye UI unapozihitaji."
+ },
+ {
+ "id": "user6",
+ "name": "Chris L.",
+ "role": "Startup CTO",
+ "text": "Agents hutumiana ujumbe ndani ya timu na kati ya timu. Direct messages, task comments na quick actions."
+ }
+ ],
+ "pricing": [
+ {
+ "id": "free",
+ "name": "Bure",
+ "price": "$0",
+ "period": "",
+ "description": "Ndiyo. App ni bure na open source. Unaweza kuanza na free model bila auth - hakuna registration, API key au credit card. Kwa models zaidi, unganisha Claude, Codex, OpenCode/OpenRouter au provider mwingine unaoungwa mkono.",
+ "features": [
+ "Timu za agents",
+ "Kanban board",
+ "Code review",
+ "Mawasiliano kati ya timu",
+ "Solo mode",
+ "Live processes",
+ "Code yangu ni private?",
+ "Ninahitaji nini kuanza?"
+ ],
+ "highlighted": true
+ }
+ ]
+}
diff --git a/landing/content/ta.json b/landing/content/ta.json
new file mode 100644
index 00000000..4ab5e5bd
--- /dev/null
+++ b/landing/content/ta.json
@@ -0,0 +1,132 @@
+{
+ "hero": {
+ "title": "Agent Teams",
+ "subtitle": "நீங்கள் Boss, agents உங்கள் குழு. அவை tasks-ஐ தானாக நடத்தும், ஒருவருக்கொருவர் செய்தி அனுப்பும், code review செய்யும். நீங்கள் kanban board-ஐ பார்த்து காபி குடிக்கலாம்."
+ },
+ "features": [
+ {
+ "id": "agentTeams",
+ "title": "Agent குழுக்கள்",
+ "description": "வேறு வேறு roles உடன் குழுக்கள் உருவாக்குங்கள். Agents parallel ஆக தானாக வேலை செய்து, பேசிக் கொண்டு, குழுக்களுக்குள் இணைந்து செயல்படும்."
+ },
+ {
+ "id": "kanban",
+ "title": "Kanban board",
+ "description": "Agents வேலை செய்யும் போது task status நேரடியாக மாறும். Drag, assign, review - எல்லாம் ஒரு visual board-ல்."
+ },
+ {
+ "id": "codeReview",
+ "title": "Code review",
+ "description": "ஒவ்வொரு task-க்கும் diff view, accept, reject, comment. Git support உடன் built-in code editor."
+ },
+ {
+ "id": "crossTeam",
+ "title": "குழுக்கள் இடையேயான தொடர்பு",
+ "description": "Agents ஒரே குழுவிலும் பல குழுக்களிடையிலும் message செய்கின்றன. Direct messages, task comments, quick actions."
+ },
+ {
+ "id": "soloMode",
+ "title": "Solo mode",
+ "description": "தன் tasks-ஐ தானாக நிர்வகிக்கும் ஒரு agent-இல் தொடங்குங்கள். அதிக சக்தி தேவைப்பட்டால் முழு குழுவாக விரிவாக்குங்கள்."
+ },
+ {
+ "id": "liveProcesses",
+ "title": "Live processes",
+ "description": "இயங்கும் agents-ஐ பார்க்கவும், browser-ல் URLs திறக்கவும், token usage மற்றும் session context-ஐ real time-ல் கண்காணிக்கவும்."
+ }
+ ],
+ "faq": [
+ {
+ "id": "whatIsIt",
+ "question": "Agent Teams என்றால் என்ன?",
+ "answer": "உள்ளூர் coordination layer உடன் AI agent குழுக்களை இயக்கும் desktop app. Agents-க்கு roles இருக்கும், அவை autonomous ஆக வேலை செய்யும், kanban board மூலம் collaborate செய்யும், Anthropic அல்லது Codex-ல் இயங்கும்."
+ },
+ {
+ "id": "isFree",
+ "question": "இது உண்மையில் இலவசமா?",
+ "answer": "ஆம். App இலவசமும் open source-மும். Auth இல்லாத free model-ல் தொடங்கலாம் - பதிவு, API key, credit card எதுவும் தேவையில்லை. மேலும் models வேண்டுமெனில் Claude, Codex, OpenCode/OpenRouter அல்லது supported provider-ஐ இணைக்கவும்."
+ },
+ {
+ "id": "platforms",
+ "question": "எந்த platforms support?",
+ "answer": "macOS (Apple Silicon மற்றும் Intel), Windows, Linux."
+ },
+ {
+ "id": "howItWorks",
+ "question": "எப்படி வேலை செய்கிறது?",
+ "answer": "App install செய்யுங்கள், team உருவாக்குங்கள், roles assign செய்யுங்கள். Agents parallel ஆக வேலை தொடங்கும். நீங்கள் kanban-ல் progress பார்க்கலாம், diffs review செய்யலாம், agents-ுடன் நேரடியாக பேசலாம்."
+ },
+ {
+ "id": "privacy",
+ "question": "என் code private ஆக இருக்குமா?",
+ "answer": "எல்லாம் உங்கள் machine-ல் locally ஓடும். Data வெளி servers-க்கு அனுப்பப்படாது. Code, conversations, agent activity அனைத்தும் private."
+ },
+ {
+ "id": "requirements",
+ "question": "தொடங்க என்ன தேவை?",
+ "answer": "App install செய்தாலே போதும் - auth இல்லாத free model-ல் தொடங்கி, தேவைப்பட்டால் UI-யில் provider-backed models இணைக்கவும்."
+ }
+ ],
+ "download": {
+ "title": "Download",
+ "note": "உங்கள் platform-ஐ தேர்ந்தெடுத்து AI agent குழுக்களுடன் build செய்ய தொடங்குங்கள்."
+ },
+ "testimonials": [
+ {
+ "id": "user1",
+ "name": "Alex K.",
+ "role": "Tech Lead",
+ "text": "வேறு வேறு roles உடன் குழுக்கள் உருவாக்குங்கள். Agents parallel ஆக தானாக வேலை செய்து, பேசிக் கொண்டு, குழுக்களுக்குள் இணைந்து செயல்படும்."
+ },
+ {
+ "id": "user2",
+ "name": "Sarah M.",
+ "role": "Full-stack Developer",
+ "text": "தன் tasks-ஐ தானாக நிர்வகிக்கும் ஒரு agent-இல் தொடங்குங்கள். அதிக சக்தி தேவைப்பட்டால் முழு குழுவாக விரிவாக்குங்கள்."
+ },
+ {
+ "id": "user3",
+ "name": "David R.",
+ "role": "Senior Engineer",
+ "text": "ஒவ்வொரு task-க்கும் diff view, accept, reject, comment. Git support உடன் built-in code editor."
+ },
+ {
+ "id": "user4",
+ "name": "Yuki T.",
+ "role": "DevOps Engineer",
+ "text": "இயங்கும் agents-ஐ பார்க்கவும், browser-ல் URLs திறக்கவும், token usage மற்றும் session context-ஐ real time-ல் கண்காணிக்கவும்."
+ },
+ {
+ "id": "user5",
+ "name": "Maria S.",
+ "role": "Indie Developer",
+ "text": "App install செய்தாலே போதும் - auth இல்லாத free model-ல் தொடங்கி, தேவைப்பட்டால் UI-யில் provider-backed models இணைக்கவும்."
+ },
+ {
+ "id": "user6",
+ "name": "Chris L.",
+ "role": "Startup CTO",
+ "text": "Agents ஒரே குழுவிலும் பல குழுக்களிடையிலும் message செய்கின்றன. Direct messages, task comments, quick actions."
+ }
+ ],
+ "pricing": [
+ {
+ "id": "free",
+ "name": "இலவசம்",
+ "price": "$0",
+ "period": "",
+ "description": "ஆம். App இலவசமும் open source-மும். Auth இல்லாத free model-ல் தொடங்கலாம் - பதிவு, API key, credit card எதுவும் தேவையில்லை. மேலும் models வேண்டுமெனில் Claude, Codex, OpenCode/OpenRouter அல்லது supported provider-ஐ இணைக்கவும்.",
+ "features": [
+ "Agent குழுக்கள்",
+ "Kanban board",
+ "Code review",
+ "குழுக்கள் இடையேயான தொடர்பு",
+ "Solo mode",
+ "Live processes",
+ "என் code private ஆக இருக்குமா?",
+ "தொடங்க என்ன தேவை?"
+ ],
+ "highlighted": true
+ }
+ ]
+}
diff --git a/landing/content/te.json b/landing/content/te.json
new file mode 100644
index 00000000..24fd5257
--- /dev/null
+++ b/landing/content/te.json
@@ -0,0 +1,132 @@
+{
+ "hero": {
+ "title": "Agent Teams",
+ "subtitle": "మీరు Boss, agents మీ టీమ్. అవి tasks ను తామే తీసుకుంటాయి, ఒకదానికొకటి message చేస్తాయి, code review చేస్తాయి. మీరు kanban board చూస్తూ coffee తాగొచ్చు."
+ },
+ "features": [
+ {
+ "id": "agentTeams",
+ "title": "Agent టీమ్లు",
+ "description": "వేర్వేరు roles తో టీమ్లు సృష్టించండి. Agents parallel గా autonomous గా పని చేస్తాయి, మాట్లాడుకుంటాయి, టీమ్ల మధ్య collaborate చేస్తాయి."
+ },
+ {
+ "id": "kanban",
+ "title": "Kanban board",
+ "description": "Agents పని చేస్తుండగా task status realtime లో మారుతుంది. Drag, assign, review - అన్నీ ఒక visual board లో."
+ },
+ {
+ "id": "codeReview",
+ "title": "Code review",
+ "description": "ప్రతి task కి diff view, accept, reject, comment. Git support తో built-in code editor."
+ },
+ {
+ "id": "crossTeam",
+ "title": "టీమ్ల మధ్య కమ్యూనికేషన్",
+ "description": "Agents ఒకే టీమ్లోనూ, టీమ్ల మధ్యనూ message చేస్తాయి. Direct messages, task comments, quick actions."
+ },
+ {
+ "id": "soloMode",
+ "title": "Solo mode",
+ "description": "తన tasks తానే నిర్వహించే ఒక agent తో ప్రారంభించండి. మరింత power కావాలంటే full team గా విస్తరించండి."
+ },
+ {
+ "id": "liveProcesses",
+ "title": "Live processes",
+ "description": "Running agents చూడండి, URLs ను browser లో open చేయండి, token usage మరియు session context realtime లో monitor చేయండి."
+ }
+ ],
+ "faq": [
+ {
+ "id": "whatIsIt",
+ "question": "Agent Teams అంటే ఏమిటి?",
+ "answer": "మా local coordination layer తో AI agent teams ని orchestrate చేసే desktop app. Agents కు roles ఉంటాయి, autonomous గా పని చేస్తాయి, kanban board ద్వారా collaborate చేస్తాయి, Anthropic లేదా Codex మీద run అవుతాయి."
+ },
+ {
+ "id": "isFree",
+ "question": "ఇది నిజంగా free నా?",
+ "answer": "అవును. App free మరియు open source. Auth అవసరం లేని free model తో మొదలుపెట్టవచ్చు - registration, API key, credit card అవసరం లేదు. మరిన్ని models కోసం Claude, Codex, OpenCode/OpenRouter లేదా supported provider connect చేయండి."
+ },
+ {
+ "id": "platforms",
+ "question": "ఏ platforms support?",
+ "answer": "macOS (Apple Silicon మరియు Intel), Windows, Linux."
+ },
+ {
+ "id": "howItWorks",
+ "question": "ఇది ఎలా పని చేస్తుంది?",
+ "answer": "App install చేయండి, team create చేయండి, roles assign చేయండి. Agents parallel గా పని మొదలుపెడతాయి. మీరు kanban లో progress చూస్తారు, diffs review చేస్తారు, agents తో directly మాట్లాడతారు."
+ },
+ {
+ "id": "privacy",
+ "question": "నా code private గా ఉంటుందా?",
+ "answer": "అన్నీ మీ machine లో locally run అవుతాయి. Data external servers కు పంపబడదు. Code, conversations, agent activity private గానే ఉంటాయి."
+ },
+ {
+ "id": "requirements",
+ "question": "మొదలు పెట్టడానికి ఏమి కావాలి?",
+ "answer": "App install చేస్తే చాలు - auth లేని free model తో మొదలుపెట్టి, అవసరమైతే UI నుండి provider-backed models connect చేయండి."
+ }
+ ],
+ "download": {
+ "title": "Download",
+ "note": "మీ platform ఎంచుకుని AI agent teams తో build చేయడం మొదలుపెట్టండి."
+ },
+ "testimonials": [
+ {
+ "id": "user1",
+ "name": "Alex K.",
+ "role": "Tech Lead",
+ "text": "వేర్వేరు roles తో టీమ్లు సృష్టించండి. Agents parallel గా autonomous గా పని చేస్తాయి, మాట్లాడుకుంటాయి, టీమ్ల మధ్య collaborate చేస్తాయి."
+ },
+ {
+ "id": "user2",
+ "name": "Sarah M.",
+ "role": "Full-stack Developer",
+ "text": "తన tasks తానే నిర్వహించే ఒక agent తో ప్రారంభించండి. మరింత power కావాలంటే full team గా విస్తరించండి."
+ },
+ {
+ "id": "user3",
+ "name": "David R.",
+ "role": "Senior Engineer",
+ "text": "ప్రతి task కి diff view, accept, reject, comment. Git support తో built-in code editor."
+ },
+ {
+ "id": "user4",
+ "name": "Yuki T.",
+ "role": "DevOps Engineer",
+ "text": "Running agents చూడండి, URLs ను browser లో open చేయండి, token usage మరియు session context realtime లో monitor చేయండి."
+ },
+ {
+ "id": "user5",
+ "name": "Maria S.",
+ "role": "Indie Developer",
+ "text": "App install చేస్తే చాలు - auth లేని free model తో మొదలుపెట్టి, అవసరమైతే UI నుండి provider-backed models connect చేయండి."
+ },
+ {
+ "id": "user6",
+ "name": "Chris L.",
+ "role": "Startup CTO",
+ "text": "Agents ఒకే టీమ్లోనూ, టీమ్ల మధ్యనూ message చేస్తాయి. Direct messages, task comments, quick actions."
+ }
+ ],
+ "pricing": [
+ {
+ "id": "free",
+ "name": "Free",
+ "price": "$0",
+ "period": "",
+ "description": "అవును. App free మరియు open source. Auth అవసరం లేని free model తో మొదలుపెట్టవచ్చు - registration, API key, credit card అవసరం లేదు. మరిన్ని models కోసం Claude, Codex, OpenCode/OpenRouter లేదా supported provider connect చేయండి.",
+ "features": [
+ "Agent టీమ్లు",
+ "Kanban board",
+ "Code review",
+ "టీమ్ల మధ్య కమ్యూనికేషన్",
+ "Solo mode",
+ "Live processes",
+ "నా code private గా ఉంటుందా?",
+ "మొదలు పెట్టడానికి ఏమి కావాలి?"
+ ],
+ "highlighted": true
+ }
+ ]
+}
diff --git a/landing/content/th.json b/landing/content/th.json
new file mode 100644
index 00000000..1890a8fe
--- /dev/null
+++ b/landing/content/th.json
@@ -0,0 +1,132 @@
+{
+ "hero": {
+ "title": "Agent Teams",
+ "subtitle": "คุณคือ Boss และเอเจนต์คือทีมของคุณ พวกมันจัดการงานเอง ส่งข้อความหากัน และรีวิวโค้ดให้กัน คุณแค่ดูบอร์ดคัมบังแล้วจิบกาแฟ"
+ },
+ "features": [
+ {
+ "id": "agentTeams",
+ "title": "ทีมเอเจนต์",
+ "description": "สร้างทีมที่มีบทบาทต่างกัน เอเจนต์ทำงานแบบขนาน สื่อสารกัน และร่วมมือข้ามทีม"
+ },
+ {
+ "id": "kanban",
+ "title": "บอร์ดคัมบัง",
+ "description": "สถานะงานเปลี่ยนแบบเรียลไทม์ ลาก วาง มอบหมาย และรีวิวได้บนบอร์ดเดียว"
+ },
+ {
+ "id": "codeReview",
+ "title": "รีวิวโค้ด",
+ "description": "ดู diff ต่อ task พร้อม accept, reject และ comment มี editor ในตัวพร้อม Git"
+ },
+ {
+ "id": "crossTeam",
+ "title": "การสื่อสารข้ามทีม",
+ "description": "เอเจนต์ส่งข้อความทั้งในทีมและข้ามทีม มีข้อความตรง comment งาน และ action ด่วน"
+ },
+ {
+ "id": "soloMode",
+ "title": "โหมด Solo",
+ "description": "เริ่มด้วยเอเจนต์เดียวที่จัดการงานเอง แล้วขยายเป็นทีมเต็มเมื่อคุณต้องการพลังเพิ่ม"
+ },
+ {
+ "id": "liveProcesses",
+ "title": "โปรเซสสด",
+ "description": "ดูเอเจนต์ที่กำลังรัน เปิด URL ใน browser และติดตาม token กับ context แบบเรียลไทม์"
+ }
+ ],
+ "faq": [
+ {
+ "id": "whatIsIt",
+ "question": "Agent Teams คืออะไร?",
+ "answer": "แอปเดสก์ท็อปสำหรับจัดการทีมเอเจนต์ AI ด้วยชั้นประสานงานในเครื่อง เอเจนต์มีบทบาท ทำงานอัตโนมัติ ร่วมมือผ่านคัมบัง และใช้ Anthropic หรือ Codex ได้"
+ },
+ {
+ "id": "isFree",
+ "question": "ฟรีจริงไหม?",
+ "answer": "ใช่ แอปฟรีและเป็น open source เริ่มด้วยโมเดลฟรีที่ไม่ต้อง auth ได้เลย - ไม่ต้องสมัคร ไม่ต้องใช้ API key หรือบัตรเครดิต ถ้าต้องการโมเดลเพิ่ม ให้เชื่อม Claude, Codex, OpenCode/OpenRouter หรือ provider ที่รองรับ"
+ },
+ {
+ "id": "platforms",
+ "question": "รองรับแพลตฟอร์มใดบ้าง?",
+ "answer": "macOS (Apple Silicon และ Intel), Windows และ Linux"
+ },
+ {
+ "id": "howItWorks",
+ "question": "ทำงานอย่างไร?",
+ "answer": "ติดตั้งแอป สร้างทีม กำหนดบทบาท แล้วเอเจนต์จะเริ่มทำงานแบบขนาน คุณติดตามบนคัมบัง รีวิว diff และคุยกับเอเจนต์โดยตรง"
+ },
+ {
+ "id": "privacy",
+ "question": "โค้ดของฉันเป็นส่วนตัวไหม?",
+ "answer": "ทุกอย่างทำงานในเครื่องคุณ ไม่มีข้อมูลส่งไป server ภายนอก โค้ด บทสนทนา และกิจกรรมของเอเจนต์ยังเป็นส่วนตัว"
+ },
+ {
+ "id": "requirements",
+ "question": "ต้องใช้อะไรเพื่อเริ่มต้น?",
+ "answer": "แค่ติดตั้งแอป - เริ่มด้วยโมเดลฟรีไม่ต้อง auth แล้วค่อยเชื่อมโมเดลจาก provider ใน UI เมื่อจำเป็น"
+ }
+ ],
+ "download": {
+ "title": "ดาวน์โหลด",
+ "note": "เลือกแพลตฟอร์มของคุณ แล้วเริ่มสร้างงานด้วยทีมเอเจนต์ AI"
+ },
+ "testimonials": [
+ {
+ "id": "user1",
+ "name": "Alex K.",
+ "role": "Tech Lead",
+ "text": "สร้างทีมที่มีบทบาทต่างกัน เอเจนต์ทำงานแบบขนาน สื่อสารกัน และร่วมมือข้ามทีม"
+ },
+ {
+ "id": "user2",
+ "name": "Sarah M.",
+ "role": "Full-stack Developer",
+ "text": "เริ่มด้วยเอเจนต์เดียวที่จัดการงานเอง แล้วขยายเป็นทีมเต็มเมื่อคุณต้องการพลังเพิ่ม"
+ },
+ {
+ "id": "user3",
+ "name": "David R.",
+ "role": "Senior Engineer",
+ "text": "ดู diff ต่อ task พร้อม accept, reject และ comment มี editor ในตัวพร้อม Git"
+ },
+ {
+ "id": "user4",
+ "name": "Yuki T.",
+ "role": "DevOps Engineer",
+ "text": "ดูเอเจนต์ที่กำลังรัน เปิด URL ใน browser และติดตาม token กับ context แบบเรียลไทม์"
+ },
+ {
+ "id": "user5",
+ "name": "Maria S.",
+ "role": "Indie Developer",
+ "text": "แค่ติดตั้งแอป - เริ่มด้วยโมเดลฟรีไม่ต้อง auth แล้วค่อยเชื่อมโมเดลจาก provider ใน UI เมื่อจำเป็น"
+ },
+ {
+ "id": "user6",
+ "name": "Chris L.",
+ "role": "Startup CTO",
+ "text": "เอเจนต์ส่งข้อความทั้งในทีมและข้ามทีม มีข้อความตรง comment งาน และ action ด่วน"
+ }
+ ],
+ "pricing": [
+ {
+ "id": "free",
+ "name": "ฟรี",
+ "price": "$0",
+ "period": "",
+ "description": "ใช่ แอปฟรีและเป็น open source เริ่มด้วยโมเดลฟรีที่ไม่ต้อง auth ได้เลย - ไม่ต้องสมัคร ไม่ต้องใช้ API key หรือบัตรเครดิต ถ้าต้องการโมเดลเพิ่ม ให้เชื่อม Claude, Codex, OpenCode/OpenRouter หรือ provider ที่รองรับ",
+ "features": [
+ "ทีมเอเจนต์",
+ "บอร์ดคัมบัง",
+ "รีวิวโค้ด",
+ "การสื่อสารข้ามทีม",
+ "โหมด Solo",
+ "โปรเซสสด",
+ "โค้ดของฉันเป็นส่วนตัวไหม?",
+ "ต้องใช้อะไรเพื่อเริ่มต้น?"
+ ],
+ "highlighted": true
+ }
+ ]
+}
diff --git a/landing/content/tr.json b/landing/content/tr.json
new file mode 100644
index 00000000..105101bc
--- /dev/null
+++ b/landing/content/tr.json
@@ -0,0 +1,132 @@
+{
+ "hero": {
+ "title": "Agent Teams",
+ "subtitle": "Boss sensin, ajanlar ekibin. Gorevleri kendileri yurutur, birbirleriyle mesajlasir, kodlarini inceler. Sen kanban panosuna bakar ve kahveni icersin."
+ },
+ "features": [
+ {
+ "id": "agentTeams",
+ "title": "Ajan ekipleri",
+ "description": "Farkli rollere sahip ekipler kur. Ajanlar paralel ve otonom calisir, birbirleriyle iletisim kurar ve ekipler arasi is birligi yapar."
+ },
+ {
+ "id": "kanban",
+ "title": "Kanban panosu",
+ "description": "Ajanlar calistikca gorev durumlari gercek zamanli degisir. Surukle, ata ve incele - hepsi gorsel panoda."
+ },
+ {
+ "id": "codeReview",
+ "title": "Kod inceleme",
+ "description": "Her gorev icin diff gorunumu, kabul, reddetme ve yorum. Git destekli yerlesik kod editoru."
+ },
+ {
+ "id": "crossTeam",
+ "title": "Ekipler arasi iletisim",
+ "description": "Ajanlar ayni ekip icinde ve ekipler arasinda mesajlasir. Direkt mesajlar, gorev yorumlari ve hizli aksiyonlar."
+ },
+ {
+ "id": "soloMode",
+ "title": "Solo mod",
+ "description": "Gorevlerini kendi yoneten tek bir ajanla basla. Daha fazla guc gerektiginde tam ekibe genislet."
+ },
+ {
+ "id": "liveProcesses",
+ "title": "Canli surecler",
+ "description": "Calisan ajanlari gor, URLleri tarayicida ac, token kullanimini ve oturum baglamini gercek zamanli izle."
+ }
+ ],
+ "faq": [
+ {
+ "id": "whatIsIt",
+ "question": "Agent Teams nedir?",
+ "answer": "Yerel koordinasyon katmanimizla AI ajan ekiplerini yoneten bir masaustu uygulamasi. Ajanlar rollere sahiptir, otonom calisir, kanban panosu uzerinden is birligi yapar ve Anthropic ya da Codex ile calisabilir."
+ },
+ {
+ "id": "isFree",
+ "question": "Gercekten ucretsiz mi?",
+ "answer": "Evet. Uygulama ucretsiz ve acik kaynaklidir. Kimlik dogrulama gerektirmeyen ucretsiz modelle baslayabilirsin - kayit, API anahtari veya kredi karti yok. Daha fazla model icin Claude, Codex, OpenCode/OpenRouter veya baska bir desteklenen provider bagla."
+ },
+ {
+ "id": "platforms",
+ "question": "Hangi platformlar destekleniyor?",
+ "answer": "macOS (Apple Silicon ve Intel), Windows ve Linux."
+ },
+ {
+ "id": "howItWorks",
+ "question": "Nasil calisir?",
+ "answer": "Uygulamayi kur, ekip olustur, rolleri ata. Ajanlar paralel calismaya baslar. Ilerlemeyi kanban panosunda izler, kod diflerini inceler ve ajanlarla direkt konusursun."
+ },
+ {
+ "id": "privacy",
+ "question": "Kodum gizli kalir mi?",
+ "answer": "Her sey bilgisayarinda yerel calisir. Harici sunuculara veri gonderilmez. Kodun, konusmalarin ve ajan aktivitelerin gizli kalir."
+ },
+ {
+ "id": "requirements",
+ "question": "Baslamak icin ne gerekir?",
+ "answer": "Sadece uygulamayi kur - once kimlik dogrulamasiz ucretsiz modelle basla, sonra ihtiyac duydugunda UI uzerinden provider destekli modelleri bagla."
+ }
+ ],
+ "download": {
+ "title": "Indir",
+ "note": "Platformunu sec ve AI ajan ekipleriyle gelistirmeye basla."
+ },
+ "testimonials": [
+ {
+ "id": "user1",
+ "name": "Alex K.",
+ "role": "Tech Lead",
+ "text": "AI ajanlarini engineering ekibi gibi yonetmemi saglayan ilk arac. Kanban panosu paralel isleri takip etmeyi cok kolaylastiriyor."
+ },
+ {
+ "id": "user2",
+ "name": "Sarah M.",
+ "role": "Full-stack Developer",
+ "text": "Solo mod hizli isler icin mukemmel. Daha fazla guc gerekince saniyeler icinde tam ekip kuruyorum."
+ },
+ {
+ "id": "user3",
+ "name": "David R.",
+ "role": "Senior Engineer",
+ "text": "Kod inceleme akisi harika: gorev bazli diff, kabul/reddetme, yorumlar. Talimatlari gercekten takip eden bir ekip gibi."
+ },
+ {
+ "id": "user4",
+ "name": "Yuki T.",
+ "role": "DevOps Engineer",
+ "text": "Canli surec izleme ve baglam takibi cok kullanisli. Her ajanin ne yaptigini net gorebiliyorum."
+ },
+ {
+ "id": "user5",
+ "name": "Maria S.",
+ "role": "Indie Developer",
+ "text": "Sifir kurulum gercekten var: uygulamayi kurdum, bir kez giris yaptim ve 5 dakikada ajanlar kodumda calisiyordu."
+ },
+ {
+ "id": "user6",
+ "name": "Chris L.",
+ "role": "Startup CTO",
+ "text": "Prototipleme bicimimi degistirdi. Stackin farkli bolumleri icin ekip kurup paralel calistiriyorum."
+ }
+ ],
+ "pricing": [
+ {
+ "id": "free",
+ "name": "Ucretsiz",
+ "price": "$0",
+ "period": "",
+ "description": "Kimlik dogrulama gerektirmeyen dahil ucretsiz modelle basla. Kayit, API anahtari veya kredi karti yok.",
+ "features": [
+ "Ilk calistirmalar icin kimlik dogrulamasiz ucretsiz model",
+ "Denemek icin hesap veya provider girisi gerekmez",
+ "Claude, Codex ve OpenCode erisimi opsiyonel",
+ "Sinirsiz ajan ekibi",
+ "Gercek zamanli kanban panosu",
+ "Diff gorunumlu kod inceleme",
+ "Ekipler arasi iletisim",
+ "Solo ve ekip modlari"
+ ],
+ "highlighted": true
+ }
+ ]
+}
diff --git a/landing/content/uk.json b/landing/content/uk.json
new file mode 100644
index 00000000..8cdbd00a
--- /dev/null
+++ b/landing/content/uk.json
@@ -0,0 +1,132 @@
+{
+ "hero": {
+ "title": "Agent Teams",
+ "subtitle": "Ви Boss, а агенти - ваша команда. Вони самі ведуть задачі, пишуть одне одному і ревʼюять код. Ви просто дивитесь на kanban-дошку і пʼєте каву."
+ },
+ "features": [
+ {
+ "id": "agentTeams",
+ "title": "Команди агентів",
+ "description": "Створюйте команди з різними ролями. Агенти автономно працюють паралельно, спілкуються між собою і взаємодіють між командами."
+ },
+ {
+ "id": "kanban",
+ "title": "Kanban-дошка",
+ "description": "Статуси задач оновлюються в реальному часі. Перетягуйте, призначайте і ревʼюйте все на одній візуальній дошці."
+ },
+ {
+ "id": "codeReview",
+ "title": "Code review",
+ "description": "Diff для кожної задачі з прийняттям, відхиленням і коментарями. Вбудований редактор коду з підтримкою Git."
+ },
+ {
+ "id": "crossTeam",
+ "title": "Комунікація між командами",
+ "description": "Агенти пишуть у межах команди і між командами. Прямі повідомлення, коментарі до задач і швидкі дії."
+ },
+ {
+ "id": "soloMode",
+ "title": "Solo mode",
+ "description": "Почніть з одного агента, який сам керує задачами. Коли треба більше потужності, розширте його до повної команди."
+ },
+ {
+ "id": "liveProcesses",
+ "title": "Live-процеси",
+ "description": "Бачите запущених агентів, відкриваєте URL у браузері, стежите за токенами і контекстом сесії в реальному часі."
+ }
+ ],
+ "faq": [
+ {
+ "id": "whatIsIt",
+ "question": "Що таке Agent Teams?",
+ "answer": "Desktop-додаток для оркестрації AI-команд з нашою локальною координацією. Агенти мають ролі, працюють автономно, співпрацюють через kanban і можуть працювати на Anthropic або Codex."
+ },
+ {
+ "id": "isFree",
+ "question": "Це справді безкоштовно?",
+ "answer": "Так. Додаток безкоштовний і open source. Можна стартувати з безкоштовною моделлю без auth - без реєстрації, API keys чи картки. Для інших моделей підключіть Claude, Codex, OpenCode/OpenRouter або інший підтримуваний provider."
+ },
+ {
+ "id": "platforms",
+ "question": "Які платформи підтримуються?",
+ "answer": "macOS (Apple Silicon і Intel), Windows та Linux."
+ },
+ {
+ "id": "howItWorks",
+ "question": "Як це працює?",
+ "answer": "Встановлюєте додаток, створюєте команду, призначаєте ролі. Агенти працюють паралельно, ви стежите за kanban, ревʼюите diff і спілкуєтесь з агентами."
+ },
+ {
+ "id": "privacy",
+ "question": "Мій код приватний?",
+ "answer": "Усе працює локально на вашому компʼютері. Дані не надсилаються на зовнішні сервери. Код, розмови і активність агентів залишаються приватними."
+ },
+ {
+ "id": "requirements",
+ "question": "Що потрібно для старту?",
+ "answer": "Просто встановіть додаток - почніть з безкоштовної моделі без auth, а provider-backed моделі підключайте в UI за потреби."
+ }
+ ],
+ "download": {
+ "title": "Завантажити",
+ "note": "Оберіть платформу і почніть створювати з командами AI-агентів."
+ },
+ "testimonials": [
+ {
+ "id": "user1",
+ "name": "Alex K.",
+ "role": "Tech Lead",
+ "text": "Створюйте команди з різними ролями. Агенти автономно працюють паралельно, спілкуються між собою і взаємодіють між командами."
+ },
+ {
+ "id": "user2",
+ "name": "Sarah M.",
+ "role": "Full-stack Developer",
+ "text": "Почніть з одного агента, який сам керує задачами. Коли треба більше потужності, розширте його до повної команди."
+ },
+ {
+ "id": "user3",
+ "name": "David R.",
+ "role": "Senior Engineer",
+ "text": "Diff для кожної задачі з прийняттям, відхиленням і коментарями. Вбудований редактор коду з підтримкою Git."
+ },
+ {
+ "id": "user4",
+ "name": "Yuki T.",
+ "role": "DevOps Engineer",
+ "text": "Бачите запущених агентів, відкриваєте URL у браузері, стежите за токенами і контекстом сесії в реальному часі."
+ },
+ {
+ "id": "user5",
+ "name": "Maria S.",
+ "role": "Indie Developer",
+ "text": "Просто встановіть додаток - почніть з безкоштовної моделі без auth, а provider-backed моделі підключайте в UI за потреби."
+ },
+ {
+ "id": "user6",
+ "name": "Chris L.",
+ "role": "Startup CTO",
+ "text": "Агенти пишуть у межах команди і між командами. Прямі повідомлення, коментарі до задач і швидкі дії."
+ }
+ ],
+ "pricing": [
+ {
+ "id": "free",
+ "name": "Безкоштовно",
+ "price": "$0",
+ "period": "",
+ "description": "Так. Додаток безкоштовний і open source. Можна стартувати з безкоштовною моделлю без auth - без реєстрації, API keys чи картки. Для інших моделей підключіть Claude, Codex, OpenCode/OpenRouter або інший підтримуваний provider.",
+ "features": [
+ "Команди агентів",
+ "Kanban-дошка",
+ "Code review",
+ "Комунікація між командами",
+ "Solo mode",
+ "Live-процеси",
+ "Мій код приватний?",
+ "Що потрібно для старту?"
+ ],
+ "highlighted": true
+ }
+ ]
+}
diff --git a/landing/content/ur.json b/landing/content/ur.json
index 35e1e5fe..20754fbf 100644
--- a/landing/content/ur.json
+++ b/landing/content/ur.json
@@ -1,7 +1,7 @@
{
"hero": {
"title": "Agent Teams",
- "subtitle": "آپ ہیں CTO، ایجنٹ آپ کی ٹیم ہیں. وہ خود کام خود کرتے ہیں، پیغام رسانی کرتے ہیں، ایک دوسرے کے کوڈ کا جائزہ لیتے ہیں۔ آپ صرف رکن بورڈ کو دیکھ کر کافی پینے."
+ "subtitle": "آپ ہیں Boss، ایجنٹ آپ کی ٹیم ہیں. وہ خود کام خود کرتے ہیں، پیغام رسانی کرتے ہیں، ایک دوسرے کے کوڈ کا جائزہ لیتے ہیں۔ آپ صرف رکن بورڈ کو دیکھ کر کافی پینے."
},
"features": [
{
diff --git a/landing/content/vi.json b/landing/content/vi.json
new file mode 100644
index 00000000..c899eb02
--- /dev/null
+++ b/landing/content/vi.json
@@ -0,0 +1,132 @@
+{
+ "hero": {
+ "title": "Agent Teams",
+ "subtitle": "Ban la Boss, cac agent la doi cua ban. Chung tu xu ly task, nhan tin voi nhau va review code cho nhau. Ban chi can nhin bang kanban va uong ca phe."
+ },
+ "features": [
+ {
+ "id": "agentTeams",
+ "title": "Doi agent",
+ "description": "Tao cac doi voi vai tro khac nhau. Agent lam viec song song, tu chu, giao tiep voi nhau va cong tac giua cac doi."
+ },
+ {
+ "id": "kanban",
+ "title": "Bang Kanban",
+ "description": "Trang thai task cap nhat theo thoi gian thuc khi agent lam viec. Keo tha, gan viec va review tren mot bang truc quan."
+ },
+ {
+ "id": "codeReview",
+ "title": "Review code",
+ "description": "Xem diff theo tung task voi chap nhan, tu choi va binh luan. Trinh soan code tich hop co ho tro Git."
+ },
+ {
+ "id": "crossTeam",
+ "title": "Giao tiep giua doi",
+ "description": "Agent nhan tin trong cung doi va giua cac doi. Tin nhan truc tiep, binh luan task va hanh dong nhanh."
+ },
+ {
+ "id": "soloMode",
+ "title": "Che do solo",
+ "description": "Bat dau voi mot agent tu quan ly task. Khi can them suc manh, mo rong thanh ca doi."
+ },
+ {
+ "id": "liveProcesses",
+ "title": "Tien trinh live",
+ "description": "Xem agent dang chay, mo URL trong trinh duyet, theo doi token va context phien theo thoi gian thuc."
+ }
+ ],
+ "faq": [
+ {
+ "id": "whatIsIt",
+ "question": "Agent Teams la gi?",
+ "answer": "Ung dung desktop de dieu phoi cac doi agent AI voi lop dieu phoi cuc bo rieng. Agent co vai tro, lam viec tu chu, cong tac qua bang kanban va co the chay tren Anthropic hoac Codex."
+ },
+ {
+ "id": "isFree",
+ "question": "Co that su mien phi khong?",
+ "answer": "Co. Ung dung mien phi va ma nguon mo, ban co the bat dau voi model mien phi khong can xac thuc - khong dang ky, khong API key, khong can the tin dung. Neu can them model, ket noi Claude, Codex, OpenCode/OpenRouter hoac provider duoc ho tro."
+ },
+ {
+ "id": "platforms",
+ "question": "Ho tro nen tang nao?",
+ "answer": "macOS (Apple Silicon va Intel), Windows va Linux."
+ },
+ {
+ "id": "howItWorks",
+ "question": "Hoat dong nhu the nao?",
+ "answer": "Cai ung dung, tao doi, gan vai tro. Agent bat dau lam viec song song. Ban theo doi tien do tren kanban, review diff va trao doi truc tiep voi agent."
+ },
+ {
+ "id": "privacy",
+ "question": "Code cua toi co rieng tu khong?",
+ "answer": "Moi thu chay cuc bo tren may cua ban. Khong co du lieu gui toi server ben ngoai. Code, hoi thoai va hoat dong agent deu duoc giu rieng tu."
+ },
+ {
+ "id": "requirements",
+ "question": "Can gi de bat dau?",
+ "answer": "Chi can cai ung dung - bat dau voi model mien phi khong can xac thuc, sau do ket noi model provider trong UI khi can."
+ }
+ ],
+ "download": {
+ "title": "Tai xuong",
+ "note": "Chon nen tang cua ban va bat dau xay dung voi doi agent AI."
+ },
+ "testimonials": [
+ {
+ "id": "user1",
+ "name": "Alex K.",
+ "role": "Tech Lead",
+ "text": "Cuoi cung cung co cong cu giup toi quan ly AI agent nhu mot doi engineering. Bang kanban rat huu ich cho cong viec song song."
+ },
+ {
+ "id": "user2",
+ "name": "Sarah M.",
+ "role": "Full-stack Developer",
+ "text": "Che do solo hoan hao cho task nhanh. Khi can them luc, toi tao ca doi trong vai giay."
+ },
+ {
+ "id": "user3",
+ "name": "David R.",
+ "role": "Senior Engineer",
+ "text": "Workflow review code rat hay: diff theo task, chap nhan/tu choi, binh luan. Giong mot doi thuc su nghe theo huong dan."
+ },
+ {
+ "id": "user4",
+ "name": "Yuki T.",
+ "role": "DevOps Engineer",
+ "text": "Theo doi tien trinh live va context cuc ky huu ich. Toi thay ro tung agent dang lam gi."
+ },
+ {
+ "id": "user5",
+ "name": "Maria S.",
+ "role": "Indie Developer",
+ "text": "Onboarding zero-setup la that: cai app, dang nhap mot lan, 5 phut sau agent da lam tren codebase."
+ },
+ {
+ "id": "user6",
+ "name": "Chris L.",
+ "role": "Startup CTO",
+ "text": "No thay doi cach toi prototype. Toi tao doi cho tung phan stack va cho chung lam song song."
+ }
+ ],
+ "pricing": [
+ {
+ "id": "free",
+ "name": "Mien phi",
+ "price": "$0",
+ "period": "",
+ "description": "Bat dau voi model mien phi co san, khong can xac thuc. Khong dang ky, khong API key, khong the tin dung.",
+ "features": [
+ "Model mien phi khong can xac thuc cho lan chay dau",
+ "Khong can tai khoan hoac dang nhap provider de thu",
+ "Tuy chon ket noi Claude, Codex va OpenCode",
+ "Khong gioi han doi agent",
+ "Kanban cap nhat thoi gian thuc",
+ "Review code voi diff",
+ "Giao tiep giua doi",
+ "Che do solo va team"
+ ],
+ "highlighted": true
+ }
+ ]
+}
diff --git a/landing/content/zh.json b/landing/content/zh.json
index 7a258c08..861377bd 100644
--- a/landing/content/zh.json
+++ b/landing/content/zh.json
@@ -1,7 +1,7 @@
{
"hero": {
"title": "Agent Teams",
- "subtitle": "你是 CTO,智能体是你的团队。它们自己处理任务、互相沟通、审查彼此的代码。你只需看着看板喝咖啡。"
+ "subtitle": "你是 Boss,智能体是你的团队。它们自己处理任务、互相沟通、审查彼此的代码。你只需看着看板喝咖啡。"
},
"features": [
{
diff --git a/landing/data/content.ts b/landing/data/content.ts
index ef723f8b..aa99b9f2 100644
--- a/landing/data/content.ts
+++ b/landing/data/content.ts
@@ -12,6 +12,21 @@ import de from '~/content/de.json';
import bn from '~/content/bn.json';
import ur from '~/content/ur.json';
import id from '~/content/id.json';
+import it from '~/content/it.json';
+import tr from '~/content/tr.json';
+import vi from '~/content/vi.json';
+import pl from '~/content/pl.json';
+import fa from '~/content/fa.json';
+import th from '~/content/th.json';
+import uk from '~/content/uk.json';
+import nl from '~/content/nl.json';
+import ta from '~/content/ta.json';
+import te from '~/content/te.json';
+import mr from '~/content/mr.json';
+import fil from '~/content/fil.json';
+import ms from '~/content/ms.json';
+import sw from '~/content/sw.json';
+import ro from '~/content/ro.json';
import type { LandingContent, LocalizedContent } from '~/types/content';
import type { LocaleCode } from '~/data/i18n';
@@ -30,6 +45,21 @@ export const contentByLocale: LocalizedContent = {
bn,
ur,
id,
+ it,
+ tr,
+ vi,
+ pl,
+ fa,
+ th,
+ uk,
+ nl,
+ ta,
+ te,
+ mr,
+ fil,
+ ms,
+ sw,
+ ro,
};
export const getContent = (locale: LocaleCode): LandingContent => {
diff --git a/landing/data/i18n.ts b/landing/data/i18n.ts
index e2862dae..c5c1ac25 100644
--- a/landing/data/i18n.ts
+++ b/landing/data/i18n.ts
@@ -12,7 +12,22 @@ export type LocaleCode =
| 'de'
| 'bn'
| 'ur'
- | 'id';
+ | 'id'
+ | 'it'
+ | 'tr'
+ | 'vi'
+ | 'pl'
+ | 'fa'
+ | 'th'
+ | 'uk'
+ | 'nl'
+ | 'ta'
+ | 'te'
+ | 'mr'
+ | 'fil'
+ | 'ms'
+ | 'sw'
+ | 'ro';
export const supportedLocales = [
{ code: 'en', iso: 'en-US', name: 'English', flag: '\u{1F1FA}\u{1F1F8}', file: 'en.json' },
@@ -43,6 +58,28 @@ export const supportedLocales = [
{ code: 'id', iso: 'id-ID', name: 'Indonesia', flag: '\u{1F1EE}\u{1F1E9}', file: 'id.json' },
{ code: 'de', iso: 'de-DE', name: 'Deutsch', flag: '\u{1F1E9}\u{1F1EA}', file: 'de.json' },
{ code: 'ru', iso: 'ru-RU', name: 'Русский', flag: '\u{1F1F7}\u{1F1FA}', file: 'ru.json' },
+ { code: 'it', iso: 'it-IT', name: 'Italiano', flag: '\u{1F1EE}\u{1F1F9}', file: 'it.json' },
+ { code: 'tr', iso: 'tr-TR', name: 'Türkçe', flag: '\u{1F1F9}\u{1F1F7}', file: 'tr.json' },
+ { code: 'vi', iso: 'vi-VN', name: 'Tiếng Việt', flag: '\u{1F1FB}\u{1F1F3}', file: 'vi.json' },
+ { code: 'pl', iso: 'pl-PL', name: 'Polski', flag: '\u{1F1F5}\u{1F1F1}', file: 'pl.json' },
+ {
+ code: 'fa',
+ iso: 'fa-IR',
+ name: 'فارسی',
+ flag: '\u{1F1EE}\u{1F1F7}',
+ file: 'fa.json',
+ dir: 'rtl',
+ },
+ { code: 'th', iso: 'th-TH', name: 'ไทย', flag: '\u{1F1F9}\u{1F1ED}', file: 'th.json' },
+ { code: 'uk', iso: 'uk-UA', name: 'Українська', flag: '\u{1F1FA}\u{1F1E6}', file: 'uk.json' },
+ { code: 'nl', iso: 'nl-NL', name: 'Nederlands', flag: '\u{1F1F3}\u{1F1F1}', file: 'nl.json' },
+ { code: 'ta', iso: 'ta-IN', name: 'தமிழ்', flag: '\u{1F1EE}\u{1F1F3}', file: 'ta.json' },
+ { code: 'te', iso: 'te-IN', name: 'తెలుగు', flag: '\u{1F1EE}\u{1F1F3}', file: 'te.json' },
+ { code: 'mr', iso: 'mr-IN', name: 'मराठी', flag: '\u{1F1EE}\u{1F1F3}', file: 'mr.json' },
+ { code: 'fil', iso: 'fil-PH', name: 'Filipino', flag: '\u{1F1F5}\u{1F1ED}', file: 'fil.json' },
+ { code: 'ms', iso: 'ms-MY', name: 'Bahasa Melayu', flag: '\u{1F1F2}\u{1F1FE}', file: 'ms.json' },
+ { code: 'sw', iso: 'sw-KE', name: 'Kiswahili', flag: '\u{1F1F0}\u{1F1EA}', file: 'sw.json' },
+ { code: 'ro', iso: 'ro-RO', name: 'Română', flag: '\u{1F1F7}\u{1F1F4}', file: 'ro.json' },
] as const;
export const defaultLocale: LocaleCode = 'en';
diff --git a/landing/locales/fa.json b/landing/locales/fa.json
new file mode 100644
index 00000000..c05def3d
--- /dev/null
+++ b/landing/locales/fa.json
@@ -0,0 +1,173 @@
+{
+ "nav": {
+ "features": "ویژگیها",
+ "screenshots": "تصاویر",
+ "docs": "مستندات",
+ "comparison": "مقایسه",
+ "download": "دانلود",
+ "pricing": "رایگان",
+ "faq": "پرسشهای متداول",
+ "viewOnGithub": "مشاهده در GitHub",
+ "openMenu": "باز کردن منو",
+ "closeMenu": "بستن منو",
+ "short": {
+ "screenshots": "تصاویر",
+ "docs": "مستندات",
+ "download": "دریافت",
+ "comparison": "مقایسه",
+ "pricing": "رایگان"
+ }
+ },
+ "hero": {
+ "badge": "Agent Teams",
+ "downloadNow": "اکنون دانلود کنید",
+ "ctaPrimary": "دانلود برای {platform}",
+ "ctaSecondary": "مقایسه",
+ "ctaDocs": "مستندات",
+ "preview": "پیشنمایش محصول",
+ "trust": {
+ "agentTeams": "Agent Teams",
+ "kanban": "تخته Kanban",
+ "openSource": "متنباز"
+ },
+ "watchDemo": "تماشای دمو",
+ "videoUnavailable": "ویدیو در دسترس نیست",
+ "supportedProviders": "ارائهدهندگان هوش مصنوعی پشتیبانیشده",
+ "slogan": "کارهای زیادی را با تلاش بسیار اندک انجام دهید",
+ "platformDefault": "برای پلتفرم شما",
+ "guidesSetup": "راهنماها و راهاندازی",
+ "videoFrameLabel": "تماشای دموی Agent Teams",
+ "commandFeed": "جریان فرمانهای تیم",
+ "liveDemo": "دموی زنده",
+ "demoVideoTitle": "ویدیوی دموی Agent Teams",
+ "demoTitle": "دموی Agent Teams",
+ "demo": {
+ "ariaLabel": "دموی تیم عامل",
+ "live": "زنده",
+ "waiting": "در انتظار وظایف...",
+ "activity": {
+ "authMiddleware": "در حال پیادهسازی میانافزار احراز هویت...",
+ "unitTests": "در حال نوشتن تستهای واحد برای API...",
+ "reviewPr": "در حال بازبینی تغییرات PR #42...",
+ "ciPipeline": "در حال راهاندازی خط لوله CI/CD...",
+ "refactorDatabase": "در حال بازآرایی لایه پایگاه داده..."
+ },
+ "tasks": {
+ "authApi": "API احراز هویت",
+ "unitTests": "تستهای واحد",
+ "ciSetup": "راهاندازی CI"
+ },
+ "columns": {
+ "todo": "انجامدادنی",
+ "progress": "در حال انجام",
+ "review": "بازبینی",
+ "done": "انجامشده"
+ }
+ }
+ },
+ "download": {
+ "title": "دانلود",
+ "detected": "شناساییشده",
+ "systemRequirements": "نیازمندیهای سیستم",
+ "version": "نسخه {version}",
+ "readyToStart": "آماده شروع!"
+ },
+ "theme": {
+ "dark": "تیره",
+ "light": "روشن"
+ },
+ "language": {
+ "label": "زبان",
+ "search": "جستجوی زبان…"
+ },
+ "features": {
+ "sectionTitle": "هر آنچه برای ارکستراسیون عاملهای هوش مصنوعی نیاز دارید",
+ "sectionSubtitle": "ابزارهای قدرتمندی که همکاری چندعاملی را واقعاً کارآمد میکنند."
+ },
+ "pricing": {
+ "sectionTitle": "نصب رایگان. مدل رایگان همراه آن.",
+ "sectionSubtitle": "بلافاصله با یک مدل رایگان بدون احراز هویت شروع کنید - بدون حساب کاربری، کلید API یا کارت اعتباری. تنها زمانی که مدلهای بیشتری بخواهید، دسترسی Claude، Codex، OpenCode/OpenRouter یا ارائهدهنده دیگری را متصل کنید.",
+ "getStarted": "اکنون دانلود کنید",
+ "popular": "رایگان",
+ "freeModelCallout": "مدل رایگان بدون احراز هویت همراه آن",
+ "note": "Agent Teams هیچ سطح پولی ندارد. مدل رایگان بدون احراز هویت به شما امکان میدهد بلافاصله آن را امتحان کنید؛ استفاده پولی از ارائهدهنده اختیاری است و توسط ارائهدهندهای که انتخاب میکنید کنترل میشود."
+ },
+ "testimonials": {
+ "sectionTitle": "توسعهدهندگان چه میگویند",
+ "sectionSubtitle": "بازخورد واقعی از سازندگان واقعی",
+ "showMore": "نمایش بیشتر",
+ "showLess": "نمایش کمتر",
+ "feedbackCta": "میخواهید تجربهتان را به اشتراک بگذارید؟ یک issue باز کنید در"
+ },
+ "faq": {
+ "sectionTitle": "سؤالی دارید؟ ما پاسخها را داریم",
+ "subtitle": "هر آنچه درباره Agent Teams باید بدانید"
+ },
+ "comparison": {
+ "sectionTitle": "ما در مقایسه با دیگران",
+ "sectionSubtitle": "مقایسه ویژگیبهویژگی با سایر ابزارهای کدنویسی هوش مصنوعی.",
+ "feature": "ویژگی",
+ "robotBubble": "خودتان قضاوت کنید",
+ "features": {
+ "crossTeam": "ارتباط بینتیمی",
+ "agentMessaging": "پیامرسانی عاملبهعامل",
+ "linkedTasks": "وظایف پیوندخورده",
+ "sessionAnalysis": "تحلیل نشست",
+ "taskAttachments": "پیوستهای وظیفه",
+ "hunkReview": "بازبینی در سطح بخش",
+ "codeEditor": "ویرایشگر کد داخلی",
+ "fullAutonomy": "خودمختاری کامل",
+ "taskDeps": "وابستگیهای وظیفه",
+ "reviewWorkflow": "گردشکار بازبینی",
+ "zeroSetup": "بدون راهاندازی",
+ "kanban": "تخته Kanban",
+ "execLog": "گزارشهای اجرا",
+ "liveProcesses": "فرایندهای زنده",
+ "runtimeLoad": "CPU/RAM به ازای هر همتیمی",
+ "perTaskReview": "بازبینی کد به ازای هر وظیفه",
+ "flexAutonomy": "خودمختاری انعطافپذیر",
+ "worktree": "جداسازی Git worktree",
+ "multiAgent": "همتیمیهای هوش مصنوعی ترکیبی",
+ "liveWorkGraph": "نقشه زنده تیم",
+ "liveTeam": "همتیمیهای زنده",
+ "teamWorkspace": "فضای کاری تیم",
+ "launchProof": "وضعیت راهاندازی همتیمی",
+ "orgGovernance": "چارت سازمانی / حاکمیت",
+ "budgetControls": "کنترلهای بودجه",
+ "price": "قیمت"
+ }
+ },
+ "screenshots": {
+ "sectionTitle": "آن را در عمل ببینید",
+ "sectionSubtitle": "تصاویر واقعی از برنامه — تخته Kanban، بازبینی کد، تیمهای عامل و موارد دیگر."
+ },
+ "common": {
+ "learnMore": "بیشتر بدانید",
+ "statusLabel": "وضعیت:",
+ "previous": "قبلی",
+ "next": "بعدی"
+ },
+ "footer": {
+ "copyright": "© {year} Agent Teams",
+ "tagline": "ارکستراسیون عاملهای هوش مصنوعی برای توسعهدهندگان",
+ "robotBubble": "منتظرم",
+ "links": {
+ "github": "GitHub",
+ "author": "سازنده",
+ "docs": "مستندات"
+ }
+ },
+ "meta": {
+ "homeTitle": "Agent Teams - ارکستراسیون عاملهای هوش مصنوعی برای توسعهدهندگان",
+ "homeDescription": "برنامه دسکتاپ رایگان و متنباز برای تیمهای عامل هوش مصنوعی. با یک مدل رایگان بدون احراز هویت شروع کنید، سپس هنگام نیاز به مدلهای بیشتر Claude، Codex یا OpenCode را متصل کنید.",
+ "downloadTitle": "دانلود Agent Teams برای macOS، Windows و Linux",
+ "downloadDescription": "Agent Teams را برای macOS، Windows و Linux دانلود کنید. برنامه دسکتاپ رایگان و متنباز برای تیمهای عامل Claude، Codex و OpenCode."
+ },
+ "error": {
+ "notFoundTitle": "صفحه یافت نشد",
+ "notFoundDescription": "صفحهای که دنبال آن هستید وجود ندارد یا منتقل شده است.",
+ "genericTitle": "مشکلی پیش آمد",
+ "genericDescription": "خطای غیرمنتظرهای رخ داد. لطفاً بعداً دوباره تلاش کنید.",
+ "goHome": "رفتن به صفحه اصلی"
+ }
+}
diff --git a/landing/locales/fil.json b/landing/locales/fil.json
new file mode 100644
index 00000000..c26ff66d
--- /dev/null
+++ b/landing/locales/fil.json
@@ -0,0 +1,173 @@
+{
+ "nav": {
+ "features": "Mga Feature",
+ "screenshots": "Mga Screenshot",
+ "docs": "Dokumentasyon",
+ "comparison": "Ikumpara",
+ "download": "I-download",
+ "pricing": "Libre",
+ "faq": "FAQ",
+ "viewOnGithub": "Tingnan sa GitHub",
+ "openMenu": "Buksan ang menu",
+ "closeMenu": "Isara ang menu",
+ "short": {
+ "screenshots": "Shots",
+ "docs": "Docs",
+ "download": "Kunin",
+ "comparison": "Ikumpara",
+ "pricing": "Libre"
+ }
+ },
+ "hero": {
+ "badge": "Agent Teams",
+ "downloadNow": "I-download Ngayon",
+ "ctaPrimary": "I-download para sa {platform}",
+ "ctaSecondary": "Ikumpara",
+ "ctaDocs": "Dokumentasyon",
+ "preview": "Preview ng produkto",
+ "trust": {
+ "agentTeams": "Agent Teams",
+ "kanban": "Kanban Board",
+ "openSource": "Open Source"
+ },
+ "watchDemo": "Panoorin ang Demo",
+ "videoUnavailable": "Hindi available ang video",
+ "supportedProviders": "Mga sinusuportahang AI provider",
+ "slogan": "Magawa ang marami sa pamamagitan ng kaunting paggawa",
+ "platformDefault": "Para sa iyong platform",
+ "guidesSetup": "Mga gabay at setup",
+ "videoFrameLabel": "Panoorin ang demo ng Agent Teams",
+ "commandFeed": "Team command feed",
+ "liveDemo": "Live na demo",
+ "demoVideoTitle": "Demo video ng Agent Teams",
+ "demoTitle": "Demo ng Agent Teams",
+ "demo": {
+ "ariaLabel": "Demo ng agent team",
+ "live": "LIVE",
+ "waiting": "Naghihintay ng mga task...",
+ "activity": {
+ "authMiddleware": "Ini-implement ang auth middleware...",
+ "unitTests": "Sumusulat ng unit test para sa API...",
+ "reviewPr": "Sinusuri ang mga pagbabago sa PR #42...",
+ "ciPipeline": "Itinatakda ang CI/CD pipeline...",
+ "refactorDatabase": "Nire-refactor ang database layer..."
+ },
+ "tasks": {
+ "authApi": "Auth API",
+ "unitTests": "Unit test",
+ "ciSetup": "CI setup"
+ },
+ "columns": {
+ "todo": "TODO",
+ "progress": "GINAGAWA",
+ "review": "REVIEW",
+ "done": "TAPOS"
+ }
+ }
+ },
+ "download": {
+ "title": "I-download",
+ "detected": "Natukoy",
+ "systemRequirements": "Mga kinakailangan sa sistema",
+ "version": "Bersyon {version}",
+ "readyToStart": "Handa nang magsimula!"
+ },
+ "theme": {
+ "dark": "Madilim",
+ "light": "Maliwanag"
+ },
+ "language": {
+ "label": "Wika",
+ "search": "Maghanap ng wika…"
+ },
+ "features": {
+ "sectionTitle": "Lahat ng kailangan mo para sa AI agent orchestration",
+ "sectionSubtitle": "Mga makapangyarihang tool na talagang nagpapagana sa multi-agent collaboration."
+ },
+ "pricing": {
+ "sectionTitle": "Libreng i-install. Kasama ang libreng model.",
+ "sectionSubtitle": "Magsimula agad gamit ang isang libreng model na walang auth - walang account, API key, o credit card. Ikonekta ang Claude, Codex, OpenCode/OpenRouter, o ibang provider access kapag gusto mo ng mas maraming model.",
+ "getStarted": "I-download Ngayon",
+ "popular": "Libre",
+ "freeModelCallout": "Kasama ang libreng model na walang auth",
+ "note": "Walang bayad na tier ang Agent Teams. Pinapayagan ka ng libreng model na walang auth na subukan ito kaagad; opsyonal ang bayad na paggamit ng provider at kontrolado ng provider na pipiliin mo."
+ },
+ "testimonials": {
+ "sectionTitle": "Ano ang sinasabi ng mga developer",
+ "sectionSubtitle": "Tunay na feedback mula sa mga tunay na builder",
+ "showMore": "Magpakita pa",
+ "showLess": "Magpakita ng mas kaunti",
+ "feedbackCta": "Gusto mo bang ibahagi ang iyong karanasan? Magbukas ng issue sa"
+ },
+ "faq": {
+ "sectionTitle": "May mga tanong? May mga sagot kami",
+ "subtitle": "Lahat ng kailangan mong malaman tungkol sa Agent Teams"
+ },
+ "comparison": {
+ "sectionTitle": "Paano kami ikinukumpara",
+ "sectionSubtitle": "Feature-by-feature na paghahambing sa iba pang AI coding tool.",
+ "feature": "Feature",
+ "robotBubble": "Ikaw ang humusga",
+ "features": {
+ "crossTeam": "Cross-team na komunikasyon",
+ "agentMessaging": "Agent-to-agent na pagmemensahe",
+ "linkedTasks": "Mga naka-link na task",
+ "sessionAnalysis": "Pagsusuri ng session",
+ "taskAttachments": "Mga attachment ng task",
+ "hunkReview": "Hunk-level na review",
+ "codeEditor": "Built-in na code editor",
+ "fullAutonomy": "Buong autonomy",
+ "taskDeps": "Mga dependency ng task",
+ "reviewWorkflow": "Review workflow",
+ "zeroSetup": "Walang setup",
+ "kanban": "Kanban board",
+ "execLog": "Mga execution log",
+ "liveProcesses": "Mga live na proseso",
+ "runtimeLoad": "CPU/RAM bawat teammate",
+ "perTaskReview": "Code review bawat task",
+ "flexAutonomy": "Nababagong autonomy",
+ "worktree": "Git worktree isolation",
+ "multiAgent": "Pinaghalong AI teammate",
+ "liveWorkGraph": "Live na team map",
+ "liveTeam": "Mga live na teammate",
+ "teamWorkspace": "Team workspace",
+ "launchProof": "Status ng paglunsad ng teammate",
+ "orgGovernance": "Org chart / governance",
+ "budgetControls": "Mga kontrol sa badyet",
+ "price": "Presyo"
+ }
+ },
+ "screenshots": {
+ "sectionTitle": "Tingnan ito sa aksyon",
+ "sectionSubtitle": "Mga tunay na screenshot mula sa app — kanban board, code review, agent teams, at higit pa."
+ },
+ "common": {
+ "learnMore": "Matuto pa",
+ "statusLabel": "Status:",
+ "previous": "Nakaraan",
+ "next": "Susunod"
+ },
+ "footer": {
+ "copyright": "© {year} Agent Teams",
+ "tagline": "AI agent orchestration para sa mga developer",
+ "robotBubble": "Naghihintay ako",
+ "links": {
+ "github": "GitHub",
+ "author": "May-akda",
+ "docs": "Dokumentasyon"
+ }
+ },
+ "meta": {
+ "homeTitle": "Agent Teams - AI Agent Orchestration para sa mga Developer",
+ "homeDescription": "Libre at open-source na desktop app para sa AI agent teams. Magsimula sa isang libreng model na walang auth, pagkatapos ay ikonekta ang Claude, Codex, o OpenCode kapag kailangan mo ng mas maraming model.",
+ "downloadTitle": "I-download ang Agent Teams para sa macOS, Windows, at Linux",
+ "downloadDescription": "I-download ang Agent Teams para sa macOS, Windows, at Linux. Libre at open-source na desktop app para sa mga agent team ng Claude, Codex, at OpenCode."
+ },
+ "error": {
+ "notFoundTitle": "Hindi nahanap ang page",
+ "notFoundDescription": "Ang page na hinahanap mo ay hindi umiiral o inilipat na.",
+ "genericTitle": "May naganap na mali",
+ "genericDescription": "May naganap na hindi inaasahang error. Pakisubukang muli mamaya.",
+ "goHome": "Pumunta sa homepage"
+ }
+}
diff --git a/landing/locales/it.json b/landing/locales/it.json
new file mode 100644
index 00000000..38c1e223
--- /dev/null
+++ b/landing/locales/it.json
@@ -0,0 +1,173 @@
+{
+ "nav": {
+ "features": "Funzionalità",
+ "screenshots": "Screenshot",
+ "docs": "Documentazione",
+ "comparison": "Confronta",
+ "download": "Scarica",
+ "pricing": "Gratis",
+ "faq": "FAQ",
+ "viewOnGithub": "Vedi su GitHub",
+ "openMenu": "Apri menu",
+ "closeMenu": "Chiudi menu",
+ "short": {
+ "screenshots": "Foto",
+ "docs": "Docs",
+ "download": "Scarica",
+ "comparison": "Confronta",
+ "pricing": "Gratis"
+ }
+ },
+ "hero": {
+ "badge": "Agent Teams",
+ "downloadNow": "Scarica ora",
+ "ctaPrimary": "Scarica per {platform}",
+ "ctaSecondary": "Confronta",
+ "ctaDocs": "Documentazione",
+ "preview": "Anteprima del prodotto",
+ "trust": {
+ "agentTeams": "Agent Teams",
+ "kanban": "Bacheca Kanban",
+ "openSource": "Open source"
+ },
+ "watchDemo": "Guarda la demo",
+ "videoUnavailable": "Video non disponibile",
+ "supportedProviders": "Provider AI supportati",
+ "slogan": "Ottieni tanto facendo pochissimo",
+ "platformDefault": "Per la tua piattaforma",
+ "guidesSetup": "Guide e configurazione",
+ "videoFrameLabel": "Guarda la demo di Agent Teams",
+ "commandFeed": "Feed dei comandi del team",
+ "liveDemo": "Demo dal vivo",
+ "demoVideoTitle": "Video demo di Agent Teams",
+ "demoTitle": "Demo di Agent Teams",
+ "demo": {
+ "ariaLabel": "Demo del team di agenti",
+ "live": "DAL VIVO",
+ "waiting": "In attesa di task...",
+ "activity": {
+ "authMiddleware": "Implementazione del middleware di autenticazione...",
+ "unitTests": "Scrittura di test unitari per l'API...",
+ "reviewPr": "Revisione delle modifiche della PR #42...",
+ "ciPipeline": "Configurazione della pipeline CI/CD...",
+ "refactorDatabase": "Refactoring del livello database..."
+ },
+ "tasks": {
+ "authApi": "API di autenticazione",
+ "unitTests": "Test unitari",
+ "ciSetup": "Configurazione CI"
+ },
+ "columns": {
+ "todo": "DA FARE",
+ "progress": "IN CORSO",
+ "review": "REVISIONE",
+ "done": "FATTO"
+ }
+ }
+ },
+ "download": {
+ "title": "Scarica",
+ "detected": "Rilevato",
+ "systemRequirements": "Requisiti di sistema",
+ "version": "Versione {version}",
+ "readyToStart": "Pronto per iniziare!"
+ },
+ "theme": {
+ "dark": "Scuro",
+ "light": "Chiaro"
+ },
+ "language": {
+ "label": "Lingua",
+ "search": "Cerca lingua…"
+ },
+ "features": {
+ "sectionTitle": "Tutto ciò che serve per l'orchestrazione di agenti AI",
+ "sectionSubtitle": "Strumenti potenti che fanno funzionare davvero la collaborazione multi-agente."
+ },
+ "pricing": {
+ "sectionTitle": "Installazione gratuita. Modello gratuito incluso.",
+ "sectionSubtitle": "Inizia subito con un modello gratuito senza autenticazione - nessun account, chiave API o carta di credito. Connetti Claude, Codex, OpenCode/OpenRouter o l'accesso di altri provider solo quando vuoi più modelli.",
+ "getStarted": "Scarica ora",
+ "popular": "Gratis",
+ "freeModelCallout": "Modello gratuito senza autenticazione incluso",
+ "note": "Agent Teams non ha un piano a pagamento. Il modello gratuito senza autenticazione ti permette di provarlo subito; l'utilizzo a pagamento dei provider è facoltativo e controllato dal provider che scegli."
+ },
+ "testimonials": {
+ "sectionTitle": "Cosa dicono gli sviluppatori",
+ "sectionSubtitle": "Feedback reali da chi crea davvero",
+ "showMore": "Mostra di più",
+ "showLess": "Mostra di meno",
+ "feedbackCta": "Vuoi condividere la tua esperienza? Apri una issue su"
+ },
+ "faq": {
+ "sectionTitle": "Hai domande? Abbiamo le risposte",
+ "subtitle": "Tutto ciò che devi sapere su Agent Teams"
+ },
+ "comparison": {
+ "sectionTitle": "Come ci confrontiamo",
+ "sectionSubtitle": "Confronto funzionalità per funzionalità con altri strumenti di coding AI.",
+ "feature": "Funzionalità",
+ "robotBubble": "Giudica tu stesso",
+ "features": {
+ "crossTeam": "Comunicazione tra team",
+ "agentMessaging": "Messaggistica tra agenti",
+ "linkedTasks": "Task collegati",
+ "sessionAnalysis": "Analisi della sessione",
+ "taskAttachments": "Allegati ai task",
+ "hunkReview": "Revisione a livello di hunk",
+ "codeEditor": "Editor di codice integrato",
+ "fullAutonomy": "Autonomia completa",
+ "taskDeps": "Dipendenze tra task",
+ "reviewWorkflow": "Flusso di revisione",
+ "zeroSetup": "Configurazione zero",
+ "kanban": "Bacheca Kanban",
+ "execLog": "Log di esecuzione",
+ "liveProcesses": "Processi dal vivo",
+ "runtimeLoad": "CPU/RAM per membro del team",
+ "perTaskReview": "Revisione del codice per task",
+ "flexAutonomy": "Autonomia flessibile",
+ "worktree": "Isolamento worktree Git",
+ "multiAgent": "Membri del team AI misti",
+ "liveWorkGraph": "Mappa del team dal vivo",
+ "liveTeam": "Membri del team dal vivo",
+ "teamWorkspace": "Spazio di lavoro del team",
+ "launchProof": "Stato di avvio dei membri del team",
+ "orgGovernance": "Organigramma / governance",
+ "budgetControls": "Controlli di budget",
+ "price": "Prezzo"
+ }
+ },
+ "screenshots": {
+ "sectionTitle": "Guardalo in azione",
+ "sectionSubtitle": "Screenshot reali dall'app — bacheca Kanban, revisione del codice, team di agenti e altro ancora."
+ },
+ "common": {
+ "learnMore": "Scopri di più",
+ "statusLabel": "Stato:",
+ "previous": "Precedente",
+ "next": "Successivo"
+ },
+ "footer": {
+ "copyright": "© {year} Agent Teams",
+ "tagline": "Orchestrazione di agenti AI per sviluppatori",
+ "robotBubble": "Sto aspettando",
+ "links": {
+ "github": "GitHub",
+ "author": "Autore",
+ "docs": "Documentazione"
+ }
+ },
+ "meta": {
+ "homeTitle": "Agent Teams - Orchestrazione di agenti AI per sviluppatori",
+ "homeDescription": "App desktop gratuita e open source per team di agenti AI. Inizia con un modello gratuito senza autenticazione, poi connetti Claude, Codex o OpenCode quando ti servono più modelli.",
+ "downloadTitle": "Scarica Agent Teams per macOS, Windows e Linux",
+ "downloadDescription": "Scarica Agent Teams per macOS, Windows e Linux. App desktop gratuita e open source per team di agenti Claude, Codex e OpenCode."
+ },
+ "error": {
+ "notFoundTitle": "Pagina non trovata",
+ "notFoundDescription": "La pagina che stai cercando non esiste o è stata spostata.",
+ "genericTitle": "Qualcosa è andato storto",
+ "genericDescription": "Si è verificato un errore imprevisto. Riprova più tardi.",
+ "goHome": "Vai alla homepage"
+ }
+}
diff --git a/landing/locales/mr.json b/landing/locales/mr.json
new file mode 100644
index 00000000..e728ab70
--- /dev/null
+++ b/landing/locales/mr.json
@@ -0,0 +1,173 @@
+{
+ "nav": {
+ "features": "वैशिष्ट्ये",
+ "screenshots": "स्क्रीनशॉट्स",
+ "docs": "दस्तऐवजीकरण",
+ "comparison": "तुलना करा",
+ "download": "डाउनलोड",
+ "pricing": "मोफत",
+ "faq": "FAQ",
+ "viewOnGithub": "GitHub वर पाहा",
+ "openMenu": "मेनू उघडा",
+ "closeMenu": "मेनू बंद करा",
+ "short": {
+ "screenshots": "शॉट्स",
+ "docs": "दस्तऐवज",
+ "download": "मिळवा",
+ "comparison": "तुलना",
+ "pricing": "मोफत"
+ }
+ },
+ "hero": {
+ "badge": "Agent Teams",
+ "downloadNow": "आता डाउनलोड करा",
+ "ctaPrimary": "{platform} साठी डाउनलोड करा",
+ "ctaSecondary": "तुलना करा",
+ "ctaDocs": "दस्तऐवजीकरण",
+ "preview": "उत्पादन पूर्वावलोकन",
+ "trust": {
+ "agentTeams": "Agent Teams",
+ "kanban": "Kanban बोर्ड",
+ "openSource": "ओपन सोर्स"
+ },
+ "watchDemo": "डेमो पाहा",
+ "videoUnavailable": "व्हिडिओ उपलब्ध नाही",
+ "supportedProviders": "समर्थित AI प्रोव्हायडर्स",
+ "slogan": "खूप कमी करून खूप काही साध्य करा",
+ "platformDefault": "तुमच्या प्लॅटफॉर्मसाठी",
+ "guidesSetup": "मार्गदर्शक आणि सेटअप",
+ "videoFrameLabel": "Agent Teams डेमो पाहा",
+ "commandFeed": "टीम कमांड फीड",
+ "liveDemo": "लाइव्ह डेमो",
+ "demoVideoTitle": "Agent Teams डेमो व्हिडिओ",
+ "demoTitle": "Agent Teams डेमो",
+ "demo": {
+ "ariaLabel": "एजंट टीम डेमो",
+ "live": "LIVE",
+ "waiting": "टास्कची वाट पाहत आहे...",
+ "activity": {
+ "authMiddleware": "ऑथ मिडलवेअर अंमलात आणत आहे...",
+ "unitTests": "API साठी युनिट टेस्ट्स लिहित आहे...",
+ "reviewPr": "PR #42 बदलांचे पुनरावलोकन करत आहे...",
+ "ciPipeline": "CI/CD पाइपलाइन सेट करत आहे...",
+ "refactorDatabase": "डेटाबेस लेयर रिफॅक्टर करत आहे..."
+ },
+ "tasks": {
+ "authApi": "Auth API",
+ "unitTests": "युनिट टेस्ट्स",
+ "ciSetup": "CI सेटअप"
+ },
+ "columns": {
+ "todo": "करायचे आहे",
+ "progress": "प्रगतीपथावर",
+ "review": "पुनरावलोकन",
+ "done": "पूर्ण"
+ }
+ }
+ },
+ "download": {
+ "title": "डाउनलोड",
+ "detected": "आढळले",
+ "systemRequirements": "सिस्टम आवश्यकता",
+ "version": "आवृत्ती {version}",
+ "readyToStart": "सुरू करण्यास तयार!"
+ },
+ "theme": {
+ "dark": "गडद",
+ "light": "उजळ"
+ },
+ "language": {
+ "label": "भाषा",
+ "search": "भाषा शोधा…"
+ },
+ "features": {
+ "sectionTitle": "AI एजंट ऑर्केस्ट्रेशनसाठी आवश्यक असलेले सर्व काही",
+ "sectionSubtitle": "शक्तिशाली टूल्स जे मल्टी-एजंट सहयोग खरोखर काम करण्यास सक्षम करतात."
+ },
+ "pricing": {
+ "sectionTitle": "इन्स्टॉल करण्यास मोफत. मोफत मॉडेल समाविष्ट.",
+ "sectionSubtitle": "ऑथशिवाय मोफत मॉडेलसह त्वरित सुरुवात करा - कोणतेही खाते, API की किंवा क्रेडिट कार्ड नाही. अधिक मॉडेल्स हवे असताना Claude, Codex, OpenCode/OpenRouter किंवा इतर प्रोव्हायडर प्रवेश कनेक्ट करा.",
+ "getStarted": "आता डाउनलोड करा",
+ "popular": "मोफत",
+ "freeModelCallout": "ऑथशिवाय मोफत मॉडेल समाविष्ट",
+ "note": "Agent Teams ला कोणताही सशुल्क स्तर नाही. ऑथशिवाय मोफत मॉडेल तुम्हाला लगेच वापरून पाहू देते; सशुल्क प्रोव्हायडर वापर ऐच्छिक आहे आणि तुम्ही निवडलेल्या प्रोव्हायडरद्वारे नियंत्रित होतो."
+ },
+ "testimonials": {
+ "sectionTitle": "डेव्हलपर्स काय म्हणतात",
+ "sectionSubtitle": "खऱ्या बिल्डर्सकडून खरा अभिप्राय",
+ "showMore": "अधिक दाखवा",
+ "showLess": "कमी दाखवा",
+ "feedbackCta": "तुमचा अनुभव शेअर करायचा आहे? यावर इश्यू उघडा"
+ },
+ "faq": {
+ "sectionTitle": "प्रश्न आहेत? आमच्याकडे उत्तरे आहेत",
+ "subtitle": "Agent Teams बद्दल तुम्हाला आवश्यक असलेले सर्व काही"
+ },
+ "comparison": {
+ "sectionTitle": "आम्ही कशी तुलना करतो",
+ "sectionSubtitle": "इतर AI कोडिंग टूल्ससह वैशिष्ट्य-दर-वैशिष्ट्य तुलना.",
+ "feature": "वैशिष्ट्य",
+ "robotBubble": "स्वतः ठरवा",
+ "features": {
+ "crossTeam": "क्रॉस-टीम संवाद",
+ "agentMessaging": "एजंट-ते-एजंट संदेशवहन",
+ "linkedTasks": "लिंक केलेली टास्क",
+ "sessionAnalysis": "सत्र विश्लेषण",
+ "taskAttachments": "टास्क संलग्नके",
+ "hunkReview": "हंक-स्तरीय पुनरावलोकन",
+ "codeEditor": "अंगभूत कोड एडिटर",
+ "fullAutonomy": "पूर्ण स्वायत्तता",
+ "taskDeps": "टास्क अवलंबित्वे",
+ "reviewWorkflow": "पुनरावलोकन वर्कफ्लो",
+ "zeroSetup": "शून्य सेटअप",
+ "kanban": "Kanban बोर्ड",
+ "execLog": "अंमलबजावणी लॉग्स",
+ "liveProcesses": "लाइव्ह प्रोसेसेस",
+ "runtimeLoad": "प्रति सहकारी CPU/RAM",
+ "perTaskReview": "प्रति-टास्क कोड पुनरावलोकन",
+ "flexAutonomy": "लवचिक स्वायत्तता",
+ "worktree": "Git worktree पृथक्करण",
+ "multiAgent": "मिश्र AI सहकारी",
+ "liveWorkGraph": "लाइव्ह टीम नकाशा",
+ "liveTeam": "लाइव्ह सहकारी",
+ "teamWorkspace": "टीम वर्कस्पेस",
+ "launchProof": "सहकारी लॉन्च स्थिती",
+ "orgGovernance": "ऑर्ग चार्ट / प्रशासन",
+ "budgetControls": "बजेट नियंत्रणे",
+ "price": "किंमत"
+ }
+ },
+ "screenshots": {
+ "sectionTitle": "ते प्रत्यक्षात पाहा",
+ "sectionSubtitle": "अॅपमधील खरे स्क्रीनशॉट्स — kanban बोर्ड, कोड पुनरावलोकन, एजंट टीम्स आणि बरेच काही."
+ },
+ "common": {
+ "learnMore": "अधिक जाणून घ्या",
+ "statusLabel": "स्थिती:",
+ "previous": "मागील",
+ "next": "पुढील"
+ },
+ "footer": {
+ "copyright": "© {year} Agent Teams",
+ "tagline": "डेव्हलपर्ससाठी AI एजंट ऑर्केस्ट्रेशन",
+ "robotBubble": "मी वाट पाहत आहे",
+ "links": {
+ "github": "GitHub",
+ "author": "लेखक",
+ "docs": "दस्तऐवजीकरण"
+ }
+ },
+ "meta": {
+ "homeTitle": "Agent Teams - डेव्हलपर्ससाठी AI एजंट ऑर्केस्ट्रेशन",
+ "homeDescription": "AI एजंट टीम्ससाठी मोफत, ओपन-सोर्स डेस्कटॉप अॅप. ऑथशिवाय मोफत मॉडेलसह सुरुवात करा, मग अधिक मॉडेल्सची गरज असताना Claude, Codex किंवा OpenCode कनेक्ट करा.",
+ "downloadTitle": "macOS, Windows आणि Linux साठी Agent Teams डाउनलोड करा",
+ "downloadDescription": "macOS, Windows आणि Linux साठी Agent Teams डाउनलोड करा. Claude, Codex आणि OpenCode एजंट टीम्ससाठी मोफत ओपन-सोर्स डेस्कटॉप अॅप."
+ },
+ "error": {
+ "notFoundTitle": "पृष्ठ सापडले नाही",
+ "notFoundDescription": "तुम्ही शोधत असलेले पृष्ठ अस्तित्वात नाही किंवा हलवले गेले आहे.",
+ "genericTitle": "काहीतरी चूक झाली",
+ "genericDescription": "एक अनपेक्षित त्रुटी आली. कृपया नंतर पुन्हा प्रयत्न करा.",
+ "goHome": "मुख्यपृष्ठावर जा"
+ }
+}
diff --git a/landing/locales/ms.json b/landing/locales/ms.json
new file mode 100644
index 00000000..ace22821
--- /dev/null
+++ b/landing/locales/ms.json
@@ -0,0 +1,173 @@
+{
+ "nav": {
+ "features": "Ciri",
+ "screenshots": "Tangkapan Skrin",
+ "docs": "Dokumentasi",
+ "comparison": "Banding",
+ "download": "Muat Turun",
+ "pricing": "Percuma",
+ "faq": "Soalan Lazim",
+ "viewOnGithub": "Lihat di GitHub",
+ "openMenu": "Buka menu",
+ "closeMenu": "Tutup menu",
+ "short": {
+ "screenshots": "Tangkapan",
+ "docs": "Dokumen",
+ "download": "Dapatkan",
+ "comparison": "Banding",
+ "pricing": "Percuma"
+ }
+ },
+ "hero": {
+ "badge": "Agent Teams",
+ "downloadNow": "Muat Turun Sekarang",
+ "ctaPrimary": "Muat turun untuk {platform}",
+ "ctaSecondary": "Banding",
+ "ctaDocs": "Dokumentasi",
+ "preview": "Pratonton produk",
+ "trust": {
+ "agentTeams": "Agent Teams",
+ "kanban": "Papan Kanban",
+ "openSource": "Sumber Terbuka"
+ },
+ "watchDemo": "Tonton Demo",
+ "videoUnavailable": "Video tidak tersedia",
+ "supportedProviders": "Pembekal AI yang disokong",
+ "slogan": "Selesaikan banyak perkara dengan melakukan sedikit sahaja",
+ "platformDefault": "Untuk platform anda",
+ "guidesSetup": "Panduan dan persediaan",
+ "videoFrameLabel": "Tonton demo Agent Teams",
+ "commandFeed": "Suapan arahan pasukan",
+ "liveDemo": "Demo langsung",
+ "demoVideoTitle": "Video demo Agent Teams",
+ "demoTitle": "Demo Agent Teams",
+ "demo": {
+ "ariaLabel": "Demo pasukan agen",
+ "live": "LANGSUNG",
+ "waiting": "Menunggu tugasan...",
+ "activity": {
+ "authMiddleware": "Melaksanakan middleware pengesahan...",
+ "unitTests": "Menulis ujian unit untuk API...",
+ "reviewPr": "Menyemak perubahan PR #42...",
+ "ciPipeline": "Menyediakan saluran CI/CD...",
+ "refactorDatabase": "Menstruktur semula lapisan pangkalan data..."
+ },
+ "tasks": {
+ "authApi": "API Pengesahan",
+ "unitTests": "Ujian unit",
+ "ciSetup": "Persediaan CI"
+ },
+ "columns": {
+ "todo": "PERLU DIBUAT",
+ "progress": "SEDANG DIBUAT",
+ "review": "SEMAKAN",
+ "done": "SELESAI"
+ }
+ }
+ },
+ "download": {
+ "title": "Muat Turun",
+ "detected": "Dikesan",
+ "systemRequirements": "Keperluan sistem",
+ "version": "Versi {version}",
+ "readyToStart": "Sedia untuk bermula!"
+ },
+ "theme": {
+ "dark": "Gelap",
+ "light": "Cerah"
+ },
+ "language": {
+ "label": "Bahasa",
+ "search": "Cari bahasa…"
+ },
+ "features": {
+ "sectionTitle": "Semua yang anda perlukan untuk orkestrasi agen AI",
+ "sectionSubtitle": "Alat berkuasa yang membuatkan kerjasama berbilang agen benar-benar berfungsi."
+ },
+ "pricing": {
+ "sectionTitle": "Percuma untuk dipasang. Model percuma disertakan.",
+ "sectionSubtitle": "Mula serta-merta dengan model percuma tanpa pengesahan - tiada akaun, kunci API, atau kad kredit. Sambungkan Claude, Codex, OpenCode/OpenRouter, atau akses pembekal lain hanya apabila anda mahukan lebih banyak model.",
+ "getStarted": "Muat Turun Sekarang",
+ "popular": "Percuma",
+ "freeModelCallout": "Model percuma tanpa pengesahan disertakan",
+ "note": "Agent Teams tiada tingkatan berbayar. Model percuma tanpa pengesahan membolehkan anda mencubanya serta-merta; penggunaan pembekal berbayar adalah pilihan dan dikawal oleh pembekal yang anda pilih."
+ },
+ "testimonials": {
+ "sectionTitle": "Apa kata pembangun",
+ "sectionSubtitle": "Maklum balas sebenar daripada pembina sebenar",
+ "showMore": "Tunjuk lebih banyak",
+ "showLess": "Tunjuk kurang",
+ "feedbackCta": "Mahu berkongsi pengalaman anda? Buka isu di"
+ },
+ "faq": {
+ "sectionTitle": "Ada soalan? Kami ada jawapannya",
+ "subtitle": "Semua yang anda perlu tahu tentang Agent Teams"
+ },
+ "comparison": {
+ "sectionTitle": "Bagaimana kami berbanding",
+ "sectionSubtitle": "Perbandingan ciri demi ciri dengan alat pengekodan AI yang lain.",
+ "feature": "Ciri",
+ "robotBubble": "Nilai sendiri",
+ "features": {
+ "crossTeam": "Komunikasi merentas pasukan",
+ "agentMessaging": "Pemesejan agen ke agen",
+ "linkedTasks": "Tugasan terpaut",
+ "sessionAnalysis": "Analisis sesi",
+ "taskAttachments": "Lampiran tugasan",
+ "hunkReview": "Semakan peringkat hunk",
+ "codeEditor": "Editor kod terbina dalam",
+ "fullAutonomy": "Autonomi penuh",
+ "taskDeps": "Kebergantungan tugasan",
+ "reviewWorkflow": "Aliran kerja semakan",
+ "zeroSetup": "Tanpa persediaan",
+ "kanban": "Papan Kanban",
+ "execLog": "Log pelaksanaan",
+ "liveProcesses": "Proses langsung",
+ "runtimeLoad": "CPU/RAM setiap rakan pasukan",
+ "perTaskReview": "Semakan kod setiap tugasan",
+ "flexAutonomy": "Autonomi fleksibel",
+ "worktree": "Pengasingan worktree Git",
+ "multiAgent": "Rakan pasukan AI campuran",
+ "liveWorkGraph": "Peta pasukan langsung",
+ "liveTeam": "Rakan pasukan langsung",
+ "teamWorkspace": "Ruang kerja pasukan",
+ "launchProof": "Status pelancaran rakan pasukan",
+ "orgGovernance": "Carta organisasi / tadbir urus",
+ "budgetControls": "Kawalan belanjawan",
+ "price": "Harga"
+ }
+ },
+ "screenshots": {
+ "sectionTitle": "Lihat ia beraksi",
+ "sectionSubtitle": "Tangkapan skrin sebenar daripada aplikasi — papan kanban, semakan kod, pasukan agen, dan banyak lagi."
+ },
+ "common": {
+ "learnMore": "Ketahui lebih lanjut",
+ "statusLabel": "Status:",
+ "previous": "Sebelumnya",
+ "next": "Seterusnya"
+ },
+ "footer": {
+ "copyright": "© {year} Agent Teams",
+ "tagline": "Orkestrasi agen AI untuk pembangun",
+ "robotBubble": "Saya sedang menunggu",
+ "links": {
+ "github": "GitHub",
+ "author": "Pengarang",
+ "docs": "Dokumentasi"
+ }
+ },
+ "meta": {
+ "homeTitle": "Agent Teams - Orkestrasi Agen AI untuk Pembangun",
+ "homeDescription": "Aplikasi desktop sumber terbuka percuma untuk pasukan agen AI. Mulakan dengan model percuma tanpa pengesahan, kemudian sambungkan Claude, Codex, atau OpenCode apabila anda perlukan lebih banyak model.",
+ "downloadTitle": "Muat turun Agent Teams untuk macOS, Windows, dan Linux",
+ "downloadDescription": "Muat turun Agent Teams untuk macOS, Windows, dan Linux. Aplikasi desktop sumber terbuka percuma untuk pasukan agen Claude, Codex, dan OpenCode."
+ },
+ "error": {
+ "notFoundTitle": "Halaman tidak ditemui",
+ "notFoundDescription": "Halaman yang anda cari tidak wujud atau telah dialihkan.",
+ "genericTitle": "Sesuatu telah berlaku",
+ "genericDescription": "Ralat tidak dijangka berlaku. Sila cuba lagi kemudian.",
+ "goHome": "Ke halaman utama"
+ }
+}
diff --git a/landing/locales/nl.json b/landing/locales/nl.json
new file mode 100644
index 00000000..32f01f30
--- /dev/null
+++ b/landing/locales/nl.json
@@ -0,0 +1,173 @@
+{
+ "nav": {
+ "features": "Functies",
+ "screenshots": "Schermafbeeldingen",
+ "docs": "Documentatie",
+ "comparison": "Vergelijken",
+ "download": "Downloaden",
+ "pricing": "Gratis",
+ "faq": "Veelgestelde vragen",
+ "viewOnGithub": "Bekijken op GitHub",
+ "openMenu": "Menu openen",
+ "closeMenu": "Menu sluiten",
+ "short": {
+ "screenshots": "Beelden",
+ "docs": "Docs",
+ "download": "Halen",
+ "comparison": "Vergelijk",
+ "pricing": "Gratis"
+ }
+ },
+ "hero": {
+ "badge": "Agent Teams",
+ "downloadNow": "Nu downloaden",
+ "ctaPrimary": "Downloaden voor {platform}",
+ "ctaSecondary": "Vergelijken",
+ "ctaDocs": "Documentatie",
+ "preview": "Productvoorbeeld",
+ "trust": {
+ "agentTeams": "Agent Teams",
+ "kanban": "Kanban-bord",
+ "openSource": "Open source"
+ },
+ "watchDemo": "Demo bekijken",
+ "videoUnavailable": "Video niet beschikbaar",
+ "supportedProviders": "Ondersteunde AI-providers",
+ "slogan": "Bereik veel door heel weinig te doen",
+ "platformDefault": "Voor jouw platform",
+ "guidesSetup": "Gidsen en installatie",
+ "videoFrameLabel": "Bekijk de Agent Teams-demo",
+ "commandFeed": "Teamcommandofeed",
+ "liveDemo": "Live demo",
+ "demoVideoTitle": "Agent Teams-demovideo",
+ "demoTitle": "Agent Teams-demo",
+ "demo": {
+ "ariaLabel": "Agentteam-demo",
+ "live": "LIVE",
+ "waiting": "Wachten op taken...",
+ "activity": {
+ "authMiddleware": "Auth-middleware implementeren...",
+ "unitTests": "Unittests schrijven voor API...",
+ "reviewPr": "Wijzigingen van PR #42 controleren...",
+ "ciPipeline": "CI/CD-pijplijn opzetten...",
+ "refactorDatabase": "Databaselaag refactoren..."
+ },
+ "tasks": {
+ "authApi": "Auth-API",
+ "unitTests": "Unittests",
+ "ciSetup": "CI-installatie"
+ },
+ "columns": {
+ "todo": "TE DOEN",
+ "progress": "BEZIG",
+ "review": "REVIEW",
+ "done": "KLAAR"
+ }
+ }
+ },
+ "download": {
+ "title": "Downloaden",
+ "detected": "Gedetecteerd",
+ "systemRequirements": "Systeemvereisten",
+ "version": "Versie {version}",
+ "readyToStart": "Klaar om te beginnen!"
+ },
+ "theme": {
+ "dark": "Donker",
+ "light": "Licht"
+ },
+ "language": {
+ "label": "Taal",
+ "search": "Taal zoeken…"
+ },
+ "features": {
+ "sectionTitle": "Alles wat je nodig hebt voor AI-agentorkestratie",
+ "sectionSubtitle": "Krachtige tools die samenwerking tussen meerdere agents echt laten werken."
+ },
+ "pricing": {
+ "sectionTitle": "Gratis te installeren. Gratis model inbegrepen.",
+ "sectionSubtitle": "Begin direct met een gratis model zonder authenticatie - geen account, API-sleutel of creditcard. Verbind Claude, Codex, OpenCode/OpenRouter of andere providertoegang alleen wanneer je meer modellen wilt.",
+ "getStarted": "Nu downloaden",
+ "popular": "Gratis",
+ "freeModelCallout": "Gratis model zonder authenticatie inbegrepen",
+ "note": "Agent Teams heeft geen betaald niveau. Met het gratis model zonder authenticatie kun je het meteen uitproberen; betaald providergebruik is optioneel en wordt beheerd door de provider die je kiest."
+ },
+ "testimonials": {
+ "sectionTitle": "Wat ontwikkelaars zeggen",
+ "sectionSubtitle": "Echte feedback van echte makers",
+ "showMore": "Meer tonen",
+ "showLess": "Minder tonen",
+ "feedbackCta": "Wil je je ervaring delen? Open een issue op"
+ },
+ "faq": {
+ "sectionTitle": "Vragen? Wij hebben antwoorden",
+ "subtitle": "Alles wat je moet weten over Agent Teams"
+ },
+ "comparison": {
+ "sectionTitle": "Hoe wij ons verhouden",
+ "sectionSubtitle": "Functie-voor-functievergelijking met andere AI-codeertools.",
+ "feature": "Functie",
+ "robotBubble": "Oordeel zelf",
+ "features": {
+ "crossTeam": "Communicatie tussen teams",
+ "agentMessaging": "Berichten tussen agents",
+ "linkedTasks": "Gekoppelde taken",
+ "sessionAnalysis": "Sessieanalyse",
+ "taskAttachments": "Taakbijlagen",
+ "hunkReview": "Review op hunk-niveau",
+ "codeEditor": "Ingebouwde code-editor",
+ "fullAutonomy": "Volledige autonomie",
+ "taskDeps": "Taakafhankelijkheden",
+ "reviewWorkflow": "Reviewworkflow",
+ "zeroSetup": "Geen installatie nodig",
+ "kanban": "Kanban-bord",
+ "execLog": "Uitvoeringslogboeken",
+ "liveProcesses": "Live processen",
+ "runtimeLoad": "CPU/RAM per teamlid",
+ "perTaskReview": "Codereview per taak",
+ "flexAutonomy": "Flexibele autonomie",
+ "worktree": "Git-worktree-isolatie",
+ "multiAgent": "Gemengde AI-teamleden",
+ "liveWorkGraph": "Live teamkaart",
+ "liveTeam": "Live teamleden",
+ "teamWorkspace": "Teamwerkruimte",
+ "launchProof": "Startstatus teamlid",
+ "orgGovernance": "Organigram / governance",
+ "budgetControls": "Budgetbeheer",
+ "price": "Prijs"
+ }
+ },
+ "screenshots": {
+ "sectionTitle": "Zie het in actie",
+ "sectionSubtitle": "Echte schermafbeeldingen uit de app — Kanban-bord, codereview, agentteams en meer."
+ },
+ "common": {
+ "learnMore": "Meer informatie",
+ "statusLabel": "Status:",
+ "previous": "Vorige",
+ "next": "Volgende"
+ },
+ "footer": {
+ "copyright": "© {year} Agent Teams",
+ "tagline": "AI-agentorkestratie voor ontwikkelaars",
+ "robotBubble": "Ik wacht",
+ "links": {
+ "github": "GitHub",
+ "author": "Auteur",
+ "docs": "Documentatie"
+ }
+ },
+ "meta": {
+ "homeTitle": "Agent Teams - AI-agentorkestratie voor ontwikkelaars",
+ "homeDescription": "Gratis, open-source desktop-app voor AI-agentteams. Begin met een gratis model zonder authenticatie en verbind daarna Claude, Codex of OpenCode wanneer je meer modellen nodig hebt.",
+ "downloadTitle": "Download Agent Teams voor macOS, Windows en Linux",
+ "downloadDescription": "Download Agent Teams voor macOS, Windows en Linux. Gratis open-source desktop-app voor agentteams van Claude, Codex en OpenCode."
+ },
+ "error": {
+ "notFoundTitle": "Pagina niet gevonden",
+ "notFoundDescription": "De pagina die je zoekt bestaat niet of is verplaatst.",
+ "genericTitle": "Er is iets misgegaan",
+ "genericDescription": "Er is een onverwachte fout opgetreden. Probeer het later opnieuw.",
+ "goHome": "Naar de startpagina"
+ }
+}
diff --git a/landing/locales/pl.json b/landing/locales/pl.json
new file mode 100644
index 00000000..002f5c9f
--- /dev/null
+++ b/landing/locales/pl.json
@@ -0,0 +1,173 @@
+{
+ "nav": {
+ "features": "Funkcje",
+ "screenshots": "Zrzuty ekranu",
+ "docs": "Dokumentacja",
+ "comparison": "Porównaj",
+ "download": "Pobierz",
+ "pricing": "Za darmo",
+ "faq": "FAQ",
+ "viewOnGithub": "Zobacz na GitHub",
+ "openMenu": "Otwórz menu",
+ "closeMenu": "Zamknij menu",
+ "short": {
+ "screenshots": "Zrzuty",
+ "docs": "Dok.",
+ "download": "Pobierz",
+ "comparison": "Porównaj",
+ "pricing": "Darmowe"
+ }
+ },
+ "hero": {
+ "badge": "Agent Teams",
+ "downloadNow": "Pobierz teraz",
+ "ctaPrimary": "Pobierz dla {platform}",
+ "ctaSecondary": "Porównaj",
+ "ctaDocs": "Dokumentacja",
+ "preview": "Podgląd produktu",
+ "trust": {
+ "agentTeams": "Agent Teams",
+ "kanban": "Tablica Kanban",
+ "openSource": "Open Source"
+ },
+ "watchDemo": "Obejrzyj demo",
+ "videoUnavailable": "Wideo niedostępne",
+ "supportedProviders": "Obsługiwani dostawcy AI",
+ "slogan": "Osiągaj wiele, robiąc bardzo mało",
+ "platformDefault": "Dla Twojej platformy",
+ "guidesSetup": "Przewodniki i konfiguracja",
+ "videoFrameLabel": "Obejrzyj demo Agent Teams",
+ "commandFeed": "Kanał poleceń zespołu",
+ "liveDemo": "Demo na żywo",
+ "demoVideoTitle": "Wideo demo Agent Teams",
+ "demoTitle": "Demo Agent Teams",
+ "demo": {
+ "ariaLabel": "Demo zespołu agentów",
+ "live": "NA ŻYWO",
+ "waiting": "Oczekiwanie na zadania...",
+ "activity": {
+ "authMiddleware": "Implementacja middleware uwierzytelniania...",
+ "unitTests": "Pisanie testów jednostkowych dla API...",
+ "reviewPr": "Przeglądanie zmian w PR #42...",
+ "ciPipeline": "Konfiguracja pipeline'u CI/CD...",
+ "refactorDatabase": "Refaktoryzacja warstwy bazy danych..."
+ },
+ "tasks": {
+ "authApi": "API uwierzytelniania",
+ "unitTests": "Testy jednostkowe",
+ "ciSetup": "Konfiguracja CI"
+ },
+ "columns": {
+ "todo": "DO ZROBIENIA",
+ "progress": "W TOKU",
+ "review": "PRZEGLĄD",
+ "done": "GOTOWE"
+ }
+ }
+ },
+ "download": {
+ "title": "Pobierz",
+ "detected": "Wykryto",
+ "systemRequirements": "Wymagania systemowe",
+ "version": "Wersja {version}",
+ "readyToStart": "Gotowe do startu!"
+ },
+ "theme": {
+ "dark": "Ciemny",
+ "light": "Jasny"
+ },
+ "language": {
+ "label": "Język",
+ "search": "Szukaj języka…"
+ },
+ "features": {
+ "sectionTitle": "Wszystko, czego potrzebujesz do orkiestracji agentów AI",
+ "sectionSubtitle": "Wydajne narzędzia, dzięki którym współpraca wielu agentów naprawdę działa."
+ },
+ "pricing": {
+ "sectionTitle": "Darmowa instalacja. Darmowy model w zestawie.",
+ "sectionSubtitle": "Zacznij od razu z darmowym modelem bez uwierzytelniania - bez konta, klucza API czy karty kredytowej. Podłącz dostęp do Claude, Codex, OpenCode/OpenRouter lub innego dostawcy dopiero wtedy, gdy chcesz więcej modeli.",
+ "getStarted": "Pobierz teraz",
+ "popular": "Za darmo",
+ "freeModelCallout": "W zestawie darmowy model bez uwierzytelniania",
+ "note": "Agent Teams nie ma płatnego planu. Darmowy model bez uwierzytelniania pozwala wypróbować aplikację od razu; płatne korzystanie z dostawców jest opcjonalne i kontrolowane przez wybranego dostawcę."
+ },
+ "testimonials": {
+ "sectionTitle": "Co mówią deweloperzy",
+ "sectionSubtitle": "Prawdziwe opinie prawdziwych twórców",
+ "showMore": "Pokaż więcej",
+ "showLess": "Pokaż mniej",
+ "feedbackCta": "Chcesz podzielić się swoim doświadczeniem? Zgłoś problem na"
+ },
+ "faq": {
+ "sectionTitle": "Masz pytania? Mamy odpowiedzi",
+ "subtitle": "Wszystko, co musisz wiedzieć o Agent Teams"
+ },
+ "comparison": {
+ "sectionTitle": "Jak wypadamy na tle innych",
+ "sectionSubtitle": "Porównanie funkcja po funkcji z innymi narzędziami AI do kodowania.",
+ "feature": "Funkcja",
+ "robotBubble": "Oceń sam",
+ "features": {
+ "crossTeam": "Komunikacja między zespołami",
+ "agentMessaging": "Wiadomości między agentami",
+ "linkedTasks": "Powiązane zadania",
+ "sessionAnalysis": "Analiza sesji",
+ "taskAttachments": "Załączniki do zadań",
+ "hunkReview": "Przegląd na poziomie fragmentów",
+ "codeEditor": "Wbudowany edytor kodu",
+ "fullAutonomy": "Pełna autonomia",
+ "taskDeps": "Zależności zadań",
+ "reviewWorkflow": "Proces przeglądu",
+ "zeroSetup": "Zero konfiguracji",
+ "kanban": "Tablica Kanban",
+ "execLog": "Logi wykonania",
+ "liveProcesses": "Procesy na żywo",
+ "runtimeLoad": "CPU/RAM na członka zespołu",
+ "perTaskReview": "Przegląd kodu dla każdego zadania",
+ "flexAutonomy": "Elastyczna autonomia",
+ "worktree": "Izolacja przez Git worktree",
+ "multiAgent": "Mieszani członkowie zespołu AI",
+ "liveWorkGraph": "Mapa zespołu na żywo",
+ "liveTeam": "Członkowie zespołu na żywo",
+ "teamWorkspace": "Przestrzeń robocza zespołu",
+ "launchProof": "Status uruchomienia członka zespołu",
+ "orgGovernance": "Schemat organizacyjny / zarządzanie",
+ "budgetControls": "Kontrola budżetu",
+ "price": "Cena"
+ }
+ },
+ "screenshots": {
+ "sectionTitle": "Zobacz to w akcji",
+ "sectionSubtitle": "Prawdziwe zrzuty ekranu z aplikacji — tablica Kanban, przegląd kodu, zespoły agentów i więcej."
+ },
+ "common": {
+ "learnMore": "Dowiedz się więcej",
+ "statusLabel": "Status:",
+ "previous": "Poprzedni",
+ "next": "Następny"
+ },
+ "footer": {
+ "copyright": "© {year} Agent Teams",
+ "tagline": "Orkiestracja agentów AI dla deweloperów",
+ "robotBubble": "Czekam",
+ "links": {
+ "github": "GitHub",
+ "author": "Autor",
+ "docs": "Dokumentacja"
+ }
+ },
+ "meta": {
+ "homeTitle": "Agent Teams - Orkiestracja agentów AI dla deweloperów",
+ "homeDescription": "Darmowa aplikacja desktopowa open-source dla zespołów agentów AI. Zacznij od darmowego modelu bez uwierzytelniania, a następnie podłącz Claude, Codex lub OpenCode, gdy potrzebujesz więcej modeli.",
+ "downloadTitle": "Pobierz Agent Teams na macOS, Windows i Linux",
+ "downloadDescription": "Pobierz Agent Teams na macOS, Windows i Linux. Darmowa aplikacja desktopowa open-source dla zespołów agentów Claude, Codex i OpenCode."
+ },
+ "error": {
+ "notFoundTitle": "Nie znaleziono strony",
+ "notFoundDescription": "Strona, której szukasz, nie istnieje lub została przeniesiona.",
+ "genericTitle": "Coś poszło nie tak",
+ "genericDescription": "Wystąpił nieoczekiwany błąd. Spróbuj ponownie później.",
+ "goHome": "Przejdź do strony głównej"
+ }
+}
diff --git a/landing/locales/ro.json b/landing/locales/ro.json
new file mode 100644
index 00000000..e940d1b3
--- /dev/null
+++ b/landing/locales/ro.json
@@ -0,0 +1,173 @@
+{
+ "nav": {
+ "features": "Funcționalități",
+ "screenshots": "Capturi de ecran",
+ "docs": "Documentație",
+ "comparison": "Comparație",
+ "download": "Descarcă",
+ "pricing": "Gratuit",
+ "faq": "Întrebări frecvente",
+ "viewOnGithub": "Vezi pe GitHub",
+ "openMenu": "Deschide meniul",
+ "closeMenu": "Închide meniul",
+ "short": {
+ "screenshots": "Capturi",
+ "docs": "Docs",
+ "download": "Obține",
+ "comparison": "Compară",
+ "pricing": "Gratuit"
+ }
+ },
+ "hero": {
+ "badge": "Agent Teams",
+ "downloadNow": "Descarcă acum",
+ "ctaPrimary": "Descarcă pentru {platform}",
+ "ctaSecondary": "Compară",
+ "ctaDocs": "Documentație",
+ "preview": "Previzualizare produs",
+ "trust": {
+ "agentTeams": "Agent Teams",
+ "kanban": "Tablă Kanban",
+ "openSource": "Open Source"
+ },
+ "watchDemo": "Vezi demonstrația",
+ "videoUnavailable": "Video indisponibil",
+ "supportedProviders": "Furnizori AI compatibili",
+ "slogan": "Realizează multe făcând foarte puțin",
+ "platformDefault": "Pentru platforma ta",
+ "guidesSetup": "Ghiduri și configurare",
+ "videoFrameLabel": "Vezi demonstrația Agent Teams",
+ "commandFeed": "Flux de comenzi al echipei",
+ "liveDemo": "Demonstrație live",
+ "demoVideoTitle": "Video demonstrativ Agent Teams",
+ "demoTitle": "Demonstrație Agent Teams",
+ "demo": {
+ "ariaLabel": "Demonstrație echipă de agenți",
+ "live": "LIVE",
+ "waiting": "Se așteaptă sarcini...",
+ "activity": {
+ "authMiddleware": "Se implementează middleware-ul de autentificare...",
+ "unitTests": "Se scriu teste unitare pentru API...",
+ "reviewPr": "Se revizuiesc modificările din PR #42...",
+ "ciPipeline": "Se configurează pipeline-ul CI/CD...",
+ "refactorDatabase": "Se refactorizează stratul bazei de date..."
+ },
+ "tasks": {
+ "authApi": "API de autentificare",
+ "unitTests": "Teste unitare",
+ "ciSetup": "Configurare CI"
+ },
+ "columns": {
+ "todo": "DE FĂCUT",
+ "progress": "ÎN CURS",
+ "review": "REVIZUIRE",
+ "done": "FINALIZAT"
+ }
+ }
+ },
+ "download": {
+ "title": "Descarcă",
+ "detected": "Detectat",
+ "systemRequirements": "Cerințe de sistem",
+ "version": "Versiunea {version}",
+ "readyToStart": "Gata de pornire!"
+ },
+ "theme": {
+ "dark": "Întunecat",
+ "light": "Luminos"
+ },
+ "language": {
+ "label": "Limbă",
+ "search": "Caută limba…"
+ },
+ "features": {
+ "sectionTitle": "Tot ce ai nevoie pentru orchestrarea agenților AI",
+ "sectionSubtitle": "Unelte puternice care fac colaborarea multi-agent să funcționeze cu adevărat."
+ },
+ "pricing": {
+ "sectionTitle": "Gratuit de instalat. Model gratuit inclus.",
+ "sectionSubtitle": "Începe imediat cu un model gratuit fără autentificare - fără cont, cheie API sau card de credit. Conectează Claude, Codex, OpenCode/OpenRouter sau alt furnizor doar când vrei mai multe modele.",
+ "getStarted": "Descarcă acum",
+ "popular": "Gratuit",
+ "freeModelCallout": "Model gratuit fără autentificare inclus",
+ "note": "Agent Teams nu are niciun nivel cu plată. Modelul gratuit fără autentificare îți permite să îl încerci imediat; utilizarea unui furnizor cu plată este opțională și controlată de furnizorul pe care îl alegi."
+ },
+ "testimonials": {
+ "sectionTitle": "Ce spun dezvoltatorii",
+ "sectionSubtitle": "Feedback real de la creatori reali",
+ "showMore": "Arată mai mult",
+ "showLess": "Arată mai puțin",
+ "feedbackCta": "Vrei să îți împărtășești experiența? Deschide un issue pe"
+ },
+ "faq": {
+ "sectionTitle": "Ai întrebări? Avem răspunsuri",
+ "subtitle": "Tot ce trebuie să știi despre Agent Teams"
+ },
+ "comparison": {
+ "sectionTitle": "Cum ne comparăm",
+ "sectionSubtitle": "Comparație funcție cu funcție cu alte unelte AI de codare.",
+ "feature": "Funcție",
+ "robotBubble": "Judecă singur",
+ "features": {
+ "crossTeam": "Comunicare între echipe",
+ "agentMessaging": "Mesagerie agent la agent",
+ "linkedTasks": "Sarcini conectate",
+ "sessionAnalysis": "Analiză sesiune",
+ "taskAttachments": "Atașamente la sarcini",
+ "hunkReview": "Revizuire la nivel de fragment",
+ "codeEditor": "Editor de cod integrat",
+ "fullAutonomy": "Autonomie completă",
+ "taskDeps": "Dependențe între sarcini",
+ "reviewWorkflow": "Flux de revizuire",
+ "zeroSetup": "Configurare zero",
+ "kanban": "Tablă Kanban",
+ "execLog": "Jurnale de execuție",
+ "liveProcesses": "Procese live",
+ "runtimeLoad": "CPU/RAM per coechipier",
+ "perTaskReview": "Revizuire cod per sarcină",
+ "flexAutonomy": "Autonomie flexibilă",
+ "worktree": "Izolare prin Git worktree",
+ "multiAgent": "Coechipieri AI micști",
+ "liveWorkGraph": "Hartă live a echipei",
+ "liveTeam": "Coechipieri live",
+ "teamWorkspace": "Spațiu de lucru al echipei",
+ "launchProof": "Starea de lansare a coechipierilor",
+ "orgGovernance": "Organigramă / guvernanță",
+ "budgetControls": "Controale de buget",
+ "price": "Preț"
+ }
+ },
+ "screenshots": {
+ "sectionTitle": "Vezi-l în acțiune",
+ "sectionSubtitle": "Capturi de ecran reale din aplicație — tablă Kanban, revizuire cod, echipe de agenți și multe altele."
+ },
+ "common": {
+ "learnMore": "Află mai multe",
+ "statusLabel": "Stare:",
+ "previous": "Anterior",
+ "next": "Următor"
+ },
+ "footer": {
+ "copyright": "© {year} Agent Teams",
+ "tagline": "Orchestrare de agenți AI pentru dezvoltatori",
+ "robotBubble": "Aștept",
+ "links": {
+ "github": "GitHub",
+ "author": "Autor",
+ "docs": "Documentație"
+ }
+ },
+ "meta": {
+ "homeTitle": "Agent Teams - Orchestrare de agenți AI pentru dezvoltatori",
+ "homeDescription": "Aplicație desktop gratuită și open-source pentru echipe de agenți AI. Începe cu un model gratuit fără autentificare, apoi conectează Claude, Codex sau OpenCode când ai nevoie de mai multe modele.",
+ "downloadTitle": "Descarcă Agent Teams pentru macOS, Windows și Linux",
+ "downloadDescription": "Descarcă Agent Teams pentru macOS, Windows și Linux. Aplicație desktop gratuită și open-source pentru echipe de agenți Claude, Codex și OpenCode."
+ },
+ "error": {
+ "notFoundTitle": "Pagina nu a fost găsită",
+ "notFoundDescription": "Pagina pe care o cauți nu există sau a fost mutată.",
+ "genericTitle": "A apărut o eroare",
+ "genericDescription": "A apărut o eroare neașteptată. Te rugăm să încerci din nou mai târziu.",
+ "goHome": "Mergi la pagina principală"
+ }
+}
diff --git a/landing/locales/sw.json b/landing/locales/sw.json
new file mode 100644
index 00000000..c727c803
--- /dev/null
+++ b/landing/locales/sw.json
@@ -0,0 +1,173 @@
+{
+ "nav": {
+ "features": "Vipengele",
+ "screenshots": "Picha za skrini",
+ "docs": "Nyaraka",
+ "comparison": "Linganisha",
+ "download": "Pakua",
+ "pricing": "Bure",
+ "faq": "Maswali",
+ "viewOnGithub": "Tazama kwenye GitHub",
+ "openMenu": "Fungua menyu",
+ "closeMenu": "Funga menyu",
+ "short": {
+ "screenshots": "Picha",
+ "docs": "Nyaraka",
+ "download": "Pakua",
+ "comparison": "Linganisha",
+ "pricing": "Bure"
+ }
+ },
+ "hero": {
+ "badge": "Agent Teams",
+ "downloadNow": "Pakua Sasa",
+ "ctaPrimary": "Pakua kwa {platform}",
+ "ctaSecondary": "Linganisha",
+ "ctaDocs": "Nyaraka",
+ "preview": "Onyesho la awali la bidhaa",
+ "trust": {
+ "agentTeams": "Agent Teams",
+ "kanban": "Ubao wa Kanban",
+ "openSource": "Chanzo Huria"
+ },
+ "watchDemo": "Tazama Onyesho",
+ "videoUnavailable": "Video haipatikani",
+ "supportedProviders": "Watoa huduma za AI wanaoungwa mkono",
+ "slogan": "Kamilisha mengi kwa kufanya kidogo",
+ "platformDefault": "Kwa jukwaa lako",
+ "guidesSetup": "Miongozo na usanidi",
+ "videoFrameLabel": "Tazama onyesho la Agent Teams",
+ "commandFeed": "Mlisho wa amri za timu",
+ "liveDemo": "Onyesho la moja kwa moja",
+ "demoVideoTitle": "Video ya onyesho la Agent Teams",
+ "demoTitle": "Onyesho la Agent Teams",
+ "demo": {
+ "ariaLabel": "Onyesho la timu ya wakala",
+ "live": "MOJA KWA MOJA",
+ "waiting": "Inasubiri kazi...",
+ "activity": {
+ "authMiddleware": "Inatekeleza middleware ya uthibitishaji...",
+ "unitTests": "Inaandika majaribio ya kitengo kwa API...",
+ "reviewPr": "Inakagua mabadiliko ya PR #42...",
+ "ciPipeline": "Inasanidi pipeline ya CI/CD...",
+ "refactorDatabase": "Inarekebisha tabaka la hifadhidata..."
+ },
+ "tasks": {
+ "authApi": "API ya Uthibitishaji",
+ "unitTests": "Majaribio ya kitengo",
+ "ciSetup": "Usanidi wa CI"
+ },
+ "columns": {
+ "todo": "ZA KUFANYA",
+ "progress": "ZINAENDELEA",
+ "review": "UKAGUZI",
+ "done": "ZIMEKAMILIKA"
+ }
+ }
+ },
+ "download": {
+ "title": "Pakua",
+ "detected": "Imegunduliwa",
+ "systemRequirements": "Mahitaji ya mfumo",
+ "version": "Toleo {version}",
+ "readyToStart": "Tayari kuanza!"
+ },
+ "theme": {
+ "dark": "Giza",
+ "light": "Mwanga"
+ },
+ "language": {
+ "label": "Lugha",
+ "search": "Tafuta lugha…"
+ },
+ "features": {
+ "sectionTitle": "Kila kitu unachohitaji kwa uratibu wa wakala wa AI",
+ "sectionSubtitle": "Zana zenye nguvu zinazofanya ushirikiano wa mawakala wengi ufanye kazi kweli."
+ },
+ "pricing": {
+ "sectionTitle": "Bure kusakinisha. Modeli ya bure imejumuishwa.",
+ "sectionSubtitle": "Anza papo hapo na modeli ya bure bila uthibitishaji - hakuna akaunti, ufunguo wa API, au kadi ya mkopo. Unganisha Claude, Codex, OpenCode/OpenRouter, au ufikiaji wa mtoa huduma mwingine pale tu unapotaka modeli zaidi.",
+ "getStarted": "Pakua Sasa",
+ "popular": "Bure",
+ "freeModelCallout": "Modeli ya bure bila uthibitishaji imejumuishwa",
+ "note": "Agent Teams haina kiwango cha kulipia. Modeli ya bure bila uthibitishaji inakuruhusu kuijaribu mara moja; matumizi ya mtoa huduma yanayolipiwa ni ya hiari na yanadhibitiwa na mtoa huduma unayechagua."
+ },
+ "testimonials": {
+ "sectionTitle": "Watengenezaji wanasemaje",
+ "sectionSubtitle": "Maoni halisi kutoka kwa wajenzi halisi",
+ "showMore": "Onyesha zaidi",
+ "showLess": "Onyesha kidogo",
+ "feedbackCta": "Unataka kushiriki uzoefu wako? Fungua tatizo kwenye"
+ },
+ "faq": {
+ "sectionTitle": "Una maswali? Tuna majibu",
+ "subtitle": "Kila kitu unachohitaji kujua kuhusu Agent Teams"
+ },
+ "comparison": {
+ "sectionTitle": "Jinsi tunavyolinganishwa",
+ "sectionSubtitle": "Ulinganishaji wa kipengele kwa kipengele na zana nyingine za uandishi wa msimbo za AI.",
+ "feature": "Kipengele",
+ "robotBubble": "Amua mwenyewe",
+ "features": {
+ "crossTeam": "Mawasiliano baina ya timu",
+ "agentMessaging": "Ujumbe wa wakala kwa wakala",
+ "linkedTasks": "Kazi zilizounganishwa",
+ "sessionAnalysis": "Uchambuzi wa kipindi",
+ "taskAttachments": "Viambatisho vya kazi",
+ "hunkReview": "Ukaguzi wa kiwango cha kipande",
+ "codeEditor": "Kihariri cha msimbo kilichojengwa ndani",
+ "fullAutonomy": "Uhuru kamili",
+ "taskDeps": "Utegemezi wa kazi",
+ "reviewWorkflow": "Mtiririko wa ukaguzi",
+ "zeroSetup": "Hakuna usanidi",
+ "kanban": "Ubao wa Kanban",
+ "execLog": "Kumbukumbu za utekelezaji",
+ "liveProcesses": "Michakato hai",
+ "runtimeLoad": "CPU/RAM kwa kila mwanachama",
+ "perTaskReview": "Ukaguzi wa msimbo kwa kila kazi",
+ "flexAutonomy": "Uhuru unaonyumbulika",
+ "worktree": "Utengaji wa worktree ya Git",
+ "multiAgent": "Wanachama wa AI waliochanganyika",
+ "liveWorkGraph": "Ramani hai ya timu",
+ "liveTeam": "Wanachama hai",
+ "teamWorkspace": "Eneo la kazi la timu",
+ "launchProof": "Hali ya uzinduzi wa mwanachama",
+ "orgGovernance": "Chati ya shirika / utawala",
+ "budgetControls": "Vidhibiti vya bajeti",
+ "price": "Bei"
+ }
+ },
+ "screenshots": {
+ "sectionTitle": "Iangalie ikifanya kazi",
+ "sectionSubtitle": "Picha halisi za skrini kutoka kwa programu — ubao wa kanban, ukaguzi wa msimbo, timu za wakala, na zaidi."
+ },
+ "common": {
+ "learnMore": "Jifunze zaidi",
+ "statusLabel": "Hali:",
+ "previous": "Iliyopita",
+ "next": "Inayofuata"
+ },
+ "footer": {
+ "copyright": "© {year} Agent Teams",
+ "tagline": "Uratibu wa wakala wa AI kwa watengenezaji",
+ "robotBubble": "Ninasubiri",
+ "links": {
+ "github": "GitHub",
+ "author": "Mwandishi",
+ "docs": "Nyaraka"
+ }
+ },
+ "meta": {
+ "homeTitle": "Agent Teams - Uratibu wa Wakala wa AI kwa Watengenezaji",
+ "homeDescription": "Programu ya eneo-kazi ya bure, chanzo huria kwa timu za wakala wa AI. Anza na modeli ya bure bila uthibitishaji, kisha unganisha Claude, Codex, au OpenCode unapohitaji modeli zaidi.",
+ "downloadTitle": "Pakua Agent Teams kwa macOS, Windows, na Linux",
+ "downloadDescription": "Pakua Agent Teams kwa macOS, Windows, na Linux. Programu ya eneo-kazi ya bure ya chanzo huria kwa timu za wakala za Claude, Codex, na OpenCode."
+ },
+ "error": {
+ "notFoundTitle": "Ukurasa haukupatikana",
+ "notFoundDescription": "Ukurasa unaoutafuta haupo au umehamishwa.",
+ "genericTitle": "Hitilafu fulani imetokea",
+ "genericDescription": "Hitilafu isiyotarajiwa imetokea. Tafadhali jaribu tena baadaye.",
+ "goHome": "Nenda kwenye ukurasa wa nyumbani"
+ }
+}
diff --git a/landing/locales/ta.json b/landing/locales/ta.json
new file mode 100644
index 00000000..78d9886d
--- /dev/null
+++ b/landing/locales/ta.json
@@ -0,0 +1,173 @@
+{
+ "nav": {
+ "features": "அம்சங்கள்",
+ "screenshots": "ஸ்கிரீன்ஷாட்கள்",
+ "docs": "ஆவணங்கள்",
+ "comparison": "ஒப்பிடு",
+ "download": "பதிவிறக்கு",
+ "pricing": "இலவசம்",
+ "faq": "FAQ",
+ "viewOnGithub": "GitHub இல் காண்",
+ "openMenu": "menu ஐத் திற",
+ "closeMenu": "menu ஐ மூடு",
+ "short": {
+ "screenshots": "படங்கள்",
+ "docs": "Docs",
+ "download": "பெறு",
+ "comparison": "ஒப்பிடு",
+ "pricing": "இலவசம்"
+ }
+ },
+ "hero": {
+ "badge": "Agent Teams",
+ "downloadNow": "இப்போது பதிவிறக்கு",
+ "ctaPrimary": "{platform} க்காக பதிவிறக்கு",
+ "ctaSecondary": "ஒப்பிடு",
+ "ctaDocs": "ஆவணங்கள்",
+ "preview": "தயாரிப்பு முன்னோட்டம்",
+ "trust": {
+ "agentTeams": "Agent Teams",
+ "kanban": "Kanban Board",
+ "openSource": "திறந்த மூலம்"
+ },
+ "watchDemo": "Demo ஐப் பார்",
+ "videoUnavailable": "வீடியோ கிடைக்கவில்லை",
+ "supportedProviders": "ஆதரிக்கப்படும் AI வழங்குநர்கள்",
+ "slogan": "மிகக் குறைவாகச் செய்து நிறைய சாதிக்கவும்",
+ "platformDefault": "உங்கள் தளத்திற்காக",
+ "guidesSetup": "வழிகாட்டிகள் மற்றும் அமைப்பு",
+ "videoFrameLabel": "Agent Teams demo ஐப் பார்",
+ "commandFeed": "Team command feed",
+ "liveDemo": "நேரடி demo",
+ "demoVideoTitle": "Agent Teams demo வீடியோ",
+ "demoTitle": "Agent Teams demo",
+ "demo": {
+ "ariaLabel": "Agent team demo",
+ "live": "LIVE",
+ "waiting": "tasks க்காகக் காத்திருக்கிறது...",
+ "activity": {
+ "authMiddleware": "auth middleware ஐ செயல்படுத்துகிறது...",
+ "unitTests": "API க்கான unit tests எழுதுகிறது...",
+ "reviewPr": "PR #42 மாற்றங்களை மதிப்பாய்வு செய்கிறது...",
+ "ciPipeline": "CI/CD pipeline ஐ அமைக்கிறது...",
+ "refactorDatabase": "database layer ஐ refactor செய்கிறது..."
+ },
+ "tasks": {
+ "authApi": "Auth API",
+ "unitTests": "Unit tests",
+ "ciSetup": "CI setup"
+ },
+ "columns": {
+ "todo": "TODO",
+ "progress": "IN PROGRESS",
+ "review": "REVIEW",
+ "done": "DONE"
+ }
+ }
+ },
+ "download": {
+ "title": "பதிவிறக்கு",
+ "detected": "கண்டறியப்பட்டது",
+ "systemRequirements": "கணினி தேவைகள்",
+ "version": "பதிப்பு {version}",
+ "readyToStart": "தொடங்கத் தயார்!"
+ },
+ "theme": {
+ "dark": "இருண்ட",
+ "light": "வெளிர்"
+ },
+ "language": {
+ "label": "மொழி",
+ "search": "மொழியைத் தேடு…"
+ },
+ "features": {
+ "sectionTitle": "AI agent orchestration க்கு உங்களுக்குத் தேவையான அனைத்தும்",
+ "sectionSubtitle": "multi-agent ஒத்துழைப்பை உண்மையில் வேலை செய்யவைக்கும் சக்திவாய்ந்த tools."
+ },
+ "pricing": {
+ "sectionTitle": "நிறுவ இலவசம். இலவச மாதிரி உள்ளடக்கப்பட்டுள்ளது.",
+ "sectionSubtitle": "auth இல்லாத இலவச மாதிரியுடன் உடனடியாகத் தொடங்குங்கள் - கணக்கு, API key அல்லது credit card இல்லை. அதிக மாதிரிகள் வேண்டும்போது மட்டுமே Claude, Codex, OpenCode/OpenRouter அல்லது பிற வழங்குநர் அணுகலை இணைக்கவும்.",
+ "getStarted": "இப்போது பதிவிறக்கு",
+ "popular": "இலவசம்",
+ "freeModelCallout": "auth இல்லாத இலவச மாதிரி உள்ளடக்கப்பட்டுள்ளது",
+ "note": "Agent Teams க்கு கட்டண அடுக்கு இல்லை. auth இல்லாத இலவச மாதிரி உடனடியாக முயற்சிக்க அனுமதிக்கிறது; கட்டண வழங்குநர் பயன்பாடு விருப்பத்திற்குரியது மற்றும் நீங்கள் தேர்ந்தெடுக்கும் வழங்குநரால் கட்டுப்படுத்தப்படுகிறது."
+ },
+ "testimonials": {
+ "sectionTitle": "டெவலப்பர்கள் என்ன சொல்கிறார்கள்",
+ "sectionSubtitle": "உண்மையான builders இடமிருந்து உண்மையான கருத்து",
+ "showMore": "மேலும் காட்டு",
+ "showLess": "குறைவாகக் காட்டு",
+ "feedbackCta": "உங்கள் அனுபவத்தைப் பகிர விரும்புகிறீர்களா? இங்கே ஒரு issue ஐத் திறக்கவும்"
+ },
+ "faq": {
+ "sectionTitle": "கேள்விகள் உள்ளனவா? எங்களிடம் பதில்கள் உள்ளன",
+ "subtitle": "Agent Teams பற்றி நீங்கள் தெரிந்துகொள்ள வேண்டிய அனைத்தும்"
+ },
+ "comparison": {
+ "sectionTitle": "நாங்கள் எவ்வாறு ஒப்பிடுகிறோம்",
+ "sectionSubtitle": "மற்ற AI coding tools உடன் அம்சம்-வாரியான ஒப்பீடு.",
+ "feature": "அம்சம்",
+ "robotBubble": "நீங்களே தீர்மானியுங்கள்",
+ "features": {
+ "crossTeam": "Cross-team தொடர்பாடல்",
+ "agentMessaging": "Agent-to-agent messaging",
+ "linkedTasks": "இணைக்கப்பட்ட tasks",
+ "sessionAnalysis": "Session பகுப்பாய்வு",
+ "taskAttachments": "Task இணைப்புகள்",
+ "hunkReview": "Hunk-level மதிப்பாய்வு",
+ "codeEditor": "உள்ளமைந்த code editor",
+ "fullAutonomy": "முழு சுயாட்சி",
+ "taskDeps": "Task சார்புகள்",
+ "reviewWorkflow": "மதிப்பாய்வு வேலைப்பாய்",
+ "zeroSetup": "Zero setup",
+ "kanban": "Kanban board",
+ "execLog": "Execution logs",
+ "liveProcesses": "நேரடி processes",
+ "runtimeLoad": "ஒரு teammate க்கு CPU/RAM",
+ "perTaskReview": "ஒவ்வொரு task க்கும் code review",
+ "flexAutonomy": "நெகிழ்வான சுயாட்சி",
+ "worktree": "Git worktree தனிமைப்படுத்தல்",
+ "multiAgent": "கலப்பு AI teammates",
+ "liveWorkGraph": "நேரடி team வரைபடம்",
+ "liveTeam": "நேரடி teammates",
+ "teamWorkspace": "Team workspace",
+ "launchProof": "Teammate launch நிலை",
+ "orgGovernance": "Org chart / governance",
+ "budgetControls": "Budget கட்டுப்பாடுகள்",
+ "price": "விலை"
+ }
+ },
+ "screenshots": {
+ "sectionTitle": "செயலில் பார்க்கவும்",
+ "sectionSubtitle": "பயன்பாட்டிலிருந்து உண்மையான ஸ்கிரீன்ஷாட்கள் — kanban board, code review, agent teams மற்றும் பல."
+ },
+ "common": {
+ "learnMore": "மேலும் அறிக",
+ "statusLabel": "நிலை:",
+ "previous": "முந்தையது",
+ "next": "அடுத்தது"
+ },
+ "footer": {
+ "copyright": "© {year} Agent Teams",
+ "tagline": "டெவலப்பர்களுக்கான AI agent orchestration",
+ "robotBubble": "நான் காத்திருக்கிறேன்",
+ "links": {
+ "github": "GitHub",
+ "author": "ஆசிரியர்",
+ "docs": "ஆவணங்கள்"
+ }
+ },
+ "meta": {
+ "homeTitle": "Agent Teams - டெவலப்பர்களுக்கான AI Agent Orchestration",
+ "homeDescription": "AI agent teams க்கான இலவச, திறந்த மூல desktop பயன்பாடு. auth இல்லாத இலவச மாதிரியுடன் தொடங்கி, அதிக மாதிரிகள் தேவைப்படும்போது Claude, Codex அல்லது OpenCode ஐ இணைக்கவும்.",
+ "downloadTitle": "macOS, Windows மற்றும் Linux க்கான Agent Teams ஐ பதிவிறக்கு",
+ "downloadDescription": "macOS, Windows மற்றும் Linux க்கான Agent Teams ஐ பதிவிறக்கு. Claude, Codex மற்றும் OpenCode agent teams க்கான இலவச திறந்த மூல desktop பயன்பாடு."
+ },
+ "error": {
+ "notFoundTitle": "பக்கம் கிடைக்கவில்லை",
+ "notFoundDescription": "நீங்கள் தேடும் பக்கம் இல்லை அல்லது நகர்த்தப்பட்டுள்ளது.",
+ "genericTitle": "ஏதோ தவறு நடந்தது",
+ "genericDescription": "எதிர்பாராத பிழை ஏற்பட்டது. பிறகு மீண்டும் முயற்சிக்கவும்.",
+ "goHome": "முகப்புப் பக்கத்திற்குச் செல்"
+ }
+}
diff --git a/landing/locales/te.json b/landing/locales/te.json
new file mode 100644
index 00000000..666af34d
--- /dev/null
+++ b/landing/locales/te.json
@@ -0,0 +1,173 @@
+{
+ "nav": {
+ "features": "ఫీచర్లు",
+ "screenshots": "స్క్రీన్షాట్లు",
+ "docs": "డాక్యుమెంటేషన్",
+ "comparison": "పోల్చండి",
+ "download": "డౌన్లోడ్",
+ "pricing": "ఉచితం",
+ "faq": "FAQ",
+ "viewOnGithub": "GitHub లో చూడండి",
+ "openMenu": "మెనూ తెరవండి",
+ "closeMenu": "మెనూ మూసివేయండి",
+ "short": {
+ "screenshots": "షాట్లు",
+ "docs": "డాక్స్",
+ "download": "పొందండి",
+ "comparison": "పోల్చండి",
+ "pricing": "ఉచితం"
+ }
+ },
+ "hero": {
+ "badge": "Agent Teams",
+ "downloadNow": "ఇప్పుడే డౌన్లోడ్ చేయండి",
+ "ctaPrimary": "{platform} కోసం డౌన్లోడ్ చేయండి",
+ "ctaSecondary": "పోల్చండి",
+ "ctaDocs": "డాక్యుమెంటేషన్",
+ "preview": "ఉత్పత్తి ప్రివ్యూ",
+ "trust": {
+ "agentTeams": "Agent Teams",
+ "kanban": "Kanban బోర్డు",
+ "openSource": "ఓపెన్ సోర్స్"
+ },
+ "watchDemo": "డెమో చూడండి",
+ "videoUnavailable": "వీడియో అందుబాటులో లేదు",
+ "supportedProviders": "మద్దతు ఉన్న AI ప్రొవైడర్లు",
+ "slogan": "చాలా తక్కువ చేసి చాలా సాధించండి",
+ "platformDefault": "మీ ప్లాట్ఫారమ్ కోసం",
+ "guidesSetup": "గైడ్లు మరియు సెటప్",
+ "videoFrameLabel": "Agent Teams డెమో చూడండి",
+ "commandFeed": "టీమ్ కమాండ్ ఫీడ్",
+ "liveDemo": "లైవ్ డెమో",
+ "demoVideoTitle": "Agent Teams డెమో వీడియో",
+ "demoTitle": "Agent Teams డెమో",
+ "demo": {
+ "ariaLabel": "ఏజెంట్ టీమ్ డెమో",
+ "live": "లైవ్",
+ "waiting": "టాస్క్ల కోసం వేచి ఉంది...",
+ "activity": {
+ "authMiddleware": "auth మిడిల్వేర్ అమలు చేస్తోంది...",
+ "unitTests": "API కోసం యూనిట్ టెస్ట్లు రాస్తోంది...",
+ "reviewPr": "PR #42 మార్పులను సమీక్షిస్తోంది...",
+ "ciPipeline": "CI/CD పైప్లైన్ సెటప్ చేస్తోంది...",
+ "refactorDatabase": "డేటాబేస్ లేయర్ను రీఫాక్టర్ చేస్తోంది..."
+ },
+ "tasks": {
+ "authApi": "Auth API",
+ "unitTests": "యూనిట్ టెస్ట్లు",
+ "ciSetup": "CI సెటప్"
+ },
+ "columns": {
+ "todo": "చేయవలసినవి",
+ "progress": "ప్రోగ్రెస్లో",
+ "review": "సమీక్ష",
+ "done": "పూర్తయింది"
+ }
+ }
+ },
+ "download": {
+ "title": "డౌన్లోడ్",
+ "detected": "గుర్తించబడింది",
+ "systemRequirements": "సిస్టమ్ అవసరాలు",
+ "version": "వెర్షన్ {version}",
+ "readyToStart": "ప్రారంభించడానికి సిద్ధం!"
+ },
+ "theme": {
+ "dark": "డార్క్",
+ "light": "లైట్"
+ },
+ "language": {
+ "label": "భాష",
+ "search": "భాషను శోధించండి…"
+ },
+ "features": {
+ "sectionTitle": "AI ఏజెంట్ ఆర్కెస్ట్రేషన్ కోసం మీకు కావలసినదంతా",
+ "sectionSubtitle": "మల్టీ-ఏజెంట్ సహకారాన్ని నిజంగా పనిచేసేలా చేసే శక్తివంతమైన సాధనాలు."
+ },
+ "pricing": {
+ "sectionTitle": "ఇన్స్టాల్ చేయడానికి ఉచితం. ఉచిత మోడల్ చేర్చబడింది.",
+ "sectionSubtitle": "auth లేకుండా ఉచిత మోడల్తో వెంటనే ప్రారంభించండి - ఖాతా, API కీ లేదా క్రెడిట్ కార్డు అవసరం లేదు. మీకు మరిన్ని మోడల్లు కావలసినప్పుడు మాత్రమే Claude, Codex, OpenCode/OpenRouter లేదా ఇతర ప్రొవైడర్ యాక్సెస్ను కనెక్ట్ చేయండి.",
+ "getStarted": "ఇప్పుడే డౌన్లోడ్ చేయండి",
+ "popular": "ఉచితం",
+ "freeModelCallout": "auth లేని ఉచిత మోడల్ చేర్చబడింది",
+ "note": "Agent Teams కు చెల్లింపు టైర్ లేదు. auth లేని ఉచిత మోడల్ దాన్ని వెంటనే ప్రయత్నించడానికి మిమ్మల్ని అనుమతిస్తుంది; చెల్లింపు ప్రొవైడర్ వినియోగం ఐచ్ఛికం మరియు మీరు ఎంచుకున్న ప్రొవైడర్ ద్వారా నియంత్రించబడుతుంది."
+ },
+ "testimonials": {
+ "sectionTitle": "డెవలపర్లు ఏమంటున్నారు",
+ "sectionSubtitle": "నిజమైన బిల్డర్ల నుండి నిజమైన అభిప్రాయం",
+ "showMore": "మరింత చూపించు",
+ "showLess": "తక్కువ చూపించు",
+ "feedbackCta": "మీ అనుభవాన్ని పంచుకోవాలనుకుంటున్నారా? దీనిపై ఒక issue తెరవండి"
+ },
+ "faq": {
+ "sectionTitle": "ప్రశ్నలు ఉన్నాయా? మా దగ్గర సమాధానాలు ఉన్నాయి",
+ "subtitle": "Agent Teams గురించి మీరు తెలుసుకోవలసినదంతా"
+ },
+ "comparison": {
+ "sectionTitle": "మేము ఎలా పోల్చబడతాము",
+ "sectionSubtitle": "ఇతర AI కోడింగ్ సాధనాలతో ఫీచర్-బై-ఫీచర్ పోలిక.",
+ "feature": "ఫీచర్",
+ "robotBubble": "మీరే నిర్ణయించుకోండి",
+ "features": {
+ "crossTeam": "క్రాస్-టీమ్ కమ్యూనికేషన్",
+ "agentMessaging": "ఏజెంట్-టు-ఏజెంట్ మెసేజింగ్",
+ "linkedTasks": "లింక్ చేయబడిన టాస్క్లు",
+ "sessionAnalysis": "సెషన్ విశ్లేషణ",
+ "taskAttachments": "టాస్క్ అటాచ్మెంట్లు",
+ "hunkReview": "హంక్-స్థాయి సమీక్ష",
+ "codeEditor": "అంతర్నిర్మిత కోడ్ ఎడిటర్",
+ "fullAutonomy": "పూర్తి స్వయంప్రతిపత్తి",
+ "taskDeps": "టాస్క్ డిపెండెన్సీలు",
+ "reviewWorkflow": "సమీక్ష వర్క్ఫ్లో",
+ "zeroSetup": "జీరో సెటప్",
+ "kanban": "Kanban బోర్డు",
+ "execLog": "ఎగ్జిక్యూషన్ లాగ్లు",
+ "liveProcesses": "లైవ్ ప్రాసెస్లు",
+ "runtimeLoad": "ప్రతి టీమ్మేట్కు CPU/RAM",
+ "perTaskReview": "ప్రతి టాస్క్కు కోడ్ సమీక్ష",
+ "flexAutonomy": "సౌకర్యవంతమైన స్వయంప్రతిపత్తి",
+ "worktree": "Git worktree ఐసొలేషన్",
+ "multiAgent": "మిశ్రమ AI టీమ్మేట్లు",
+ "liveWorkGraph": "లైవ్ టీమ్ మ్యాప్",
+ "liveTeam": "లైవ్ టీమ్మేట్లు",
+ "teamWorkspace": "టీమ్ వర్క్స్పేస్",
+ "launchProof": "టీమ్మేట్ లాంచ్ స్థితి",
+ "orgGovernance": "ఆర్గ్ చార్ట్ / గవర్నెన్స్",
+ "budgetControls": "బడ్జెట్ నియంత్రణలు",
+ "price": "ధర"
+ }
+ },
+ "screenshots": {
+ "sectionTitle": "దీన్ని చర్యలో చూడండి",
+ "sectionSubtitle": "యాప్ నుండి నిజమైన స్క్రీన్షాట్లు — kanban బోర్డు, కోడ్ సమీక్ష, ఏజెంట్ టీమ్లు మరియు మరిన్ని."
+ },
+ "common": {
+ "learnMore": "మరింత తెలుసుకోండి",
+ "statusLabel": "స్థితి:",
+ "previous": "మునుపటి",
+ "next": "తదుపరి"
+ },
+ "footer": {
+ "copyright": "© {year} Agent Teams",
+ "tagline": "డెవలపర్ల కోసం AI ఏజెంట్ ఆర్కెస్ట్రేషన్",
+ "robotBubble": "నేను వేచి ఉన్నాను",
+ "links": {
+ "github": "GitHub",
+ "author": "రచయిత",
+ "docs": "డాక్యుమెంటేషన్"
+ }
+ },
+ "meta": {
+ "homeTitle": "Agent Teams - డెవలపర్ల కోసం AI ఏజెంట్ ఆర్కెస్ట్రేషన్",
+ "homeDescription": "AI ఏజెంట్ టీమ్ల కోసం ఉచిత, ఓపెన్ సోర్స్ డెస్క్టాప్ యాప్. auth లేని ఉచిత మోడల్తో ప్రారంభించి, మీకు మరిన్ని మోడల్లు కావలసినప్పుడు Claude, Codex లేదా OpenCode ను కనెక్ట్ చేయండి.",
+ "downloadTitle": "macOS, Windows మరియు Linux కోసం Agent Teams డౌన్లోడ్ చేయండి",
+ "downloadDescription": "macOS, Windows మరియు Linux కోసం Agent Teams డౌన్లోడ్ చేయండి. Claude, Codex మరియు OpenCode ఏజెంట్ టీమ్ల కోసం ఉచిత ఓపెన్ సోర్స్ డెస్క్టాప్ యాప్."
+ },
+ "error": {
+ "notFoundTitle": "పేజీ కనుగొనబడలేదు",
+ "notFoundDescription": "మీరు వెతుకుతున్న పేజీ ఉనికిలో లేదు లేదా తరలించబడింది.",
+ "genericTitle": "ఏదో తప్పు జరిగింది",
+ "genericDescription": "ఊహించని లోపం సంభవించింది. దయచేసి తర్వాత మళ్లీ ప్రయత్నించండి.",
+ "goHome": "హోమ్పేజీకి వెళ్లండి"
+ }
+}
diff --git a/landing/locales/th.json b/landing/locales/th.json
new file mode 100644
index 00000000..fe79265f
--- /dev/null
+++ b/landing/locales/th.json
@@ -0,0 +1,173 @@
+{
+ "nav": {
+ "features": "ฟีเจอร์",
+ "screenshots": "ภาพหน้าจอ",
+ "docs": "เอกสาร",
+ "comparison": "เปรียบเทียบ",
+ "download": "ดาวน์โหลด",
+ "pricing": "ฟรี",
+ "faq": "คำถามที่พบบ่อย",
+ "viewOnGithub": "ดูบน GitHub",
+ "openMenu": "เปิดเมนู",
+ "closeMenu": "ปิดเมนู",
+ "short": {
+ "screenshots": "ภาพ",
+ "docs": "เอกสาร",
+ "download": "รับ",
+ "comparison": "เทียบ",
+ "pricing": "ฟรี"
+ }
+ },
+ "hero": {
+ "badge": "Agent Teams",
+ "downloadNow": "ดาวน์โหลดเลย",
+ "ctaPrimary": "ดาวน์โหลดสำหรับ {platform}",
+ "ctaSecondary": "เปรียบเทียบ",
+ "ctaDocs": "เอกสาร",
+ "preview": "ตัวอย่างผลิตภัณฑ์",
+ "trust": {
+ "agentTeams": "Agent Teams",
+ "kanban": "บอร์ด Kanban",
+ "openSource": "โอเพนซอร์ส"
+ },
+ "watchDemo": "ดูเดโม",
+ "videoUnavailable": "ไม่มีวิดีโอ",
+ "supportedProviders": "ผู้ให้บริการ AI ที่รองรับ",
+ "slogan": "ทำสำเร็จได้มากมายด้วยการลงมือเพียงเล็กน้อย",
+ "platformDefault": "สำหรับแพลตฟอร์มของคุณ",
+ "guidesSetup": "คู่มือและการตั้งค่า",
+ "videoFrameLabel": "ดูเดโม Agent Teams",
+ "commandFeed": "ฟีดคำสั่งของทีม",
+ "liveDemo": "เดโมสด",
+ "demoVideoTitle": "วิดีโอเดโม Agent Teams",
+ "demoTitle": "เดโม Agent Teams",
+ "demo": {
+ "ariaLabel": "เดโมทีมเอเจนต์",
+ "live": "สด",
+ "waiting": "กำลังรองาน...",
+ "activity": {
+ "authMiddleware": "กำลังพัฒนา auth middleware...",
+ "unitTests": "กำลังเขียน unit test สำหรับ API...",
+ "reviewPr": "กำลังรีวิวการเปลี่ยนแปลงใน PR #42...",
+ "ciPipeline": "กำลังตั้งค่า CI/CD pipeline...",
+ "refactorDatabase": "กำลังปรับโครงสร้างชั้นฐานข้อมูล..."
+ },
+ "tasks": {
+ "authApi": "Auth API",
+ "unitTests": "Unit test",
+ "ciSetup": "ตั้งค่า CI"
+ },
+ "columns": {
+ "todo": "ต้องทำ",
+ "progress": "กำลังดำเนินการ",
+ "review": "รีวิว",
+ "done": "เสร็จสิ้น"
+ }
+ }
+ },
+ "download": {
+ "title": "ดาวน์โหลด",
+ "detected": "ตรวจพบ",
+ "systemRequirements": "ความต้องการของระบบ",
+ "version": "เวอร์ชัน {version}",
+ "readyToStart": "พร้อมเริ่มแล้ว!"
+ },
+ "theme": {
+ "dark": "มืด",
+ "light": "สว่าง"
+ },
+ "language": {
+ "label": "ภาษา",
+ "search": "ค้นหาภาษา…"
+ },
+ "features": {
+ "sectionTitle": "ทุกสิ่งที่คุณต้องการสำหรับการจัดการทีมเอเจนต์ AI",
+ "sectionSubtitle": "เครื่องมือทรงพลังที่ทำให้การทำงานร่วมกันของหลายเอเจนต์ใช้งานได้จริง"
+ },
+ "pricing": {
+ "sectionTitle": "ติดตั้งฟรี มาพร้อมโมเดลฟรี",
+ "sectionSubtitle": "เริ่มได้ทันทีด้วยโมเดลฟรีที่ไม่ต้องยืนยันตัวตน - ไม่ต้องมีบัญชี, API key หรือบัตรเครดิต เชื่อมต่อ Claude, Codex, OpenCode/OpenRouter หรือผู้ให้บริการอื่นเมื่อคุณต้องการโมเดลเพิ่มเติม",
+ "getStarted": "ดาวน์โหลดเลย",
+ "popular": "ฟรี",
+ "freeModelCallout": "มาพร้อมโมเดลฟรีที่ไม่ต้องยืนยันตัวตน",
+ "note": "Agent Teams ไม่มีระดับการใช้งานแบบเสียเงิน โมเดลฟรีที่ไม่ต้องยืนยันตัวตนให้คุณลองใช้ได้ทันที ส่วนการใช้งานผู้ให้บริการแบบเสียเงินเป็นตัวเลือกและควบคุมโดยผู้ให้บริการที่คุณเลือก"
+ },
+ "testimonials": {
+ "sectionTitle": "นักพัฒนาพูดถึงเราอย่างไร",
+ "sectionSubtitle": "ความคิดเห็นจริงจากผู้สร้างจริง",
+ "showMore": "ดูเพิ่มเติม",
+ "showLess": "ดูน้อยลง",
+ "feedbackCta": "อยากแบ่งปันประสบการณ์ของคุณ? เปิด issue บน"
+ },
+ "faq": {
+ "sectionTitle": "มีคำถามใช่ไหม? เรามีคำตอบ",
+ "subtitle": "ทุกสิ่งที่คุณต้องรู้เกี่ยวกับ Agent Teams"
+ },
+ "comparison": {
+ "sectionTitle": "เราเปรียบเทียบได้อย่างไร",
+ "sectionSubtitle": "เปรียบเทียบทีละฟีเจอร์กับเครื่องมือเขียนโค้ด AI อื่น ๆ",
+ "feature": "ฟีเจอร์",
+ "robotBubble": "ตัดสินด้วยตัวคุณเอง",
+ "features": {
+ "crossTeam": "การสื่อสารข้ามทีม",
+ "agentMessaging": "การส่งข้อความระหว่างเอเจนต์",
+ "linkedTasks": "งานที่เชื่อมโยงกัน",
+ "sessionAnalysis": "การวิเคราะห์เซสชัน",
+ "taskAttachments": "ไฟล์แนบของงาน",
+ "hunkReview": "การรีวิวระดับ hunk",
+ "codeEditor": "ตัวแก้ไขโค้ดในตัว",
+ "fullAutonomy": "ทำงานอัตโนมัติเต็มรูปแบบ",
+ "taskDeps": "การพึ่งพากันของงาน",
+ "reviewWorkflow": "ขั้นตอนการรีวิว",
+ "zeroSetup": "ไม่ต้องตั้งค่า",
+ "kanban": "บอร์ด Kanban",
+ "execLog": "บันทึกการทำงาน",
+ "liveProcesses": "กระบวนการแบบสด",
+ "runtimeLoad": "CPU/RAM ต่อเพื่อนร่วมทีม",
+ "perTaskReview": "การรีวิวโค้ดต่องาน",
+ "flexAutonomy": "ความเป็นอิสระแบบยืดหยุ่น",
+ "worktree": "การแยก Git worktree",
+ "multiAgent": "เพื่อนร่วมทีม AI ผสมผสาน",
+ "liveWorkGraph": "แผนผังทีมแบบสด",
+ "liveTeam": "เพื่อนร่วมทีมแบบสด",
+ "teamWorkspace": "พื้นที่ทำงานของทีม",
+ "launchProof": "สถานะการเริ่มต้นของเพื่อนร่วมทีม",
+ "orgGovernance": "ผังองค์กร / การกำกับดูแล",
+ "budgetControls": "การควบคุมงบประมาณ",
+ "price": "ราคา"
+ }
+ },
+ "screenshots": {
+ "sectionTitle": "ดูการทำงานจริง",
+ "sectionSubtitle": "ภาพหน้าจอจริงจากแอป — บอร์ด Kanban, การรีวิวโค้ด, ทีมเอเจนต์ และอื่น ๆ"
+ },
+ "common": {
+ "learnMore": "เรียนรู้เพิ่มเติม",
+ "statusLabel": "สถานะ:",
+ "previous": "ก่อนหน้า",
+ "next": "ถัดไป"
+ },
+ "footer": {
+ "copyright": "© {year} Agent Teams",
+ "tagline": "การจัดการทีมเอเจนต์ AI สำหรับนักพัฒนา",
+ "robotBubble": "ฉันกำลังรออยู่",
+ "links": {
+ "github": "GitHub",
+ "author": "ผู้สร้าง",
+ "docs": "เอกสาร"
+ }
+ },
+ "meta": {
+ "homeTitle": "Agent Teams - การจัดการทีมเอเจนต์ AI สำหรับนักพัฒนา",
+ "homeDescription": "แอปเดสก์ท็อปโอเพนซอร์สฟรีสำหรับทีมเอเจนต์ AI เริ่มต้นด้วยโมเดลฟรีที่ไม่ต้องยืนยันตัวตน จากนั้นเชื่อมต่อ Claude, Codex หรือ OpenCode เมื่อคุณต้องการโมเดลเพิ่มเติม",
+ "downloadTitle": "ดาวน์โหลด Agent Teams สำหรับ macOS, Windows และ Linux",
+ "downloadDescription": "ดาวน์โหลด Agent Teams สำหรับ macOS, Windows และ Linux แอปเดสก์ท็อปโอเพนซอร์สฟรีสำหรับทีมเอเจนต์ Claude, Codex และ OpenCode"
+ },
+ "error": {
+ "notFoundTitle": "ไม่พบหน้านี้",
+ "notFoundDescription": "หน้าที่คุณกำลังค้นหาไม่มีอยู่หรือถูกย้ายไปแล้ว",
+ "genericTitle": "เกิดข้อผิดพลาดบางอย่าง",
+ "genericDescription": "เกิดข้อผิดพลาดที่ไม่คาดคิด โปรดลองอีกครั้งในภายหลัง",
+ "goHome": "ไปที่หน้าแรก"
+ }
+}
diff --git a/landing/locales/tr.json b/landing/locales/tr.json
new file mode 100644
index 00000000..f5e418d5
--- /dev/null
+++ b/landing/locales/tr.json
@@ -0,0 +1,173 @@
+{
+ "nav": {
+ "features": "Özellikler",
+ "screenshots": "Ekran görüntüleri",
+ "docs": "Dokümantasyon",
+ "comparison": "Karşılaştır",
+ "download": "İndir",
+ "pricing": "Ücretsiz",
+ "faq": "SSS",
+ "viewOnGithub": "GitHub'da görüntüle",
+ "openMenu": "Menüyü aç",
+ "closeMenu": "Menüyü kapat",
+ "short": {
+ "screenshots": "Görseller",
+ "docs": "Dokümanlar",
+ "download": "Al",
+ "comparison": "Karşılaştır",
+ "pricing": "Ücretsiz"
+ }
+ },
+ "hero": {
+ "badge": "Agent Teams",
+ "downloadNow": "Şimdi İndir",
+ "ctaPrimary": "{platform} için indir",
+ "ctaSecondary": "Karşılaştır",
+ "ctaDocs": "Dokümantasyon",
+ "preview": "Ürün önizlemesi",
+ "trust": {
+ "agentTeams": "Agent Teams",
+ "kanban": "Kanban Panosu",
+ "openSource": "Açık Kaynak"
+ },
+ "watchDemo": "Demoyu İzle",
+ "videoUnavailable": "Video kullanılamıyor",
+ "supportedProviders": "Desteklenen yapay zeka sağlayıcıları",
+ "slogan": "Çok az çaba ile çok iş başarın",
+ "platformDefault": "Platformunuz için",
+ "guidesSetup": "Kılavuzlar ve kurulum",
+ "videoFrameLabel": "Agent Teams demosunu izle",
+ "commandFeed": "Ekip komut akışı",
+ "liveDemo": "Canlı demo",
+ "demoVideoTitle": "Agent Teams demo videosu",
+ "demoTitle": "Agent Teams demosu",
+ "demo": {
+ "ariaLabel": "Agent ekibi demosu",
+ "live": "CANLI",
+ "waiting": "Görevler bekleniyor...",
+ "activity": {
+ "authMiddleware": "Kimlik doğrulama ara katmanı uygulanıyor...",
+ "unitTests": "API için birim testleri yazılıyor...",
+ "reviewPr": "PR #42 değişiklikleri inceleniyor...",
+ "ciPipeline": "CI/CD hattı kuruluyor...",
+ "refactorDatabase": "Veritabanı katmanı yeniden düzenleniyor..."
+ },
+ "tasks": {
+ "authApi": "Kimlik doğrulama API'si",
+ "unitTests": "Birim testleri",
+ "ciSetup": "CI kurulumu"
+ },
+ "columns": {
+ "todo": "YAPILACAK",
+ "progress": "DEVAM EDİYOR",
+ "review": "İNCELEME",
+ "done": "BİTTİ"
+ }
+ }
+ },
+ "download": {
+ "title": "İndir",
+ "detected": "Algılandı",
+ "systemRequirements": "Sistem gereksinimleri",
+ "version": "Sürüm {version}",
+ "readyToStart": "Başlamaya hazır!"
+ },
+ "theme": {
+ "dark": "Koyu",
+ "light": "Açık"
+ },
+ "language": {
+ "label": "Dil",
+ "search": "Dil ara…"
+ },
+ "features": {
+ "sectionTitle": "Yapay zeka agent orkestrasyonu için ihtiyacınız olan her şey",
+ "sectionSubtitle": "Çoklu agent iş birliğini gerçekten işler hale getiren güçlü araçlar."
+ },
+ "pricing": {
+ "sectionTitle": "Kurulumu ücretsiz. Ücretsiz model dahil.",
+ "sectionSubtitle": "Kimlik doğrulaması olmayan ücretsiz bir modelle hemen başlayın - hesap, API anahtarı veya kredi kartı gerekmez. Daha fazla model istediğinizde Claude, Codex, OpenCode/OpenRouter veya diğer sağlayıcı erişimini bağlayın.",
+ "getStarted": "Şimdi İndir",
+ "popular": "Ücretsiz",
+ "freeModelCallout": "Kimlik doğrulaması olmayan ücretsiz model dahil",
+ "note": "Agent Teams'in ücretli bir katmanı yoktur. Kimlik doğrulaması olmayan ücretsiz model hemen denemenizi sağlar; ücretli sağlayıcı kullanımı isteğe bağlıdır ve seçtiğiniz sağlayıcı tarafından kontrol edilir."
+ },
+ "testimonials": {
+ "sectionTitle": "Geliştiriciler ne diyor",
+ "sectionSubtitle": "Gerçek geliştiricilerden gerçek geri bildirimler",
+ "showMore": "Daha fazla göster",
+ "showLess": "Daha az göster",
+ "feedbackCta": "Deneyiminizi paylaşmak ister misiniz? Şurada bir konu açın:"
+ },
+ "faq": {
+ "sectionTitle": "Sorularınız mı var? Yanıtlarımız hazır",
+ "subtitle": "Agent Teams hakkında bilmeniz gereken her şey"
+ },
+ "comparison": {
+ "sectionTitle": "Nasıl karşılaştırılıyoruz",
+ "sectionSubtitle": "Diğer yapay zeka kodlama araçlarıyla özellik bazında karşılaştırma.",
+ "feature": "Özellik",
+ "robotBubble": "Kendiniz karar verin",
+ "features": {
+ "crossTeam": "Ekipler arası iletişim",
+ "agentMessaging": "Agent'tan agent'a mesajlaşma",
+ "linkedTasks": "Bağlı görevler",
+ "sessionAnalysis": "Oturum analizi",
+ "taskAttachments": "Görev ekleri",
+ "hunkReview": "Hunk düzeyinde inceleme",
+ "codeEditor": "Yerleşik kod düzenleyici",
+ "fullAutonomy": "Tam özerklik",
+ "taskDeps": "Görev bağımlılıkları",
+ "reviewWorkflow": "İnceleme iş akışı",
+ "zeroSetup": "Sıfır kurulum",
+ "kanban": "Kanban panosu",
+ "execLog": "Yürütme günlükleri",
+ "liveProcesses": "Canlı süreçler",
+ "runtimeLoad": "Takım arkadaşı başına CPU/RAM",
+ "perTaskReview": "Görev başına kod incelemesi",
+ "flexAutonomy": "Esnek özerklik",
+ "worktree": "Git worktree yalıtımı",
+ "multiAgent": "Karışık yapay zeka takım arkadaşları",
+ "liveWorkGraph": "Canlı ekip haritası",
+ "liveTeam": "Canlı takım arkadaşları",
+ "teamWorkspace": "Ekip çalışma alanı",
+ "launchProof": "Takım arkadaşı başlatma durumu",
+ "orgGovernance": "Organizasyon şeması / yönetişim",
+ "budgetControls": "Bütçe kontrolleri",
+ "price": "Fiyat"
+ }
+ },
+ "screenshots": {
+ "sectionTitle": "İş başında görün",
+ "sectionSubtitle": "Uygulamadan gerçek ekran görüntüleri — kanban panosu, kod incelemesi, agent ekipleri ve daha fazlası."
+ },
+ "common": {
+ "learnMore": "Daha fazla bilgi",
+ "statusLabel": "Durum:",
+ "previous": "Önceki",
+ "next": "Sonraki"
+ },
+ "footer": {
+ "copyright": "© {year} Agent Teams",
+ "tagline": "Geliştiriciler için yapay zeka agent orkestrasyonu",
+ "robotBubble": "Bekliyorum",
+ "links": {
+ "github": "GitHub",
+ "author": "Yazar",
+ "docs": "Dokümantasyon"
+ }
+ },
+ "meta": {
+ "homeTitle": "Agent Teams - Geliştiriciler için Yapay Zeka Agent Orkestrasyonu",
+ "homeDescription": "Yapay zeka agent ekipleri için ücretsiz, açık kaynaklı masaüstü uygulaması. Kimlik doğrulaması olmayan ücretsiz bir modelle başlayın, ardından daha fazla modele ihtiyaç duyduğunuzda Claude, Codex veya OpenCode'u bağlayın.",
+ "downloadTitle": "macOS, Windows ve Linux için Agent Teams'i indirin",
+ "downloadDescription": "macOS, Windows ve Linux için Agent Teams'i indirin. Claude, Codex ve OpenCode agent ekipleri için ücretsiz açık kaynaklı masaüstü uygulaması."
+ },
+ "error": {
+ "notFoundTitle": "Sayfa bulunamadı",
+ "notFoundDescription": "Aradığınız sayfa mevcut değil veya taşınmış.",
+ "genericTitle": "Bir şeyler ters gitti",
+ "genericDescription": "Beklenmeyen bir hata oluştu. Lütfen daha sonra tekrar deneyin.",
+ "goHome": "Ana sayfaya git"
+ }
+}
diff --git a/landing/locales/uk.json b/landing/locales/uk.json
new file mode 100644
index 00000000..148353d3
--- /dev/null
+++ b/landing/locales/uk.json
@@ -0,0 +1,173 @@
+{
+ "nav": {
+ "features": "Можливості",
+ "screenshots": "Знімки екрана",
+ "docs": "Документація",
+ "comparison": "Порівняти",
+ "download": "Завантажити",
+ "pricing": "Безплатно",
+ "faq": "Часті запитання",
+ "viewOnGithub": "Переглянути на GitHub",
+ "openMenu": "Відкрити меню",
+ "closeMenu": "Закрити меню",
+ "short": {
+ "screenshots": "Знімки",
+ "docs": "Доки",
+ "download": "Отримати",
+ "comparison": "Порівняти",
+ "pricing": "Безплатно"
+ }
+ },
+ "hero": {
+ "badge": "Agent Teams",
+ "downloadNow": "Завантажити зараз",
+ "ctaPrimary": "Завантажити для {platform}",
+ "ctaSecondary": "Порівняти",
+ "ctaDocs": "Документація",
+ "preview": "Попередній перегляд продукту",
+ "trust": {
+ "agentTeams": "Agent Teams",
+ "kanban": "Дошка Kanban",
+ "openSource": "Відкритий код"
+ },
+ "watchDemo": "Дивитися демо",
+ "videoUnavailable": "Відео недоступне",
+ "supportedProviders": "Підтримувані AI-провайдери",
+ "slogan": "Робіть більше, докладаючи менше зусиль",
+ "platformDefault": "Для вашої платформи",
+ "guidesSetup": "Посібники та налаштування",
+ "videoFrameLabel": "Дивитися демо Agent Teams",
+ "commandFeed": "Стрічка дій команди",
+ "liveDemo": "Демо наживо",
+ "demoVideoTitle": "Демовідео Agent Teams",
+ "demoTitle": "Демо Agent Teams",
+ "demo": {
+ "ariaLabel": "Демо команди агентів",
+ "live": "НАЖИВО",
+ "waiting": "Очікування завдань...",
+ "activity": {
+ "authMiddleware": "Реалізація проміжного ПЗ автентифікації...",
+ "unitTests": "Написання модульних тестів для API...",
+ "reviewPr": "Перегляд змін PR #42...",
+ "ciPipeline": "Налаштування конвеєра CI/CD...",
+ "refactorDatabase": "Рефакторинг шару бази даних..."
+ },
+ "tasks": {
+ "authApi": "API автентифікації",
+ "unitTests": "Модульні тести",
+ "ciSetup": "Налаштування CI"
+ },
+ "columns": {
+ "todo": "TODO",
+ "progress": "У ПРОЦЕСІ",
+ "review": "ПЕРЕГЛЯД",
+ "done": "ГОТОВО"
+ }
+ }
+ },
+ "download": {
+ "title": "Завантажити",
+ "detected": "Виявлено",
+ "systemRequirements": "Системні вимоги",
+ "version": "Версія {version}",
+ "readyToStart": "Готово до роботи!"
+ },
+ "theme": {
+ "dark": "Темна",
+ "light": "Світла"
+ },
+ "language": {
+ "label": "Мова",
+ "search": "Пошук мови…"
+ },
+ "features": {
+ "sectionTitle": "Усе, що потрібно для оркестрування AI-агентів",
+ "sectionSubtitle": "Потужні інструменти, які роблять співпрацю кількох агентів справді робочою."
+ },
+ "pricing": {
+ "sectionTitle": "Безплатне встановлення. Безплатна модель включена.",
+ "sectionSubtitle": "Почніть одразу з безплатною моделлю без автентифікації — без облікового запису, API-ключа чи кредитної картки. Підключайте Claude, Codex, OpenCode/OpenRouter чи доступ до інших провайдерів, лише коли захочете більше моделей.",
+ "getStarted": "Завантажити зараз",
+ "popular": "Безплатно",
+ "freeModelCallout": "Безплатна модель без автентифікації включена",
+ "note": "Agent Teams не має платного тарифу. Безплатна модель без автентифікації дає змогу спробувати її одразу; платне використання провайдерів є необов'язковим і контролюється обраним вами провайдером."
+ },
+ "testimonials": {
+ "sectionTitle": "Що кажуть розробники",
+ "sectionSubtitle": "Реальні відгуки від реальних творців",
+ "showMore": "Показати більше",
+ "showLess": "Показати менше",
+ "feedbackCta": "Хочете поділитися своїм досвідом? Відкрийте issue на"
+ },
+ "faq": {
+ "sectionTitle": "Маєте запитання? У нас є відповіді",
+ "subtitle": "Усе, що потрібно знати про Agent Teams"
+ },
+ "comparison": {
+ "sectionTitle": "Як ми порівнюємося",
+ "sectionSubtitle": "Порівняння функція за функцією з іншими AI-інструментами для кодування.",
+ "feature": "Функція",
+ "robotBubble": "Судіть самі",
+ "features": {
+ "crossTeam": "Зв'язок між командами",
+ "agentMessaging": "Обмін повідомленнями між агентами",
+ "linkedTasks": "Пов'язані завдання",
+ "sessionAnalysis": "Аналіз сесій",
+ "taskAttachments": "Вкладення до завдань",
+ "hunkReview": "Перегляд на рівні фрагментів",
+ "codeEditor": "Вбудований редактор коду",
+ "fullAutonomy": "Повна автономія",
+ "taskDeps": "Залежності завдань",
+ "reviewWorkflow": "Робочий процес перегляду",
+ "zeroSetup": "Нульове налаштування",
+ "kanban": "Дошка Kanban",
+ "execLog": "Журнали виконання",
+ "liveProcesses": "Процеси наживо",
+ "runtimeLoad": "CPU/RAM на учасника",
+ "perTaskReview": "Код-рев'ю для кожного завдання",
+ "flexAutonomy": "Гнучка автономія",
+ "worktree": "Ізоляція через Git worktree",
+ "multiAgent": "Змішані AI-учасники",
+ "liveWorkGraph": "Карта команди наживо",
+ "liveTeam": "Учасники наживо",
+ "teamWorkspace": "Робочий простір команди",
+ "launchProof": "Статус запуску учасників",
+ "orgGovernance": "Оргструктура / керування",
+ "budgetControls": "Контроль бюджету",
+ "price": "Ціна"
+ }
+ },
+ "screenshots": {
+ "sectionTitle": "Подивіться в дії",
+ "sectionSubtitle": "Справжні знімки екрана із застосунку — дошка Kanban, код-рев'ю, команди агентів і не тільки."
+ },
+ "common": {
+ "learnMore": "Дізнатися більше",
+ "statusLabel": "Статус:",
+ "previous": "Назад",
+ "next": "Далі"
+ },
+ "footer": {
+ "copyright": "© {year} Agent Teams",
+ "tagline": "Оркестрування AI-агентів для розробників",
+ "robotBubble": "Я чекаю",
+ "links": {
+ "github": "GitHub",
+ "author": "Автор",
+ "docs": "Документація"
+ }
+ },
+ "meta": {
+ "homeTitle": "Agent Teams - Оркестрування AI-агентів для розробників",
+ "homeDescription": "Безплатний десктопний застосунок з відкритим кодом для команд AI-агентів. Почніть із безплатної моделі без автентифікації, а потім підключайте Claude, Codex чи OpenCode, коли потрібно більше моделей.",
+ "downloadTitle": "Завантажте Agent Teams для macOS, Windows та Linux",
+ "downloadDescription": "Завантажте Agent Teams для macOS, Windows та Linux. Безплатний десктопний застосунок з відкритим кодом для команд агентів Claude, Codex та OpenCode."
+ },
+ "error": {
+ "notFoundTitle": "Сторінку не знайдено",
+ "notFoundDescription": "Сторінка, яку ви шукаєте, не існує або була переміщена.",
+ "genericTitle": "Щось пішло не так",
+ "genericDescription": "Сталася неочікувана помилка. Будь ласка, спробуйте пізніше.",
+ "goHome": "На головну сторінку"
+ }
+}
diff --git a/landing/locales/vi.json b/landing/locales/vi.json
new file mode 100644
index 00000000..c8fd9a7e
--- /dev/null
+++ b/landing/locales/vi.json
@@ -0,0 +1,173 @@
+{
+ "nav": {
+ "features": "Tính năng",
+ "screenshots": "Ảnh chụp màn hình",
+ "docs": "Tài liệu",
+ "comparison": "So sánh",
+ "download": "Tải xuống",
+ "pricing": "Miễn phí",
+ "faq": "Hỏi đáp",
+ "viewOnGithub": "Xem trên GitHub",
+ "openMenu": "Mở menu",
+ "closeMenu": "Đóng menu",
+ "short": {
+ "screenshots": "Ảnh",
+ "docs": "Tài liệu",
+ "download": "Tải",
+ "comparison": "So sánh",
+ "pricing": "Miễn phí"
+ }
+ },
+ "hero": {
+ "badge": "Agent Teams",
+ "downloadNow": "Tải xuống ngay",
+ "ctaPrimary": "Tải cho {platform}",
+ "ctaSecondary": "So sánh",
+ "ctaDocs": "Tài liệu",
+ "preview": "Xem trước sản phẩm",
+ "trust": {
+ "agentTeams": "Agent Teams",
+ "kanban": "Bảng Kanban",
+ "openSource": "Mã nguồn mở"
+ },
+ "watchDemo": "Xem demo",
+ "videoUnavailable": "Video không khả dụng",
+ "supportedProviders": "Nhà cung cấp AI được hỗ trợ",
+ "slogan": "Làm được nhiều việc bằng cách làm rất ít",
+ "platformDefault": "Cho nền tảng của bạn",
+ "guidesSetup": "Hướng dẫn và thiết lập",
+ "videoFrameLabel": "Xem demo Agent Teams",
+ "commandFeed": "Luồng lệnh của đội ngũ",
+ "liveDemo": "Demo trực tiếp",
+ "demoVideoTitle": "Video demo Agent Teams",
+ "demoTitle": "Demo Agent Teams",
+ "demo": {
+ "ariaLabel": "Demo đội ngũ agent",
+ "live": "TRỰC TIẾP",
+ "waiting": "Đang chờ tác vụ...",
+ "activity": {
+ "authMiddleware": "Đang triển khai middleware xác thực...",
+ "unitTests": "Đang viết unit test cho API...",
+ "reviewPr": "Đang xem xét thay đổi của PR #42...",
+ "ciPipeline": "Đang thiết lập pipeline CI/CD...",
+ "refactorDatabase": "Đang tái cấu trúc tầng cơ sở dữ liệu..."
+ },
+ "tasks": {
+ "authApi": "Auth API",
+ "unitTests": "Unit test",
+ "ciSetup": "Thiết lập CI"
+ },
+ "columns": {
+ "todo": "CẦN LÀM",
+ "progress": "ĐANG LÀM",
+ "review": "XEM XÉT",
+ "done": "HOÀN THÀNH"
+ }
+ }
+ },
+ "download": {
+ "title": "Tải xuống",
+ "detected": "Đã phát hiện",
+ "systemRequirements": "Yêu cầu hệ thống",
+ "version": "Phiên bản {version}",
+ "readyToStart": "Sẵn sàng bắt đầu!"
+ },
+ "theme": {
+ "dark": "Tối",
+ "light": "Sáng"
+ },
+ "language": {
+ "label": "Ngôn ngữ",
+ "search": "Tìm ngôn ngữ…"
+ },
+ "features": {
+ "sectionTitle": "Mọi thứ bạn cần để điều phối agent AI",
+ "sectionSubtitle": "Các công cụ mạnh mẽ giúp việc cộng tác đa agent thực sự hiệu quả."
+ },
+ "pricing": {
+ "sectionTitle": "Cài đặt miễn phí. Bao gồm mô hình miễn phí.",
+ "sectionSubtitle": "Bắt đầu ngay lập tức với một mô hình miễn phí không cần xác thực - không cần tài khoản, API key hay thẻ tín dụng. Kết nối Claude, Codex, OpenCode/OpenRouter hoặc nhà cung cấp khác chỉ khi bạn muốn thêm mô hình.",
+ "getStarted": "Tải xuống ngay",
+ "popular": "Miễn phí",
+ "freeModelCallout": "Bao gồm mô hình miễn phí không cần xác thực",
+ "note": "Agent Teams không có gói trả phí. Mô hình miễn phí không cần xác thực cho phép bạn dùng thử ngay; việc sử dụng nhà cung cấp trả phí là tùy chọn và do nhà cung cấp bạn chọn kiểm soát."
+ },
+ "testimonials": {
+ "sectionTitle": "Lập trình viên nói gì",
+ "sectionSubtitle": "Phản hồi thực tế từ những người xây dựng thực sự",
+ "showMore": "Xem thêm",
+ "showLess": "Thu gọn",
+ "feedbackCta": "Muốn chia sẻ trải nghiệm của bạn? Hãy mở một issue trên"
+ },
+ "faq": {
+ "sectionTitle": "Có câu hỏi? Chúng tôi có câu trả lời",
+ "subtitle": "Mọi điều bạn cần biết về Agent Teams"
+ },
+ "comparison": {
+ "sectionTitle": "Chúng tôi so với đối thủ",
+ "sectionSubtitle": "So sánh từng tính năng với các công cụ lập trình AI khác.",
+ "feature": "Tính năng",
+ "robotBubble": "Bạn tự đánh giá",
+ "features": {
+ "crossTeam": "Giao tiếp giữa các đội ngũ",
+ "agentMessaging": "Nhắn tin giữa các agent",
+ "linkedTasks": "Tác vụ liên kết",
+ "sessionAnalysis": "Phân tích phiên",
+ "taskAttachments": "Tệp đính kèm tác vụ",
+ "hunkReview": "Xem xét theo từng đoạn",
+ "codeEditor": "Trình soạn thảo mã tích hợp",
+ "fullAutonomy": "Tự chủ hoàn toàn",
+ "taskDeps": "Phụ thuộc tác vụ",
+ "reviewWorkflow": "Quy trình xem xét",
+ "zeroSetup": "Không cần thiết lập",
+ "kanban": "Bảng Kanban",
+ "execLog": "Nhật ký thực thi",
+ "liveProcesses": "Tiến trình trực tiếp",
+ "runtimeLoad": "CPU/RAM trên mỗi thành viên",
+ "perTaskReview": "Xem xét mã theo từng tác vụ",
+ "flexAutonomy": "Tự chủ linh hoạt",
+ "worktree": "Cô lập bằng Git worktree",
+ "multiAgent": "Thành viên AI hỗn hợp",
+ "liveWorkGraph": "Bản đồ đội ngũ trực tiếp",
+ "liveTeam": "Thành viên trực tiếp",
+ "teamWorkspace": "Không gian làm việc của đội ngũ",
+ "launchProof": "Trạng thái khởi chạy thành viên",
+ "orgGovernance": "Sơ đồ tổ chức / quản trị",
+ "budgetControls": "Kiểm soát ngân sách",
+ "price": "Giá"
+ }
+ },
+ "screenshots": {
+ "sectionTitle": "Xem nó hoạt động",
+ "sectionSubtitle": "Ảnh chụp màn hình thực tế từ ứng dụng — bảng kanban, xem xét mã, đội ngũ agent và hơn thế nữa."
+ },
+ "common": {
+ "learnMore": "Tìm hiểu thêm",
+ "statusLabel": "Trạng thái:",
+ "previous": "Trước",
+ "next": "Tiếp"
+ },
+ "footer": {
+ "copyright": "© {year} Agent Teams",
+ "tagline": "Điều phối agent AI cho lập trình viên",
+ "robotBubble": "Tôi đang chờ",
+ "links": {
+ "github": "GitHub",
+ "author": "Tác giả",
+ "docs": "Tài liệu"
+ }
+ },
+ "meta": {
+ "homeTitle": "Agent Teams - Điều phối agent AI cho lập trình viên",
+ "homeDescription": "Ứng dụng máy tính mã nguồn mở miễn phí cho các đội ngũ agent AI. Bắt đầu với một mô hình miễn phí không cần xác thực, rồi kết nối Claude, Codex hoặc OpenCode khi bạn cần thêm mô hình.",
+ "downloadTitle": "Tải Agent Teams cho macOS, Windows và Linux",
+ "downloadDescription": "Tải Agent Teams cho macOS, Windows và Linux. Ứng dụng máy tính mã nguồn mở miễn phí cho các đội ngũ agent Claude, Codex và OpenCode."
+ },
+ "error": {
+ "notFoundTitle": "Không tìm thấy trang",
+ "notFoundDescription": "Trang bạn đang tìm không tồn tại hoặc đã được di chuyển.",
+ "genericTitle": "Đã xảy ra lỗi",
+ "genericDescription": "Đã xảy ra lỗi không mong muốn. Vui lòng thử lại sau.",
+ "goHome": "Về trang chủ"
+ }
+}
diff --git a/landing/nuxt.config.ts b/landing/nuxt.config.ts
index d6219bed..2799dc4a 100644
--- a/landing/nuxt.config.ts
+++ b/landing/nuxt.config.ts
@@ -7,17 +7,30 @@ declare const process: {
env: Record;
};
-const siteUrl = process.env.NUXT_PUBLIC_SITE_URL || "https://777genius.github.io/agent-teams-ai";
+const siteUrl =
+ process.env.NUXT_PUBLIC_LANDING_SITE_URL ||
+ process.env.AGENT_TEAMS_LANDING_SITE_URL ||
+ process.env.NUXT_PUBLIC_SITE_URL ||
+ "https://777genius.github.io/agent-teams-ai";
const githubRepo = process.env.NUXT_PUBLIC_GITHUB_REPO || "777genius/agent-teams-ai";
const githubReleasesUrl = `https://github.com/${githubRepo}/releases`;
const muxPlaybackId = process.env.NUXT_PUBLIC_MUX_PLAYBACK_ID || "qyeNuDjFqoDALK8eB02jMTOWUz006BdIhiqiAip3U00x7I";
const muxBackgroundPlaybackId = process.env.NUXT_PUBLIC_MUX_BACKGROUND_PLAYBACK_ID || muxPlaybackId;
+const docsSiteUrl =
+ process.env.AGENT_TEAMS_DOCS_SITE_URL || process.env.NUXT_PUBLIC_DOCS_SITE_URL || "";
+
+process.env.NUXT_PUBLIC_SITE_URL = siteUrl;
+if (docsSiteUrl) {
+ process.env.NUXT_PUBLIC_DOCS_SITE_URL = docsSiteUrl;
+}
+
const baseURL = process.env.NUXT_APP_BASE_URL || "/";
const basePrefixedDocsPath = `${baseURL.replace(/\/?$/, "/")}docs`;
const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
const defaultSeoTitle = "Agent Teams - AI Agent Orchestration for Developers";
const defaultSeoDescription = "Free, open-source desktop app for AI agent teams. Start with a free model with no auth, then connect Claude, Codex, or OpenCode when you need more models.";
const defaultSeoImage = `${siteUrl.replace(/\/+$/, "")}/og-image-agent-teams-v6.png`;
+const robots = process.env.NUXT_PUBLIC_ROBOTS || "noindex, nofollow";
export default defineNuxtConfig({
compatibilityDate: "2026-01-19",
@@ -29,7 +42,7 @@ export default defineNuxtConfig({
title: defaultSeoTitle,
meta: [
{ name: "description", content: defaultSeoDescription },
- { name: "robots", content: "noindex, nofollow" },
+ { name: "robots", content: robots },
{ property: "og:title", content: defaultSeoTitle },
{ property: "og:description", content: defaultSeoDescription },
{ property: "og:type", content: "website" },
@@ -143,6 +156,7 @@ export default defineNuxtConfig({
siteUrl,
githubRepo,
githubReleasesUrl,
+ docsSiteUrl,
muxPlaybackId,
muxBackgroundPlaybackId
}
diff --git a/landing/package.json b/landing/package.json
index fda278ca..e8f8e062 100644
--- a/landing/package.json
+++ b/landing/package.json
@@ -3,7 +3,7 @@
"private": true,
"type": "module",
"engines": {
- "node": ">=24.16.0 <25"
+ "node": ">=24.15.0 <25"
},
"scripts": {
"dev": "nuxt dev",
diff --git a/landing/product-docs/.vitepress/config.ts b/landing/product-docs/.vitepress/config.ts
index 18b48fa5..9e98295d 100644
--- a/landing/product-docs/.vitepress/config.ts
+++ b/landing/product-docs/.vitepress/config.ts
@@ -21,15 +21,21 @@ const normalizeBase = (value: string) => {
const withTrailingSlash = (value: string) => `${trimTrailingSlash(value)}/`;
const appBase = normalizeBase(process.env.NUXT_APP_BASE_URL || "/");
-const base = appBase === "/" ? "/docs/" : `${appBase}docs/`;
-const siteUrl = trimTrailingSlash(
- process.env.NUXT_PUBLIC_SITE_URL || "https://777genius.github.io/agent-teams-ai"
+const embeddedDocsBase = appBase === "/" ? "/docs/" : `${appBase}docs/`;
+const base = process.env.VITEPRESS_BASE ? normalizeBase(process.env.VITEPRESS_BASE) : embeddedDocsBase;
+const landingSiteUrl = trimTrailingSlash(
+ process.env.AGENT_TEAMS_LANDING_SITE_URL ||
+ process.env.NUXT_PUBLIC_LANDING_SITE_URL ||
+ process.env.VITEPRESS_LANDING_SITE_URL ||
+ process.env.NUXT_PUBLIC_SITE_URL ||
+ "https://777genius.github.io/agent-teams-ai"
);
+const configuredDocsSiteUrl = process.env.AGENT_TEAMS_DOCS_SITE_URL || process.env.VITEPRESS_SITE_URL;
const publicBaseUrl =
- appBase === "/" || siteUrl.endsWith(trimTrailingSlash(appBase))
- ? withTrailingSlash(siteUrl)
- : `${withTrailingSlash(siteUrl)}${appBase.replace(/^\/+/, "")}`;
-const docsUrl = `${publicBaseUrl}docs/`;
+ appBase === "/" || landingSiteUrl.endsWith(trimTrailingSlash(appBase))
+ ? withTrailingSlash(landingSiteUrl)
+ : `${withTrailingSlash(landingSiteUrl)}${appBase.replace(/^\/+/, "")}`;
+const docsUrl = configuredDocsSiteUrl ? withTrailingSlash(configuredDocsSiteUrl) : `${publicBaseUrl}docs/`;
const downloadUrl = `${publicBaseUrl}download/`;
const ruDownloadUrl = `${publicBaseUrl}ru/download/`;
const ogImageUrl = `${publicBaseUrl}og-image-agent-teams-v6.png`;
@@ -40,6 +46,7 @@ const rootGuide: DefaultTheme.SidebarItem[] = [
text: "Start",
items: [
{ text: "Installation", link: "/guide/installation" },
+ { text: "Beginner workflow", link: "/guide/beginner-workflow" },
{ text: "Quickstart", link: "/guide/quickstart" },
{ text: "Runtime setup", link: "/guide/runtime-setup" }
]
@@ -47,7 +54,10 @@ const rootGuide: DefaultTheme.SidebarItem[] = [
{
text: "Guide",
items: [
- { text: "Create a team", link: "/guide/create-team" },
+ { text: "Create your first team", link: "/guide/create-first-team" },
+ { text: "Run and monitor work", link: "/guide/run-and-monitor-work" },
+ { text: "Review and approve", link: "/guide/review-and-approve" },
+ { text: "Team configuration", link: "/guide/create-team" },
{ text: "Agent workflow", link: "/guide/agent-workflow" },
{ text: "Code review", link: "/guide/code-review" },
{ text: "MCP integration", link: "/guide/mcp-integration" },
@@ -83,6 +93,7 @@ const ruGuide: DefaultTheme.SidebarItem[] = [
text: "Старт",
items: [
{ text: "Установка", link: "/ru/guide/installation" },
+ { text: "Путь новичка", link: "/ru/guide/beginner-workflow" },
{ text: "Быстрый старт", link: "/ru/guide/quickstart" },
{ text: "Настройка рантайма", link: "/ru/guide/runtime-setup" }
]
@@ -90,7 +101,10 @@ const ruGuide: DefaultTheme.SidebarItem[] = [
{
text: "Руководство",
items: [
- { text: "Создание команды", link: "/ru/guide/create-team" },
+ { text: "Создать первую команду", link: "/ru/guide/create-first-team" },
+ { text: "Запуск и мониторинг", link: "/ru/guide/run-and-monitor-work" },
+ { text: "Проверка и approval", link: "/ru/guide/review-and-approve" },
+ { text: "Настройка команды", link: "/ru/guide/create-team" },
{ text: "Работа агентов", link: "/ru/guide/agent-workflow" },
{ text: "Код-ревью", link: "/ru/guide/code-review" },
{ text: "Интеграция MCP", link: "/ru/guide/mcp-integration" },
@@ -122,7 +136,11 @@ const ruGuide: DefaultTheme.SidebarItem[] = [
];
const rootNav: DefaultTheme.NavItem[] = [
- { text: "Guide", link: "/guide/quickstart", activeMatch: "^/guide/(?!troubleshooting(?:/|$))" },
+ {
+ text: "Guide",
+ link: "/guide/beginner-workflow",
+ activeMatch: "^/guide/(?!troubleshooting(?:/|$))"
+ },
{ text: "Developers", link: "/developers/", activeMatch: "^/developers/" },
{ text: "Reference", link: "/reference/concepts", activeMatch: "^/reference/" },
{
@@ -136,7 +154,7 @@ const rootNav: DefaultTheme.NavItem[] = [
const ruNav: DefaultTheme.NavItem[] = [
{
text: "Руководство",
- link: "/ru/guide/quickstart",
+ link: "/ru/guide/beginner-workflow",
activeMatch: "^/ru/guide/(?!troubleshooting(?:/|$))"
},
{ text: "Разработчикам", link: "/ru/developers/", activeMatch: "^/ru/developers/" },
@@ -149,6 +167,471 @@ const ruNav: DefaultTheme.NavItem[] = [
{ text: "Скачать", link: ruDownloadUrl, target: "_self", noIcon: true }
];
+// Additional locales (zh, es, ja, fr, de) are generated from a single strings table
+// so every locale stays structurally identical to the English/Russian sidebars and navs.
+interface DocsLocaleStrings {
+ siteTitle: string;
+ siteDescription: string;
+ nav: { guide: string; developers: string; reference: string; troubleshooting: string; download: string };
+ sidebarGroups: { start: string; guide: string; operations: string; developers: string; reference: string };
+ sidebarItems: {
+ installation: string;
+ quickstart: string;
+ runtimeSetup: string;
+ createTeam: string;
+ agentWorkflow: string;
+ codeReview: string;
+ mcpIntegration: string;
+ teamBriefExamples: string;
+ gitWorktreeStrategy: string;
+ troubleshooting: string;
+ developerHub: string;
+ concepts: string;
+ providersRuntimes: string;
+ contributorArchitecture: string;
+ releaseNotes: string;
+ privacyLocalData: string;
+ faq: string;
+ };
+ ui: {
+ searchButton: string;
+ searchAria: string;
+ noResults: string;
+ selectText: string;
+ navigateText: string;
+ closeText: string;
+ footerMessage: string;
+ docFooterPrev: string;
+ docFooterNext: string;
+ outlineLabel: string;
+ darkModeSwitchLabel: string;
+ lightModeSwitchTitle: string;
+ darkModeSwitchTitle: string;
+ lastUpdatedText: string;
+ editLinkText: string;
+ };
+}
+
+interface DocsLocaleDefinition {
+ loc: string;
+ lang: string;
+ label: string;
+ strings: DocsLocaleStrings;
+}
+
+const additionalLocales: DocsLocaleDefinition[] = [
+ {
+ loc: "zh",
+ lang: "zh-Hans",
+ label: "简体中文",
+ strings: {
+ siteTitle: "Agent Teams 文档",
+ siteDescription: "Agent Teams 文档,这是一款用于编排 AI 智能体的本地桌面应用。",
+ nav: { guide: "指南", developers: "开发者", reference: "参考", troubleshooting: "故障排查", download: "下载" },
+ sidebarGroups: { start: "开始", guide: "指南", operations: "运维", developers: "开发者", reference: "参考" },
+ sidebarItems: {
+ installation: "安装",
+ quickstart: "快速开始",
+ runtimeSetup: "运行时设置",
+ createTeam: "创建团队",
+ agentWorkflow: "智能体工作流",
+ codeReview: "代码审查",
+ mcpIntegration: "MCP 集成",
+ teamBriefExamples: "团队简报示例",
+ gitWorktreeStrategy: "Git 与 worktree 策略",
+ troubleshooting: "故障排查",
+ developerHub: "开发者中心",
+ concepts: "概念",
+ providersRuntimes: "提供方与运行时",
+ contributorArchitecture: "贡献者架构",
+ releaseNotes: "发布说明",
+ privacyLocalData: "隐私与本地数据",
+ faq: "常见问题"
+ },
+ ui: {
+ searchButton: "搜索……",
+ searchAria: "搜索文档",
+ noResults: "未找到结果",
+ selectText: "选择",
+ navigateText: "导航",
+ closeText: "关闭",
+ footerMessage: "免费且开源。",
+ docFooterPrev: "上一页",
+ docFooterNext: "下一页",
+ outlineLabel: "本页内容",
+ darkModeSwitchLabel: "外观",
+ lightModeSwitchTitle: "切换到浅色主题",
+ darkModeSwitchTitle: "切换到深色主题",
+ lastUpdatedText: "最后更新",
+ editLinkText: "在 GitHub 上编辑此页"
+ }
+ }
+ },
+ {
+ loc: "es",
+ lang: "es-ES",
+ label: "Español",
+ strings: {
+ siteTitle: "Documentación de Agent Teams",
+ siteDescription:
+ "Documentación de Agent Teams, una aplicación de escritorio local para la orquestación de agentes de IA.",
+ nav: {
+ guide: "Guía",
+ developers: "Desarrolladores",
+ reference: "Referencia",
+ troubleshooting: "Solución de problemas",
+ download: "Descargar"
+ },
+ sidebarGroups: {
+ start: "Inicio",
+ guide: "Guía",
+ operations: "Operaciones",
+ developers: "Desarrolladores",
+ reference: "Referencia"
+ },
+ sidebarItems: {
+ installation: "Instalación",
+ quickstart: "Inicio rápido",
+ runtimeSetup: "Configuración del runtime",
+ createTeam: "Crear un equipo",
+ agentWorkflow: "Flujo de trabajo de los agentes",
+ codeReview: "Revisión de código",
+ mcpIntegration: "Integración de MCP",
+ teamBriefExamples: "Ejemplos de briefing de equipo",
+ gitWorktreeStrategy: "Estrategia de Git y worktree",
+ troubleshooting: "Solución de problemas",
+ developerHub: "Centro para desarrolladores",
+ concepts: "Conceptos",
+ providersRuntimes: "Proveedores y runtimes",
+ contributorArchitecture: "Arquitectura para colaboradores",
+ releaseNotes: "Notas de la versión",
+ privacyLocalData: "Privacidad y datos locales",
+ faq: "Preguntas frecuentes"
+ },
+ ui: {
+ searchButton: "Buscar...",
+ searchAria: "Buscar en la documentación",
+ noResults: "No se encontraron resultados",
+ selectText: "para seleccionar",
+ navigateText: "para navegar",
+ closeText: "para cerrar",
+ footerMessage: "Gratis y de código abierto.",
+ docFooterPrev: "Anterior",
+ docFooterNext: "Siguiente",
+ outlineLabel: "En esta página",
+ darkModeSwitchLabel: "Apariencia",
+ lightModeSwitchTitle: "Cambiar al tema claro",
+ darkModeSwitchTitle: "Cambiar al tema oscuro",
+ lastUpdatedText: "Última actualización",
+ editLinkText: "Editar esta página en GitHub"
+ }
+ }
+ },
+ {
+ loc: "ja",
+ lang: "ja-JP",
+ label: "日本語",
+ strings: {
+ siteTitle: "Agent Teams ドキュメント",
+ siteDescription:
+ "AI エージェントのオーケストレーションを行うローカル デスクトップアプリ Agent Teams のドキュメントです。",
+ nav: {
+ guide: "ガイド",
+ developers: "開発者向け",
+ reference: "リファレンス",
+ troubleshooting: "トラブルシューティング",
+ download: "ダウンロード"
+ },
+ sidebarGroups: {
+ start: "はじめに",
+ guide: "ガイド",
+ operations: "運用",
+ developers: "開発者向け",
+ reference: "リファレンス"
+ },
+ sidebarItems: {
+ installation: "インストール",
+ quickstart: "クイックスタート",
+ runtimeSetup: "ランタイムの設定",
+ createTeam: "チームの作成",
+ agentWorkflow: "エージェントのワークフロー",
+ codeReview: "コードレビュー",
+ mcpIntegration: "MCP 連携",
+ teamBriefExamples: "チームブリーフの例",
+ gitWorktreeStrategy: "Git と worktree の戦略",
+ troubleshooting: "トラブルシューティング",
+ developerHub: "開発者ハブ",
+ concepts: "コンセプト",
+ providersRuntimes: "プロバイダーとランタイム",
+ contributorArchitecture: "コントリビューター向けアーキテクチャ",
+ releaseNotes: "リリースノート",
+ privacyLocalData: "プライバシーとローカルデータ",
+ faq: "FAQ"
+ },
+ ui: {
+ searchButton: "検索...",
+ searchAria: "ドキュメントを検索",
+ noResults: "結果が見つかりませんでした",
+ selectText: "選択",
+ navigateText: "移動",
+ closeText: "閉じる",
+ footerMessage: "無料でオープンソースです。",
+ docFooterPrev: "前へ",
+ docFooterNext: "次へ",
+ outlineLabel: "このページの内容",
+ darkModeSwitchLabel: "外観",
+ lightModeSwitchTitle: "ライトテーマに切り替える",
+ darkModeSwitchTitle: "ダークテーマに切り替える",
+ lastUpdatedText: "最終更新",
+ editLinkText: "GitHub でこのページを編集"
+ }
+ }
+ },
+ {
+ loc: "fr",
+ lang: "fr-FR",
+ label: "Français",
+ strings: {
+ siteTitle: "Documentation Agent Teams",
+ siteDescription:
+ "Documentation d'Agent Teams, une application de bureau locale pour l'orchestration d'agents IA.",
+ nav: {
+ guide: "Guide",
+ developers: "Développeurs",
+ reference: "Référence",
+ troubleshooting: "Dépannage",
+ download: "Télécharger"
+ },
+ sidebarGroups: {
+ start: "Démarrer",
+ guide: "Guide",
+ operations: "Opérations",
+ developers: "Développeurs",
+ reference: "Référence"
+ },
+ sidebarItems: {
+ installation: "Installation",
+ quickstart: "Démarrage rapide",
+ runtimeSetup: "Configuration du runtime",
+ createTeam: "Créer une équipe",
+ agentWorkflow: "Flux de travail des agents",
+ codeReview: "Revue de code",
+ mcpIntegration: "Intégration MCP",
+ teamBriefExamples: "Exemples de briefs d'équipe",
+ gitWorktreeStrategy: "Stratégie Git et worktree",
+ troubleshooting: "Dépannage",
+ developerHub: "Hub développeur",
+ concepts: "Concepts",
+ providersRuntimes: "Fournisseurs et runtimes",
+ contributorArchitecture: "Architecture pour les contributeurs",
+ releaseNotes: "Notes de version",
+ privacyLocalData: "Confidentialité et données locales",
+ faq: "FAQ"
+ },
+ ui: {
+ searchButton: "Rechercher...",
+ searchAria: "Rechercher dans la documentation",
+ noResults: "Aucun résultat trouvé",
+ selectText: "pour sélectionner",
+ navigateText: "pour naviguer",
+ closeText: "pour fermer",
+ footerMessage: "Gratuit et open source.",
+ docFooterPrev: "Précédent",
+ docFooterNext: "Suivant",
+ outlineLabel: "Sur cette page",
+ darkModeSwitchLabel: "Apparence",
+ lightModeSwitchTitle: "Passer au thème clair",
+ darkModeSwitchTitle: "Passer au thème sombre",
+ lastUpdatedText: "Dernière mise à jour",
+ editLinkText: "Modifier cette page sur GitHub"
+ }
+ }
+ },
+ {
+ loc: "de",
+ lang: "de-DE",
+ label: "Deutsch",
+ strings: {
+ siteTitle: "Agent Teams Dokumentation",
+ siteDescription:
+ "Dokumentation für Agent Teams, eine lokale Desktop-App zur Orchestrierung von KI-Agenten.",
+ nav: {
+ guide: "Anleitung",
+ developers: "Entwickler",
+ reference: "Referenz",
+ troubleshooting: "Fehlerbehebung",
+ download: "Download"
+ },
+ sidebarGroups: {
+ start: "Start",
+ guide: "Anleitung",
+ operations: "Betrieb",
+ developers: "Entwickler",
+ reference: "Referenz"
+ },
+ sidebarItems: {
+ installation: "Installation",
+ quickstart: "Schnellstart",
+ runtimeSetup: "Runtime-Einrichtung",
+ createTeam: "Team erstellen",
+ agentWorkflow: "Agent-Workflow",
+ codeReview: "Code-Review",
+ mcpIntegration: "MCP-Integration",
+ teamBriefExamples: "Team-Briefing-Beispiele",
+ gitWorktreeStrategy: "Git- und Worktree-Strategie",
+ troubleshooting: "Fehlerbehebung",
+ developerHub: "Entwickler-Hub",
+ concepts: "Konzepte",
+ providersRuntimes: "Anbieter und Runtimes",
+ contributorArchitecture: "Architektur für Mitwirkende",
+ releaseNotes: "Versionshinweise",
+ privacyLocalData: "Datenschutz und lokale Daten",
+ faq: "FAQ"
+ },
+ ui: {
+ searchButton: "Suchen...",
+ searchAria: "Dokumentation durchsuchen",
+ noResults: "Keine Ergebnisse gefunden",
+ selectText: "zum Auswählen",
+ navigateText: "zum Navigieren",
+ closeText: "zum Schließen",
+ footerMessage: "Kostenlos und quelloffen.",
+ docFooterPrev: "Zurück",
+ docFooterNext: "Weiter",
+ outlineLabel: "Auf dieser Seite",
+ darkModeSwitchLabel: "Darstellung",
+ lightModeSwitchTitle: "Zum hellen Design wechseln",
+ darkModeSwitchTitle: "Zum dunklen Design wechseln",
+ lastUpdatedText: "Zuletzt aktualisiert",
+ editLinkText: "Diese Seite auf GitHub bearbeiten"
+ }
+ }
+ }
+];
+
+const buildLocaleGuide = (loc: string, s: DocsLocaleStrings): DefaultTheme.SidebarItem[] => [
+ {
+ text: s.sidebarGroups.start,
+ items: [
+ { text: s.sidebarItems.installation, link: `/${loc}/guide/installation` },
+ { text: s.sidebarItems.quickstart, link: `/${loc}/guide/quickstart` },
+ { text: s.sidebarItems.runtimeSetup, link: `/${loc}/guide/runtime-setup` }
+ ]
+ },
+ {
+ text: s.sidebarGroups.guide,
+ items: [
+ { text: s.sidebarItems.createTeam, link: `/${loc}/guide/create-team` },
+ { text: s.sidebarItems.agentWorkflow, link: `/${loc}/guide/agent-workflow` },
+ { text: s.sidebarItems.codeReview, link: `/${loc}/guide/code-review` },
+ { text: s.sidebarItems.mcpIntegration, link: `/${loc}/guide/mcp-integration` },
+ { text: s.sidebarItems.teamBriefExamples, link: `/${loc}/guide/team-brief-examples` }
+ ]
+ },
+ {
+ text: s.sidebarGroups.operations,
+ items: [
+ { text: s.sidebarItems.gitWorktreeStrategy, link: `/${loc}/guide/git-worktree-strategy` },
+ { text: s.sidebarItems.troubleshooting, link: `/${loc}/guide/troubleshooting` }
+ ]
+ },
+ {
+ text: s.sidebarGroups.developers,
+ items: [{ text: s.sidebarItems.developerHub, link: `/${loc}/developers/` }]
+ },
+ {
+ text: s.sidebarGroups.reference,
+ items: [
+ { text: s.sidebarItems.concepts, link: `/${loc}/reference/concepts` },
+ { text: s.sidebarItems.providersRuntimes, link: `/${loc}/reference/providers-runtimes` },
+ { text: s.sidebarItems.contributorArchitecture, link: `/${loc}/reference/contributor-architecture` },
+ { text: s.sidebarItems.releaseNotes, link: `/${loc}/reference/release-notes` },
+ { text: s.sidebarItems.privacyLocalData, link: `/${loc}/reference/privacy-local-data` },
+ { text: s.sidebarItems.faq, link: `/${loc}/reference/faq` }
+ ]
+ }
+];
+
+const buildLocaleNav = (loc: string, s: DocsLocaleStrings): DefaultTheme.NavItem[] => [
+ {
+ text: s.nav.guide,
+ link: `/${loc}/guide/quickstart`,
+ activeMatch: `^/${loc}/guide/(?!troubleshooting(?:/|$))`
+ },
+ { text: s.nav.developers, link: `/${loc}/developers/`, activeMatch: `^/${loc}/developers/` },
+ { text: s.nav.reference, link: `/${loc}/reference/concepts`, activeMatch: `^/${loc}/reference/` },
+ {
+ text: s.nav.troubleshooting,
+ link: `/${loc}/guide/troubleshooting`,
+ activeMatch: `^/${loc}/guide/troubleshooting(?:/|$)`
+ },
+ { text: s.nav.download, link: `${publicBaseUrl}${loc}/download/`, target: "_self", noIcon: true }
+];
+
+const buildLocaleConfig = ({ loc, lang, label, strings: s }: DocsLocaleDefinition) => ({
+ label,
+ lang,
+ title: s.siteTitle,
+ description: s.siteDescription,
+ themeConfig: {
+ nav: buildLocaleNav(loc, s),
+ outline: {
+ level: [2, 3] as [number, number],
+ label: s.ui.outlineLabel
+ },
+ darkModeSwitchLabel: s.ui.darkModeSwitchLabel,
+ lightModeSwitchTitle: s.ui.lightModeSwitchTitle,
+ darkModeSwitchTitle: s.ui.darkModeSwitchTitle,
+ search: {
+ provider: "local" as const,
+ options: {
+ translations: {
+ button: {
+ buttonText: s.ui.searchButton,
+ buttonAriaLabel: s.ui.searchAria
+ },
+ modal: {
+ noResultsText: s.ui.noResults,
+ footer: {
+ selectText: s.ui.selectText,
+ navigateText: s.ui.navigateText,
+ closeText: s.ui.closeText
+ }
+ }
+ }
+ }
+ },
+ lastUpdated: {
+ text: s.ui.lastUpdatedText,
+ formatOptions: {
+ dateStyle: "medium" as const,
+ timeStyle: "short" as const,
+ forceLocale: true
+ }
+ },
+ editLink: {
+ pattern: `https://github.com/${REPO}/edit/main/landing/product-docs/:path`,
+ text: s.ui.editLinkText
+ },
+ docFooter: {
+ prev: s.ui.docFooterPrev,
+ next: s.ui.docFooterNext
+ },
+ footer: {
+ message: s.ui.footerMessage,
+ copyright: "Copyright © 777genius"
+ }
+ }
+});
+
+const additionalLocaleSidebars = Object.fromEntries(
+ additionalLocales.map((def) => [`/${def.loc}/`, buildLocaleGuide(def.loc, def.strings)])
+);
+
+const additionalLocaleConfigs = Object.fromEntries(
+ additionalLocales.map((def) => [def.loc, buildLocaleConfig(def)])
+);
+
export default defineConfig({
lang: "en-US",
title: SITE_TITLE,
@@ -261,6 +744,7 @@ export default defineConfig({
nav: rootNav,
sidebar: {
"/ru/": ruGuide,
+ ...additionalLocaleSidebars,
"/": rootGuide
},
socialLinks: [{ icon: "github", link: `https://github.com/${REPO}` }],
@@ -339,6 +823,7 @@ export default defineConfig({
copyright: "Copyright © 777genius"
}
}
- }
+ },
+ ...additionalLocaleConfigs
}
});
diff --git a/landing/product-docs/.vitepress/theme/DocsCardGrid.vue b/landing/product-docs/.vitepress/theme/DocsCardGrid.vue
index 85035089..0bf9efa1 100644
--- a/landing/product-docs/.vitepress/theme/DocsCardGrid.vue
+++ b/landing/product-docs/.vitepress/theme/DocsCardGrid.vue
@@ -6,41 +6,156 @@ const props = withDefaults(defineProps<{ type?: "start" | "reference" }>(), {
type: "start"
});
+type CardText = { title: string; desc: string; icon?: string; link?: string };
+
+// Locales that have their own translated card copy. Anything else falls back to English (root).
+const KNOWN_LOCALES = ["ru", "zh", "es", "ja", "fr", "de"] as const;
+
+// Links and icons are shared across locales; only the path prefix changes per locale.
+const START_LINKS = ["/guide/quickstart", "/guide/installation", "/guide/create-team", "/guide/code-review"];
+const START_ICONS = ["01", "02", "03", "04"];
+const REFERENCE_LINKS = [
+ "/reference/concepts",
+ "/reference/providers-runtimes",
+ "/reference/contributor-architecture",
+ "/reference/privacy-local-data",
+ "/reference/faq"
+];
+const REFERENCE_ICONS = ["◈", "⌁", "▦", "⌘", "?"];
+
+const CARD_TEXT: Record = {
+ "": {
+ start: [
+ { icon: "01", title: "Beginner workflow", desc: "Understand the first run from project to approval.", link: "/guide/beginner-workflow" },
+ { icon: "02", title: "Quickstart", desc: "Install the app and validate the base launch.", link: "/guide/quickstart" },
+ { icon: "03", title: "First team", desc: "Lead, builder, reviewer, roles, models, and Worktree.", link: "/guide/create-first-team" },
+ { icon: "04", title: "Run work", desc: "Lead brief, task board, comments, and monitoring.", link: "/guide/run-and-monitor-work" },
+ { icon: "05", title: "Review and approve", desc: "Task detail, logs, diff, and hunk-level decisions.", link: "/guide/review-and-approve" },
+ { icon: "06", title: "Runtime setup", desc: "Claude, Codex, OpenCode, and multimodel setup.", link: "/guide/runtime-setup" }
+ ],
+ reference: [
+ { title: "Concepts", desc: "Teams, tasks, roles, and autonomy levels." },
+ { title: "Runtimes", desc: "Claude, Codex, OpenCode, and multimodel mode." },
+ { title: "Architecture", desc: "Feature layout, guardrails, and runtime/provider boundaries." },
+ { title: "Local data", desc: "What stays on disk and what providers receive." },
+ { title: "FAQ", desc: "Short answers to common questions." }
+ ]
+ },
+ ru: {
+ start: [
+ { icon: "01", title: "Путь новичка", desc: "Понять весь первый запуск от проекта до approval.", link: "/ru/guide/beginner-workflow" },
+ { icon: "02", title: "Быстрый старт", desc: "Поставить приложение и проверить базовый запуск.", link: "/ru/guide/quickstart" },
+ { icon: "03", title: "Первая команда", desc: "Lead, builder, reviewer, роли, модели и Worktree.", link: "/ru/guide/create-first-team" },
+ { icon: "04", title: "Запуск работы", desc: "Brief для lead, task board, comments и monitoring.", link: "/ru/guide/run-and-monitor-work" },
+ { icon: "05", title: "Review и approval", desc: "Task detail, logs, diff и hunk-level decisions.", link: "/ru/guide/review-and-approve" },
+ { icon: "06", title: "Рантаймы", desc: "Claude, Codex, OpenCode и multimodel setup.", link: "/ru/guide/runtime-setup" }
+ ],
+ reference: [
+ { title: "Концепции", desc: "Команды, задачи, роли и уровни автономности." },
+ { title: "Рантаймы", desc: "Claude, Codex, OpenCode и multimodel-режим." },
+ { title: "Архитектура", desc: "Feature layout, guardrails и границы runtime/provider." },
+ { title: "Локальные данные", desc: "Что хранится на машине и что уходит провайдерам." },
+ { title: "FAQ", desc: "Короткие ответы на частые вопросы." }
+ ]
+ },
+ zh: {
+ start: [
+ { title: "快速开始", desc: "安装应用并创建你的第一个团队。" },
+ { title: "安装", desc: "平台、发布版本以及从源码运行。" },
+ { title: "创建团队", desc: "角色、lead prompt 与任务边界。" },
+ { title: "代码审查", desc: "以代码块(hunk)级别的决策审查任务变更。" }
+ ],
+ reference: [
+ { title: "概念", desc: "团队、任务、角色与自主级别。" },
+ { title: "运行时", desc: "Claude、Codex、OpenCode 与多模型模式。" },
+ { title: "架构", desc: "功能布局、护栏以及运行时/提供方边界。" },
+ { title: "本地数据", desc: "哪些数据留在磁盘上,哪些会发送给提供方。" },
+ { title: "常见问题", desc: "对常见问题的简短解答。" }
+ ]
+ },
+ es: {
+ start: [
+ { title: "Inicio rápido", desc: "Instala la aplicación y crea tu primer equipo." },
+ { title: "Instalación", desc: "Plataformas, versiones y ejecución desde el código fuente." },
+ { title: "Crear un equipo", desc: "Roles, prompt del lead y límites de las tareas." },
+ { title: "Revisión de código", desc: "Revisa los cambios de las tareas con decisiones a nivel de hunk." }
+ ],
+ reference: [
+ { title: "Conceptos", desc: "Equipos, tareas, roles y niveles de autonomía." },
+ { title: "Runtimes", desc: "Claude, Codex, OpenCode y modo multimodelo." },
+ { title: "Arquitectura", desc: "Estructura de las funciones, guardrails y límites entre runtime y proveedor." },
+ { title: "Datos locales", desc: "Qué permanece en el disco y qué reciben los proveedores." },
+ { title: "Preguntas frecuentes", desc: "Respuestas breves a preguntas habituales." }
+ ]
+ },
+ ja: {
+ start: [
+ { title: "クイックスタート", desc: "アプリをインストールして、最初のチームを作成します。" },
+ { title: "インストール", desc: "対応プラットフォーム、リリース、ソースからの実行について。" },
+ { title: "チームの作成", desc: "ロール、リードプロンプト、タスクの範囲について。" },
+ { title: "コードレビュー", desc: "ハンク単位の判断でタスクの変更をレビューします。" }
+ ],
+ reference: [
+ { title: "コンセプト", desc: "チーム、タスク、ロール、自律性のレベルについて。" },
+ { title: "ランタイム", desc: "Claude、Codex、OpenCode、およびマルチモデルモードについて。" },
+ { title: "アーキテクチャ", desc: "機能の構成、ガードレール、ランタイム/プロバイダーの境界について。" },
+ { title: "ローカルデータ", desc: "ディスクに保持されるものと、プロバイダーに送信されるものについて。" },
+ { title: "FAQ", desc: "よくある質問への簡潔な回答。" }
+ ]
+ },
+ fr: {
+ start: [
+ { title: "Démarrage rapide", desc: "Installez l'application et créez votre première équipe." },
+ { title: "Installation", desc: "Plateformes, versions et exécution depuis les sources." },
+ { title: "Créer une équipe", desc: "Rôles, prompt du lead et périmètre des tâches." },
+ { title: "Revue de code", desc: "Examinez les modifications de tâches avec des décisions au niveau du hunk." }
+ ],
+ reference: [
+ { title: "Concepts", desc: "Équipes, tâches, rôles et niveaux d'autonomie." },
+ { title: "Runtimes", desc: "Claude, Codex, OpenCode et mode multimodèle." },
+ { title: "Architecture", desc: "Organisation des fonctionnalités, garde-fous et frontières runtime/fournisseur." },
+ { title: "Données locales", desc: "Ce qui reste sur le disque et ce que reçoivent les fournisseurs." },
+ { title: "FAQ", desc: "Réponses brèves aux questions fréquentes." }
+ ]
+ },
+ de: {
+ start: [
+ { title: "Schnellstart", desc: "Installieren Sie die App und erstellen Sie Ihr erstes Team." },
+ { title: "Installation", desc: "Plattformen, Releases und Ausführen aus dem Quellcode." },
+ { title: "Team erstellen", desc: "Rollen, Lead-Prompt und Aufgabengrenzen." },
+ { title: "Code-Review", desc: "Aufgabenänderungen mit Entscheidungen auf Hunk-Ebene überprüfen." }
+ ],
+ reference: [
+ { title: "Konzepte", desc: "Teams, Aufgaben, Rollen und Autonomiestufen." },
+ { title: "Runtimes", desc: "Claude, Codex, OpenCode und Multimodell-Modus." },
+ { title: "Architektur", desc: "Feature-Aufbau, Guardrails und Grenzen zwischen Runtime und Anbieter." },
+ { title: "Lokale Daten", desc: "Was auf dem Datenträger bleibt und was die Anbieter erhalten." },
+ { title: "FAQ", desc: "Kurze Antworten auf häufige Fragen." }
+ ]
+ }
+};
+
const { page } = useData();
-const isRu = computed(() => page.value.relativePath.startsWith("ru/"));
+
+const locale = computed(() => {
+ const segment = page.value.relativePath.split("/")[0];
+ return (KNOWN_LOCALES as readonly string[]).includes(segment) ? segment : "";
+});
const cards = computed(() => {
- if (isRu.value) {
- return props.type === "reference"
- ? [
- { icon: "◈", title: "Концепции", desc: "Команды, задачи, роли и уровни автономности.", link: "/ru/reference/concepts" },
- { icon: "⌁", title: "Рантаймы", desc: "Claude, Codex, OpenCode и multimodel-режим.", link: "/ru/reference/providers-runtimes" },
- { icon: "▦", title: "Архитектура", desc: "Feature layout, guardrails и границы runtime/provider.", link: "/ru/reference/contributor-architecture" },
- { icon: "⌘", title: "Локальные данные", desc: "Что хранится на машине и что уходит провайдерам.", link: "/ru/reference/privacy-local-data" },
- { icon: "?", title: "FAQ", desc: "Короткие ответы на частые вопросы.", link: "/ru/reference/faq" }
- ]
- : [
- { icon: "01", title: "Быстрый старт", desc: "Поставить приложение и создать первую команду.", link: "/ru/guide/quickstart" },
- { icon: "02", title: "Установка", desc: "Платформы, релизы и запуск из исходников.", link: "/ru/guide/installation" },
- { icon: "03", title: "Создание команды", desc: "Роли, lead prompt и границы работы.", link: "/ru/guide/create-team" },
- { icon: "04", title: "Код-ревью", desc: "Проверка изменений по задачам и hunk-level decisions.", link: "/ru/guide/code-review" }
- ];
- }
+ const text = CARD_TEXT[locale.value] ?? CARD_TEXT[""];
+ const isReference = props.type === "reference";
+ const entries = isReference ? text.reference : text.start;
+ const links = isReference ? REFERENCE_LINKS : START_LINKS;
+ const icons = isReference ? REFERENCE_ICONS : START_ICONS;
+ const prefix = locale.value ? `/${locale.value}` : "";
- return props.type === "reference"
- ? [
- { icon: "◈", title: "Concepts", desc: "Teams, tasks, roles, and autonomy levels.", link: "/reference/concepts" },
- { icon: "⌁", title: "Runtimes", desc: "Claude, Codex, OpenCode, and multimodel mode.", link: "/reference/providers-runtimes" },
- { icon: "▦", title: "Architecture", desc: "Feature layout, guardrails, and runtime/provider boundaries.", link: "/reference/contributor-architecture" },
- { icon: "⌘", title: "Local data", desc: "What stays on disk and what providers receive.", link: "/reference/privacy-local-data" },
- { icon: "?", title: "FAQ", desc: "Short answers to common questions.", link: "/reference/faq" }
- ]
- : [
- { icon: "01", title: "Quickstart", desc: "Install the app and create your first team.", link: "/guide/quickstart" },
- { icon: "02", title: "Installation", desc: "Platforms, releases, and running from source.", link: "/guide/installation" },
- { icon: "03", title: "Create a team", desc: "Roles, lead prompt, and task boundaries.", link: "/guide/create-team" },
- { icon: "04", title: "Code review", desc: "Review task changes with hunk-level decisions.", link: "/guide/code-review" }
- ];
+ return entries.map((entry, index) => ({
+ icon: entry.icon ?? icons[index] ?? String(index + 1).padStart(2, "0"),
+ title: entry.title,
+ desc: entry.desc,
+ link: entry.link ?? `${prefix}${links[index]}`
+ }));
});
diff --git a/landing/product-docs/de/developers/index.md b/landing/product-docs/de/developers/index.md
new file mode 100644
index 00000000..6b4d0878
--- /dev/null
+++ b/landing/product-docs/de/developers/index.md
@@ -0,0 +1,69 @@
+---
+title: Entwickler-Hub – Agent Teams Dokumentation
+description: Einstiegspunkt für Mitwirkende und Entwickler zur Architektur, zu den Guardrails, zum Debugging und zu den MCP-Erweiterungswegen von Agent Teams.
+lang: de-DE
+---
+
+# Entwickler-Hub
+
+Nutzen Sie diese Seite, wenn Sie Agent Teams selbst ändern, einen Team-Launch debuggen oder eine Runtime mit MCP-Tools erweitern möchten. Die folgenden Links verweisen auf die maßgeblichen Repo-Dokumente, damit die Implementierungsregeln an einer Stelle gebündelt bleiben.
+
+## Hier starten
+
+| Bedarf | Gehe zu |
+| --- | --- |
+| Repo-Überblick, Skripte und Quellcode-Einrichtung | [README.md](https://github.com/777genius/agent-teams-ai/blob/main/README.md) |
+| Agent-Navigation und Architektur-Index | [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) |
+| Arbeitskonventionen für Agenten und Mitwirkende | [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) |
+| Strikte Implementierungs-Guardrails | [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) |
+| Aufbau mittlerer und großer Features | [Feature-Architektur-Standard](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) |
+| Debugging von Launch, Bootstrap und Teammate-Messaging | [Runbook für das Debugging von Agent-Teams](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) |
+| Beitragsprozess | [Leitfaden für Beiträge](https://github.com/777genius/agent-teams-ai/blob/main/.github/CONTRIBUTING.md) |
+| Versionshinweise / Changelog | [RELEASE.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/RELEASE.md) — [CHANGELOG.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md) |
+
+## Lokaler Entwicklungsweg
+
+Führen Sie die Electron-Desktop-App für die normale Entwicklung aus:
+
+```bash
+pnpm install
+pnpm dev
+```
+
+Der Browser-/Web-Weg ist kein Ersatz für die Desktop-Runtime. Der Desktop-Modus ist der unterstützte lokale Weg, da er IPC, Terminals, Anbieter-Authentifizierung, die Verwaltung des Team-Lebenszyklus, Launch-Diagnosen und die von echten Teams genutzten Runtime-Bridges umfasst.
+
+## Architektur-Checkpoints
+
+Bevor Sie ein Feature ändern, bestimmen Sie seine Grenze:
+
+| Bereich | Erwarteter Speicherort |
+| --- | --- |
+| Mittleres oder großes Produkt-Feature | `src/features//` |
+| Orchestrierung im Electron-Hauptprozess | `src/main/` |
+| Preload-sichere API-Oberfläche | `src/preload/` |
+| Renderer-UI und App-Zustand | `src/renderer/` |
+| Geteilte Typen und reine Hilfsfunktionen | `src/shared/` |
+| MCP-Server des Agent-Teams-Boards | `mcp-server/` |
+| Board-Datencontroller | `agent-teams-controller/` |
+
+Verwenden Sie `src/features/recent-projects` als Referenz-Slice für die Feature-Organisation. Halten Sie prozessübergreifende Verträge explizit und vermeiden Sie tiefe Imports über Feature-Grenzen hinweg.
+
+## Debugging-Weg
+
+Bei hängenden Launches, OpenCode-Zuständen `registered` / Bootstrap nicht bestätigt, fehlenden Teammate-Antworten oder verdächtigen Task-Logs:
+
+1. Beginnen Sie mit dem [Debugging-Runbook](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md).
+2. Untersuchen Sie das neueste Artefakt-Paket unter `~/.claude/teams//launch-failure-artifacts/latest.json`.
+3. Öffnen Sie die Artefakt-`manifest.json` und prüfen Sie `classification`, Bootstrap-Breadcrumbs, Launch-Diagnosen, die Spawn-Status der Mitglieder und die redigierten Log-Auszüge.
+4. Räumen Sie nur das Team, den Run, das Pane oder den Prozess auf, das bzw. den Sie als zum Smoke-Test oder zum fehlgeschlagenen Launch gehörig identifizieren können.
+
+## MCP-Entwicklungsweg
+
+Agent Teams nutzt einen integrierten MCP-Server namens `agent-teams` für Board-Operationen. Benutzer- und Projekt-MCP-Server können externe Fähigkeiten für Runtimes hinzufügen. Siehe [MCP-Integration](/de/guide/mcp-integration) für Einrichtungsbeispiele, die Struktur von `.mcp.json` und Hinweise zur Tool-Registrierung.
+
+## Verwandte Dokumente
+
+- [Architektur für Mitwirkende](/de/reference/contributor-architecture)
+- [Runtime-Einrichtung](/de/guide/runtime-setup)
+- [MCP-Integration](/de/guide/mcp-integration)
+- [Fehlerbehebung](/de/guide/troubleshooting)
diff --git a/landing/product-docs/de/guide/agent-workflow.md b/landing/product-docs/de/guide/agent-workflow.md
new file mode 100644
index 00000000..5b8c2304
--- /dev/null
+++ b/landing/product-docs/de/guide/agent-workflow.md
@@ -0,0 +1,121 @@
+---
+title: Agent-Workflow – Agent Teams Dokumentation
+description: Verstehen Sie den Aufgabenlebenszyklus, das Kanban-Board, Nachrichten, Aufgabenprotokolle, Parallelarbeit, Live-Prozesse und teamübergreifende Kommunikation.
+lang: de-DE
+---
+
+# Agent-Workflow
+
+Agent Teams macht die Arbeit der Agenten als Aufgabenstatus, Nachrichten, Protokolle und überprüfbare Codeänderungen sichtbar.
+
+## Modi
+
+| Modus | Beschreibung |
+| --- | --- |
+| Solo | Ein Teammitglied mit selbst verwalteten Aufgaben |
+| Team | Viele Teammitglieder, die parallel arbeiten und sich gegenseitig überprüfen |
+
+Beide Modi teilen sich dieselben Oberflächen für Kanban, Aufgabenprotokolle und Code-Review.
+
+## Aufgabenlebenszyklus
+
+Agent Teams verfolgt jede Aufgabe entlang zweier unabhängiger Dimensionen: Arbeitsstatus und Review-Zustand.
+
+| Dimension | Zustände | Beschreibung |
+| --- | --- | --- |
+| Arbeitsstatus | `pending`, `in_progress`, `completed` | Verfolgt, ob die Aufgabe wartet, gerade bearbeitet wird oder vom Eigentümer abgeschlossen wurde |
+| Review-Zustand | `none`, `review`, `needsFix`, `approved` | Verfolgt, an welcher Stelle des Review-Ablaufs nach Abschluss sich die Aufgabe befindet |
+
+Das Kanban-Board zeigt die kombinierte Ansicht, aber die beiden Dimensionen bewegen sich unabhängig voneinander.
+
+### Arbeitsstatus-Ablauf
+
+| Phase | Was passiert | Eigentümer |
+| --- | --- | --- |
+| Pending | Die Aufgabe ist erstellt und bereit, aber noch hat niemand mit der Arbeit begonnen | Lead oder Benutzer |
+| In progress | Agenten arbeiten und aktualisieren den Aufgabenzustand über die Board-MCP-Tools | Teammitglieder |
+| Completed | Der Eigentümer postet einen Ergebniskommentar und markiert die Aufgabe als erledigt | Teammitglied |
+
+### Review-Zustand-Ablauf
+
+| Phase | Was passiert | Eigentümer |
+| --- | --- | --- |
+| None | Die Aufgabe befindet sich noch nicht im Review (kann pending, in progress oder neu completed sein) | — |
+| Review | Ein Review wurde angefordert; ein Reviewer prüft das Diff und das Ergebnis | Reviewer |
+| Needs fix | Während des Reviews wurden Änderungen angefordert; der Eigentümer muss aktualisieren | Teammitglied (Eigentümer) |
+| Approved | Der Review wurde bestanden; die Aufgabe ist finalisiert | Reviewer |
+
+### Planung → In progress
+
+Wenn ein Teammitglied eine Aufgabe beginnt, wechselt der Arbeitsstatus auf `in_progress`. Der Agent erstellt einen Aufgabenkommentar mit seinem Plan und arbeitet weiter. Alle nativen Tool-Aktionen (read, bash, edit, write) werden in ein Aufgabenprotokoll gestreamt.
+
+### Completed → Review
+
+Wenn das Teammitglied die Arbeit beendet, postet es einen Ergebniskommentar und setzt den Arbeitsstatus auf `completed`. Der Lead oder Reviewer kann dann ein Review anfordern, um den Review-Ablauf zu starten.
+
+### Review → Approved
+
+Wenn die Review-Oberfläche akzeptable Änderungen zeigt, genehmigen Sie das Review. Die Aufgabe wird finalisiert und mit ihrem Diff verknüpft.
+
+::: warning Fix-first-Review
+Wenn ein Teammitglied während des Reviews um Änderungen gebeten wird, sollte es einen Folgekommentar mit den Korrekturen posten, woraufhin der Lead genehmigen kann.
+:::
+
+## Kanban-Board
+
+Das Board ist die primäre Arbeitsoberfläche. Es ermöglicht Ihnen:
+
+- Offene, blockierte und im Review befindliche Arbeit zu überblicken
+- Die Aufgabendetails zu öffnen und Laufzeitprotokolle zu inspizieren
+- Änderungen zu überprüfen, ohne rohe Session-Dateien zu lesen
+- Eigentümer zuzuweisen oder neu zuzuweisen
+
+::: tip
+Verwenden Sie die Schnellaktions-Schaltflächen auf den Karten, um eine Aufgabe zu starten, abzuschließen oder ein Review anzufordern, ohne das Detailfenster zu öffnen.
+:::
+
+## Nachrichten und Kommentare
+
+| Kanal | Wann verwenden |
+| --- | --- |
+| Direktnachricht | Einen Agenten umleiten, eine kurze Frage stellen |
+| Aufgabenkommentar | Notizen, die zu einer bestimmten Aufgabe gehören |
+
+Kommentare bewahren den Kontext für ein späteres Review und erscheinen in der Aufgaben-Timeline.
+
+::: tip Aufgabenkommentare bevorzugen
+Wenn sich die Anmerkung auf eine bestimmte Aufgabe bezieht, fügen Sie sie als Kommentar zu dieser Aufgabe hinzu, anstatt eine Direktnachricht zu senden. So bleibt der Verlauf mit der Arbeit verknüpft.
+:::
+
+## Aufgabenprotokolle
+
+Aufgabenspezifische Protokolle isolieren Laufzeitausgaben, Aktionen und Nachrichten für eine Zuweisung. Verwenden Sie sie, um folgende Fragen zu beantworten:
+
+- Was hat dieser Agent ausgeführt?
+- Warum hat er diese Datei geändert?
+- Hat er ein anderes Teammitglied um Hilfe gebeten?
+- Welche Aufgabe hat dieses Diff erzeugt?
+
+### Validierungs-Checkliste
+
+Wenn eine Aufgabe festzustecken scheint oder ihr Diff losgelöst wirkt, überprüfen Sie den Lebenszyklus in dieser Reihenfolge:
+
+1. Die Aufgabe hat den erwarteten Eigentümer und ist auf `in_progress` gewechselt.
+2. Der Eigentümer hat einen Aufgabenkommentar mit dem Plan oder dem ersten Fortschrittsupdate gepostet.
+3. Die Aufgabenprotokolle zeigen Laufzeitaktivität innerhalb des Aufgabenfensters.
+4. Dateiänderungen sind mit derselben Aufgabe, demselben Eigentümer und derselben Session verknüpft.
+5. Der abschließende Aufgabenkommentar enthält den Verifizierungsbefehl und das Ergebnis.
+
+Für tiefergehendes Debugging verwenden Sie die Befehle für persistierte Belege unter [Fehlerbehebung](/de/guide/troubleshooting#task-log-triage). Die Benutzeroberfläche ist die Arbeitsoberfläche, aber die persistierten Aufgabendateien, Postfächer und Laufzeitbelege sind die Quelle für schwerwiegende Launch- oder Attributionsfehler.
+
+## Muster für Parallelarbeit
+
+Teammitglieder können gleichzeitig an unabhängigen Aufgaben arbeiten. Sie können auch Abhängigkeitsverknüpfungen (`blocked-by`) erstellen, sodass eine Aufgabe wartet, bis eine andere abgeschlossen ist. Behalten Sie das Board auf blockierte Bahnen im Auge und weisen Sie Eigentümer neu zu, wenn ein Teammitglied untätig ist, während ein anderes überlastet ist.
+
+## Live-Prozesse
+
+Der Live-Prozess-Bereich zeigt URLs und laufende Prozesse an, wenn Agenten lokale Server oder Tools starten. Öffnen Sie URLs direkt aus der App, um die Ergebnisse zu inspizieren. Prozesse bleiben registriert, bis sie explizit gestoppt werden oder die Runtime beendet wird.
+
+## Teamübergreifende Kommunikation
+
+Agenten können Nachrichten an andere Teams senden, wenn die Teams verknüpft sind. Verwenden Sie dies für Übergaben, gemeinsam genutzte Bibliotheken oder Statusabfragen zwischen Squads.
diff --git a/landing/product-docs/de/guide/code-review.md b/landing/product-docs/de/guide/code-review.md
new file mode 100644
index 00000000..267562fa
--- /dev/null
+++ b/landing/product-docs/de/guide/code-review.md
@@ -0,0 +1,119 @@
+---
+title: Code-Review – Agent Teams Dokumentation
+description: Aufgabenbezogene Diffs prüfen, Hunks akzeptieren oder ablehnen, Inline-Kommentare hinterlassen und Review-Zustände von none bis approved verwalten.
+lang: de-DE
+---
+
+# Code-Review
+
+Code-Review in Agent Teams ist aufgabenzentriert. Sie prüfen, was sich für eine bestimmte Aufgabe geändert hat, anstatt einen großen unstrukturierten Diff zu durchsuchen.
+
+## Review-Oberfläche
+
+Für jede abgeschlossene Aufgabe, die Dateien berührt hat, ermöglicht Ihnen die Review-Oberfläche Folgendes:
+
+- Geänderte Dateien mit Kontext vorher/nachher prüfen
+- Einzelne Hunks akzeptieren oder ablehnen
+- Inline-Kommentare hinterlassen
+- Den Diff mit der Aufgabenbeschreibung und den Agent-Logs verknüpfen
+
+## Entscheidungen auf Hunk-Ebene
+
+Akzeptieren Sie kleine korrekte Änderungen und lehnen Sie isolierte Fehler ab, ohne die gesamte Aufgabe zu verwerfen. Das ist nützlich, wenn ein Agent die Aufgabe größtenteils gelöst, aber in einer Datei über das Ziel hinausgeschossen ist.
+
+::: tip Schrittweise akzeptieren
+Wenn ein Diff größtenteils korrekt ist, akzeptieren Sie zuerst die guten Hunks und fordern Sie nur für die Teile Änderungen an, die korrigiert werden müssen. So bleibt das Board in Bewegung.
+:::
+
+Nutzen Sie Entscheidungen auf Hunk-Ebene für:
+
+| Situation | Aktion |
+| --- | --- |
+| Korrekte, eng begrenzte Änderung | Den Hunk akzeptieren |
+| Korrekte Idee, falsche Datei oder breites Refactoring | Den Hunk ablehnen und eine engere Korrektur anfordern |
+| Unklare Verhaltensänderung | Kommentieren und um Verifizierung bitten |
+| Generiertes Formatierungsrauschen | Ablehnen, sofern die Formatierung nicht Teil der Aufgabe war |
+
+## Review starten
+
+1. Öffnen Sie eine abgeschlossene Aufgabe
+2. Sehen Sie sich den Tab **Changes** an
+3. Wenn der Diff angemessen aussieht, klicken Sie auf **Request Review**, um die Aufgabe in die Review-Spalte zu verschieben
+
+Während des Reviews gilt die Aufgabe noch nicht als done, sodass andere Teammitglieder oder der Lead sie weiterhin kommentieren können.
+
+## Review-Schleife
+
+Eine gesunde Review-Schleife sieht so aus:
+
+1. Der Eigentümer postet einen Ergebniskommentar mit dem geänderten Umfang und der Verifizierung
+2. Der Reviewer öffnet den Aufgaben-Diff und prüft die Hunks anhand der Aufgabenbeschreibung
+3. Der Reviewer akzeptiert gute Hunks, lehnt schlechte Hunks ab oder fordert Änderungen an
+4. Der Eigentümer korrigiert nur den angeforderten Umfang und postet einen Folgekommentar
+5. Der Reviewer genehmigt, wenn Aufgabenergebnis und Diff übereinstimmen
+
+Beispiel für einen Kommentar mit Änderungsanforderung:
+
+```text
+Please keep the copy improvements, but revert the unrelated runtime wording in the provider table. Add the `pnpm --dir landing docs:build` result before resubmitting.
+```
+
+## Review-Zustände
+
+| Zustand | Bedeutung |
+| --- | --- |
+| `none` | Aufgabe ist neu, in Bearbeitung oder abgeschlossen, aber noch nicht im Review |
+| `review` | Die Aufgabe befindet sich aktiv im Review |
+| `needsFix` | Es wurden Änderungen angefordert; der Eigentümer muss vor der erneuten Genehmigung aktualisieren |
+| `approved` | Das Review wurde akzeptiert und die Aufgabe ist abgeschlossen |
+
+## Agent-Review-Workflow
+
+Teams können die Arbeit der jeweils anderen prüfen, bevor Sie die endgültige Entscheidung treffen. Das fängt offensichtliche Regressionen ab und hält das Board ehrlich, aber Sie sollten riskante Bereiche dennoch selbst überprüfen.
+
+Ein Agent-Review ist am nützlichsten, wenn der Reviewer ein klares Bewertungsraster hat. Weisen Sie einen Reviewer beispielsweise an, nur die Verständlichkeit der Dokumentation, nur die IPC-Sicherheit oder nur die Testabdeckung zu prüfen. Breite Aufforderungen wie "alles überprüfen" führen tendenziell zu schwächerem Feedback.
+
+### MCP-gesteuerter Review-Zustand
+
+Änderungen des Review-Zustands (Review anfordern, Änderungen anfordern, genehmigen) sind tool-gesteuert. Das Hinterlassen eines Kommentars mit Änderungsanforderung an einer Aufgabe verschiebt die Kanban-Spalte **nicht** auf `needsFix` — ein Lead oder Agent muss das passende MCP-Tool aufrufen:
+
+- `review_request_changes` — verschiebt die Aufgabe auf `needsFix` und benachrichtigt den Eigentümer
+- `review_approve` — verschiebt die Aufgabe auf `approved` und schließt das Review ab
+
+Kommentare allein reichen für Zustandsübergänge nicht aus. Die vollständige Liste der Review-MCP-Tools und ihrer Parameter finden Sie unter [MCP-Integration](/de/guide/mcp-integration).
+
+## Review-Teilnehmer
+
+Der Team-Lead ist der Standard-Reviewer. Sie können in den Kanban-Einstellungen zusätzliche Reviewer konfigurieren, wenn Sie möchten, dass Kollegen die Arbeit der jeweils anderen prüfen.
+
+## Was manuell zu prüfen ist
+
+Priorisieren Sie diese Bereiche beim Review:
+
+- **Anbieter-Authentifizierung und Runtime-Erkennung** — hat der Agent die Runtime-Einrichtung so geändert, dass andere Pfade dadurch beeinträchtigt würden?
+- **IPC-, Preload- und Dateisystemgrenzen** — halten Sie die Electron-Zuständigkeiten getrennt
+- **Git- und Worktree-Verhalten** - überprüfen Sie Branch-Benennung, Commits und Pushes; siehe [Git- und Worktree-Strategie](/de/guide/git-worktree-strategy) für Isolationsmuster.
+- **Parsing- und Aufgabenlebenszyklus-Logik** — Änderungen an Aufgabenreferenzen, Chunking oder Filterung können die Nachrichtenzustellung beeinträchtigen
+- **Persistenz- und Code-Review-Abläufe** — Änderungen am Aufgabenspeicher oder Review-Zustand müssen über die IPC-Schichten hinweg konsistent bleiben
+
+Den kanonischen Feature-Aufbau und Links zu den harten Guardrails finden Sie unter [Architektur für Mitwirkende](/de/reference/contributor-architecture).
+
+## Verifizierung
+
+Bevorzugen Sie gezielte Verifizierungsbefehle. Breite Formatierungs- oder Lint-Fix-Befehle sollten nicht verwendet werden, sofern die Aufgabe nicht ausdrücklich eine breite Formatierungsänderung beabsichtigt.
+
+Gute Verifizierungskommentare enthalten den Befehl und das Ergebnis:
+
+```text
+Verified with `pnpm --dir landing docs:build`. Build passed.
+```
+
+Wenn die Verifizierung übersprungen wird, sollte der Aufgabenkommentar den Grund nennen:
+
+```text
+Docs-only wording change. Build not run because the existing dev server was busy; checked Markdown links manually.
+```
+
+::: warning Nicht projektweit automatisch formatieren
+Sofern es bei der Aufgabe nicht ausdrücklich um Formatierung geht, vermeiden Sie es, `pnpm lint:fix` auf nicht zugehörige Dateien auszuführen. Das erzeugt Rauschen in der Review-Oberfläche.
+:::
diff --git a/landing/product-docs/de/guide/create-team.md b/landing/product-docs/de/guide/create-team.md
new file mode 100644
index 00000000..c1ed3416
--- /dev/null
+++ b/landing/product-docs/de/guide/create-team.md
@@ -0,0 +1,106 @@
+---
+title: Team erstellen – Agent Teams Dokumentation
+description: Rollen definieren, Anbieter und Modelle zuweisen, ein Team-Briefing schreiben sowie Worktree-Isolation und Autonomiestufen konfigurieren.
+lang: de-DE
+---
+
+# Team erstellen
+
+Ein Team ist eine benannte Gruppe von Agenten mit Rollen, einem Lead, einem Zielprojekt und einem Koordinations-Prompt.
+
+## Empfohlenes erstes Team
+
+Beginnen Sie mit einem kleinen Team:
+
+| Rolle | Zweck |
+| -------- | ----------------------------------------------------------- |
+| Lead | Teilt die Arbeit auf, erstellt Aufgaben, koordiniert Teammitglieder |
+| Builder | Setzt abgegrenzte Aufgaben um |
+| Reviewer | Überprüft die Ergebnisse, erkennt Regressionen, fordert Korrekturen an |
+
+Dieser Zuschnitt gibt Ihnen genug Koordination, um den Produktnutzen zu sehen, ohne den ersten Start unübersichtlich zu machen.
+
+::: tip
+Sie können später weitere Mitglieder hinzufügen. Beginnen Sie klein, validieren Sie den Workflow und skalieren Sie dann hoch.
+:::
+
+## Anbieter und Modelle zuweisen
+
+Jedes Teammitglied läuft auf einem Anbieter-Backend. Wählen Sie im Team-Editor für jedes Mitglied einen Anbieter (Claude, Codex oder OpenCode) und ein Modell. Die App zeigt nur Anbieter an, bei denen Sie sich bereits authentifiziert haben.
+
+Das Mischen von Anbietern innerhalb eines Teams wird unterstützt — zum Beispiel ein Claude-Lead mit OpenCode-Buildern.
+
+::: info
+Gemini steht als unterstützter Anbieter-Pfad zur Verfügung. Weitere Informationen zu Authentifizierungsoptionen und zum aktuellen Anbieterstatus finden Sie unter [Anbieter und Runtimes](/de/reference/providers-runtimes).
+:::
+
+## Ein gutes Team-Briefing schreiben
+
+Das Team-Briefing sollte Folgendes enthalten:
+
+- das gewünschte Ergebnis
+- die relevanten Dateien oder Funktionsbereiche
+- Risikogrenzen, etwa "keine unbeteiligten Module refaktorieren"
+- Erwartungen an das Review
+- Verifizierungsbefehle, sofern Sie sie kennen
+
+Beispiel:
+
+```text
+Build a focused improvement to the download flow. Keep changes inside the landing app unless a shared helper is clearly needed. Create tasks before implementation, review each task diff, and run landing lint/build checks.
+```
+
+## Worktree-Isolation
+
+OpenCode-Mitglieder können die **Worktree-Isolation** nutzen, um in einem separaten Git-Worktree statt im Hauptarbeitsverzeichnis zu arbeiten. Das verhindert Dateikonflikte, wenn mehrere Agenten dasselbe Projekt bearbeiten.
+
+::: warning
+Die Worktree-Isolation setzt ein Git-verwaltetes Projekt voraus und ist derzeit auf OpenCode-Mitglieder beschränkt.
+:::
+
+Um sie zu aktivieren, schalten Sie die Option **Worktree-Isolation** beim Hinzufügen oder Bearbeiten eines OpenCode-Teammitglieds ein.
+
+## Autonomie wählen
+
+Agent Teams unterstützt verschiedene Kontrollstufen. Nutzen Sie mehr Autonomie für Routineänderungen und engeres Review für riskante Bereiche wie Anbieter-Authentifizierung, IPC, Persistenz, Git-Workflows und Release-Tooling.
+
+### Aufwandsstufe
+
+Jedes Teammitglied hat eine **Aufwand**-Einstellung, die steuert, wie viel Reasoning der Anbieter vor einer Antwort investiert. Höherer Aufwand erzeugt gründlichere Ergebnisse, kostet jedoch Zeit und Tokens.
+
+| Stufe | Wann verwenden |
+| ------- | ---------------------------------------------------------- |
+| Low | Schnelle Nachschläge, kleine Formatierungsänderungen, Routine-Edits |
+| Medium | Standard für die meisten Implementierungsaufgaben |
+| High | Komplexe Refactorings, übergreifende Änderungen, riskante Codepfade |
+
+Die App bietet zusätzliche Stufen (minimal, xhigh, max) für Anbieter, die diese unterstützen. Wenn ein Modell keinen konfigurierbaren Aufwand unterstützt, ist die Auswahl deaktiviert und der Standardwert des Anbieters wird verwendet.
+
+### Fast Mode
+
+Schalten Sie pro Mitglied den **Fast Mode** ein, um Geschwindigkeit gegenüber Tiefe zu priorisieren. Dies entspricht dem nativen Fast-/Speed-Modus des Anbieters, sofern verfügbar. Setzen Sie ihn auf **On** für Routineaufgaben, auf **Off** für sorgfältige Arbeit oder auf **Inherit**, um dem teamweiten Standard zu folgen.
+
+### Kontext begrenzen
+
+Aktivieren Sie **Kontext begrenzen**, um das Kontextfenster für ein Mitglied zu verkleinern. Das ist nützlich für Claude-Modelle, die erweiterten Kontext unterstützen (z. B. 1M Tokens) — das Begrenzen des Kontexts vermeidet unnötigen Token-Verbrauch und kann die Latenz für Aufgaben verbessern, die keinen großen Kontext benötigen.
+
+## Kontext hinzufügen
+
+Hängen Sie Dateien, Screenshots oder spezifische Notizen an, wenn sie die Aufgabe wesentlich verändern. Agenten können Aufgabenbeschreibungen, Kommentare und Anhänge als dauerhaften Kontext nutzen.
+
+## Auf Aufgabenqualität achten
+
+Gute Teams erstellen Aufgaben, die:
+
+- spezifisch genug sind, um sie zu überprüfen
+- klein genug sind, um sie abzuschließen
+- mit sichtbaren Ergebnissen verknüpft sind
+- durch einen Verifizierungspfad abgesichert sind
+
+Wenn der Lead vage Aufgaben erstellt, senden Sie eine Direktnachricht mit der Bitte um kleinere, testbare Aufgaben.
+
+## Nächste Schritte
+
+- [Runtime-Einrichtung](/de/guide/runtime-setup) — Anbieter-Authentifizierung und Modelle konfigurieren
+- [Code-Review](/de/guide/code-review) — Agentenänderungen akzeptieren, ablehnen oder kommentieren
+- [Fehlerbehebung](/de/guide/troubleshooting) — häufige Probleme und Lösungen
diff --git a/landing/product-docs/de/guide/git-worktree-strategy.md b/landing/product-docs/de/guide/git-worktree-strategy.md
new file mode 100644
index 00000000..beece760
--- /dev/null
+++ b/landing/product-docs/de/guide/git-worktree-strategy.md
@@ -0,0 +1,102 @@
+---
+title: Git- und Worktree-Strategie – Agent Teams Dokumentation
+description: Entscheiden Sie, wann Sie den Haupt-Worktree, Feature-Branches oder die OpenCode-Worktree-Isolierung für parallele Agentenarbeit verwenden.
+lang: de-DE
+---
+
+# Git- und Worktree-Strategie
+
+Git bietet Agent Teams den stärksten Review-Pfad: schmale Diffs, Branch-Sichtbarkeit, aufgabenbezogene Änderungen und sicherere parallele Arbeit.
+
+## Eine Strategie wählen
+
+| Strategie | Verwenden, wenn | Kompromiss |
+| --- | --- | --- |
+| Haupt-Worktree | Einzelarbeit, reine Doku-Bearbeitungen oder ein Teammitglied nach dem anderen | Einfach, aber parallele Bearbeitungen können kollidieren |
+| Feature-Branch | Ein Team arbeitet an einer zusammenhängenden Änderung | Sauberes Review-Ziel, aber Teammitglieder teilen sich weiterhin Dateien |
+| Worktree-Isolierung | Mehrere OpenCode-Teammitglieder bearbeiten möglicherweise dasselbe Repository parallel | Bessere Isolierung, aber Merge/Review erfordert mehr Disziplin |
+
+Fangen Sie einfach an. Fügen Sie die Worktree-Isolierung hinzu, wenn parallele Bearbeitungen wahrscheinlich sind, nicht weil jede Aufgabe ein eigenes Checkout benötigt.
+
+## Wann die Worktree-Isolierung aktiviert werden sollte
+
+Aktivieren Sie sie für OpenCode-Teammitglieder, wenn:
+
+- zwei oder mehr Teammitglieder gleichzeitig dasselbe Repository bearbeiten könnten
+- eine Aufgabe Formatierer, Codegeneratoren oder umfangreiche Tests ausführen könnte
+- Sie möchten, dass der Branch und das Diff jedes Teammitglieds getrennt bleiben
+- der Lead-Workspace unsauber ist und keine direkten Bearbeitungen erhalten sollte
+
+Lassen Sie sie deaktiviert, wenn:
+
+- die Aufgabe schreibgeschützt ist
+- ein Teammitglied alle Bearbeitungen verantwortet
+- das Repository nicht von Git verfolgt wird
+- Sie einen Runtime-Pfad benötigen, der diesen Isolierungsmodus nicht unterstützt
+
+::: warning
+Die Worktree-Isolierung gilt derzeit für OpenCode-Mitglieder und erfordert ein von Git verfolgtes Projekt.
+:::
+
+## Branch-Hygiene
+
+Bevor Sie parallele Arbeit beginnen:
+
+```bash
+git status --short
+git branch --show-current
+```
+
+Verwenden Sie nach Möglichkeit einen sauberen Branch. Wenn der Haupt-Worktree bereits Benutzeränderungen enthält, weisen Sie die Agenten an, nicht zugehörige Dateien nicht zurückzusetzen, und halten Sie den Aufgabenumfang eng.
+
+Empfohlener Branch-Stil:
+
+```text
+agent//
+```
+
+Beispiele:
+
+```text
+agent/docs/mcp-guide
+agent/review/task-log-filtering
+agent/ui/code-review-polish
+```
+
+## Review-Ablauf
+
+Bei isolierten Worktrees prüfen Sie das Diff des Teammitglieds, bevor Sie Änderungen mergen oder zurück in den Haupt-Workspace übernehmen.
+
+1. Bestätigen Sie, dass der Kommentar zum Aufgabenergebnis den geänderten Umfang und die Verifizierung benennt.
+2. Prüfen Sie das Aufgaben-Diff in der Review-UI.
+3. Fordern Sie Änderungen an der Aufgabe an, wenn das Diff nicht zugehörige Dateien berührt.
+4. Genehmigen Sie erst, nachdem Tests oder manuelle Prüfungen dem Aufgabenrisiko entsprechen.
+5. Mergen oder übernehmen Sie Änderungen bewusst.
+
+Mergen Sie Worktree-Ausgaben nicht automatisch, nur weil die Aufgabe abgeschlossen ist. Abschluss bedeutet, dass der Agent die Arbeit für reviewbereit hält.
+
+## Konfliktrichtlinie
+
+Verwenden Sie diese Richtlinie für parallele Teams:
+
+| Situation | Aktion |
+| --- | --- |
+| Zwei Teammitglieder bearbeiten dieselbe Datei | Pausieren Sie eine Aufgabe oder machen Sie eine Person für die Integration verantwortlich |
+| Generierte Dateien wurden umfangreich geändert | Verlangen Sie einen Kommentar, der den Generator und den Befehl erklärt |
+| Der Haupt-Worktree enthält nicht zugehörige Änderungen | Bewahren Sie sie auf und prüfen Sie nur die aufgabeneigenen Änderungen |
+| Der Worktree-Branch divergiert | Rebasen oder mergen Sie nach dem Review manuell, nicht innerhalb einer vagen Agentenaufgabe |
+
+## Beispiel für einen Aufgaben-Prompt
+
+```text
+Implement the settings validation fix in your assigned worktree. Keep edits inside src/features/settings and focused tests. Do not touch provider auth or task storage. Post the test command and result before completing the task.
+```
+
+Dieser Prompt funktioniert, weil er den erlaubten Bereich, die sensiblen Grenzen und den Abschlussnachweis benennt.
+
+## Verwandte Anleitungen
+
+- [Team erstellen](/de/guide/create-team)
+- [Code-Review](/de/guide/code-review)
+- [Team-Briefing-Beispiele](/de/guide/team-brief-examples)
+- [Runtime-Einrichtung](/de/guide/runtime-setup)
diff --git a/landing/product-docs/de/guide/installation.md b/landing/product-docs/de/guide/installation.md
new file mode 100644
index 00000000..0f760edd
--- /dev/null
+++ b/landing/product-docs/de/guide/installation.md
@@ -0,0 +1,129 @@
+---
+title: Installation – Agent Teams Dokumentation
+description: Laden Sie Agent Teams für macOS, Windows oder Linux herunter und installieren Sie es. Behandelt paketierte Builds, Einrichtung aus dem Quellcode, automatische Updates und Voraussetzungen.
+lang: de-DE
+---
+
+# Installation
+
+Agent Teams wird als Desktop-App für macOS, Windows und Linux ausgeliefert.
+
+::: tip Kürzester Weg
+1. Laden Sie unten den Build für Ihre Plattform herunter
+2. Starten Sie die App - beginnen Sie mit dem kostenlosen Modell ohne Authentifizierung oder verbinden Sie die Anbieter-Authentifizierung über die Benutzeroberfläche
+3. Starten Sie den [Schnellstart](/de/guide/quickstart), um Ihr erstes Team zu erstellen
+
+Start der Desktop-App: Führen Sie `pnpm dev` für die Electron-App aus. Starten Sie für die normale Nutzung nicht den Browser-/Web-Entwicklungsmodus.
+:::
+
+## Builds herunterladen
+
+Verwenden Sie die Download-Seite oder das neueste [GitHub-Release](https://github.com/777genius/agent-teams-ai/releases), wenn Sie die paketierte App möchten:
+
+- macOS Apple Silicon: `.dmg`
+- macOS Intel: `.dmg`
+- Windows: `.exe`
+- Linux: `.AppImage`, `.deb`, `.rpm` oder `.pacman`
+
+::: warning Windows SmartScreen
+Nicht signierte oder neu veröffentlichte Open-Source-Apps können SmartScreen auslösen. Wenn Sie der Release-Quelle vertrauen, wählen Sie **More info** und dann **Run anyway**.
+:::
+
+## Voraussetzungen
+
+Die paketierte App ist auf ein Onboarding ohne Einrichtungsaufwand ausgelegt. Sie können mit dem kostenlosen Modell ohne Authentifizierung beginnen - ohne Registrierung, API-Schlüssel oder Kreditkarte. Wenn Sie weitere Modelle möchten, führt die App Sie über die Benutzeroberfläche durch die Runtime-Erkennung und die Anbieter-Authentifizierung.
+
+Für kostenpflichtige oder kontogebundene Modelle verbinden Sie mindestens einen Anbieter:
+
+| Anbieter | Zugriffsmethode |
+| ------------------ | ------------------------------------------------- |
+| Claude (Anthropic) | Anmeldung über Claude Code CLI oder API-Schlüssel |
+| Codex (OpenAI) | Anmeldung über Codex CLI oder API-Schlüssel |
+| Gemini (Google) | Google ADC, Gemini CLI oder API-Schlüssel |
+| OpenCode | Enthaltenes kostenloses Modell ohne Authentifizierung oder API-Schlüssel für ein unterstütztes Backend (z. B. OpenRouter) |
+
+::: info
+Gemini ist als unterstützter Anbieter-Pfad verfügbar. Siehe [Anbieter und Runtimes](/de/reference/providers-runtimes) für Authentifizierungsoptionen und den aktuellen Status über alle Anbieter hinweg.
+:::
+
+Für die Entwicklung aus dem Quellcode benötigen Sie außerdem:
+
+| Werkzeug | Version |
+| ------- | ------- |
+| Node.js | 24.16.0 LTS |
+| pnpm | 10+ |
+
+Unter macOS erfordern die offiziellen vorkompilierten Node.js-24-Binaries macOS 13.5+.
+
+## Aus dem Quellcode ausführen
+
+
+
+```bash
+git clone https://github.com/777genius/agent-teams-ai.git
+cd agent-teams-ai
+pnpm install
+pnpm dev
+```
+
+`pnpm dev` startet die Electron-Desktop-App mit Hot Reload. Dies ist das standardmäßige Entwicklungsziel — starten Sie für die normale Entwicklung keinen Browser-Web-Entwicklungsserver. Dem Browser-Pfad fehlen das vollständige Desktop-IPC, das Terminal, die Anbieter-Authentifizierung und das Verhalten im Team-Lebenszyklus.
+
+Der `main`-Branch enthält die neueste stabile Entwicklung. Wechseln Sie nur dann zu Feature-Branches, wenn Sie eine bestimmte, noch nicht veröffentlichte Änderung benötigen.
+
+## Einrichtung überprüfen
+
+Stellen Sie nach der Installation sicher, dass der Build fehlerfrei ist:
+
+```bash
+# Prüfen, ob die Desktop-App kompiliert und startet
+pnpm typecheck
+
+# Überprüfen, ob die VitePress-Dokumentationsseite baut
+pnpm --dir landing docs:build
+```
+
+Wenn `pnpm typecheck` Typfehler meldet, prüfen Sie auf eine neuere Version der Abhängigkeiten oder auf festgepinntes TypeScript. Wenn `pnpm --dir landing docs:build` fehlschlägt, untersuchen Sie `landing/product-docs/` auf Syntaxfehler in Markdown oder Konfiguration.
+
+Wenn Sie diese Dokumentation bearbeiten, führen Sie den Build aus, um Ihre Änderungen zu überprüfen:
+
+```bash
+pnpm --dir landing docs:build
+```
+
+## Automatische Updates
+
+Die paketierte App prüft beim Start und periodisch während der Ausführung automatisch auf Updates. Wenn ein Update verfügbar ist, fordert die App Sie auf, es herunterzuladen und zu installieren. Sie können auch manuell über das App-Menü prüfen.
+
+::: tip
+Automatische Updates sind beim Ausführen aus dem Quellcode nicht verfügbar. Ziehen Sie die neuesten Änderungen und führen Sie `pnpm install` erneut aus, wenn sich Abhängigkeiten ändern.
+:::
+
+## Aus dem Quellcode aktualisieren
+
+Wenn Sie aus dem Quellcode ausführen, ziehen Sie den `main`-Branch und führen Sie die Installation erneut aus, wenn sich Abhängigkeiten ändern:
+
+```bash
+git pull
+pnpm install
+```
+
+Überprüfen Sie nach dem Aktualisieren den Build und die Dokumentation:
+
+```bash
+pnpm typecheck
+pnpm --dir landing docs:build
+```
+
+Verwenden Sie für die normale Entwicklung immer `pnpm dev` (Electron) — nicht den Browser-Entwicklungsserver.
+
+## Nächste Schritte
+
+- [Schnellstart](/de/guide/quickstart) — von der Installation bis zum ersten laufenden Team
+- [Runtime-Einrichtung](/de/guide/runtime-setup) — Anbieter-Authentifizierung und Modellauswahl pro Runtime
+- [Team erstellen](/de/guide/create-team) — empfohlene Teamstrukturen und das Verfassen von Briefings
+
+### Für Mitwirkende
+
+- [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) — Repository-Navigation und Architekturhinweise
+- [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) — Arbeitskonventionen und Projektregeln
+- [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) — harte Implementierungs-Guardrails
diff --git a/landing/product-docs/de/guide/mcp-integration.md b/landing/product-docs/de/guide/mcp-integration.md
new file mode 100644
index 00000000..de56fa11
--- /dev/null
+++ b/landing/product-docs/de/guide/mcp-integration.md
@@ -0,0 +1,225 @@
+---
+title: MCP-Integration – Agent Teams Dokumentation
+description: Konfigurieren Sie MCP in Agent Teams für Board-Operationen, Teamkoordination, externe Tool-Server und die Entwicklung eigener Tools.
+lang: de-DE
+---
+
+# MCP-Integration
+
+Agent Teams nutzt MCP in zwei praktischen Schichten:
+
+| Schicht | Funktion | Wer es nutzt |
+| --- | --- | --- |
+| Integrierter Board-Server | Stellt die Tools von Agent Teams für Aufgaben, Nachrichten, Reviews, Prozesse, Runtimes und teamübergreifende Zusammenarbeit bereit | Leads und von der App gestartete Teammitglieder |
+| Externe MCP-Server | Fügen optionale Tools hinzu, etwa Browser-Automatisierung, Design-Kontext, Doku-Suche oder Unternehmenssysteme | Benutzer und konfigurierte Runtimes |
+
+Halten Sie diese Schichten getrennt. Der integrierte MCP-Server `agent-teams` ist der Weg, über den Agenten innerhalb von Agent Teams koordinieren. Externe MCP-Server sind optionale Runtime-Tools.
+
+## Wie Agent Teams MCP einspeist
+
+Wenn die Desktop-App Claude-basierte Teammitglieder startet, schreibt sie eine temporäre `--mcp-config`-JSON-Datei, die den integrierten Server `agent-teams` enthält:
+
+```json
+{
+ "mcpServers": {
+ "agent-teams": {
+ "command": "node",
+ "args": ["/path/to/agent-teams-mcp/index.js"],
+ "env": {
+ "AGENT_TEAMS_MCP_CLAUDE_DIR": "/Users/you/.claude"
+ }
+ }
+ }
+}
+```
+
+In der Entwicklung kann der Befehl über `tsx` auf `mcp-server/src/index.ts` zeigen. In paketierten Builds kopiert die App den gebündelten MCP-Server an einen stabilen App-Daten-Pfad und führt ihn mit Node aus. Die generierte Datei gehört der App und wird nach bestem Bemühen wieder bereinigt.
+
+Benutzer- und Projekt-MCP-Server bleiben getrennt. Die App liest installierte Server aus:
+
+| Geltungsbereich | Speicherort |
+| --- | --- |
+| Benutzer | `~/.claude.json` unter `mcpServers` |
+| Lokaler Projekteintrag in der Claude-Konfiguration | `~/.claude.json` unter `projects[projectPath].mcpServers` |
+| Projekt | `/.mcp.json` unter `mcpServers` |
+
+Bevorzugen Sie den Projekt-Geltungsbereich für Tools, die zu einem einzelnen Repository gehören. Bevorzugen Sie den Benutzer-Geltungsbereich für Tools, die Sie projektübergreifend wiederverwenden.
+
+## Beispiel für ein Projekt-`.mcp.json`
+
+Legen Sie diese Datei im Projekt-Stammverzeichnis ab, wenn ein Team denselben projektbezogenen Server sehen soll:
+
+```json
+{
+ "mcpServers": {
+ "docs-search": {
+ "command": "npx",
+ "args": ["-y", "@acme/docs-search-mcp"],
+ "env": {
+ "DOCS_INDEX_PATH": "./docs-index"
+ }
+ },
+ "local-browser": {
+ "command": "node",
+ "args": ["./tools/mcp/browser-server.js"]
+ }
+ }
+}
+```
+
+Halten Sie Geheimnisse aus eingecheckten `.mcp.json`-Dateien heraus. Legen Sie Zugangsdaten in Ihrer Shell, in einer benutzerbezogenen Konfiguration oder im benutzerdefinierten MCP-Installationsablauf der App ab, wenn der Wert lokal bleiben muss.
+
+## Board-MCP-Workflow
+
+Agenten sollten Board-MCP-Tools nutzen, wenn die Arbeit zu einer Aufgabe gehört:
+
+1. Lesen Sie den aktuellen Aufgabenkontext.
+2. Starten Sie die Aufgabe erst, wenn Sie tatsächlich mit der Arbeit beginnen.
+3. Fügen Sie Aufgabenkommentare für Blocker, Pläne und Endergebnisse hinzu.
+4. Markieren Sie die Aufgabe als abgeschlossen, nachdem der Ergebniskommentar gepostet wurde.
+5. Senden Sie eine kurze Nachricht, wenn ein Lead oder Teammitglied das Ergebnis kennen muss.
+
+Beispiel für einen Agentenablauf:
+
+```text
+task_get -> task_start -> edit/test -> task_add_comment -> task_complete -> message_send
+```
+
+Verwenden Sie eine Direktnachricht für die Koordination. Verwenden Sie einen Aufgabenkommentar für eine dauerhafte Aufgabenhistorie.
+
+::: tip
+Wenn der Hinweis Review, Verifizierung, geänderten Umfang oder einen Blocker betrifft, hinterlegen Sie ihn an der Aufgabe.
+:::
+
+## Integrierte Agent-Teams-Tools
+
+Der MCP-Server registriert Tools aus `agent-teams-controller/src/mcpToolCatalog.js`. Die Registrierungsschleife befindet sich in `mcp-server/src/tools/index.ts`, und jede Gruppe hat ihre eigene Datei unter `mcp-server/src/tools/`.
+
+Häufige Betriebstools:
+
+| Tool | Verwendung |
+| --- | --- |
+| `task_get` | Liest den aktuellen Aufgabenkontext, Kommentare, Anhänge, Status und Beziehungen |
+| `task_start` | Markiert eine Aufgabe als in Arbeit, wenn die Arbeit tatsächlich beginnt |
+| `task_add_comment` | Fügt Blocker-Notizen, Verifizierungsnotizen, Pläne und abschließende Ergebniszusammenfassungen hinzu |
+| `task_complete` | Schließt eine Aufgabe ab, nachdem der abschließende Ergebniskommentar gepostet wurde |
+| `message_send` | Sendet eine sichtbare Posteingangsnachricht an einen Lead, ein Teammitglied oder einen Benutzer |
+| `review_request`, `review_start`, `review_approve`, `review_request_changes` | Bewegen aufgabenbezogene Review-Workflows |
+| `process_register`, `process_list`, `process_stop`, `process_unregister` | Verfolgen teammitgliedseigene Dev-Server, Watcher und andere Hintergrunddienste |
+
+Tool-Namen können Runtimes mit MCP-Namespace-Präfixen erscheinen, zum Beispiel `mcp__agent-teams__task_get`. Der kanonische Tool-Name innerhalb des MCP-Servers bleibt `task_get`.
+
+## Ein neues integriertes Tool registrieren
+
+Für Arbeiten am Agent-Teams-Repository fügen Sie integrierte Board-Tools über die vorhandene FastMCP-Struktur hinzu:
+
+1. Fügen Sie die Tool-Implementierung in die passende Datei unter `mcp-server/src/tools/` ein, oder erstellen Sie eine neue Gruppendatei, wenn die Domäne tatsächlich neu ist.
+2. Fügen Sie den Tool-Namen der entsprechenden Gruppe in `agent-teams-controller/src/mcpToolCatalog.js` hinzu.
+3. Binden Sie eine neue Gruppe nur dann über `mcp-server/src/tools/index.ts` ein, wenn eine neue Domänengruppe benötigt wird.
+4. Validieren Sie die Eingabe mit `zod` und rufen Sie die Controller-API auf, anstatt Board-Dateien direkt zu lesen.
+5. Fügen Sie gezielte Tests in `mcp-server/test/tools.test.ts` hinzu oder einen e2e-Fall, wenn der Transport eine Rolle spielt.
+
+Minimale Struktur:
+
+```ts
+server.addTool({
+ name: 'task_example',
+ description: 'Explain what this tool does for agents.',
+ parameters: z.object({
+ teamName: z.string().min(1),
+ claudeDir: z.string().min(1).optional(),
+ taskId: z.string().min(1)
+ }),
+ execute: async ({ teamName, claudeDir, taskId }) => {
+ assertConfiguredTeam(teamName, claudeDir);
+ const controller = getController(teamName, claudeDir);
+ return jsonTextContent(controller.tasks.getTask(taskId));
+ }
+});
+```
+
+Erstellen Sie kein Tool, das die Controller-Validierung umgeht, unzusammenhängende Team-Dateien verändert oder breiten Datei-/Prozesszugriff ohne eng begrenzten Aufgabenbedarf offenlegt.
+
+## Externe MCP-Server
+
+Verwenden Sie externe MCP-Server, wenn ein Teammitglied eine dauerhafte Tool-Verbindung benötigt und nicht nur einen einzelnen Prompt mit eingefügtem Kontext.
+
+Gute Anwendungsfälle:
+
+- Browser- oder Website-Test-Tools
+- Design- oder Produktdaten-Tools
+- interne Doku- und Suchsysteme
+- Issue-Tracker- oder Support-Systeme
+- Datenbankinspektions-Tools mit schreibgeschützten Zugangsdaten
+
+Schlechte Anwendungsfälle:
+
+- Geheimnisse, die in Prompts eingefügt werden
+- einmalige Dateien, die direkt angehängt werden können
+- Tools, die Produktionssysteme ohne Review verändern
+- breiter lokaler Dateisystemzugriff, wenn ein engerer Projekt-Geltungsbereich ausreicht
+
+## Geltungsbereiche
+
+Agent Teams erkennt gemeinsam genutzte und projektorientierte MCP-Geltungsbereiche.
+
+| Geltungsbereich | Verwenden, wenn |
+| --- | --- |
+| Benutzer oder Global | Derselbe Server soll projektübergreifend verfügbar sein |
+| Projekt oder Lokal | Der Server gehört zu einem Repository, Arbeitsbereich oder Team-Kontext |
+
+Bevorzugen Sie den engsten Geltungsbereich, der den Workflow weiterhin nutzbar macht. Projektbezogene Server sind beim Review leichter nachzuvollziehen, weil das Tool zum geänderten Projekt gehört.
+
+## Einrichtungs-Checkliste
+
+Bevor Sie eine Aufgabe zuweisen, die von einem MCP-Server abhängt:
+
+1. Installieren oder konfigurieren Sie den Server.
+2. Bestätigen Sie, dass er in der Liste der installierten MCP-Server der App im vorgesehenen Geltungsbereich erscheint.
+3. Führen Sie Diagnosen aus der MCP-Registry oder der Erweiterungs-UI aus, sofern verfügbar.
+4. Beginnen Sie mit einer risikoarmen, schreibgeschützten Aufgabe.
+5. Erwähnen Sie die erwartete MCP-Tool-Nutzung in der Aufgabenbeschreibung oder im Team-Briefing.
+
+Wenn ein Server die Diagnose nicht besteht, beheben Sie das zuerst. Ein besserer Aufgaben-Prompt repariert weder einen fehlenden Befehl noch einen falschen Konfigurationspfad oder abgelehnte Zugangsdaten.
+
+## Einen eigenen Server aus der App installieren
+
+Die Desktop-App stellt MCP-Registry-APIs über Electron-IPC bereit – für Suche, Durchsuchen, Installation, benutzerdefinierte Installation, Deinstallation, das Lesen des Installationszustands und Diagnosen. Benutzerdefinierte Installationen validieren den Servernamen, den Geltungsbereich, den Projektpfad, die Namen der Umgebungsvariablen und die HTTP-Header, bevor der Installationspfad der Runtime aufgerufen wird.
+
+Verwenden Sie die benutzerdefinierte Installation, wenn Sie ein MCP-Paket haben, das noch nicht in der Registry ist:
+
+| Feld | Beispiel |
+| --- | --- |
+| Servername | `docs-search` |
+| Geltungsbereich | `project` für dieses Repository, `user` für alle Projekte |
+| Typ | `stdio` für lokale Befehle, `http` oder `sse` für entfernte Server |
+| Paket | `@acme/docs-search-mcp` |
+| Env | `DOCS_INDEX_PATH=./docs-index` |
+
+Führen Sie nach der Installation eine Diagnose durch und erstellen Sie eine kleine, schreibgeschützte Aufgabe, um die Tool-Oberfläche zu prüfen, bevor Sie größere Arbeit zuweisen.
+
+## Aufgabenbeispiel
+
+```text
+Audit the docs home page with the browser MCP. Check desktop and mobile widths, capture any layout issue as a task comment, and only edit landing/product-docs files. Run `pnpm --dir landing docs:build` before completion.
+```
+
+Das funktioniert, weil es das Tool, die Oberfläche, die Schreibgrenze und den Verifizierungsschritt benennt.
+
+## Sicherheitsregeln
+
+- Geben Sie nicht standardmäßig jedem Teammitglied jeden MCP-Server.
+- Halten Sie schreibfähige Tools aus breiten Teams heraus, sofern der Review sie nicht erfordert.
+- Bevorzugen Sie schreibgeschützte Zugangsdaten für Inspektionsaufgaben.
+- Stellen Sie produktionswirksame Tool-Nutzung hinter explizite Aufgabenkommentare und Review.
+- Behandeln Sie MCP-Diagnosefehler als Einrichtungsfehler, nicht als Agentenfehler.
+- Vermeiden Sie es, Geheimnisse in `.mcp.json` oder Prompts einzuchecken.
+- Verwenden Sie absolute `projectPath`-Werte, wenn Sie projektbezogene Server über die App installieren.
+- Bearbeiten Sie nicht die von der App generierten `agent-teams-mcp-*.json`-Dateien; sie sind temporäre Start-Artefakte.
+
+## Verwandte Anleitungen
+
+- [Runtime-Einrichtung](/de/guide/runtime-setup)
+- [Team-Briefing-Beispiele](/de/guide/team-brief-examples)
+- [Agent-Workflow](/de/guide/agent-workflow)
+- [Entwickler](/de/developers/)
diff --git a/landing/product-docs/de/guide/quickstart.md b/landing/product-docs/de/guide/quickstart.md
new file mode 100644
index 00000000..664305e8
--- /dev/null
+++ b/landing/product-docs/de/guide/quickstart.md
@@ -0,0 +1,193 @@
+---
+title: Schnellstart – Agent Teams Dokumentation
+description: Kommen Sie in wenigen Minuten von einer frischen Installation zu einem laufenden KI-Agententeam. Behandelt Installation, Runtime-Auswahl, Team-Erstellung und das erste Code-Review.
+lang: de-DE
+---
+
+# Schnellstart
+
+Diese Anleitung bringt Sie in wenigen Minuten von einer frischen Installation zu einem laufenden Team.
+
+## Kürzester Weg
+
+```bash
+# 1. Install prerequisites
+node --version # need 20+
+pnpm --version # need 10+
+
+# 2. Clone and install
+git clone https://github.com/777genius/agent-teams-ai.git
+cd agent-teams-ai
+pnpm install
+
+# 3. Start the desktop app (default workflow)
+pnpm dev
+
+# 4. Verify a docs-only change
+pnpm --dir landing docs:build
+```
+
+Die Desktop-Electron-App (`pnpm dev`) ist das primäre Ziel — verwenden Sie für die normale Entwicklung nicht den Browser-/Web-Dev-Server. Dem Browser-Pfad fehlen Desktop-IPC, Terminal, Anbieter-Authentifizierung und das Verhalten des Team-Lebenszyklus.
+
+## Bevor Sie beginnen
+
+Sie benötigen:
+
+- **Einen Computer** mit macOS, Windows oder Linux
+- **(Empfohlen) Ein Git-getracktes Projekt** — Worktree-Isolierung und Diff-Review setzen Git voraus
+- **(Optional) Anbieterzugang** — die Runtime-Einrichtung erkennt verfügbare Anbieter über die UI, aber einige Pfade benötigen vorhandene Authentifizierung (Anthropic, OpenAI usw.)
+
+Falls ein Schritt unten nicht funktioniert, sehen Sie in der [Fehlerbehebungsanleitung](/de/guide/troubleshooting#team-does-not-launch) nach gängigen Lösungen.
+
+Konsultieren Sie für Projektkonventionen und Architekturhinweise diese maßgeblichen Dateien, bevor Sie Änderungen vornehmen:
+
+- [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) — Repo-Navigation und Architektur-Wegweiser
+- [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) — Arbeitskonventionen und Projektregeln
+- [Feature-Architekturstandard](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) — Struktur für neue Features
+- [Debugging-Runbook](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) — Diagnose von Launch und Teammitgliedern
+
+## 1. Aus dem Quellcode ausführen oder herunterladen
+
+**Laden Sie die paketierte App** für macOS, Windows oder Linux von der Download-Seite herunter – keine Voraussetzungen nötig. Beginnen Sie mit dem kostenlosen Modell ohne Authentifizierung oder verbinden Sie die Anbieter-Authentifizierung über die UI, wenn Sie mehr Modelle möchten.
+
+**Oder führen Sie aus dem Quellcode aus** für die Entwicklung:
+
+Erfordert Node.js 24.16.0 LTS und pnpm 10+. Unter macOS erfordern die offiziellen vorkompilierten Node.js-24-Binärdateien macOS 13.5+.
+
+```bash
+git clone https://github.com/777genius/agent-teams-ai.git
+cd agent-teams-ai
+pnpm install
+pnpm dev
+```
+
+`pnpm dev` startet die Desktop-Electron-App mit Hot Reload. Dies ist das standardmäßige Entwicklungsziel. Starten Sie für die normale Entwicklung keinen Browser-Web-Dev-Server — dem Browser-Pfad fehlen das vollständige Desktop-IPC, das Terminal, die Anbieter-Authentifizierung und das Verhalten des Team-Lebenszyklus.
+
+## 2. Ein Projekt öffnen oder erstellen
+
+Starten Sie die App und wählen Sie das Projektverzeichnis aus, in dem die Agenten arbeiten sollen. Agent Teams liest lokale Projektdateien sowie den Runtime-/Session-Status, damit die UI Aufgaben, Logs, Diffs und die Aktivität der Teammitglieder anzeigen kann.
+
+::: tip
+Wählen Sie für die beste Erfahrung ein Git-getracktes Projekt. Sowohl die Worktree-Isolierung als auch das Diff-basierte Review setzen Git voraus.
+:::
+
+Bevor Sie ein Team starten, prüfen Sie, ob das Projekt eine ausreichend saubere Ausgangsbasis hat:
+
+```bash
+git status --short
+```
+
+Sie brauchen keinen perfekt sauberen Baum, aber Sie sollten wissen, welche Änderungen von Ihnen stammen, bevor die Agenten mit dem Bearbeiten beginnen. Das macht Aufgaben-Diffs und das Review auf Hunk-Ebene deutlich vertrauenswürdiger.
+
+## 3. Einen Runtime-Pfad wählen
+
+Der Einrichtungsablauf erkennt installierte Runtimes auf Ihrem Rechner automatisch. Eine gängige erste Einrichtung ist:
+
+| Runtime | Gut für |
+| -------- | ----------------------------------------------- |
+| Claude | Claude-Code-Nutzer und vorhandenen Anthropic-Zugang |
+| Codex | Codex-native Workflows und OpenAI-Zugang |
+| OpenCode | Kostenloses Modell ohne Authentifizierung, Multimodell-Teams und viele Anbieter-Backends |
+
+::: info
+Gemini ist als unterstützter Anbieterpfad verfügbar. Siehe [Anbieter und Runtimes](/de/reference/providers-runtimes) für Authentifizierungsoptionen und den aktuellen Anbieterstatus.
+:::
+
+Siehe [Runtime-Einrichtung](/de/guide/runtime-setup) für eine detaillierte Konfiguration pro Anbieter.
+
+Um eine kostenpflichtige oder kontogebundene Runtime außerhalb der App zu überprüfen, prüfen Sie die Binärdatei und testen Sie die Authentifizierung:
+
+```bash
+# Check that the runtime is installed and on PATH
+command -v claude && claude --version
+command -v codex && codex --version
+command -v opencode && opencode --version
+```
+
+Wenn der Befehl fehlschlägt, beheben Sie zuerst die Runtime-Installation oder den `PATH`. Team-Prompts können eine fehlende Binärdatei oder eine fehlende Anbieter-Authentifizierung für Modelle, die sie benötigen, nicht umgehen.
+
+::: tip
+Wenn die Binärdatei gefunden wird, die App aber "not logged in" meldet, kann sich die Umgebung zwischen Ihrem Terminal und der App unterscheiden. Siehe das [Authentifizierungs-Diagnoselog](/de/guide/troubleshooting#auth-diagnostic-log), um sie zu vergleichen.
+:::
+
+## 4. Ihr erstes Team erstellen
+
+Erstellen Sie ein Team mit einem Lead und einem oder mehreren Spezialisten. Halten Sie das erste Team klein: ein Lead, ein Implementierungs-Agent und ein review-orientierter Agent reichen aus, um den Workflow zu validieren.
+
+Siehe [Team erstellen](/de/guide/create-team) für die empfohlene Struktur und Tipps.
+
+Bevorzugen Sie für den ersten Start eine Teamform wie diese:
+
+| Mitglied | Verantwortung | Hinweise |
+| --- | --- | --- |
+| Lead | Das Ziel in Aufgaben aufteilen und den Status koordinieren | Beim zuverlässigsten Anbieter belassen, den Sie haben |
+| Builder | Eng abgegrenzte Aufgaben umsetzen | Klare Datei- oder Feature-Grenzen vorgeben |
+| Reviewer | Abgeschlossene Arbeit überprüfen | Bitten Sie ihn, sich auf Regressionen und fehlende Tests zu konzentrieren |
+
+Vermeiden Sie es, mit fünf oder mehr Teammitgliedern zu beginnen. Mehr Agenten erhöhen Parallelität, Logs, Anbieternutzung und Konfliktrisiko, bevor Sie wissen, dass die Einrichtung gesund ist.
+
+## 5. Dem Lead ein konkretes Ziel geben
+
+Formulieren Sie das Ziel so, wie Sie einen Engineering-Lead briefen würden:
+
+```text
+Improve the onboarding flow. Split the work into tasks, keep changes small, and ask for review before broad refactors.
+```
+
+Gute erste Prompts enthalten konkreten Umfang, Sicherheitsgrenzen und Verifizierung:
+
+```text
+Improve the docs quickstart. Keep edits inside landing/product-docs. Add practical examples, preserve existing VitePress syntax, and run `pnpm --dir landing docs:build` before marking tasks done.
+```
+
+Vermeiden Sie für den ersten Lauf vage Prompts wie "make the app better". Der Lead kann große Ziele aufschlüsseln, aber bessere Eingaben führen zu kleineren Aufgaben und einem saubereren Review.
+
+::: tip
+Wenn das Team startet, aber keine Aufgaben erscheinen, prüfen Sie, ob der Lead Ihren Prompt erhalten hat. Siehe [Antworten der Agenten fehlen](/de/guide/troubleshooting#agent-replies-are-missing) für die Diagnose.
+:::
+
+Der Lead erstellt Aufgaben, weist Arbeit zu und koordiniert die Teammitglieder. Sie können den Fortschritt auf dem Kanban-Board verfolgen und jederzeit mit Kommentaren oder Direktnachrichten eingreifen.
+
+## 6. Ergebnisse überprüfen
+
+Öffnen Sie abgeschlossene oder review-bereite Aufgaben, prüfen Sie das Diff und akzeptieren, lehnen Sie ab oder kommentieren Sie einzelne Änderungen. Verwenden Sie die Aufgaben-Logs, wenn Sie verstehen müssen, warum ein Agent eine Entscheidung getroffen hat.
+
+Siehe [Code-Review](/de/guide/code-review) für den vollständigen Review-Workflow.
+
+Bevor Sie die erste Aufgabe genehmigen, prüfen Sie drei Dinge:
+
+1. Der Aufgabenkommentar erklärt, was sich geändert hat
+2. Die geänderten Dateien entsprechen dem Aufgabenumfang
+3. Das Verifizierungsergebnis ist im Aufgabenkommentar oder in den Logs sichtbar
+
+## Häufige Fallstricke
+
+| Symptom | Wahrscheinliche Ursache | Prüfen |
+| --- | --- | --- |
+| App erkennt eine Runtime nicht | Binärdatei nicht im `PATH`, oder App und Terminal sehen unterschiedliche Umgebungen | Führen Sie `command -v ` in einem Terminal aus und starten Sie die App dann mit derselben Terminal-Umgebung |
+| Team-Launch hängt | Fehlende Anbieter-Authentifizierung für ein kostenpflichtiges/kontogebundenes Modell, falscher Modell-String oder Runtime-Binärdatei nicht gefunden | Siehe [Fehlerbehebung](/de/guide/troubleshooting#team-does-not-launch) |
+| OpenCode-Lane bleibt auf `registered` hängen | Lane-Nachweis noch nicht committet, oder Modell-String-Diskrepanz | Untersuchen Sie `~/.claude/teams//.opencode-runtime/lanes/` |
+| Antworten der Agenten fehlen | Problem mit Runtime-Zustellung, Wiederholung, Parsing oder Aufgabenzuordnung | Öffnen Sie die Aufgaben-Logs und prüfen Sie das Zustellungs-Ledger |
+| Anbieter liefert 429er | Ratenlimit erreicht | Auf das Zurücksetzen warten oder Modell/Anbieter wechseln |
+
+## Nächste Schritte
+
+- [Team erstellen](/de/guide/create-team) — empfohlene Teamformen und das Schreiben von Briefings
+- [Runtime-Einrichtung](/de/guide/runtime-setup) — Anbieter-Authentifizierung und Modellauswahl
+- [Code-Review](/de/guide/code-review) — überprüfen, genehmigen oder Änderungen anfordern
+
+### Für Mitwirkende
+
+Wenn Sie Agent Teams oder diese Dokumentation ändern, beginnen Sie mit den maßgeblichen Projektdateien im Repo-Stammverzeichnis:
+
+- [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) — Arbeitskonventionen und Projektregeln
+- [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) — Navigationsebene für Architektur- und Implementierungshinweise
+- [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) — harte Implementierungs-Guardrails
+- [Feature-Architekturstandard](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) — Struktur für neue Features
+- [Debugging-Runbook für Agent-Teams](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) — Diagnose von Launch, Bootstrap und Teammitgliedern
+
+Um zu überprüfen, ob diese Dokumentationsseite korrekt baut:
+
+```bash
+pnpm --dir landing docs:build
+```
diff --git a/landing/product-docs/de/guide/runtime-setup.md b/landing/product-docs/de/guide/runtime-setup.md
new file mode 100644
index 00000000..e5b6e1c7
--- /dev/null
+++ b/landing/product-docs/de/guide/runtime-setup.md
@@ -0,0 +1,179 @@
+---
+title: Runtime-Einrichtung – Agent Teams Dokumentation
+description: Konfigurieren Sie die Runtimes Claude Code, Codex oder OpenCode. Behandelt Authentifizierung, Anbieterzugriff, Multimodell-Modus und Prüfungen vor dem Start.
+lang: de-DE
+---
+
+# Runtime-Einrichtung
+
+Agent Teams ist eine Koordinationsebene. Die eigentliche Modellarbeit läuft über unterstützte lokale Runtimes und Anbieter.
+
+::: tip Schnellstart - die erste Runtime auswählen
+| Wenn Sie ... | Beginnen Sie mit |
+| --- | --- |
+| Bereits Claude Code nutzen oder Zugriff auf Anthropic haben | **Claude** - vertraute Authentifizierung, minimale Einrichtung |
+| Codex oder OpenAI-basierte Workflows nutzen | **Codex** - native Integration |
+| Agent Teams ohne Registrierung oder API-Schlüssel ausprobieren möchten | **OpenCode** - nutzen Sie das enthaltene kostenlose Modell ohne Authentifizierung |
+| Multimodell-Routing oder breite Anbieterabdeckung möchten | **OpenCode** - am flexibelsten, eine Konfiguration für viele Backends |
+| Nicht sicher sind, welche Runtime passt | **OpenCode** - deckt die meisten Anbieteroptionen ab und lässt Sie später wechseln |
+
+Beginnen Sie mit einer Runtime und einem Teammitglied. Bestätigen Sie, dass ein Start funktioniert, bevor Sie auf Multimodell erweitern.
+:::
+
+## Voraussetzungen
+
+Stellen Sie vor dem Start eines Teams sicher, dass:
+
+- Die Runtime-Binärdatei installiert ist und sich in Ihrem `PATH` befindet.
+- Ihr Anbieterkonto aktiven Zugriff auf das Modell hat, das Sie verwenden möchten, es sei denn, Sie beginnen mit dem enthaltenen kostenlosen OpenCode-Modell ohne Authentifizierung.
+- Der Projektpfad existiert und lesbar ist.
+- Die App und Ihr Terminal dieselbe Home-/Konfigurationsumgebung verwenden, wenn Sie die Authentifizierung manuell testen.
+
+::: tip
+Beginnen Sie mit einem einzelnen Teammitglied und einem Anbieter. Bestätigen Sie, dass ein Start funktioniert, bevor Sie Multimodell-Lanes hinzufügen.
+:::
+
+Schnelle Terminal-Prüfungen:
+
+```bash
+command -v claude
+command -v codex
+command -v opencode
+```
+
+Führen Sie den Befehl für die Runtime aus, die Sie verwenden möchten. Wenn nichts ausgegeben wird, installieren Sie die Runtime oder korrigieren Sie den `PATH`, bevor Sie ein Team starten.
+
+## Unterstützte Pfade
+
+| Pfad | Standard-CLI | Typische Anbieter | Verwenden, wenn |
+| --- | --- | --- | --- |
+| Claude | `claude` | Anthropic | Sie bereits Claude Code oder Anthropic-gestützte Workflows nutzen |
+| Codex | `codex` | OpenAI | Sie eine Codex-native Runtime-Integration möchten |
+| OpenCode | `opencode` | OpenRouter und viele Backends | Sie Multimodell-Routing und breite Anbieterabdeckung möchten |
+
+Die App erkennt unterstützte Runtimes und leitet die Einrichtung nach Möglichkeit über die Oberfläche an.
+
+Gemini ist als unterstützter Anbieterpfad mit Google ADC (`gcloud auth`), Gemini CLI OAuth und API-Schlüssel-Authentifizierung verfügbar. Konfigurieren Sie es über die Oberfläche zur Runtime-Einrichtung, wenn das Gemini-Backend erkannt wird.
+
+## Anbieterzugriff
+
+Agent Teams hat keine eigene kostenpflichtige Stufe. Sie können mit dem enthaltenen kostenlosen OpenCode-Modell ohne Authentifizierung beginnen - keine Registrierung, keine API-Schlüssel, keine Kreditkarte. Für zusätzliche Modelle bringen Sie den Anbieterzugriff mit, den Sie bereits haben: Abonnements, lokale Runtime-Authentifizierung oder API-Schlüssel, je nach gewähltem Pfad.
+
+- Die Pfade **Claude** und **Codex** stützen sich auf ihre jeweiligen CLI-Authentifizierungstools.
+- **OpenCode** kann zunächst das enthaltene kostenlose Modell ohne Authentifizierung ausführen. Andere OpenCode-Modelle benötigen möglicherweise anbieterspezifische API-Schlüssel in einer Konfigurationsdatei (z. B. `openrouter`, `openai`, `anthropic`).
+
+## Authentifizierungskonfiguration
+
+### Claude Code
+
+Führen Sie den standardmäßigen Authentifizierungsablauf in einem Terminal aus:
+
+```bash
+claude login
+```
+
+Überprüfen Sie dann, ob die CLI erreichbar ist:
+
+```bash
+claude --version
+```
+
+Wenn die paketierte App "nicht angemeldet" meldet, während Ihr Terminal funktioniert, vergleichen Sie die von der App gesehenen `$HOME`- und `PATH`-Werte mit dem Terminal, das Sie für die Anmeldung verwendet haben. Das in der [Fehlerbehebung](/de/guide/troubleshooting#auth-diagnostic-log) beschriebene Authentifizierungs-Diagnoseprotokoll ist der beste Ausgangspunkt.
+
+### Codex
+
+Installieren und authentifizieren Sie sich über den CLI-Ablauf von OpenAI:
+
+```bash
+codex login
+```
+
+Überprüfen Sie dann, ob die Runtime erreichbar ist:
+
+```bash
+codex --version
+```
+
+Codex-native Starts verwenden den Codex-Kontostatus und Modellkatalogdaten, sofern verfügbar. Wenn ein Modell in der Oberfläche fehlt, aktualisieren Sie den Anbieterstatus, bevor Sie Team-Prompts bearbeiten.
+
+### OpenCode
+
+Um das enthaltene kostenlose Modell ohne Authentifizierung zu verwenden, wählen Sie es in der App aus und starten Sie ohne Anbieterregistrierung. Um andere OpenCode-Backends zu verwenden, erstellen oder bearbeiten Sie `~/.opencode/config.json` (oder den entsprechenden Pfad auf Ihrer Plattform) mit dem gewünschten Anbieterschlüssel:
+
+```json
+{
+ "providers": {
+ "openrouter": {
+ "apiKey": "sk-or-..."
+ }
+ }
+}
+```
+
+Verwenden Sie den genauen Anbieternamen, den OpenCode erwartet. Wenn Sie einen benutzerdefinierten Anbieternamen festlegen, überprüfen Sie ihn anhand der Anbieter-ID, die Sie im Modell-String verwenden (zum Beispiel würde `openrouter/moonshotai/kimi-k2.6` den `openrouter`-Block verwenden).
+
+Beispiele für Modell-Strings:
+
+| Modell-String | Anbieterblock, der vorhanden sein muss |
+| --- | --- |
+| `openrouter/moonshotai/kimi-k2.6` | `openrouter` |
+| `openai/gpt-5.4` | `openai` |
+| `anthropic/claude-sonnet-4-6` | `anthropic` |
+
+Wenn OpenCode startet, ein Teammitglied aber nie zustellbar wird, prüfen Sie die Lane-Belege, bevor Sie annehmen, dass das Modell den Prompt ignoriert hat. Siehe [Fehlerbehebung](/de/guide/troubleshooting#opencode-registered-but-bootstrap-unconfirmed).
+
+### Gemini
+
+Gemini unterstützt drei Authentifizierungsmethoden:
+
+- **Google ADC** — führen Sie `gcloud auth application-default login` aus, um sich über Google Application Default Credentials zu authentifizieren.
+- **Gemini CLI** — führen Sie `gemini login` aus, wenn die Gemini CLI installiert ist.
+- **API-Schlüssel** — setzen Sie `GEMINI_API_KEY` in Ihrer Umgebung oder konfigurieren Sie ihn über die Oberfläche „Manage Providers“ der App.
+
+Die App erkennt automatisch, welche Authentifizierungsmethode verfügbar ist, und zeigt den Gemini-Anbieter in der Oberfläche zur Runtime-Einrichtung und Teamerstellung an, wenn das Backend erreichbar ist.
+
+## Multimodell-Modus
+
+Der Multimodell-Modus kann Arbeit über viele Anbieter-Backends mittels OpenCode-kompatibler Konfiguration routen. Verwenden Sie ihn, wenn Sie Anbieterflexibilität benötigen oder möchten, dass Teammitglieder unterschiedliche Modell-Lanes nutzen.
+
+::: info Modell-Lanes
+Jedes Teammitglied kann ein anderes Paar aus `providerId` + `model` verwenden. Erweitern Sie in der Oberfläche zur Teambearbeitung die Mitgliedsoptionen, um die globalen Standardwerte zu überschreiben.
+:::
+
+Ein konservatives Multimodell-Setup:
+
+| Rolle | Anbieter | Warum |
+| --- | --- | --- |
+| Lead | Claude oder Codex | Halten Sie die Koordination beim Anbieter, dem Sie am meisten vertrauen |
+| Builder | OpenCode | Nutzen Sie breites Modell-Routing für Implementierungsarbeit |
+| Reviewer | Claude, Codex oder ein zweites OpenCode-Modell | Trennen Sie das Review-Urteil von der Builder-Lane |
+
+Vermeiden Sie es, beim ersten Start viele unbekannte Anbieter zu mischen. Bestätigen Sie eine kleine Aufgabe pro Lane, bevor Sie umfangreiche Arbeit zuweisen.
+
+## Checkliste vor dem Start
+
+Vor dem Start eines Teams:
+
+1. Die ausgewählte Runtime ist installiert
+2. Die Runtime-Binärdatei befindet sich im `PATH` der Umgebung
+3. Die Anbieter-Authentifizierung ist für das gewählte Backend konfiguriert
+4. Der Anbieter hat Zugriff auf den genauen Modell-String, den Sie angeben
+5. Der Projektpfad existiert und ist lesbar
+
+## Wann Runtime-Pfade gewechselt werden sollten
+
+Wechseln Sie, wenn der aktuelle Pfad durch Modellverfügbarkeit, Ratenbegrenzungen, Anbieterfähigkeiten oder Anforderungen an Teamrollen blockiert ist. Behalten Sie denselben Projekt- und Team-Workflow bei, validieren Sie aber nach dem Wechsel eine kleine Aufgabe.
+
+::: warning Behandeln Sie Einrichtungsfehler als Einrichtungsprobleme
+Wenn die Authentifizierung fehlschlägt, ein Modellname abgelehnt wird oder die Runtime-Binärdatei nicht gefunden werden kann, beheben Sie zuerst die Einrichtung. Ändern Sie keine Team-Prompts oder Projektcode, um ein Problem mit der Runtime-Konfiguration zu umgehen.
+:::
+
+Verwenden Sie diese Entscheidungstabelle:
+
+| Symptom | Bessere erste Maßnahme |
+| --- | --- |
+| Binärdatei nicht gefunden | Installation oder `PATH` korrigieren |
+| Anmeldung funktioniert im Terminal, aber nicht in der App | Electron-Authentifizierungs-Diagnoseprotokoll und Umgebung prüfen |
+| Modell abgelehnt | Genaue Modell-ID in der Anbieter-Runtime überprüfen |
+| Wiederholte 429er | Parallelität senken oder Modell/Anbieter wechseln |
+| OpenCode-Lane hängt | Lane-Manifest und `opencode-sessions.json` prüfen |
diff --git a/landing/product-docs/de/guide/team-brief-examples.md b/landing/product-docs/de/guide/team-brief-examples.md
new file mode 100644
index 00000000..1f1b40a0
--- /dev/null
+++ b/landing/product-docs/de/guide/team-brief-examples.md
@@ -0,0 +1,131 @@
+---
+title: Team-Briefing-Beispiele – Agent Teams Dokumentation
+description: Praktische Team-Briefing-Vorlagen für kleine Korrekturen, Dokumentationsarbeit, Implementierungsaufgaben, Reviews und Hochrisikobereiche.
+lang: de-DE
+---
+
+# Team-Briefing-Beispiele
+
+Ein gutes Team-Briefing gibt dem Lead genug Struktur, um kleine Aufgaben zu erstellen, ohne jedes Implementierungsdetail im Voraus festzulegen.
+
+Verwenden Sie folgendes Schema:
+
+```text
+Outcome:
+Scope:
+Boundaries:
+Coordination:
+Verification:
+Review:
+```
+
+## Minimales Briefing
+
+Für kleine, risikoarme Arbeiten verwenden.
+
+```text
+Outcome: Improve the quickstart so a new user can launch one team successfully.
+Scope: Keep edits inside landing/product-docs.
+Boundaries: Do not rewrite the whole docs structure.
+Coordination: Create one or two tasks, keep comments on the task.
+Verification: Run `pnpm --dir landing docs:build`.
+Review: Summarize changed pages and any remaining gaps.
+```
+
+## Implementierungs-Briefing
+
+Verwenden, wenn Codeänderungen einen Funktionsbereich betreffen.
+
+```text
+Outcome: Add a focused improvement to task comment filtering.
+Scope: Work inside the task/comment feature files unless a shared helper is clearly needed.
+Boundaries: Do not change task storage format or review state semantics.
+Coordination: Split parser, UI, and tests into separate tasks if they can be reviewed independently.
+Verification: Run the focused unit tests first, then the feature typecheck if touched.
+Review: Call out parsing edge cases and any behavior that affects existing task comments.
+```
+
+## Dokumentations-Briefing
+
+Für Dokumentations- und Anleitungsarbeit verwenden.
+
+```text
+Outcome: Draft practical workflow guides from the docs audit.
+Scope: Add concise VitePress pages under landing/product-docs/guide.
+Boundaries: Avoid moving existing navigation hubs owned by other tasks.
+Coordination: Check related docs tasks before editing nav.
+Verification: Run `pnpm --dir landing docs:build`.
+Review: Include links added to sidebar and any pages intentionally left as drafts.
+```
+
+## Review-intensives Briefing
+
+Für riskante Bereiche wie IPC, Anbieter-Authentifizierung, Persistenz, Git oder Logik des Aufgaben-Lebenszyklus verwenden.
+
+```text
+Outcome: Fix the launch failure without changing successful launch behavior.
+Scope: Start from the newest launch-failure artifact and the affected runtime adapter.
+Boundaries: Do not change provider prompts until setup and runtime evidence are inspected.
+Coordination: Make one diagnostic task and one fix task if the cause is confirmed.
+Verification: Run focused tests and one desktop smoke check when practical.
+Review: Lead must inspect the diff before approval.
+```
+
+## Briefing für gemischte Anbieter
+
+Verwenden, wenn Teammitglieder unterschiedliche Anbieter-/Modell-Lanes nutzen.
+
+```text
+Outcome: Implement and review a small feature using separate builder and reviewer lanes.
+Scope: Builder edits the feature. Reviewer inspects only the task diff and tests.
+Boundaries: Do not switch model ids mid-task unless launch fails before work begins.
+Coordination: Builder posts result comment first. Reviewer posts findings as task comments.
+Verification: Builder runs focused tests. Reviewer checks failure output and changed scope.
+Review: Lead approves only after reviewer comments are resolved.
+```
+
+## Agent-Blöcke in Briefings
+
+Agent-Blöcke sind versteckter, ausschließlich für Agenten bestimmter Text, der in Markierungen wie `... ` eingeschlossen ist. Die App entfernt sie aus der normalen Anzeige, hält sie aber für die Agentenkoordination verfügbar. Verwenden Sie sie, wenn das Briefing den Agenten etwas mitteilen muss, das für einen menschlichen Leser nur Rauschen wäre.
+
+Beispiel – ein Briefing, das dem Lead mitteilt, wie die Arbeit aufgeteilt werden soll, ohne die Koordinationsanweisungen dem Benutzer preiszugeben:
+
+```text
+Outcome: Add a dark mode toggle to the application settings.
+Scope: Settings UI, theme context, and CSS variables.
+Boundaries: Do not change existing light theme values or provider auth screens.
+
+
+Split this into three tasks: (1) theme context and CSS vars, (2) toggle component and settings wiring, (3) dark mode preview in existing docs screenshots if practical.
+
+```
+
+Der Block hält das an Menschen gerichtete Briefing übersichtlich und gibt dem Lead gleichzeitig eine strukturierte Anleitung zur Aufgabenaufteilung.
+
+## Was zu vermeiden ist
+
+| Schwaches Briefing | Bessere Alternative |
+| --- | --- |
+| „Verbessere die App" | Benennen Sie den Workflow, die Dateien und die Erfolgsprüfung |
+| „Behebe alle Docs" | Wählen Sie eine Anleitungsgruppe und einen Build-Befehl |
+| „Nutze das beste Modell" | Benennen Sie Anbieter-/Modellauswahl oder lassen Sie die App-Standards gelten |
+| „Refaktoriere nach Bedarf" | Geben Sie an, welche Module geändert werden dürfen |
+| „Mach es produktionsreif" | Definieren Sie Review, Tests und Rollout-Prüfungen |
+
+## Vor dem Start
+
+Prüfen Sie diese Punkte, bevor Sie das Team starten:
+
+1. Das Briefing benennt ein konkretes Ergebnis.
+2. Risikogrenzen sind explizit.
+3. Der Lead kann die Arbeit in überprüfbare Aufgaben aufteilen.
+4. Verifizierungsbefehle sind enthalten, sofern bekannt.
+5. Sensible Bereiche erfordern eine Überprüfung vor der Freigabe.
+
+Wenn das Briefing noch zu breit ist, starten Sie zunächst einen Solo-Agenten oder ein kleines Team und bitten Sie es, einen Aufgabenplan statt einer Implementierung zu erstellen.
+
+## Verwandte Anleitungen
+
+- [Team erstellen](/de/guide/create-team)
+- [MCP-Integration](/de/guide/mcp-integration)
+- [Git- und Worktree-Strategie](/de/guide/git-worktree-strategy)
diff --git a/landing/product-docs/de/guide/troubleshooting.md b/landing/product-docs/de/guide/troubleshooting.md
new file mode 100644
index 00000000..43db57cc
--- /dev/null
+++ b/landing/product-docs/de/guide/troubleshooting.md
@@ -0,0 +1,310 @@
+---
+title: Fehlerbehebung – Agent Teams Dokumentation
+description: Beheben Sie Probleme beim Team-Start, fehlende Agent-Antworten, Ratenbegrenzungen, CLI-Authentifizierungsprobleme und Hänger beim Lane-Bootstrap mit lokalen Diagnosen.
+lang: de-DE
+---
+
+# Fehlerbehebung
+
+Die meisten Team-Probleme fallen in eine von vier Kategorien: Runtime-Einrichtung, Start-Bestätigung, Aufgaben-Parsing und Anbieterlimits.
+
+## Schnelle Beweissicherung
+
+Definieren Sie bei jedem Problem im Team-Lebenszyklus zuerst diese Variablen und verwenden Sie dieselbe Shell weiter:
+
+```bash
+TEAM=""
+TEAM_DIR="$HOME/.claude/teams/$TEAM"
+TASKS_DIR="$HOME/.claude/tasks/$TEAM"
+```
+
+Bestätigen Sie dann, dass die erwarteten Dateien existieren, bevor Sie den UI-Zustand interpretieren:
+
+```bash
+test -d "$TEAM_DIR" && find "$TEAM_DIR" -maxdepth 2 -type f | sort | sed -n '1,80p'
+test -d "$TASKS_DIR" && find "$TASKS_DIR" -maxdepth 1 -name '*.json' | sort | sed -n '1,40p'
+```
+
+::: warning Beweise zuerst
+Beheben Sie Prompts, Anbietereinstellungen oder Prozessbereinigungen nicht allein auf Basis eines hängenden Badges. Korrelieren Sie zuerst die UI mit den persistierten Dateien, Start-Artefakten und Runtime-Beweisen.
+:::
+
+## Team startet nicht
+
+Prüfen Sie jeden Punkt der Reihe nach:
+
+1. **Runtime verfügbar** — die ausgewählte CLI (`claude`, `codex`, `opencode`) ist installiert
+2. **PATH erreichbar** — die Binärdatei ist im `PATH` der Umgebung verfügbar
+3. **Modellzugriff** — der Anbieter hat Zugriff auf die angeforderte Modellzeichenfolge (besonders bei OpenCode sind exakte Anbieter-/Modellnamen wichtig)
+4. **Projektpfad** — das Projektverzeichnis existiert und ist lesbar
+5. **Netzwerk / VPN** — manche Anbieter verwerfen Datenverkehr, wenn ein VPN aktiv ist
+
+::: tip
+Führen Sie die Runtime-Binärdatei in einem Terminal aus, um `PATH` und Authentifizierung zu überprüfen. Beispiel: `claude --version` oder `opencode --version`.
+:::
+
+### OpenCode: registriert, aber Bootstrap unbestätigt
+
+Wenn OpenCode `registered` anzeigt, der Bootstrap aber unbestätigt ist, untersuchen Sie zuerst die Artefakte, bevor Sie Team-Prompts ändern.
+
+Details für Mitwirkende/zur Fehlersuche finden Sie unter [Architektur für Mitwirkende](/de/reference/contributor-architecture), die auf das maßgebliche Debugging-Runbook für Agent-Teams verweist.
+
+Sehen Sie sich das neueste Artefakt eines fehlgeschlagenen Starts an:
+
+```bash
+LATEST_FAILURE="$TEAM_DIR/launch-failure-artifacts/latest.json"
+MANIFEST_PATH="$(jq -r '.manifestPath' "$LATEST_FAILURE")"
+jq '.classification, .bootstrapTransportBreadcrumb, .memberSpawnStatuses' "$MANIFEST_PATH"
+```
+
+`latest.json` verweist auf das neueste gepackte Artefaktverzeichnis und dessen `manifest.json`. Das Manifest enthält:
+
+- `classification` — warum der Start als Fehlschlag gewertet wurde
+- `bootstrapTransportBreadcrumb` — verwendeter Zustellungspfad
+- Spawn-Status der Mitglieder
+- Redigierte Logs und Traces
+
+Prüfen Sie auch das Lane-Manifest:
+
+```bash
+jq '.lanes' "$TEAM_DIR/.opencode-runtime/lanes.json" 2>/dev/null
+find "$TEAM_DIR/.opencode-runtime/lanes" -maxdepth 2 -name manifest.json -print -exec jq '.activeRunId, .entries' {} \; 2>/dev/null
+```
+
+::: tip Nicht aus der UI raten
+Korrelieren Sie UI-Diagnosen immer mit persistierten Dateien (`launch-state.json`, `bootstrap-journal.jsonl`) und runtime-spezifischen Beweisen.
+:::
+
+## Allgemeine Diagnose
+
+Beginnen Sie mit den persistierten Dateien auf dem Datenträger statt allein mit der UI.
+
+### Team-Wurzelverzeichnis
+
+```bash
+printf '%s\n' "$TEAM_DIR"
+```
+
+Wichtige Dateien und was sie Ihnen verraten:
+
+- `launch-state.json` — Start-/Lebendigkeitszustand der Mitglieder (`.teamLaunchState`, `.summary`, `.members`)
+- `bootstrap-journal.jsonl` — geordnete Bootstrap-Ereignisse von CLI/Runtime (`tail -80`)
+- `bootstrap-state.json` — Zusammenfassung der Bootstrap-Phase
+- `config.json` — Anbieter-, Modell- und Projektkonfiguration
+- `inboxes/*.json` und `sentMessages.json` — Zustand der Nachrichtenzustellung
+
+```bash
+jq '.teamLaunchState, .summary, .members' "$TEAM_DIR/launch-state.json"
+tail -80 "$TEAM_DIR/bootstrap-journal.jsonl" 2>/dev/null
+```
+
+### OpenCode-Runtime-Beweise
+
+Bei OpenCode-Teammitgliedern liegt der Sitzungsbeweis im Lane-Runtime-Speicher:
+
+- `.opencode-runtime/lanes.json` — Lane-Index mit Zustand
+- `.opencode-runtime/lanes//manifest.json` — `activeRunId` und Beweiseinträge
+- `.opencode-runtime/lanes//opencode-sessions.json` — committete Sitzungsdatensätze
+
+Erwarteter gesunder Zustand: Lane-Zustand `active`, das Manifest hat eine `activeRunId` mit mindestens einem Beweiseintrag, das Mitglied hat `bootstrapConfirmed: true`.
+
+```bash
+jq '.lanes' "$TEAM_DIR/.opencode-runtime/lanes.json" 2>/dev/null
+find "$TEAM_DIR/.opencode-runtime" -maxdepth 3 -type f | sort
+```
+
+### Artefakte fehlgeschlagener Starts
+
+Wenn ein Start als Fehlschlag markiert ist, untersuchen Sie `latest.json`:
+
+```bash
+LATEST_FAILURE="$TEAM_DIR/launch-failure-artifacts/latest.json"
+jq '.' "$LATEST_FAILURE"
+jq '.' "$(jq -r '.manifestPath' "$LATEST_FAILURE")"
+```
+
+Das Manifest enthält:
+- `classification` — warum der Start als Fehlschlag gewertet wurde
+- `bootstrapTransportBreadcrumb` — verwendeter Zustellungspfad
+- Spawn-Status der Mitglieder und redigierte Logs/Traces
+
+## Agent-Antworten fehlen
+
+Öffnen Sie Aufgabenprotokolle und Teammitglied-Nachrichten. Fehlende Antworten kommen häufig von:
+
+- **Erneuter Zustellversuch der Runtime** — der Agent hat möglicherweise geantwortet, aber die Nachricht wurde nicht an die App zugestellt. Prüfen Sie das Zustellungsregister.
+- **Parsing oder Filterung** — die Agent-Ausgabe enthielt nicht die erwarteten Marker oder Aufgabenreferenzen.
+- **Aufgabenzuordnung** — die Arbeit fand während der Sitzung statt, wurde aber nicht mit der Aufgabe verknüpft, weil die korrekte Aufgaben-ID in der Ausgabe fehlte.
+
+::: warning Schweigen nicht mit Ignorieren gleichsetzen
+Gehen Sie nicht davon aus, dass das Modell die Nachricht ignoriert hat, bevor Logs dies bestätigen.
+:::
+
+Nutzen Sie den persistierten Nachrichtenzustand, um „nicht gesendet" von „gesendet, aber nicht gerendert" zu unterscheiden:
+
+```bash
+jq '.' "$TEAM_DIR/inboxes/user.json" 2>/dev/null
+jq '.' "$TEAM_DIR/sentMessages.json" 2>/dev/null
+```
+
+Prüfen Sie `from`, `to`, `messageId`, `relayOfMessageId` und `taskRefs`. Untersuchen Sie bei OpenCode-Teammitgliedern auch die Runtime-Zustellungsbeweise, bevor Sie annehmen, dass das Modell den Prompt ignoriert hat.
+
+## Aufgaben sind nicht mit Änderungen verknüpft
+
+Verwenden Sie aufgabenspezifische Logs und Code-Review-Links. Wenn ein Diff losgelöst erscheint:
+
+- Prüfen Sie, ob die Aufgaben-ID oder Aufgabenreferenz in der Agent-Ausgabe enthalten war.
+- Verifizieren Sie, dass der Agent `task_add_comment` aufgerufen hat, bevor er Änderungen vorgenommen hat.
+- Stellen Sie sicher, dass der Agent `task_start` aufgerufen hat, damit das Board weiß, dass die Arbeit begonnen hat.
+
+Bei OpenCode-Teammitgliedern liegt der maßgebliche Beweis dafür, dass eine Sitzung zu einer Aufgabe gehört, in `opencode-sessions.json` und dem Eintrag im Lane-Manifest, nicht allein im UI-Nachrichtenstrom.
+
+### Aufgabenprotokoll-Triage
+
+Wenn ein Aufgabenprotokoll unvollständig erscheint, suchen Sie nach der Aufgaben-ID über Aufgaben-JSON, Inboxes und Bootstrap-Ereignisse hinweg:
+
+```bash
+TASK=""
+rg -n "$TASK" "$TASKS_DIR" "$TEAM_DIR/inboxes" "$TEAM_DIR/bootstrap-journal.jsonl" 2>/dev/null
+```
+
+Interpretieren Sie das Ergebnis sorgfältig:
+
+| Beweis | Was er belegt | Was er nicht belegt |
+| --- | --- | --- |
+| Nachricht zugestellt | Die App hat einen Prompt geschrieben oder weitergeleitet | Der Agent hat Fortschritt erzielt |
+| Aufgabenkommentar | Der Agent hat board-sichtbaren Text gepostet | Der Kommentar ist bedeutsamer Fortschritt |
+| Native Tool-Zeilen | Die Runtime hat in einer Sitzung gearbeitet | Die Arbeit gehört zu dieser Aufgabe, sofern die Zuordnung nicht passt |
+| Eintrag im Änderungsregister | Die App hat Dateiänderungen aufgezeichnet | Die Implementierung ist korrekt |
+
+Bei OpenCode enthält ein gesundes Aufgabenprotokoll üblicherweise native Runtime-Zeilen wie `read`, `bash`, `edit` oder `write` plus Agent-Teams-MCP-Zeilen. Wenn Sie nur `agent-teams_*`-Zeilen sehen, bestätigen Sie die Aufgabenzuordnung und Sitzungsgrenzen, bevor Sie die Log-Übereinstimmung erweitern.
+
+## Ratenbegrenzungen
+
+Wenn ein Anbieter eine bekannte Reset-Zeit meldet, kann Agent Teams den Lead anstoßen, nach der Abkühlphase fortzufahren. Ist die Reset-Zeit unbekannt, warten Sie oder wechseln Sie den Anbieter-/Runtime-Pfad.
+
+| Anbieterverhalten | Empfohlene Maßnahme |
+| --- | --- |
+| Bekannte Reset-Zeit angezeigt | Auf Abkühlphase warten und fortfahren |
+| Keine Reset-Zeit angezeigt | Anbieter oder Runtime-Pfad wechseln |
+| Wiederholte 429er | Nebenläufigkeit senken oder eine andere Modell-Lane verwenden |
+
+## CLI-Authentifizierungsprobleme
+
+### `claude login` bleibt nicht erhalten
+
+Wenn die CLI in einem Terminal authentifiziert ist, die App aber meldet, dass dies nicht der Fall ist, verifizieren Sie, dass die Authentifizierung im erwarteten Konfigurationspfad gespeichert ist und dass der App-Prozess dasselbe `$HOME` sieht.
+
+### OpenCode-Anbieterschlüssel abgelehnt
+
+- Überprüfen Sie noch einmal, ob der Anbietername in `config.json` mit dem Anbieter-Präfix in der Modellzeichenfolge übereinstimmt
+- Stellen Sie sicher, dass der Schlüssel nicht abgelaufen oder im Anbieter-Dashboard widerrufen ist
+
+### Authentifizierungs-Diagnoselog
+
+Jeder Aufruf von `CliInstallerService.getStatus()` hängt eine Zeile an `claude-cli-auth-diag.ndjson` im Electron-Log-Ordner an (auf macOS üblicherweise `~/Library/Logs//`). Wenn die Datei **512 KiB** überschreitet, wird sie vor dem nächsten Schreibvorgang auf leer gekürzt.
+
+Prüfen Sie diese Datei, wenn Sie in der gepackten App „Not logged in" oder Authentifizierungsfehler sehen.
+
+## Lane-Bootstrap hängt
+
+Für sekundäre OpenCode-Lanes:
+
+- Eine fehlende `inboxes/.json` ist nicht automatisch ein Fehler. OpenCode-Lanes müssen nicht zuerst per Primär-Inbox erstellt werden, bevor sie starten.
+- Wenn die UI anzeigt, dass das Team noch startet, während primäre Mitglieder bereits nutzbar sind, wartet „all teammates joined" auf die sekundären Lanes.
+- Wenn `Prepared communication channels for X/Y members` hängt, prüfen Sie, ob `Y` fälschlicherweise sekundäre OpenCode-Mitglieder einschließt.
+
+### Leere Einträge im Lane-Manifest
+
+Wenn die Bridge meldet, dass der Bootstrap erfolgreich war, aber `manifest.json` `entries: []` anzeigt, liegt das Problem beim **Commit der Beweise**, nicht am Modellverhalten. Das Mitglied darf erst als zustellbar gelten, wenn `opencode-sessions.json` und sein Manifest-Eintrag existieren.
+
+## Häufige Mitgliedszustände
+
+| Zustand | Bedeutung |
+| --- | --- |
+| `confirmed_alive` + `bootstrapConfirmed` | Gesund und bereit |
+| `registered` / `runtime_pending_bootstrap` | Prozess oder Lane existiert, aber der Bootstrap-Beweis wurde noch nicht committet |
+| `failed_to_start` + `runtime_process` | Prozess existiert, aber das Start-Gate ist fehlgeschlagen. Diagnose prüfen |
+| `failed_to_start` + `stale_metadata` | Gespeicherte pid/Sitzung ist veraltet oder tot |
+
+::: warning
+`member_briefing` allein ist KEIN Runtime-Beweis. Bei OpenCode ist der maßgebliche Beweis committeter Runtime-Beweis wie `opencode-sessions.json` und der Manifest-Eintrag.
+:::
+
+## Runtime-Debug-Modus
+
+Für lokales Debugging können Sie Teammitglieder dazu zwingen, in tmux-Panes zu laufen:
+
+```bash
+# Launch from a terminal
+CLAUDE_TEAM_TEAMMATE_MODE=tmux pnpm dev
+
+# Or add to custom CLI args
+--teammate-mode tmux
+```
+
+Verwenden Sie dies, um interaktives CLI-Verhalten zu untersuchen. Betrachten Sie dies nicht als vollständig gleichwertig mit dem Prozess-Backend.
+
+## Rauchtests
+
+Verwenden Sie die Desktop-Electron-App für die normale Validierung. Der Browser-/Web-Dev-Modus enthält nicht die vollständige Desktop-Runtime, IPC, Anbieter-Authentifizierung, das Terminal oder das Verhalten des Team-Lebenszyklus.
+
+### Nur Dokumentationsänderungen
+
+Vom Repository-Wurzelverzeichnis aus:
+
+```bash
+pnpm --dir landing docs:build
+git diff --check -- landing/product-docs
+```
+
+### Änderungen am Team-Lebenszyklus
+
+Beginnen Sie eng begrenzt und erweitern Sie dann:
+
+```bash
+pnpm test -- test/main/services/team/TeamProvisioningService.test.ts
+pnpm test -- test/main/services/team/TeamAgentLaunchMatrix.safe-e2e.test.ts
+pnpm typecheck
+git diff --check
+```
+
+### Live-Team-Rauchtest
+
+Verwenden Sie ein kleines Team und ein Git-verfolgtes Wegwerfprojekt:
+
+1. Starten Sie die Desktop-App mit `pnpm dev`.
+2. Erstellen Sie einen Lead plus einen Builder.
+3. Bitten Sie um eine winzige Änderung mit einem expliziten Verifizierungsbefehl.
+4. Bestätigen Sie, dass die Aufgabe von `pending` -> `in_progress` -> `completed` wandert.
+5. Öffnen Sie Aufgabenprotokolle und verifizieren Sie, dass Tool-Zeilen, Aufgabenkommentare und Dateiänderungen übereinstimmen.
+6. Stoppen Sie beim Aufräumen nur das zum Rauchtest gehörende Team / die zugehörigen Prozesse.
+
+::: warning Nur eng begrenztes Aufräumen
+Beenden Sie beim Aufräumen eines Rauchtests nicht alle OpenCode-Hosts, nicht zusammenhängende tmux-Panes oder Benutzer-Teams.
+:::
+
+## Sicheres Aufräumen
+
+Beim Aufräumen veralteter Prozesse:
+
+1. Identifizieren Sie die pid und bestätigen Sie, dass sie zum aktuellen Team / zur aktuellen Lane gehört.
+2. Stoppen Sie nur Prozesse, die explizit zu einem Rauchtest oder zu dem Start gehören, den Sie debuggen.
+3. **Beenden Sie nicht** alle OpenCode- oder gemeinsam genutzten Host-Prozesse als Abkürzung.
+
+## Wann Beweise zu sammeln sind
+
+Bevor Sie um Hilfe bitten, sammeln Sie:
+
+- Aufgaben-ID (kurz oder vollständig)
+- Teamname
+- Runtime-Pfad (`claude`, `codex` oder `opencode`)
+- Auszug aus dem Start-Log (aus `latest.json` oder `bootstrap-journal.jsonl`)
+- Anbieter-/Modellzeichenfolge
+- Genaues Zeitfenster, in dem das Problem aufgetreten ist
+
+Diese Daten reichen üblicherweise aus, um Probleme im Start- und Aufgabenlebenszyklus zu debuggen.
+
+::: tip
+Wenn das Problem weiterhin besteht, öffnen Sie die persistierten Dateien des Teams unter `~/.claude/teams//` und korrelieren Sie UI-Diagnosen mit dem Live-Prozesszustand, bevor Sie Code ändern.
+:::
diff --git a/landing/product-docs/de/index.md b/landing/product-docs/de/index.md
new file mode 100644
index 00000000..d114d73f
--- /dev/null
+++ b/landing/product-docs/de/index.md
@@ -0,0 +1,81 @@
+---
+title: Agent Teams Dokumentation – KI-Agententeams aus einer lokalen Desktop-App ausführen
+description: Dokumentation für Agent Teams, eine kostenlose Desktop-App zur Orchestrierung von KI-Agenten. Erstellen Sie Teams, verfolgen Sie die Arbeit auf einem Kanban-Board, überprüfen Sie Codeänderungen und koordinieren Sie Claude-, Codex-, OpenCode- und Multimodell-Workflows.
+lang: de-DE
+layout: home
+hero:
+ name: Agent Teams Dokumentation
+ text: KI-Agententeams aus einer lokalen Desktop-App ausführen
+ tagline: Erstellen Sie Teams, verfolgen Sie, wie sich die Arbeit über ein Kanban-Board bewegt, überprüfen Sie Codeänderungen und koordinieren Sie Claude-, Codex-, OpenCode- und Multimodell-Workflows, ohne die lokale Kontrolle aufzugeben.
+ actions:
+ - theme: brand
+ text: Schnellstart
+ link: /de/guide/quickstart
+ - theme: alt
+ text: Installieren
+ link: /de/guide/installation
+ - theme: alt
+ text: Konzepte
+ link: /de/reference/concepts
+features:
+ - icon: "01"
+ title: Team-orientierter Workflow
+ details: Definieren Sie Rollen, starten Sie einen Lead und lassen Sie Agenten Aufgaben aufteilen, übernehmen und koordinieren.
+ link: /de/guide/create-team
+ linkText: Team erstellen
+ - icon: "02"
+ title: Live-Kanban-Board
+ details: Verfolgen Sie, wie Aufgaben durch todo, in progress, review, done und approved wandern, während die Agenten arbeiten.
+ link: /de/guide/agent-workflow
+ linkText: Workflow verstehen
+ - icon: "03"
+ title: Integriertes Code-Review
+ details: Untersuchen Sie aufgabenbezogene Diffs, akzeptieren oder verwerfen Sie Hunks und kommentieren Sie dort, wo Agenten eine Richtung brauchen.
+ link: /de/guide/code-review
+ linkText: Änderungen überprüfen
+ - icon: "04"
+ title: Runtime-bewusste Einrichtung
+ details: Nutzen Sie Claude, Codex, OpenCode oder Multimodell-Anbieter über den Zugang, den Sie bereits haben.
+ link: /de/guide/runtime-setup
+ linkText: Runtimes konfigurieren
+ - icon: "05"
+ title: Local-first-Kontrolle
+ details: Die Desktop-App liest den lokalen Projekt- und Runtime-Zustand. Ihr Code bleibt auf Ihrem Rechner, sofern nicht ein ausgewählter Anbieter Prompt-Kontext erhält.
+ link: /de/reference/privacy-local-data
+ linkText: Datenschutzmodell
+ - icon: "06"
+ title: Debugbare Teams
+ details: Verfolgen Sie Aufgabenprotokolle, Runtime-Ausgaben, Teamkollegen-Nachrichten und laufende Prozesse, wenn ein Start oder eine Aufgabe hängen bleibt.
+ link: /de/guide/troubleshooting
+ linkText: Fehler beheben
+---
+
+
+
+## Hier starten
+
+Agent Teams ist eine kostenlose Desktop-App zur Orchestrierung von KI-Agententeams. Sie senden nicht nur isolierte Prompts an einen einzelnen Agenten: Sie erstellen ein Team, weisen Rollen zu und verfolgen, wie Agenten ihre Arbeit über ein Aufgaben-Board koordinieren.
+
+
+
+## Nächste Schritte nach dem Start
+
+Nachdem Sie Ihr erstes Team erstellt haben, erkunden Sie diese Anleitungen, um weiterzukommen:
+
+- **Runtime-Einrichtung** - konfigurieren Sie Claude-, Codex-, OpenCode- oder Multimodell-Anbieter: [Runtimes konfigurieren](/de/guide/runtime-setup)
+- **Agent-Workflow** - verstehen Sie, wie Agenten ihre Arbeit über das Aufgaben-Board koordinieren: [Workflow verstehen](/de/guide/agent-workflow)
+- **Team-Briefing-Beispiele** - lernen Sie Prompt-Muster anhand realer Briefings: [Beispiele ansehen](/de/guide/team-brief-examples)
+- **Code-Review** - untersuchen Sie Diffs, akzeptieren oder verwerfen Sie Änderungen: [Änderungen überprüfen](/de/guide/code-review)
+- **Fehlerbehebung** - diagnostizieren Sie hängende Starts, fehlende Teamkollegen und fehlgeschlagene Aufgaben: [Fehler beheben](/de/guide/troubleshooting)
+- **Git- und Worktree-Strategie** - nutzen Sie Worktree-Isolation, wenn mehrere Teamkollegen parallel dasselbe Repository bearbeiten: [Mehr über Worktrees erfahren](/de/guide/git-worktree-strategy)
+- **Versionshinweise** - sehen Sie, was in jeder Version neu ist: [Releases ansehen](/de/reference/release-notes)
+
+## Referenz
+
+Nutzen Sie die Referenzseiten, wenn Sie exakte Terminologie, das Anbieterverhalten, die Architektur für Mitwirkende oder Datenschutzgrenzen benötigen.
+
+
+
+## Produktvorschau
+
+
diff --git a/landing/product-docs/de/reference/concepts.md b/landing/product-docs/de/reference/concepts.md
new file mode 100644
index 00000000..eb8d8009
--- /dev/null
+++ b/landing/product-docs/de/reference/concepts.md
@@ -0,0 +1,85 @@
+---
+title: Konzepte – Agent Teams Dokumentation
+description: Grundlegendes Vokabular für Agent Teams — Teams, Leads, Teammitglieder, Aufgaben, Kanban, Posteingänge, Runtimes und Review.
+lang: de-DE
+---
+
+# Konzepte
+
+Diese Seite definiert die grundlegenden Begriffe, die in Agent Teams verwendet werden. Nutzen Sie sie als gemeinsames Vokabular für die App, das Aufgabenboard, Nachrichten und den Review-Ablauf.
+
+## Team
+
+Ein Team ist eine benannte Gruppe von Agenten, die an einen Projektpfad gebunden ist. Es hat einen Lead, optionale Teammitglieder, Runtime-/Anbietereinstellungen, Prompts, Posteingänge, Aufgaben und einen lokalen Startzustand.
+
+## Lead {#lead}
+
+Der Lead ist der Koordinator des Teams. Er verwandelt ein Benutzerziel in Aufgaben, weist Teammitglieder zu oder leitet sie um, verfolgt Blocker, fordert Reviews an und hält die Arbeit über das Board am Laufen.
+
+[Teammitglied →](#teammate)
+
+Lead-Nachrichten verwenden einen anderen Zustellungspfad als Nachrichten von Teammitgliedern: Die App leitet Lead-Posteingangseinträge in die Lead-Runtime weiter, während Teammitglieder zwischen den Zügen ihre eigenen Posteingangsdateien lesen.
+
+## Teammitglied {#teammate}
+
+Ein Teammitglied ist ein Agent im Team, der nicht der Lead ist. Teammitglieder übernehmen üblicherweise fokussierte Rollen wie Builder, Reviewer, Researcher oder Tester. Ein Teammitglied kann Direktnachrichten, Aufgabenzuweisungen, Aufgabenkommentare und Review-Anfragen empfangen.
+
+[Lead ↑](#lead)
+
+## Aufgabe
+
+Eine Aufgabe ist die dauerhafte Arbeitseinheit. Sie hat eine ID, einen Status, einen Eigentümer, eine Beschreibung, Kommentare, Logs, Anhänge, Aufgabenverweise und überprüfbare Änderungen.
+
+Übliche Aufgabenzustände sind `todo`, `in_progress`, `done`, `review` und `approved`. Intern speichert die Aufgabendatei den Arbeitszustand, während die Review- und Freigabeplatzierung auch den Kanban-Overlay-Zustand verwenden kann.
+
+## Kanban
+
+Kanban ist die Boardansicht für die Teamarbeit. Damit können Sie Aufgaben nach Zustand durchsuchen, Aufgabendetails öffnen, Logs inspizieren, Diffs überprüfen, fertige Arbeit freigeben oder Änderungen anfordern.
+
+## Posteingang
+
+Ein Posteingang ist eine lokale Nachrichtendatei für einen Teamteilnehmer. Agent Teams nutzt Posteingänge für Benutzernachrichten, Lead-Nachrichten, Nachrichten von Teammitgliedern, Runtime-Zustellungsmetadaten, teamübergreifende Nachrichten und einige Systembenachrichtigungen.
+
+Nachrichten sind dauerhafte lokale Datensätze. Die Zustellung hängt dennoch davon ab, dass die ausgewählte Runtime aktiv ist und ihren nächsten Zug verarbeiten kann.
+
+## Agent-Block
+
+Ein Agent-Block ist verborgener, nur für Agenten bestimmter Anweisungstext, der mit `... ` umschlossen ist. Die Benutzeroberfläche entfernt diese Blöcke aus der normalen, für Menschen sichtbaren Darstellung, aber Agenten und die Runtime-Zustellung können sie für Koordinationsdetails verwenden.
+
+Der aktuelle kanonische Marker ist `info_for_agent`. Ältere Dokumente verwenden möglicherweise umschlossene Codeblöcke mit einem `info_for_agent`-Marker oder XML-artige ``-Tags — dies sind veraltete Muster und sollten beim Auftreten zu `info_for_agent` migriert werden. (Der ursprüngliche Tag-Name war `agent-block`; die Unterstrich-Form `` wird im VitePress-Quellcode verwendet, um das HTML-Parsing zu vermeiden.)
+
+## Kontextphase
+
+Eine Kontextphase ist ein Segment einer Sitzungs-Kontextzeitleiste. Die Verdichtung (Compaction) startet eine neue Phase, sodass die Token- und Kontextnutzung vor und nach dem Zurücksetzen analysiert werden kann.
+
+Die Kontextverfolgung trennt Kategorien wie Projektanweisungen, erwähnte Dateien, Tool-Ausgabe, Denktext, Teamkoordination und Benutzernachrichten. Diese Zahlen sind Diagnosewerte, keine Abrechnungsbelege der Anbieter.
+
+## Runtime
+
+Eine Runtime ist der lokale Ausführungspfad, der einen Agentenzug ausführt. Zu den unterstützten Runtime-Pfaden gehören Claude Code, Codex und OpenCode.
+
+Die Runtime besitzt das Verhalten der Modellausführung, Authentifizierungsdetails, die Semantik der Tool-Ausführung, Ratenbegrenzungen, die Modellverfügbarkeit und einige Transkript-/Log-Formate.
+
+## Anbieter
+
+Ein Anbieter ist der Modellzugriffspfad hinter einer Runtime. Aktuelle Anbieter-IDs umfassen Anthropic, Codex, Gemini und OpenCode. OpenCode kann über seine eigene Konfiguration an viele Modellanbieter weiterleiten.
+
+Agent Teams orchestriert Aufgaben und Nachrichten, ersetzt aber nicht die Anbieter-Authentifizierung oder die Anbieterrichtlinien.
+
+## Solo-Modus
+
+Der Solo-Modus betreibt ein Team mit einem einzigen Mitglied. Er ist nützlich für schnelle Arbeit, geringeren Koordinationsaufwand und das Validieren eines Prompts, bevor zu einem vollständigen Team erweitert wird.
+
+## Teamübergreifende Kommunikation
+
+Agenten können innerhalb von Teams und teamübergreifend Nachrichten senden. Nutzen Sie dies, wenn separate Teams zusammenhängende Arbeit besitzen und sich koordinieren müssen, ohne alles in einem großen Team zusammenzufassen.
+
+## Autonomiestufe
+
+Die Autonomie steuert, wie viel Agenten tun dürfen, bevor sie nachfragen. Höhere Autonomie ist schneller; geringere Autonomie ist sicherer für sensible Codepfade, Persistenz, Anbieter-Authentifizierung, Git-Operationen und Releases.
+
+## Review
+
+Review ist der aufgabenbezogene Abnahmeablauf. Eine Aufgabe kann zu review wechseln, Kommentare oder angeforderte Änderungen erhalten und dann zu approved wechseln, wenn das Ergebnis akzeptiert wird.
+
+Review ist an lokale Diffs und die Aufgabenhistorie gebunden und funktioniert daher am besten, wenn Aufgaben eng gefasst bleiben und Agenten die Aufgabe erwähnen, an der sie arbeiten.
diff --git a/landing/product-docs/de/reference/contributor-architecture.md b/landing/product-docs/de/reference/contributor-architecture.md
new file mode 100644
index 00000000..42c6ec98
--- /dev/null
+++ b/landing/product-docs/de/reference/contributor-architecture.md
@@ -0,0 +1,55 @@
+---
+title: Architektur für Mitwirkende – Agent Teams Dokumentation
+description: Leitfaden für Mitwirkende zum Feature-Aufbau, den Grenzen zwischen Runtime und Anbieter, harten Guardrails und den kanonischen Architekturdokumenten.
+lang: de-DE
+---
+
+# Architektur für Mitwirkende
+
+Diese Seite ist eine Landkarte für Mitwirkende. Sie verweist auf die kanonische Repo-Anleitung, anstatt jede Implementierungsregel erneut darzustellen.
+
+## Kanonische Quellen
+
+Verwenden Sie diese Dateien als Quelle der Wahrheit, wenn Sie die App ändern:
+
+| Bedarf | Kanonische Quelle |
+| --- | --- |
+| Repo-Übersicht und Befehle | [README.md](https://github.com/777genius/agent-teams-ai/blob/main/README.md) |
+| Lokale Arbeitskonventionen | [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) |
+| Harte Guardrails | [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) |
+| Aufbau mittelgroßer und großer Features | [docs/FEATURE_ARCHITECTURE_STANDARD.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) |
+| Debugging von Agent-Team-Starts | [docs/team-management/debugging-agent-teams.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) |
+
+## Feature-Aufbau
+
+Mittelgroße und große Features sollten unter `src/features//` liegen und dem Feature-Architekturstandard folgen. Halten Sie die Interna eines Features hinter öffentlichen Einstiegspunkten und vermeiden Sie tiefe Importe über Feature-Grenzen hinweg.
+
+Beginnen Sie bei neuer Arbeit mit dem vorhandenen Slice `src/features/recent-projects` als lokaler Referenzimplementierung. Kleine Fixes können nahe am bestehenden Codepfad bleiben, wenn das Erstellen eines Feature-Slice mehr Struktur als Nutzen brächte.
+
+## Grenzen zwischen Runtime und Anbieter
+
+Agent Teams ist für die Orchestrierung zuständig: Teams, Aufgaben, Nachrichten, Startzustand, Review-UI, Diagnostik und lokale Persistenz.
+
+Der ausgewählte Runtime-/Anbieterpfad ist für Modellausführung, Authentifizierung, Modellverfügbarkeit, Ratenbegrenzungen, Tool-Semantik und runtime-spezifische Transkript-Nachweise zuständig. Lassen Sie Prompts oder UI-Zustand nicht für fehlende Authentifizierung, fehlende Binärdateien, abgelehnte Modell-IDs oder Anbieterausfälle kompensieren. Details zur nutzerseitigen Einrichtung finden Sie unter [Anbieter und Runtimes](/de/reference/providers-runtimes).
+
+## Debugging von Agent-Teams
+
+Beginnen Sie bei hängenden Starts, OpenCode-Zuständen `registered` / Bootstrap-unbestätigt, ausbleibenden Antworten von Teammitgliedern oder verdächtigen Aufgabenprotokollen mit dem dedizierten Debugging-Runbook. Untersuchen Sie das neueste Start-Fehler-Artefakt unter `~/.claude/teams//launch-failure-artifacts/latest.json` und korrelieren Sie anschließend den UI-Zustand mit den persistierten Dateien und runtime-spezifischen Nachweisen.
+
+Vermeiden Sie umfangreiche Aufräumarbeiten während des Debuggings. Stoppen Sie nur den Prozess, die Lane, das Team oder den Smoke-Run, den Sie dem Problem zuordnen können.
+
+## Konventionen für Mitwirkende
+
+- Verwenden Sie `pnpm dev` für die Desktop-Electron-App während der normalen Entwicklung.
+- Verwenden Sie den Browser-Dev-Modus nicht als Ersatz für Desktop-Runtime, IPC, Terminal, Anbieter-Authentifizierung oder das Verhalten des Team-Lebenszyklus.
+- Halten Sie die Verantwortlichkeiten von Electron-Main, Preload, Renderer, Shared und Feature getrennt.
+- Verwenden Sie `wrapAgentBlock(text)` für reine Agent-Blöcke, anstatt Marker manuell zu verketten.
+- Bevorzugen Sie eine fokussierte Verifizierung. Vermeiden Sie umfangreiche `lint:fix`- oder Formatierungsänderungen, sofern die Aufgabe nicht ausdrücklich die Formatierung betrifft.
+- Behandeln Sie Parsing, Aufgaben-Lebenszyklus, Anbieter-/Runtime-Erkennung, Persistenz, IPC, Git und Review-Abläufe als Hochrisikobereiche, die gezielte Tests oder einen klaren Verifizierungspfad benötigen.
+
+## Verwandte Seiten
+
+- [Runtime-Einrichtung](/de/guide/runtime-setup)
+- [Fehlerbehebung](/de/guide/troubleshooting)
+- [Code-Review](/de/guide/code-review)
+- [Datenschutz und lokale Daten](/de/reference/privacy-local-data)
diff --git a/landing/product-docs/de/reference/faq.md b/landing/product-docs/de/reference/faq.md
new file mode 100644
index 00000000..c3789bcd
--- /dev/null
+++ b/landing/product-docs/de/reference/faq.md
@@ -0,0 +1,95 @@
+---
+title: FAQ – Agent Teams Dokumentation
+description: Häufig gestellte Fragen zu Agent Teams — Preise, Modellzugriff, Runtimes, Datenschutz, Review und Fehlerbehebung.
+lang: de-DE
+---
+
+# FAQ
+
+## Ist Agent Teams kostenlos?
+
+Ja. Die App ist kostenlos und quelloffen. Der Zugriff auf Anbieter oder Runtimes kann je nach Nutzung dennoch Kosten verursachen.
+
+## Beinhaltet Agent Teams einen Modellzugriff?
+
+Nein. Agent Teams ist die lokale Orchestrierungs- und UI-Schicht. Der Modellzugriff stammt aus dem ausgewählten Runtime-/Anbieterpfad, etwa Claude Code, Codex oder OpenCode.
+
+## Welche Runtimes werden unterstützt?
+
+Die unterstützten Runtime-Pfade sind Claude Code, Codex und OpenCode. Die App erfasst außerdem Anbieter-IDs wie Anthropic, Codex, Gemini und OpenCode, sofern die Runtime sie bereitstellt.
+
+## Muss ich zuerst Claude Code oder Codex installieren?
+
+Nicht immer. Die App leitet die Runtime-Erkennung und -Einrichtung über die UI an. Einige Pfade erfordern dennoch eine externe Runtime-Authentifizierung.
+
+Die Einrichtung von OpenCode ist getrennt von der Einrichtung von Claude Code und Codex. Wenn ein Start fehlschlägt, prüfen Sie den Runtime-Status und die Anbieter-Authentifizierung, bevor Sie den Team-Prompt ändern.
+
+## Wie prüfe ich, ob eine Runtime bereit ist?
+
+Führen Sie den Runtime-Befehl zuerst in einem Terminal aus:
+
+```bash
+claude --version
+codex --version
+opencode --version
+```
+
+Bestätigen Sie anschließend die Anbieter-Authentifizierung für den ausgewählten Pfad. Wenn der Befehl oder die Authentifizierungsprüfung außerhalb von Agent Teams fehlschlägt, beheben Sie die Einrichtung, bevor Sie ein Team starten.
+
+## Lädt es meinen Code auf die Server von Agent Teams hoch?
+
+Nein. Agent Teams ist kein Cloud-Code-Sync-Dienst. Anbietergestützte Modellaufrufe können je nach ausgewählter Runtime Prompt-Kontext erhalten.
+
+## Wo werden Team-Dateien gespeichert?
+
+Team-Koordinationsdaten werden lokal unter `~/.claude/teams//` (macOS/Linux) oder `%APPDATA%\Claude\teams\\` (Windows) gespeichert, Aufgabendateien unter `~/.claude/tasks//` oder `%APPDATA%\Claude\tasks\\` und Projekt-Sitzungsdaten unter `~/.claude/projects//`, sofern verfügbar.
+
+## Was kann meinen Rechner verlassen?
+
+Prompt-Kontext, ausgewählte Dateiinhalte, Tool-Ergebnisse, Befehlsausgaben, Aufgabentexte, Kommentare und Anhänge können Ihren Rechner über den Runtime-/Anbieterpfad verlassen, wenn ein Agent ein anbietergestütztes Modell verwendet. Das genaue Verhalten hängt von der Runtime und dem Anbieter ab.
+
+## Können Agenten miteinander kommunizieren?
+
+Ja. Agenten können Teammitgliedern Nachrichten senden, Aufgaben kommentieren, sich teamübergreifend abstimmen und Aufgabenverweise nutzen, um Konversationen mit der Arbeit verknüpft zu halten.
+
+## Was sollte ich in den ersten Team-Prompt schreiben?
+
+Geben Sie dem Lead ein konkretes Ergebnis, Datei- oder Feature-Grenzen, Risikolimits und Erwartungen an die Verifizierung vor. Zum Beispiel:
+
+```text
+Improve the docs quickstart. Keep edits inside landing/product-docs, add practical examples, and run `pnpm --dir landing docs:build` before marking work done.
+```
+
+## Kann ich Code überprüfen, bevor ich ihn annehme?
+
+Ja. Der Review-Ablauf ist auf aufgabenbezogene Diffs und Entscheidungen auf Hunk-Ebene ausgelegt.
+
+## Was ist ein Agent Block?
+
+Ein Agent Block ist verborgener, nur für Agenten bestimmter Text, der in Markern wie `... ` eingeschlossen ist. Die App entfernt ihn aus der normalen, für Benutzer sichtbaren Anzeige, hält ihn aber für die Agentenkoordination verfügbar.
+
+## Was ist der Solo-Modus?
+
+Der Solo-Modus ist ein Team mit einem einzigen Agenten. Er eignet sich für kleinere Aufgaben und einen geringeren Koordinationsaufwand.
+
+## Sollte ich Worktree-Isolation verwenden?
+
+Verwenden Sie sie, wenn mehrere OpenCode-Teammitglieder dasselbe Git-Projekt parallel bearbeiten könnten. Sie reduziert Dateikonflikte, erfordert jedoch ein Git-verwaltetes Projekt und gilt derzeit für OpenCode-Mitglieder.
+
+## Können verschiedene Teammitglieder verschiedene Anbieter verwenden?
+
+Ja, Anbieter-/Modelleinstellungen können pro Teammitglied übernommen werden, wenn der ausgewählte Runtime-Pfad sie unterstützt. OpenCode ist der wichtigste Pfad für ein breites Multi-Anbieter-Routing.
+
+## Warum wird eine Aufgabe getrennt von done als review oder approved angezeigt?
+
+Der Arbeitsstatus und der Review-Status sind verwandt, aber nicht identisch. Eine Aufgabe kann aus Sicht des Agenten done sein und anschließend in der Kanban-UI den Review- und Genehmigungsprozess durchlaufen.
+
+## Was sollte ich tun, wenn ein Start hängen bleibt?
+
+Öffnen Sie die Fehlerbehebung, sammeln Sie Start-Diagnosen, prüfen Sie `~/.claude/teams//` und verifizieren Sie die Runtime-/Anbieter-Authentifizierung, bevor Sie Prompts ändern.
+
+Prüfen Sie bei OpenCode die Lane-/Session-Evidenz, bevor Sie annehmen, dass ein Teammitglied online ist, aber Nachrichten ignoriert.
+
+## Warum unterscheiden sich Logs zwischen den Runtimes?
+
+Claude Code, Codex und OpenCode stellen unterschiedliche Transkriptformate und Runtime-Evidenz bereit. Agent Teams normalisiert, was es kann, aber die Vollständigkeit und Zuordnung der Logs kann je nach Runtime variieren.
diff --git a/landing/product-docs/de/reference/privacy-local-data.md b/landing/product-docs/de/reference/privacy-local-data.md
new file mode 100644
index 00000000..d34a0fc0
--- /dev/null
+++ b/landing/product-docs/de/reference/privacy-local-data.md
@@ -0,0 +1,82 @@
+---
+title: Datenschutz und lokale Daten – Agent Teams Dokumentation
+description: Was Agent Teams lokal speichert, was über anbieterbasierte Modellaufrufe Ihr Gerät verlassen kann und praktische Datenschutzhinweise.
+lang: de-DE
+---
+
+# Datenschutz und lokale Daten
+
+Agent Teams ist local-first, aber der gewählte Runtime-/Anbieterpfad spielt dennoch eine Rolle. Diese Seite beschreibt, was die Desktop-App lokal speichert und was Ihr Gerät verlassen kann, wenn Agenten anbieterbasierte Modelle aufrufen.
+
+## Was lokal bleibt
+
+Die Desktop-App läuft auf Ihrem Gerät und liest lokale Projekt-/Runtime-Daten, um die Benutzeroberfläche zu betreiben. Typische lokale Daten umfassen:
+
+- Projektdateien
+- Teamkonfiguration und Mitglieder-Metadaten
+- Aufgaben-Metadaten, Aufgabenkommentare und Aufgabenreferenzen
+- Posteingangsnachrichten
+- Runtime-/Sitzungsprotokolle
+- Startzustand und Bootstrap-Diagnosen
+- Review-Status
+- Lokale App-Einstellungen
+
+Wichtige lokale Speicherorte umfassen:
+
+| Plattform | Speicherort | Zweck |
+| --- | --- | --- |
+| macOS/Linux | `~/.claude/teams//` | Teamkonfiguration, Mitglieder-Metadaten, Posteingänge, Startzustand, Bootstrap-Nachweise, Runtime-Diagnosen, Aufzeichnungen gesendeter Nachrichten, Kanban-Status und review-bezogene Teamdateien. |
+| Windows | `%APPDATA%\Claude\teams\\` | Dasselbe — Teamkonfiguration, Mitglieder-Metadaten, Posteingänge, Startzustand und Diagnosen. |
+| macOS/Linux | `~/.claude/tasks//` | Dauerhafte Aufgaben-JSON-Dateien für das Team-Board. |
+| Windows | `%APPDATA%\Claude\tasks\\` | Dasselbe — dauerhafte Aufgaben-JSON-Dateien. |
+| macOS/Linux | `~/.claude/projects//` | Claude-/Codex-artige Projektsitzungsdateien, die für Sitzungsverlauf, Kontextanalyse und transkriptgestützte Benutzeroberfläche verwendet werden. |
+| Windows | `%APPDATA%\Claude\projects\\` | Dasselbe — Projektsitzungsdateien. |
+
+Die genauen Dateien können je nach Runtime und App-Version variieren. Beim Debugging von Starts befinden sich die neuesten Nachweise üblicherweise im jeweiligen Ordner `~/.claude/teams//` (oder `%APPDATA%\Claude\teams\\`).
+
+## Was Ihr Gerät verlassen kann
+
+Agent Teams selbst ist kein Cloud-Code-Sync-Dienst für Ihr Repository. Die App muss Ihr gesamtes Projekt nicht auf einen Agent-Teams-Server hochladen, um das Board, den Posteingang, Protokolle oder die Review-Benutzeroberfläche anzuzeigen.
+
+Wenn ein Agent jedoch ein anbieterbasiertes Modell mit einer Aufgabe betraut, können Prompt-Kontext, ausgewählte Dateiinhalte, Aufgabentext, Kommentare, Tool-Ergebnisse, Befehlsausgaben und anderer von der Runtime bereitgestellter Kontext über den gewählten Runtime-/Anbieterpfad gesendet werden. Was gesendet wird, hängt von der Runtime, dem Modell, den Tool-Aufrufen, dem Prompt und der Anbieterkonfiguration ab.
+
+Anbieter-Authentifizierung, anbieterseitige Aufbewahrung, Training, Protokollierung, regionale Verarbeitung und Abrechnung werden durch den Anbieter/die Runtime geregelt, den/die Sie wählen. Überprüfen Sie diese Richtlinien für sensible Projekte.
+
+Häufige Beispiele:
+
+| Aktion | Daten, die über die Runtime/den Anbieter gesendet werden können |
+| --- | --- |
+| Einen Agenten bitten, eine Datei zu bearbeiten | Der Aufgaben-Prompt, relevante Dateiinhalte, Tool-Ergebnisse und Befehlsausgaben |
+| Einen Screenshot anhängen | Der Inhalt des Anhangs und der umgebende Aufgaben-/Kommentartext |
+| Um ein Code-Review bitten | Diff-Kontext, ausgewählte Dateien, Kommentare und Verifizierungsprotokolle |
+| Einen fehlschlagenden Befehl debuggen | Fehlerausgaben, Stack-Traces und referenzierte Quellcode-Ausschnitte |
+
+## Was die App nicht garantiert
+
+- Sie kann nicht garantieren, dass anbieterbasierte Modellaufrufe niemals privaten Code erhalten.
+- Sie kann Aufbewahrungs- oder Abrechnungsrichtlinien der Anbieter nicht außer Kraft setzen.
+- Sie kann einen entfernten Anbieter nicht dazu bringen, sich wie ein vollständig lokales Modell zu verhalten.
+- Sie kann keine Geheimnisse schützen, die ein Agent angewiesen wird, in Prompts, Aufgabenkommentare, Dateien oder Befehle einzufügen.
+- Sie kann nicht dafür sorgen, dass jede Runtime dieselben Transkript- oder Audit-Details offenlegt.
+
+## Praktische Hinweise
+
+- Hängen Sie keine Geheimnisse an Aufgaben, Kommentare oder Direktnachrichten an.
+- Überprüfen Sie die Anbieterrichtlinien für sensible Projekte.
+- Verwenden Sie eine geringere Autonomie für riskante Repositorys.
+- Halten Sie den Aufgabenumfang eng, wenn Sie mit privatem Code arbeiten.
+- Bevorzugen Sie lokale Nachweise und Protokolle beim Debugging.
+- Prüfen Sie generierte Prompts, Aufgabenbeschreibungen und angehängte Dateien, bevor Sie Agenten mit vertraulichem Material betrauen.
+- Verwenden Sie Anbieter-/Modellpfade, die Ihren Datenschutzanforderungen entsprechen.
+
+Bevor Sie Agent Teams auf einem sensiblen Repository verwenden:
+
+1. Entfernen Sie Geheimnisse aus dem Arbeitsverzeichnis und den Aufgabenanhängen
+2. Wählen Sie den Runtime-/Anbieterpfad, den Sie verwenden dürfen
+3. Beginnen Sie mit geringer Autonomie und kleinen Aufgaben
+4. Überprüfen Sie Aufgaben-Prompts und generierte Kommentare, bevor Sie den Umfang erweitern
+5. Halten Sie Protokolle lokal, sofern Sie sie nicht absichtlich für den Support teilen
+
+## Open-Source-Modell
+
+Die App selbst ist quelloffen und kostenlos. Sie können im Repository nachvollziehen, wie lokale Orchestrierung, Aufgabenverfolgung, Posteingänge, Runtime-Diagnosen und Review-Abläufe funktionieren.
diff --git a/landing/product-docs/de/reference/providers-runtimes.md b/landing/product-docs/de/reference/providers-runtimes.md
new file mode 100644
index 00000000..e9233cb9
--- /dev/null
+++ b/landing/product-docs/de/reference/providers-runtimes.md
@@ -0,0 +1,115 @@
+---
+title: Anbieter und Runtimes – Agent Teams Dokumentation
+description: Unterstützte Runtime-Pfade (Claude Code, Codex, OpenCode), Anbieter-IDs, Modellbenennung, Multi-Anbieter-Strategien und Funktionsprüfungen.
+lang: de-DE
+---
+
+# Anbieter und Runtimes
+
+Agent Teams trennt die Orchestrierung vom Modellzugriff. Die App verwaltet Teams, Aufgaben, Nachrichten, den Startzustand und die Review-UI; der ausgewählte Runtime-/Anbieter-Pfad führt die eigentliche Modellarbeit aus.
+
+## Was die App bereitstellt
+
+Agent Teams stellt bereit:
+
+- Team- und Aufgabenorchestrierung
+- Kanban-Board-UI
+- Teammitglieder-Messaging
+- Aufgabenprotokolle
+- Review-UI
+- lokale Projektintegration
+- Runtime-Erkennung und Funktionsprüfungen
+- lokale Protokolle und Diagnosen
+
+## Was die Runtime bereitstellt
+
+Die Runtime stellt bereit:
+
+- Modellausführung
+- Anbieter-Authentifizierung
+- Verhalten bei der Tool-Ausführung
+- modellspezifische Rate-Limits und Funktionen
+- runtime-spezifische Transkripte und Zustellungsnachweise
+
+## Unterstützte Runtime-Pfade
+
+| Runtime-Pfad | Anbieter-/Modell-Pfad | Beste Eignung | Hinweise |
+| --- | --- | --- | --- |
+| Claude Code | Anthropic / Claude-Modelle | Claude-Code-Nutzer und Anthropic-gestützte Workflows | Standardmäßiger Local-First-Pfad für Claude-Teams. Erfordert, dass die Runtime und der Kontozugriff lokal verfügbar sind. |
+| Codex | Codex / OpenAI-gestützte Modelle | Codex-native Workflows | Nutzt die Codex-Runtime-Integration sowie den Codex-Auth-/Kontostatus, sofern verfügbar. Einige Diagnosen unterscheiden sich von Claude-Transkripten. |
+| OpenCode | OpenCode-verwaltetes Modell-Routing | Multi-Anbieter-Teams und breite Modellabdeckung | OpenCode kann über viele Modellanbieter routen. Agent Teams behandelt OpenCode-Lanes als runtime-spezifischen Nachweis und vermeidet Rätselraten, wenn die Lane-Identität mehrdeutig ist. |
+
+Gemini ist als unterstützter Anbieter-Pfad mit Google ADC (gcloud auth), Gemini CLI OAuth und API-Schlüssel-Authentifizierung verfügbar. Es erscheint zusammen mit anderen Anbietern in der UI für die Teamerstellung und Runtime-Einrichtung, wenn die Runtime es als verfügbar meldet.
+
+## Anbieter-IDs
+
+Die App erkennt derzeit diese Anbieter-IDs in der Team-/Runtime-Konfiguration:
+
+| Anbieter-ID | Anzeigeabsicht |
+| --- | --- |
+| `anthropic` | Anthropic-/Claude-Code-Pfad |
+| `codex` | Codex-Pfad |
+| `gemini` | Gemini-Anbieter-Pfad (Google ADC, Gemini CLI oder API-Schlüssel) |
+| `opencode` | OpenCode-Pfad, einschließlich OpenCode-verwaltetem Anbieter-Routing |
+
+Lesen Sie diese Tabelle nicht als Garantie dafür, dass jeder Anbieter für jedes Modell auf jedem Rechner authentifiziert, installiert oder verfügbar ist. Der Runtime-Status und die Funktionsprüfungen sind die maßgebliche Quelle für einen bestimmten Start.
+
+## Modell-IDs
+
+Modell-IDs werden an die ausgewählte Runtime übergeben. Agent Teams schreibt den Modellkatalog eines Anbieters nicht in ein universelles Benennungsschema um.
+
+Beispiele:
+
+| Anbieter-Pfad | Beispiel-Modell-ID | Hinweise |
+| --- | --- | --- |
+| Claude Code | `opus`, `sonnet` oder eine vollständige Claude-Modell-ID | Verfügbarkeit hängt von Claude Code und dem Kontozugriff ab |
+| Codex | `gpt-5.4`, `gpt-5.3-codex` | Verfügbarkeit ergibt sich aus dem Codex-Konto-/Runtime-Status |
+| OpenCode | `openrouter/moonshotai/kimi-k2.6` | Das Präfix muss mit einer OpenCode-Anbieterkonfiguration übereinstimmen |
+
+Wenn ein Modellname abgelehnt wird, überprüfen Sie ihn zuerst direkt in der Runtime/beim Anbieter. Das Ändern eines Team-Briefings kann ein nicht verfügbares Modell nicht starten.
+
+## Multi-Anbieter-Strategie
+
+Agent Teams hält die Orchestrierung anbieterbewusst, aber nicht anbietergebunden:
+
+- Teams, Aufgaben, Posteingänge, Kommentare, Review-Zustand und Start-Diagnosen verbleiben im lokalen Agent-Teams-Speicher
+- jedes Mitglied kann Anbieter-/Modelleinstellungen über die Team-Start-Metadaten mitführen
+- Modellverfügbarkeit, Auth, Rate-Limits und Tool-Verhalten bleiben in der Verantwortung von Runtime/Anbieter
+- OpenCode ist der breiteste Routing-Pfad, wenn ein Team mehrere Anbieter-/Modell-Lanes nutzen soll
+
+Für die Grenzen aus Sicht von Mitwirkenden und kanonische Implementierungshinweise siehe [Architektur für Mitwirkende](/de/reference/contributor-architecture).
+
+Empfohlene Muster:
+
+| Muster | Wann es hilft | Risiko |
+| --- | --- | --- |
+| Ein Anbieter für alle Mitglieder | Erster Start, sensible Repos, einfachstes Debugging | Geteilte Rate-Limits können das gesamte Team stoppen |
+| Starker Lead + günstigere Builder | Planung/Review zuverlässig halten und gleichzeitig die Implementierungskosten senken | Builder-Output benötigt möglicherweise eine strengere Überprüfung |
+| Getrennte Builder- und Reviewer-Modelle | Modellspezifische blinde Flecken erkennen | Mehr Einrichtung und Attribution zu prüfen |
+
+## Anbieterkosten
+
+Agent Teams ist kostenlos und quelloffen. Sie können mit dem enthaltenen kostenlosen Modell ohne Auth starten - ohne Registrierung, API-Schlüssel oder Kreditkarte. Bezahlte oder kontogestützte Anbieternutzung unterliegt der von Ihnen ausgewählten Runtime/dem Anbieter: Abonnementlimits, API-Schlüssel, Konto-Auth, Rate-Limits und Anbieterrichtlinien bleiben allesamt außerhalb der App.
+
+## Funktionsprüfungen
+
+Während der Einrichtung kann die App Zugriffs- und Funktionsprüfungen durchführen. Dies hilft, fehlende Runtime-Auth zu erkennen, bevor ein Team-Start mitten in der Bereitstellung fehlschlägt.
+
+Funktionsprüfungen können melden, dass ein Anbieter existiert, aber nicht authentifiziert ist, dass eine Modellliste nicht verfügbar ist, dass ein Runtime-Pfad fehlt oder dass eine bestimmte Erweiterungsfunktion nicht unterstützt wird. Behandeln Sie diese Ergebnisse als Einrichtungsdiagnosen, nicht als Aufgabenfehler.
+
+Typische Einrichtungsbehebungen:
+
+| Prüfergebnis | Was zu tun ist |
+| --- | --- |
+| Runtime fehlt | Installieren Sie die CLI oder korrigieren Sie `PATH` |
+| Anbieter nicht authentifiziert | Führen Sie den Anbieter-Login-Flow aus oder fügen Sie den erforderlichen API-Schlüssel hinzu |
+| Modell nicht verfügbar | Wählen Sie ein Modell, das in der Modellliste dieser Runtime sichtbar ist |
+| Funktion nicht unterstützt | Verwenden Sie für dieses Teammitglied einen anderen Runtime-Pfad |
+
+## Zu erwartende Einschränkungen
+
+- Runtime-Unterstützung bedeutet keine gleiche Funktionsparität über Claude Code, Codex und OpenCode hinweg.
+- Die Abdeckung von Protokollen und Transkripten unterscheidet sich je nach Runtime.
+- OpenCode-Lanes benötigen stabile Lane-/Session-Nachweise, bevor die App Runtime-Protokolle sicher zuordnen kann.
+- Anbieter-Modellnamen und -Verfügbarkeit können sich außerhalb der App ändern.
+- Ein Team-Prompt kann fehlende Auth, fehlende PATH-Einträge, Anbieterausfälle oder erschöpfte Rate-Limits nicht beheben.
diff --git a/landing/product-docs/de/reference/release-notes.md b/landing/product-docs/de/reference/release-notes.md
new file mode 100644
index 00000000..03032268
--- /dev/null
+++ b/landing/product-docs/de/reference/release-notes.md
@@ -0,0 +1,42 @@
+---
+title: Versionshinweise – Agent Teams Dokumentation
+description: Versionshinweise und Changelog für Agent Teams. Verweist auf die maßgeblichen Dateien RELEASE.md und CHANGELOG.md mit allen Details.
+lang: de-DE
+---
+
+# Versionshinweise
+
+Aktuelle Version: **v1.2.0** (2026-03-31). Die aktive Entwicklung läuft weiter auf dem `main`-Branch mit unveröffentlichten Änderungen für die Arbeitssynchronisierung von Mitgliedern, die Härtung der OpenCode-Auslieferung und die CI-Stabilisierung.
+
+## So funktionieren Releases
+
+Agent Teams folgt der [semantischen Versionierung](https://semver.org/). Tags, die in das Repository gepusht werden, lösen einen automatisierten [Release-Workflow](https://github.com/777genius/agent-teams-ai/blob/main/docs/RELEASE.md) aus, der signierte Pakete für macOS, Windows und Linux erstellt und sie anschließend in GitHub Releases veröffentlicht.
+
+## Aktuelle Releases
+
+### v1.2.0 — Agent Graph, Tool-Freigabe pro Team, interaktives AskUserQuestion
+
+Agent Graph mit kraftgesteuerter Visualisierung und Kanban-Aufgabenlayout, Steuerungen für die Tool-Freigabe pro Team mit lesbaren Berechtigungsabfragen, Benachrichtigungen zu Aufgabenkommentaren und interaktive AskUserQuestion-Schaltflächen. Überarbeitung des Berechtigungssystems mit Vorabfreigabe von Write/Edit/NotebookEdit und Integration des MCP-Tool-Katalogs. Siehe [vollständiges Changelog](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md#120---2026-03-31).
+
+### v1.1.0 — React 19 + Electron 40, vom Benutzer initiierte Aufgabenstarts
+
+Migration auf React 19 + Electron 40, vom Benutzer initiierte Aufgabenstarts über das Kanban-Board, Leitfaden zur Behebung von Authentifizierungsproblemen, Syntaxhervorhebung für R/Ruby/PHP/SQL, 3-mal schnellere Transkriptsuche, Korrekturen für WSL-/Windows-Pfade und Behebung einer XSS-Sicherheitslücke. Siehe [vollständiges Changelog](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md#110---2026-03-25).
+
+### v1.0.0 — Erste öffentliche Veröffentlichung
+
+Erster stabiler Build: Zuverlässigkeit von CLI/Authentifizierung in paketierten Apps, IPC-Härtung, plattformübergreifende Paketierung mit signierten macOS-Builds, Governance-Dokumente für Open Source (LICENSE, CONTRIBUTING, CODE_OF_CONDUCT, SECURITY). Siehe [vollständiges Changelog](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md#100---2026-03-23).
+
+## Maßgebliche Quellen
+
+| Dokument | Beschreibung |
+| --- | --- |
+| [RELEASE.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/RELEASE.md) | Release-Prozess, Leitfaden zur Versionierung, Benennung von Artefakten, Einrichtung automatischer Updates und Vorlage für Versionshinweise. |
+| [CHANGELOG.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md) | Vollständiges Changelog mit allen Versionen, Funktionen, Verbesserungen und Fehlerbehebungen aus Benutzersicht. |
+| [GitHub Releases](https://github.com/777genius/agent-teams-ai/releases) | Herunterladbare Installationsprogramme für alle Plattformen. |
+
+## Verwandte Seiten
+
+- [Installation](/de/guide/installation)
+- [Schnellstart](/de/guide/quickstart)
+- [Architektur für Mitwirkende](/de/reference/contributor-architecture)
+- [Entwickler](/de/developers/)
diff --git a/landing/product-docs/es/developers/index.md b/landing/product-docs/es/developers/index.md
new file mode 100644
index 00000000..a9a00532
--- /dev/null
+++ b/landing/product-docs/es/developers/index.md
@@ -0,0 +1,69 @@
+---
+title: Centro para desarrolladores – Documentación de Agent Teams
+description: Punto de entrada para colaboradores y desarrolladores sobre la arquitectura, los guardrails, la depuración y las vías de extensión con MCP de Agent Teams.
+lang: es-ES
+---
+
+# Centro para desarrolladores
+
+Usa esta página cuando quieras modificar el propio Agent Teams, depurar el lanzamiento de un equipo o extender un runtime con herramientas de MCP. Los enlaces siguientes apuntan a los documentos canónicos del repositorio para que las reglas de implementación se mantengan en un único lugar.
+
+## Empieza aquí
+
+| Necesidad | Ir a |
+| --- | --- |
+| Visión general del repositorio, scripts y configuración del código fuente | [README.md](https://github.com/777genius/agent-teams-ai/blob/main/README.md) |
+| Navegación de agentes e índice de arquitectura | [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) |
+| Convenciones de trabajo para agentes y colaboradores | [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) |
+| Guardrails de implementación estrictos | [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) |
+| Estructura de funciones medianas y grandes | [Estándar de arquitectura de funciones](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) |
+| Depuración del lanzamiento, el bootstrap y la mensajería entre compañeros de equipo | [Runbook de depuración de equipos de agentes](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) |
+| Proceso de contribución | [Guía de contribución](https://github.com/777genius/agent-teams-ai/blob/main/.github/CONTRIBUTING.md) |
+| Notas de la versión / Changelog | [RELEASE.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/RELEASE.md) — [CHANGELOG.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md) |
+
+## Vía de desarrollo local
+
+Ejecuta la aplicación de escritorio Electron para el desarrollo habitual:
+
+```bash
+pnpm install
+pnpm dev
+```
+
+La vía de navegador/web no sustituye al runtime de escritorio. El modo de escritorio es la vía local admitida porque incluye IPC, terminales, autenticación de proveedores, gestión del ciclo de vida de los equipos, diagnósticos de lanzamiento y los puentes de runtime que usan los equipos reales.
+
+## Puntos de control de la arquitectura
+
+Antes de modificar una función, identifica su límite:
+
+| Área | Ubicación esperada |
+| --- | --- |
+| Función de producto mediana o grande | `src/features//` |
+| Orquestación del proceso principal de Electron | `src/main/` |
+| Superficie de API segura para el preload | `src/preload/` |
+| UI del renderer y estado de la aplicación | `src/renderer/` |
+| Tipos compartidos y helpers puros | `src/shared/` |
+| Servidor MCP del tablero de Agent Teams | `mcp-server/` |
+| Controlador de datos del tablero | `agent-teams-controller/` |
+
+Usa `src/features/recent-projects` como slice de referencia para la organización de funciones. Mantén explícitos los contratos entre procesos y evita las importaciones profundas que cruzan los límites de las funciones.
+
+## Vía de depuración
+
+Para bloqueos en el lanzamiento, estados `registered` / bootstrap sin confirmar de OpenCode, respuestas faltantes de compañeros de equipo o logs de tareas sospechosos:
+
+1. Empieza por el [runbook de depuración](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md).
+2. Inspecciona el paquete de artefactos más reciente en `~/.claude/teams//launch-failure-artifacts/latest.json`.
+3. Abre el `manifest.json` del artefacto y revisa `classification`, las migas de pan del bootstrap, los diagnósticos de lanzamiento, los estados de spawn de los miembros y las colas de logs censuradas.
+4. Limpia únicamente el equipo, la ejecución, el panel o el proceso que puedas identificar como propiedad de la prueba de humo o del lanzamiento fallido.
+
+## Vía de desarrollo con MCP
+
+Agent Teams usa un servidor MCP integrado llamado `agent-teams` para las operaciones del tablero. Los servidores MCP de usuario y de proyecto pueden añadir capacidades externas para los runtimes. Consulta [Integración de MCP](/es/guide/mcp-integration) para ver ejemplos de configuración, la estructura de `.mcp.json` y orientación sobre el registro de herramientas.
+
+## Documentos relacionados
+
+- [Arquitectura para colaboradores](/es/reference/contributor-architecture)
+- [Configuración del runtime](/es/guide/runtime-setup)
+- [Integración de MCP](/es/guide/mcp-integration)
+- [Solución de problemas](/es/guide/troubleshooting)
diff --git a/landing/product-docs/es/guide/agent-workflow.md b/landing/product-docs/es/guide/agent-workflow.md
new file mode 100644
index 00000000..70597fcc
--- /dev/null
+++ b/landing/product-docs/es/guide/agent-workflow.md
@@ -0,0 +1,121 @@
+---
+title: Flujo de trabajo de los agentes – Documentación de Agent Teams
+description: Comprende el ciclo de vida de las tareas, el tablero kanban, los mensajes, los registros de tareas, el trabajo en paralelo, los procesos en vivo y la comunicación entre equipos.
+lang: es-ES
+---
+
+# Flujo de trabajo de los agentes
+
+Agent Teams hace que el trabajo de los agentes sea visible como estado de las tareas, mensajes, registros y cambios de código revisables.
+
+## Modos
+
+| Modo | Descripción |
+| --- | --- |
+| Solo | Un compañero de equipo con tareas autogestionadas |
+| Equipo | Varios compañeros de equipo trabajando en paralelo y revisándose entre sí |
+
+Ambos modos comparten las mismas superficies de kanban, registros de tareas y revisión de código.
+
+## Ciclo de vida de las tareas
+
+Agent Teams realiza el seguimiento de cada tarea a lo largo de dos dimensiones independientes: el estado del trabajo y el estado de la revisión.
+
+| Dimensión | Estados | Descripción |
+| --- | --- | --- |
+| Estado del trabajo | `pending`, `in_progress`, `completed` | Indica si la tarea está esperando, si se está trabajando activamente en ella o si el propietario la ha terminado |
+| Estado de la revisión | `none`, `review`, `needsFix`, `approved` | Indica en qué punto del flujo de revisión posterior a la finalización se encuentra la tarea |
+
+El tablero kanban muestra la vista combinada, pero las dos dimensiones se mueven de forma independiente.
+
+### Flujo del estado del trabajo
+
+| Etapa | Qué ocurre | Propietario |
+| --- | --- | --- |
+| Pending | La tarea se crea y está lista, pero nadie ha empezado a trabajar todavía | Lead o usuario |
+| In progress | Los agentes trabajan y actualizan el estado de la tarea mediante las herramientas MCP del tablero | Compañeros de equipo |
+| Completed | El propietario publica un comentario con el resultado y marca la tarea como terminada | Compañero de equipo |
+
+### Flujo del estado de la revisión
+
+| Etapa | Qué ocurre | Propietario |
+| --- | --- | --- |
+| None | La tarea aún no está en revisión (puede estar pendiente, en progreso o recién completada) | — |
+| Review | Se ha solicitado la revisión; un revisor inspecciona el diff y el resultado | Revisor |
+| Needs fix | Se solicitaron cambios durante la revisión; el propietario debe actualizar | Compañero de equipo (propietario) |
+| Approved | La revisión se aprobó; la tarea queda finalizada | Revisor |
+
+### Planificación → In progress
+
+Cuando un compañero de equipo empieza una tarea, el estado del trabajo pasa a `in_progress`. El agente crea un comentario en la tarea con su plan y continúa trabajando. Todas las acciones de las herramientas nativas (read, bash, edit, write) se transmiten a un registro de tarea.
+
+### Completed → Review
+
+Cuando el compañero de equipo termina el trabajo, publica un comentario con el resultado y marca el estado del trabajo como `completed`. El lead o el revisor pueden entonces solicitar una revisión para iniciar el flujo de revisión.
+
+### Review → Approved
+
+Si la superficie de revisión muestra cambios aceptables, aprueba la revisión. La tarea queda finalizada y vinculada a su diff.
+
+::: warning Revisión con corrección primero
+Si se le piden cambios a un compañero de equipo durante la revisión, este debe publicar un comentario de seguimiento con las correcciones y, a continuación, el lead puede aprobar.
+:::
+
+## Tablero kanban
+
+El tablero es la superficie operativa principal. Te permite:
+
+- Examinar el trabajo abierto, bloqueado y en revisión
+- Abrir el detalle de la tarea e inspeccionar los registros del runtime
+- Revisar los cambios sin leer los archivos de sesión en bruto
+- Asignar o reasignar propietarios
+
+::: tip
+Usa los botones de acción rápida de las tarjetas para iniciar, completar o solicitar la revisión sin abrir el panel de detalle.
+:::
+
+## Mensajes y comentarios
+
+| Canal | Cuándo usarlo |
+| --- | --- |
+| Mensaje directo | Redirigir a un agente, hacer una pregunta rápida |
+| Comentario en la tarea | Notas que pertenecen a una tarea específica |
+
+Los comentarios conservan el contexto para una revisión posterior y aparecen en la línea de tiempo de la tarea.
+
+::: tip Prioriza los comentarios en la tarea
+Si la observación se refiere a una tarea específica, añádela como comentario en esa tarea en lugar de enviar un mensaje directo. Así el historial queda vinculado al trabajo.
+:::
+
+## Registros de tareas
+
+Los registros específicos de cada tarea aíslan la salida del runtime, las acciones y los mensajes de una asignación concreta. Úsalos para responder:
+
+- ¿Qué ejecutó este agente?
+- ¿Por qué cambió este archivo?
+- ¿Pidió ayuda a otro compañero de equipo?
+- ¿Qué tarea produjo este diff?
+
+### Lista de comprobación de validación
+
+Cuando una tarea parece atascada o su diff parece desvinculado, verifica el ciclo de vida en este orden:
+
+1. La tarea tiene el propietario esperado y pasó a `in_progress`.
+2. El propietario publicó un comentario en la tarea con el plan o la primera actualización de progreso.
+3. Los registros de la tarea muestran actividad del runtime dentro de la ventana de la tarea.
+4. Los cambios de archivos están vinculados a la misma tarea, propietario y sesión.
+5. El comentario final de la tarea incluye el comando de verificación y su resultado.
+
+Para una depuración más profunda, usa los comandos de evidencia persistida en [Solución de problemas](/es/guide/troubleshooting#task-log-triage). La interfaz es la superficie de trabajo, pero los archivos de tarea persistidos, los inboxes y la evidencia del runtime son la fuente para los errores difíciles de lanzamiento o de atribución.
+
+## Patrones de trabajo en paralelo
+
+Los compañeros de equipo pueden trabajar en tareas independientes al mismo tiempo. También puedes crear vínculos de dependencia (`blocked-by`) para que una tarea espere hasta que otra se complete. Observa el tablero para detectar carriles bloqueados y reasigna propietarios si un compañero de equipo está inactivo mientras otro está sobrecargado.
+
+## Procesos en vivo
+
+La sección de procesos en vivo muestra las URL y los procesos en ejecución cuando los agentes inician servidores o herramientas locales. Abre las URL directamente desde la aplicación para inspeccionar los resultados. Los procesos permanecen registrados hasta que se detienen explícitamente o el runtime finaliza.
+
+## Comunicación entre equipos
+
+Los agentes pueden enviar mensajes a otros equipos cuando los equipos están vinculados. Usa esto para traspasos, bibliotecas compartidas o comprobaciones de estado entre escuadrones.
diff --git a/landing/product-docs/es/guide/code-review.md b/landing/product-docs/es/guide/code-review.md
new file mode 100644
index 00000000..5cb24417
--- /dev/null
+++ b/landing/product-docs/es/guide/code-review.md
@@ -0,0 +1,119 @@
+---
+title: Revisión de código – Documentación de Agent Teams
+description: Inspecciona los diffs delimitados por tarea, acepta o rechaza hunks, deja comentarios en línea y gestiona los estados de revisión desde none hasta approved.
+lang: es-ES
+---
+
+# Revisión de código
+
+La revisión de código en Agent Teams está centrada en las tareas. Inspeccionas lo que cambió para una tarea específica en lugar de rastrear a través de un diff grande y sin estructura.
+
+## Superficie de revisión
+
+Para cada tarea completada que tocó archivos, la interfaz de revisión te permite:
+
+- Inspeccionar los archivos modificados con contexto de antes/después
+- Aceptar o rechazar hunks individuales
+- Dejar comentarios en línea
+- Conectar el diff con la descripción de la tarea y los registros del agente
+
+## Decisiones a nivel de hunk
+
+Acepta los cambios pequeños y correctos y rechaza los errores aislados sin descartar toda la tarea. Esto es útil cuando un agente resolvió la mayor parte de la tarea pero se extralimitó en un archivo.
+
+::: tip Acepta de forma incremental
+Si un diff es mayormente correcto, acepta primero los hunks buenos y solicita cambios únicamente para las partes que necesitan corrección. Esto mantiene el tablero en movimiento.
+:::
+
+Usa las decisiones a nivel de hunk para:
+
+| Situación | Acción |
+| --- | --- |
+| Cambio correcto y delimitado | Acepta el hunk |
+| Idea correcta, archivo equivocado o refactor demasiado amplio | Rechaza el hunk y solicita una corrección más acotada |
+| Cambio de comportamiento poco claro | Comenta y pide verificación |
+| Ruido de formato generado | Rechaza, a menos que el formato formara parte de la tarea |
+
+## Iniciar la revisión
+
+1. Abre una tarea completada
+2. Mira la pestaña **Changes**
+3. Si el diff parece razonable, haz clic en **Request Review** para mover la tarea a la columna review
+
+Durante la revisión la tarea aún no se considera done, por lo que otros compañeros de equipo o el lead todavía pueden comentar sobre ella.
+
+## Ciclo de revisión
+
+Un ciclo de revisión saludable se ve así:
+
+1. El propietario publica un comentario de resultado con el alcance modificado y la verificación
+2. El revisor abre el diff de la tarea y comprueba los hunks frente a la descripción de la tarea
+3. El revisor acepta los hunks buenos, rechaza los hunks malos o solicita cambios
+4. El propietario corrige únicamente el alcance solicitado y publica un comentario de seguimiento
+5. El revisor aprueba cuando el resultado de la tarea y el diff coinciden
+
+Ejemplo de comentario de solicitud de cambios:
+
+```text
+Please keep the copy improvements, but revert the unrelated runtime wording in the provider table. Add the `pnpm --dir landing docs:build` result before resubmitting.
+```
+
+## Estados de revisión
+
+| Estado | Significado |
+| --- | --- |
+| `none` | La tarea es nueva, está in progress o completada pero aún no está en revisión |
+| `review` | La tarea está activamente bajo revisión |
+| `needsFix` | Se solicitaron cambios; el propietario debe actualizar antes de la nueva aprobación |
+| `approved` | La revisión fue aceptada y la tarea está finalizada |
+
+## Flujo de trabajo de revisión por agentes
+
+Los equipos pueden revisar el trabajo de los demás antes de que tomes la decisión final. Esto detecta regresiones evidentes y mantiene el tablero honesto, pero aun así deberías revisar tú mismo las áreas de riesgo.
+
+La revisión por agentes es más útil cuando el revisor tiene una rúbrica clara. Por ejemplo, indícale a un revisor que compruebe solo la claridad de la documentación, solo la seguridad de IPC o solo la cobertura de pruebas. Las solicitudes amplias de "revisar todo" tienden a producir comentarios más débiles.
+
+### Estado de revisión gestionado por MCP
+
+Los cambios de estado de revisión (solicitar revisión, solicitar cambios, aprobar) están gestionados por herramientas. Dejar un comentario de "solicitar cambios" en una tarea **no** mueve la columna del kanban a `needsFix`: un lead o un agente debe llamar a la herramienta MCP apropiada:
+
+- `review_request_changes` — mueve la tarea a `needsFix` y notifica al propietario
+- `review_approve` — mueve la tarea a `approved` y finaliza la revisión
+
+Los comentarios por sí solos son insuficientes para las transiciones de estado. Para ver la lista completa de herramientas MCP de revisión y sus parámetros, consulta [Integración de MCP](/es/guide/mcp-integration).
+
+## Participantes de la revisión
+
+El lead del equipo es el revisor predeterminado. Puedes configurar revisores adicionales en la configuración del Kanban si quieres que los compañeros revisen el trabajo de los demás.
+
+## Qué comprobar manualmente
+
+Prioriza estas áreas al revisar:
+
+- **Autenticación de proveedores y detección del runtime** — ¿el agente cambió la configuración del runtime de una forma que rompería otras rutas?
+- **Límites de IPC, preload y sistema de archivos** — mantén separadas las responsabilidades de Electron
+- **Comportamiento de Git y worktree** - verifica el nombrado de ramas, los commits y los pushes; consulta [Estrategia de Git y worktree](/es/guide/git-worktree-strategy) para conocer los patrones de aislamiento.
+- **Lógica de parseo y ciclo de vida de las tareas** — los cambios en las referencias de tareas, el chunking o el filtrado pueden romper la entrega de mensajes
+- **Flujos de persistencia y revisión de código** — los cambios en el almacenamiento de tareas o en el estado de revisión deben mantenerse consistentes entre las capas de IPC
+
+Para conocer el diseño canónico de las funciones y los enlaces a los guardrails estrictos, usa [Arquitectura para colaboradores](/es/reference/contributor-architecture).
+
+## Verificación
+
+Prefiere comandos de verificación enfocados. No deberían usarse comandos amplios de formato o lint-fix a menos que la tarea pretenda explícitamente un cambio amplio de formato.
+
+Los buenos comentarios de verificación incluyen el comando y el resultado:
+
+```text
+Verified with `pnpm --dir landing docs:build`. Build passed.
+```
+
+Cuando se omite la verificación, el comentario de la tarea debería indicar por qué:
+
+```text
+Docs-only wording change. Build not run because the existing dev server was busy; checked Markdown links manually.
+```
+
+::: warning No apliques formato automático en todo el proyecto
+A menos que la tarea trate específicamente sobre formato, evita ejecutar `pnpm lint:fix` en archivos no relacionados. Crea ruido en la superficie de revisión.
+:::
diff --git a/landing/product-docs/es/guide/create-team.md b/landing/product-docs/es/guide/create-team.md
new file mode 100644
index 00000000..f75b5ef2
--- /dev/null
+++ b/landing/product-docs/es/guide/create-team.md
@@ -0,0 +1,106 @@
+---
+title: Crear un equipo – Documentación de Agent Teams
+description: Define roles, asigna proveedores y modelos, redacta un briefing de equipo y configura el aislamiento por worktree y los niveles de autonomía.
+lang: es-ES
+---
+
+# Crear un equipo
+
+Un equipo es un grupo con nombre de agentes con roles, un lead, un proyecto objetivo y un prompt de coordinación.
+
+## Primer equipo recomendado
+
+Empieza con un equipo pequeño:
+
+| Rol | Propósito |
+| -------- | --------------------------------------------------------- |
+| Lead | Divide el trabajo, crea tareas, coordina a los compañeros |
+| Builder | Implementa tareas acotadas |
+| Reviewer | Revisa el resultado, detecta regresiones, pide correcciones |
+
+Esta estructura te da suficiente coordinación para ver el valor del producto sin hacer ruidoso el primer lanzamiento.
+
+::: tip
+Puedes añadir más miembros más adelante. Empieza con poco, valida el flujo de trabajo y luego escala.
+:::
+
+## Asignar proveedores y modelos
+
+Cada miembro del equipo se ejecuta sobre un backend de proveedor. En el editor de equipos, elige un proveedor (Claude, Codex u OpenCode) y un modelo para cada miembro. La aplicación solo muestra los proveedores con los que ya te has autenticado.
+
+Se admite mezclar proveedores en un mismo equipo — por ejemplo, un lead de Claude con builders de OpenCode.
+
+::: info
+Gemini está disponible como ruta de proveedor compatible. Consulta [Proveedores y runtimes](/es/reference/providers-runtimes) para conocer las opciones de autenticación y el estado actual de los proveedores.
+:::
+
+## Redactar un buen briefing de equipo
+
+El briefing de equipo debería incluir:
+
+- el resultado que quieres
+- los archivos o áreas de funcionalidad que importan
+- los límites de riesgo, como "no refactorizar módulos no relacionados"
+- las expectativas de revisión
+- los comandos de verificación cuando los conozcas
+
+Ejemplo:
+
+```text
+Build a focused improvement to the download flow. Keep changes inside the landing app unless a shared helper is clearly needed. Create tasks before implementation, review each task diff, and run landing lint/build checks.
+```
+
+## Aislamiento por worktree
+
+Los miembros de OpenCode pueden usar el **aislamiento por worktree** para trabajar en un worktree de Git independiente en lugar del directorio de trabajo principal. Esto evita conflictos de archivos cuando varios agentes editan el mismo proyecto.
+
+::: warning
+El aislamiento por worktree requiere un proyecto rastreado por Git y, actualmente, está limitado a los miembros de OpenCode.
+:::
+
+Para activarlo, activa la opción **Worktree isolation** al añadir o editar un miembro de equipo de OpenCode.
+
+## Elegir la autonomía
+
+Agent Teams admite distintos niveles de control. Usa más autonomía para cambios rutinarios y una revisión más estricta para áreas de riesgo como la autenticación de proveedores, el IPC, la persistencia, los flujos de trabajo de Git y las herramientas de publicación.
+
+### Nivel de esfuerzo
+
+Cada miembro del equipo tiene un ajuste de **esfuerzo** que controla cuánto razonamiento invierte el proveedor antes de responder. Un esfuerzo mayor produce un resultado más exhaustivo a costa de tiempo y tokens.
+
+| Nivel | Cuándo usarlo |
+| ------ | ------------------------------------------------------------- |
+| Low | Consultas rápidas, pequeños cambios de formato, ediciones rutinarias |
+| Medium | Predeterminado para la mayoría de tareas de implementación |
+| High | Refactorizaciones complejas, cambios transversales, rutas de código de riesgo |
+
+La aplicación ofrece niveles adicionales (minimal, xhigh, max) para los proveedores que los admiten. Si un modelo no admite un esfuerzo configurable, el selector se desactiva y se usa el valor predeterminado del proveedor.
+
+### Modo rápido
+
+Activa el **Modo rápido** por miembro para priorizar la velocidad sobre la profundidad. Esto se corresponde con el modo rápido/de velocidad nativo del proveedor cuando está disponible. Ponlo en **On** para tareas rutinarias, en **Off** para trabajo cuidadoso, o en **Inherit** para seguir el valor predeterminado a nivel de equipo.
+
+### Limitar el contexto
+
+Activa **Limit context** para reducir la ventana de contexto de un miembro. Esto es útil para los modelos de Claude que admiten contexto extendido (p. ej. 1M de tokens) — limitar el contexto evita un uso innecesario de tokens y puede mejorar la latencia en tareas que no necesitan un contexto amplio.
+
+## Añadir contexto
+
+Adjunta archivos, capturas de pantalla o notas concretas cuando cambien la tarea de forma sustancial. Los agentes pueden usar las descripciones de las tareas, los comentarios y los archivos adjuntos como contexto duradero.
+
+## Vigilar la calidad de las tareas
+
+Los buenos equipos crean tareas que son:
+
+- lo bastante específicas para revisar
+- lo bastante pequeñas para terminar
+- vinculadas a un resultado visible
+- respaldadas por una ruta de verificación
+
+Si el lead crea tareas imprecisas, envía un mensaje directo pidiendo tareas más pequeñas y comprobables.
+
+## Próximos pasos
+
+- [Configuración del runtime](/es/guide/runtime-setup) — configura la autenticación de proveedores y los modelos
+- [Revisión de código](/es/guide/code-review) — acepta, rechaza o comenta los cambios de los agentes
+- [Solución de problemas](/es/guide/troubleshooting) — problemas habituales y soluciones
diff --git a/landing/product-docs/es/guide/git-worktree-strategy.md b/landing/product-docs/es/guide/git-worktree-strategy.md
new file mode 100644
index 00000000..9c584951
--- /dev/null
+++ b/landing/product-docs/es/guide/git-worktree-strategy.md
@@ -0,0 +1,102 @@
+---
+title: Estrategia de Git y worktree – Documentación de Agent Teams
+description: Decide cuándo usar el worktree principal, ramas de funcionalidades o el aislamiento por worktree de OpenCode para el trabajo de agentes en paralelo.
+lang: es-ES
+---
+
+# Estrategia de Git y worktree
+
+Git le da a Agent Teams la mejor ruta de revisión: diffs reducidos, visibilidad de las ramas, cambios acotados a las tareas y un trabajo en paralelo más seguro.
+
+## Elige una estrategia
+
+| Estrategia | Úsala cuando | Contrapartida |
+| --- | --- | --- |
+| Worktree principal | Trabajo en solitario, ediciones solo de documentación o un compañero de equipo a la vez | Simple, pero las ediciones en paralelo pueden chocar |
+| Rama de funcionalidad | Un equipo está trabajando en un cambio coherente | Objetivo de revisión limpio, pero los compañeros de equipo siguen compartiendo archivos |
+| Aislamiento por worktree | Varios compañeros de equipo de OpenCode pueden editar el mismo repositorio en paralelo | Mejor aislamiento, pero el merge y la revisión requieren más disciplina |
+
+Empieza por lo simple. Añade el aislamiento por worktree cuando las ediciones en paralelo sean probables, no porque cada tarea necesite un checkout separado.
+
+## Cuándo activar el aislamiento por worktree
+
+Actívalo para los compañeros de equipo de OpenCode cuando:
+
+- dos o más compañeros de equipo puedan editar el mismo repositorio a la vez
+- una tarea pueda ejecutar formateadores, generadores de código o pruebas amplias
+- quieras que la rama y el diff de cada compañero de equipo se mantengan separados
+- el workspace del lead esté sucio y no deba recibir ediciones directas
+
+Mantenlo desactivado cuando:
+
+- la tarea sea de solo lectura
+- un único compañero de equipo se encargue de todas las ediciones
+- el repositorio no esté bajo control de versiones de Git
+- necesites una ruta de runtime que no admita este modo de aislamiento
+
+::: warning
+El aislamiento por worktree se aplica actualmente a los miembros de OpenCode y requiere un proyecto bajo control de versiones de Git.
+:::
+
+## Higiene de las ramas
+
+Antes de empezar el trabajo en paralelo:
+
+```bash
+git status --short
+git branch --show-current
+```
+
+Usa una rama limpia cuando sea posible. Si el worktree principal ya tiene cambios del usuario, indica a los agentes que no reviertan archivos no relacionados y que mantengan el alcance de la tarea acotado.
+
+Estilo de rama recomendado:
+
+```text
+agent//
+```
+
+Ejemplos:
+
+```text
+agent/docs/mcp-guide
+agent/review/task-log-filtering
+agent/ui/code-review-polish
+```
+
+## Flujo de revisión
+
+Para los worktrees aislados, revisa el diff del compañero de equipo antes de hacer merge o aplicar los cambios de vuelta al workspace principal.
+
+1. Confirma que el comentario con el resultado de la tarea nombra el alcance modificado y la verificación.
+2. Inspecciona el diff de la tarea en la interfaz de revisión.
+3. Solicita cambios en la tarea si el diff toca archivos no relacionados.
+4. Aprueba solo después de que las pruebas o las comprobaciones manuales coincidan con el riesgo de la tarea.
+5. Haz merge o aplica los cambios de forma deliberada.
+
+No hagas merge automático del resultado del worktree solo porque la tarea esté completa. Que esté completa significa que el agente cree que el trabajo está listo para revisión.
+
+## Política de conflictos
+
+Usa esta política para los equipos en paralelo:
+
+| Situación | Acción |
+| --- | --- |
+| Dos compañeros de equipo editan el mismo archivo | Pausa una tarea o haz que un único responsable se encargue de la integración |
+| Archivos generados modificados de forma amplia | Exige un comentario que explique el generador y el comando |
+| El worktree principal tiene cambios no relacionados | Consérvalos y revisa solo los cambios propios de la tarea |
+| La rama del worktree diverge | Haz rebase o merge manualmente tras la revisión, no dentro de una tarea de agente imprecisa |
+
+## Ejemplo de prompt de tarea
+
+```text
+Implement the settings validation fix in your assigned worktree. Keep edits inside src/features/settings and focused tests. Do not touch provider auth or task storage. Post the test command and result before completing the task.
+```
+
+Este prompt funciona porque nombra el área permitida, los límites sensibles y la evidencia de finalización.
+
+## Guías relacionadas
+
+- [Crear un equipo](/es/guide/create-team)
+- [Revisión de código](/es/guide/code-review)
+- [Ejemplos de briefing de equipo](/es/guide/team-brief-examples)
+- [Configuración del runtime](/es/guide/runtime-setup)
diff --git a/landing/product-docs/es/guide/installation.md b/landing/product-docs/es/guide/installation.md
new file mode 100644
index 00000000..d363289a
--- /dev/null
+++ b/landing/product-docs/es/guide/installation.md
@@ -0,0 +1,129 @@
+---
+title: Instalación – Documentación de Agent Teams
+description: Descarga e instala Agent Teams para macOS, Windows o Linux. Cubre las builds empaquetadas, la configuración desde el código fuente, las actualizaciones automáticas y los requisitos.
+lang: es-ES
+---
+
+# Instalación
+
+Agent Teams se distribuye como una aplicación de escritorio para macOS, Windows y Linux.
+
+::: tip La vía más rápida
+1. Descarga la build para tu plataforma a continuación
+2. Inicia la aplicación: empieza con el modelo gratuito sin autenticación o conecta la autenticación de un proveedor desde la interfaz
+3. Comienza el [inicio rápido](/es/guide/quickstart) para crear tu primer equipo
+
+Arranque de la aplicación de escritorio: ejecuta `pnpm dev` para la aplicación de Electron. No inicies el modo de desarrollo de navegador/web para el uso normal.
+:::
+
+## Descargar builds
+
+Usa la página de descarga o la última [versión de GitHub](https://github.com/777genius/agent-teams-ai/releases) cuando quieras la aplicación empaquetada:
+
+- macOS Apple Silicon: `.dmg`
+- macOS Intel: `.dmg`
+- Windows: `.exe`
+- Linux: `.AppImage`, `.deb`, `.rpm` o `.pacman`
+
+::: warning Windows SmartScreen
+Las aplicaciones de código abierto sin firmar o recién publicadas pueden activar SmartScreen. Si confías en la fuente de la versión, elige **More info** y luego **Run anyway**.
+:::
+
+## Requisitos
+
+La aplicación empaquetada está diseñada para una incorporación sin configuración. Puedes empezar con el modelo gratuito sin autenticación: sin registro, claves de API ni tarjeta de crédito. Si quieres más modelos, la aplicación te guía en la detección del runtime y la autenticación del proveedor desde la interfaz.
+
+Para modelos de pago o respaldados por una cuenta, conecta al menos un proveedor:
+
+| Proveedor | Método de acceso |
+| ------------------ | ------------------------------------------------- |
+| Claude (Anthropic) | Inicio de sesión de Claude Code CLI o clave de API |
+| Codex (OpenAI) | Inicio de sesión de Codex CLI o clave de API |
+| Gemini (Google) | Google ADC, Gemini CLI o clave de API |
+| OpenCode | Modelo gratuito incluido sin autenticación, o clave de API para un backend compatible (p. ej. OpenRouter) |
+
+::: info
+Gemini está disponible como una ruta de proveedor compatible. Consulta [Proveedores y runtimes](/es/reference/providers-runtimes) para conocer las opciones de autenticación y el estado actual de todos los proveedores.
+:::
+
+Para el desarrollo desde el código fuente, también necesitas:
+
+| Herramienta | Versión |
+| ----------- | ----------- |
+| Node.js | 24.16.0 LTS |
+| pnpm | 10+ |
+
+En macOS, los binarios precompilados oficiales de Node.js 24 requieren macOS 13.5+.
+
+## Ejecutar desde el código fuente
+
+
+
+```bash
+git clone https://github.com/777genius/agent-teams-ai.git
+cd agent-teams-ai
+pnpm install
+pnpm dev
+```
+
+`pnpm dev` inicia la aplicación de escritorio de Electron con recarga en caliente. Este es el objetivo de desarrollo predeterminado — no inicies un servidor de desarrollo web de navegador para el desarrollo normal. La ruta del navegador carece del IPC de escritorio completo, la terminal, la autenticación del proveedor y el comportamiento del ciclo de vida del equipo.
+
+La rama `main` lleva el último desarrollo estable. Cambia a ramas de funciones solo si necesitas un cambio específico aún no publicado.
+
+## Verificar la configuración
+
+Después de instalar, confirma que la build esté en buen estado:
+
+```bash
+# Check that the desktop app compiles and starts
+pnpm typecheck
+
+# Verify the VitePress documentation site builds
+pnpm --dir landing docs:build
+```
+
+Si `pnpm typecheck` informa de errores de tipo, busca una versión más reciente de las dependencias o de la versión fijada de TypeScript. Si `pnpm --dir landing docs:build` falla, inspecciona `landing/product-docs/` en busca de errores de sintaxis en el markdown o la configuración.
+
+Si estás editando esta documentación, ejecuta la build para verificar tus cambios:
+
+```bash
+pnpm --dir landing docs:build
+```
+
+## Actualizaciones automáticas
+
+La aplicación empaquetada busca actualizaciones automáticamente al iniciar y periódicamente mientras se ejecuta. Cuando hay una actualización disponible, la aplicación te pide que la descargues e instales. También puedes comprobarlo manualmente desde el menú de la aplicación.
+
+::: tip
+Las actualizaciones automáticas no están disponibles al ejecutar desde el código fuente. Trae los últimos cambios y vuelve a ejecutar `pnpm install` cuando cambien las dependencias.
+:::
+
+## Actualizar desde el código fuente
+
+Si ejecutas desde el código fuente, trae la rama `main` y vuelve a ejecutar la instalación cuando cambien las dependencias:
+
+```bash
+git pull
+pnpm install
+```
+
+Después de actualizar, verifica la build y la documentación:
+
+```bash
+pnpm typecheck
+pnpm --dir landing docs:build
+```
+
+Usa siempre `pnpm dev` (Electron) — no el servidor de desarrollo del navegador — para el desarrollo normal.
+
+## Próximos pasos
+
+- [Inicio rápido](/es/guide/quickstart) — desde la instalación hasta el primer equipo en ejecución
+- [Configuración del runtime](/es/guide/runtime-setup) — autenticación del proveedor y selección de modelo por runtime
+- [Crear un equipo](/es/guide/create-team) — formas de equipo recomendadas y redacción del briefing
+
+### Para colaboradores
+
+- [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) — navegación del repositorio y punteros de arquitectura
+- [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) — convenciones de trabajo y reglas del proyecto
+- [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) — guardrails de implementación estrictos
diff --git a/landing/product-docs/es/guide/mcp-integration.md b/landing/product-docs/es/guide/mcp-integration.md
new file mode 100644
index 00000000..0c7efb4a
--- /dev/null
+++ b/landing/product-docs/es/guide/mcp-integration.md
@@ -0,0 +1,225 @@
+---
+title: Integración de MCP – Documentación de Agent Teams
+description: Configura MCP en Agent Teams para operaciones del tablero, coordinación entre compañeros de equipo, servidores de herramientas externas y desarrollo de herramientas personalizadas.
+lang: es-ES
+---
+
+# Integración de MCP
+
+Agent Teams utiliza MCP en dos capas prácticas:
+
+| Capa | Qué hace | Quién la usa |
+| --- | --- | --- |
+| Servidor de tablero integrado | Expone las herramientas de tareas, mensajes, revisión, procesos, runtime y comunicación entre equipos de Agent Teams | Leads y compañeros de equipo lanzados por la aplicación |
+| Servidores MCP externos | Añaden herramientas opcionales como automatización de navegador, contexto de diseño, búsqueda en documentación o sistemas de la empresa | Usuarios y runtimes configurados |
+
+Mantén esas capas separadas. El servidor MCP integrado `agent-teams` es la forma en que los agentes se coordinan dentro de Agent Teams. Los servidores MCP externos son herramientas de runtime opcionales.
+
+## Cómo inyecta MCP Agent Teams
+
+Cuando la aplicación de escritorio lanza miembros de equipo basados en Claude, escribe un archivo JSON temporal `--mcp-config` que contiene el servidor integrado `agent-teams`:
+
+```json
+{
+ "mcpServers": {
+ "agent-teams": {
+ "command": "node",
+ "args": ["/path/to/agent-teams-mcp/index.js"],
+ "env": {
+ "AGENT_TEAMS_MCP_CLAUDE_DIR": "/Users/you/.claude"
+ }
+ }
+ }
+}
+```
+
+En desarrollo, el comando puede apuntar a `mcp-server/src/index.ts` a través de `tsx`. En las compilaciones empaquetadas, la aplicación copia el servidor MCP incluido a una ruta estable de datos de la aplicación y lo ejecuta con Node. El archivo generado es propiedad de la aplicación y se limpia con el mejor esfuerzo posible.
+
+Los servidores MCP de usuario y de proyecto permanecen separados. La aplicación lee los servidores instalados desde:
+
+| Ámbito | Ubicación |
+| --- | --- |
+| Usuario | `~/.claude.json` bajo `mcpServers` |
+| Entrada de proyecto local en la configuración de Claude | `~/.claude.json` bajo `projects[projectPath].mcpServers` |
+| Proyecto | `/.mcp.json` bajo `mcpServers` |
+
+Prefiere el ámbito de proyecto para herramientas que pertenecen a un único repositorio. Prefiere el ámbito de usuario para herramientas que reutilizas en proyectos no relacionados.
+
+## Ejemplo de `.mcp.json` de proyecto
+
+Coloca este archivo en la raíz del proyecto cuando un equipo deba ver el mismo servidor con ámbito de proyecto:
+
+```json
+{
+ "mcpServers": {
+ "docs-search": {
+ "command": "npx",
+ "args": ["-y", "@acme/docs-search-mcp"],
+ "env": {
+ "DOCS_INDEX_PATH": "./docs-index"
+ }
+ },
+ "local-browser": {
+ "command": "node",
+ "args": ["./tools/mcp/browser-server.js"]
+ }
+ }
+}
+```
+
+Mantén los secretos fuera de los archivos `.mcp.json` confirmados en el control de versiones. Coloca las credenciales en tu shell, en una configuración con ámbito de usuario o en el flujo de instalación de MCP personalizado de la aplicación si el valor debe permanecer local.
+
+## Flujo de trabajo de MCP del tablero
+
+Los agentes deben usar las herramientas MCP del tablero cuando el trabajo pertenece a una tarea:
+
+1. Lee el contexto más reciente de la tarea.
+2. Inicia la tarea solo cuando realmente comiences a trabajar.
+3. Añade comentarios de tarea para bloqueos, planes y resultados finales.
+4. Marca la tarea como completada después de publicar el comentario con el resultado.
+5. Envía un mensaje breve cuando un lead o un compañero de equipo necesite conocer el resultado.
+
+Ejemplo de flujo de un agente:
+
+```text
+task_get -> task_start -> edit/test -> task_add_comment -> task_complete -> message_send
+```
+
+Usa un mensaje directo para la coordinación. Usa un comentario de tarea para dejar un historial duradero de la tarea.
+
+::: tip
+Si la nota afecta a la revisión, la verificación, un cambio de alcance o un bloqueo, ponla en la tarea.
+:::
+
+## Herramientas integradas de Agent Teams
+
+El servidor MCP registra herramientas desde `agent-teams-controller/src/mcpToolCatalog.js`. El bucle de registro vive en `mcp-server/src/tools/index.ts`, y cada grupo tiene su propio archivo bajo `mcp-server/src/tools/`.
+
+Herramientas operativas habituales:
+
+| Herramienta | Uso |
+| --- | --- |
+| `task_get` | Lee el contexto más reciente de la tarea, los comentarios, los adjuntos, el estado y las relaciones |
+| `task_start` | Marca una tarea en in progress cuando el trabajo realmente comienza |
+| `task_add_comment` | Añade notas de bloqueo, notas de verificación, planes y resúmenes de resultado final |
+| `task_complete` | Completa una tarea después de publicar el comentario con el resultado final |
+| `message_send` | Envía un mensaje visible en la bandeja de entrada a un lead, un compañero de equipo o un usuario |
+| `review_request`, `review_start`, `review_approve`, `review_request_changes` | Avanzan los flujos de trabajo de revisión con ámbito de tarea |
+| `process_register`, `process_list`, `process_stop`, `process_unregister` | Hacen seguimiento de los servidores de desarrollo, watchers y otros servicios en segundo plano propiedad de los compañeros de equipo |
+
+Los nombres de las herramientas pueden aparecer ante los runtimes con prefijos de espacio de nombres de MCP, por ejemplo `mcp__agent-teams__task_get`. El nombre canónico de la herramienta dentro del servidor MCP sigue siendo `task_get`.
+
+## Registrar una nueva herramienta integrada
+
+Para el trabajo en el repositorio de Agent Teams, añade herramientas integradas del tablero a través de la estructura existente de FastMCP:
+
+1. Añade la implementación de la herramienta al archivo correspondiente en `mcp-server/src/tools/`, o crea un nuevo archivo de grupo si el dominio es realmente nuevo.
+2. Añade el nombre de la herramienta al grupo apropiado en `agent-teams-controller/src/mcpToolCatalog.js`.
+3. Conecta un nuevo grupo a través de `mcp-server/src/tools/index.ts` solo cuando se necesite un nuevo grupo de dominio.
+4. Valida la entrada con `zod` y llama a la API del controlador en lugar de leer los archivos del tablero directamente.
+5. Añade pruebas específicas en `mcp-server/test/tools.test.ts` o un caso e2e cuando el transporte sea relevante.
+
+Estructura mínima:
+
+```ts
+server.addTool({
+ name: 'task_example',
+ description: 'Explain what this tool does for agents.',
+ parameters: z.object({
+ teamName: z.string().min(1),
+ claudeDir: z.string().min(1).optional(),
+ taskId: z.string().min(1)
+ }),
+ execute: async ({ teamName, claudeDir, taskId }) => {
+ assertConfiguredTeam(teamName, claudeDir);
+ const controller = getController(teamName, claudeDir);
+ return jsonTextContent(controller.tasks.getTask(taskId));
+ }
+});
+```
+
+No crees una herramienta que omita la validación del controlador, modifique archivos de equipo no relacionados o exponga un acceso amplio al sistema de archivos o a los procesos sin una necesidad concreta de la tarea.
+
+## Servidores MCP externos
+
+Usa servidores MCP externos cuando un compañero de equipo necesite una conexión duradera a una herramienta, no solo un prompt con contexto pegado.
+
+Buenos casos de uso:
+
+- herramientas de pruebas de navegador o de sitios web
+- herramientas de datos de diseño o de producto
+- documentación interna y sistemas de búsqueda
+- sistemas de seguimiento de incidencias o de soporte
+- herramientas de inspección de bases de datos con credenciales de solo lectura
+
+Malos casos de uso:
+
+- secretos pegados en los prompts
+- archivos puntuales que se pueden adjuntar directamente
+- herramientas que modifican sistemas de producción sin revisión
+- acceso amplio al sistema de archivos local cuando basta con un ámbito de proyecto más reducido
+
+## Ámbitos
+
+Agent Teams reconoce ámbitos de MCP compartidos y orientados al proyecto.
+
+| Ámbito | Úsalo cuando |
+| --- | --- |
+| Usuario o Global | El mismo servidor debe estar disponible en varios proyectos |
+| Proyecto o Local | El servidor pertenece a un único repositorio, espacio de trabajo o contexto de equipo |
+
+Prefiere el ámbito más reducido que aún haga utilizable el flujo de trabajo. Los servidores con ámbito de proyecto son más fáciles de razonar durante la revisión porque la herramienta pertenece al proyecto que se está modificando.
+
+## Lista de comprobación de configuración
+
+Antes de asignar una tarea que dependa de un servidor MCP:
+
+1. Instala o configura el servidor.
+2. Confirma que aparece en la lista de MCP instalados de la aplicación para el ámbito previsto.
+3. Ejecuta los diagnósticos desde el registro de MCP o la interfaz de extensiones cuando esté disponible.
+4. Empieza con una tarea de solo lectura de bajo riesgo.
+5. Menciona el uso previsto de la herramienta MCP en la descripción de la tarea o en el briefing del equipo.
+
+Si un servidor falla en los diagnósticos, corrige eso primero. Un mejor prompt de tarea no reparará un comando ausente, una ruta de configuración incorrecta o unas credenciales rechazadas.
+
+## Instalar un servidor personalizado desde la aplicación
+
+La aplicación de escritorio expone las API del registro de MCP a través de IPC de Electron para búsqueda, exploración, instalación, instalación personalizada, desinstalación, lectura del estado instalado y diagnósticos. Las instalaciones personalizadas validan el nombre del servidor, el ámbito, la ruta del proyecto, los nombres de las variables de entorno y las cabeceras HTTP antes de llamar a la ruta de instalación del runtime.
+
+Usa la instalación personalizada cuando tengas un paquete MCP que aún no esté en el registro:
+
+| Campo | Ejemplo |
+| --- | --- |
+| Nombre del servidor | `docs-search` |
+| Ámbito | `project` para este repositorio, `user` para todos los proyectos |
+| Tipo | `stdio` para comandos locales, `http` o `sse` para servidores remotos |
+| Paquete | `@acme/docs-search-mcp` |
+| Env | `DOCS_INDEX_PATH=./docs-index` |
+
+Tras la instalación, ejecuta los diagnósticos y crea una pequeña tarea de solo lectura para comprobar la superficie de la herramienta antes de asignar trabajo más grande.
+
+## Ejemplo de tarea
+
+```text
+Audit the docs home page with the browser MCP. Check desktop and mobile widths, capture any layout issue as a task comment, and only edit landing/product-docs files. Run `pnpm --dir landing docs:build` before completion.
+```
+
+Esto funciona porque nombra la herramienta, la superficie, el límite de escritura y el paso de verificación.
+
+## Reglas de seguridad
+
+- No des todos los servidores MCP a todos los compañeros de equipo por defecto.
+- Mantén las herramientas con capacidad de escritura fuera de los equipos amplios, salvo que la revisión las requiera.
+- Prefiere credenciales de solo lectura para las tareas de inspección.
+- Pon el uso de herramientas con impacto en producción detrás de comentarios de tarea explícitos y de revisión.
+- Trata los fallos de diagnóstico de MCP como fallos de configuración, no como fallos del agente.
+- Evita confirmar secretos en `.mcp.json` o en los prompts.
+- Usa valores absolutos de `projectPath` al instalar servidores con ámbito de proyecto a través de la aplicación.
+- No edites los archivos `agent-teams-mcp-*.json` generados por la aplicación; son artefactos temporales de lanzamiento.
+
+## Guías relacionadas
+
+- [Configuración del runtime](/es/guide/runtime-setup)
+- [Ejemplos de briefing de equipo](/es/guide/team-brief-examples)
+- [Flujo de trabajo de los agentes](/es/guide/agent-workflow)
+- [Desarrolladores](/es/developers/)
diff --git a/landing/product-docs/es/guide/quickstart.md b/landing/product-docs/es/guide/quickstart.md
new file mode 100644
index 00000000..353352f1
--- /dev/null
+++ b/landing/product-docs/es/guide/quickstart.md
@@ -0,0 +1,193 @@
+---
+title: Inicio rápido – Documentación de Agent Teams
+description: Pasa de una instalación nueva a un equipo de agentes de IA en funcionamiento en unos minutos. Cubre la instalación, la selección del runtime, la creación del equipo y la primera revisión de código.
+lang: es-ES
+---
+
+# Inicio rápido
+
+Esta guía te lleva de una instalación nueva a un equipo en funcionamiento en unos minutos.
+
+## El camino más corto
+
+```bash
+# 1. Install prerequisites
+node --version # need 20+
+pnpm --version # need 10+
+
+# 2. Clone and install
+git clone https://github.com/777genius/agent-teams-ai.git
+cd agent-teams-ai
+pnpm install
+
+# 3. Start the desktop app (default workflow)
+pnpm dev
+
+# 4. Verify a docs-only change
+pnpm --dir landing docs:build
+```
+
+La aplicación de escritorio Electron (`pnpm dev`) es el objetivo principal: no uses el servidor de desarrollo web/navegador para el desarrollo normal. El camino del navegador carece del IPC de escritorio, la terminal, la autenticación de proveedores y el comportamiento del ciclo de vida del equipo.
+
+## Antes de empezar
+
+Necesitas:
+
+- **Un ordenador** con macOS, Windows o Linux
+- **(Recomendado) Un proyecto gestionado con Git** — el aislamiento con worktree y la revisión de diffs dependen de Git
+- **(Opcional) Acceso a un proveedor** — la configuración del runtime detecta los proveedores disponibles desde la UI, pero algunos caminos requieren autenticación existente (Anthropic, OpenAI, etc.)
+
+Si alguno de los pasos siguientes no funciona, consulta la [guía de solución de problemas](/es/guide/troubleshooting#team-does-not-launch) para ver soluciones habituales.
+
+Para conocer las convenciones del proyecto y las pautas de arquitectura, consulta estos archivos canónicos antes de hacer cambios:
+
+- [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) — navegación del repositorio y punteros de arquitectura
+- [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) — convenciones de trabajo y reglas del proyecto
+- [Estándar de arquitectura de funciones](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) — estructura para nuevas funciones
+- [Runbook de depuración](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) — diagnósticos de lanzamiento y de compañeros de equipo
+
+## 1. Ejecutar desde el código fuente o descargar
+
+**Descarga la aplicación empaquetada** para macOS, Windows o Linux desde la página de descarga - no se necesitan requisitos previos. Empieza con el modelo gratuito sin autenticación, o conecta la autenticación de un proveedor desde la UI cuando quieras más modelos.
+
+**O ejecuta desde el código fuente** para el desarrollo:
+
+Requiere Node.js 24.16.0 LTS y pnpm 10+. En macOS, los binarios precompilados oficiales de Node.js 24 requieren macOS 13.5+.
+
+```bash
+git clone https://github.com/777genius/agent-teams-ai.git
+cd agent-teams-ai
+pnpm install
+pnpm dev
+```
+
+`pnpm dev` inicia la aplicación de escritorio Electron con recarga en caliente. Este es el objetivo de desarrollo predeterminado. No inicies un servidor de desarrollo web en el navegador para el desarrollo normal: el camino del navegador carece del IPC de escritorio completo, la terminal, la autenticación de proveedores y el comportamiento del ciclo de vida del equipo.
+
+## 2. Abrir o crear un proyecto
+
+Inicia la aplicación y selecciona el directorio del proyecto en el que quieres que trabajen los agentes. Agent Teams lee los archivos locales del proyecto y el estado del runtime/sesión para que la UI pueda mostrar tareas, registros, diffs y la actividad de los compañeros de equipo.
+
+::: tip
+Elige un proyecto gestionado con Git para tener la mejor experiencia. Tanto el aislamiento con worktree como la revisión basada en diffs dependen de Git.
+:::
+
+Antes de lanzar un equipo, comprueba que el proyecto tiene una base lo bastante limpia:
+
+```bash
+git status --short
+```
+
+No necesitas un árbol perfectamente limpio, pero deberías saber qué cambios son tuyos antes de que los agentes empiecen a editar. Esto hace que los diffs de las tareas y la revisión a nivel de hunk sean mucho más fiables.
+
+## 3. Elegir un camino de runtime
+
+El flujo de configuración detecta automáticamente los runtimes instalados en tu máquina. Una primera configuración habitual es:
+
+| Runtime | Bueno para |
+| -------- | ----------------------------------------------- |
+| Claude | Usuarios de Claude Code y acceso existente a Anthropic |
+| Codex | Flujos de trabajo nativos de Codex y acceso a OpenAI |
+| OpenCode | Modelo gratuito sin autenticación, equipos multimodelo y muchos backends de proveedores |
+
+::: info
+Gemini está disponible como un camino de proveedor compatible. Consulta [Proveedores y runtimes](/es/reference/providers-runtimes) para ver las opciones de autenticación y el estado actual de los proveedores.
+:::
+
+Consulta [Configuración del runtime](/es/guide/runtime-setup) para una configuración detallada por proveedor.
+
+Para verificar un runtime de pago o respaldado por una cuenta fuera de la aplicación, comprueba el binario y prueba la autenticación:
+
+```bash
+# Check that the runtime is installed and on PATH
+command -v claude && claude --version
+command -v codex && codex --version
+command -v opencode && opencode --version
+```
+
+Si el comando falla, primero arregla la instalación del runtime o el `PATH`. Los prompts del equipo no pueden sortear un binario que falta o la falta de autenticación del proveedor para los modelos que la requieren.
+
+::: tip
+Si el binario se encuentra pero la aplicación informa de "not logged in", es posible que el entorno difiera entre tu terminal y la aplicación. Consulta el [registro de diagnóstico de autenticación](/es/guide/troubleshooting#auth-diagnostic-log) para compararlos.
+:::
+
+## 4. Crear tu primer equipo
+
+Crea un equipo con un lead y uno o más especialistas. Mantén pequeño el primer equipo: un lead, un agente de implementación y un agente orientado a la revisión son suficientes para validar el flujo de trabajo.
+
+Consulta [Crear un equipo](/es/guide/create-team) para ver la estructura recomendada y consejos.
+
+Para el primer lanzamiento, prefiere una forma de equipo como esta:
+
+| Miembro | Responsabilidad | Notas |
+| --- | --- | --- |
+| Lead | Dividir el objetivo en tareas y coordinar el estado | Mantenlo en el proveedor más fiable que tengas |
+| Builder | Implementar tareas acotadas | Dale límites claros de archivo o función |
+| Reviewer | Revisar el trabajo completado | Pídele que se centre en regresiones y pruebas faltantes |
+
+Evita empezar con cinco o más compañeros de equipo. Más agentes aumentan la concurrencia, los registros, el uso del proveedor y el riesgo de conflictos antes de que sepas que la configuración está en buen estado.
+
+## 5. Darle al lead un objetivo concreto
+
+Escribe el objetivo como lo harías al instruir a un lead de ingeniería:
+
+```text
+Improve the onboarding flow. Split the work into tasks, keep changes small, and ask for review before broad refactors.
+```
+
+Los buenos primeros prompts incluyen un alcance concreto, límites de seguridad y verificación:
+
+```text
+Improve the docs quickstart. Keep edits inside landing/product-docs. Add practical examples, preserve existing VitePress syntax, and run `pnpm --dir landing docs:build` before marking tasks done.
+```
+
+Evita prompts vagos como "make the app better" para la primera ejecución. El lead puede descomponer objetivos grandes, pero una mejor entrada produce tareas más pequeñas y una revisión más limpia.
+
+::: tip
+Si el equipo se lanza pero no aparece ninguna tarea, comprueba si el lead recibió tu prompt. Consulta [faltan respuestas de los agentes](/es/guide/troubleshooting#agent-replies-are-missing) para ver diagnósticos.
+:::
+
+El lead crea tareas, asigna trabajo y coordina a los compañeros de equipo. Puedes seguir el progreso en el tablero kanban e intervenir con comentarios o mensajes directos en cualquier momento.
+
+## 6. Revisar los resultados
+
+Abre las tareas completadas o listas para revisión, inspecciona el diff y acepta, rechaza o comenta cambios individuales. Usa los registros de las tareas cuando necesites entender por qué un agente tomó una decisión.
+
+Consulta [Revisión de código](/es/guide/code-review) para ver el flujo de trabajo de revisión completo.
+
+Antes de aprobar la primera tarea, comprueba tres cosas:
+
+1. El comentario de la tarea explica qué cambió
+2. Los archivos modificados coinciden con el alcance de la tarea
+3. El resultado de la verificación es visible en el comentario o los registros de la tarea
+
+## Errores comunes
+
+| Síntoma | Causa probable | Comprobación |
+| --- | --- | --- |
+| La aplicación no detecta un runtime | El binario no está en el `PATH`, o la aplicación y la terminal ven entornos diferentes | Ejecuta `command -v ` en una terminal y luego usa el mismo entorno de terminal para lanzar la aplicación |
+| El lanzamiento del equipo se queda colgado | Falta la autenticación del proveedor para un modelo de pago/cuenta, cadena de modelo incorrecta o no se encuentra el binario del runtime | Consulta [Solución de problemas](/es/guide/troubleshooting#team-does-not-launch) |
+| El carril de OpenCode atascado en `registered` | La evidencia del carril aún no se ha confirmado, o hay una discrepancia en la cadena de modelo | Inspecciona `~/.claude/teams//.opencode-runtime/lanes/` |
+| Faltan respuestas de los agentes | Problema de reintento de entrega del runtime, de análisis o de atribución de tareas | Abre los registros de la tarea y revisa el ledger de entrega |
+| El proveedor devuelve errores 429 | Se alcanzó el límite de velocidad | Espera a que se restablezca o cambia de modelo/proveedor |
+
+## Próximos pasos
+
+- [Crear un equipo](/es/guide/create-team) — formas de equipo recomendadas y redacción del briefing
+- [Configuración del runtime](/es/guide/runtime-setup) — autenticación de proveedores y selección de modelo
+- [Revisión de código](/es/guide/code-review) — revisar, aprobar o solicitar cambios
+
+### Para colaboradores
+
+Si vas a modificar Agent Teams o esta documentación, empieza por los archivos canónicos del proyecto en la raíz del repositorio:
+
+- [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) — convenciones de trabajo y reglas del proyecto
+- [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) — capa de navegación para las pautas de arquitectura e implementación
+- [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) — guardrails estrictos de implementación
+- [Estándar de arquitectura de funciones](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) — estructura para nuevas funciones
+- [Runbook de depuración de equipos de agentes](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) — diagnósticos de lanzamiento, bootstrap y de compañeros de equipo
+
+Para verificar que este sitio de documentación se compila correctamente:
+
+```bash
+pnpm --dir landing docs:build
+```
diff --git a/landing/product-docs/es/guide/runtime-setup.md b/landing/product-docs/es/guide/runtime-setup.md
new file mode 100644
index 00000000..e46404b0
--- /dev/null
+++ b/landing/product-docs/es/guide/runtime-setup.md
@@ -0,0 +1,179 @@
+---
+title: Configuración del runtime – Documentación de Agent Teams
+description: Configura los runtimes de Claude Code, Codex u OpenCode. Cubre la autenticación, el acceso a proveedores, el modo multimodelo y las comprobaciones previas al lanzamiento.
+lang: es-ES
+---
+
+# Configuración del runtime
+
+Agent Teams es una capa de coordinación. El trabajo real del modelo se ejecuta a través de runtimes y proveedores locales compatibles.
+
+::: tip Inicio rápido: elige tu primer runtime
+| Si tú ... | Empieza con |
+| --- | --- |
+| Ya usas Claude Code o tienes acceso a Anthropic | **Claude**: autenticación familiar, configuración mínima |
+| Usas Codex o flujos de trabajo basados en OpenAI | **Codex**: integración nativa |
+| Quieres probar Agent Teams sin registro ni claves de API | **OpenCode**: usa el modelo gratuito incluido sin autenticación |
+| Quieres enrutamiento multimodelo o una amplia cobertura de proveedores | **OpenCode**: el más flexible, una sola configuración para muchos backends |
+| No estás seguro de qué runtime encaja | **OpenCode**: cubre la mayor cantidad de opciones de proveedores y te permite cambiar más adelante |
+
+Empieza con un runtime y un compañero de equipo. Confirma que un lanzamiento funciona antes de expandirte al modo multimodelo.
+:::
+
+## Requisitos previos
+
+Antes de lanzar un equipo, asegúrate de que:
+
+- El binario del runtime está instalado y en tu `PATH`.
+- Tu cuenta de proveedor tiene acceso activo al modelo que pretendes usar, a menos que empieces con el modelo gratuito de OpenCode incluido sin autenticación.
+- La ruta del proyecto existe y se puede leer.
+- La aplicación y tu terminal usan el mismo entorno de home/configuración cuando pruebas la autenticación manualmente.
+
+::: tip
+Empieza con un solo compañero de equipo y un proveedor. Confirma que un lanzamiento funciona antes de añadir carriles multimodelo.
+:::
+
+Comprobaciones rápidas en la terminal:
+
+```bash
+command -v claude
+command -v codex
+command -v opencode
+```
+
+Ejecuta el comando del runtime que planeas usar. Si no imprime nada, instala el runtime o corrige el `PATH` antes de lanzar un equipo.
+
+## Rutas compatibles
+
+| Ruta | CLI predeterminada | Proveedores típicos | Úsala cuando |
+| --- | --- | --- | --- |
+| Claude | `claude` | Anthropic | Ya usas Claude Code o flujos de trabajo respaldados por Anthropic |
+| Codex | `codex` | OpenAI | Quieres una integración de runtime nativa de Codex |
+| OpenCode | `opencode` | OpenRouter y muchos backends | Quieres enrutamiento multimodelo y una amplia cobertura de proveedores |
+
+La aplicación detecta los runtimes compatibles y guía la configuración desde la interfaz cuando es posible.
+
+Gemini está disponible como una ruta de proveedor compatible con autenticación mediante Google ADC (`gcloud auth`), OAuth de Gemini CLI y clave de API. Configúralo desde la interfaz de configuración del runtime cuando se detecte el backend de Gemini.
+
+## Acceso a proveedores
+
+Agent Teams no tiene ningún nivel de pago propio. Puedes empezar con el modelo gratuito de OpenCode incluido sin autenticación: sin registro, sin claves de API ni tarjeta de crédito. Para modelos adicionales, aporta el acceso a proveedores que ya tengas: suscripciones, autenticación del runtime local o claves de API, según la ruta que elijas.
+
+- Las rutas de **Claude** y **Codex** dependen de sus respectivas herramientas de autenticación de la CLI.
+- **OpenCode** puede ejecutar primero el modelo gratuito incluido sin autenticación. Otros modelos de OpenCode pueden necesitar claves de API específicas del proveedor en un archivo de configuración (p. ej., `openrouter`, `openai`, `anthropic`).
+
+## Configuración de la autenticación
+
+### Claude Code
+
+Ejecuta el flujo de autenticación estándar en una terminal:
+
+```bash
+claude login
+```
+
+Después, verifica que la CLI es accesible:
+
+```bash
+claude --version
+```
+
+Si la aplicación empaquetada informa de "not logged in" mientras que tu terminal funciona, compara el `$HOME` y el `PATH` que ve la aplicación con los de la terminal que usaste para iniciar sesión. El registro de diagnóstico de autenticación descrito en [Solución de problemas](/es/guide/troubleshooting#auth-diagnostic-log) es el mejor punto de partida.
+
+### Codex
+
+Instala y autentícate mediante el flujo de la CLI de OpenAI:
+
+```bash
+codex login
+```
+
+Después, verifica que el runtime es accesible:
+
+```bash
+codex --version
+```
+
+Los lanzamientos nativos de Codex usan el estado de la cuenta de Codex y los datos del catálogo de modelos cuando están disponibles. Si falta un modelo en la interfaz, actualiza el estado del proveedor antes de editar los prompts del equipo.
+
+### OpenCode
+
+Para usar el modelo gratuito incluido sin autenticación, selecciónalo en la aplicación y lánzalo sin registrarte en un proveedor. Para usar otros backends de OpenCode, crea o edita `~/.opencode/config.json` (o la ruta equivalente en tu plataforma) con la clave del proveedor que quieras:
+
+```json
+{
+ "providers": {
+ "openrouter": {
+ "apiKey": "sk-or-..."
+ }
+ }
+}
+```
+
+Usa el nombre de proveedor exacto que OpenCode espera. Si configuras un nombre de proveedor personalizado, compruébalo dos veces contra el ID de proveedor que usas en la cadena del modelo (por ejemplo, `openrouter/moonshotai/kimi-k2.6` usaría el bloque `openrouter`).
+
+Ejemplos de cadenas de modelo:
+
+| Cadena de modelo | Bloque de proveedor que debe existir |
+| --- | --- |
+| `openrouter/moonshotai/kimi-k2.6` | `openrouter` |
+| `openai/gpt-5.4` | `openai` |
+| `anthropic/claude-sonnet-4-6` | `anthropic` |
+
+Si OpenCode se lanza pero un compañero de equipo nunca llega a ser entregable, inspecciona la evidencia del carril antes de asumir que el modelo ignoró el prompt. Consulta [Solución de problemas](/es/guide/troubleshooting#opencode-registered-but-bootstrap-unconfirmed).
+
+### Gemini
+
+Gemini admite tres métodos de autenticación:
+
+- **Google ADC** — ejecuta `gcloud auth application-default login` para autenticarte mediante las credenciales predeterminadas de aplicación de Google (Application Default Credentials).
+- **Gemini CLI** — ejecuta `gemini login` si la CLI de Gemini está instalada.
+- **Clave de API** — define `GEMINI_API_KEY` en tu entorno o configúrala a través de la interfaz Manage Providers de la aplicación.
+
+La aplicación detecta automáticamente qué método de autenticación está disponible y muestra el proveedor Gemini en la interfaz de configuración del runtime y de creación de equipos cuando el backend es accesible.
+
+## Modo multimodelo
+
+El modo multimodelo puede enrutar el trabajo a través de muchos backends de proveedores mediante una configuración compatible con OpenCode. Úsalo cuando necesites flexibilidad de proveedores o quieras que los compañeros de equipo usen carriles de modelo diferentes.
+
+::: info Carriles de modelo
+Cada compañero de equipo puede usar un par `providerId` + `model` diferente. En la interfaz de edición del equipo, expande las opciones del miembro para anular los valores predeterminados globales.
+:::
+
+Una configuración multimodelo conservadora:
+
+| Rol | Proveedor | Por qué |
+| --- | --- | --- |
+| Lead | Claude o Codex | Mantén la coordinación en el proveedor en el que más confías |
+| Builder | OpenCode | Usa un amplio enrutamiento de modelos para el trabajo de implementación |
+| Reviewer | Claude, Codex o un segundo modelo de OpenCode | Separa el criterio de revisión del carril del builder |
+
+Evita mezclar muchos proveedores desconocidos en el primer lanzamiento. Confirma una tarea pequeña por carril antes de asignar trabajo amplio.
+
+## Lista de comprobación previa al lanzamiento
+
+Antes de lanzar un equipo:
+
+1. El runtime seleccionado está instalado
+2. El binario del runtime está en el `PATH` del entorno
+3. La autenticación del proveedor está configurada para el backend elegido
+4. El proveedor tiene acceso a la cadena de modelo exacta que especifiques
+5. La ruta del proyecto existe y se puede leer
+
+## Cuándo cambiar de ruta de runtime
+
+Cambia cuando la ruta actual esté bloqueada por la disponibilidad del modelo, los límites de tasa, las capacidades del proveedor o las necesidades de los roles del equipo. Mantén el mismo proyecto y flujo de trabajo del equipo, pero valida una tarea pequeña después de cambiar.
+
+::: warning Trata los errores de configuración como problemas de configuración
+Si la autenticación falla, se rechaza el nombre de un modelo o no se encuentra el binario del runtime, corrige primero la configuración. No cambies los prompts del equipo ni el código del proyecto para sortear un problema de configuración del runtime.
+:::
+
+Usa esta tabla de decisiones:
+
+| Síntoma | Mejor primera acción |
+| --- | --- |
+| Binario no encontrado | Corrige la instalación o el `PATH` |
+| El inicio de sesión funciona en la terminal pero no en la aplicación | Revisa el registro de diagnóstico de autenticación de Electron y el entorno |
+| Modelo rechazado | Verifica el ID exacto del modelo en el runtime del proveedor |
+| 429 repetidos | Reduce la concurrencia o cambia de modelo/proveedor |
+| Carril de OpenCode atascado | Inspecciona el manifiesto del carril y `opencode-sessions.json` |
diff --git a/landing/product-docs/es/guide/team-brief-examples.md b/landing/product-docs/es/guide/team-brief-examples.md
new file mode 100644
index 00000000..f323114e
--- /dev/null
+++ b/landing/product-docs/es/guide/team-brief-examples.md
@@ -0,0 +1,131 @@
+---
+title: Ejemplos de briefing de equipo – Documentación de Agent Teams
+description: Plantillas prácticas de briefing de equipo para correcciones pequeñas, trabajo de documentación, tareas de implementación, revisiones y áreas de alto riesgo.
+lang: es-ES
+---
+
+# Ejemplos de briefing de equipo
+
+Un buen briefing de equipo da al lead suficiente estructura para crear tareas pequeñas sin imponer cada detalle de implementación de antemano.
+
+Usa esta estructura:
+
+```text
+Outcome:
+Scope:
+Boundaries:
+Coordination:
+Verification:
+Review:
+```
+
+## Briefing mínimo
+
+Úsalo para trabajo pequeño y de bajo riesgo.
+
+```text
+Outcome: Improve the quickstart so a new user can launch one team successfully.
+Scope: Keep edits inside landing/product-docs.
+Boundaries: Do not rewrite the whole docs structure.
+Coordination: Create one or two tasks, keep comments on the task.
+Verification: Run `pnpm --dir landing docs:build`.
+Review: Summarize changed pages and any remaining gaps.
+```
+
+## Briefing de implementación
+
+Úsalo cuando los cambios de código afectan a un área de funcionalidad.
+
+```text
+Outcome: Add a focused improvement to task comment filtering.
+Scope: Work inside the task/comment feature files unless a shared helper is clearly needed.
+Boundaries: Do not change task storage format or review state semantics.
+Coordination: Split parser, UI, and tests into separate tasks if they can be reviewed independently.
+Verification: Run the focused unit tests first, then the feature typecheck if touched.
+Review: Call out parsing edge cases and any behavior that affects existing task comments.
+```
+
+## Briefing de documentación
+
+Úsalo para trabajo de documentación y guías.
+
+```text
+Outcome: Draft practical workflow guides from the docs audit.
+Scope: Add concise VitePress pages under landing/product-docs/guide.
+Boundaries: Avoid moving existing navigation hubs owned by other tasks.
+Coordination: Check related docs tasks before editing nav.
+Verification: Run `pnpm --dir landing docs:build`.
+Review: Include links added to sidebar and any pages intentionally left as drafts.
+```
+
+## Briefing centrado en la revisión
+
+Úsalo para áreas de riesgo como IPC, autenticación de proveedores, persistencia, Git o lógica del ciclo de vida de las tareas.
+
+```text
+Outcome: Fix the launch failure without changing successful launch behavior.
+Scope: Start from the newest launch-failure artifact and the affected runtime adapter.
+Boundaries: Do not change provider prompts until setup and runtime evidence are inspected.
+Coordination: Make one diagnostic task and one fix task if the cause is confirmed.
+Verification: Run focused tests and one desktop smoke check when practical.
+Review: Lead must inspect the diff before approval.
+```
+
+## Briefing de proveedores mixtos
+
+Úsalo cuando los compañeros de equipo ejecutan distintos carriles de proveedor/modelo.
+
+```text
+Outcome: Implement and review a small feature using separate builder and reviewer lanes.
+Scope: Builder edits the feature. Reviewer inspects only the task diff and tests.
+Boundaries: Do not switch model ids mid-task unless launch fails before work begins.
+Coordination: Builder posts result comment first. Reviewer posts findings as task comments.
+Verification: Builder runs focused tests. Reviewer checks failure output and changed scope.
+Review: Lead approves only after reviewer comments are resolved.
+```
+
+## Bloques de agente en los briefings
+
+Los bloques de agente son texto oculto exclusivo para agentes, envuelto en marcadores como `... `. La aplicación los elimina de la visualización normal, pero los mantiene disponibles para la coordinación entre agentes. Úsalos cuando el briefing necesite decir algo a los agentes que sería ruido para un lector humano.
+
+Ejemplo: un briefing que indica al lead cómo dividir el trabajo sin exponer las instrucciones de coordinación al usuario:
+
+```text
+Outcome: Add a dark mode toggle to the application settings.
+Scope: Settings UI, theme context, and CSS variables.
+Boundaries: Do not change existing light theme values or provider auth screens.
+
+
+Split this into three tasks: (1) theme context and CSS vars, (2) toggle component and settings wiring, (3) dark mode preview in existing docs screenshots if practical.
+
+```
+
+El bloque mantiene limpio el briefing orientado al humano mientras da al lead una orientación estructurada para dividir las tareas.
+
+## Qué evitar
+
+| Briefing débil | Mejor reemplazo |
+| --- | --- |
+| "Improve the app" | Nombra el flujo de trabajo, los archivos y la comprobación de éxito |
+| "Fix all docs" | Elige un grupo de guías y un comando de build |
+| "Use the best model" | Nombra las opciones de proveedor/modelo o deja que se mantengan los valores predeterminados de la aplicación |
+| "Refactor as needed" | Indica qué módulos pueden cambiar |
+| "Make it production ready" | Define la revisión, las pruebas y las comprobaciones de despliegue |
+
+## Antes del lanzamiento
+
+Comprueba estos puntos antes de iniciar el equipo:
+
+1. El briefing nombra un resultado concreto.
+2. Los límites de riesgo son explícitos.
+3. El lead puede dividir el trabajo en tareas revisables.
+4. Se incluyen comandos de verificación cuando se conocen.
+5. Las áreas sensibles requieren revisión antes de la aprobación.
+
+Si el briefing sigue siendo amplio, lanza primero un agente en solitario o un equipo pequeño y pídele que produzca un plan de tareas en lugar de la implementación.
+
+## Guías relacionadas
+
+- [Crear un equipo](/es/guide/create-team)
+- [Integración de MCP](/es/guide/mcp-integration)
+- [Estrategia de Git y worktree](/es/guide/git-worktree-strategy)
diff --git a/landing/product-docs/es/guide/troubleshooting.md b/landing/product-docs/es/guide/troubleshooting.md
new file mode 100644
index 00000000..977e423a
--- /dev/null
+++ b/landing/product-docs/es/guide/troubleshooting.md
@@ -0,0 +1,310 @@
+---
+title: Solución de problemas – Documentación de Agent Teams
+description: Resuelve problemas de lanzamiento de equipos, respuestas de agentes faltantes, límites de uso, problemas de autenticación de la CLI y bloqueos en el bootstrap de los lanes con diagnósticos locales.
+lang: es-ES
+---
+
+# Solución de problemas
+
+La mayoría de los problemas de equipo entran en una de cuatro categorías: configuración del runtime, confirmación del lanzamiento, análisis de tareas y límites del proveedor.
+
+## Configuración rápida de evidencias
+
+Para cualquier problema del ciclo de vida del equipo, define primero estas variables y reutiliza el mismo shell:
+
+```bash
+TEAM=""
+TEAM_DIR="$HOME/.claude/teams/$TEAM"
+TASKS_DIR="$HOME/.claude/tasks/$TEAM"
+```
+
+Luego confirma que los archivos esperados existen antes de interpretar el estado de la interfaz:
+
+```bash
+test -d "$TEAM_DIR" && find "$TEAM_DIR" -maxdepth 2 -type f | sort | sed -n '1,80p'
+test -d "$TASKS_DIR" && find "$TASKS_DIR" -maxdepth 1 -name '*.json' | sort | sed -n '1,40p'
+```
+
+::: warning Las evidencias primero
+No corrijas los prompts, la configuración del proveedor ni la limpieza de procesos basándote únicamente en una insignia atascada. Primero correlaciona la interfaz con los archivos persistidos, los artefactos de lanzamiento y la evidencia del runtime.
+:::
+
+## El equipo no se lanza
+
+Comprueba cada elemento en orden:
+
+1. **Runtime disponible** — la CLI seleccionada (`claude`, `codex`, `opencode`) está instalada
+2. **PATH accesible** — el binario está disponible en el `PATH` del entorno
+3. **Acceso al modelo** — el proveedor tiene acceso a la cadena de modelo solicitada (especialmente en OpenCode, donde los nombres exactos de proveedor/modelo importan)
+4. **Ruta del proyecto** — el directorio del proyecto existe y se puede leer
+5. **Red / VPN** — algunos proveedores descartan el tráfico cuando hay una VPN activa
+
+::: tip
+Ejecuta el binario del runtime en una terminal para verificar el `PATH` y la autenticación. Por ejemplo: `claude --version` u `opencode --version`.
+:::
+
+### OpenCode: registrado pero bootstrap sin confirmar
+
+Si OpenCode muestra `registered` pero el bootstrap no está confirmado, inspecciona los artefactos primero antes de cambiar los prompts del equipo.
+
+Los detalles para colaboradores/depuración están en [Arquitectura para colaboradores](/es/reference/contributor-architecture), que enlaza con el runbook canónico de depuración de equipos de agentes.
+
+Observa el artefacto de fallo de lanzamiento más reciente:
+
+```bash
+LATEST_FAILURE="$TEAM_DIR/launch-failure-artifacts/latest.json"
+MANIFEST_PATH="$(jq -r '.manifestPath' "$LATEST_FAILURE")"
+jq '.classification, .bootstrapTransportBreadcrumb, .memberSpawnStatuses' "$MANIFEST_PATH"
+```
+
+`latest.json` apunta al directorio de artefactos empaquetados más reciente y a su `manifest.json`. El manifiesto incluye:
+
+- `classification` — por qué se consideró que el lanzamiento fue un fallo
+- `bootstrapTransportBreadcrumb` — ruta de entrega utilizada
+- Los estados de spawn de los miembros
+- Registros y trazas redactados
+
+Comprueba también el manifiesto del lane:
+
+```bash
+jq '.lanes' "$TEAM_DIR/.opencode-runtime/lanes.json" 2>/dev/null
+find "$TEAM_DIR/.opencode-runtime/lanes" -maxdepth 2 -name manifest.json -print -exec jq '.activeRunId, .entries' {} \; 2>/dev/null
+```
+
+::: tip No adivines a partir de la interfaz
+Correlaciona siempre los diagnósticos de la interfaz con los archivos persistidos (`launch-state.json`, `bootstrap-journal.jsonl`) y la evidencia específica del runtime.
+:::
+
+## Diagnósticos generales
+
+Empieza por los archivos persistidos en disco en lugar de basarte solo en la interfaz.
+
+### Raíz del equipo
+
+```bash
+printf '%s\n' "$TEAM_DIR"
+```
+
+Archivos clave y lo que te indican:
+
+- `launch-state.json` — estado de lanzamiento/actividad de los miembros (`.teamLaunchState`, `.summary`, `.members`)
+- `bootstrap-journal.jsonl` — eventos de bootstrap ordenados desde la CLI/runtime (`tail -80`)
+- `bootstrap-state.json` — resumen de la fase de bootstrap
+- `config.json` — configuración del proveedor, el modelo y el proyecto
+- `inboxes/*.json` y `sentMessages.json` — estado de entrega de los mensajes
+
+```bash
+jq '.teamLaunchState, .summary, .members' "$TEAM_DIR/launch-state.json"
+tail -80 "$TEAM_DIR/bootstrap-journal.jsonl" 2>/dev/null
+```
+
+### Evidencia del runtime de OpenCode
+
+Para los compañeros de equipo de OpenCode, la prueba de la sesión está en el almacén del runtime del lane:
+
+- `.opencode-runtime/lanes.json` — índice de lanes con su estado
+- `.opencode-runtime/lanes//manifest.json` — `activeRunId` y entradas de evidencia
+- `.opencode-runtime/lanes//opencode-sessions.json` — registros de sesión confirmados
+
+Estado saludable esperado: estado del lane `active`, el manifiesto tiene `activeRunId` con al menos una entrada de evidencia, el miembro tiene `bootstrapConfirmed: true`.
+
+```bash
+jq '.lanes' "$TEAM_DIR/.opencode-runtime/lanes.json" 2>/dev/null
+find "$TEAM_DIR/.opencode-runtime" -maxdepth 3 -type f | sort
+```
+
+### Artefactos de fallo de lanzamiento
+
+Cuando un lanzamiento se marca como fallo, inspecciona `latest.json`:
+
+```bash
+LATEST_FAILURE="$TEAM_DIR/launch-failure-artifacts/latest.json"
+jq '.' "$LATEST_FAILURE"
+jq '.' "$(jq -r '.manifestPath' "$LATEST_FAILURE")"
+```
+
+El manifiesto incluye:
+- `classification` — por qué se consideró que el lanzamiento fue un fallo
+- `bootstrapTransportBreadcrumb` — ruta de entrega utilizada
+- Los estados de spawn de los miembros y los registros/trazas redactados
+
+## Faltan respuestas de los agentes
+
+Abre los registros de tareas y los mensajes de los compañeros de equipo. Las respuestas faltantes suelen deberse a:
+
+- **Reintento de entrega del runtime** — puede que el agente haya respondido, pero el mensaje no se entregó a la aplicación. Comprueba el ledger de entrega.
+- **Análisis o filtrado** — la salida del agente no incluía los marcadores esperados ni las referencias de tarea.
+- **Atribución de tarea** — el trabajo ocurrió durante la sesión pero no se vinculó a la tarea porque faltaba el id de tarea correcto en la salida.
+
+::: warning No supongas que el silencio significa que se ignoró
+No supongas que el modelo ignoró el mensaje hasta que los registros lo confirmen.
+:::
+
+Usa el estado persistido de los mensajes para separar lo "no enviado" de lo "enviado pero no renderizado":
+
+```bash
+jq '.' "$TEAM_DIR/inboxes/user.json" 2>/dev/null
+jq '.' "$TEAM_DIR/sentMessages.json" 2>/dev/null
+```
+
+Comprueba `from`, `to`, `messageId`, `relayOfMessageId` y `taskRefs`. Para los compañeros de equipo de OpenCode, inspecciona también la evidencia de entrega del runtime antes de suponer que el modelo ignoró el prompt.
+
+## Las tareas no están vinculadas a los cambios
+
+Usa los registros específicos de cada tarea y los enlaces de revisión de código. Si un diff parece desvinculado:
+
+- Comprueba si el id de tarea o la referencia de tarea se incluyó en la salida del agente.
+- Verifica que el agente llamó a `task_add_comment` antes de hacer ediciones.
+- Asegúrate de que el agente llamó a `task_start` para que el tablero supiera que el trabajo había comenzado.
+
+Para los compañeros de equipo de OpenCode, la prueba fehaciente de que una sesión pertenece a una tarea está en `opencode-sessions.json` y la entrada del manifiesto del lane, no solo en el flujo de mensajes de la interfaz.
+
+### Triaje del registro de tareas
+
+Cuando un registro de tarea parezca incompleto, busca por id de tarea en el JSON de tareas, las bandejas de entrada y los eventos de bootstrap:
+
+```bash
+TASK=""
+rg -n "$TASK" "$TASKS_DIR" "$TEAM_DIR/inboxes" "$TEAM_DIR/bootstrap-journal.jsonl" 2>/dev/null
+```
+
+Interpreta el resultado con cuidado:
+
+| Evidencia | Qué demuestra | Qué no demuestra |
+| --- | --- | --- |
+| Mensaje entregado | La aplicación escribió o retransmitió un prompt | Que el agente progresó |
+| Comentario de tarea | El agente publicó texto visible en el tablero | Que el comentario sea progreso significativo |
+| Filas de herramientas nativas | El runtime hizo trabajo en una sesión | Que el trabajo pertenezca a esta tarea, a menos que la atribución coincida |
+| Entrada del ledger de cambios | La aplicación registró cambios de archivo | Que la implementación sea correcta |
+
+En OpenCode, un registro de tarea saludable suele incluir filas nativas del runtime como `read`, `bash`, `edit` o `write`, además de filas de MCP de Agent Teams. Si solo ves filas `agent-teams_*`, confirma la atribución de la tarea y los límites de la sesión antes de ampliar la coincidencia de registros.
+
+## Límites de uso
+
+Si un proveedor informa de una hora de restablecimiento conocida, Agent Teams puede indicar al lead que continúe tras el enfriamiento. Si se desconoce la hora de restablecimiento, espera o cambia de proveedor/ruta de runtime.
+
+| Comportamiento del proveedor | Acción sugerida |
+| --- | --- |
+| Se muestra una hora de restablecimiento conocida | Espera el enfriamiento y continúa |
+| No se muestra ninguna hora de restablecimiento | Cambia de proveedor o de ruta de runtime |
+| 429 repetidos | Reduce la concurrencia o usa un lane de modelo distinto |
+
+## Problemas de autenticación de la CLI
+
+### `claude login` no persiste
+
+Si la CLI está autenticada en una terminal pero la aplicación dice que no lo está, verifica que la autenticación se guarda en la ruta de configuración esperada y que el proceso de la aplicación ve el mismo `$HOME`.
+
+### Clave del proveedor de OpenCode rechazada
+
+- Verifica que el nombre del proveedor en `config.json` coincide con el prefijo del proveedor en la cadena de modelo
+- Asegúrate de que la clave no haya caducado ni haya sido revocada en el panel del proveedor
+
+### Registro de diagnóstico de autenticación
+
+Cada llamada a `CliInstallerService.getStatus()` añade una línea a `claude-cli-auth-diag.ndjson` en la carpeta de registros de Electron (normalmente `~/Library/Logs//` en macOS). Si el archivo supera los **512 KiB**, se trunca a vacío antes de la siguiente escritura.
+
+Comprueba este archivo si ves "Not logged in" o errores de autenticación en la aplicación empaquetada.
+
+## Bootstrap del lane atascado
+
+Para los lanes secundarios de OpenCode:
+
+- La ausencia de `inboxes/.json` no es automáticamente un error. Los lanes de OpenCode no tienen que crearse mediante la bandeja de entrada primaria antes de arrancar.
+- Si la interfaz muestra que el equipo aún se está lanzando mientras los miembros primarios ya son utilizables, "se han unido todos los compañeros de equipo" está esperando a los lanes secundarios.
+- Si `Prepared communication channels for X/Y members` se queda colgado, verifica si `Y` incluye incorrectamente a miembros secundarios de OpenCode.
+
+### Entradas vacías en el manifiesto del lane
+
+Si el puente dice que el bootstrap tuvo éxito pero `manifest.json` muestra `entries: []`, el problema es la **confirmación de la evidencia**, no el comportamiento del modelo. El miembro no debe considerarse entregable hasta que existan `opencode-sessions.json` y su entrada en el manifiesto.
+
+## Estados comunes de los miembros
+
+| Estado | Significado |
+| --- | --- |
+| `confirmed_alive` + `bootstrapConfirmed` | Saludable y listo |
+| `registered` / `runtime_pending_bootstrap` | El proceso o el lane existe, pero la prueba de bootstrap aún no se ha confirmado |
+| `failed_to_start` + `runtime_process` | El proceso existe, pero la puerta de lanzamiento falló. Comprueba los diagnósticos |
+| `failed_to_start` + `stale_metadata` | El pid/sesión guardado está obsoleto o muerto |
+
+::: warning
+`member_briefing` por sí solo NO es evidencia del runtime. Para OpenCode, la prueba fehaciente es la evidencia del runtime confirmada, como `opencode-sessions.json` y la entrada del manifiesto.
+:::
+
+## Modo de depuración del runtime
+
+Para la depuración local, puedes forzar que los compañeros de equipo se ejecuten en paneles de tmux:
+
+```bash
+# Launch from a terminal
+CLAUDE_TEAM_TEAMMATE_MODE=tmux pnpm dev
+
+# Or add to custom CLI args
+--teammate-mode tmux
+```
+
+Úsalo para inspeccionar el comportamiento interactivo de la CLI. No lo consideres totalmente equivalente al backend de procesos.
+
+## Comprobaciones rápidas
+
+Usa la aplicación de escritorio Electron para la validación normal. El modo de desarrollo en navegador/web no incluye el runtime de escritorio completo, el IPC, la autenticación del proveedor, la terminal ni el comportamiento del ciclo de vida del equipo.
+
+### Cambios solo en la documentación
+
+Desde la raíz del repositorio:
+
+```bash
+pnpm --dir landing docs:build
+git diff --check -- landing/product-docs
+```
+
+### Cambios en el ciclo de vida del equipo
+
+Empieza de forma acotada y luego amplía:
+
+```bash
+pnpm test -- test/main/services/team/TeamProvisioningService.test.ts
+pnpm test -- test/main/services/team/TeamAgentLaunchMatrix.safe-e2e.test.ts
+pnpm typecheck
+git diff --check
+```
+
+### Prueba rápida de un equipo en vivo
+
+Usa un equipo pequeño y un proyecto desechable bajo control de Git:
+
+1. Inicia la aplicación de escritorio con `pnpm dev`.
+2. Crea un lead más un builder.
+3. Pide un cambio mínimo con un comando de verificación explícito.
+4. Confirma que la tarea pasa de `pending` -> `in_progress` -> `completed`.
+5. Abre los registros de tareas y verifica que las filas de herramientas, los comentarios de tarea y los cambios de archivo cuadran.
+6. Detén únicamente el equipo/procesos propios de la prueba rápida al limpiar.
+
+::: warning Limpieza acotada únicamente
+No mates todos los hosts de OpenCode, paneles de tmux no relacionados ni equipos de usuario mientras limpias una prueba rápida.
+:::
+
+## Limpieza segura
+
+Al limpiar procesos obsoletos:
+
+1. Identifica el pid y confirma que pertenece al equipo / lane actual.
+2. Detén únicamente los procesos que pertenezcan explícitamente a una prueba rápida o al lanzamiento que estás depurando.
+3. **No mates** todos los procesos de OpenCode ni de hosts compartidos como atajo.
+
+## Cuándo recopilar evidencias
+
+Antes de pedir ayuda, recopila:
+
+- El id de tarea (corto o completo)
+- El nombre del equipo
+- La ruta del runtime (`claude`, `codex` u `opencode`)
+- Un extracto del registro de lanzamiento (de `latest.json` o `bootstrap-journal.jsonl`)
+- La cadena de proveedor / modelo
+- La ventana de tiempo exacta en la que ocurrió el problema
+
+Estos datos suelen ser suficientes para depurar problemas del ciclo de vida del lanzamiento y de las tareas.
+
+::: tip
+Si el problema persiste, abre los archivos persistidos del equipo en `~/.claude/teams//` y correlaciona los diagnósticos de la interfaz con el estado de los procesos en vivo antes de cambiar código.
+:::
diff --git a/landing/product-docs/es/index.md b/landing/product-docs/es/index.md
new file mode 100644
index 00000000..ead7b324
--- /dev/null
+++ b/landing/product-docs/es/index.md
@@ -0,0 +1,81 @@
+---
+title: Documentación de Agent Teams – Ejecuta equipos de agentes de IA desde una aplicación de escritorio local
+description: Documentación de Agent Teams, una aplicación de escritorio gratuita para la orquestación de agentes de IA. Crea equipos, observa el trabajo en un tablero kanban, revisa los cambios de código y coordina flujos de trabajo con Claude, Codex, OpenCode y multimodelo.
+lang: es-ES
+layout: home
+hero:
+ name: Documentación de Agent Teams
+ text: Ejecuta equipos de agentes de IA desde una aplicación de escritorio local
+ tagline: Crea equipos, observa el trabajo moverse por un tablero kanban, revisa los cambios de código y coordina flujos de trabajo con Claude, Codex, OpenCode y multimodelo sin renunciar al control local.
+ actions:
+ - theme: brand
+ text: Inicio rápido
+ link: /es/guide/quickstart
+ - theme: alt
+ text: Instalar
+ link: /es/guide/installation
+ - theme: alt
+ text: Conceptos
+ link: /es/reference/concepts
+features:
+ - icon: "01"
+ title: Flujo de trabajo centrado en el equipo
+ details: Define roles, lanza un lead y deja que los agentes dividan, reclamen y coordinen las tareas.
+ link: /es/guide/create-team
+ linkText: Crear un equipo
+ - icon: "02"
+ title: Tablero kanban en vivo
+ details: Observa cómo las tareas avanzan por todo, in progress, review, done y approved a medida que los agentes trabajan.
+ link: /es/guide/agent-workflow
+ linkText: Entender el flujo de trabajo
+ - icon: "03"
+ title: Revisión de código integrada
+ details: Inspecciona los diffs por tarea, acepta o rechaza hunks y comenta donde los agentes necesiten orientación.
+ link: /es/guide/code-review
+ linkText: Revisar cambios
+ - icon: "04"
+ title: Configuración adaptada al runtime
+ details: Usa Claude, Codex, OpenCode o proveedores multimodelo a través del acceso que ya tienes.
+ link: /es/guide/runtime-setup
+ linkText: Configurar los runtimes
+ - icon: "05"
+ title: Control local-first
+ details: La aplicación de escritorio lee el estado local del proyecto y del runtime. Tu código permanece en tu máquina a menos que un proveedor seleccionado reciba el contexto del prompt.
+ link: /es/reference/privacy-local-data
+ linkText: Modelo de privacidad
+ - icon: "06"
+ title: Equipos depurables
+ details: Rastrea los logs de las tareas, la salida del runtime, los mensajes de los compañeros de equipo y los procesos en vivo cuando un lanzamiento o una tarea se atasca.
+ link: /es/guide/troubleshooting
+ linkText: Solución de problemas
+---
+
+
+
+## Empieza aquí
+
+Agent Teams es una aplicación de escritorio gratuita para orquestar equipos de agentes de IA. No te limitas a enviar prompts aislados a un solo agente: creas un equipo, asignas roles y observas cómo los agentes coordinan el trabajo a través de un tablero de tareas.
+
+
+
+## Próximos pasos después del lanzamiento
+
+Después de crear tu primer equipo, explora estas guías para ir más allá:
+
+- **Configuración del runtime** - configura Claude, Codex, OpenCode o proveedores multimodelo: [Configurar los runtimes](/es/guide/runtime-setup)
+- **Flujo de trabajo de los agentes** - entiende cómo los agentes coordinan a través del tablero de tareas: [Entender el flujo de trabajo](/es/guide/agent-workflow)
+- **Ejemplos de briefing de equipo** - aprende patrones de prompts a partir de briefings del mundo real: [Ver ejemplos](/es/guide/team-brief-examples)
+- **Revisión de código** - inspecciona los diffs, acepta o rechaza los cambios: [Revisar cambios](/es/guide/code-review)
+- **Solución de problemas** - diagnostica lanzamientos atascados, compañeros de equipo ausentes y fallos de tareas: [Solución de problemas](/es/guide/troubleshooting)
+- **Estrategia de Git y worktree** - usa el aislamiento con worktree cuando varios compañeros de equipo editan el mismo repositorio en paralelo: [Conoce más sobre los worktrees](/es/guide/git-worktree-strategy)
+- **Notas de la versión** - consulta las novedades de cada versión: [Ver versiones](/es/reference/release-notes)
+
+## Referencia
+
+Usa las páginas de referencia cuando necesites terminología exacta, el comportamiento de los proveedores, la arquitectura para colaboradores o los límites de privacidad.
+
+
+
+## Vista previa del producto
+
+
diff --git a/landing/product-docs/es/reference/concepts.md b/landing/product-docs/es/reference/concepts.md
new file mode 100644
index 00000000..e33f6149
--- /dev/null
+++ b/landing/product-docs/es/reference/concepts.md
@@ -0,0 +1,85 @@
+---
+title: Conceptos – Documentación de Agent Teams
+description: Vocabulario fundamental de Agent Teams — equipos, leads, compañeros de equipo, tareas, kanban, bandejas de entrada, runtimes y revisión.
+lang: es-ES
+---
+
+# Conceptos
+
+Esta página define los términos fundamentales que se utilizan en todo Agent Teams. Úsala como vocabulario compartido para la aplicación, el tablero de tareas, los mensajes y el flujo de revisión.
+
+## Equipo
+
+Un equipo es un grupo nombrado de agentes vinculado a una única ruta de proyecto. Tiene un lead, compañeros de equipo opcionales, ajustes de runtime/proveedor, prompts, bandejas de entrada, tareas y estado de lanzamiento local.
+
+## Lead {#lead}
+
+El lead es el coordinador del equipo. Convierte el objetivo de un usuario en tareas, asigna o reorienta a los compañeros de equipo, hace seguimiento de los bloqueos, solicita revisiones y mantiene el trabajo avanzando por el tablero.
+
+[Compañero de equipo →](#teammate)
+
+Los mensajes del lead siguen una ruta de entrega distinta a la de los mensajes de los compañeros de equipo: la aplicación retransmite las entradas de la bandeja de entrada del lead hacia el runtime del lead, mientras que los compañeros de equipo leen sus propios archivos de bandeja de entrada entre turnos.
+
+## Compañero de equipo {#teammate}
+
+Un compañero de equipo es un agente del equipo que no es el lead. Los compañeros de equipo suelen asumir roles específicos, como builder, revisor, investigador o tester. Un compañero de equipo puede recibir mensajes directos, asignaciones de tareas, comentarios de tareas y solicitudes de revisión.
+
+[Lead ↑](#lead)
+
+## Tarea
+
+Una tarea es la unidad de trabajo duradera. Tiene un id, un estado, un propietario, una descripción, comentarios, registros, adjuntos, referencias a tareas y cambios revisables.
+
+Los estados habituales de una tarea son `todo`, `in_progress`, `done`, `review` y `approved`. Internamente, el archivo de la tarea almacena el estado de trabajo, mientras que la ubicación de revisión y aprobación también puede usar el estado de superposición del kanban.
+
+## Kanban
+
+El kanban es la vista de tablero para el trabajo del equipo. Te permite escanear las tareas por estado, abrir los detalles de una tarea, inspeccionar registros, revisar diffs, aprobar el trabajo terminado o solicitar cambios.
+
+## Bandeja de entrada
+
+Una bandeja de entrada es un archivo de mensajes local para un participante del equipo. Agent Teams usa las bandejas de entrada para los mensajes de usuario, los mensajes del lead, los mensajes de los compañeros de equipo, los metadatos de entrega del runtime, los mensajes entre equipos y algunas notificaciones del sistema.
+
+Los mensajes son registros locales duraderos. La entrega sigue dependiendo de que el runtime seleccionado esté activo y sea capaz de procesar su siguiente turno.
+
+## Bloque de agente
+
+Un bloque de agente es texto de instrucciones oculto y exclusivo para agentes, envuelto con `... `. La interfaz elimina estos bloques de la visualización normal orientada a las personas, pero los agentes y la entrega del runtime pueden usarlos para detalles de coordinación.
+
+El marcador canónico actual es `info_for_agent`. Documentos más antiguos pueden usar bloques de código entre comillas con un marcador `info_for_agent`, o etiquetas al estilo XML `` — estos son patrones heredados y, cuando se encuentren, deberían migrarse a `info_for_agent`. (El nombre de etiqueta original era `agent-block`; la forma con guion bajo `` se usa en el código fuente de VitePress para evitar el análisis HTML.)
+
+## Fase de contexto
+
+Una fase de contexto es un segmento de la línea de tiempo del contexto de una sesión. La compactación inicia una nueva fase, de modo que el uso de tokens y de contexto puede analizarse antes y después del reinicio.
+
+El seguimiento del contexto separa categorías como las instrucciones del proyecto, los archivos mencionados, la salida de las herramientas, el texto de razonamiento, la coordinación del equipo y los mensajes de usuario. Estas cifras son diagnósticos, no estados de cuenta de facturación del proveedor.
+
+## Runtime
+
+Un runtime es la ruta de ejecución local que ejecuta el turno de un agente. Las rutas de runtime admitidas incluyen Claude Code, Codex y OpenCode.
+
+El runtime se encarga del comportamiento de ejecución del modelo, los detalles de autenticación, la semántica de ejecución de las herramientas, los límites de tasa, la disponibilidad de los modelos y algunos formatos de transcripción/registro.
+
+## Proveedor
+
+Un proveedor es la ruta de acceso a los modelos que hay detrás de un runtime. Los ids de proveedor actuales incluyen Anthropic, Codex, Gemini y OpenCode. OpenCode puede enrutar hacia muchos proveedores de modelos mediante su propia configuración.
+
+Agent Teams orquesta tareas y mensajes, pero no sustituye la autenticación del proveedor ni la política del proveedor.
+
+## Modo solo
+
+El modo solo ejecuta un equipo de un solo miembro. Resulta útil para trabajos rápidos, para reducir la sobrecarga de coordinación y para validar un prompt antes de expandirlo a un equipo completo.
+
+## Comunicación entre equipos
+
+Los agentes pueden enviarse mensajes dentro de un mismo equipo y entre equipos distintos. Úsalo cuando equipos separados se encargan de trabajos relacionados y necesitan coordinarse sin agruparlo todo en un único equipo de gran tamaño.
+
+## Nivel de autonomía
+
+La autonomía controla cuánto pueden hacer los agentes antes de preguntar. Una autonomía más alta es más rápida; una autonomía más baja es más segura para rutas de código sensibles, persistencia, autenticación de proveedores, operaciones de Git y publicaciones de versiones.
+
+## Revisión
+
+La revisión es el flujo de aceptación con alcance de tarea. Una tarea puede pasar a review, recibir comentarios o cambios solicitados y, después, pasar a approved cuando se acepta el resultado.
+
+La revisión está ligada a los diffs locales y al historial de la tarea, por lo que funciona mejor cuando las tareas se mantienen acotadas y los agentes mencionan la tarea en la que están trabajando.
diff --git a/landing/product-docs/es/reference/contributor-architecture.md b/landing/product-docs/es/reference/contributor-architecture.md
new file mode 100644
index 00000000..cbf8fa1e
--- /dev/null
+++ b/landing/product-docs/es/reference/contributor-architecture.md
@@ -0,0 +1,55 @@
+---
+title: Arquitectura para colaboradores – Documentación de Agent Teams
+description: Guía para colaboradores sobre la estructura de las funciones, los límites entre runtime y proveedor, los guardrails estrictos y los documentos canónicos de arquitectura.
+lang: es-ES
+---
+
+# Arquitectura para colaboradores
+
+Esta página es un mapa para colaboradores. Apunta a la guía canónica del repositorio en lugar de reformular cada regla de implementación.
+
+## Fuentes canónicas
+
+Usa estos archivos como fuente de verdad al cambiar la aplicación:
+
+| Necesidad | Fuente canónica |
+| --- | --- |
+| Resumen del repositorio y comandos | [README.md](https://github.com/777genius/agent-teams-ai/blob/main/README.md) |
+| Convenciones de trabajo local | [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) |
+| Guardrails estrictos | [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) |
+| Estructura de funciones medianas y grandes | [docs/FEATURE_ARCHITECTURE_STANDARD.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) |
+| Depuración del lanzamiento de equipos de agentes | [docs/team-management/debugging-agent-teams.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) |
+
+## Estructura de las funciones
+
+Las funciones medianas y grandes deben residir bajo `src/features//` y seguir el estándar de arquitectura de funciones. Mantén los detalles internos de cada función detrás de puntos de entrada públicos y evita las importaciones profundas que crucen los límites entre funciones.
+
+Para el trabajo nuevo, parte del slice existente `src/features/recent-projects` como implementación de referencia local. Las correcciones pequeñas pueden permanecer cerca de la ruta de código existente cuando crear un slice de función añadiría más estructura que valor.
+
+## Límites entre runtime y proveedor
+
+Agent Teams es responsable de la orquestación: equipos, tareas, mensajes, estado de lanzamiento, interfaz de revisión, diagnósticos y persistencia local.
+
+La ruta de runtime/proveedor seleccionada es responsable de la ejecución del modelo, la autenticación, la disponibilidad de modelos, los límites de tasa, la semántica de las herramientas y las evidencias de transcripción específicas del runtime. No hagas que los prompts o el estado de la interfaz compensen una autenticación faltante, binarios faltantes, ids de modelo rechazados o interrupciones del proveedor. Para los detalles de configuración orientados al usuario, consulta [Proveedores y runtimes](/es/reference/providers-runtimes).
+
+## Depuración de equipos de agentes
+
+Para los bloqueos en el lanzamiento, los estados `registered` / bootstrap no confirmado de OpenCode, las respuestas faltantes de los compañeros de equipo o los registros de tareas sospechosos, comienza por el runbook de depuración dedicado. Inspecciona el artefacto de fallo de lanzamiento más reciente en `~/.claude/teams//launch-failure-artifacts/latest.json` y, a continuación, correlaciona el estado de la interfaz con los archivos persistidos y la evidencia específica del runtime.
+
+Evita las limpiezas amplias mientras depuras. Detén únicamente el proceso, la lane, el equipo o la ejecución de smoke que puedas identificar como pertenecientes al problema.
+
+## Convenciones para colaboradores
+
+- Usa `pnpm dev` para la aplicación de escritorio Electron durante el desarrollo normal.
+- No uses el modo de desarrollo del navegador como sustituto del runtime de escritorio, IPC, terminal, autenticación del proveedor o comportamiento del ciclo de vida del equipo.
+- Mantén separadas las responsabilidades de main, preload, renderer, shared y feature de Electron.
+- Usa `wrapAgentBlock(text)` para los bloques exclusivos de agentes en lugar de concatenar marcadores manualmente.
+- Prefiere la verificación enfocada. Evita el ruido de `lint:fix` o de formateo amplio a menos que la tarea trate explícitamente sobre el formateo.
+- Trata el parsing, el ciclo de vida de las tareas, la detección de proveedor/runtime, la persistencia, IPC, Git y los flujos de revisión como áreas de alto riesgo que necesitan pruebas específicas o una ruta de verificación clara.
+
+## Páginas relacionadas
+
+- [Configuración del runtime](/es/guide/runtime-setup)
+- [Solución de problemas](/es/guide/troubleshooting)
+- [Revisión de código](/es/guide/code-review)
+- [Privacidad y datos locales](/es/reference/privacy-local-data)
diff --git a/landing/product-docs/es/reference/faq.md b/landing/product-docs/es/reference/faq.md
new file mode 100644
index 00000000..c7fcc896
--- /dev/null
+++ b/landing/product-docs/es/reference/faq.md
@@ -0,0 +1,95 @@
+---
+title: Preguntas frecuentes – Documentación de Agent Teams
+description: Preguntas frecuentes sobre Agent Teams — precios, acceso a modelos, runtimes, privacidad, revisión y solución de problemas.
+lang: es-ES
+---
+
+# Preguntas frecuentes
+
+## ¿Agent Teams es gratis?
+
+Sí. La aplicación es gratuita y de código abierto. El acceso al proveedor o al runtime puede tener un costo dependiendo de lo que uses.
+
+## ¿Agent Teams incluye acceso a modelos?
+
+No. Agent Teams es la capa local de orquestación e interfaz de usuario. El acceso a los modelos proviene de la ruta de runtime/proveedor seleccionada, como Claude Code, Codex u OpenCode.
+
+## ¿Qué runtimes son compatibles?
+
+Las rutas de runtime compatibles son Claude Code, Codex y OpenCode. La aplicación también rastrea ids de proveedor como Anthropic, Codex, Gemini y OpenCode cuando el runtime los expone.
+
+## ¿Necesito instalar primero Claude Code o Codex?
+
+No siempre. La aplicación guía la detección y la configuración del runtime desde la interfaz de usuario. Algunas rutas todavía requieren autenticación de runtime externa.
+
+La configuración de OpenCode es independiente de la configuración de Claude Code y Codex. Si un lanzamiento falla, revisa el estado del runtime y la autenticación del proveedor antes de cambiar el prompt del equipo.
+
+## ¿Cómo compruebo si un runtime está listo?
+
+Primero ejecuta el comando del runtime en una terminal:
+
+```bash
+claude --version
+codex --version
+opencode --version
+```
+
+Luego confirma la autenticación del proveedor para la ruta que seleccionaste. Si el comando o la comprobación de autenticación falla fuera de Agent Teams, corrige la configuración antes de lanzar un equipo.
+
+## ¿Sube mi código a los servidores de Agent Teams?
+
+No. Agent Teams no es un servicio de sincronización de código en la nube. Las llamadas a modelos respaldadas por un proveedor pueden recibir contexto del prompt dependiendo del runtime que selecciones.
+
+## ¿Dónde se almacenan los archivos del equipo?
+
+Los datos de coordinación del equipo se almacenan localmente en `~/.claude/teams//` (macOS/Linux) o `%APPDATA%\Claude\teams\\` (Windows), los archivos de tareas en `~/.claude/tasks//` o `%APPDATA%\Claude\tasks\\`, y los datos de sesión del proyecto en `~/.claude/projects//` cuando están disponibles.
+
+## ¿Qué puede salir de mi máquina?
+
+El contexto del prompt, el contenido de los archivos seleccionados, los resultados de las herramientas, la salida de los comandos, el texto de las tareas, los comentarios y los archivos adjuntos pueden salir de tu máquina a través de la ruta de runtime/proveedor cuando un agente usa un modelo respaldado por un proveedor. El comportamiento exacto depende del runtime y del proveedor.
+
+## ¿Los agentes pueden comunicarse entre sí?
+
+Sí. Los agentes pueden enviar mensajes a sus compañeros de equipo, comentar en las tareas, coordinarse entre equipos y usar referencias de tareas para mantener las conversaciones vinculadas al trabajo.
+
+## ¿Qué debo poner en el primer prompt del equipo?
+
+Dale al lead un resultado concreto, los límites de archivos o funciones, los límites de riesgo y las expectativas de verificación. Por ejemplo:
+
+```text
+Improve the docs quickstart. Keep edits inside landing/product-docs, add practical examples, and run `pnpm --dir landing docs:build` before marking work done.
+```
+
+## ¿Puedo revisar el código antes de aceptarlo?
+
+Sí. El flujo de revisión está construido en torno a diffs con alcance de tarea y decisiones a nivel de hunk.
+
+## ¿Qué es un Agent Block?
+
+Un Agent Block es texto oculto solo para agentes envuelto en marcadores como `... `. La aplicación lo elimina de la visualización normal orientada al usuario, pero lo mantiene disponible para la coordinación entre agentes.
+
+## ¿Qué es el modo solo?
+
+El modo solo es un equipo de un solo agente. Es útil para tareas más pequeñas y con menor sobrecarga de coordinación.
+
+## ¿Debería usar el aislamiento por worktree?
+
+Úsalo cuando varios compañeros de equipo de OpenCode puedan editar el mismo proyecto de Git en paralelo. Reduce los conflictos de archivos, pero requiere un proyecto rastreado por Git y actualmente se aplica a los miembros de OpenCode.
+
+## ¿Pueden distintos compañeros de equipo usar distintos proveedores?
+
+Sí, la configuración de proveedor/modelo se puede llevar por miembro del equipo cuando la ruta de runtime seleccionada lo admite. OpenCode es la ruta principal para el enrutamiento amplio entre múltiples proveedores.
+
+## ¿Por qué una tarea muestra review o approved por separado de done?
+
+El estado del trabajo y el estado de revisión están relacionados, pero no son idénticos. Una tarea puede estar done desde la perspectiva del agente y luego pasar por review y aprobación en la interfaz kanban.
+
+## ¿Qué debo hacer cuando un lanzamiento se queda colgado?
+
+Abre la solución de problemas, recopila los diagnósticos de lanzamiento, revisa `~/.claude/teams//` y verifica la autenticación del runtime/proveedor antes de cambiar los prompts.
+
+Para OpenCode, revisa la evidencia de lane/sesión antes de suponer que un compañero de equipo está en línea pero ignora los mensajes.
+
+## ¿Por qué los logs son diferentes entre runtimes?
+
+Claude Code, Codex y OpenCode exponen distintos formatos de transcripción y evidencia de runtime. Agent Teams normaliza lo que puede, pero la completitud de los logs y la atribución pueden variar según el runtime.
diff --git a/landing/product-docs/es/reference/privacy-local-data.md b/landing/product-docs/es/reference/privacy-local-data.md
new file mode 100644
index 00000000..32fb1563
--- /dev/null
+++ b/landing/product-docs/es/reference/privacy-local-data.md
@@ -0,0 +1,82 @@
+---
+title: Privacidad y datos locales – Documentación de Agent Teams
+description: Qué almacena Agent Teams de forma local, qué puede salir de tu equipo a través de las llamadas a modelos respaldadas por el proveedor y orientación práctica sobre privacidad.
+lang: es-ES
+---
+
+# Privacidad y datos locales
+
+Agent Teams es local-first, pero la ruta de runtime/proveedor seleccionada sigue siendo importante. Esta página describe qué almacena localmente la aplicación de escritorio y qué puede salir de tu equipo cuando los agentes llaman a modelos respaldados por el proveedor.
+
+## Qué permanece local
+
+La aplicación de escritorio se ejecuta en tu máquina y lee datos locales de proyecto/runtime para alimentar la interfaz. Los datos locales habituales incluyen:
+
+- archivos de proyecto
+- configuración del equipo y metadatos de los miembros
+- metadatos de tareas, comentarios de tareas y referencias de tareas
+- mensajes de la bandeja de entrada
+- registros de runtime/sesión
+- estado de lanzamiento y diagnósticos de bootstrap
+- estado de la revisión
+- ajustes locales de la aplicación
+
+Las ubicaciones locales importantes incluyen:
+
+| Plataforma | Ubicación | Propósito |
+| --- | --- | --- |
+| macOS/Linux | `~/.claude/teams//` | Configuración del equipo, metadatos de los miembros, bandejas de entrada, estado de lanzamiento, evidencia de bootstrap, diagnósticos de runtime, registros de mensajes enviados, estado del kanban y archivos de equipo relacionados con la revisión. |
+| Windows | `%APPDATA%\Claude\teams\\` | Igual: configuración del equipo, metadatos de los miembros, bandejas de entrada, estado de lanzamiento y diagnósticos. |
+| macOS/Linux | `~/.claude/tasks//` | Archivos JSON de tareas duraderos para el tablero del equipo. |
+| Windows | `%APPDATA%\Claude\tasks\\` | Igual: archivos JSON de tareas duraderos. |
+| macOS/Linux | `~/.claude/projects//` | Archivos de sesión de proyecto de tipo Claude/Codex que se usan para el historial de sesiones, el análisis de contexto y la interfaz respaldada por transcripciones. |
+| Windows | `%APPDATA%\Claude\projects\\` | Igual: archivos de sesión de proyecto. |
+
+Los archivos exactos pueden variar según el runtime y la versión de la aplicación. Para depurar el lanzamiento, la evidencia más reciente suele estar en la carpeta `~/.claude/teams//` (o `%APPDATA%\Claude\teams\\`) correspondiente.
+
+## Qué puede salir de tu equipo
+
+Agent Teams en sí no es un servicio de sincronización de código en la nube para tu repositorio. No necesita subir todo tu proyecto a un servidor de Agent Teams para mostrar el tablero, la bandeja de entrada, los registros o la interfaz de revisión.
+
+Sin embargo, cuando un agente le pide a un modelo respaldado por el proveedor que trabaje, el contexto del prompt, el contenido de los archivos seleccionados, el texto de las tareas, los comentarios, los resultados de las herramientas, la salida de los comandos y otro contexto proporcionado por el runtime pueden enviarse a través de la ruta de runtime/proveedor seleccionada. Lo que se envía depende del runtime, el modelo, las llamadas a herramientas, el prompt y la configuración del proveedor.
+
+La autenticación del proveedor, la retención por parte del proveedor, el entrenamiento, el registro, el procesamiento regional y la facturación se rigen por el proveedor/runtime que elijas. Revisa esas políticas para proyectos sensibles.
+
+Ejemplos habituales:
+
+| Acción | Datos que pueden enviarse a través del runtime/proveedor |
+| --- | --- |
+| Pedir a un agente que edite un archivo | El prompt de la tarea, el contenido de los archivos relevantes, los resultados de las herramientas y la salida de los comandos |
+| Adjuntar una captura de pantalla | El contenido del adjunto y el texto de la tarea/comentario circundante |
+| Pedir una revisión de código | El contexto del diff, los archivos seleccionados, los comentarios y los registros de verificación |
+| Depurar un comando que falla | La salida de error, los stack traces y los fragmentos de código fuente referenciados |
+
+## Qué no garantiza la aplicación
+
+- No puede garantizar que las llamadas a modelos respaldadas por el proveedor nunca reciban código privado.
+- No puede anular las políticas de retención o facturación del proveedor.
+- No puede hacer que un proveedor remoto se comporte como un modelo totalmente local.
+- No puede proteger secretos que se le indique a un agente pegar en prompts, comentarios de tareas, archivos o comandos.
+- No puede hacer que todos los runtimes expongan la misma transcripción o el mismo nivel de detalle de auditoría.
+
+## Orientación práctica
+
+- No adjuntes secretos a tareas, comentarios ni mensajes directos.
+- Revisa las políticas del proveedor para proyectos sensibles.
+- Usa una autonomía más baja para repositorios de riesgo.
+- Mantén el alcance de las tareas reducido cuando trabajes con código privado.
+- Prioriza la evidencia y los registros locales al depurar.
+- Comprueba los prompts generados, las descripciones de tareas y los archivos adjuntos antes de pedir a los agentes que trabajen con material confidencial.
+- Usa rutas de proveedor/modelo que se ajusten a tus requisitos de privacidad.
+
+Antes de usar Agent Teams en un repositorio sensible:
+
+1. Elimina los secretos del árbol de trabajo y de los adjuntos de las tareas
+2. Elige la ruta de runtime/proveedor que tengas permitido usar
+3. Empieza con autonomía baja y tareas pequeñas
+4. Revisa los prompts de las tareas y los comentarios generados antes de ampliar el alcance
+5. Mantén los registros locales a menos que los compartas intencionadamente para soporte
+
+## Modelo de código abierto
+
+La aplicación en sí es de código abierto y gratuita. Puedes inspeccionar cómo funcionan la orquestación local, el seguimiento de tareas, las bandejas de entrada, los diagnósticos de runtime y los flujos de revisión en el repositorio.
diff --git a/landing/product-docs/es/reference/providers-runtimes.md b/landing/product-docs/es/reference/providers-runtimes.md
new file mode 100644
index 00000000..88f4a653
--- /dev/null
+++ b/landing/product-docs/es/reference/providers-runtimes.md
@@ -0,0 +1,115 @@
+---
+title: Proveedores y runtimes – Documentación de Agent Teams
+description: Rutas de runtime compatibles (Claude Code, Codex, OpenCode), IDs de proveedor, nomenclatura de modelos, estrategias multiproveedor y comprobaciones de capacidades.
+lang: es-ES
+---
+
+# Proveedores y runtimes
+
+Agent Teams separa la orquestación del acceso a los modelos. La aplicación gestiona los equipos, las tareas, los mensajes, el estado de lanzamiento y la interfaz de revisión; la ruta de runtime/proveedor seleccionada realiza el trabajo real del modelo.
+
+## Qué proporciona la aplicación
+
+Agent Teams proporciona:
+
+- orquestación de equipos y tareas
+- interfaz del tablero kanban
+- mensajería entre compañeros de equipo
+- registros de tareas
+- interfaz de revisión
+- integración con proyectos locales
+- detección del runtime y comprobaciones de capacidades
+- registros y diagnósticos locales
+
+## Qué proporciona el runtime
+
+El runtime proporciona:
+
+- ejecución del modelo
+- autenticación del proveedor
+- comportamiento de la ejecución de herramientas
+- límites de tasa y capacidades específicas del modelo
+- transcripciones y pruebas de entrega específicas del runtime
+
+## Rutas de runtime compatibles
+
+| Ruta de runtime | Ruta de proveedor/modelo | Mejor para | Notas |
+| --- | --- | --- | --- |
+| Claude Code | Anthropic / modelos Claude | Usuarios de Claude Code y flujos de trabajo respaldados por Anthropic | Ruta predeterminada local-first para equipos de Claude. Requiere que el runtime y el acceso a la cuenta estén disponibles localmente. |
+| Codex | Codex / modelos respaldados por OpenAI | Flujos de trabajo nativos de Codex | Utiliza la integración del runtime de Codex y el estado de auth/cuenta de Codex cuando está disponible. Algunos diagnósticos difieren de las transcripciones de Claude. |
+| OpenCode | Enrutamiento de modelos gestionado por OpenCode | Equipos multiproveedor y amplia cobertura de modelos | OpenCode puede enrutar a través de muchos proveedores de modelos. Agent Teams trata las lanes de OpenCode como pruebas específicas del runtime y evita hacer suposiciones cuando la identidad de la lane es ambigua. |
+
+Gemini está disponible como ruta de proveedor compatible con autenticación mediante Google ADC (gcloud auth), OAuth de Gemini CLI y clave de API. Aparece junto a otros proveedores en la interfaz de creación de equipos y de configuración del runtime cuando el runtime lo reporta como disponible.
+
+## IDs de proveedor
+
+Actualmente la aplicación reconoce estos IDs de proveedor en la configuración de equipo/runtime:
+
+| ID de proveedor | Intención de visualización |
+| --- | --- |
+| `anthropic` | Ruta de Anthropic / Claude Code |
+| `codex` | Ruta de Codex |
+| `gemini` | Ruta del proveedor Gemini (Google ADC, Gemini CLI o clave de API) |
+| `opencode` | Ruta de OpenCode, incluido el enrutamiento de proveedores gestionado por OpenCode |
+
+No interpretes esta tabla como una garantía de que todos los proveedores estén autenticados, instalados o disponibles para todos los modelos en todas las máquinas. El estado del runtime y las comprobaciones de capacidades son la fuente de verdad para un lanzamiento determinado.
+
+## IDs de modelo
+
+Los IDs de modelo se pasan al runtime seleccionado. Agent Teams no reescribe el catálogo de modelos de un proveedor en un esquema de nomenclatura universal.
+
+Ejemplos:
+
+| Ruta de proveedor | Ejemplo de ID de modelo | Notas |
+| --- | --- | --- |
+| Claude Code | `opus`, `sonnet`, o un ID completo de modelo Claude | La disponibilidad depende de Claude Code y del acceso a la cuenta |
+| Codex | `gpt-5.4`, `gpt-5.3-codex` | La disponibilidad proviene del estado de cuenta/runtime de Codex |
+| OpenCode | `openrouter/moonshotai/kimi-k2.6` | El prefijo debe coincidir con una configuración de proveedor de OpenCode |
+
+Si un nombre de modelo es rechazado, verifícalo primero directamente en el runtime/proveedor. Cambiar el briefing de un equipo no puede hacer que se lance un modelo no disponible.
+
+## Estrategia multiproveedor
+
+Agent Teams mantiene la orquestación consciente del proveedor, pero no propiedad del proveedor:
+
+- los equipos, las tareas, las bandejas de entrada, los comentarios, el estado de revisión y los diagnósticos de lanzamiento permanecen en el almacenamiento local de Agent Teams
+- cada miembro puede llevar configuraciones de proveedor/modelo a través de los metadatos de lanzamiento del equipo
+- la disponibilidad de modelos, la autenticación, los límites de tasa y el comportamiento de las herramientas siguen siendo responsabilidades del runtime/proveedor
+- OpenCode es la ruta de enrutamiento más amplia cuando quieres que un equipo utilice varias lanes de proveedor/modelo
+
+Para conocer los límites orientados a colaboradores y la guía canónica de implementación, consulta [Arquitectura para colaboradores](/es/reference/contributor-architecture).
+
+Patrones recomendados:
+
+| Patrón | Cuándo ayuda | Riesgo |
+| --- | --- | --- |
+| Un proveedor para todos los miembros | Primer lanzamiento, repos sensibles, depuración más sencilla | Los límites de tasa compartidos pueden detener a todo el equipo |
+| Lead potente + builders más económicos | Mantener la planificación/revisión fiable mientras se reduce el coste de implementación | La salida de los builders puede requerir una revisión más estricta |
+| Modelos separados para builder y reviewer | Detectar puntos ciegos específicos de cada modelo | Más configuración y atribución que inspeccionar |
+
+## Costes del proveedor
+
+Agent Teams es gratis y de código abierto. Puedes empezar con el modelo gratuito incluido sin autenticación: sin registro, claves de API ni tarjeta de crédito. El uso de proveedores de pago o respaldados por una cuenta se rige por el runtime/proveedor que selecciones: los límites de suscripción, las claves de API, la autenticación de la cuenta, los límites de tasa y las políticas del proveedor permanecen todos externos a la aplicación.
+
+## Comprobaciones de capacidades
+
+Durante la configuración, la aplicación puede realizar comprobaciones de acceso y de capacidades. Esto ayuda a detectar la falta de autenticación del runtime antes de que un lanzamiento de equipo falle a mitad del aprovisionamiento.
+
+Las comprobaciones de capacidades pueden informar de que un proveedor existe pero no está autenticado, de que una lista de modelos no está disponible, de que falta una ruta de runtime o de que una capacidad de extensión específica no es compatible. Trata esos resultados como diagnósticos de configuración, no como fallos de tareas.
+
+Soluciones típicas de configuración:
+
+| Resultado de la comprobación | Qué hacer |
+| --- | --- |
+| Runtime ausente | Instala la CLI o corrige el `PATH` |
+| Proveedor no autenticado | Ejecuta el flujo de inicio de sesión del proveedor o añade la clave de API requerida |
+| Modelo no disponible | Elige un modelo visible en la lista de modelos de ese runtime |
+| Capacidad no compatible | Usa otra ruta de runtime para ese compañero de equipo |
+
+## Límites que cabe esperar
+
+- La compatibilidad con un runtime no significa una paridad de funciones igual entre Claude Code, Codex y OpenCode.
+- La cobertura de registros y transcripciones difiere según el runtime.
+- Las lanes de OpenCode necesitan pruebas estables de lane/sesión antes de que la aplicación pueda atribuir los registros del runtime de forma segura.
+- Los nombres de modelo de los proveedores y su disponibilidad pueden cambiar al margen de la aplicación.
+- Un prompt de equipo no puede solucionar la falta de autenticación, las entradas de PATH ausentes, las interrupciones del proveedor ni los límites de tasa agotados.
diff --git a/landing/product-docs/es/reference/release-notes.md b/landing/product-docs/es/reference/release-notes.md
new file mode 100644
index 00000000..ae6afc9e
--- /dev/null
+++ b/landing/product-docs/es/reference/release-notes.md
@@ -0,0 +1,42 @@
+---
+title: Notas de la versión – Documentación de Agent Teams
+description: Notas de la versión y registro de cambios de Agent Teams. Enlaces a los archivos canónicos RELEASE.md y CHANGELOG.md con todos los detalles.
+lang: es-ES
+---
+
+# Notas de la versión
+
+Versión actual: **v1.2.0** (2026-03-31). El desarrollo activo continúa en la rama `main` con cambios sin publicar para la sincronización del trabajo de los miembros, el endurecimiento de la entrega en OpenCode y la estabilización de la CI.
+
+## Cómo funcionan las versiones
+
+Agent Teams sigue el [versionado semántico](https://semver.org/). Las etiquetas enviadas al repositorio activan un [flujo de trabajo de publicación](https://github.com/777genius/agent-teams-ai/blob/main/docs/RELEASE.md) automatizado que compila paquetes firmados para macOS, Windows y Linux, y luego los publica en GitHub Releases.
+
+## Versiones recientes
+
+### v1.2.0 — Agent Graph, aprobación de herramientas por equipo, AskUserQuestion interactivo
+
+Agent Graph con visualización dirigida por fuerzas y disposición de tareas en kanban, controles de aprobación de herramientas por equipo con prompts de permisos legibles, notificaciones de comentarios en las tareas y botones interactivos de AskUserQuestion. Renovación del sistema de permisos con la inicialización de Write/Edit/NotebookEdit e integración del catálogo de herramientas de MCP. Consulta el [registro de cambios completo](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md#120---2026-03-31).
+
+### v1.1.0 — React 19 + Electron 40, inicios de tareas iniciados por el usuario
+
+Migración a React 19 + Electron 40, inicios de tareas iniciados por el usuario desde el tablero kanban, guía de solución de problemas de autenticación, resaltado de sintaxis para R/Ruby/PHP/SQL, búsqueda de transcripciones 3 veces más rápida, correcciones de rutas en WSL/Windows y corrección de una vulnerabilidad XSS. Consulta el [registro de cambios completo](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md#110---2026-03-25).
+
+### v1.0.0 — Primera versión pública
+
+Primera compilación estable: fiabilidad de CLI/autenticación en las aplicaciones empaquetadas, endurecimiento de IPC, empaquetado multiplataforma con compilaciones firmadas para macOS, documentos de gobernanza de código abierto (LICENSE, CONTRIBUTING, CODE_OF_CONDUCT, SECURITY). Consulta el [registro de cambios completo](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md#100---2026-03-23).
+
+## Fuentes canónicas
+
+| Documento | Descripción |
+| --- | --- |
+| [RELEASE.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/RELEASE.md) | Proceso de publicación, guía de versionado, nomenclatura de los artefactos, configuración de la actualización automática y plantilla de notas de la versión. |
+| [CHANGELOG.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md) | Registro de cambios completo con todas las versiones, funciones, mejoras y correcciones de errores desde la perspectiva del usuario. |
+| [GitHub Releases](https://github.com/777genius/agent-teams-ai/releases) | Instaladores descargables para todas las plataformas. |
+
+## Páginas relacionadas
+
+- [Instalación](/es/guide/installation)
+- [Inicio rápido](/es/guide/quickstart)
+- [Arquitectura para colaboradores](/es/reference/contributor-architecture)
+- [Desarrolladores](/es/developers/)
diff --git a/landing/product-docs/fr/developers/index.md b/landing/product-docs/fr/developers/index.md
new file mode 100644
index 00000000..f7d4f39d
--- /dev/null
+++ b/landing/product-docs/fr/developers/index.md
@@ -0,0 +1,69 @@
+---
+title: Hub développeur – Documentation Agent Teams
+description: Point d'entrée pour les contributeurs et les développeurs sur l'architecture d'Agent Teams, les garde-fous, le débogage et les chemins d'extension MCP.
+lang: fr-FR
+---
+
+# Hub développeur
+
+Utilisez cette page lorsque vous souhaitez modifier Agent Teams lui-même, déboguer un lancement d'équipe ou étendre un runtime avec des outils MCP. Les liens ci-dessous pointent vers les documents canoniques du dépôt afin que les règles d'implémentation restent centralisées.
+
+## Commencez ici
+
+| Besoin | Aller à |
+| --- | --- |
+| Vue d'ensemble du dépôt, scripts et configuration des sources | [README.md](https://github.com/777genius/agent-teams-ai/blob/main/README.md) |
+| Index de navigation et d'architecture pour les agents | [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) |
+| Conventions de travail pour les agents et les contributeurs | [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) |
+| Garde-fous d'implémentation stricts | [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) |
+| Structure des fonctionnalités moyennes et grandes | [Standard d'architecture des fonctionnalités](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) |
+| Débogage du lancement, du bootstrap et de la messagerie des coéquipiers | [Runbook de débogage des équipes d'agents](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) |
+| Processus de contribution | [Guide de contribution](https://github.com/777genius/agent-teams-ai/blob/main/.github/CONTRIBUTING.md) |
+| Notes de version / Changelog | [RELEASE.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/RELEASE.md) — [CHANGELOG.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md) |
+
+## Chemin de développement local
+
+Lancez l'application de bureau Electron pour un développement normal :
+
+```bash
+pnpm install
+pnpm dev
+```
+
+Le chemin navigateur/web ne remplace pas le runtime de bureau. Le mode bureau est le chemin local pris en charge, car il inclut l'IPC, les terminaux, l'authentification des fournisseurs, la gestion du cycle de vie des équipes, les diagnostics de lancement et les ponts runtime utilisés par les véritables équipes.
+
+## Points de contrôle de l'architecture
+
+Avant de modifier une fonctionnalité, identifiez sa frontière :
+
+| Domaine | Emplacement attendu |
+| --- | --- |
+| Fonctionnalité produit moyenne ou grande | `src/features//` |
+| Orchestration du processus principal Electron | `src/main/` |
+| Surface d'API sûre pour le preload | `src/preload/` |
+| Interface du renderer et état de l'application | `src/renderer/` |
+| Types partagés et helpers purs | `src/shared/` |
+| Serveur MCP du tableau Agent Teams | `mcp-server/` |
+| Contrôleur de données du tableau | `agent-teams-controller/` |
+
+Utilisez `src/features/recent-projects` comme slice de référence pour l'organisation des fonctionnalités. Gardez les contrats inter-processus explicites et évitez les imports profonds au travers des frontières de fonctionnalités.
+
+## Chemin de débogage
+
+Pour les blocages au lancement, les états OpenCode `registered` / bootstrap non confirmé, les réponses de coéquipiers manquantes ou les journaux de tâches suspects :
+
+1. Commencez par le [runbook de débogage](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md).
+2. Inspectez le pack d'artefacts le plus récent sous `~/.claude/teams//launch-failure-artifacts/latest.json`.
+3. Ouvrez l'artefact `manifest.json` et vérifiez `classification`, les fils d'Ariane du bootstrap, les diagnostics de lancement, les statuts de spawn des membres et les fins de journaux expurgées.
+4. Ne nettoyez que l'équipe, l'exécution, le panneau ou le processus que vous pouvez identifier comme appartenant au smoke test ou au lancement échoué.
+
+## Chemin de développement MCP
+
+Agent Teams utilise un serveur MCP intégré nommé `agent-teams` pour les opérations du tableau. Les serveurs MCP utilisateur et projet peuvent ajouter des capacités externes pour les runtimes. Consultez [Intégration MCP](/fr/guide/mcp-integration) pour des exemples de configuration, la structure de `.mcp.json` et des conseils sur l'enregistrement des outils.
+
+## Docs associées
+
+- [Architecture pour les contributeurs](/fr/reference/contributor-architecture)
+- [Configuration du runtime](/fr/guide/runtime-setup)
+- [Intégration MCP](/fr/guide/mcp-integration)
+- [Dépannage](/fr/guide/troubleshooting)
diff --git a/landing/product-docs/fr/guide/agent-workflow.md b/landing/product-docs/fr/guide/agent-workflow.md
new file mode 100644
index 00000000..8cd91e2a
--- /dev/null
+++ b/landing/product-docs/fr/guide/agent-workflow.md
@@ -0,0 +1,121 @@
+---
+title: Flux de travail des agents – Documentation Agent Teams
+description: Comprenez le cycle de vie des tâches, le tableau kanban, les messages, les journaux de tâches, le travail en parallèle, les processus en direct et la communication inter-équipes.
+lang: fr-FR
+---
+
+# Flux de travail des agents
+
+Agent Teams rend le travail des agents visible sous forme d'état de tâche, de messages, de journaux et de modifications de code révisables.
+
+## Modes
+
+| Mode | Description |
+| --- | --- |
+| Solo | Un coéquipier avec des tâches auto-gérées |
+| Équipe | Plusieurs coéquipiers travaillant en parallèle et se révisant mutuellement |
+
+Les deux modes partagent les mêmes surfaces de kanban, de journaux de tâches et de revue de code.
+
+## Cycle de vie des tâches
+
+Agent Teams suit chaque tâche selon deux dimensions indépendantes : le statut de travail et l'état de revue.
+
+| Dimension | États | Description |
+| --- | --- | --- |
+| Statut de travail | `pending`, `in_progress`, `completed` | Indique si la tâche est en attente, activement en cours de traitement ou terminée par son propriétaire |
+| État de revue | `none`, `review`, `needsFix`, `approved` | Indique où en est la tâche dans le flux de revue post-achèvement |
+
+Le tableau kanban affiche la vue combinée, mais les deux dimensions évoluent indépendamment.
+
+### Flux du statut de travail
+
+| Étape | Ce qui se passe | Propriétaire |
+| --- | --- | --- |
+| Pending | La tâche est créée et prête, mais personne n'a encore commencé le travail | Lead ou utilisateur |
+| In progress | Les agents travaillent et mettent à jour l'état de la tâche via les outils MCP du tableau | Coéquipiers |
+| Completed | Le propriétaire publie un commentaire de résultat et marque la tâche comme terminée | Coéquipier |
+
+### Flux de l'état de revue
+
+| Étape | Ce qui se passe | Propriétaire |
+| --- | --- | --- |
+| None | La tâche n'est pas encore en revue (elle peut être pending, in progress ou récemment completed) | — |
+| Review | Une revue a été demandée ; un relecteur inspecte le diff et le résultat | Relecteur |
+| Needs fix | Des modifications ont été demandées lors de la revue ; le propriétaire doit mettre à jour | Coéquipier (propriétaire) |
+| Approved | La revue a réussi ; la tâche est finalisée | Relecteur |
+
+### Planification → In progress
+
+Lorsqu'un coéquipier démarre une tâche, le statut de travail passe à `in_progress`. L'agent crée un commentaire de tâche avec son plan et poursuit le travail. Toutes les actions des outils natifs (read, bash, edit, write) sont diffusées dans un journal de tâche.
+
+### Completed → Review
+
+Lorsque le coéquipier termine son travail, il publie un commentaire de résultat et fait passer le statut de travail à `completed`. Le lead ou le relecteur peut alors demander une revue pour lancer le flux de revue.
+
+### Review → Approved
+
+Si la surface de revue affiche des modifications acceptables, approuvez la revue. La tâche est finalisée et liée à son diff.
+
+::: warning Revue par correction d'abord
+Si l'on demande des modifications à un coéquipier lors de la revue, il doit publier un commentaire de suivi avec les corrections, puis le lead peut approuver.
+:::
+
+## Tableau kanban
+
+Le tableau est la principale surface d'exploitation. Il vous permet de :
+
+- Parcourir le travail ouvert, bloqué et en revue
+- Ouvrir le détail d'une tâche et inspecter les journaux d'exécution
+- Réviser les modifications sans lire les fichiers de session bruts
+- Attribuer ou réattribuer des propriétaires
+
+::: tip
+Utilisez les boutons d'action rapide sur les cartes pour démarrer, terminer ou demander une revue sans ouvrir le panneau de détail.
+:::
+
+## Messages et commentaires
+
+| Canal | Quand l'utiliser |
+| --- | --- |
+| Message direct | Rediriger un agent, poser une question rapide |
+| Commentaire de tâche | Notes appartenant à une tâche spécifique |
+
+Les commentaires conservent le contexte pour une revue ultérieure et apparaissent dans la chronologie de la tâche.
+
+::: tip Préférez les commentaires de tâche
+Si la remarque concerne une tâche spécifique, ajoutez-la en commentaire sur cette tâche plutôt que d'envoyer un message direct. Cela garde l'historique lié au travail.
+:::
+
+## Journaux de tâches
+
+Les journaux propres à une tâche isolent la sortie d'exécution, les actions et les messages d'une seule affectation. Utilisez-les pour répondre à :
+
+- Qu'a exécuté cet agent ?
+- Pourquoi a-t-il modifié ce fichier ?
+- A-t-il demandé de l'aide à un autre coéquipier ?
+- Quelle tâche a produit ce diff ?
+
+### Liste de vérification
+
+Lorsqu'une tâche semble bloquée ou que son diff paraît détaché, vérifiez le cycle de vie dans cet ordre :
+
+1. La tâche a le propriétaire attendu et est passée à `in_progress`.
+2. Le propriétaire a publié un commentaire de tâche avec le plan ou la première mise à jour d'avancement.
+3. Les journaux de tâche montrent une activité d'exécution dans la fenêtre de la tâche.
+4. Les modifications de fichiers sont liées à la même tâche, au même propriétaire et à la même session.
+5. Le commentaire final de la tâche inclut la commande de vérification et son résultat.
+
+Pour un débogage plus poussé, utilisez les commandes de preuve persistée dans [Dépannage](/fr/guide/troubleshooting#task-log-triage). L'interface est la surface de travail, mais les fichiers de tâches persistés, les boîtes de réception et les preuves d'exécution sont la source pour les bugs difficiles de lancement ou d'attribution.
+
+## Modèles de travail en parallèle
+
+Les coéquipiers peuvent travailler simultanément sur des tâches indépendantes. Vous pouvez également créer des liens de dépendance (`blocked-by`) pour qu'une tâche attende qu'une autre soit terminée. Surveillez le tableau pour repérer les voies bloquées et réattribuez les propriétaires si un coéquipier est inactif tandis qu'un autre est surchargé.
+
+## Processus en direct
+
+La section des processus en direct affiche les URL et les processus en cours d'exécution lorsque les agents démarrent des serveurs ou des outils locaux. Ouvrez les URL directement depuis l'application pour inspecter les résultats. Les processus restent enregistrés jusqu'à ce qu'ils soient explicitement arrêtés ou que le runtime se ferme.
+
+## Communication inter-équipes
+
+Les agents peuvent envoyer des messages à d'autres équipes lorsque les équipes sont liées. Utilisez cela pour les transferts, les bibliothèques partagées ou les vérifications de statut entre escouades.
diff --git a/landing/product-docs/fr/guide/code-review.md b/landing/product-docs/fr/guide/code-review.md
new file mode 100644
index 00000000..cf6f8e23
--- /dev/null
+++ b/landing/product-docs/fr/guide/code-review.md
@@ -0,0 +1,119 @@
+---
+title: Revue de code – Documentation Agent Teams
+description: Inspectez les diffs liés aux tâches, acceptez ou rejetez des hunks, laissez des commentaires en ligne et gérez les états de revue, de none jusqu'à approved.
+lang: fr-FR
+---
+
+# Revue de code
+
+La revue de code dans Agent Teams est centrée sur les tâches. Vous inspectez ce qui a changé pour une tâche précise au lieu de fouiller dans un diff volumineux et non structuré.
+
+## Surface de revue
+
+Pour chaque tâche terminée qui a modifié des fichiers, l'interface de revue vous permet de :
+
+- Inspecter les fichiers modifiés avec le contexte avant/après
+- Accepter ou rejeter des hunks individuels
+- Laisser des commentaires en ligne
+- Relier le diff à la description de la tâche et aux journaux de l'agent
+
+## Décisions au niveau du hunk
+
+Acceptez les petites modifications correctes et rejetez les erreurs isolées sans jeter toute la tâche. C'est utile lorsqu'un agent a globalement résolu la tâche mais est allé trop loin dans un fichier.
+
+::: tip Accepter de façon incrémentale
+Si un diff est globalement correct, acceptez d'abord les bons hunks et demandez des modifications uniquement pour les parties à corriger. Cela permet de garder le tableau en mouvement.
+:::
+
+Utilisez les décisions au niveau du hunk pour :
+
+| Situation | Action |
+| --- | --- |
+| Modification correcte et ciblée | Accepter le hunk |
+| Bonne idée, mauvais fichier ou refactor trop large | Rejeter le hunk et demander une correction plus ciblée |
+| Changement de comportement peu clair | Commenter et demander une vérification |
+| Bruit de formatage généré | Rejeter sauf si le formatage faisait partie de la tâche |
+
+## Lancer une revue
+
+1. Ouvrez une tâche terminée
+2. Regardez l'onglet **Changes**
+3. Si le diff semble raisonnable, cliquez sur **Request Review** pour déplacer la tâche dans la colonne review
+
+Pendant la revue, la tâche n'est pas encore considérée comme done, de sorte que d'autres coéquipiers ou le lead peuvent encore la commenter.
+
+## Boucle de revue
+
+Une boucle de revue saine ressemble à ceci :
+
+1. Le propriétaire publie un commentaire de résultat avec le périmètre modifié et la vérification
+2. Le relecteur ouvre le diff de la tâche et confronte les hunks à la description de la tâche
+3. Le relecteur accepte les bons hunks, rejette les mauvais hunks ou demande des modifications
+4. Le propriétaire corrige uniquement le périmètre demandé et publie un commentaire de suivi
+5. Le relecteur approuve lorsque le résultat de la tâche et le diff correspondent
+
+Exemple de commentaire de demande de modifications :
+
+```text
+Please keep the copy improvements, but revert the unrelated runtime wording in the provider table. Add the `pnpm --dir landing docs:build` result before resubmitting.
+```
+
+## États de revue
+
+| État | Signification |
+| --- | --- |
+| `none` | La tâche est nouvelle, in progress, ou terminée mais pas encore en revue |
+| `review` | La tâche est activement en cours de revue |
+| `needsFix` | Des modifications ont été demandées ; le propriétaire doit mettre à jour avant une nouvelle approbation |
+| `approved` | La revue a été acceptée et la tâche est finalisée |
+
+## Flux de revue par les agents
+
+Les équipes peuvent relire le travail des unes et des autres avant que vous ne preniez la décision finale. Cela permet de détecter les régressions évidentes et de garder le tableau honnête, mais vous devriez tout de même relire vous-même les zones à risque.
+
+La revue par les agents est la plus utile lorsque le relecteur dispose d'une grille claire. Par exemple, demandez à un relecteur de vérifier uniquement la clarté de la documentation, uniquement la sécurité de l'IPC ou uniquement la couverture de tests. Les demandes larges de type « tout relire » tendent à produire des retours plus faibles.
+
+### État de revue piloté par MCP
+
+Les changements d'état de revue (request review, request changes, approve) sont pilotés par des outils. Laisser un commentaire « request changes » sur une tâche ne déplace **pas** la colonne kanban vers `needsFix` — un lead ou un agent doit appeler l'outil MCP approprié :
+
+- `review_request_changes` — déplace la tâche vers `needsFix` et notifie le propriétaire
+- `review_approve` — déplace la tâche vers `approved` et finalise la revue
+
+Les commentaires seuls ne suffisent pas pour les transitions d'état. Pour la liste complète des outils MCP de revue et leurs paramètres, voir [Intégration MCP](/fr/guide/mcp-integration).
+
+## Participants à la revue
+
+Le lead de l'équipe est le relecteur par défaut. Vous pouvez configurer des relecteurs supplémentaires dans les paramètres du Kanban si vous souhaitez que des pairs relisent le travail des unes et des autres.
+
+## Ce qu'il faut vérifier manuellement
+
+Priorisez ces domaines lors de la revue :
+
+- **Authentification des fournisseurs et détection du runtime** — l'agent a-t-il modifié la configuration du runtime d'une manière qui casserait d'autres chemins ?
+- **IPC, preload et frontières du système de fichiers** — gardez les responsabilités d'Electron séparées
+- **Comportement Git et worktree** - vérifiez le nommage des branches, les commits et les pushes ; voir [Stratégie Git et worktree](/fr/guide/git-worktree-strategy) pour les patterns d'isolation.
+- **Logique de parsing et de cycle de vie des tâches** — les modifications des références de tâches, du chunking ou du filtrage peuvent casser la livraison des messages
+- **Flux de persistance et de revue de code** — les modifications du stockage des tâches ou de l'état de revue doivent rester cohérentes entre les couches IPC
+
+Pour la disposition canonique des fonctionnalités et les liens des garde-fous stricts, utilisez [Architecture pour les contributeurs](/fr/reference/contributor-architecture).
+
+## Vérification
+
+Préférez des commandes de vérification ciblées. Les commandes de formatage large ou de lint-fix ne devraient pas être utilisées sauf si la tâche vise explicitement un brassage de formatage à grande échelle.
+
+Les bons commentaires de vérification incluent la commande et le résultat :
+
+```text
+Verified with `pnpm --dir landing docs:build`. Build passed.
+```
+
+Lorsque la vérification est omise, le commentaire de tâche devrait en expliquer la raison :
+
+```text
+Docs-only wording change. Build not run because the existing dev server was busy; checked Markdown links manually.
+```
+
+::: warning Ne pas formater automatiquement tout le projet
+Sauf si la tâche concerne spécifiquement le formatage, évitez d'exécuter `pnpm lint:fix` sur des fichiers sans rapport. Cela crée du bruit dans la surface de revue.
+:::
diff --git a/landing/product-docs/fr/guide/create-team.md b/landing/product-docs/fr/guide/create-team.md
new file mode 100644
index 00000000..f8af3845
--- /dev/null
+++ b/landing/product-docs/fr/guide/create-team.md
@@ -0,0 +1,106 @@
+---
+title: Créer une équipe – Documentation Agent Teams
+description: Définissez les rôles, attribuez des fournisseurs et des modèles, rédigez un brief d'équipe et configurez l'isolation par worktree ainsi que les niveaux d'autonomie.
+lang: fr-FR
+---
+
+# Créer une équipe
+
+Une équipe est un groupe nommé d'agents doté de rôles, d'un lead, d'un projet cible et d'un prompt de coordination.
+
+## Première équipe recommandée
+
+Commencez par une petite équipe :
+
+| Rôle | Objectif |
+| -------- | --------------------------------------------------------- |
+| Lead | Répartit le travail, crée les tâches, coordonne l'équipe |
+| Builder | Implémente des tâches au périmètre défini |
+| Reviewer | Examine les résultats, repère les régressions, demande des correctifs |
+
+Cette configuration vous donne assez de coordination pour percevoir la valeur du produit sans rendre le premier lancement trop bruyant.
+
+::: tip
+Vous pourrez ajouter d'autres membres plus tard. Commencez petit, validez le flux de travail, puis montez en puissance.
+:::
+
+## Attribuer des fournisseurs et des modèles
+
+Chaque membre de l'équipe s'exécute sur un backend fournisseur. Dans l'éditeur d'équipe, choisissez un fournisseur (Claude, Codex ou OpenCode) et un modèle pour chaque membre. L'application n'affiche que les fournisseurs que vous avez déjà authentifiés.
+
+Le mélange de fournisseurs au sein d'une même équipe est pris en charge — par exemple, un lead Claude avec des builders OpenCode.
+
+::: info
+Gemini est disponible comme parcours fournisseur pris en charge. Consultez [Fournisseurs et runtimes](/fr/reference/providers-runtimes) pour les options d'authentification et le statut actuel des fournisseurs.
+:::
+
+## Rédiger un bon brief d'équipe
+
+Le brief d'équipe doit inclure :
+
+- le résultat que vous souhaitez
+- les fichiers ou les domaines fonctionnels qui comptent
+- les limites de risque, par exemple « ne pas refactoriser des modules sans rapport »
+- les attentes en matière de revue
+- les commandes de vérification lorsque vous les connaissez
+
+Exemple :
+
+```text
+Build a focused improvement to the download flow. Keep changes inside the landing app unless a shared helper is clearly needed. Create tasks before implementation, review each task diff, and run landing lint/build checks.
+```
+
+## Isolation par worktree
+
+Les membres OpenCode peuvent utiliser l'**isolation par worktree** pour travailler dans un worktree Git distinct plutôt que dans le répertoire de travail principal. Cela évite les conflits de fichiers lorsque plusieurs agents modifient le même projet.
+
+::: warning
+L'isolation par worktree nécessite un projet suivi par Git et est actuellement limitée aux membres OpenCode.
+:::
+
+Pour l'activer, basculez l'option **Worktree isolation** lors de l'ajout ou de la modification d'un membre d'équipe OpenCode.
+
+## Choisir l'autonomie
+
+Agent Teams prend en charge différents niveaux de contrôle. Utilisez davantage d'autonomie pour les modifications de routine et une revue plus stricte pour les zones à risque comme l'authentification des fournisseurs, l'IPC, la persistance, les workflows Git et l'outillage de release.
+
+### Niveau d'effort
+
+Chaque membre de l'équipe dispose d'un paramètre d'**effort** qui contrôle la quantité de raisonnement que le fournisseur investit avant de répondre. Un effort plus élevé produit des résultats plus approfondis au prix de plus de temps et de tokens.
+
+| Niveau | Quand l'utiliser |
+| ------- | ------------------------------------------------------------- |
+| Low | Recherches rapides, petites modifications de mise en forme, retouches de routine |
+| Medium | Valeur par défaut pour la plupart des tâches d'implémentation |
+| High | Refactorisations complexes, changements transversaux, chemins de code à risque |
+
+L'application propose des niveaux supplémentaires (minimal, xhigh, max) pour les fournisseurs qui les prennent en charge. Si un modèle ne prend pas en charge l'effort configurable, le sélecteur est désactivé et la valeur par défaut du fournisseur est utilisée.
+
+### Mode rapide
+
+Basculez le **Fast mode** par membre pour privilégier la vitesse à la profondeur. Cela correspond au mode rapide/vitesse natif du fournisseur lorsqu'il est disponible. Réglez-le sur **On** pour les tâches de routine, sur **Off** pour le travail minutieux, ou sur **Inherit** pour suivre la valeur par défaut au niveau de l'équipe.
+
+### Limiter le contexte
+
+Activez **Limit context** pour réduire la fenêtre de contexte d'un membre. C'est utile pour les modèles Claude qui prennent en charge un contexte étendu (par exemple 1M de tokens) — limiter le contexte évite une consommation inutile de tokens et peut améliorer la latence des tâches qui n'ont pas besoin d'un large contexte.
+
+## Ajouter du contexte
+
+Joignez des fichiers, des captures d'écran ou des notes spécifiques lorsqu'ils modifient sensiblement la tâche. Les agents peuvent utiliser les descriptions de tâches, les commentaires et les pièces jointes comme contexte durable.
+
+## Veiller à la qualité des tâches
+
+Les bonnes équipes créent des tâches qui sont :
+
+- assez spécifiques pour être examinées
+- assez petites pour être terminées
+- liées à un résultat visible
+- adossées à un chemin de vérification
+
+Si le lead crée des tâches vagues, envoyez-lui un message direct pour demander des tâches plus petites et testables.
+
+## Étapes suivantes
+
+- [Configuration du runtime](/fr/guide/runtime-setup) — configurez l'authentification des fournisseurs et les modèles
+- [Revue de code](/fr/guide/code-review) — acceptez, rejetez ou commentez les modifications des agents
+- [Dépannage](/fr/guide/troubleshooting) — problèmes courants et solutions
diff --git a/landing/product-docs/fr/guide/git-worktree-strategy.md b/landing/product-docs/fr/guide/git-worktree-strategy.md
new file mode 100644
index 00000000..f21d6e47
--- /dev/null
+++ b/landing/product-docs/fr/guide/git-worktree-strategy.md
@@ -0,0 +1,102 @@
+---
+title: Stratégie Git et worktree – Documentation Agent Teams
+description: Déterminez quand utiliser le worktree principal, les branches de fonctionnalité ou l'isolation par worktree d'OpenCode pour le travail d'agents en parallèle.
+lang: fr-FR
+---
+
+# Stratégie Git et worktree
+
+Git offre à Agent Teams le meilleur parcours de revue : des diffs ciblés, une visibilité des branches, des modifications délimitées par tâche et un travail parallèle plus sûr.
+
+## Choisir une stratégie
+
+| Stratégie | À utiliser quand | Compromis |
+| --- | --- | --- |
+| Worktree principal | Travail en solo, modifications de documentation uniquement, ou un seul coéquipier à la fois | Simple, mais les modifications parallèles peuvent entrer en collision |
+| Branche de fonctionnalité | Une équipe travaille sur une modification cohérente unique | Cible de revue propre, mais les coéquipiers partagent toujours les fichiers |
+| Isolation par worktree | Plusieurs coéquipiers OpenCode peuvent modifier le même dépôt en parallèle | Meilleure isolation, mais la fusion/revue demande plus de discipline |
+
+Commencez simple. Ajoutez l'isolation par worktree lorsque des modifications parallèles sont probables, et non parce que chaque tâche nécessiterait un checkout distinct.
+
+## Quand activer l'isolation par worktree
+
+Activez-la pour les coéquipiers OpenCode quand :
+
+- deux coéquipiers ou plus peuvent modifier le même dépôt en même temps
+- une tâche peut exécuter des formateurs, des générateurs de code ou des tests étendus
+- vous souhaitez que la branche et le diff de chaque coéquipier restent séparés
+- l'espace de travail du lead est sale et ne devrait pas recevoir de modifications directes
+
+Laissez-la désactivée quand :
+
+- la tâche est en lecture seule
+- un seul coéquipier détient toutes les modifications
+- le dépôt n'est pas suivi par Git
+- vous avez besoin d'un chemin de runtime qui ne prend pas en charge ce mode d'isolation
+
+::: warning
+L'isolation par worktree s'applique actuellement aux membres OpenCode et nécessite un projet suivi par Git.
+:::
+
+## Hygiène des branches
+
+Avant de démarrer un travail en parallèle :
+
+```bash
+git status --short
+git branch --show-current
+```
+
+Utilisez une branche propre lorsque c'est possible. Si le worktree principal contient déjà des modifications de l'utilisateur, demandez aux agents de ne pas annuler les fichiers sans rapport et de garder un périmètre de tâche étroit.
+
+Style de branche recommandé :
+
+```text
+agent//
+```
+
+Exemples :
+
+```text
+agent/docs/mcp-guide
+agent/review/task-log-filtering
+agent/ui/code-review-polish
+```
+
+## Flux de revue
+
+Pour les worktrees isolés, examinez le diff du coéquipier avant de fusionner ou d'appliquer les modifications dans l'espace de travail principal.
+
+1. Vérifiez que le commentaire de résultat de la tâche nomme le périmètre modifié et la vérification.
+2. Inspectez le diff de la tâche dans l'interface de revue.
+3. Demandez des modifications sur la tâche si le diff touche des fichiers sans rapport.
+4. Approuvez uniquement après que les tests ou les vérifications manuelles correspondent au risque de la tâche.
+5. Fusionnez ou appliquez les modifications délibérément.
+
+Ne fusionnez pas automatiquement la sortie d'un worktree juste parce que la tâche est terminée. L'achèvement signifie que l'agent estime que le travail est prêt pour la revue.
+
+## Politique de conflits
+
+Utilisez cette politique pour les équipes en parallèle :
+
+| Situation | Action |
+| --- | --- |
+| Deux coéquipiers modifient le même fichier | Mettez une tâche en pause ou désignez un responsable unique de l'intégration |
+| Des fichiers générés ont été modifiés de manière étendue | Exigez un commentaire expliquant le générateur et la commande |
+| Le worktree principal contient des modifications sans rapport | Préservez-les et n'examinez que les modifications propres à la tâche |
+| La branche du worktree diverge | Rebasez ou fusionnez manuellement après la revue, pas dans une tâche d'agent floue |
+
+## Exemple de prompt de tâche
+
+```text
+Implement the settings validation fix in your assigned worktree. Keep edits inside src/features/settings and focused tests. Do not touch provider auth or task storage. Post the test command and result before completing the task.
+```
+
+Ce prompt fonctionne parce qu'il nomme la zone autorisée, les frontières sensibles et la preuve d'achèvement.
+
+## Guides associés
+
+- [Créer une équipe](/fr/guide/create-team)
+- [Revue de code](/fr/guide/code-review)
+- [Exemples de briefs d'équipe](/fr/guide/team-brief-examples)
+- [Configuration du runtime](/fr/guide/runtime-setup)
diff --git a/landing/product-docs/fr/guide/installation.md b/landing/product-docs/fr/guide/installation.md
new file mode 100644
index 00000000..45ef2273
--- /dev/null
+++ b/landing/product-docs/fr/guide/installation.md
@@ -0,0 +1,129 @@
+---
+title: Installation – Documentation Agent Teams
+description: Téléchargez et installez Agent Teams pour macOS, Windows ou Linux. Couvre les builds packagés, la configuration depuis les sources, les mises à jour automatiques et les prérequis.
+lang: fr-FR
+---
+
+# Installation
+
+Agent Teams est distribué sous forme d'application de bureau pour macOS, Windows et Linux.
+
+::: tip Chemin le plus court
+1. Téléchargez le build correspondant à votre plateforme ci-dessous
+2. Lancez l'application - commencez avec le modèle gratuit sans authentification ou connectez l'authentification d'un fournisseur depuis l'interface
+3. Lancez le [démarrage rapide](/fr/guide/quickstart) pour créer votre première équipe
+
+Démarrage de l'application de bureau : exécutez `pnpm dev` pour l'application Electron. Ne lancez pas le mode dev navigateur/web pour un usage normal.
+:::
+
+## Télécharger les builds
+
+Utilisez la page de téléchargement ou la dernière [version GitHub](https://github.com/777genius/agent-teams-ai/releases) lorsque vous souhaitez l'application packagée :
+
+- macOS Apple Silicon : `.dmg`
+- macOS Intel : `.dmg`
+- Windows : `.exe`
+- Linux : `.AppImage`, `.deb`, `.rpm` ou `.pacman`
+
+::: warning Windows SmartScreen
+Les applications open source non signées ou récemment publiées peuvent déclencher SmartScreen. Si vous faites confiance à la source de la version, choisissez **More info** puis **Run anyway**.
+:::
+
+## Prérequis
+
+L'application packagée est conçue pour une intégration sans configuration. Vous pouvez commencer avec le modèle gratuit sans authentification - sans inscription, sans clés API ni carte de crédit. Si vous souhaitez davantage de modèles, l'application vous guide pour la détection du runtime et l'authentification des fournisseurs depuis l'interface.
+
+Pour les modèles payants ou liés à un compte, connectez au moins un fournisseur :
+
+| Fournisseur | Méthode d'accès |
+| ------------------ | ------------------------------------------------- |
+| Claude (Anthropic) | Connexion à la CLI Claude Code ou clé API |
+| Codex (OpenAI) | Connexion à la CLI Codex ou clé API |
+| Gemini (Google) | Google ADC, CLI Gemini ou clé API |
+| OpenCode | Modèle gratuit inclus sans authentification, ou clé API pour un backend pris en charge (par ex. OpenRouter) |
+
+::: info
+Gemini est disponible comme chemin de fournisseur pris en charge. Consultez [Fournisseurs et runtimes](/fr/reference/providers-runtimes) pour les options d'authentification et l'état actuel de tous les fournisseurs.
+:::
+
+Pour le développement depuis les sources, vous avez également besoin de :
+
+| Outil | Version |
+| ------- | ------- |
+| Node.js | 24.16.0 LTS |
+| pnpm | 10+ |
+
+Sur macOS, les binaires précompilés officiels de Node.js 24 nécessitent macOS 13.5 ou ultérieur.
+
+## Exécuter depuis les sources
+
+
+
+```bash
+git clone https://github.com/777genius/agent-teams-ai.git
+cd agent-teams-ai
+pnpm install
+pnpm dev
+```
+
+`pnpm dev` démarre l'application de bureau Electron avec rechargement à chaud. C'est la cible de développement par défaut — ne lancez pas de serveur de dev web dans le navigateur pour le développement normal. Le chemin navigateur ne dispose pas de l'ensemble du comportement de bureau : IPC, terminal, authentification des fournisseurs et cycle de vie des équipes.
+
+La branche `main` contient le dernier développement stable. Passez à des branches de fonctionnalités uniquement si vous avez besoin d'un changement spécifique non encore publié.
+
+## Vérifier la configuration
+
+Après l'installation, confirmez que le build est sain :
+
+```bash
+# Check that the desktop app compiles and starts
+pnpm typecheck
+
+# Verify the VitePress documentation site builds
+pnpm --dir landing docs:build
+```
+
+Si `pnpm typecheck` signale des erreurs de type, vérifiez s'il existe une version plus récente des dépendances ou un TypeScript épinglé. Si `pnpm --dir landing docs:build` échoue, inspectez `landing/product-docs/` pour détecter des erreurs de syntaxe dans le markdown ou la configuration.
+
+Si vous modifiez cette documentation, exécutez le build pour vérifier vos changements :
+
+```bash
+pnpm --dir landing docs:build
+```
+
+## Mises à jour automatiques
+
+L'application packagée recherche des mises à jour automatiquement au démarrage et périodiquement pendant son exécution. Lorsqu'une mise à jour est disponible, l'application vous invite à la télécharger et à l'installer. Vous pouvez également vérifier manuellement depuis le menu de l'application.
+
+::: tip
+Les mises à jour automatiques ne sont pas disponibles lors de l'exécution depuis les sources. Récupérez les dernières modifications et relancez `pnpm install` lorsque les dépendances changent.
+:::
+
+## Mettre à jour depuis les sources
+
+Si vous exécutez depuis les sources, récupérez la branche `main` et relancez l'installation lorsque les dépendances changent :
+
+```bash
+git pull
+pnpm install
+```
+
+Après la mise à jour, vérifiez le build et la documentation :
+
+```bash
+pnpm typecheck
+pnpm --dir landing docs:build
+```
+
+Utilisez toujours `pnpm dev` (Electron) — et non le serveur de dev navigateur — pour le développement normal.
+
+## Étapes suivantes
+
+- [Démarrage rapide](/fr/guide/quickstart) — de l'installation à la première équipe en cours d'exécution
+- [Configuration du runtime](/fr/guide/runtime-setup) — authentification des fournisseurs et sélection du modèle par runtime
+- [Créer une équipe](/fr/guide/create-team) — formes d'équipe recommandées et rédaction du brief
+
+### Pour les contributeurs
+
+- [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) — navigation dans le dépôt et repères d'architecture
+- [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) — conventions de travail et règles du projet
+- [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) — garde-fous stricts d'implémentation
diff --git a/landing/product-docs/fr/guide/mcp-integration.md b/landing/product-docs/fr/guide/mcp-integration.md
new file mode 100644
index 00000000..00d2487f
--- /dev/null
+++ b/landing/product-docs/fr/guide/mcp-integration.md
@@ -0,0 +1,225 @@
+---
+title: Intégration MCP – Documentation Agent Teams
+description: Configurez MCP dans Agent Teams pour les opérations sur le tableau, la coordination des coéquipiers, les serveurs d'outils externes et le développement d'outils personnalisés.
+lang: fr-FR
+---
+
+# Intégration MCP
+
+Agent Teams utilise MCP dans deux couches pratiques :
+
+| Couche | Ce qu'elle fait | Qui l'utilise |
+| --- | --- | --- |
+| Serveur de tableau intégré | Expose les outils Agent Teams de tâche, message, revue, processus, runtime et inter-équipes | Les leads et les coéquipiers lancés par l'application |
+| Serveurs MCP externes | Ajoutent des outils optionnels comme l'automatisation de navigateur, le contexte de conception, la recherche dans la documentation ou les systèmes d'entreprise | Les utilisateurs et les runtimes configurés |
+
+Gardez ces couches séparées. Le serveur MCP intégré `agent-teams` est la manière dont les agents se coordonnent à l'intérieur d'Agent Teams. Les serveurs MCP externes sont des outils de runtime optionnels.
+
+## Comment Agent Teams injecte MCP
+
+Lorsque l'application de bureau lance des membres d'équipe basés sur Claude, elle écrit un fichier JSON `--mcp-config` temporaire contenant le serveur intégré `agent-teams` :
+
+```json
+{
+ "mcpServers": {
+ "agent-teams": {
+ "command": "node",
+ "args": ["/path/to/agent-teams-mcp/index.js"],
+ "env": {
+ "AGENT_TEAMS_MCP_CLAUDE_DIR": "/Users/you/.claude"
+ }
+ }
+ }
+}
+```
+
+En développement, la commande peut pointer vers `mcp-server/src/index.ts` via `tsx`. Dans les builds empaquetés, l'application copie le serveur MCP fourni vers un chemin de données applicatives stable et l'exécute avec Node. Le fichier généré appartient à l'application et est nettoyé au mieux.
+
+Les serveurs MCP utilisateur et projet restent séparés. L'application lit les serveurs installés depuis :
+
+| Portée | Emplacement |
+| --- | --- |
+| Utilisateur | `~/.claude.json` sous `mcpServers` |
+| Entrée de projet locale dans la configuration Claude | `~/.claude.json` sous `projects[projectPath].mcpServers` |
+| Projet | `/.mcp.json` sous `mcpServers` |
+
+Préférez la portée projet pour les outils qui appartiennent à un seul dépôt. Préférez la portée utilisateur pour les outils que vous réutilisez dans des projets sans rapport.
+
+## Exemple de `.mcp.json` de projet
+
+Placez ce fichier à la racine du projet lorsqu'une équipe doit voir le même serveur à portée de projet :
+
+```json
+{
+ "mcpServers": {
+ "docs-search": {
+ "command": "npx",
+ "args": ["-y", "@acme/docs-search-mcp"],
+ "env": {
+ "DOCS_INDEX_PATH": "./docs-index"
+ }
+ },
+ "local-browser": {
+ "command": "node",
+ "args": ["./tools/mcp/browser-server.js"]
+ }
+ }
+}
+```
+
+Ne mettez pas de secrets dans les fichiers `.mcp.json` commités. Placez les identifiants dans votre shell, une configuration à portée utilisateur, ou le flux d'installation MCP personnalisé de l'application si la valeur doit rester locale.
+
+## Flux de travail MCP du tableau
+
+Les agents doivent utiliser les outils MCP du tableau lorsque le travail relève d'une tâche :
+
+1. Lisez le dernier contexte de la tâche.
+2. Démarrez la tâche uniquement au moment où le travail commence réellement.
+3. Ajoutez des commentaires de tâche pour les blocages, les plans et les résultats finaux.
+4. Marquez la tâche comme terminée après avoir publié le commentaire de résultat.
+5. Envoyez un court message lorsqu'un lead ou un coéquipier doit connaître le résultat.
+
+Exemple de flux d'agent :
+
+```text
+task_get -> task_start -> edit/test -> task_add_comment -> task_complete -> message_send
+```
+
+Utilisez un message direct pour la coordination. Utilisez un commentaire de tâche pour un historique de tâche durable.
+
+::: tip
+Si la note concerne la revue, la vérification, un changement de périmètre ou un blocage, placez-la sur la tâche.
+:::
+
+## Outils Agent Teams intégrés
+
+Le serveur MCP enregistre les outils depuis `agent-teams-controller/src/mcpToolCatalog.js`. La boucle d'enregistrement se trouve dans `mcp-server/src/tools/index.ts`, et chaque groupe a son propre fichier sous `mcp-server/src/tools/`.
+
+Outils opérationnels courants :
+
+| Outil | Usage |
+| --- | --- |
+| `task_get` | Lire le dernier contexte de la tâche, les commentaires, les pièces jointes, le statut et les relations |
+| `task_start` | Marquer une tâche in progress lorsque le travail commence réellement |
+| `task_add_comment` | Ajouter des notes de blocage, des notes de vérification, des plans et des résumés de résultats finaux |
+| `task_complete` | Terminer une tâche après la publication du commentaire de résultat final |
+| `message_send` | Envoyer un message de boîte de réception visible à un lead, un coéquipier ou un utilisateur |
+| `review_request`, `review_start`, `review_approve`, `review_request_changes` | Faire avancer les flux de revue à portée de tâche |
+| `process_register`, `process_list`, `process_stop`, `process_unregister` | Suivre les serveurs de développement, les watchers et autres services en arrière-plan détenus par les coéquipiers |
+
+Les noms d'outils peuvent apparaître aux runtimes avec des préfixes d'espace de noms MCP, par exemple `mcp__agent-teams__task_get`. Le nom d'outil canonique à l'intérieur du serveur MCP reste `task_get`.
+
+## Enregistrer un nouvel outil intégré
+
+Pour le travail sur le dépôt Agent Teams, ajoutez des outils de tableau intégrés via la structure FastMCP existante :
+
+1. Ajoutez l'implémentation de l'outil au fichier correspondant dans `mcp-server/src/tools/`, ou créez un nouveau fichier de groupe si le domaine est véritablement nouveau.
+2. Ajoutez le nom de l'outil au groupe approprié dans `agent-teams-controller/src/mcpToolCatalog.js`.
+3. Câblez un nouveau groupe via `mcp-server/src/tools/index.ts` uniquement lorsqu'un nouveau groupe de domaine est nécessaire.
+4. Validez l'entrée avec `zod` et appelez l'API du contrôleur au lieu de lire directement les fichiers du tableau.
+5. Ajoutez des tests ciblés dans `mcp-server/test/tools.test.ts` ou un cas e2e lorsque le transport importe.
+
+Forme minimale :
+
+```ts
+server.addTool({
+ name: 'task_example',
+ description: 'Explain what this tool does for agents.',
+ parameters: z.object({
+ teamName: z.string().min(1),
+ claudeDir: z.string().min(1).optional(),
+ taskId: z.string().min(1)
+ }),
+ execute: async ({ teamName, claudeDir, taskId }) => {
+ assertConfiguredTeam(teamName, claudeDir);
+ const controller = getController(teamName, claudeDir);
+ return jsonTextContent(controller.tasks.getTask(taskId));
+ }
+});
+```
+
+Ne créez pas un outil qui contourne la validation du contrôleur, modifie des fichiers d'équipe sans rapport, ou expose un accès large au système de fichiers/aux processus sans un besoin de tâche restreint.
+
+## Serveurs MCP externes
+
+Utilisez des serveurs MCP externes lorsqu'un coéquipier a besoin d'une connexion d'outil durable, et pas seulement d'un prompt avec du contexte collé.
+
+Bons cas d'usage :
+
+- outils de test de navigateur ou de site web
+- outils de données de conception ou de produit
+- systèmes de documentation interne et de recherche
+- systèmes de suivi de tickets ou de support
+- outils d'inspection de base de données avec des identifiants en lecture seule
+
+Mauvais cas d'usage :
+
+- secrets collés dans les prompts
+- fichiers ponctuels qui peuvent être attachés directement
+- outils qui modifient les systèmes de production sans revue
+- accès large au système de fichiers local lorsqu'une portée de projet plus étroite suffit
+
+## Portées
+
+Agent Teams reconnaît les portées MCP partagées et orientées projet.
+
+| Portée | À utiliser quand |
+| --- | --- |
+| Utilisateur ou Global | Le même serveur doit être disponible dans tous les projets |
+| Projet ou Local | Le serveur appartient à un seul dépôt, espace de travail ou contexte d'équipe |
+
+Préférez la portée la plus étroite qui rend tout de même le flux de travail utilisable. Les serveurs à portée de projet sont plus faciles à raisonner pendant la revue, car l'outil appartient au projet en cours de modification.
+
+## Liste de vérification de configuration
+
+Avant d'assigner une tâche qui dépend d'un serveur MCP :
+
+1. Installez ou configurez le serveur.
+2. Confirmez qu'il apparaît dans la liste MCP installée de l'application pour la portée prévue.
+3. Lancez les diagnostics depuis le registre MCP ou l'interface des extensions lorsqu'ils sont disponibles.
+4. Commencez par une tâche en lecture seule à faible risque.
+5. Mentionnez l'utilisation attendue de l'outil MCP dans la description de la tâche ou le brief d'équipe.
+
+Si un serveur échoue aux diagnostics, corrigez cela d'abord. Un meilleur prompt de tâche ne réparera pas une commande manquante, un mauvais chemin de configuration ou des identifiants rejetés.
+
+## Installer un serveur personnalisé depuis l'application
+
+L'application de bureau expose les API du registre MCP via Electron IPC pour la recherche, le parcours, l'installation, l'installation personnalisée, la désinstallation, la lecture de l'état installé et les diagnostics. Les installations personnalisées valident le nom du serveur, la portée, le chemin du projet, les noms des variables d'environnement et les en-têtes HTTP avant d'appeler le chemin d'installation du runtime.
+
+Utilisez l'installation personnalisée lorsque vous avez un paquet MCP qui n'est pas encore dans le registre :
+
+| Champ | Exemple |
+| --- | --- |
+| Nom du serveur | `docs-search` |
+| Portée | `project` pour ce dépôt, `user` pour tous les projets |
+| Type | `stdio` pour les commandes locales, `http` ou `sse` pour les serveurs distants |
+| Paquet | `@acme/docs-search-mcp` |
+| Env | `DOCS_INDEX_PATH=./docs-index` |
+
+Après l'installation, lancez les diagnostics et créez une petite tâche en lecture seule pour éprouver la surface d'outils avant d'assigner un travail plus important.
+
+## Exemple de tâche
+
+```text
+Audit the docs home page with the browser MCP. Check desktop and mobile widths, capture any layout issue as a task comment, and only edit landing/product-docs files. Run `pnpm --dir landing docs:build` before completion.
+```
+
+Cela fonctionne parce que cela nomme l'outil, la surface, la limite d'écriture et l'étape de vérification.
+
+## Règles de sécurité
+
+- Ne donnez pas par défaut à chaque coéquipier chaque serveur MCP.
+- Tenez les outils capables d'écriture hors des équipes larges, sauf si la revue les exige.
+- Préférez les identifiants en lecture seule pour les tâches d'inspection.
+- Placez l'utilisation d'outils ayant un impact sur la production derrière des commentaires de tâche explicites et une revue.
+- Traitez les échecs de diagnostic MCP comme des échecs de configuration, pas des échecs d'agent.
+- Évitez de commiter des secrets dans `.mcp.json` ou dans les prompts.
+- Utilisez des valeurs `projectPath` absolues lors de l'installation de serveurs à portée de projet via l'application.
+- Ne modifiez pas les fichiers `agent-teams-mcp-*.json` générés par l'application ; ce sont des artefacts de lancement temporaires.
+
+## Guides associés
+
+- [Configuration du runtime](/fr/guide/runtime-setup)
+- [Exemples de briefs d'équipe](/fr/guide/team-brief-examples)
+- [Flux de travail des agents](/fr/guide/agent-workflow)
+- [Développeurs](/fr/developers/)
diff --git a/landing/product-docs/fr/guide/quickstart.md b/landing/product-docs/fr/guide/quickstart.md
new file mode 100644
index 00000000..912c76dc
--- /dev/null
+++ b/landing/product-docs/fr/guide/quickstart.md
@@ -0,0 +1,193 @@
+---
+title: Démarrage rapide – Documentation Agent Teams
+description: Passez d'une installation neuve à une équipe d'agents IA en fonctionnement en quelques minutes. Couvre l'installation, la sélection du runtime, la création d'équipe et la première revue de code.
+lang: fr-FR
+---
+
+# Démarrage rapide
+
+Ce guide vous fait passer d'une installation neuve à une équipe en fonctionnement en quelques minutes.
+
+## Le chemin le plus court
+
+```bash
+# 1. Install prerequisites
+node --version # need 20+
+pnpm --version # need 10+
+
+# 2. Clone and install
+git clone https://github.com/777genius/agent-teams-ai.git
+cd agent-teams-ai
+pnpm install
+
+# 3. Start the desktop app (default workflow)
+pnpm dev
+
+# 4. Verify a docs-only change
+pnpm --dir landing docs:build
+```
+
+L'application de bureau Electron (`pnpm dev`) est la cible principale — n'utilisez pas le serveur de développement navigateur/web pour le développement normal. Le chemin navigateur ne dispose pas de l'IPC de bureau, du terminal, de l'authentification fournisseur, ni du comportement de cycle de vie des équipes.
+
+## Avant de commencer
+
+Vous avez besoin de :
+
+- **Un ordinateur** sous macOS, Windows ou Linux
+- **(Recommandé) Un projet suivi par Git** — l'isolation par worktree et la revue des diffs reposent sur Git
+- **(Optionnel) Un accès fournisseur** — la configuration du runtime détecte les fournisseurs disponibles depuis l'interface, mais certains chemins nécessitent une authentification existante (Anthropic, OpenAI, etc.)
+
+Si une étape ci-dessous ne fonctionne pas, consultez le [guide de dépannage](/fr/guide/troubleshooting#team-does-not-launch) pour les correctifs courants.
+
+Pour les conventions de projet et les recommandations d'architecture, reportez-vous à ces fichiers canoniques avant d'apporter des modifications :
+
+- [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) — repères de navigation et d'architecture du dépôt
+- [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) — conventions de travail et règles du projet
+- [Standard d'architecture des fonctionnalités](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) — structure pour les nouvelles fonctionnalités
+- [Runbook de débogage](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) — diagnostics de lancement et de coéquipiers
+
+## 1. Exécuter depuis les sources ou télécharger
+
+**Téléchargez l'application packagée** pour macOS, Windows ou Linux depuis la page de téléchargement - aucun prérequis nécessaire. Commencez avec le modèle gratuit sans authentification, ou connectez une authentification fournisseur depuis l'interface lorsque vous souhaitez davantage de modèles.
+
+**Ou exécutez depuis les sources** pour le développement :
+
+Nécessite Node.js 24.16.0 LTS et pnpm 10+. Sur macOS, les binaires précompilés officiels de Node.js 24 nécessitent macOS 13.5+.
+
+```bash
+git clone https://github.com/777genius/agent-teams-ai.git
+cd agent-teams-ai
+pnpm install
+pnpm dev
+```
+
+`pnpm dev` démarre l'application de bureau Electron avec rechargement à chaud. C'est la cible de développement par défaut. Ne démarrez pas un serveur de développement web navigateur pour le développement normal — le chemin navigateur ne dispose pas de l'IPC de bureau complet, du terminal, de l'authentification fournisseur, ni du comportement de cycle de vie des équipes.
+
+## 2. Ouvrir ou créer un projet
+
+Lancez l'application et sélectionnez le répertoire du projet dans lequel vous voulez que les agents travaillent. Agent Teams lit les fichiers locaux du projet et l'état du runtime/de la session afin que l'interface puisse afficher les tâches, les journaux, les diffs et l'activité des coéquipiers.
+
+::: tip
+Choisissez un projet suivi par Git pour la meilleure expérience. L'isolation par worktree et la revue basée sur les diffs reposent toutes deux sur Git.
+:::
+
+Avant de lancer une équipe, vérifiez que le projet dispose d'une base de référence suffisamment propre :
+
+```bash
+git status --short
+```
+
+Vous n'avez pas besoin d'un arbre parfaitement propre, mais vous devriez savoir quelles modifications sont les vôtres avant que les agents ne commencent à éditer. Cela rend les diffs de tâche et la revue au niveau du hunk bien plus fiables.
+
+## 3. Choisir un chemin de runtime
+
+Le flux de configuration détecte automatiquement les runtimes installés sur votre machine. Une première configuration courante est :
+
+| Runtime | Adapté à |
+| -------- | ----------------------------------------------- |
+| Claude | Utilisateurs de Claude Code et accès Anthropic existant |
+| Codex | Flux de travail natifs Codex et accès OpenAI |
+| OpenCode | Modèle gratuit sans authentification, équipes multimodèles et nombreux backends fournisseurs |
+
+::: info
+Gemini est disponible en tant que chemin fournisseur pris en charge. Voir [Fournisseurs et runtimes](/fr/reference/providers-runtimes) pour les options d'authentification et l'état actuel des fournisseurs.
+:::
+
+Voir [Configuration du runtime](/fr/guide/runtime-setup) pour une configuration détaillée par fournisseur.
+
+Pour vérifier un runtime payant ou adossé à un compte en dehors de l'application, vérifiez le binaire et testez l'authentification :
+
+```bash
+# Check that the runtime is installed and on PATH
+command -v claude && claude --version
+command -v codex && codex --version
+command -v opencode && opencode --version
+```
+
+Si la commande échoue, corrigez d'abord l'installation du runtime ou le `PATH`. Les prompts d'équipe ne peuvent pas contourner un binaire manquant ou une authentification fournisseur manquante pour les modèles qui l'exigent.
+
+::: tip
+Si le binaire est trouvé mais que l'application signale « not logged in », l'environnement peut différer entre votre terminal et l'application. Voir le [journal de diagnostic d'authentification](/fr/guide/troubleshooting#auth-diagnostic-log) pour les comparer.
+:::
+
+## 4. Créer votre première équipe
+
+Créez une équipe avec un lead et un ou plusieurs spécialistes. Gardez la première équipe petite : un lead, un agent d'implémentation et un agent orienté revue suffisent pour valider le flux de travail.
+
+Voir [Créer une équipe](/fr/guide/create-team) pour la structure recommandée et des conseils.
+
+Pour le premier lancement, privilégiez une forme d'équipe comme celle-ci :
+
+| Membre | Responsabilité | Notes |
+| --- | --- | --- |
+| Lead | Découper l'objectif en tâches et coordonner le statut | Conservez-le sur le fournisseur le plus fiable dont vous disposez |
+| Builder | Implémenter les tâches délimitées | Donnez des frontières claires de fichiers ou de fonctionnalités |
+| Reviewer | Examiner le travail terminé | Demandez-lui de se concentrer sur les régressions et les tests manquants |
+
+Évitez de commencer avec cinq coéquipiers ou plus. Davantage d'agents augmentent la concurrence, les journaux, l'utilisation des fournisseurs et le risque de conflits avant que vous ne sachiez que la configuration est saine.
+
+## 5. Donner au lead un objectif concret
+
+Rédigez l'objectif comme vous briefieriez un lead d'ingénierie :
+
+```text
+Improve the onboarding flow. Split the work into tasks, keep changes small, and ask for review before broad refactors.
+```
+
+Les bons premiers prompts incluent un périmètre concret, des frontières de sécurité et une vérification :
+
+```text
+Improve the docs quickstart. Keep edits inside landing/product-docs. Add practical examples, preserve existing VitePress syntax, and run `pnpm --dir landing docs:build` before marking tasks done.
+```
+
+Évitez les prompts vagues comme « rendre l'application meilleure » pour la première exécution. Le lead peut décomposer de grands objectifs, mais une meilleure entrée produit des tâches plus petites et une revue plus propre.
+
+::: tip
+Si l'équipe se lance mais qu'aucune tâche n'apparaît, vérifiez si le lead a reçu votre prompt. Voir [les réponses des agents sont manquantes](/fr/guide/troubleshooting#agent-replies-are-missing) pour les diagnostics.
+:::
+
+Le lead crée les tâches, attribue le travail et coordonne les coéquipiers. Vous pouvez suivre la progression sur le tableau kanban et intervenir à tout moment avec des commentaires ou des messages directs.
+
+## 6. Examiner les résultats
+
+Ouvrez les tâches terminées ou prêtes pour la revue, inspectez le diff, et acceptez, rejetez ou commentez les modifications individuelles. Utilisez les journaux de tâche lorsque vous avez besoin de comprendre pourquoi un agent a fait un choix.
+
+Voir [Revue de code](/fr/guide/code-review) pour le flux de travail de revue complet.
+
+Avant d'approuver la première tâche, vérifiez trois choses :
+
+1. Le commentaire de la tâche explique ce qui a changé
+2. Les fichiers modifiés correspondent au périmètre de la tâche
+3. Le résultat de la vérification est visible dans le commentaire de la tâche ou les journaux
+
+## Pièges courants
+
+| Symptôme | Cause probable | Vérification |
+| --- | --- | --- |
+| L'application ne détecte pas de runtime | Binaire absent du `PATH`, ou l'application et le terminal voient des environnements différents | Exécutez `command -v ` dans un terminal, puis utilisez le même environnement de terminal pour lancer l'application |
+| Le lancement de l'équipe se bloque | Authentification fournisseur manquante pour un modèle payant/adossé à un compte, mauvaise chaîne de modèle, ou binaire du runtime introuvable | Voir [Dépannage](/fr/guide/troubleshooting#team-does-not-launch) |
+| La voie OpenCode reste bloquée sur `registered` | Preuve de voie pas encore committée, ou incohérence de chaîne de modèle | Inspectez `~/.claude/teams//.opencode-runtime/lanes/` |
+| Réponses des agents manquantes | Problème de réessai de livraison du runtime, d'analyse, ou d'attribution de tâche | Ouvrez les journaux de tâche et vérifiez le registre de livraison |
+| Le fournisseur renvoie des 429 | Limite de débit atteinte | Attendez la réinitialisation ou changez de modèle/fournisseur |
+
+## Étapes suivantes
+
+- [Créer une équipe](/fr/guide/create-team) — formes d'équipe recommandées et rédaction du brief
+- [Configuration du runtime](/fr/guide/runtime-setup) — authentification fournisseur et sélection du modèle
+- [Revue de code](/fr/guide/code-review) — examiner, approuver ou demander des modifications
+
+### Pour les contributeurs
+
+Si vous modifiez Agent Teams ou cette documentation, commencez par les fichiers canoniques du projet à la racine du dépôt :
+
+- [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) — conventions de travail et règles du projet
+- [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) — couche de navigation pour l'architecture et les recommandations d'implémentation
+- [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) — garde-fous d'implémentation stricts
+- [Standard d'architecture des fonctionnalités](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) — structure pour les nouvelles fonctionnalités
+- [Runbook de débogage des équipes d'agents](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) — diagnostics de lancement, de bootstrap et de coéquipiers
+
+Pour vérifier que ce site de documentation se construit correctement :
+
+```bash
+pnpm --dir landing docs:build
+```
diff --git a/landing/product-docs/fr/guide/runtime-setup.md b/landing/product-docs/fr/guide/runtime-setup.md
new file mode 100644
index 00000000..d6a7f6d7
--- /dev/null
+++ b/landing/product-docs/fr/guide/runtime-setup.md
@@ -0,0 +1,179 @@
+---
+title: Configuration du runtime – Documentation Agent Teams
+description: Configurez les runtimes Claude Code, Codex ou OpenCode. Couvre l'authentification, l'accès aux fournisseurs, le mode multimodèle et les vérifications avant lancement.
+lang: fr-FR
+---
+
+# Configuration du runtime
+
+Agent Teams est une couche de coordination. Le véritable travail des modèles s'exécute via les runtimes et les fournisseurs locaux pris en charge.
+
+::: tip Démarrage rapide - choisir votre premier runtime
+| Si vous ... | Commencez par |
+| --- | --- |
+| Utilisez déjà Claude Code ou disposez d'un accès Anthropic | **Claude** - authentification familière, configuration minimale |
+| Utilisez Codex ou des flux de travail basés sur OpenAI | **Codex** - intégration native |
+| Voulez essayer Agent Teams sans inscription ni clés d'API | **OpenCode** - utilisez le modèle gratuit inclus sans authentification |
+| Voulez un routage multimodèle ou une large couverture de fournisseurs | **OpenCode** - le plus flexible, une seule configuration pour de nombreux backends |
+| N'êtes pas sûr du runtime qui vous convient | **OpenCode** - couvre le plus d'options de fournisseurs et vous permet de changer plus tard |
+
+Commencez avec un seul runtime et un seul coéquipier. Confirmez qu'un lancement fonctionne avant de passer au multimodèle.
+:::
+
+## Prérequis
+
+Avant de lancer une équipe, assurez-vous que :
+
+- Le binaire du runtime est installé et présent dans votre `PATH`.
+- Votre compte fournisseur dispose d'un accès actif au modèle que vous comptez utiliser, sauf si vous commencez avec le modèle OpenCode gratuit inclus sans authentification.
+- Le chemin du projet existe et est lisible.
+- L'application et votre terminal utilisent le même environnement home/config lorsque vous testez l'authentification manuellement.
+
+::: tip
+Commencez avec un seul coéquipier et un seul fournisseur. Confirmez qu'un lancement fonctionne avant d'ajouter des voies multimodèles.
+:::
+
+Vérifications rapides dans le terminal :
+
+```bash
+command -v claude
+command -v codex
+command -v opencode
+```
+
+Exécutez la commande correspondant au runtime que vous prévoyez d'utiliser. Si elle n'affiche rien, installez le runtime ou corrigez le `PATH` avant de lancer une équipe.
+
+## Chemins pris en charge
+
+| Chemin | CLI par défaut | Fournisseurs typiques | À utiliser quand |
+| --- | --- | --- | --- |
+| Claude | `claude` | Anthropic | Vous utilisez déjà Claude Code ou des flux de travail adossés à Anthropic |
+| Codex | `codex` | OpenAI | Vous voulez une intégration runtime native de Codex |
+| OpenCode | `opencode` | OpenRouter et de nombreux backends | Vous voulez un routage multimodèle et une large couverture de fournisseurs |
+
+L'application détecte les runtimes pris en charge et guide la configuration depuis l'interface lorsque cela est possible.
+
+Gemini est disponible comme chemin de fournisseur pris en charge avec Google ADC (`gcloud auth`), l'OAuth de Gemini CLI et l'authentification par clé d'API. Configurez-le depuis l'interface de configuration du runtime lorsque le backend Gemini est détecté.
+
+## Accès aux fournisseurs
+
+Agent Teams n'a pas de palier payant propre. Vous pouvez commencer avec le modèle OpenCode gratuit inclus sans authentification - sans inscription, clés d'API ni carte de crédit. Pour des modèles supplémentaires, apportez l'accès fournisseur dont vous disposez déjà : abonnements, authentification de runtime local ou clés d'API selon le chemin que vous choisissez.
+
+- Les chemins **Claude** et **Codex** s'appuient sur leurs outils d'authentification CLI respectifs.
+- **OpenCode** peut d'abord exécuter le modèle gratuit inclus sans authentification. D'autres modèles OpenCode peuvent nécessiter des clés d'API spécifiques au fournisseur dans un fichier de configuration (par exemple `openrouter`, `openai`, `anthropic`).
+
+## Configuration de l'authentification
+
+### Claude Code
+
+Exécutez le flux d'authentification standard dans un terminal :
+
+```bash
+claude login
+```
+
+Vérifiez ensuite que la CLI est accessible :
+
+```bash
+claude --version
+```
+
+Si l'application packagée signale « not logged in » alors que votre terminal fonctionne, comparez les `$HOME` et `PATH` vus par l'application avec ceux du terminal que vous avez utilisé pour la connexion. Le journal de diagnostic d'authentification décrit dans [Dépannage](/fr/guide/troubleshooting#auth-diagnostic-log) est le meilleur point de départ.
+
+### Codex
+
+Installez et authentifiez-vous via le flux CLI d'OpenAI :
+
+```bash
+codex login
+```
+
+Vérifiez ensuite que le runtime est accessible :
+
+```bash
+codex --version
+```
+
+Les lancements natifs de Codex utilisent l'état du compte Codex et les données du catalogue de modèles lorsqu'elles sont disponibles. Si un modèle est absent de l'interface, actualisez le statut du fournisseur avant de modifier les prompts d'équipe.
+
+### OpenCode
+
+Pour utiliser le modèle gratuit inclus sans authentification, sélectionnez-le dans l'application et lancez sans inscription auprès d'un fournisseur. Pour utiliser d'autres backends OpenCode, créez ou modifiez `~/.opencode/config.json` (ou le chemin équivalent sur votre plateforme) avec la clé de fournisseur souhaitée :
+
+```json
+{
+ "providers": {
+ "openrouter": {
+ "apiKey": "sk-or-..."
+ }
+ }
+}
+```
+
+Utilisez le nom de fournisseur exact attendu par OpenCode. Si vous définissez un nom de fournisseur personnalisé, vérifiez bien qu'il correspond à l'ID de fournisseur que vous utilisez dans la chaîne de modèle (par exemple `openrouter/moonshotai/kimi-k2.6` utiliserait le bloc `openrouter`).
+
+Exemples de chaînes de modèle :
+
+| Chaîne de modèle | Bloc de fournisseur qui doit exister |
+| --- | --- |
+| `openrouter/moonshotai/kimi-k2.6` | `openrouter` |
+| `openai/gpt-5.4` | `openai` |
+| `anthropic/claude-sonnet-4-6` | `anthropic` |
+
+Si OpenCode se lance mais qu'un coéquipier ne devient jamais livrable, inspectez les preuves de voie avant de supposer que le modèle a ignoré le prompt. Voir [Dépannage](/fr/guide/troubleshooting#opencode-registered-but-bootstrap-unconfirmed).
+
+### Gemini
+
+Gemini prend en charge trois méthodes d'authentification :
+
+- **Google ADC** — exécutez `gcloud auth application-default login` pour vous authentifier via les Google Application Default Credentials.
+- **Gemini CLI** — exécutez `gemini login` si la CLI Gemini est installée.
+- **Clé d'API** — définissez `GEMINI_API_KEY` dans votre environnement ou configurez-la via l'interface Manage Providers de l'application.
+
+L'application détecte automatiquement la méthode d'authentification disponible et affiche le fournisseur Gemini dans l'interface de configuration du runtime et de création d'équipe lorsque le backend est accessible.
+
+## Mode multimodèle
+
+Le mode multimodèle peut router le travail à travers de nombreux backends de fournisseurs via une configuration compatible OpenCode. Utilisez-le lorsque vous avez besoin de flexibilité de fournisseur ou que vous voulez que les coéquipiers utilisent différentes voies de modèles.
+
+::: info Voies de modèles
+Chaque coéquipier peut utiliser une paire `providerId` + `model` différente. Dans l'interface d'édition d'équipe, déployez les options de membre pour remplacer les valeurs par défaut globales.
+:::
+
+Une configuration multimodèle prudente :
+
+| Rôle | Fournisseur | Pourquoi |
+| --- | --- | --- |
+| Lead | Claude ou Codex | Gardez la coordination sur le fournisseur en qui vous avez le plus confiance |
+| Builder | OpenCode | Utilisez un large routage de modèles pour le travail d'implémentation |
+| Reviewer | Claude, Codex ou un second modèle OpenCode | Séparez le jugement de revue de la voie du builder |
+
+Évitez de mélanger de nombreux fournisseurs inconnus dès le premier lancement. Confirmez une petite tâche par voie avant d'assigner un travail plus large.
+
+## Liste de vérification avant lancement
+
+Avant de lancer une équipe :
+
+1. Le runtime sélectionné est installé
+2. Le binaire du runtime est dans le `PATH` de l'environnement
+3. L'authentification du fournisseur est configurée pour le backend choisi
+4. Le fournisseur a accès à la chaîne de modèle exacte que vous spécifiez
+5. Le chemin du projet existe et est lisible
+
+## Quand changer de chemin de runtime
+
+Changez lorsque le chemin actuel est bloqué par la disponibilité du modèle, les limites de débit, les capacités du fournisseur ou les besoins de rôle de l'équipe. Conservez le même projet et le même flux de travail d'équipe, mais validez une petite tâche après le changement.
+
+::: warning Traitez les erreurs de configuration comme des problèmes de configuration
+Si l'authentification échoue, qu'un nom de modèle est rejeté ou que le binaire du runtime est introuvable, corrigez d'abord la configuration. Ne modifiez pas les prompts d'équipe ni le code du projet pour contourner un problème de configuration du runtime.
+:::
+
+Utilisez ce tableau de décision :
+
+| Symptôme | Meilleure première action |
+| --- | --- |
+| Binaire introuvable | Corrigez l'installation ou le `PATH` |
+| La connexion fonctionne dans le terminal mais pas dans l'application | Vérifiez le journal de diagnostic d'authentification Electron et l'environnement |
+| Modèle rejeté | Vérifiez l'identifiant de modèle exact dans le runtime du fournisseur |
+| 429 répétés | Réduisez la concurrence ou changez de modèle/fournisseur |
+| Voie OpenCode bloquée | Inspectez le manifeste de la voie et `opencode-sessions.json` |
diff --git a/landing/product-docs/fr/guide/team-brief-examples.md b/landing/product-docs/fr/guide/team-brief-examples.md
new file mode 100644
index 00000000..058d1663
--- /dev/null
+++ b/landing/product-docs/fr/guide/team-brief-examples.md
@@ -0,0 +1,131 @@
+---
+title: Exemples de briefs d'équipe – Documentation Agent Teams
+description: Modèles pratiques de briefs d'équipe pour les petits correctifs, le travail documentaire, les tâches d'implémentation, les revues et les zones à haut risque.
+lang: fr-FR
+---
+
+# Exemples de briefs d'équipe
+
+Un bon brief d'équipe donne au lead suffisamment de structure pour créer de petites tâches sans imposer dès le départ chaque détail d'implémentation.
+
+Utilisez cette forme :
+
+```text
+Outcome:
+Scope:
+Boundaries:
+Coordination:
+Verification:
+Review:
+```
+
+## Brief minimal
+
+À utiliser pour un travail réduit et à faible risque.
+
+```text
+Outcome: Improve the quickstart so a new user can launch one team successfully.
+Scope: Keep edits inside landing/product-docs.
+Boundaries: Do not rewrite the whole docs structure.
+Coordination: Create one or two tasks, keep comments on the task.
+Verification: Run `pnpm --dir landing docs:build`.
+Review: Summarize changed pages and any remaining gaps.
+```
+
+## Brief d'implémentation
+
+À utiliser lorsque des modifications de code touchent une seule zone fonctionnelle.
+
+```text
+Outcome: Add a focused improvement to task comment filtering.
+Scope: Work inside the task/comment feature files unless a shared helper is clearly needed.
+Boundaries: Do not change task storage format or review state semantics.
+Coordination: Split parser, UI, and tests into separate tasks if they can be reviewed independently.
+Verification: Run the focused unit tests first, then the feature typecheck if touched.
+Review: Call out parsing edge cases and any behavior that affects existing task comments.
+```
+
+## Brief documentaire
+
+À utiliser pour le travail de documentation et de guides.
+
+```text
+Outcome: Draft practical workflow guides from the docs audit.
+Scope: Add concise VitePress pages under landing/product-docs/guide.
+Boundaries: Avoid moving existing navigation hubs owned by other tasks.
+Coordination: Check related docs tasks before editing nav.
+Verification: Run `pnpm --dir landing docs:build`.
+Review: Include links added to sidebar and any pages intentionally left as drafts.
+```
+
+## Brief à forte composante de revue
+
+À utiliser pour les zones risquées telles que l'IPC, l'authentification des fournisseurs, la persistance, Git ou la logique du cycle de vie des tâches.
+
+```text
+Outcome: Fix the launch failure without changing successful launch behavior.
+Scope: Start from the newest launch-failure artifact and the affected runtime adapter.
+Boundaries: Do not change provider prompts until setup and runtime evidence are inspected.
+Coordination: Make one diagnostic task and one fix task if the cause is confirmed.
+Verification: Run focused tests and one desktop smoke check when practical.
+Review: Lead must inspect the diff before approval.
+```
+
+## Brief multifournisseur
+
+À utiliser lorsque les coéquipiers s'exécutent sur des lanes fournisseur/modèle différentes.
+
+```text
+Outcome: Implement and review a small feature using separate builder and reviewer lanes.
+Scope: Builder edits the feature. Reviewer inspects only the task diff and tests.
+Boundaries: Do not switch model ids mid-task unless launch fails before work begins.
+Coordination: Builder posts result comment first. Reviewer posts findings as task comments.
+Verification: Builder runs focused tests. Reviewer checks failure output and changed scope.
+Review: Lead approves only after reviewer comments are resolved.
+```
+
+## Blocs d'agent dans les briefs
+
+Les blocs d'agent sont des textes destinés uniquement aux agents, masqués et encadrés par des marqueurs tels que `... `. L'application les supprime de l'affichage normal mais les conserve disponibles pour la coordination entre agents. Utilisez-les lorsque le brief doit dire quelque chose aux agents qui serait du bruit pour un lecteur humain.
+
+Exemple - un brief qui indique au lead comment répartir le travail sans exposer les instructions de coordination à l'utilisateur :
+
+```text
+Outcome: Add a dark mode toggle to the application settings.
+Scope: Settings UI, theme context, and CSS variables.
+Boundaries: Do not change existing light theme values or provider auth screens.
+
+
+Split this into three tasks: (1) theme context and CSS vars, (2) toggle component and settings wiring, (3) dark mode preview in existing docs screenshots if practical.
+
+```
+
+Le bloc garde le brief destiné aux humains propre tout en donnant au lead des indications structurées pour découper les tâches.
+
+## Ce qu'il faut éviter
+
+| Brief faible | Meilleure formulation |
+| --- | --- |
+| « Améliorer l'application » | Nommez le flux de travail, les fichiers et le contrôle de réussite |
+| « Corriger toute la doc » | Choisissez un seul groupe de guides et une seule commande de build |
+| « Utiliser le meilleur modèle » | Nommez les choix de fournisseur/modèle ou laissez les valeurs par défaut de l'application en place |
+| « Refactoriser au besoin » | Indiquez quels modules ont le droit de changer |
+| « Le rendre prêt pour la production » | Définissez la revue, les tests et les contrôles de déploiement |
+
+## Avant le lancement
+
+Vérifiez ces points avant de démarrer l'équipe :
+
+1. Le brief nomme un résultat concret.
+2. Les limites de risque sont explicites.
+3. Le lead peut découper le travail en tâches révisables.
+4. Les commandes de vérification sont incluses lorsqu'elles sont connues.
+5. Les zones sensibles exigent une revue avant approbation.
+
+Si le brief reste trop large, lancez d'abord une équipe solo ou réduite et demandez-lui de produire un plan de tâches plutôt qu'une implémentation.
+
+## Guides associés
+
+- [Créer une équipe](/fr/guide/create-team)
+- [Intégration MCP](/fr/guide/mcp-integration)
+- [Stratégie Git et worktree](/fr/guide/git-worktree-strategy)
diff --git a/landing/product-docs/fr/guide/troubleshooting.md b/landing/product-docs/fr/guide/troubleshooting.md
new file mode 100644
index 00000000..c76bff32
--- /dev/null
+++ b/landing/product-docs/fr/guide/troubleshooting.md
@@ -0,0 +1,310 @@
+---
+title: Dépannage – Documentation Agent Teams
+description: Résolvez les problèmes de lancement d'équipe, les réponses d'agent manquantes, les limites de débit, les problèmes d'authentification CLI et les blocages de bootstrap de lane grâce à des diagnostics locaux.
+lang: fr-FR
+---
+
+# Dépannage
+
+La plupart des problèmes d'équipe relèvent de l'une de ces quatre catégories : configuration du runtime, confirmation de lancement, analyse des tâches et limites du fournisseur.
+
+## Mise en place rapide des preuves
+
+Pour tout problème lié au cycle de vie d'une équipe, définissez d'abord ces variables et réutilisez le même shell :
+
+```bash
+TEAM=""
+TEAM_DIR="$HOME/.claude/teams/$TEAM"
+TASKS_DIR="$HOME/.claude/tasks/$TEAM"
+```
+
+Confirmez ensuite que les fichiers attendus existent avant d'interpréter l'état de l'interface :
+
+```bash
+test -d "$TEAM_DIR" && find "$TEAM_DIR" -maxdepth 2 -type f | sort | sed -n '1,80p'
+test -d "$TASKS_DIR" && find "$TASKS_DIR" -maxdepth 1 -name '*.json' | sort | sed -n '1,40p'
+```
+
+::: warning Les preuves d'abord
+Ne corrigez pas les prompts, les paramètres du fournisseur ou le nettoyage des processus en vous basant uniquement sur un badge bloqué. Corrélez d'abord l'interface avec les fichiers persistés, les artefacts de lancement et les preuves du runtime.
+:::
+
+## L'équipe ne se lance pas
+
+Vérifiez chaque élément dans l'ordre :
+
+1. **Runtime disponible** — la CLI sélectionnée (`claude`, `codex`, `opencode`) est installée
+2. **PATH accessible** — le binaire est disponible dans le `PATH` de l'environnement
+3. **Accès au modèle** — le fournisseur a accès à la chaîne de modèle demandée (en particulier pour OpenCode, les noms exacts de fournisseur/modèle ont leur importance)
+4. **Chemin du projet** — le répertoire du projet existe et est lisible
+5. **Réseau / VPN** — certains fournisseurs bloquent le trafic lorsqu'un VPN est actif
+
+::: tip
+Exécutez le binaire du runtime dans un terminal pour vérifier le `PATH` et l'authentification. Exemple : `claude --version` ou `opencode --version`.
+:::
+
+### OpenCode : enregistré mais bootstrap non confirmé
+
+Si OpenCode affiche `registered` mais que le bootstrap n'est pas confirmé, inspectez d'abord les artefacts avant de modifier les prompts de l'équipe.
+
+Les détails pour les contributeurs et le débogage se trouvent dans [Architecture pour les contributeurs](/fr/reference/contributor-architecture), qui renvoie au runbook canonique de débogage des équipes d'agents.
+
+Examinez l'artefact d'échec de lancement le plus récent :
+
+```bash
+LATEST_FAILURE="$TEAM_DIR/launch-failure-artifacts/latest.json"
+MANIFEST_PATH="$(jq -r '.manifestPath' "$LATEST_FAILURE")"
+jq '.classification, .bootstrapTransportBreadcrumb, .memberSpawnStatuses' "$MANIFEST_PATH"
+```
+
+`latest.json` pointe vers le répertoire d'artefacts empaquetés le plus récent et son `manifest.json`. Le manifeste inclut :
+
+- `classification` — pourquoi le lancement a été considéré comme un échec
+- `bootstrapTransportBreadcrumb` — le chemin de livraison utilisé
+- Les statuts de spawn des membres
+- Les journaux et traces expurgés
+
+Vérifiez aussi le manifeste de lane :
+
+```bash
+jq '.lanes' "$TEAM_DIR/.opencode-runtime/lanes.json" 2>/dev/null
+find "$TEAM_DIR/.opencode-runtime/lanes" -maxdepth 2 -name manifest.json -print -exec jq '.activeRunId, .entries' {} \; 2>/dev/null
+```
+
+::: tip Ne devinez pas à partir de l'interface
+Corrélez toujours les diagnostics de l'interface avec les fichiers persistés (`launch-state.json`, `bootstrap-journal.jsonl`) et les preuves spécifiques au runtime.
+:::
+
+## Diagnostics généraux
+
+Commencez par les fichiers persistés sur le disque plutôt que par l'interface seule.
+
+### Racine de l'équipe
+
+```bash
+printf '%s\n' "$TEAM_DIR"
+```
+
+Fichiers clés et ce qu'ils vous indiquent :
+
+- `launch-state.json` — état de lancement/vivacité des membres (`.teamLaunchState`, `.summary`, `.members`)
+- `bootstrap-journal.jsonl` — événements de bootstrap ordonnés depuis la CLI/le runtime (`tail -80`)
+- `bootstrap-state.json` — résumé de la phase de bootstrap
+- `config.json` — configuration du fournisseur, du modèle et du projet
+- `inboxes/*.json` et `sentMessages.json` — état de livraison des messages
+
+```bash
+jq '.teamLaunchState, .summary, .members' "$TEAM_DIR/launch-state.json"
+tail -80 "$TEAM_DIR/bootstrap-journal.jsonl" 2>/dev/null
+```
+
+### Preuves du runtime OpenCode
+
+Pour les coéquipiers OpenCode, la preuve de session se trouve dans le magasin runtime de lane :
+
+- `.opencode-runtime/lanes.json` — index des lanes avec leur état
+- `.opencode-runtime/lanes//manifest.json` — `activeRunId` et entrées de preuve
+- `.opencode-runtime/lanes//opencode-sessions.json` — enregistrements de session validés
+
+État sain attendu : état de lane `active`, le manifeste a un `activeRunId` avec au moins une entrée de preuve, le membre a `bootstrapConfirmed: true`.
+
+```bash
+jq '.lanes' "$TEAM_DIR/.opencode-runtime/lanes.json" 2>/dev/null
+find "$TEAM_DIR/.opencode-runtime" -maxdepth 3 -type f | sort
+```
+
+### Artefacts d'échec de lancement
+
+Lorsqu'un lancement est marqué comme un échec, inspectez `latest.json` :
+
+```bash
+LATEST_FAILURE="$TEAM_DIR/launch-failure-artifacts/latest.json"
+jq '.' "$LATEST_FAILURE"
+jq '.' "$(jq -r '.manifestPath' "$LATEST_FAILURE")"
+```
+
+Le manifeste inclut :
+- `classification` — pourquoi le lancement a été considéré comme un échec
+- `bootstrapTransportBreadcrumb` — le chemin de livraison utilisé
+- Les statuts de spawn des membres et les journaux/traces expurgés
+
+## Les réponses des agents sont manquantes
+
+Ouvrez les journaux de tâches et les messages des coéquipiers. Les réponses manquantes proviennent souvent de :
+
+- **Nouvelle tentative de livraison du runtime** — l'agent a peut-être répondu, mais le message n'a pas été livré à l'application. Vérifiez le registre de livraison.
+- **Analyse ou filtrage** — la sortie de l'agent ne comportait pas les marqueurs attendus ou les références de tâches.
+- **Attribution de tâche** — le travail a eu lieu pendant la session mais n'a pas été lié à la tâche car l'identifiant de tâche correct était absent de la sortie.
+
+::: warning Ne présumez pas que le silence signifie ignorer
+Ne présumez pas que le modèle a ignoré le message tant que les journaux ne le confirment pas.
+:::
+
+Utilisez l'état persisté des messages pour distinguer « non envoyé » de « envoyé mais non rendu » :
+
+```bash
+jq '.' "$TEAM_DIR/inboxes/user.json" 2>/dev/null
+jq '.' "$TEAM_DIR/sentMessages.json" 2>/dev/null
+```
+
+Vérifiez `from`, `to`, `messageId`, `relayOfMessageId` et `taskRefs`. Pour les coéquipiers OpenCode, inspectez aussi les preuves de livraison du runtime avant de présumer que le modèle a ignoré le prompt.
+
+## Les tâches ne sont pas liées aux modifications
+
+Utilisez les journaux propres à chaque tâche et les liens de revue de code. Si un diff semble détaché :
+
+- Vérifiez si l'identifiant de tâche ou la référence de tâche figurait dans la sortie de l'agent.
+- Vérifiez que l'agent a appelé `task_add_comment` avant d'effectuer des modifications.
+- Assurez-vous que l'agent a appelé `task_start` pour que le tableau sache que le travail a commencé.
+
+Pour les coéquipiers OpenCode, la preuve faisant autorité qu'une session appartient à une tâche se trouve dans `opencode-sessions.json` et l'entrée du manifeste de lane, et pas uniquement dans le flux de messages de l'interface.
+
+### Triage des journaux de tâches
+
+Lorsqu'un journal de tâche semble incomplet, recherchez par identifiant de tâche dans le JSON des tâches, les boîtes de réception et les événements de bootstrap :
+
+```bash
+TASK=""
+rg -n "$TASK" "$TASKS_DIR" "$TEAM_DIR/inboxes" "$TEAM_DIR/bootstrap-journal.jsonl" 2>/dev/null
+```
+
+Interprétez le résultat avec soin :
+
+| Preuve | Ce qu'elle prouve | Ce qu'elle ne prouve pas |
+| --- | --- | --- |
+| Message livré | L'application a écrit ou relayé un prompt | L'agent a progressé |
+| Commentaire de tâche | L'agent a publié du texte visible sur le tableau | Que le commentaire constitue un progrès significatif |
+| Lignes d'outils natifs | Le runtime a effectué du travail dans une session | Que le travail appartient à cette tâche, sauf si l'attribution correspond |
+| Entrée du registre de modifications | L'application a enregistré des modifications de fichiers | Que l'implémentation est correcte |
+
+Pour OpenCode, un journal de tâche sain inclut généralement des lignes de runtime natives comme `read`, `bash`, `edit` ou `write` ainsi que des lignes MCP Agent Teams. Si vous ne voyez que des lignes `agent-teams_*`, confirmez l'attribution de tâche et les limites de session avant d'élargir la correspondance des journaux.
+
+## Limites de débit
+
+Si un fournisseur signale une heure de réinitialisation connue, Agent Teams peut inciter le lead à continuer après le délai de récupération. Si l'heure de réinitialisation est inconnue, attendez ou changez de chemin de fournisseur/runtime.
+
+| Comportement du fournisseur | Action suggérée |
+| --- | --- |
+| Heure de réinitialisation connue affichée | Attendre le délai de récupération et continuer |
+| Aucune heure de réinitialisation affichée | Changer de fournisseur ou de chemin de runtime |
+| 429 répétés | Réduire la concurrence ou utiliser une autre lane de modèle |
+
+## Problèmes d'authentification CLI
+
+### `claude login` ne persiste pas
+
+Si la CLI est authentifiée dans un terminal mais que l'application indique le contraire, vérifiez que l'authentification est enregistrée au chemin de configuration attendu et que le processus de l'application voit le même `$HOME`.
+
+### Clé de fournisseur OpenCode rejetée
+
+- Vérifiez deux fois que le nom du fournisseur dans `config.json` correspond au préfixe de fournisseur dans la chaîne de modèle
+- Assurez-vous que la clé n'est pas expirée ou révoquée dans le tableau de bord du fournisseur
+
+### Journal de diagnostic d'authentification
+
+Chaque appel à `CliInstallerService.getStatus()` ajoute une ligne à `claude-cli-auth-diag.ndjson` dans le dossier de journaux Electron (généralement `~/Library/Logs//` sur macOS). Si le fichier dépasse **512 KiB**, il est tronqué à vide avant la prochaine écriture.
+
+Consultez ce fichier si vous voyez « Not logged in » ou des erreurs d'authentification dans l'application empaquetée.
+
+## Bootstrap de lane bloqué
+
+Pour les lanes secondaires OpenCode :
+
+- Un fichier `inboxes/.json` manquant n'est pas automatiquement un bug. Les lanes OpenCode n'ont pas besoin d'être créées via la boîte de réception primaire avant de démarrer.
+- Si l'interface indique que l'équipe est encore en cours de lancement alors que les membres primaires sont déjà utilisables, « tous les coéquipiers ont rejoint » attend les lanes secondaires.
+- Si `Prepared communication channels for X/Y members` reste bloqué, vérifiez si `Y` inclut à tort des membres OpenCode secondaires.
+
+### Entrées vides du manifeste de lane
+
+Si le pont (bridge) indique que le bootstrap a réussi mais que `manifest.json` affiche `entries: []`, le problème vient de la **validation des preuves**, et non du comportement du modèle. Le membre ne doit pas être considéré comme livrable tant que `opencode-sessions.json` et son entrée de manifeste n'existent pas.
+
+## États courants des membres
+
+| État | Signification |
+| --- | --- |
+| `confirmed_alive` + `bootstrapConfirmed` | Sain et prêt |
+| `registered` / `runtime_pending_bootstrap` | Le processus ou la lane existe, mais la preuve de bootstrap n'a pas encore été validée |
+| `failed_to_start` + `runtime_process` | Le processus existe, mais la porte de lancement a échoué. Vérifiez les diagnostics |
+| `failed_to_start` + `stale_metadata` | Le pid/la session enregistrés sont périmés ou morts |
+
+::: warning
+`member_briefing` à lui seul N'EST PAS une preuve de runtime. Pour OpenCode, la preuve faisant autorité est une preuve de runtime validée telle que `opencode-sessions.json` et l'entrée du manifeste.
+:::
+
+## Mode débogage du runtime
+
+Pour le débogage local, vous pouvez forcer les coéquipiers à s'exécuter dans des panneaux tmux :
+
+```bash
+# Launch from a terminal
+CLAUDE_TEAM_TEAMMATE_MODE=tmux pnpm dev
+
+# Or add to custom CLI args
+--teammate-mode tmux
+```
+
+Utilisez ceci pour inspecter le comportement interactif de la CLI. Ne considérez pas cela comme entièrement équivalent au backend de processus.
+
+## Vérifications de fumée
+
+Utilisez l'application de bureau Electron pour la validation normale. Le mode de développement navigateur/web n'inclut pas le runtime de bureau complet, l'IPC, l'authentification des fournisseurs, le terminal ni le comportement du cycle de vie de l'équipe.
+
+### Modifications de documentation uniquement
+
+Depuis la racine du dépôt :
+
+```bash
+pnpm --dir landing docs:build
+git diff --check -- landing/product-docs
+```
+
+### Modifications du cycle de vie de l'équipe
+
+Commencez de façon ciblée, puis élargissez :
+
+```bash
+pnpm test -- test/main/services/team/TeamProvisioningService.test.ts
+pnpm test -- test/main/services/team/TeamAgentLaunchMatrix.safe-e2e.test.ts
+pnpm typecheck
+git diff --check
+```
+
+### Test de fumée d'équipe en direct
+
+Utilisez une petite équipe et un projet jetable suivi par Git :
+
+1. Démarrez l'application de bureau avec `pnpm dev`.
+2. Créez un lead et un builder.
+3. Demandez une petite modification avec une commande de vérification explicite.
+4. Confirmez que la tâche passe de `pending` -> `in_progress` -> `completed`.
+5. Ouvrez les journaux de tâche et vérifiez que les lignes d'outils, les commentaires de tâche et les modifications de fichiers concordent.
+6. N'arrêtez que l'équipe/les processus appartenant au test de fumée lors du nettoyage.
+
+::: warning Nettoyage ciblé uniquement
+Ne tuez pas tous les hôtes OpenCode, les panneaux tmux non liés ou les équipes utilisateur lors du nettoyage d'un test de fumée.
+:::
+
+## Nettoyage sûr
+
+Lors du nettoyage de processus périmés :
+
+1. Identifiez le pid et confirmez qu'il appartient à l'équipe / la lane en cours.
+2. N'arrêtez que les processus appartenant explicitement à un test de fumée ou au lancement que vous déboguez.
+3. **Ne tuez pas** tous les processus OpenCode ou les processus hôtes partagés par facilité.
+
+## Quand collecter des preuves
+
+Avant de demander de l'aide, collectez :
+
+- L'identifiant de tâche (court ou complet)
+- Le nom de l'équipe
+- Le chemin de runtime (`claude`, `codex` ou `opencode`)
+- Un extrait du journal de lancement (depuis `latest.json` ou `bootstrap-journal.jsonl`)
+- La chaîne de fournisseur / modèle
+- La fenêtre temporelle exacte où le problème s'est produit
+
+Ces données suffisent généralement à déboguer les problèmes de lancement et de cycle de vie des tâches.
+
+::: tip
+Si le problème persiste, ouvrez les fichiers persistés de l'équipe sous `~/.claude/teams//` et corrélez les diagnostics de l'interface avec l'état des processus en direct avant de modifier le code.
+:::
diff --git a/landing/product-docs/fr/index.md b/landing/product-docs/fr/index.md
new file mode 100644
index 00000000..23614c69
--- /dev/null
+++ b/landing/product-docs/fr/index.md
@@ -0,0 +1,81 @@
+---
+title: Documentation Agent Teams – Lancez des équipes d'agents IA depuis une application de bureau locale
+description: Documentation d'Agent Teams, une application de bureau gratuite pour l'orchestration d'agents IA. Créez des équipes, suivez le travail sur un tableau kanban, examinez les modifications de code et coordonnez les flux de travail Claude, Codex, OpenCode et multimodèles.
+lang: fr-FR
+layout: home
+hero:
+ name: Documentation Agent Teams
+ text: Lancez des équipes d'agents IA depuis une application de bureau locale
+ tagline: Créez des équipes, suivez le travail se déplacer sur un tableau kanban, examinez les modifications de code et coordonnez les flux de travail Claude, Codex, OpenCode et multimodèles sans renoncer au contrôle local.
+ actions:
+ - theme: brand
+ text: Démarrage rapide
+ link: /fr/guide/quickstart
+ - theme: alt
+ text: Installation
+ link: /fr/guide/installation
+ - theme: alt
+ text: Concepts
+ link: /fr/reference/concepts
+features:
+ - icon: "01"
+ title: Flux de travail axé sur l'équipe
+ details: Définissez des rôles, lancez un lead et laissez les agents répartir, revendiquer et coordonner les tâches.
+ link: /fr/guide/create-team
+ linkText: Créer une équipe
+ - icon: "02"
+ title: Tableau kanban en direct
+ details: Suivez les tâches passer par todo, in progress, review, done et approved au fil du travail des agents.
+ link: /fr/guide/agent-workflow
+ linkText: Comprendre le flux de travail
+ - icon: "03"
+ title: Revue de code intégrée
+ details: Inspectez les diffs au périmètre des tâches, acceptez ou rejetez des hunks et commentez là où les agents ont besoin d'orientation.
+ link: /fr/guide/code-review
+ linkText: Examiner les modifications
+ - icon: "04"
+ title: Configuration adaptée au runtime
+ details: Utilisez Claude, Codex, OpenCode ou des fournisseurs multimodèles via l'accès dont vous disposez déjà.
+ link: /fr/guide/runtime-setup
+ linkText: Configurer les runtimes
+ - icon: "05"
+ title: Contrôle local d'abord
+ details: L'application de bureau lit l'état local des projets et des runtimes. Votre code reste sur votre machine, sauf si un fournisseur sélectionné reçoit le contexte du prompt.
+ link: /fr/reference/privacy-local-data
+ linkText: Modèle de confidentialité
+ - icon: "06"
+ title: Équipes débogables
+ details: Tracez les journaux de tâches, la sortie du runtime, les messages des coéquipiers et les processus en direct lorsqu'un lancement ou une tâche se bloque.
+ link: /fr/guide/troubleshooting
+ linkText: Dépanner
+---
+
+
+
+## Commencer ici
+
+Agent Teams est une application de bureau gratuite pour orchestrer des équipes d'agents IA. Vous n'envoyez pas seulement des prompts isolés à un seul agent : vous créez une équipe, attribuez des rôles et regardez les agents coordonner leur travail à travers un tableau de tâches.
+
+
+
+## Étapes suivantes après le lancement
+
+Après avoir créé votre première équipe, explorez ces guides pour aller plus loin :
+
+- **Configuration du runtime** - configurez Claude, Codex, OpenCode ou des fournisseurs multimodèles : [Configurer les runtimes](/fr/guide/runtime-setup)
+- **Flux de travail des agents** - comprenez comment les agents se coordonnent à travers le tableau de tâches : [Comprendre le flux de travail](/fr/guide/agent-workflow)
+- **Exemples de briefs d'équipe** - apprenez des modèles de prompt à partir de briefs concrets : [Voir les exemples](/fr/guide/team-brief-examples)
+- **Revue de code** - inspectez les diffs, acceptez ou rejetez les modifications : [Examiner les modifications](/fr/guide/code-review)
+- **Dépannage** - diagnostiquez les lancements bloqués, les coéquipiers manquants et les échecs de tâches : [Dépanner](/fr/guide/troubleshooting)
+- **Stratégie Git et worktree** - utilisez l'isolation par worktree lorsque plusieurs coéquipiers modifient le même dépôt en parallèle : [En savoir plus sur les worktrees](/fr/guide/git-worktree-strategy)
+- **Notes de version** - découvrez les nouveautés de chaque version : [Voir les versions](/fr/reference/release-notes)
+
+## Référence
+
+Utilisez les pages de référence lorsque vous avez besoin de la terminologie exacte, du comportement des fournisseurs, de l'architecture pour les contributeurs ou des frontières de confidentialité.
+
+
+
+## Aperçu du produit
+
+
diff --git a/landing/product-docs/fr/reference/concepts.md b/landing/product-docs/fr/reference/concepts.md
new file mode 100644
index 00000000..abcfa82b
--- /dev/null
+++ b/landing/product-docs/fr/reference/concepts.md
@@ -0,0 +1,85 @@
+---
+title: Concepts – Documentation Agent Teams
+description: Vocabulaire de base d'Agent Teams — équipes, leads, coéquipiers, tâches, kanban, boîtes de réception, runtimes et revue.
+lang: fr-FR
+---
+
+# Concepts
+
+Cette page définit les termes de base utilisés dans Agent Teams. Servez-vous-en comme vocabulaire commun pour l'application, le tableau des tâches, les messages et le flux de revue.
+
+## Équipe
+
+Une équipe est un groupe nommé d'agents rattaché à un chemin de projet. Elle possède un lead, des coéquipiers optionnels, des paramètres de runtime/fournisseur, des prompts, des boîtes de réception, des tâches et un état de lancement local.
+
+## Lead {#lead}
+
+Le lead est le coordinateur de l'équipe. Il transforme un objectif utilisateur en tâches, assigne ou réoriente les coéquipiers, suit les blocages, demande des revues et fait avancer le travail sur le tableau.
+
+[Coéquipier →](#teammate)
+
+Les messages du lead empruntent un chemin de livraison différent de celui des messages des coéquipiers : l'application relaie les entrées de la boîte de réception du lead vers le runtime du lead, tandis que les coéquipiers lisent leurs propres fichiers de boîte de réception entre les tours.
+
+## Coéquipier {#teammate}
+
+Un coéquipier est un agent non-lead de l'équipe. Les coéquipiers occupent généralement des rôles ciblés comme builder, reviewer, chercheur ou testeur. Un coéquipier peut recevoir des messages directs, des assignations de tâches, des commentaires de tâches et des demandes de revue.
+
+[Lead ↑](#lead)
+
+## Tâche
+
+Une tâche est l'unité de travail durable. Elle possède un id, un statut, un propriétaire, une description, des commentaires, des journaux, des pièces jointes, des références de tâches et des modifications revues.
+
+Les états de tâche courants sont `todo`, `in_progress`, `done`, `review` et `approved`. En interne, le fichier de tâche stocke l'état du travail, tandis que le positionnement de revue et d'approbation peut aussi utiliser l'état d'overlay du kanban.
+
+## Kanban
+
+Le kanban est la vue en tableau du travail de l'équipe. Il vous permet de parcourir les tâches par état, d'ouvrir les détails d'une tâche, d'inspecter les journaux, de revoir les diffs, d'approuver le travail terminé ou de demander des modifications.
+
+## Boîte de réception
+
+Une boîte de réception est un fichier de messages local pour un participant de l'équipe. Agent Teams utilise les boîtes de réception pour les messages utilisateur, les messages du lead, les messages des coéquipiers, les métadonnées de livraison du runtime, les messages inter-équipes et certaines notifications système.
+
+Les messages sont des enregistrements locaux durables. La livraison dépend toujours du fait que le runtime sélectionné soit actif et capable de traiter son tour suivant.
+
+## Bloc d'agent
+
+Un bloc d'agent est un texte d'instruction masqué, réservé aux agents, encadré par `... `. L'interface retire ces blocs de l'affichage normal destiné aux humains, mais les agents et la livraison runtime peuvent les utiliser pour des détails de coordination.
+
+Le marqueur canonique actuel est `info_for_agent`. Les documents plus anciens peuvent utiliser des blocs de code délimités avec un marqueur `info_for_agent`, ou des balises de style XML `` — ce sont des motifs hérités qui devraient être migrés vers `info_for_agent` lorsqu'on les rencontre. (Le nom de balise original était `agent-block` ; la forme avec underscore `` est utilisée dans la source VitePress pour éviter l'analyse HTML.)
+
+## Phase de contexte
+
+Une phase de contexte est un segment d'une chronologie de contexte de session. La compaction démarre une nouvelle phase, de sorte que l'utilisation des tokens et du contexte peut être analysée avant et après la réinitialisation.
+
+Le suivi du contexte sépare des catégories telles que les instructions de projet, les fichiers mentionnés, la sortie d'outils, le texte de réflexion, la coordination d'équipe et les messages utilisateur. Ces chiffres sont des diagnostics, pas des relevés de facturation des fournisseurs.
+
+## Runtime
+
+Un runtime est le chemin d'exécution local qui exécute un tour d'agent. Les chemins de runtime pris en charge incluent Claude Code, Codex et OpenCode.
+
+Le runtime gère le comportement d'exécution du modèle, les détails d'authentification, la sémantique d'exécution des outils, les limites de débit, la disponibilité des modèles et certains formats de transcription/journaux.
+
+## Fournisseur
+
+Un fournisseur est le chemin d'accès au modèle situé derrière un runtime. Les ids de fournisseur actuels incluent Anthropic, Codex, Gemini et OpenCode. OpenCode peut router vers de nombreux fournisseurs de modèles via sa propre configuration.
+
+Agent Teams orchestre les tâches et les messages, mais il ne remplace pas l'authentification du fournisseur ni la politique du fournisseur.
+
+## Mode solo
+
+Le mode solo exécute une équipe à un seul membre. Il est utile pour le travail rapide, une charge de coordination réduite et la validation d'un prompt avant de passer à une équipe complète.
+
+## Communication inter-équipes
+
+Les agents peuvent échanger des messages au sein d'une équipe et entre équipes. Utilisez cette fonctionnalité lorsque des équipes distinctes mènent des travaux liés et doivent se coordonner sans tout fusionner dans une seule grande équipe.
+
+## Niveau d'autonomie
+
+L'autonomie contrôle ce que les agents peuvent faire avant de demander. Une autonomie plus élevée est plus rapide ; une autonomie plus faible est plus sûre pour les chemins de code sensibles, la persistance, l'authentification des fournisseurs, les opérations Git et les releases.
+
+## Revue
+
+La revue est le flux d'acceptation au périmètre d'une tâche. Une tâche peut passer en review, recevoir des commentaires ou des modifications demandées, puis passer en approved lorsque le résultat est accepté.
+
+La revue est liée aux diffs locaux et à l'historique des tâches, elle fonctionne donc mieux lorsque les tâches restent étroites et que les agents mentionnent la tâche sur laquelle ils travaillent.
diff --git a/landing/product-docs/fr/reference/contributor-architecture.md b/landing/product-docs/fr/reference/contributor-architecture.md
new file mode 100644
index 00000000..f5539582
--- /dev/null
+++ b/landing/product-docs/fr/reference/contributor-architecture.md
@@ -0,0 +1,55 @@
+---
+title: Architecture pour les contributeurs – Documentation Agent Teams
+description: Guide du contributeur sur l'organisation des fonctionnalités, les frontières runtime/fournisseur, les garde-fous stricts et les documents d'architecture canoniques.
+lang: fr-FR
+---
+
+# Architecture pour les contributeurs
+
+Cette page est une carte destinée aux contributeurs. Elle pointe vers les directives canoniques du dépôt plutôt que de réénoncer chaque règle d'implémentation.
+
+## Sources canoniques
+
+Utilisez ces fichiers comme source de vérité lorsque vous modifiez l'application :
+
+| Besoin | Source canonique |
+| --- | --- |
+| Vue d'ensemble du dépôt et commandes | [README.md](https://github.com/777genius/agent-teams-ai/blob/main/README.md) |
+| Conventions de travail locales | [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) |
+| Garde-fous stricts | [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) |
+| Organisation des fonctionnalités moyennes et grandes | [docs/FEATURE_ARCHITECTURE_STANDARD.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) |
+| Débogage du lancement des équipes d'agents | [docs/team-management/debugging-agent-teams.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) |
+
+## Organisation des fonctionnalités
+
+Les fonctionnalités moyennes et grandes doivent résider sous `src/features//` et suivre le standard d'architecture des fonctionnalités. Gardez les éléments internes d'une fonctionnalité derrière des points d'entrée publics, et évitez les imports profonds qui traversent les frontières entre fonctionnalités.
+
+Pour tout nouveau travail, partez de la slice `src/features/recent-projects` existante comme implémentation de référence locale. Les petits correctifs peuvent rester proches du chemin de code existant lorsque créer une slice de fonctionnalité ajouterait plus de structure que de valeur.
+
+## Frontières runtime et fournisseur
+
+Agent Teams possède l'orchestration : équipes, tâches, messages, état de lancement, interface de revue, diagnostics et persistance locale.
+
+Le chemin runtime/fournisseur sélectionné possède l'exécution du modèle, l'authentification, la disponibilité du modèle, les limites de débit, la sémantique des outils et les preuves de transcription spécifiques au runtime. Ne faites pas en sorte que les prompts ou l'état de l'interface compensent une authentification manquante, des binaires manquants, des identifiants de modèle rejetés ou des pannes de fournisseur. Pour les détails de configuration côté utilisateur, voir [Fournisseurs et runtimes](/fr/reference/providers-runtimes).
+
+## Débogage des équipes d'agents
+
+En cas de blocage au lancement, d'états OpenCode `registered` / bootstrap non confirmé, de réponses de coéquipiers manquantes ou de journaux de tâches suspects, partez du runbook de débogage dédié. Inspectez l'artefact d'échec de lancement le plus récent sous `~/.claude/teams//launch-failure-artifacts/latest.json`, puis corrélez l'état de l'interface avec les fichiers persistés et les preuves spécifiques au runtime.
+
+Évitez les nettoyages larges pendant le débogage. N'arrêtez que le processus, la lane, l'équipe ou l'exécution de smoke test que vous pouvez identifier comme appartenant au problème.
+
+## Conventions des contributeurs
+
+- Utilisez `pnpm dev` pour l'application de bureau Electron pendant le développement normal.
+- N'utilisez pas le mode dev navigateur comme substitut au runtime de bureau, à l'IPC, au terminal, à l'authentification du fournisseur ou au comportement du cycle de vie d'une équipe.
+- Gardez séparées les responsabilités d'Electron main, preload, renderer, shared et des fonctionnalités.
+- Utilisez `wrapAgentBlock(text)` pour les blocs réservés aux agents au lieu de concaténer manuellement les marqueurs.
+- Privilégiez une vérification ciblée. Évitez les `lint:fix` larges ou le brassage de formatage à moins que la tâche ne porte explicitement sur le formatage.
+- Traitez le parsing, le cycle de vie des tâches, la détection fournisseur/runtime, la persistance, l'IPC, Git et les flux de revue comme des zones à haut risque qui nécessitent des tests ciblés ou un chemin de vérification clair.
+
+## Pages connexes
+
+- [Configuration du runtime](/fr/guide/runtime-setup)
+- [Dépannage](/fr/guide/troubleshooting)
+- [Revue de code](/fr/guide/code-review)
+- [Confidentialité et données locales](/fr/reference/privacy-local-data)
diff --git a/landing/product-docs/fr/reference/faq.md b/landing/product-docs/fr/reference/faq.md
new file mode 100644
index 00000000..9e3d0521
--- /dev/null
+++ b/landing/product-docs/fr/reference/faq.md
@@ -0,0 +1,95 @@
+---
+title: FAQ – Documentation Agent Teams
+description: Foire aux questions sur Agent Teams — tarification, accès aux modèles, runtimes, confidentialité, revue et dépannage.
+lang: fr-FR
+---
+
+# FAQ
+
+## Agent Teams est-il gratuit ?
+
+Oui. L'application est gratuite et open source. L'accès au fournisseur ou au runtime peut tout de même engendrer des coûts selon ce que vous utilisez.
+
+## Agent Teams inclut-il l'accès aux modèles ?
+
+Non. Agent Teams est la couche locale d'orchestration et d'interface utilisateur. L'accès aux modèles provient du chemin runtime/fournisseur sélectionné, tel que Claude Code, Codex ou OpenCode.
+
+## Quels runtimes sont pris en charge ?
+
+Les chemins de runtime pris en charge sont Claude Code, Codex et OpenCode. L'application suit également des identifiants de fournisseur tels qu'Anthropic, Codex, Gemini et OpenCode lorsque le runtime les expose.
+
+## Dois-je d'abord installer Claude Code ou Codex ?
+
+Pas toujours. L'application guide la détection et la configuration du runtime depuis l'interface utilisateur. Certains chemins nécessitent tout de même une authentification de runtime externe.
+
+La configuration d'OpenCode est distincte de celle de Claude Code et Codex. Si un lancement échoue, vérifiez l'état du runtime et l'authentification du fournisseur avant de modifier le prompt de l'équipe.
+
+## Comment vérifier si un runtime est prêt ?
+
+Exécutez d'abord la commande du runtime dans un terminal :
+
+```bash
+claude --version
+codex --version
+opencode --version
+```
+
+Confirmez ensuite l'authentification du fournisseur pour le chemin que vous avez sélectionné. Si la commande ou la vérification d'authentification échoue en dehors d'Agent Teams, corrigez la configuration avant de lancer une équipe.
+
+## Mon code est-il téléversé vers les serveurs d'Agent Teams ?
+
+Non. Agent Teams n'est pas un service de synchronisation de code dans le cloud. Les appels de modèle adossés à un fournisseur peuvent recevoir le contexte du prompt selon le runtime que vous avez sélectionné.
+
+## Où les fichiers d'équipe sont-ils stockés ?
+
+Les données de coordination d'équipe sont stockées localement dans `~/.claude/teams//` (macOS/Linux) ou `%APPDATA%\Claude\teams\\` (Windows), les fichiers de tâches dans `~/.claude/tasks//` ou `%APPDATA%\Claude\tasks\\`, et les données de session de projet dans `~/.claude/projects//` lorsqu'elles sont disponibles.
+
+## Qu'est-ce qui peut quitter ma machine ?
+
+Le contexte du prompt, le contenu des fichiers sélectionnés, les résultats d'outils, la sortie des commandes, le texte des tâches, les commentaires et les pièces jointes peuvent quitter votre machine via le chemin runtime/fournisseur lorsqu'un agent utilise un modèle adossé à un fournisseur. Le comportement exact dépend du runtime et du fournisseur.
+
+## Les agents peuvent-ils communiquer entre eux ?
+
+Oui. Les agents peuvent envoyer des messages à leurs coéquipiers, commenter des tâches, se coordonner entre équipes et utiliser des références de tâches pour garder les conversations rattachées au travail.
+
+## Que dois-je mettre dans le premier prompt d'équipe ?
+
+Donnez au lead un résultat concret, des limites de fichiers ou de fonctionnalités, des limites de risque et des attentes de vérification. Par exemple :
+
+```text
+Improve the docs quickstart. Keep edits inside landing/product-docs, add practical examples, and run `pnpm --dir landing docs:build` before marking work done.
+```
+
+## Puis-je examiner le code avant de l'accepter ?
+
+Oui. Le flux de revue s'articule autour de diffs cadrés par tâche et de décisions au niveau du hunk.
+
+## Qu'est-ce qu'un Agent Block ?
+
+Un Agent Block est un texte caché réservé aux agents, encadré par des marqueurs tels que `... `. L'application le retire de l'affichage normal destiné à l'utilisateur, mais le conserve disponible pour la coordination entre agents.
+
+## Qu'est-ce que le mode solo ?
+
+Le mode solo est une équipe à un seul agent. Il est utile pour les tâches plus petites et pour réduire la surcharge de coordination.
+
+## Dois-je utiliser l'isolation par worktree ?
+
+Utilisez-la lorsque plusieurs coéquipiers OpenCode peuvent modifier le même projet Git en parallèle. Elle réduit les conflits de fichiers, mais elle nécessite un projet suivi par Git et s'applique actuellement aux membres OpenCode.
+
+## Différents coéquipiers peuvent-ils utiliser différents fournisseurs ?
+
+Oui, les réglages de fournisseur/modèle peuvent être transportés par membre d'équipe lorsque le chemin runtime sélectionné les prend en charge. OpenCode est le principal chemin pour un routage multi-fournisseur étendu.
+
+## Pourquoi une tâche affiche-t-elle review ou approved séparément de done ?
+
+L'état du travail et l'état de revue sont liés mais ne sont pas identiques. Une tâche peut être done du point de vue de l'agent, puis passer par les étapes review et approval dans l'interface kanban.
+
+## Que dois-je faire lorsqu'un lancement reste bloqué ?
+
+Ouvrez le dépannage, collectez les diagnostics de lancement, vérifiez `~/.claude/teams//`, et vérifiez l'authentification du runtime/fournisseur avant de modifier les prompts.
+
+Pour OpenCode, vérifiez les preuves de lane/session avant de supposer qu'un coéquipier est en ligne mais ignore les messages.
+
+## Pourquoi les journaux diffèrent-ils selon les runtimes ?
+
+Claude Code, Codex et OpenCode exposent des formats de transcription et des preuves de runtime différents. Agent Teams normalise ce qu'il peut, mais l'exhaustivité des journaux et l'attribution peuvent varier selon le runtime.
diff --git a/landing/product-docs/fr/reference/privacy-local-data.md b/landing/product-docs/fr/reference/privacy-local-data.md
new file mode 100644
index 00000000..4c6849f2
--- /dev/null
+++ b/landing/product-docs/fr/reference/privacy-local-data.md
@@ -0,0 +1,82 @@
+---
+title: Confidentialité et données locales – Documentation Agent Teams
+description: Ce qu'Agent Teams stocke localement, ce qui peut quitter votre machine via les appels de modèles adossés à un fournisseur, et des conseils pratiques en matière de confidentialité.
+lang: fr-FR
+---
+
+# Confidentialité et données locales
+
+Agent Teams privilégie le local, mais le chemin runtime/fournisseur sélectionné a toujours son importance. Cette page décrit ce que l'application de bureau stocke localement et ce qui peut quitter votre machine lorsque les agents appellent des modèles adossés à un fournisseur.
+
+## Ce qui reste local
+
+L'application de bureau s'exécute sur votre machine et lit les données locales de projet/runtime pour alimenter l'interface. Les données locales typiques comprennent :
+
+- les fichiers de projet
+- la configuration de l'équipe et les métadonnées des membres
+- les métadonnées de tâches, les commentaires de tâches et les références de tâches
+- les messages de la boîte de réception
+- les journaux de runtime/session
+- l'état de lancement et les diagnostics de bootstrap
+- l'état des revues
+- les paramètres locaux de l'application
+
+Les emplacements locaux importants comprennent :
+
+| Plateforme | Emplacement | Objet |
+| --- | --- | --- |
+| macOS/Linux | `~/.claude/teams//` | Configuration de l'équipe, métadonnées des membres, boîtes de réception, état de lancement, preuves de bootstrap, diagnostics de runtime, enregistrements des messages envoyés, état du kanban et fichiers d'équipe liés aux revues. |
+| Windows | `%APPDATA%\Claude\teams\\` | Idem — configuration de l'équipe, métadonnées des membres, boîtes de réception, état de lancement et diagnostics. |
+| macOS/Linux | `~/.claude/tasks//` | Fichiers JSON de tâches durables pour le tableau de l'équipe. |
+| Windows | `%APPDATA%\Claude\tasks\\` | Idem — fichiers JSON de tâches durables. |
+| macOS/Linux | `~/.claude/projects//` | Fichiers de session de projet de style Claude/Codex utilisés pour l'historique des sessions, l'analyse de contexte et l'interface adossée aux transcriptions. |
+| Windows | `%APPDATA%\Claude\projects\\` | Idem — fichiers de session de projet. |
+
+Les fichiers exacts peuvent varier selon le runtime et la version de l'application. Pour le débogage de lancement, les preuves les plus récentes se trouvent généralement sous le dossier `~/.claude/teams//` pertinent (ou `%APPDATA%\Claude\teams\\`).
+
+## Ce qui peut quitter votre machine
+
+Agent Teams en lui-même n'est pas un service de synchronisation de code dans le cloud pour votre dépôt. Il n'a pas besoin de téléverser l'intégralité de votre projet vers un serveur Agent Teams pour afficher le tableau, la boîte de réception, les journaux ou l'interface de revue.
+
+Cependant, lorsqu'un agent demande à un modèle adossé à un fournisseur de travailler, le contexte du prompt, le contenu des fichiers sélectionnés, le texte des tâches, les commentaires, les résultats d'outils, la sortie de commandes et d'autres contextes fournis par le runtime peuvent être envoyés via le chemin runtime/fournisseur sélectionné. Ce qui est envoyé dépend du runtime, du modèle, des appels d'outils, du prompt et de la configuration du fournisseur.
+
+L'authentification auprès du fournisseur, la rétention côté fournisseur, l'entraînement, la journalisation, le traitement régional et la facturation sont régis par le fournisseur/runtime que vous choisissez. Examinez ces politiques pour les projets sensibles.
+
+Exemples courants :
+
+| Action | Données pouvant être envoyées via le runtime/fournisseur |
+| --- | --- |
+| Demander à un agent de modifier un fichier | Le prompt de la tâche, le contenu pertinent du fichier, les résultats d'outils et la sortie de commandes |
+| Joindre une capture d'écran | Le contenu de la pièce jointe et le texte de tâche/commentaire environnant |
+| Demander une revue de code | Le contexte du diff, les fichiers sélectionnés, les commentaires et les journaux de vérification |
+| Déboguer une commande en échec | La sortie d'erreur, les traces d'appel et les extraits de code source référencés |
+
+## Ce que l'application ne garantit pas
+
+- Elle ne peut pas garantir que les appels de modèles adossés à un fournisseur ne reçoivent jamais de code privé.
+- Elle ne peut pas outrepasser les politiques de rétention ou de facturation du fournisseur.
+- Elle ne peut pas faire en sorte qu'un fournisseur distant se comporte comme un modèle entièrement local.
+- Elle ne peut pas protéger les secrets qu'un agent reçoit l'instruction de coller dans des prompts, des commentaires de tâches, des fichiers ou des commandes.
+- Elle ne peut pas faire en sorte que chaque runtime expose le même niveau de détail de transcription ou d'audit.
+
+## Conseils pratiques
+
+- Ne joignez pas de secrets aux tâches, commentaires ou messages directs.
+- Examinez les politiques du fournisseur pour les projets sensibles.
+- Utilisez un niveau d'autonomie plus faible pour les dépôts à risque.
+- Gardez un périmètre de tâche étroit lorsque vous travaillez avec du code privé.
+- Privilégiez les preuves et journaux locaux lors du débogage.
+- Vérifiez les prompts générés, les descriptions de tâches et les fichiers joints avant de demander aux agents de travailler sur du matériel confidentiel.
+- Utilisez des chemins fournisseur/modèle qui correspondent à vos exigences de confidentialité.
+
+Avant d'utiliser Agent Teams sur un dépôt sensible :
+
+1. Retirez les secrets de l'arbre de travail et des pièces jointes de tâches
+2. Choisissez le chemin runtime/fournisseur que vous êtes autorisé à utiliser
+3. Commencez avec une faible autonomie et de petites tâches
+4. Examinez les prompts de tâches et les commentaires générés avant d'élargir le périmètre
+5. Gardez les journaux en local sauf si vous les partagez intentionnellement pour obtenir de l'aide
+
+## Modèle open source
+
+L'application elle-même est open source et gratuite. Vous pouvez examiner le fonctionnement de l'orchestration locale, du suivi des tâches, des boîtes de réception, des diagnostics de runtime et des flux de revue dans le dépôt.
diff --git a/landing/product-docs/fr/reference/providers-runtimes.md b/landing/product-docs/fr/reference/providers-runtimes.md
new file mode 100644
index 00000000..1c08003f
--- /dev/null
+++ b/landing/product-docs/fr/reference/providers-runtimes.md
@@ -0,0 +1,115 @@
+---
+title: Fournisseurs et runtimes – Documentation Agent Teams
+description: Chemins de runtime pris en charge (Claude Code, Codex, OpenCode), identifiants de fournisseur, nommage des modèles, stratégies multi-fournisseurs et vérifications de capacités.
+lang: fr-FR
+---
+
+# Fournisseurs et runtimes
+
+Agent Teams sépare l'orchestration de l'accès aux modèles. L'application gère les équipes, les tâches, les messages, l'état de lancement et l'interface de revue ; le chemin runtime/fournisseur sélectionné effectue le travail réel du modèle.
+
+## Ce que fournit l'application
+
+Agent Teams fournit :
+
+- l'orchestration des équipes et des tâches
+- l'interface du tableau kanban
+- la messagerie entre coéquipiers
+- les journaux de tâches
+- l'interface de revue
+- l'intégration des projets locaux
+- la détection du runtime et les vérifications de capacités
+- les journaux et diagnostics locaux
+
+## Ce que fournit le runtime
+
+Le runtime fournit :
+
+- l'exécution du modèle
+- l'authentification du fournisseur
+- le comportement d'exécution des outils
+- les limites de débit et les capacités spécifiques au modèle
+- les transcriptions et les preuves de livraison spécifiques au runtime
+
+## Chemins de runtime pris en charge
+
+| Chemin de runtime | Chemin fournisseur/modèle | Idéal pour | Notes |
+| --- | --- | --- | --- |
+| Claude Code | Anthropic / modèles Claude | Utilisateurs de Claude Code et flux de travail adossés à Anthropic | Chemin local-first par défaut pour les équipes Claude. Nécessite que le runtime et l'accès au compte soient disponibles localement. |
+| Codex | Codex / modèles adossés à OpenAI | Flux de travail natifs Codex | Utilise l'intégration du runtime Codex et l'état d'authentification/de compte Codex lorsqu'ils sont disponibles. Certains diagnostics diffèrent des transcriptions Claude. |
+| OpenCode | Routage de modèles géré par OpenCode | Équipes multi-fournisseurs et large couverture de modèles | OpenCode peut router à travers de nombreux fournisseurs de modèles. Agent Teams traite les voies OpenCode comme des preuves spécifiques au runtime et évite de deviner lorsque l'identité de la voie est ambiguë. |
+
+Gemini est disponible comme chemin de fournisseur pris en charge avec l'authentification Google ADC (gcloud auth), l'OAuth de Gemini CLI et par clé API. Il apparaît aux côtés des autres fournisseurs dans l'interface de création d'équipe et de configuration du runtime lorsque le runtime le signale comme disponible.
+
+## Identifiants de fournisseur
+
+L'application reconnaît actuellement ces identifiants de fournisseur dans la configuration d'équipe/runtime :
+
+| Identifiant de fournisseur | Intention d'affichage |
+| --- | --- |
+| `anthropic` | Chemin Anthropic / Claude Code |
+| `codex` | Chemin Codex |
+| `gemini` | Chemin du fournisseur Gemini (Google ADC, Gemini CLI ou clé API) |
+| `opencode` | Chemin OpenCode, y compris le routage de fournisseur géré par OpenCode |
+
+Ne considérez pas ce tableau comme une garantie que chaque fournisseur est authentifié, installé ou disponible pour chaque modèle sur chaque machine. L'état du runtime et les vérifications de capacités font foi pour un lancement donné.
+
+## Identifiants de modèle
+
+Les identifiants de modèle sont transmis au runtime sélectionné. Agent Teams ne réécrit pas le catalogue de modèles d'un fournisseur dans un schéma de nommage universel.
+
+Exemples :
+
+| Chemin fournisseur | Exemple d'identifiant de modèle | Notes |
+| --- | --- | --- |
+| Claude Code | `opus`, `sonnet`, ou un identifiant de modèle Claude complet | La disponibilité dépend de Claude Code et de l'accès au compte |
+| Codex | `gpt-5.4`, `gpt-5.3-codex` | La disponibilité provient de l'état du compte/runtime Codex |
+| OpenCode | `openrouter/moonshotai/kimi-k2.6` | Le préfixe doit correspondre à une configuration de fournisseur OpenCode |
+
+Si un nom de modèle est rejeté, vérifiez-le d'abord directement dans le runtime/fournisseur. Modifier un brief d'équipe ne peut pas rendre lançable un modèle indisponible.
+
+## Stratégie multi-fournisseurs
+
+Agent Teams maintient une orchestration consciente du fournisseur mais sans en dépendre :
+
+- les équipes, les tâches, les boîtes de réception, les commentaires, l'état de revue et les diagnostics de lancement restent dans le stockage local d'Agent Teams
+- chaque membre peut porter des paramètres de fournisseur/modèle via les métadonnées de lancement d'équipe
+- la disponibilité des modèles, l'authentification, les limites de débit et le comportement des outils restent des responsabilités du runtime/fournisseur
+- OpenCode est le chemin de routage le plus large lorsque vous souhaitez qu'une seule équipe utilise plusieurs voies de fournisseur/modèle
+
+Pour les frontières destinées aux contributeurs et les conseils d'implémentation canoniques, voir [Architecture pour les contributeurs](/fr/reference/contributor-architecture).
+
+Modèles recommandés :
+
+| Modèle | Quand il aide | Risque |
+| --- | --- | --- |
+| Un seul fournisseur pour tous les membres | Premier lancement, dépôts sensibles, débogage le plus simple | Des limites de débit partagées peuvent arrêter toute l'équipe |
+| Lead solide + constructeurs moins coûteux | Garder la planification/revue fiable tout en réduisant le coût d'implémentation | La sortie des constructeurs peut nécessiter une revue plus stricte |
+| Modèles distincts pour le constructeur et le relecteur | Détecter les angles morts spécifiques à un modèle | Plus de configuration et d'attribution à inspecter |
+
+## Coûts des fournisseurs
+
+Agent Teams est gratuit et open source. Vous pouvez démarrer avec le modèle gratuit inclus sans authentification - sans inscription, clés API ni carte de crédit. L'utilisation de fournisseurs payants ou adossés à un compte est régie par le runtime/fournisseur que vous sélectionnez : limites d'abonnement, clés API, authentification de compte, limites de débit et politiques de fournisseur restent toutes externes à l'application.
+
+## Vérifications de capacités
+
+Lors de la configuration, l'application peut effectuer des vérifications d'accès et de capacités. Cela aide à détecter une authentification de runtime manquante avant qu'un lancement d'équipe n'échoue à mi-parcours du provisionnement.
+
+Les vérifications de capacités peuvent signaler qu'un fournisseur existe mais n'est pas authentifié, qu'une liste de modèles est indisponible, qu'un chemin de runtime est manquant, ou qu'une capacité d'extension spécifique n'est pas prise en charge. Traitez ces résultats comme des diagnostics de configuration, pas comme des échecs de tâche.
+
+Correctifs de configuration typiques :
+
+| Résultat de la vérification | Que faire |
+| --- | --- |
+| Runtime manquant | Installer la CLI ou corriger le `PATH` |
+| Fournisseur non authentifié | Lancer le flux de connexion du fournisseur ou ajouter la clé API requise |
+| Modèle indisponible | Choisir un modèle visible dans la liste des modèles de ce runtime |
+| Capacité non prise en charge | Utiliser un autre chemin de runtime pour ce coéquipier |
+
+## Limites à prévoir
+
+- La prise en charge d'un runtime ne signifie pas une parité de fonctionnalités égale entre Claude Code, Codex et OpenCode.
+- La couverture des journaux et des transcriptions diffère selon le runtime.
+- Les voies OpenCode ont besoin de preuves de voie/session stables avant que l'application puisse attribuer les journaux de runtime en toute sécurité.
+- Les noms et la disponibilité des modèles des fournisseurs peuvent changer en dehors de l'application.
+- Un prompt d'équipe ne peut pas corriger une authentification manquante, des entrées PATH manquantes, des pannes de fournisseur ou des limites de débit épuisées.
diff --git a/landing/product-docs/fr/reference/release-notes.md b/landing/product-docs/fr/reference/release-notes.md
new file mode 100644
index 00000000..c90a170a
--- /dev/null
+++ b/landing/product-docs/fr/reference/release-notes.md
@@ -0,0 +1,42 @@
+---
+title: Notes de version – Documentation Agent Teams
+description: Notes de version et journal des modifications d'Agent Teams. Liens vers les fichiers canoniques RELEASE.md et CHANGELOG.md pour tous les détails.
+lang: fr-FR
+---
+
+# Notes de version
+
+Version actuelle : **v1.2.0** (2026-03-31). Le développement actif se poursuit sur la branche `main` avec des modifications non publiées concernant la synchronisation du travail des membres, le renforcement de la livraison OpenCode et la stabilisation de la CI.
+
+## Comment fonctionnent les versions
+
+Agent Teams suit le [versionnage sémantique](https://semver.org/). Les tags poussés sur le dépôt déclenchent un [workflow de publication](https://github.com/777genius/agent-teams-ai/blob/main/docs/RELEASE.md) automatisé qui construit des paquets signés pour macOS, Windows et Linux, puis les publie sur GitHub Releases.
+
+## Versions récentes
+
+### v1.2.0 — Agent Graph, approbation des outils par équipe, AskUserQuestion interactif
+
+Agent Graph avec visualisation à forces dirigées et disposition des tâches en kanban, contrôles d'approbation des outils par équipe avec des invites de permission lisibles, notifications de commentaires de tâche et boutons AskUserQuestion interactifs. Refonte du système de permissions avec préchargement de Write/Edit/NotebookEdit et intégration du catalogue d'outils MCP. Voir le [journal des modifications complet](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md#120---2026-03-31).
+
+### v1.1.0 — React 19 + Electron 40, démarrages de tâche initiés par l'utilisateur
+
+Migration vers React 19 + Electron 40, démarrages de tâche initiés par l'utilisateur depuis le tableau kanban, guide de dépannage de l'authentification, coloration syntaxique pour R/Ruby/PHP/SQL, recherche dans les transcriptions 3x plus rapide, corrections des chemins WSL/Windows et correctif d'une vulnérabilité XSS. Voir le [journal des modifications complet](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md#110---2026-03-25).
+
+### v1.0.0 — Première version publique
+
+Première build stable : fiabilité de la CLI et de l'authentification dans les applications packagées, renforcement de l'IPC, packaging multiplateforme avec builds macOS signées, documents de gouvernance open source (LICENSE, CONTRIBUTING, CODE_OF_CONDUCT, SECURITY). Voir le [journal des modifications complet](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md#100---2026-03-23).
+
+## Sources canoniques
+
+| Document | Description |
+| --- | --- |
+| [RELEASE.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/RELEASE.md) | Processus de publication, guide de versionnage, nommage des artefacts, configuration des mises à jour automatiques et modèle de notes de version. |
+| [CHANGELOG.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md) | Journal des modifications complet avec toutes les versions, fonctionnalités, améliorations et corrections de bugs du point de vue de l'utilisateur. |
+| [GitHub Releases](https://github.com/777genius/agent-teams-ai/releases) | Installeurs téléchargeables pour toutes les plateformes. |
+
+## Pages connexes
+
+- [Installation](/fr/guide/installation)
+- [Démarrage rapide](/fr/guide/quickstart)
+- [Architecture pour les contributeurs](/fr/reference/contributor-architecture)
+- [Développeurs](/fr/developers/)
diff --git a/landing/product-docs/guide/beginner-workflow.md b/landing/product-docs/guide/beginner-workflow.md
new file mode 100644
index 00000000..91efd44e
--- /dev/null
+++ b/landing/product-docs/guide/beginner-workflow.md
@@ -0,0 +1,108 @@
+---
+title: "Beginner Workflow - Agent Teams Docs"
+description: "A structured first-run path for new users. Learn the project, team, task board, task detail, and review surfaces before launching larger teams."
+---
+
+# Beginner Workflow
+
+Use this path when you are new to Agent Teams and want a clear sequence from "open the app" to "approve useful work".
+
+The first run should prove four things:
+
+1. The app can open your project.
+2. A small team can launch with the selected runtime.
+3. Tasks move through the board in a visible way.
+4. You can review and approve changes before they are treated as done.
+
+## The basic model
+
+Agent Teams has four working surfaces:
+
+| Surface | What you do there |
+| --- | --- |
+| Project and team selector | Pick the project and the team that will work on it. |
+| Team editor | Name the team, add members, choose roles, models, and worktree settings. |
+| Task board | Watch work move through Todo, In Progress, Review, Done, and Approved. |
+| Task detail and review | Read the task, inspect logs, check changes, and approve or request fixes. |
+
+
+
+## Recommended guide order
+
+Follow these guides in order for the first successful run:
+
+1. [Create your first team](/guide/create-first-team) - set up a small lead-builder-reviewer team.
+2. [Run and monitor work](/guide/run-and-monitor-work) - give the lead a concrete goal and watch the task board.
+3. [Review and approve](/guide/review-and-approve) - inspect task details, logs, and code changes.
+4. [Troubleshooting](/guide/troubleshooting) - use this if launch, messages, or task logs do not look healthy.
+
+## Before you launch
+
+Start with a Git-tracked project and a known baseline:
+
+```bash
+git status --short
+```
+
+You do not need a perfectly clean tree, but you should know which files are already changed. That makes review safer after agents start editing.
+
+For the first run, keep the team small:
+
+| Member | Good first responsibility |
+| --- | --- |
+| Lead | Split the goal into tasks and coordinate status. |
+| Builder | Implement scoped tasks. |
+| Reviewer | Review completed tasks and ask for fixes. |
+
+Avoid launching many teammates at once. More agents increase logs, concurrent edits, provider usage, and review load.
+
+## First goal template
+
+Use a goal that has clear scope, boundaries, and verification:
+
+```text
+Improve the documentation quickstart. Keep edits inside landing/product-docs, add practical examples, preserve existing VitePress syntax, and run `pnpm --dir landing docs:build` before marking tasks done.
+```
+
+Good first goals are specific, testable, and limited to a known area. Avoid prompts like "make the app better" until you understand the workflow.
+
+## What healthy progress looks like
+
+During a healthy run:
+
+- The lead creates small tasks rather than one huge task.
+- Each teammate posts a plan or progress comment.
+- Work moves from Todo to In Progress.
+- Finished work moves to Review before approval.
+- The task detail shows the description, attachments, changes, and execution logs.
+- The final comment includes the verification command and result.
+
+## When to intervene
+
+Intervene when a task is vague, too broad, blocked, or missing verification. Use a task comment when the message belongs to one task. Use a direct message when you need to redirect a teammate or the lead.
+
+Common intervention prompts:
+
+```text
+Split this into smaller tasks. Each task should have a narrow file scope and a clear verification step.
+```
+
+```text
+Before continuing, post the files you plan to change and the command you will run to verify the result.
+```
+
+```text
+This task is too broad. Keep the change inside the docs guide pages and avoid touching app runtime code.
+```
+
+## Completion checklist
+
+Before you call the first run successful, verify:
+
+- The team launched without runtime errors.
+- At least one task moved through Review.
+- You inspected the task diff.
+- The result comment includes a verification result.
+- You understand which files changed and why.
+
+Then continue to [Create your first team](/guide/create-first-team).
diff --git a/landing/product-docs/guide/create-first-team.md b/landing/product-docs/guide/create-first-team.md
new file mode 100644
index 00000000..bba545a7
--- /dev/null
+++ b/landing/product-docs/guide/create-first-team.md
@@ -0,0 +1,111 @@
+---
+title: "Create Your First Team - Agent Teams Docs"
+description: "Step-by-step setup for a first Agent Teams team with lead, builder, reviewer, roles, models, worktree isolation, and a clear launch brief."
+---
+
+# Create Your First Team
+
+This guide walks through the first team setup. The goal is not to build the biggest team possible. The goal is to create a small team that launches reliably and produces reviewable tasks.
+
+## 1. Open the target project
+
+Open the project you want agents to work in. Prefer a Git-tracked project so Agent Teams can show diffs, task-linked changes, and review state.
+
+Before launching, check the baseline:
+
+```bash
+git status --short
+```
+
+If there are existing user changes, keep them in mind during review. Agent Teams can work in a dirty tree, but review is clearer when you know what existed before launch.
+
+## 2. Create the team
+
+Use the team selector, then create a new team for the current project. Give it a short operational name, such as `docs-onboarding`, `landing-fixes`, or `runtime-audit`.
+
+
+
+## 3. Start with three roles
+
+Use this first-team shape:
+
+| Role | Responsibility | Why it helps |
+| --- | --- | --- |
+| Lead | Splits the goal into tasks, assigns owners, tracks blockers. | Keeps work coordinated. |
+| Builder | Implements scoped tasks. | Produces the actual change. |
+| Reviewer | Reviews completed tasks and asks for fixes. | Prevents unreviewed output from being treated as complete. |
+
+You can add specialists later. For the first run, a small team is easier to debug and review.
+
+## 4. Choose provider and model per member
+
+Each member needs a provider and model. Use the most reliable runtime for the lead, because the lead controls task breakdown and coordination.
+
+Common first setup:
+
+| Member | Suggested provider style |
+| --- | --- |
+| Lead | The most reliable model you have available. |
+| Builder | A fast model that can handle scoped implementation. |
+| Reviewer | A careful model with stronger reasoning. |
+
+If a provider is missing, fix runtime setup before launching. See [Runtime setup](/guide/runtime-setup).
+
+## 5. Decide on Worktree
+
+Enable **Worktree** when teammates may edit the same repository in parallel and you want Git isolation. Keep it off for a very small first run if you want the simplest setup.
+
+Use Worktree when:
+
+- multiple teammates can edit code at the same time
+- you want cleaner diffs per member
+- the project is already Git-tracked
+
+Avoid Worktree when:
+
+- the project is not a Git repo
+- you are only testing the UI flow
+- you want the fewest moving parts for the first launch
+
+## 6. Write member instructions
+
+Give each member a short workflow. The member prompt should describe responsibility, not the whole project.
+
+Lead example:
+
+```text
+Split the user goal into small tasks. Assign clear owners, avoid broad refactors, keep task comments updated, and request review before approval.
+```
+
+Builder example:
+
+```text
+Implement only the assigned task. Keep changes scoped, post the files you changed, and include the verification command and result before marking work complete.
+```
+
+Reviewer example:
+
+```text
+Review completed tasks for correctness, regressions, missing tests, and scope creep. Ask for fixes with specific comments before approving.
+```
+
+## 7. Launch with a narrow goal
+
+Use a launch brief with outcome, scope, boundaries, and verification:
+
+```text
+Improve the docs onboarding path. Keep changes inside landing/product-docs. Create a beginner-friendly guide sequence, add practical examples, preserve VitePress syntax, and run `pnpm --dir landing docs:build`.
+```
+
+## 8. Confirm the launch is healthy
+
+After launch:
+
+- The lead should create tasks.
+- At least one teammate should start a task.
+- The board should show movement into In Progress.
+- Task comments or logs should show what the teammate is doing.
+
+If launch hangs or no tasks appear, go to [Troubleshooting](/guide/troubleshooting#team-does-not-launch).
+
+Next: [Run and monitor work](/guide/run-and-monitor-work).
diff --git a/landing/product-docs/guide/review-and-approve.md b/landing/product-docs/guide/review-and-approve.md
new file mode 100644
index 00000000..9a32c5c5
--- /dev/null
+++ b/landing/product-docs/guide/review-and-approve.md
@@ -0,0 +1,88 @@
+---
+title: "Review and Approve - Agent Teams Docs"
+description: "A beginner-friendly review workflow for task details, execution logs, code changes, hunk decisions, approvals, and fix requests."
+---
+
+# Review and Approve
+
+Do not treat agent work as finished until you have checked the task result, logs, and changes. Review is where you keep quality and scope under control.
+
+## 1. Open the task
+
+Start from a task in Review or Done. Read the title, owner, status, and description first.
+
+
+
+Look for:
+
+- a clear task goal
+- files or areas that match the requested scope
+- a final comment from the teammate
+- a verification command and result
+
+## 2. Check execution evidence
+
+Execution Logs answer the basic trust questions:
+
+| Question | What to look for |
+| --- | --- |
+| Did the agent actually work on this task? | Tool calls, comments, and status changes inside the task timeline. |
+| Did it run verification? | Build, test, lint, or docs commands with visible results. |
+| Did it coordinate with others? | Messages or comments that explain handoffs and blockers. |
+| Did it touch unexpected files? | Changes that do not match the task description. |
+
+If logs and final comment disagree, ask for clarification before approving.
+
+## 3. Review the diff
+
+Open **Changes** and inspect each changed file.
+
+
+
+Use this order:
+
+1. Read the file list.
+2. Open each changed file.
+3. Check whether the changes match the task.
+4. Keep correct hunks.
+5. Undo or reject risky hunks.
+6. Approve only after all important files are reviewed.
+
+## 4. Request fixes clearly
+
+When something is wrong, do not just reject the task. Leave a specific fix request:
+
+```text
+Please keep the copy improvements, but revert the unrelated runtime wording in the provider table. Add the `pnpm --dir landing docs:build` result before resubmitting.
+```
+
+Good fix requests name:
+
+- what to keep
+- what to change
+- what to avoid
+- what verification is required
+
+## 5. Approve only when the result is complete
+
+Approve when:
+
+- the task scope is satisfied
+- the diff matches the task
+- verification passed or the missing verification is explicitly justified
+- no unrelated changes are mixed in
+- comments explain important decisions
+
+If the task changed docs or UI, also open the relevant page or app screen before approval.
+
+## 6. Final checklist
+
+Before closing the review:
+
+- Files changed are expected.
+- The task has a final result comment.
+- Verification result is present.
+- Risky hunks were checked individually.
+- The lead or reviewer marked the task approved.
+
+If anything is unclear, request changes instead of approving.
diff --git a/landing/product-docs/guide/run-and-monitor-work.md b/landing/product-docs/guide/run-and-monitor-work.md
new file mode 100644
index 00000000..e498b8d8
--- /dev/null
+++ b/landing/product-docs/guide/run-and-monitor-work.md
@@ -0,0 +1,100 @@
+---
+title: "Run and Monitor Work - Agent Teams Docs"
+description: "Learn how to brief the lead, read the task board, use messages and comments, open task details, and keep agent work moving."
+---
+
+# Run and Monitor Work
+
+After the team launches, your job is to keep the work visible, scoped, and reviewable. The board is the main operating surface.
+
+## 1. Brief the lead clearly
+
+The lead needs a goal that can be split into tasks. Include:
+
+- the outcome
+- the allowed files or product area
+- what not to touch
+- verification commands
+- when to ask for review
+
+Good brief:
+
+```text
+Create a beginner docs path. Keep edits inside landing/product-docs. Add screenshots where they clarify actions. Do not touch runtime code. Run `pnpm --dir landing docs:build` before marking tasks complete.
+```
+
+Weak brief:
+
+```text
+Improve docs.
+```
+
+The weak brief can work, but it gives the lead too much freedom and makes review harder.
+
+## 2. Read the board by lane
+
+
+
+| Lane | What it means | What you should do |
+| --- | --- | --- |
+| Todo | Tasks exist but are not active yet. | Check whether task titles are specific enough. |
+| In Progress | A teammate is actively working. | Watch for updates and avoid assigning duplicate work. |
+| Review | Work needs inspection. | Open the task and review changes. |
+| Done | Work is completed but may still need review flow. | Confirm review state before trusting it. |
+| Approved | Review passed. | Treat as completed output. |
+
+## 3. Use messages and comments deliberately
+
+Use task comments for task-specific context:
+
+```text
+Please keep this task scoped to the quickstart page. Do not change runtime setup wording in this pass.
+```
+
+Use direct messages for coordination:
+
+```text
+Lead, pause new task creation until the current review queue is cleared.
+```
+
+Prefer task comments when possible. They stay attached to the work and make review easier.
+
+## 4. Open task detail when a card needs attention
+
+Open the task detail when:
+
+- the title is too vague
+- the task has been in progress too long
+- the task is ready for review
+- the output mentions files you did not expect
+- you need to inspect attachments, changes, or logs
+
+
+
+## 5. Keep work unblocked
+
+If a teammate is blocked, ask for the smallest next step:
+
+```text
+Post the blocker, the file or command involved, and the next action you need from the lead or user.
+```
+
+If the task is too large, ask the lead to split it:
+
+```text
+Split this into separate tasks for copy edits, screenshot assets, and navigation updates. Keep each task independently reviewable.
+```
+
+## 6. Decide when to stop the team
+
+Stop or pause when:
+
+- the review queue is larger than you can inspect
+- the lead creates vague tasks repeatedly
+- runtime errors appear in multiple tasks
+- agents start editing unrelated files
+- verification is missing from completed work
+
+You can always relaunch after tightening the brief.
+
+Next: [Review and approve](/guide/review-and-approve).
diff --git a/landing/product-docs/index.md b/landing/product-docs/index.md
index 625c77c5..0a679fd0 100644
--- a/landing/product-docs/index.md
+++ b/landing/product-docs/index.md
@@ -8,8 +8,8 @@ hero:
tagline: Create teams, watch work move across a kanban board, review code changes, and coordinate Claude, Codex, OpenCode, and multimodel workflows without giving up local control.
actions:
- theme: brand
- text: Quickstart
- link: /guide/quickstart
+ text: Beginner workflow
+ link: /guide/beginner-workflow
- theme: alt
text: Install
link: /guide/installation
@@ -62,6 +62,10 @@ Agent Teams is a free desktop app for orchestrating AI agent teams. You are not
After creating your first team, explore these guides to go further:
- **Runtime setup** - configure Claude, Codex, OpenCode, or multimodel providers: [Configure runtimes](/guide/runtime-setup)
+- **Beginner workflow** - follow the complete first-run path from project to approval: [Start the walkthrough](/guide/beginner-workflow)
+- **Create your first team** - set up lead, builder, reviewer, roles, models, and Worktree: [Create the team](/guide/create-first-team)
+- **Run and monitor work** - read the board, comments, task detail, and logs: [Run the team](/guide/run-and-monitor-work)
+- **Review and approve** - inspect task results and code changes before approval: [Review work](/guide/review-and-approve)
- **Agent workflow** - understand how agents coordinate through the task board: [Understand workflow](/guide/agent-workflow)
- **Team brief examples** - learn prompt patterns from real-world briefs: [See examples](/guide/team-brief-examples)
- **Code review** - inspect diffs, accept or reject changes: [Review changes](/guide/code-review)
@@ -77,4 +81,4 @@ Use the reference pages when you need exact terminology, provider behavior, cont
## Product preview
-
+
diff --git a/landing/product-docs/ja/developers/index.md b/landing/product-docs/ja/developers/index.md
new file mode 100644
index 00000000..d751de5b
--- /dev/null
+++ b/landing/product-docs/ja/developers/index.md
@@ -0,0 +1,69 @@
+---
+title: 開発者ハブ – Agent Teams ドキュメント
+description: Agent Teams のアーキテクチャ、ガードレール、デバッグ、MCP による拡張方法に関する、コントリビューターと開発者向けの入口です。
+lang: ja-JP
+---
+
+# 開発者ハブ
+
+Agent Teams 自体を変更したい場合、チームの起動をデバッグしたい場合、または MCP ツールでランタイムを拡張したい場合は、このページを参照してください。以下のリンクは正規のリポジトリドキュメントを指しており、実装ルールが一箇所にまとまるようになっています。
+
+## はじめに
+
+| 必要なこと | 参照先 |
+| --- | --- |
+| リポジトリの概要、スクリプト、ソースのセットアップ | [README.md](https://github.com/777genius/agent-teams-ai/blob/main/README.md) |
+| エージェントのナビゲーションとアーキテクチャの索引 | [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) |
+| エージェントとコントリビューターのための作業規約 | [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) |
+| 厳格な実装ガードレール | [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) |
+| 中規模および大規模な機能の構成 | [機能アーキテクチャ標準](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) |
+| 起動、ブートストラップ、チームメイトのメッセージングのデバッグ | [エージェントチームのデバッグ用ランブック](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) |
+| コントリビューションのプロセス | [コントリビューションガイド](https://github.com/777genius/agent-teams-ai/blob/main/.github/CONTRIBUTING.md) |
+| リリースノート / 変更履歴 | [RELEASE.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/RELEASE.md) — [CHANGELOG.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md) |
+
+## ローカル開発の手順
+
+通常の開発では、デスクトップ版の Electron アプリを実行します。
+
+```bash
+pnpm install
+pnpm dev
+```
+
+ブラウザ/Web 版はデスクトップランタイムの代替にはなりません。デスクトップモードがサポートされたローカルの手順です。これには IPC、ターミナル、プロバイダー認証、チームのライフサイクル処理、起動診断、そして実際のチームで使われるランタイムブリッジが含まれているためです。
+
+## アーキテクチャのチェックポイント
+
+機能を変更する前に、その境界を特定してください。
+
+| 領域 | 想定される配置場所 |
+| --- | --- |
+| 中規模または大規模なプロダクト機能 | `src/features//` |
+| Electron メインプロセスのオーケストレーション | `src/main/` |
+| preload で安全な API サーフェス | `src/preload/` |
+| レンダラーの UI とアプリの状態 | `src/renderer/` |
+| 共有の型と純粋なヘルパー | `src/shared/` |
+| Agent Teams ボードの MCP サーバー | `mcp-server/` |
+| ボードのデータコントローラー | `agent-teams-controller/` |
+
+機能の構成については、`src/features/recent-projects` をリファレンスとなるスライスとして使用してください。プロセス間のコントラクトは明示的に保ち、機能の境界をまたいだ深いインポートは避けてください。
+
+## デバッグの手順
+
+起動のハング、OpenCode の `registered` / bootstrap-unconfirmed 状態、チームメイトの返信の欠落、または不審なタスクログが発生した場合は、次の手順に従ってください。
+
+1. [デバッグ用ランブック](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) から始めます。
+2. `~/.claude/teams//launch-failure-artifacts/latest.json` にある最新のアーティファクトパックを確認します。
+3. アーティファクトの `manifest.json` を開き、`classification`、ブートストラップのブレッドクラム、起動診断、メンバーのスポーン状態、伏字処理されたログの末尾を確認します。
+4. スモークテストまたは失敗した起動が所有していると特定できるチーム、実行、ペイン、プロセスのみをクリーンアップします。
+
+## MCP 開発の手順
+
+Agent Teams は、ボード操作のために `agent-teams` という名前の組み込み MCP サーバーを使用します。ユーザーおよびプロジェクトの MCP サーバーは、ランタイムに外部機能を追加できます。セットアップの例、`.mcp.json` の構造、ツール登録のガイダンスについては、[MCP 連携](/ja/guide/mcp-integration) を参照してください。
+
+## 関連ドキュメント
+
+- [コントリビューター向けアーキテクチャ](/ja/reference/contributor-architecture)
+- [ランタイムの設定](/ja/guide/runtime-setup)
+- [MCP 連携](/ja/guide/mcp-integration)
+- [トラブルシューティング](/ja/guide/troubleshooting)
diff --git a/landing/product-docs/ja/guide/agent-workflow.md b/landing/product-docs/ja/guide/agent-workflow.md
new file mode 100644
index 00000000..53630dfb
--- /dev/null
+++ b/landing/product-docs/ja/guide/agent-workflow.md
@@ -0,0 +1,121 @@
+---
+title: エージェントのワークフロー – Agent Teams ドキュメント
+description: タスクのライフサイクル、かんばんボード、メッセージ、タスクログ、並列作業、ライブプロセス、チーム間コミュニケーションについて理解します。
+lang: ja-JP
+---
+
+# エージェントのワークフロー
+
+Agent Teams は、エージェントの作業をタスクの状態、メッセージ、ログ、レビュー可能なコード変更として可視化します。
+
+## モード
+
+| モード | 説明 |
+| --- | --- |
+| ソロ | 自己管理タスクを持つ 1 人のチームメイト |
+| チーム | 並列で作業し、互いにレビューし合う複数のチームメイト |
+
+どちらのモードも、同じかんばん、タスクログ、コードレビューの画面を共有します。
+
+## タスクのライフサイクル
+
+Agent Teams は、各タスクを 2 つの独立した次元で追跡します。それは作業ステータスとレビュー状態です。
+
+| 次元 | 状態 | 説明 |
+| --- | --- | --- |
+| 作業ステータス | `pending`、`in_progress`、`completed` | タスクが待機中か、実際に作業中か、オーナーによって完了されたかを追跡します |
+| レビュー状態 | `none`、`review`、`needsFix`、`approved` | 完了後のレビューフローのどの段階にタスクがあるかを追跡します |
+
+かんばんボードはこれらを組み合わせたビューを表示しますが、2 つの次元は独立して動きます。
+
+### 作業ステータスのフロー
+
+| 段階 | 何が起こるか | オーナー |
+| --- | --- | --- |
+| Pending | タスクが作成されて準備完了だが、まだ誰も作業を開始していない | リードまたはユーザー |
+| In progress | エージェントが作業し、ボードの MCP ツールでタスクの状態を更新する | チームメイト |
+| Completed | オーナーが結果コメントを投稿し、タスクを done としてマークする | チームメイト |
+
+### レビュー状態のフロー
+
+| 段階 | 何が起こるか | オーナー |
+| --- | --- | --- |
+| None | タスクはまだレビュー中ではない(pending、in progress、または新しく completed の可能性がある) | — |
+| Review | レビューが依頼され、レビュアーが差分と結果を確認する | レビュアー |
+| Needs fix | レビュー中に変更が依頼され、オーナーが更新する必要がある | チームメイト(オーナー) |
+| Approved | レビューに合格し、タスクが確定する | レビュアー |
+
+### 計画 → In progress
+
+チームメイトがタスクを開始すると、作業ステータスは `in_progress` になります。エージェントは自身の計画を記したタスクコメントを作成し、作業を続けます。すべてのネイティブツールのアクション(read、bash、edit、write)はタスクログにストリーミングされます。
+
+### Completed → Review
+
+チームメイトが作業を終えると、結果コメントを投稿し、作業ステータスを `completed` としてマークします。その後、リードまたはレビュアーがレビューを依頼してレビューフローを開始できます。
+
+### Review → Approved
+
+レビュー画面に表示された変更が問題なければ、レビューを承認します。タスクは確定され、その差分にひも付けられます。
+
+::: warning 修正優先のレビュー
+レビュー中にチームメイトへ変更が依頼された場合、チームメイトは修正内容を記したフォローアップコメントを投稿し、その後リードが承認できるようにすべきです。
+:::
+
+## かんばんボード
+
+ボードは主要な操作画面です。次のことができます。
+
+- オープン中、ブロック中、レビュー中の作業を一覧で確認する
+- タスク詳細を開いてランタイムログを確認する
+- 生のセッションファイルを読まずに変更をレビューする
+- オーナーを割り当てる、または再割り当てする
+
+::: tip
+カードのクイックアクションボタンを使えば、詳細パネルを開かずにタスクの開始、完了、レビュー依頼ができます。
+:::
+
+## メッセージとコメント
+
+| チャネル | 使うタイミング |
+| --- | --- |
+| ダイレクトメッセージ | エージェントの方向を修正する、簡単な質問をする |
+| タスクコメント | 特定のタスクに属するメモ |
+
+コメントは後のレビューのためにコンテキストを保持し、タスクのタイムラインに表示されます。
+
+::: tip タスクコメントを優先する
+特定のタスクに関する指摘であれば、ダイレクトメッセージを送るのではなく、そのタスクへのコメントとして追加してください。履歴を作業にひも付けたまま保てます。
+:::
+
+## タスクログ
+
+タスク固有のログは、1 つの割り当てに関するランタイム出力、アクション、メッセージを切り分けます。次のことを把握するために使います。
+
+- このエージェントは何を実行したか?
+- なぜこのファイルを変更したのか?
+- 別のチームメイトに助けを求めたか?
+- どのタスクがこの差分を生み出したか?
+
+### 検証チェックリスト
+
+タスクが行き詰まっているように見えたり、その差分が切り離されているように見えたりするときは、次の順序でライフサイクルを確認します。
+
+1. タスクに想定どおりのオーナーがいて、`in_progress` に移っている。
+2. オーナーが計画または最初の進捗更新を記したタスクコメントを投稿している。
+3. タスクログにタスクのウィンドウ内のランタイムアクティビティが表示されている。
+4. ファイルの変更が同じタスク、オーナー、セッションにひも付いている。
+5. 最終のタスクコメントに検証コマンドとその結果が含まれている。
+
+より深いデバッグについては、[トラブルシューティング](/ja/guide/troubleshooting#task-log-triage)にある永続化された証跡のコマンドを使ってください。UI は作業用の画面ですが、永続化されたタスクファイル、受信トレイ、ランタイムの証跡が、起動や帰属に関する深刻なバグを解明するための情報源です。
+
+## 並列作業のパターン
+
+チームメイトは独立したタスクを同時に進められます。依存関係のリンク(`blocked-by`)を作成して、あるタスクが別のタスクの完了まで待つようにすることもできます。ボードでブロック中のレーンを監視し、一方のチームメイトがアイドル状態でもう一方が過負荷になっている場合はオーナーを再割り当てしてください。
+
+## ライブプロセス
+
+ライブプロセスのセクションは、エージェントがローカルサーバーやツールを起動したときに、URL と実行中のプロセスを表示します。アプリから直接 URL を開いて結果を確認できます。プロセスは、明示的に停止されるかランタイムが終了するまで登録されたままになります。
+
+## チーム間コミュニケーション
+
+チームがリンクされていると、エージェントは他のチームへメッセージを送れます。これはハンドオフ、共有ライブラリ、またはチーム間のステータス確認に使います。
diff --git a/landing/product-docs/ja/guide/code-review.md b/landing/product-docs/ja/guide/code-review.md
new file mode 100644
index 00000000..14586ad4
--- /dev/null
+++ b/landing/product-docs/ja/guide/code-review.md
@@ -0,0 +1,119 @@
+---
+title: コードレビュー – Agent Teams ドキュメント
+description: タスク単位の差分を確認し、ハンクを承認または却下し、インラインコメントを残し、none から approved までのレビュー状態を管理します。
+lang: ja-JP
+---
+
+# コードレビュー
+
+Agent Teams のコードレビューはタスク中心です。大きな構造化されていない差分を探し回るのではなく、特定のタスクで何が変更されたかを確認します。
+
+## レビュー画面
+
+ファイルに変更があった完了済みタスクごとに、レビュー UI では次のことができます。
+
+- 変更前後のコンテキスト付きで変更されたファイルを確認する
+- 個々のハンクを承認または却下する
+- インラインコメントを残す
+- 差分をタスクの説明やエージェントのログと結びつける
+
+## ハンク単位の判断
+
+正しい小さな変更は承認し、孤立したミスはタスク全体を捨てることなく却下できます。これは、エージェントがおおむねタスクを解決したものの、1 つのファイルでやりすぎてしまった場合に便利です。
+
+::: tip 段階的に承認する
+差分がおおむね正しい場合は、まず良いハンクを承認し、修正が必要な部分についてのみ変更をリクエストしてください。これによってボードが滞りなく進みます。
+:::
+
+ハンク単位の判断は次の場面で使います。
+
+| 状況 | アクション |
+| --- | --- |
+| 正しく範囲が絞られた変更 | ハンクを承認する |
+| 考え方は正しいが、ファイルが違うか広範なリファクタリング | ハンクを却下し、より範囲を絞った修正をリクエストする |
+| 不明瞭な挙動の変更 | コメントして検証を求める |
+| 生成されたフォーマットのノイズ | フォーマットがタスクの一部でない限り却下する |
+
+## レビューの開始
+
+1. 完了済みのタスクを開く
+2. **Changes** タブを見る
+3. 差分が妥当に見えたら、**Request Review** をクリックしてタスクを review 列に移動する
+
+レビュー中、タスクはまだ done とはみなされないため、他のチームメイトやリードはまだコメントできます。
+
+## レビューループ
+
+健全なレビューループは次のようになります。
+
+1. オーナーが変更範囲と検証内容を記載した結果コメントを投稿する
+2. レビュアーがタスクの差分を開き、タスクの説明と照らし合わせてハンクを確認する
+3. レビュアーが良いハンクを承認し、悪いハンクを却下するか、変更をリクエストする
+4. オーナーがリクエストされた範囲のみを修正し、フォローアップのコメントを投稿する
+5. タスクの結果と差分が一致したら、レビュアーが承認する
+
+変更リクエストのコメント例:
+
+```text
+Please keep the copy improvements, but revert the unrelated runtime wording in the provider table. Add the `pnpm --dir landing docs:build` result before resubmitting.
+```
+
+## レビュー状態
+
+| 状態 | 意味 |
+| --- | --- |
+| `none` | タスクが新規、in progress、または完了済みだがまだレビュー中ではない |
+| `review` | タスクがアクティブにレビュー中である |
+| `needsFix` | 変更がリクエストされた。オーナーは再承認の前に更新する必要がある |
+| `approved` | レビューが承認され、タスクが確定した |
+
+## エージェントによるレビューのワークフロー
+
+チームは、あなたが最終判断を下す前にお互いの作業をレビューできます。これによって明らかなリグレッションを検出し、ボードを健全に保てますが、リスクの高い領域は依然として自分自身でレビューすべきです。
+
+エージェントによるレビューは、レビュアーが明確な基準を持っているときに最も役立ちます。たとえば、ドキュメントの明瞭さのみ、IPC の安全性のみ、あるいはテストカバレッジのみを確認するようレビュアーに指示します。漠然とした「すべてをレビューして」というリクエストは、弱いフィードバックになりがちです。
+
+### MCP 駆動のレビュー状態
+
+レビュー状態の変更(レビューのリクエスト、変更のリクエスト、承認)はツール駆動です。タスクに「変更をリクエスト」のコメントを残しても、かんばんの列は `needsFix` に移動**しません**。リードまたはエージェントが適切な MCP ツールを呼び出す必要があります。
+
+- `review_request_changes` — タスクを `needsFix` に移動し、オーナーに通知する
+- `review_approve` — タスクを `approved` に移動し、レビューを確定する
+
+コメントだけでは状態遷移には不十分です。レビュー用 MCP ツールの完全な一覧とそのパラメーターについては、[MCP 連携](/ja/guide/mcp-integration)を参照してください。
+
+## レビューの参加者
+
+チームリードがデフォルトのレビュアーです。仲間同士でお互いの作業をレビューさせたい場合は、かんばん設定で追加のレビュアーを設定できます。
+
+## 手動で確認すべきこと
+
+レビューの際は次の領域を優先してください。
+
+- **プロバイダー認証とランタイム検出** — エージェントは他のパスを壊すような形でランタイムのセットアップを変更していないか?
+- **IPC、preload、ファイルシステムの境界** — Electron の責務を分離したままにする
+- **Git と worktree の挙動** - ブランチの命名、コミット、プッシュを検証する。分離のパターンについては [Git と worktree の戦略](/ja/guide/git-worktree-strategy)を参照してください。
+- **パースとタスクライフサイクルのロジック** — タスク参照、チャンク化、フィルタリングへの変更はメッセージ配信を壊す可能性がある
+- **永続化とコードレビューのフロー** — タスクストレージやレビュー状態への変更は IPC レイヤー全体で一貫している必要がある
+
+正規の機能レイアウトとハードガードレールへのリンクについては、[コントリビューター向けアーキテクチャ](/ja/reference/contributor-architecture)を使用してください。
+
+## 検証
+
+範囲を絞った検証コマンドを優先してください。広範なフォーマットや lint-fix コマンドは、タスクが明示的に広範なフォーマットの変更を意図している場合を除き、使用すべきではありません。
+
+良い検証コメントにはコマンドと結果が含まれます。
+
+```text
+Verified with `pnpm --dir landing docs:build`. Build passed.
+```
+
+検証を省略する場合は、その理由をタスクのコメントに記載すべきです。
+
+```text
+Docs-only wording change. Build not run because the existing dev server was busy; checked Markdown links manually.
+```
+
+::: warning プロジェクト全体に対する自動フォーマットは行わない
+タスクが特にフォーマットに関するものでない限り、無関係なファイルに対して `pnpm lint:fix` を実行するのは避けてください。レビュー画面にノイズを生み出します。
+:::
diff --git a/landing/product-docs/ja/guide/create-team.md b/landing/product-docs/ja/guide/create-team.md
new file mode 100644
index 00000000..05d4e7ce
--- /dev/null
+++ b/landing/product-docs/ja/guide/create-team.md
@@ -0,0 +1,106 @@
+---
+title: チームの作成 – Agent Teams ドキュメント
+description: ロールを定義し、プロバイダーとモデルを割り当て、チームブリーフを作成し、worktree の分離と自律性のレベルを設定します。
+lang: ja-JP
+---
+
+# チームの作成
+
+チームとは、ロール、リード、対象プロジェクト、そして調整用プロンプトを備えた、名前付きのエージェントのグループです。
+
+## 推奨する最初のチーム
+
+小規模なチームから始めましょう。
+
+| ロール | 目的 |
+| -------- | --------------------------------------------------- |
+| Lead | 作業を分割し、タスクを作成し、チームメイトを調整します |
+| Builder | 範囲を絞ったタスクを実装します |
+| Reviewer | 出力をレビューし、リグレッションを検出し、修正を求めます |
+
+この構成は、最初の起動を騒がしくすることなく、プロダクトの価値を確認できるだけの調整能力をもたらします。
+
+::: tip
+メンバーは後から追加できます。小さく始めてワークフローを検証し、それからスケールアップしましょう。
+:::
+
+## プロバイダーとモデルの割り当て
+
+各チームメンバーはプロバイダーのバックエンド上で動作します。チームエディターで、すべてのメンバーについてプロバイダー(Claude、Codex、または OpenCode)とモデルを選択します。アプリには、すでに認証済みのプロバイダーのみが表示されます。
+
+1 つのチーム内でプロバイダーを混在させることもサポートされています。たとえば、Claude のリードに OpenCode のビルダーを組み合わせることができます。
+
+::: info
+Gemini はサポートされているプロバイダーのパスとして利用できます。認証オプションと現在のプロバイダーの状況については、[プロバイダーとランタイム](/ja/reference/providers-runtimes) を参照してください。
+:::
+
+## 優れたチームブリーフを書く
+
+チームブリーフには次の内容を含めるべきです。
+
+- 望む成果
+- 重要なファイルまたは機能領域
+- 「関係のないモジュールをリファクタリングしない」といったリスクの境界
+- レビューに関する期待
+- 把握している場合は検証用のコマンド
+
+例:
+
+```text
+Build a focused improvement to the download flow. Keep changes inside the landing app unless a shared helper is clearly needed. Create tasks before implementation, review each task diff, and run landing lint/build checks.
+```
+
+## worktree の分離
+
+OpenCode のメンバーは、**worktree の分離**を使用して、メインの作業ディレクトリではなく別の Git worktree で作業できます。これにより、複数のエージェントが同じプロジェクトを編集する際のファイル競合を防ぎます。
+
+::: warning
+worktree の分離には Git で追跡されているプロジェクトが必要であり、現在は OpenCode のメンバーに限定されています。
+:::
+
+有効にするには、OpenCode のチームメンバーを追加または編集する際に **Worktree isolation** オプションを切り替えます。
+
+## 自律性の選択
+
+Agent Teams はさまざまなレベルの制御をサポートしています。ルーチンな変更にはより高い自律性を、プロバイダー認証、IPC、永続化、Git ワークフロー、リリースツールといったリスクの高い領域にはより厳格なレビューを使用してください。
+
+### エフォートレベル
+
+各チームメンバーには、プロバイダーが応答する前にどれだけの推論を投じるかを制御する**エフォート**設定があります。エフォートを高くすると、時間とトークンを消費する代わりに、より徹底した出力が得られます。
+
+| レベル | 使いどころ |
+| ------ | ---------------------------------------------------------- |
+| Low | 簡単な調査、小さな書式変更、ルーチンな編集 |
+| Medium | ほとんどの実装タスクのデフォルト |
+| High | 複雑なリファクタリング、横断的な変更、リスクの高いコードパス |
+
+アプリは、対応しているプロバイダー向けに追加のレベル(minimal、xhigh、max)も提供します。モデルが設定可能なエフォートをサポートしていない場合、セレクターは無効化され、プロバイダーのデフォルトが使用されます。
+
+### ファストモード
+
+メンバーごとに **Fast mode** を切り替えると、深さよりも速度を優先します。これは、利用可能な場合にプロバイダーのネイティブな fast/speed モードに対応します。ルーチンなタスクには **On**、慎重な作業には **Off**、チームレベルのデフォルトに従う場合は **Inherit** に設定します。
+
+### コンテキストの制限
+
+**Limit context** を有効にすると、メンバーのコンテキストウィンドウを縮小できます。これは拡張コンテキスト(たとえば 1M トークン)をサポートする Claude モデルで役立ちます。コンテキストを制限することで、不要なトークン使用を回避でき、大きなコンテキストを必要としないタスクのレイテンシを改善できます。
+
+## コンテキストの追加
+
+タスクを実質的に変える場合は、ファイル、スクリーンショット、または具体的なメモを添付します。エージェントは、タスクの説明、コメント、添付ファイルを永続的なコンテキストとして利用できます。
+
+## タスクの品質に注意する
+
+優れたチームは、次のようなタスクを作成します。
+
+- レビューできる程度に具体的である
+- 完了できる程度に小さい
+- 目に見える出力にひも付いている
+- 検証パスに裏付けられている
+
+リードが曖昧なタスクを作成する場合は、より小さくテスト可能なタスクを求めるダイレクトメッセージを送りましょう。
+
+## 次のステップ
+
+- [ランタイムの設定](/ja/guide/runtime-setup) — プロバイダー認証とモデルを設定します
+- [コードレビュー](/ja/guide/code-review) — エージェントの変更を承認、却下、またはコメントします
+- [トラブルシューティング](/ja/guide/troubleshooting) — よくある問題と修正
diff --git a/landing/product-docs/ja/guide/git-worktree-strategy.md b/landing/product-docs/ja/guide/git-worktree-strategy.md
new file mode 100644
index 00000000..1c18021b
--- /dev/null
+++ b/landing/product-docs/ja/guide/git-worktree-strategy.md
@@ -0,0 +1,102 @@
+---
+title: Git と worktree の戦略 – Agent Teams ドキュメント
+description: 並列でのエージェント作業において、メインの worktree、機能ブランチ、OpenCode の worktree 分離のどれを使うべきかを判断します。
+lang: ja-JP
+---
+
+# Git と worktree の戦略
+
+Git は Agent Teams に最も強力なレビュー経路をもたらします。差分が狭く、ブランチを把握でき、変更がタスク単位にスコープされ、並列作業をより安全に行えます。
+
+## 戦略を選ぶ
+
+| 戦略 | 使うべき場面 | トレードオフ |
+| --- | --- | --- |
+| メイン worktree | 単独での作業、ドキュメントのみの編集、または一度に 1 人のチームメイトのみ | シンプルだが、並列編集が衝突する可能性がある |
+| 機能ブランチ | 1 つのチームが 1 つのまとまった変更に取り組んでいる | レビュー対象がクリーンになるが、チームメイトは依然としてファイルを共有する |
+| worktree 分離 | 複数の OpenCode のチームメイトが同じリポジトリを並列で編集する可能性がある | 分離は向上するが、マージ/レビューにより多くの規律が必要になる |
+
+シンプルに始めましょう。worktree 分離は、すべてのタスクに別々のチェックアウトが必要だからではなく、並列編集が起こりそうなときに追加します。
+
+## worktree 分離を有効にするタイミング
+
+OpenCode のチームメイトに対して、次の場合に有効にします。
+
+- 2 人以上のチームメイトが同じリポジトリを同時に編集する可能性がある
+- タスクがフォーマッター、コードジェネレーター、または広範なテストを実行する可能性がある
+- 各チームメイトのブランチと差分を分離した状態に保ちたい
+- リードのワークスペースがダーティであり、直接の編集を受け取るべきでない
+
+次の場合はオフのままにします。
+
+- タスクが読み取り専用である
+- 1 人のチームメイトがすべての編集を担当する
+- リポジトリが Git で追跡されていない
+- この分離モードをサポートしないランタイム経路が必要である
+
+::: warning
+worktree 分離は現在 OpenCode のメンバーに適用され、Git で追跡されたプロジェクトが必要です。
+:::
+
+## ブランチの衛生
+
+並列作業を始める前に行います。
+
+```bash
+git status --short
+git branch --show-current
+```
+
+可能な場合はクリーンなブランチを使いましょう。メイン worktree にすでにユーザーの変更がある場合は、無関係なファイルを元に戻さないようエージェントに伝え、タスクの範囲を狭く保ちます。
+
+推奨されるブランチのスタイル:
+
+```text
+agent//
+```
+
+例:
+
+```text
+agent/docs/mcp-guide
+agent/review/task-log-filtering
+agent/ui/code-review-polish
+```
+
+## レビューの流れ
+
+分離された worktree については、マージしたり変更をメインのワークスペースに適用し直したりする前に、チームメイトの差分をレビューします。
+
+1. タスクの結果コメントが、変更されたスコープと検証内容を明示していることを確認します。
+2. レビュー UI でタスクの差分を確認します。
+3. 差分が無関係なファイルに触れている場合は、そのタスクに対して変更を依頼します。
+4. テストまたは手動チェックがタスクのリスクに見合った場合にのみ承認します。
+5. 慎重にマージまたは変更を適用します。
+
+タスクが完了したというだけで worktree の出力を自動マージしないでください。完了とは、エージェントがその作業をレビューする準備が整ったと考えていることを意味します。
+
+## コンフリクトのポリシー
+
+並列チームには次のポリシーを使います。
+
+| 状況 | 対応 |
+| --- | --- |
+| 2 人のチームメイトが同じファイルを編集する | 一方のタスクを一時停止するか、1 人を統合の責任者にする |
+| 生成ファイルが広範に変更された | ジェネレーターとコマンドを説明するコメントを必須にする |
+| メイン worktree に無関係な変更がある | それらを保持し、タスクが所有する変更のみをレビューする |
+| worktree のブランチが分岐している | レビューの後に手動でリベースまたはマージし、あいまいなエージェントタスクの中では行わない |
+
+## タスクプロンプトの例
+
+```text
+Implement the settings validation fix in your assigned worktree. Keep edits inside src/features/settings and focused tests. Do not touch provider auth or task storage. Post the test command and result before completing the task.
+```
+
+このプロンプトがうまく機能するのは、許可された領域、機微な境界、完了の証拠を明示しているからです。
+
+## 関連ガイド
+
+- [チームの作成](/ja/guide/create-team)
+- [コードレビュー](/ja/guide/code-review)
+- [チームブリーフの例](/ja/guide/team-brief-examples)
+- [ランタイムの設定](/ja/guide/runtime-setup)
diff --git a/landing/product-docs/ja/guide/installation.md b/landing/product-docs/ja/guide/installation.md
new file mode 100644
index 00000000..bcd46c37
--- /dev/null
+++ b/landing/product-docs/ja/guide/installation.md
@@ -0,0 +1,129 @@
+---
+title: インストール – Agent Teams ドキュメント
+description: macOS、Windows、Linux 向けの Agent Teams をダウンロードしてインストールします。パッケージ済みビルド、ソースからのセットアップ、自動更新、必要要件について説明します。
+lang: ja-JP
+---
+
+# インストール
+
+Agent Teams は、macOS、Windows、Linux 向けのデスクトップアプリとして配布されています。
+
+::: tip 最短の手順
+1. 以下からお使いのプラットフォーム向けのビルドをダウンロードします
+2. アプリを起動します。認証不要の無料モデルから始めるか、UI からプロバイダー認証を接続します
+3. [クイックスタート](/ja/guide/quickstart) を開始して、最初のチームを作成します
+
+デスクトップアプリの起動: Electron アプリは `pnpm dev` で実行します。通常の利用ではブラウザ/Web の開発モードを起動しないでください。
+:::
+
+## ビルドのダウンロード
+
+パッケージ済みアプリが必要な場合は、ダウンロードページ または最新の [GitHub リリース](https://github.com/777genius/agent-teams-ai/releases) をご利用ください。
+
+- macOS Apple Silicon: `.dmg`
+- macOS Intel: `.dmg`
+- Windows: `.exe`
+- Linux: `.AppImage`、`.deb`、`.rpm`、または `.pacman`
+
+::: warning Windows SmartScreen
+署名されていない、または公開されたばかりのオープンソースアプリは、SmartScreen をトリガーすることがあります。リリース元を信頼できる場合は、**More info** を選択し、続いて **Run anyway** を選択してください。
+:::
+
+## 必要要件
+
+パッケージ済みアプリは、セットアップ不要のオンボーディングを目的として設計されています。認証不要の無料モデルから始められます。登録、API キー、クレジットカードは不要です。さらに多くのモデルを利用したい場合は、アプリが UI からランタイム検出とプロバイダー認証をガイドします。
+
+有料またはアカウント連携のモデルを利用するには、少なくとも 1 つのプロバイダーを接続してください。
+
+| プロバイダー | アクセス方法 |
+| ------------------ | ------------------------------------------------- |
+| Claude (Anthropic) | Claude Code CLI ログインまたは API キー |
+| Codex (OpenAI) | Codex CLI ログインまたは API キー |
+| Gemini (Google) | Google ADC、Gemini CLI、または API キー |
+| OpenCode | 認証不要で同梱されている無料モデル、または対応するバックエンド(例: OpenRouter)向けの API キー |
+
+::: info
+Gemini は対応プロバイダーの一つとして利用できます。すべてのプロバイダーにわたる認証オプションと現在のステータスについては、[プロバイダーとランタイム](/ja/reference/providers-runtimes) を参照してください。
+:::
+
+ソースからの開発には、さらに以下が必要です。
+
+| ツール | バージョン |
+| ------- | ------- |
+| Node.js | 24.16.0 LTS |
+| pnpm | 10+ |
+
+macOS では、公式の Node.js 24 プリビルドバイナリには macOS 13.5+ が必要です。
+
+## ソースから実行する
+
+
+
+```bash
+git clone https://github.com/777genius/agent-teams-ai.git
+cd agent-teams-ai
+pnpm install
+pnpm dev
+```
+
+`pnpm dev` は、ホットリロード付きのデスクトップ Electron アプリを起動します。これがデフォルトの開発ターゲットです。通常の開発ではブラウザ Web 開発サーバーを起動しないでください。ブラウザ経路には、完全なデスクトップ IPC、ターミナル、プロバイダー認証、チームライフサイクルの挙動がありません。
+
+`main` ブランチには、最新の安定した開発成果が含まれています。特定の未リリースの変更が必要な場合にのみ、フィーチャーブランチに切り替えてください。
+
+## セットアップの確認
+
+インストール後、ビルドが健全であることを確認します。
+
+```bash
+# デスクトップアプリがコンパイルされ、起動することを確認します
+pnpm typecheck
+
+# VitePress ドキュメントサイトがビルドされることを確認します
+pnpm --dir landing docs:build
+```
+
+`pnpm typecheck` が型エラーを報告する場合は、依存関係やピン留めされた TypeScript の新しいバージョンを確認してください。`pnpm --dir landing docs:build` が失敗する場合は、`landing/product-docs/` を調べて、markdown や設定の構文エラーを確認してください。
+
+これらのドキュメントを編集している場合は、ビルドを実行して変更を確認してください。
+
+```bash
+pnpm --dir landing docs:build
+```
+
+## 自動更新
+
+パッケージ済みアプリは、起動時および実行中に定期的に、更新を自動でチェックします。更新が利用可能になると、アプリがダウンロードとインストールを促します。アプリメニューから手動でチェックすることもできます。
+
+::: tip
+ソースから実行している場合、自動更新は利用できません。依存関係が変更されたときは、最新の変更をプルして `pnpm install` を再実行してください。
+:::
+
+## ソースからの更新
+
+ソースから実行している場合は、`main` ブランチをプルし、依存関係が変更されたときはインストールを再実行してください。
+
+```bash
+git pull
+pnpm install
+```
+
+更新後、ビルドとドキュメントを確認してください。
+
+```bash
+pnpm typecheck
+pnpm --dir landing docs:build
+```
+
+通常の開発では、ブラウザ開発サーバーではなく、常に `pnpm dev`(Electron)を使用してください。
+
+## 次のステップ
+
+- [クイックスタート](/ja/guide/quickstart) — インストールから最初に稼働するチームまで
+- [ランタイムの設定](/ja/guide/runtime-setup) — ランタイムごとのプロバイダー認証とモデル選択
+- [チームの作成](/ja/guide/create-team) — 推奨されるチーム構成とブリーフの書き方
+
+### コントリビューター向け
+
+- [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) — リポジトリのナビゲーションとアーキテクチャのポインタ
+- [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) — 作業上の慣例とプロジェクトのルール
+- [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) — 厳格な実装ガードレール
diff --git a/landing/product-docs/ja/guide/mcp-integration.md b/landing/product-docs/ja/guide/mcp-integration.md
new file mode 100644
index 00000000..3979ed76
--- /dev/null
+++ b/landing/product-docs/ja/guide/mcp-integration.md
@@ -0,0 +1,225 @@
+---
+title: MCP 連携 – Agent Teams ドキュメント
+description: ボード操作、チームメイトの連携、外部ツールサーバー、カスタムツール開発のために Agent Teams で MCP を設定します。
+lang: ja-JP
+---
+
+# MCP 連携
+
+Agent Teams は MCP を 2 つの実践的なレイヤーで利用します。
+
+| レイヤー | 役割 | 利用者 |
+| --- | --- | --- |
+| 組み込みボードサーバー | Agent Teams のタスク、メッセージ、レビュー、プロセス、ランタイム、クロスチームのツールを公開します | アプリが起動したリードとチームメイト |
+| 外部 MCP サーバー | ブラウザ自動化、デザインコンテキスト、ドキュメント検索、社内システムなどの任意のツールを追加します | ユーザーと設定済みのランタイム |
+
+これらのレイヤーは分けて考えてください。組み込みの `agent-teams` MCP サーバーは、エージェントが Agent Teams 内で連携するための仕組みです。外部 MCP サーバーは任意のランタイムツールです。
+
+## Agent Teams が MCP を注入する仕組み
+
+デスクトップアプリが Claude ベースのチームメンバーを起動すると、組み込みの `agent-teams` サーバーを含む一時的な `--mcp-config` JSON ファイルが書き出されます。
+
+```json
+{
+ "mcpServers": {
+ "agent-teams": {
+ "command": "node",
+ "args": ["/path/to/agent-teams-mcp/index.js"],
+ "env": {
+ "AGENT_TEAMS_MCP_CLAUDE_DIR": "/Users/you/.claude"
+ }
+ }
+ }
+}
+```
+
+開発環境では、このコマンドは `tsx` を介して `mcp-server/src/index.ts` を指す場合があります。パッケージ化されたビルドでは、アプリがバンドルされた MCP サーバーを安定したアプリデータパスにコピーし、Node で実行します。生成されるファイルはアプリが所有し、ベストエフォートでクリーンアップされます。
+
+ユーザーおよびプロジェクトの MCP サーバーは引き続き分離されます。アプリはインストール済みのサーバーを次の場所から読み込みます。
+
+| スコープ | 場所 |
+| --- | --- |
+| ユーザー | `~/.claude.json` の `mcpServers` 配下 |
+| Claude 設定内のローカルプロジェクトエントリ | `~/.claude.json` の `projects[projectPath].mcpServers` 配下 |
+| プロジェクト | `/.mcp.json` の `mcpServers` 配下 |
+
+1 つのリポジトリに属するツールにはプロジェクトスコープを優先してください。無関係な複数のプロジェクトで再利用するツールにはユーザースコープを優先してください。
+
+## プロジェクトの `.mcp.json` の例
+
+チームが同じプロジェクトスコープのサーバーを参照すべき場合は、このファイルをプロジェクトのルートに配置します。
+
+```json
+{
+ "mcpServers": {
+ "docs-search": {
+ "command": "npx",
+ "args": ["-y", "@acme/docs-search-mcp"],
+ "env": {
+ "DOCS_INDEX_PATH": "./docs-index"
+ }
+ },
+ "local-browser": {
+ "command": "node",
+ "args": ["./tools/mcp/browser-server.js"]
+ }
+ }
+}
+```
+
+コミットされる `.mcp.json` ファイルにシークレットを含めないでください。値をローカルに保持する必要がある場合は、認証情報をシェル、ユーザースコープの設定、またはアプリのカスタム MCP インストールフローに保存してください。
+
+## ボード MCP のワークフロー
+
+作業がタスクに属する場合、エージェントはボード MCP ツールを使用すべきです。
+
+1. 最新のタスクコンテキストを読み取ります。
+2. 実際に作業を始めるときにのみタスクを開始します。
+3. ブロッカー、計画、最終結果についてタスクコメントを追加します。
+4. 結果コメントを投稿した後にタスクを完了としてマークします。
+5. リードやチームメイトが結果を知る必要があるときは、短いメッセージを送ります。
+
+エージェントのフローの例:
+
+```text
+task_get -> task_start -> edit/test -> task_add_comment -> task_complete -> message_send
+```
+
+連携にはダイレクトメッセージを使用してください。永続的なタスク履歴にはタスクコメントを使用してください。
+
+::: tip
+そのメモがレビュー、検証、範囲の変更、ブロッカーに関わる場合は、タスクに記載してください。
+:::
+
+## 組み込みの Agent Teams ツール
+
+MCP サーバーは `agent-teams-controller/src/mcpToolCatalog.js` からツールを登録します。登録ループは `mcp-server/src/tools/index.ts` にあり、各グループは `mcp-server/src/tools/` 配下に独自のファイルを持ちます。
+
+一般的な運用ツール:
+
+| ツール | 用途 |
+| --- | --- |
+| `task_get` | タスクの最新のコンテキスト、コメント、添付ファイル、ステータス、関連を読み取ります |
+| `task_start` | 作業が実際に始まったときにタスクを in progress としてマークします |
+| `task_add_comment` | ブロッカーのメモ、検証メモ、計画、最終結果の要約を追加します |
+| `task_complete` | 最終結果コメントを投稿した後にタスクを完了します |
+| `message_send` | リード、チームメイト、ユーザーに表示されるインボックスメッセージを送ります |
+| `review_request`、`review_start`、`review_approve`、`review_request_changes` | タスクスコープのレビューワークフローを進めます |
+| `process_register`、`process_list`、`process_stop`、`process_unregister` | チームメイトが所有する開発サーバー、ウォッチャー、その他のバックグラウンドサービスを追跡します |
+
+ツール名は、ランタイムには `mcp__agent-teams__task_get` のように MCP 名前空間のプレフィックス付きで表示される場合があります。MCP サーバー内の正規のツール名は引き続き `task_get` です。
+
+## 新しい組み込みツールの登録
+
+Agent Teams リポジトリでの作業では、既存の FastMCP 構造を通じて組み込みのボードツールを追加します。
+
+1. ツールの実装を `mcp-server/src/tools/` 内の該当ファイルに追加するか、ドメインが本当に新しい場合は新しいグループファイルを作成します。
+2. ツール名を `agent-teams-controller/src/mcpToolCatalog.js` 内の適切なグループに追加します。
+3. 新しいドメイングループが必要な場合にのみ、新しいグループを `mcp-server/src/tools/index.ts` を通じて配線します。
+4. `zod` で入力を検証し、ボードファイルを直接読み取る代わりにコントローラー API を呼び出します。
+5. `mcp-server/test/tools.test.ts` に焦点を絞ったテストを追加するか、トランスポートが重要な場合は e2e ケースを追加します。
+
+最小限の形:
+
+```ts
+server.addTool({
+ name: 'task_example',
+ description: 'Explain what this tool does for agents.',
+ parameters: z.object({
+ teamName: z.string().min(1),
+ claudeDir: z.string().min(1).optional(),
+ taskId: z.string().min(1)
+ }),
+ execute: async ({ teamName, claudeDir, taskId }) => {
+ assertConfiguredTeam(teamName, claudeDir);
+ const controller = getController(teamName, claudeDir);
+ return jsonTextContent(controller.tasks.getTask(taskId));
+ }
+});
+```
+
+コントローラーの検証を回避するツール、無関係なチームファイルを変更するツール、狭いタスク上の必要性なしに広範なファイルシステム/プロセスアクセスを公開するツールは作成しないでください。
+
+## 外部 MCP サーバー
+
+チームメイトが、コンテキストを貼り付けた単発のプロンプトだけでなく、永続的なツール接続を必要とする場合は、外部 MCP サーバーを使用してください。
+
+適している用途:
+
+- ブラウザまたはウェブサイトのテストツール
+- デザインまたはプロダクトデータのツール
+- 社内ドキュメントおよび検索システム
+- 課題トラッカーまたはサポートシステム
+- 読み取り専用の認証情報を使ったデータベース検査ツール
+
+適さない用途:
+
+- プロンプトに貼り付けられたシークレット
+- 直接添付できる単発のファイル
+- レビューなしに本番システムを変更するツール
+- より狭いプロジェクトスコープで十分な場合の広範なローカルファイルシステムアクセス
+
+## スコープ
+
+Agent Teams は、共有スコープとプロジェクト指向の MCP スコープを認識します。
+
+| スコープ | 使用する場面 |
+| --- | --- |
+| User または Global | 同じサーバーを複数のプロジェクト間で利用できるようにすべき場合 |
+| Project または Local | サーバーが 1 つのリポジトリ、ワークスペース、またはチームコンテキストに属する場合 |
+
+ワークフローが引き続き利用可能でありながら、最も狭いスコープを優先してください。プロジェクトスコープのサーバーは、ツールが変更対象のプロジェクトに属するため、レビュー時に把握しやすくなります。
+
+## セットアップのチェックリスト
+
+MCP サーバーに依存するタスクを割り当てる前に:
+
+1. サーバーをインストールまたは設定します。
+2. 意図したスコープで、アプリのインストール済み MCP リストに表示されることを確認します。
+3. 利用可能な場合は、MCP レジストリまたは拡張機能 UI から診断を実行します。
+4. 低リスクの読み取り専用タスクから始めます。
+5. 想定される MCP ツールの使用を、タスクの説明またはチームブリーフに記載します。
+
+サーバーが診断に失敗した場合は、まずそれを修正してください。タスクプロンプトを改善しても、欠落したコマンド、誤った設定パス、拒否された認証情報は修復できません。
+
+## アプリからカスタムサーバーをインストールする
+
+デスクトップアプリは、検索、ブラウズ、インストール、カスタムインストール、アンインストール、インストール状態の読み取り、診断のために、Electron IPC を通じて MCP レジストリ API を公開します。カスタムインストールは、ランタイムのインストールパスを呼び出す前に、サーバー名、スコープ、プロジェクトパス、環境変数名、HTTP ヘッダーを検証します。
+
+レジストリにまだ存在しない MCP パッケージがある場合は、カスタムインストールを使用してください。
+
+| フィールド | 例 |
+| --- | --- |
+| サーバー名 | `docs-search` |
+| スコープ | このリポジトリには `project`、すべてのプロジェクトには `user` |
+| タイプ | ローカルコマンドには `stdio`、リモートサーバーには `http` または `sse` |
+| パッケージ | `@acme/docs-search-mcp` |
+| 環境変数 | `DOCS_INDEX_PATH=./docs-index` |
+
+インストール後は診断を実行し、より大きな作業を割り当てる前に、小さな読み取り専用タスクを作成してツールの表面を検証してください。
+
+## タスクの例
+
+```text
+Audit the docs home page with the browser MCP. Check desktop and mobile widths, capture any layout issue as a task comment, and only edit landing/product-docs files. Run `pnpm --dir landing docs:build` before completion.
+```
+
+これが機能するのは、ツール、対象範囲、書き込みの境界、検証ステップを明示しているからです。
+
+## 安全のためのルール
+
+- デフォルトですべてのチームメイトにすべての MCP サーバーを与えないでください。
+- レビューで必要とされない限り、書き込み可能なツールを広範なチームから除外してください。
+- 検査タスクには読み取り専用の認証情報を優先してください。
+- 本番に影響するツールの使用は、明示的なタスクコメントとレビューの背後に置いてください。
+- MCP の診断失敗は、エージェントの失敗ではなくセットアップの失敗として扱ってください。
+- `.mcp.json` やプロンプトにシークレットをコミットしないでください。
+- アプリを通じてプロジェクトスコープのサーバーをインストールする際は、絶対パスの `projectPath` の値を使用してください。
+- アプリが生成する `agent-teams-mcp-*.json` ファイルは編集しないでください。これらは一時的な起動アーティファクトです。
+
+## 関連ガイド
+
+- [ランタイムの設定](/ja/guide/runtime-setup)
+- [チームブリーフの例](/ja/guide/team-brief-examples)
+- [エージェントのワークフロー](/ja/guide/agent-workflow)
+- [開発者向け](/ja/developers/)
diff --git a/landing/product-docs/ja/guide/quickstart.md b/landing/product-docs/ja/guide/quickstart.md
new file mode 100644
index 00000000..28e4ba83
--- /dev/null
+++ b/landing/product-docs/ja/guide/quickstart.md
@@ -0,0 +1,193 @@
+---
+title: クイックスタート – Agent Teams ドキュメント
+description: 新規インストールから稼働中の AI エージェントチームまでを数分で立ち上げます。インストール、ランタイムの選択、チームの作成、最初のコードレビューを扱います。
+lang: ja-JP
+---
+
+# クイックスタート
+
+このガイドでは、新規インストールから稼働中のチームまでを数分で立ち上げます。
+
+## 最短ルート
+
+```bash
+# 1. Install prerequisites
+node --version # need 20+
+pnpm --version # need 10+
+
+# 2. Clone and install
+git clone https://github.com/777genius/agent-teams-ai.git
+cd agent-teams-ai
+pnpm install
+
+# 3. Start the desktop app (default workflow)
+pnpm dev
+
+# 4. Verify a docs-only change
+pnpm --dir landing docs:build
+```
+
+デスクトップ版の Electron アプリ(`pnpm dev`)が主要なターゲットです。通常の開発ではブラウザ/Web 開発サーバーを使用しないでください。ブラウザ経由のパスには、デスクトップ IPC、ターミナル、プロバイダー認証、チームのライフサイクル動作がありません。
+
+## はじめる前に
+
+必要なもの:
+
+- **コンピューター** — macOS、Windows、または Linux で動作するもの
+- **(推奨)Git で追跡されているプロジェクト** — worktree の分離や差分レビューは Git に依存します
+- **(任意)プロバイダーアクセス** — ランタイムの設定では UI から利用可能なプロバイダーを検出しますが、一部のパスには既存の認証(Anthropic、OpenAI など)が必要です
+
+以下の手順がうまくいかない場合は、[トラブルシューティングガイド](/ja/guide/troubleshooting#team-does-not-launch)で一般的な対処法を確認してください。
+
+プロジェクトの規約やアーキテクチャに関するガイダンスについては、変更を加える前にこれらの正規ファイルを参照してください:
+
+- [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) — リポジトリのナビゲーションとアーキテクチャの指針
+- [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) — 作業上の規約とプロジェクトのルール
+- [機能アーキテクチャ標準](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) — 新機能の構成
+- [デバッグ用ランブック](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) — 起動とチームメイトの診断
+
+## 1. ソースから実行する、またはダウンロードする
+
+**パッケージ済みアプリをダウンロード**して、macOS、Windows、または Linux 向けにダウンロードページ から入手できます。前提条件は不要です。認証なしの無料モデルから始めることも、より多くのモデルを使いたいときに UI からプロバイダー認証を接続することもできます。
+
+**または開発用にソースから実行**します:
+
+Node.js 24.16.0 LTS と pnpm 10+ が必要です。macOS では、公式の Node.js 24 のプレビルドバイナリは macOS 13.5+ を必要とします。
+
+```bash
+git clone https://github.com/777genius/agent-teams-ai.git
+cd agent-teams-ai
+pnpm install
+pnpm dev
+```
+
+`pnpm dev` は、ホットリロード付きのデスクトップ版 Electron アプリを起動します。これがデフォルトの開発ターゲットです。通常の開発ではブラウザ Web 開発サーバーを起動しないでください。ブラウザ経由のパスには、完全なデスクトップ IPC、ターミナル、プロバイダー認証、チームのライフサイクル動作がありません。
+
+## 2. プロジェクトを開く、または作成する
+
+アプリを起動し、エージェントに作業させたいプロジェクトディレクトリを選択します。Agent Teams はローカルのプロジェクトファイルとランタイム/セッションの状態を読み取り、UI 上でタスク、ログ、差分、チームメイトのアクティビティを表示できるようにします。
+
+::: tip
+最良の体験を得るには、Git で追跡されているプロジェクトを選んでください。worktree の分離と差分ベースのレビューはどちらも Git に依存します。
+:::
+
+チームを起動する前に、プロジェクトが十分にクリーンなベースラインを持っているか確認してください:
+
+```bash
+git status --short
+```
+
+完全にクリーンなツリーである必要はありませんが、エージェントが編集を始める前に、どの変更が自分のものかを把握しておくべきです。これにより、タスクの差分やハンク単位のレビューがはるかに信頼しやすくなります。
+
+## 3. ランタイムのパスを選ぶ
+
+セットアップフローは、マシンにインストールされているランタイムを自動検出します。最初によく使われるセットアップは次のとおりです:
+
+| ランタイム | 適した用途 |
+| -------- | ----------------------------------------------- |
+| Claude | Claude Code ユーザーや既存の Anthropic アクセス |
+| Codex | Codex ネイティブのワークフローや OpenAI アクセス |
+| OpenCode | 認証なしの無料モデル、マルチモデルチーム、多数のプロバイダーバックエンド |
+
+::: info
+Gemini はサポートされているプロバイダーパスとして利用できます。認証オプションと現在のプロバイダーの状況については、[プロバイダーとランタイム](/ja/reference/providers-runtimes)を参照してください。
+:::
+
+各プロバイダーの詳細な設定については、[ランタイムの設定](/ja/guide/runtime-setup)を参照してください。
+
+有料またはアカウントに紐づくランタイムをアプリの外で検証するには、バイナリを確認し、認証をテストします:
+
+```bash
+# Check that the runtime is installed and on PATH
+command -v claude && claude --version
+command -v codex && codex --version
+command -v opencode && opencode --version
+```
+
+コマンドが失敗する場合は、まずランタイムのインストールまたは `PATH` を修正してください。バイナリが見つからない場合や、それを必要とするモデルのプロバイダー認証が欠けている場合、チームのプロンプトでは回避できません。
+
+::: tip
+バイナリは見つかるのにアプリが「not logged in」と報告する場合、ターミナルとアプリで環境が異なっている可能性があります。両者を比較するには、[認証診断ログ](/ja/guide/troubleshooting#auth-diagnostic-log)を参照してください。
+:::
+
+## 4. 最初のチームを作成する
+
+リードと 1 名以上のスペシャリストでチームを作成します。最初のチームは小さく保ってください。リード 1 名、実装エージェント 1 名、レビュー担当エージェント 1 名で、ワークフローを検証するには十分です。
+
+推奨される構成とヒントについては、[チームの作成](/ja/guide/create-team)を参照してください。
+
+最初の起動では、次のようなチーム構成が望ましいです:
+
+| メンバー | 担当 | 備考 |
+| --- | --- | --- |
+| Lead | ゴールをタスクに分割し、ステータスを調整する | 手持ちの最も信頼できるプロバイダーに割り当てる |
+| Builder | スコープが定まったタスクを実装する | ファイルや機能の明確な境界を与える |
+| Reviewer | 完了した作業をレビューする | リグレッションと不足しているテストに注目するよう依頼する |
+
+最初から 5 名以上のチームメイトで始めるのは避けてください。エージェントが増えると、セットアップが健全だと確認できる前に、並行処理、ログ、プロバイダー使用量、競合のリスクが増大します。
+
+## 5. リードに具体的なゴールを与える
+
+エンジニアリングリードに指示を出すのと同じようにゴールを書きます:
+
+```text
+Improve the onboarding flow. Split the work into tasks, keep changes small, and ask for review before broad refactors.
+```
+
+優れた最初のプロンプトには、具体的なスコープ、安全のための境界、検証が含まれます:
+
+```text
+Improve the docs quickstart. Keep edits inside landing/product-docs. Add practical examples, preserve existing VitePress syntax, and run `pnpm --dir landing docs:build` before marking tasks done.
+```
+
+最初の実行では、「アプリをもっと良くして」のような曖昧なプロンプトは避けてください。リードは大きなゴールを分解できますが、より良い入力ほど、より小さなタスクとよりクリーンなレビューを生み出します。
+
+::: tip
+チームは起動するのにタスクが表示されない場合は、リードがあなたのプロンプトを受け取ったかどうかを確認してください。診断については、[エージェントの返信が見当たらない](/ja/guide/troubleshooting#agent-replies-are-missing)を参照してください。
+:::
+
+リードはタスクを作成し、作業を割り当て、チームメイトを調整します。進捗はかんばんボードで確認でき、いつでもコメントやダイレクトメッセージで介入できます。
+
+## 6. 結果をレビューする
+
+完了したタスクやレビュー可能なタスクを開き、差分を確認して、個々の変更を承認、却下、またはコメントします。エージェントがなぜその選択をしたのかを理解する必要がある場合は、タスクログを使用してください。
+
+レビューの完全なワークフローについては、[コードレビュー](/ja/guide/code-review)を参照してください。
+
+最初のタスクを承認する前に、次の 3 点を確認してください:
+
+1. タスクコメントが何を変更したかを説明している
+2. 変更されたファイルがタスクのスコープと一致している
+3. 検証結果がタスクコメントまたはログで確認できる
+
+## よくある落とし穴
+
+| 症状 | 考えられる原因 | 確認すること |
+| --- | --- | --- |
+| アプリがランタイムを検出しない | バイナリが `PATH` 上にない、またはアプリとターミナルで異なる環境が見えている | ターミナルで `command -v ` を実行し、同じターミナル環境を使ってアプリを起動する |
+| チームの起動が止まる | 有料/アカウントモデルのプロバイダー認証が欠けている、モデル文字列が間違っている、またはランタイムバイナリが見つからない | [トラブルシューティング](/ja/guide/troubleshooting#team-does-not-launch)を参照 |
+| OpenCode レーンが `registered` のまま止まる | レーンのエビデンスがまだコミットされていない、またはモデル文字列の不一致 | `~/.claude/teams//.opencode-runtime/lanes/` を確認する |
+| エージェントの返信が見当たらない | ランタイム配信のリトライ、パース、またはタスク帰属の問題 | タスクログを開き、配信台帳を確認する |
+| プロバイダーが 429 を返す | レート制限に達した | リセットを待つか、モデル/プロバイダーを切り替える |
+
+## 次のステップ
+
+- [チームの作成](/ja/guide/create-team) — 推奨されるチーム構成とブリーフの書き方
+- [ランタイムの設定](/ja/guide/runtime-setup) — プロバイダー認証とモデルの選択
+- [コードレビュー](/ja/guide/code-review) — レビュー、承認、または変更のリクエスト
+
+### コントリビューター向け
+
+Agent Teams またはこのドキュメントを変更する場合は、リポジトリのルートにある正規のプロジェクトファイルから始めてください:
+
+- [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) — 作業上の規約とプロジェクトのルール
+- [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) — アーキテクチャと実装ガイダンスのためのナビゲーション層
+- [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) — 実装の厳格なガードレール
+- [機能アーキテクチャ標準](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) — 新機能の構成
+- [エージェントチームのデバッグ用ランブック](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) — 起動、ブートストラップ、チームメイトの診断
+
+このドキュメントサイトが正しくビルドされることを確認するには:
+
+```bash
+pnpm --dir landing docs:build
+```
diff --git a/landing/product-docs/ja/guide/runtime-setup.md b/landing/product-docs/ja/guide/runtime-setup.md
new file mode 100644
index 00000000..ec3e0715
--- /dev/null
+++ b/landing/product-docs/ja/guide/runtime-setup.md
@@ -0,0 +1,179 @@
+---
+title: ランタイムの設定 – Agent Teams ドキュメント
+description: Claude Code、Codex、または OpenCode ランタイムを設定します。認証、プロバイダーアクセス、マルチモデルモード、起動前チェックについて解説します。
+lang: ja-JP
+---
+
+# ランタイムの設定
+
+Agent Teams は調整レイヤーです。実際のモデル処理は、サポートされているローカルランタイムとプロバイダーを通じて実行されます。
+
+::: tip クイックスタート - 最初のランタイムを選ぶ
+| 次のような場合 | 最初に使うもの |
+| --- | --- |
+| すでに Claude Code を使っている、または Anthropic のアクセスがある | **Claude** - 慣れた認証で、最小限のセットアップ |
+| Codex または OpenAI ベースのワークフローを使っている | **Codex** - ネイティブ連携 |
+| サインアップや API キーなしで Agent Teams を試したい | **OpenCode** - 認証不要で同梱の無料モデルを使う |
+| マルチモデルのルーティングや幅広いプロバイダー対応が欲しい | **OpenCode** - 最も柔軟で、1 つの設定で多くのバックエンドに対応 |
+| どのランタイムが合うか分からない | **OpenCode** - 最も多くのプロバイダーの選択肢をカバーし、後から切り替えられる |
+
+1 つのランタイムと 1 人のチームメイトから始めましょう。マルチモデルに拡張する前に、まずは 1 回の起動が動作することを確認してください。
+:::
+
+## 前提条件
+
+チームを起動する前に、次の点を確認してください。
+
+- ランタイムバイナリがインストールされ、`PATH` に含まれていること。
+- 認証不要で同梱の無料 OpenCode モデルから始める場合を除き、プロバイダーアカウントが使用予定のモデルへの有効なアクセス権を持っていること。
+- プロジェクトのパスが存在し、読み取り可能であること。
+- 認証を手動でテストする際に、アプリとターミナルが同じホーム/設定環境を使用していること。
+
+::: tip
+1 人のチームメイトと 1 つのプロバイダーから始めましょう。マルチモデルレーンを追加する前に、まずは 1 回の起動が動作することを確認してください。
+:::
+
+ターミナルでの簡単なチェック:
+
+```bash
+command -v claude
+command -v codex
+command -v opencode
+```
+
+使用予定のランタイムに対応するコマンドを実行してください。何も出力されない場合は、チームを起動する前にランタイムをインストールするか `PATH` を修正してください。
+
+## サポートされている経路
+
+| 経路 | デフォルト CLI | 代表的なプロバイダー | 使用する場面 |
+| --- | --- | --- | --- |
+| Claude | `claude` | Anthropic | すでに Claude Code または Anthropic ベースのワークフローを使っている |
+| Codex | `codex` | OpenAI | Codex ネイティブのランタイム連携が欲しい |
+| OpenCode | `opencode` | OpenRouter および多数のバックエンド | マルチモデルのルーティングと幅広いプロバイダー対応が欲しい |
+
+アプリはサポートされているランタイムを検出し、可能な場合は UI からセットアップをガイドします。
+
+Gemini は、Google ADC(`gcloud auth`)、Gemini CLI の OAuth、API キー認証に対応した、サポート対象のプロバイダー経路として利用できます。Gemini バックエンドが検出されたら、ランタイム設定の UI から構成してください。
+
+## プロバイダーアクセス
+
+Agent Teams には独自の有料プランはありません。認証不要で同梱の無料 OpenCode モデルから始められます - 登録、API キー、クレジットカードは不要です。追加のモデルについては、すでにお持ちのプロバイダーアクセスを利用してください。選択する経路に応じて、サブスクリプション、ローカルランタイムの認証、または API キーを使います。
+
+- **Claude** および **Codex** の経路は、それぞれの CLI 認証ツールに依存します。
+- **OpenCode** は、まず認証不要で同梱の無料モデルを実行できます。その他の OpenCode モデルでは、設定ファイルにプロバイダー固有の API キーが必要になる場合があります(例: `openrouter`、`openai`、`anthropic`)。
+
+## 認証の設定
+
+### Claude Code
+
+ターミナルで標準の認証フローを実行します。
+
+```bash
+claude login
+```
+
+次に、CLI に到達できることを確認します。
+
+```bash
+claude --version
+```
+
+ターミナルでは動作するのにパッケージ版アプリが「ログインしていません」と報告する場合は、アプリが認識している `$HOME` と `PATH` を、ログインに使用したターミナルのものと比較してください。[トラブルシューティング](/ja/guide/troubleshooting#auth-diagnostic-log) で説明している認証診断ログが、最良の出発点です。
+
+### Codex
+
+OpenAI の CLI フローでインストールと認証を行います。
+
+```bash
+codex login
+```
+
+次に、ランタイムに到達できることを確認します。
+
+```bash
+codex --version
+```
+
+Codex ネイティブの起動では、利用可能な場合に Codex アカウントの状態とモデルカタログのデータを使用します。UI にモデルが表示されない場合は、チームプロンプトを編集する前にプロバイダーのステータスを更新してください。
+
+### OpenCode
+
+認証不要で同梱の無料モデルを使うには、アプリ内で選択し、プロバイダーへのサインアップなしで起動します。その他の OpenCode バックエンドを使うには、`~/.opencode/config.json`(またはお使いのプラットフォームでの相当パス)を作成または編集し、使用したいプロバイダーキーを記述します。
+
+```json
+{
+ "providers": {
+ "openrouter": {
+ "apiKey": "sk-or-..."
+ }
+ }
+}
+```
+
+OpenCode が想定する正確なプロバイダー名を使用してください。カスタムのプロバイダー名を設定した場合は、モデル文字列で使用するプロバイダー ID と照らし合わせて再確認してください(例えば `openrouter/moonshotai/kimi-k2.6` は `openrouter` ブロックを使用します)。
+
+モデル文字列の例:
+
+| モデル文字列 | 存在している必要があるプロバイダーブロック |
+| --- | --- |
+| `openrouter/moonshotai/kimi-k2.6` | `openrouter` |
+| `openai/gpt-5.4` | `openai` |
+| `anthropic/claude-sonnet-4-6` | `anthropic` |
+
+OpenCode は起動するのにチームメイトが配信可能にならない場合は、モデルがプロンプトを無視したと判断する前にレーンの証跡を調べてください。[トラブルシューティング](/ja/guide/troubleshooting#opencode-registered-but-bootstrap-unconfirmed) を参照してください。
+
+### Gemini
+
+Gemini は 3 つの認証方法をサポートしています。
+
+- **Google ADC** — `gcloud auth application-default login` を実行して、Google Application Default Credentials 経由で認証します。
+- **Gemini CLI** — Gemini CLI がインストールされている場合は `gemini login` を実行します。
+- **API キー** — 環境に `GEMINI_API_KEY` を設定するか、アプリの Manage Providers UI から構成します。
+
+アプリは利用可能な認証方法を自動検出し、バックエンドに到達できる場合はランタイム設定とチーム作成の UI に Gemini プロバイダーを表示します。
+
+## マルチモデルモード
+
+マルチモデルモードでは、OpenCode 互換の設定を通じて、多数のプロバイダーバックエンドに処理をルーティングできます。プロバイダーの柔軟性が必要な場合や、チームメイトごとに異なるモデルレーンを使わせたい場合に利用します。
+
+::: info モデルレーン
+各チームメイトは、それぞれ異なる `providerId` + `model` の組み合わせを使用できます。チーム編集 UI でメンバーのオプションを展開すると、グローバルなデフォルト設定を上書きできます。
+:::
+
+控えめなマルチモデル構成:
+
+| ロール | プロバイダー | 理由 |
+| --- | --- | --- |
+| Lead | Claude または Codex | 最も信頼しているプロバイダーで調整を維持する |
+| Builder | OpenCode | 実装作業に幅広いモデルルーティングを使う |
+| Reviewer | Claude、Codex、または 2 つ目の OpenCode モデル | レビューの判断を Builder のレーンから分離する |
+
+最初の起動で、慣れていない多数のプロバイダーを混在させるのは避けましょう。幅広い作業を割り当てる前に、各レーンで 1 つの小さなタスクを確認してください。
+
+## 起動前チェックリスト
+
+チームを起動する前に:
+
+1. 選択したランタイムがインストールされている
+2. ランタイムバイナリが環境の `PATH` に含まれている
+3. 選択したバックエンドのプロバイダー認証が設定されている
+4. プロバイダーが、指定する正確なモデル文字列へのアクセス権を持っている
+5. プロジェクトのパスが存在し、読み取り可能である
+
+## ランタイム経路を切り替えるタイミング
+
+現在の経路が、モデルの可用性、レート制限、プロバイダーの機能、またはチームのロールの必要性によって妨げられている場合は切り替えてください。同じプロジェクトとチームのワークフローは維持しつつ、切り替え後に 1 つの小さなタスクを検証してください。
+
+::: warning セットアップのエラーはセットアップの問題として扱う
+認証に失敗する、モデル名が拒否される、またはランタイムバイナリが見つからない場合は、まずセットアップを修正してください。ランタイム構成の問題を回避するために、チームプロンプトやプロジェクトコードを変更しないでください。
+:::
+
+次の判断テーブルを使用してください。
+
+| 症状 | より適切な最初の対応 |
+| --- | --- |
+| バイナリが見つからない | インストールまたは `PATH` を修正する |
+| ターミナルではログインできるがアプリではできない | Electron の認証診断ログと環境を確認する |
+| モデルが拒否される | プロバイダーランタイムで正確なモデル ID を確認する |
+| 429 が繰り返される | 並列度を下げるか、モデル/プロバイダーを切り替える |
+| OpenCode レーンが停滞する | レーンのマニフェストと `opencode-sessions.json` を調べる |
diff --git a/landing/product-docs/ja/guide/team-brief-examples.md b/landing/product-docs/ja/guide/team-brief-examples.md
new file mode 100644
index 00000000..32f922a0
--- /dev/null
+++ b/landing/product-docs/ja/guide/team-brief-examples.md
@@ -0,0 +1,131 @@
+---
+title: チームブリーフの例 – Agent Teams ドキュメント
+description: 小さな修正、ドキュメント作業、実装タスク、レビュー、高リスク領域向けの実用的なチームブリーフテンプレートです。
+lang: ja-JP
+---
+
+# チームブリーフの例
+
+優れたチームブリーフは、すべての実装の詳細を前もって強制することなく、リードが小さなタスクを作成するのに十分な構造を与えます。
+
+次の形を使ってください。
+
+```text
+Outcome:
+Scope:
+Boundaries:
+Coordination:
+Verification:
+Review:
+```
+
+## 最小限のブリーフ
+
+小さくてリスクの低い作業に使用します。
+
+```text
+Outcome: Improve the quickstart so a new user can launch one team successfully.
+Scope: Keep edits inside landing/product-docs.
+Boundaries: Do not rewrite the whole docs structure.
+Coordination: Create one or two tasks, keep comments on the task.
+Verification: Run `pnpm --dir landing docs:build`.
+Review: Summarize changed pages and any remaining gaps.
+```
+
+## 実装のブリーフ
+
+コードの変更が 1 つの機能領域に及ぶ場合に使用します。
+
+```text
+Outcome: Add a focused improvement to task comment filtering.
+Scope: Work inside the task/comment feature files unless a shared helper is clearly needed.
+Boundaries: Do not change task storage format or review state semantics.
+Coordination: Split parser, UI, and tests into separate tasks if they can be reviewed independently.
+Verification: Run the focused unit tests first, then the feature typecheck if touched.
+Review: Call out parsing edge cases and any behavior that affects existing task comments.
+```
+
+## ドキュメントのブリーフ
+
+ドキュメントやガイドの作業に使用します。
+
+```text
+Outcome: Draft practical workflow guides from the docs audit.
+Scope: Add concise VitePress pages under landing/product-docs/guide.
+Boundaries: Avoid moving existing navigation hubs owned by other tasks.
+Coordination: Check related docs tasks before editing nav.
+Verification: Run `pnpm --dir landing docs:build`.
+Review: Include links added to sidebar and any pages intentionally left as drafts.
+```
+
+## レビュー重視のブリーフ
+
+IPC、プロバイダー認証、永続化、Git、タスクライフサイクルのロジックなど、リスクの高い領域に使用します。
+
+```text
+Outcome: Fix the launch failure without changing successful launch behavior.
+Scope: Start from the newest launch-failure artifact and the affected runtime adapter.
+Boundaries: Do not change provider prompts until setup and runtime evidence are inspected.
+Coordination: Make one diagnostic task and one fix task if the cause is confirmed.
+Verification: Run focused tests and one desktop smoke check when practical.
+Review: Lead must inspect the diff before approval.
+```
+
+## 複数プロバイダーのブリーフ
+
+チームメイトが異なるプロバイダー/モデルのレーンで動作する場合に使用します。
+
+```text
+Outcome: Implement and review a small feature using separate builder and reviewer lanes.
+Scope: Builder edits the feature. Reviewer inspects only the task diff and tests.
+Boundaries: Do not switch model ids mid-task unless launch fails before work begins.
+Coordination: Builder posts result comment first. Reviewer posts findings as task comments.
+Verification: Builder runs focused tests. Reviewer checks failure output and changed scope.
+Review: Lead approves only after reviewer comments are resolved.
+```
+
+## ブリーフ内のエージェントブロック
+
+エージェントブロックとは、`... ` のようなマーカーで囲まれた、エージェント専用の非表示テキストです。アプリは通常の表示からこれらを取り除きますが、エージェントの連携のために利用できる状態を保ちます。人間の読み手にとってはノイズになるが、エージェントに何かを伝える必要がある場合にブリーフで使用してください。
+
+例 - 連携の指示をユーザーに見せることなく、リードに作業の分割方法を伝えるブリーフ:
+
+```text
+Outcome: Add a dark mode toggle to the application settings.
+Scope: Settings UI, theme context, and CSS variables.
+Boundaries: Do not change existing light theme values or provider auth screens.
+
+
+Split this into three tasks: (1) theme context and CSS vars, (2) toggle component and settings wiring, (3) dark mode preview in existing docs screenshots if practical.
+
+```
+
+このブロックは、人間向けのブリーフをすっきりと保ちつつ、リードに構造化されたタスク分割のガイダンスを与えます。
+
+## 避けるべきこと
+
+| 弱いブリーフ | より良い代替案 |
+| --- | --- |
+| "Improve the app" | ワークフロー、ファイル、成功の確認方法を明記する |
+| "Fix all docs" | 1 つのガイドグループと 1 つのビルドコマンドを選ぶ |
+| "Use the best model" | プロバイダー/モデルの選択を明記するか、アプリのデフォルトに任せる |
+| "Refactor as needed" | 変更を許可するモジュールを明記する |
+| "Make it production ready" | レビュー、テスト、ロールアウトの確認を定義する |
+
+## 起動前に
+
+チームを開始する前に、次の点を確認してください。
+
+1. ブリーフが具体的な成果を明記している。
+2. リスクの境界が明示されている。
+3. リードが作業をレビュー可能なタスクに分割できる。
+4. 分かっている場合は検証コマンドが含まれている。
+5. 機微な領域は承認前にレビューを必要とする。
+
+ブリーフがまだ漠然としている場合は、まずソロまたは小規模なチームを起動し、実装ではなくタスク計画を作成するよう依頼してください。
+
+## 関連ガイド
+
+- [チームの作成](/ja/guide/create-team)
+- [MCP 連携](/ja/guide/mcp-integration)
+- [Git と worktree の戦略](/ja/guide/git-worktree-strategy)
diff --git a/landing/product-docs/ja/guide/troubleshooting.md b/landing/product-docs/ja/guide/troubleshooting.md
new file mode 100644
index 00000000..34fa2d89
--- /dev/null
+++ b/landing/product-docs/ja/guide/troubleshooting.md
@@ -0,0 +1,310 @@
+---
+title: トラブルシューティング – Agent Teams ドキュメント
+description: ローカルの診断情報を使って、チームの起動の問題、エージェントの返信の欠落、レート制限、CLI 認証の問題、レーンのブートストラップの停滞を解決します。
+lang: ja-JP
+---
+
+# トラブルシューティング
+
+ほとんどのチームの問題は、ランタイムの設定、起動の確認、タスクの解析、プロバイダーの制限という 4 つのカテゴリーのいずれかに分類されます。
+
+## 証拠の素早い準備
+
+チームのライフサイクルに関するあらゆる問題について、まず以下の変数を定義し、同じシェルを再利用してください。
+
+```bash
+TEAM=""
+TEAM_DIR="$HOME/.claude/teams/$TEAM"
+TASKS_DIR="$HOME/.claude/tasks/$TEAM"
+```
+
+次に、UI の状態を解釈する前に、想定されるファイルが存在することを確認します。
+
+```bash
+test -d "$TEAM_DIR" && find "$TEAM_DIR" -maxdepth 2 -type f | sort | sed -n '1,80p'
+test -d "$TASKS_DIR" && find "$TASKS_DIR" -maxdepth 1 -name '*.json' | sort | sed -n '1,40p'
+```
+
+::: warning 証拠を最優先に
+動かなくなったバッジだけを根拠に、プロンプト、プロバイダー設定、プロセスのクリーンアップを修正しないでください。まず UI を、永続化されたファイル、起動アーティファクト、ランタイムの証拠と突き合わせてください。
+:::
+
+## チームが起動しない
+
+各項目を順番に確認します。
+
+1. **ランタイムが利用可能** — 選択した CLI(`claude`、`codex`、`opencode`)がインストールされている
+2. **PATH から到達可能** — そのバイナリが環境の `PATH` で利用できる
+3. **モデルへのアクセス** — プロバイダーが、要求したモデル文字列にアクセスできる(特に OpenCode では、正確なプロバイダー名/モデル名が重要です)
+4. **プロジェクトパス** — プロジェクトディレクトリが存在し、読み取り可能である
+5. **ネットワーク / VPN** — 一部のプロバイダーは VPN が有効なときにトラフィックを遮断します
+
+::: tip
+ランタイムのバイナリをターミナルで実行して、`PATH` と認証を確認してください。例: `claude --version` または `opencode --version`。
+:::
+
+### OpenCode: registered だがブートストラップが未確認
+
+OpenCode が `registered` を示しているのにブートストラップが未確認の場合は、チームのプロンプトを変更する前に、まずアーティファクトを調査してください。
+
+コントリビューター向け/デバッグの詳細は [コントリビューター向けアーキテクチャ](/ja/reference/contributor-architecture) にあり、正規のエージェントチームデバッグ runbook へのリンクが含まれています。
+
+最新の起動失敗アーティファクトを確認します。
+
+```bash
+LATEST_FAILURE="$TEAM_DIR/launch-failure-artifacts/latest.json"
+MANIFEST_PATH="$(jq -r '.manifestPath' "$LATEST_FAILURE")"
+jq '.classification, .bootstrapTransportBreadcrumb, .memberSpawnStatuses' "$MANIFEST_PATH"
+```
+
+`latest.json` は、最新のパックされたアーティファクトディレクトリとその `manifest.json` を指します。このマニフェストには次のものが含まれます。
+
+- `classification` — その起動が失敗とみなされた理由
+- `bootstrapTransportBreadcrumb` — 使用された配信経路
+- メンバーのスポーン状態
+- 編集(マスク)済みのログとトレース
+
+レーンのマニフェストも確認します。
+
+```bash
+jq '.lanes' "$TEAM_DIR/.opencode-runtime/lanes.json" 2>/dev/null
+find "$TEAM_DIR/.opencode-runtime/lanes" -maxdepth 2 -name manifest.json -print -exec jq '.activeRunId, .entries' {} \; 2>/dev/null
+```
+
+::: tip UI から推測しないこと
+UI の診断情報は、必ず永続化されたファイル(`launch-state.json`、`bootstrap-journal.jsonl`)およびランタイム固有の証拠と突き合わせてください。
+:::
+
+## 一般的な診断
+
+UI だけではなく、ディスク上に永続化されたファイルから始めてください。
+
+### チームルート
+
+```bash
+printf '%s\n' "$TEAM_DIR"
+```
+
+主要なファイルと、それぞれが示す内容は次のとおりです。
+
+- `launch-state.json` — メンバーの起動/生存状態(`.teamLaunchState`、`.summary`、`.members`)
+- `bootstrap-journal.jsonl` — CLI/ランタイムからの順序付きブートストラップイベント(`tail -80`)
+- `bootstrap-state.json` — ブートストラップフェーズの概要
+- `config.json` — プロバイダー、モデル、プロジェクトの設定
+- `inboxes/*.json` と `sentMessages.json` — メッセージ配信の状態
+
+```bash
+jq '.teamLaunchState, .summary, .members' "$TEAM_DIR/launch-state.json"
+tail -80 "$TEAM_DIR/bootstrap-journal.jsonl" 2>/dev/null
+```
+
+### OpenCode のランタイム証拠
+
+OpenCode のチームメイトについては、セッションの証拠はレーンランタイムストアにあります。
+
+- `.opencode-runtime/lanes.json` — 状態を含むレーンのインデックス
+- `.opencode-runtime/lanes//manifest.json` — `activeRunId` と証拠エントリ
+- `.opencode-runtime/lanes//opencode-sessions.json` — コミット済みのセッションレコード
+
+想定される正常な状態: レーンの状態が `active`、マニフェストに少なくとも 1 件の証拠エントリを持つ `activeRunId` がある、メンバーが `bootstrapConfirmed: true` である。
+
+```bash
+jq '.lanes' "$TEAM_DIR/.opencode-runtime/lanes.json" 2>/dev/null
+find "$TEAM_DIR/.opencode-runtime" -maxdepth 3 -type f | sort
+```
+
+### 起動失敗アーティファクト
+
+起動が失敗としてマークされた場合は、`latest.json` を調査します。
+
+```bash
+LATEST_FAILURE="$TEAM_DIR/launch-failure-artifacts/latest.json"
+jq '.' "$LATEST_FAILURE"
+jq '.' "$(jq -r '.manifestPath' "$LATEST_FAILURE")"
+```
+
+このマニフェストには次のものが含まれます。
+- `classification` — その起動が失敗とみなされた理由
+- `bootstrapTransportBreadcrumb` — 使用された配信経路
+- メンバーのスポーン状態と、編集(マスク)済みのログ/トレース
+
+## エージェントの返信が欠落している
+
+タスクログとチームメイトのメッセージを開いてください。返信の欠落は、多くの場合次の原因によるものです。
+
+- **ランタイム配信のリトライ** — エージェントは回答したものの、メッセージがアプリに配信されなかった可能性があります。配信台帳を確認してください。
+- **解析またはフィルタリング** — エージェントの出力に、想定されるマーカーやタスク参照が含まれていなかった。
+- **タスクへの帰属** — セッション中に作業は行われたものの、正しいタスク id が出力に含まれていなかったため、タスクに紐付けられなかった。
+
+::: warning 沈黙=無視と思い込まないこと
+ログで確認できるまで、モデルがメッセージを無視したと思い込まないでください。
+:::
+
+永続化されたメッセージの状態を使って、「未送信」と「送信済みだが表示されていない」を切り分けます。
+
+```bash
+jq '.' "$TEAM_DIR/inboxes/user.json" 2>/dev/null
+jq '.' "$TEAM_DIR/sentMessages.json" 2>/dev/null
+```
+
+`from`、`to`、`messageId`、`relayOfMessageId`、`taskRefs` を確認します。OpenCode のチームメイトについては、モデルがプロンプトを無視したと思い込む前に、ランタイム配信の証拠も調査してください。
+
+## タスクが変更に紐付けられていない
+
+タスク固有のログとコードレビューのリンクを使用します。差分が切り離されているように見える場合は、次を確認します。
+
+- タスク id またはタスク参照がエージェントの出力に含まれていたかどうかを確認する。
+- エージェントが編集を行う前に `task_add_comment` を呼び出したかどうかを検証する。
+- ボードが作業開始を認識できるよう、エージェントが `task_start` を呼び出したことを確認する。
+
+OpenCode のチームメイトについては、セッションがタスクに属するという確実な証拠は、UI のメッセージストリームだけではなく、`opencode-sessions.json` とレーンのマニフェストエントリにあります。
+
+### タスクログのトリアージ
+
+タスクログが不完全に見える場合は、タスク JSON、受信トレイ、ブートストラップイベントにまたがってタスク id で検索します。
+
+```bash
+TASK=""
+rg -n "$TASK" "$TASKS_DIR" "$TEAM_DIR/inboxes" "$TEAM_DIR/bootstrap-journal.jsonl" 2>/dev/null
+```
+
+結果は慎重に解釈してください。
+
+| 証拠 | 証明できること | 証明できないこと |
+| --- | --- | --- |
+| メッセージが配信された | アプリがプロンプトを書き込んだか中継した | エージェントが進捗を出した |
+| タスクコメント | エージェントがボードに表示されるテキストを投稿した | そのコメントが意味のある進捗である |
+| ネイティブツールの行 | ランタイムがセッション内で作業を行った | 帰属が一致しない限り、その作業がこのタスクに属する |
+| 変更台帳のエントリ | アプリがファイルの変更を記録した | 実装が正しい |
+
+OpenCode では、正常なタスクログには通常、`read`、`bash`、`edit`、`write` といったネイティブランタイムの行に加えて、Agent Teams の MCP の行が含まれます。`agent-teams_*` の行しか見当たらない場合は、ログのマッチング範囲を広げる前に、タスクへの帰属とセッションの境界を確認してください。
+
+## レート制限
+
+プロバイダーが既知のリセット時刻を報告する場合、Agent Teams はクールダウン後にリードへ続行を促すことができます。リセット時刻が不明な場合は、待機するか、プロバイダー/ランタイムの経路を切り替えてください。
+
+| プロバイダーの挙動 | 推奨される対応 |
+| --- | --- |
+| 既知のリセット時刻が表示される | クールダウンを待ってから続行する |
+| リセット時刻が表示されない | プロバイダーまたはランタイムの経路を切り替える |
+| 429 が繰り返される | 並行数を下げるか、別のモデルレーンを使用する |
+
+## CLI 認証の問題
+
+### `claude login` が保持されない
+
+CLI が 1 つのターミナルでは認証されているのに、アプリでは未認証と表示される場合は、認証が想定される設定パスに保存されていること、およびアプリのプロセスが同じ `$HOME` を参照していることを確認してください。
+
+### OpenCode のプロバイダーキーが拒否される
+
+- `config.json` 内のプロバイダー名が、モデル文字列のプロバイダープレフィックスと一致しているか再確認する
+- そのキーが、プロバイダーのダッシュボードで失効または取り消されていないことを確認する
+
+### 認証診断ログ
+
+`CliInstallerService.getStatus()` が呼び出されるたびに、Electron のログフォルダー(macOS では通常 `~/Library/Logs//`)内の `claude-cli-auth-diag.ndjson` に 1 行が追記されます。このファイルが **512 KiB** を超えると、次の書き込みの前に空に切り詰められます。
+
+パッケージ化されたアプリで「Not logged in」や認証エラーが表示される場合は、このファイルを確認してください。
+
+## レーンのブートストラップが停滞している
+
+OpenCode のセカンダリレーンについて:
+
+- `inboxes/.json` が存在しないことが、自動的にバグであるとは限りません。OpenCode のレーンは、開始前にプライマリ受信トレイによって作成されている必要はありません。
+- プライマリメンバーがすでに使用可能なのに UI でチームがまだ起動中と表示される場合、「all teammates joined」はセカンダリレーンを待っています。
+- `Prepared communication channels for X/Y members` が止まる場合は、`Y` に OpenCode のセカンダリメンバーが誤って含まれていないかを確認してください。
+
+### レーンのマニフェストのエントリが空
+
+ブリッジがブートストラップ成功と報告しているのに `manifest.json` が `entries: []` を示している場合、問題はモデルの挙動ではなく **証拠のコミット** にあります。`opencode-sessions.json` とそのマニフェストエントリが存在するまで、メンバーを配信可能とみなしてはなりません。
+
+## メンバーのよくある状態
+
+| 状態 | 意味 |
+| --- | --- |
+| `confirmed_alive` + `bootstrapConfirmed` | 正常で準備完了 |
+| `registered` / `runtime_pending_bootstrap` | プロセスまたはレーンは存在するが、ブートストラップの証拠がまだコミットされていない |
+| `failed_to_start` + `runtime_process` | プロセスは存在するが、起動ゲートが失敗した。診断情報を確認してください |
+| `failed_to_start` + `stale_metadata` | 保存された pid/セッションが古いか、すでに停止している |
+
+::: warning
+`member_briefing` だけではランタイムの証拠には**なりません**。OpenCode では、確実な証拠は `opencode-sessions.json` とマニフェストエントリのような、コミット済みのランタイム証拠です。
+:::
+
+## ランタイムのデバッグモード
+
+ローカルでのデバッグのために、チームメイトを tmux ペインで実行するよう強制できます。
+
+```bash
+# Launch from a terminal
+CLAUDE_TEAM_TEAMMATE_MODE=tmux pnpm dev
+
+# Or add to custom CLI args
+--teammate-mode tmux
+```
+
+これは対話的な CLI の挙動を調べるために使用します。これがプロセスバックエンドと完全に等価であるとは考えないでください。
+
+## スモークチェック
+
+通常の検証にはデスクトップの Electron アプリを使用してください。ブラウザ/Web の開発モードには、完全なデスクトップランタイム、IPC、プロバイダー認証、ターミナル、チームのライフサイクル挙動は含まれていません。
+
+### ドキュメントのみの変更
+
+リポジトリのルートから:
+
+```bash
+pnpm --dir landing docs:build
+git diff --check -- landing/product-docs
+```
+
+### チームライフサイクルの変更
+
+狭い範囲から始めて、徐々に広げます。
+
+```bash
+pnpm test -- test/main/services/team/TeamProvisioningService.test.ts
+pnpm test -- test/main/services/team/TeamAgentLaunchMatrix.safe-e2e.test.ts
+pnpm typecheck
+git diff --check
+```
+
+### ライブチームのスモーク
+
+小規模なチームと、Git で追跡している使い捨てのプロジェクトを使用します。
+
+1. `pnpm dev` でデスクトップアプリを起動します。
+2. リード 1 名とビルダー 1 名を作成します。
+3. 明示的な検証コマンドを添えて、ごく小さな変更を依頼します。
+4. タスクが `pending` -> `in_progress` -> `completed` と移動することを確認します。
+5. タスクログを開き、ツールの行、タスクコメント、ファイルの変更が整合していることを確認します。
+6. クリーンアップの際は、スモーク専用のチーム/プロセスのみを停止します。
+
+::: warning 狭い範囲のクリーンアップのみ
+スモーク実行のクリーンアップ中に、すべての OpenCode ホスト、無関係な tmux ペイン、ユーザーのチームを終了しないでください。
+:::
+
+## 安全なクリーンアップ
+
+古くなったプロセスをクリーンアップする際は:
+
+1. pid を特定し、それが現在のチーム/レーンに属していることを確認します。
+2. スモークテストやデバッグ中の起動に明示的に属するプロセスのみを停止します。
+3. 近道として、すべての OpenCode プロセスや共有ホストのプロセスを**終了しない**でください。
+
+## 証拠を収集すべきタイミング
+
+サポートを求める前に、次を収集してください。
+
+- タスク id(短縮形または完全形)
+- チーム名
+- ランタイムの経路(`claude`、`codex`、`opencode`)
+- 起動ログの抜粋(`latest.json` または `bootstrap-journal.jsonl` から)
+- プロバイダー / モデル文字列
+- 問題が発生した正確な時間帯
+
+通常、このデータがあれば、起動やタスクのライフサイクルの問題をデバッグするのに十分です。
+
+::: tip
+問題が解決しない場合は、`~/.claude/teams//` 配下のチームの永続化ファイルを開き、コードを変更する前に UI の診断情報をライブプロセスの状態と突き合わせてください。
+:::
diff --git a/landing/product-docs/ja/index.md b/landing/product-docs/ja/index.md
new file mode 100644
index 00000000..7ba6d26d
--- /dev/null
+++ b/landing/product-docs/ja/index.md
@@ -0,0 +1,81 @@
+---
+title: Agent Teams ドキュメント – ローカル デスクトップアプリで AI エージェントのチームを動かす
+description: AI エージェントのオーケストレーションを行う無料のデスクトップアプリ Agent Teams のドキュメントです。チームを作成し、カンバンボードで作業を見守り、コード変更をレビューし、Claude、Codex、OpenCode、マルチモデルのワークフローを連携させます。
+lang: ja-JP
+layout: home
+hero:
+ name: Agent Teams ドキュメント
+ text: ローカル デスクトップアプリで AI エージェントのチームを動かす
+ tagline: チームを作成し、タスクがカンバンボード上を移動していく様子を見守り、コード変更をレビューし、ローカルでの制御を手放すことなく Claude、Codex、OpenCode、マルチモデルのワークフローを連携させます。
+ actions:
+ - theme: brand
+ text: クイックスタート
+ link: /ja/guide/quickstart
+ - theme: alt
+ text: インストール
+ link: /ja/guide/installation
+ - theme: alt
+ text: コンセプト
+ link: /ja/reference/concepts
+features:
+ - icon: "01"
+ title: チームファーストのワークフロー
+ details: ロールを定義し、リードを起動して、エージェントがタスクを分割・取得・調整できるようにします。
+ link: /ja/guide/create-team
+ linkText: チームを作成する
+ - icon: "02"
+ title: ライブ カンバンボード
+ details: エージェントが作業する中で、タスクが todo、in progress、review、done、approved を移動していく様子を見守ります。
+ link: /ja/guide/agent-workflow
+ linkText: ワークフローを理解する
+ - icon: "03"
+ title: 組み込みのコードレビュー
+ details: タスク単位の差分を確認し、ハンクを承認または却下し、エージェントに方向性が必要な箇所にコメントします。
+ link: /ja/guide/code-review
+ linkText: 変更をレビューする
+ - icon: "04"
+ title: ランタイムを意識したセットアップ
+ details: すでにお持ちのアクセス権を通じて、Claude、Codex、OpenCode、またはマルチモデルのプロバイダーを利用します。
+ link: /ja/guide/runtime-setup
+ linkText: ランタイムを設定する
+ - icon: "05"
+ title: ローカルファーストの制御
+ details: デスクトップアプリはローカルのプロジェクトとランタイムの状態を読み取ります。選択したプロバイダーがプロンプトのコンテキストを受け取らない限り、コードはお使いのマシンに留まります。
+ link: /ja/reference/privacy-local-data
+ linkText: プライバシーモデル
+ - icon: "06"
+ title: デバッグ可能なチーム
+ details: 起動やタスクが行き詰まったときに、タスクログ、ランタイム出力、チームメイトのメッセージ、ライブプロセスをトレースします。
+ link: /ja/guide/troubleshooting
+ linkText: トラブルシューティング
+---
+
+
+
+## はじめに
+
+Agent Teams は、AI エージェントのチームをオーケストレーションするための無料のデスクトップアプリです。単一のエージェントに孤立したプロンプトを送るだけではありません。チームを作成し、ロールを割り当て、エージェントがタスクボードを通じて作業を調整する様子を見守ります。
+
+
+
+## 起動後の次のステップ
+
+最初のチームを作成したら、さらに先へ進むために次のガイドを参照してください。
+
+- **ランタイムの設定** - Claude、Codex、OpenCode、またはマルチモデルのプロバイダーを設定します: [ランタイムを設定する](/ja/guide/runtime-setup)
+- **エージェントのワークフロー** - エージェントがタスクボードを通じてどのように調整するかを理解します: [ワークフローを理解する](/ja/guide/agent-workflow)
+- **チームブリーフの例** - 実際のブリーフからプロンプトのパターンを学びます: [例を見る](/ja/guide/team-brief-examples)
+- **コードレビュー** - 差分を確認し、変更を承認または却下します: [変更をレビューする](/ja/guide/code-review)
+- **トラブルシューティング** - 行き詰まった起動、不在のチームメイト、タスクの失敗を診断します: [トラブルシューティング](/ja/guide/troubleshooting)
+- **Git と worktree の戦略** - 複数のチームメイトが同じリポジトリを並行して編集する場合に worktree による分離を利用します: [worktree について学ぶ](/ja/guide/git-worktree-strategy)
+- **リリースノート** - 各バージョンの新機能を確認します: [リリースを見る](/ja/reference/release-notes)
+
+## リファレンス
+
+正確な用語、プロバイダーの動作、コントリビューター向けアーキテクチャ、プライバシーの境界が必要なときは、リファレンスページを参照してください。
+
+
+
+## 製品プレビュー
+
+
diff --git a/landing/product-docs/ja/reference/concepts.md b/landing/product-docs/ja/reference/concepts.md
new file mode 100644
index 00000000..1cd42b47
--- /dev/null
+++ b/landing/product-docs/ja/reference/concepts.md
@@ -0,0 +1,85 @@
+---
+title: コンセプト – Agent Teams ドキュメント
+description: Agent Teams 全体で使われる中核的な用語集 — チーム、リード、チームメイト、タスク、カンバン、インボックス、ランタイム、レビューについて。
+lang: ja-JP
+---
+
+# コンセプト
+
+このページでは、Agent Teams 全体で使われる中核的な用語を定義します。アプリ、タスクボード、メッセージ、レビューフローで共有される語彙としてご利用ください。
+
+## チーム
+
+チームとは、1 つのプロジェクトパスに紐付けられた、名前付きのエージェントのグループです。リード、任意のチームメイト、ランタイム/プロバイダー設定、プロンプト、インボックス、タスク、ローカルの起動状態を持ちます。
+
+## リード {#lead}
+
+リードはチームのコーディネーターです。ユーザーの目標をタスクへと変換し、チームメイトを割り当てたり再配置したりし、ブロッカーを追跡し、レビューを依頼し、ボード上で作業を前進させ続けます。
+
+[チームメイト →](#teammate)
+
+リードのメッセージは、チームメイトのメッセージとは異なる配信経路を使います。アプリはリードのインボックスのエントリをリードのランタイムにリレーしますが、チームメイトはターンの合間に自身のインボックスファイルを読み取ります。
+
+## チームメイト {#teammate}
+
+チームメイトとは、チーム内のリード以外のエージェントです。チームメイトは通常、builder、reviewer、researcher、tester といった特定のロールを担います。チームメイトはダイレクトメッセージ、タスクの割り当て、タスクコメント、レビュー依頼を受け取れます。
+
+[リード ↑](#lead)
+
+## タスク
+
+タスクとは、作業の永続的な単位です。id、ステータス、オーナー、説明、コメント、ログ、添付ファイル、タスク参照、レビュー可能な変更を持ちます。
+
+一般的なタスクの状態は `todo`、`in_progress`、`done`、`review`、`approved` です。内部的には、タスクファイルが作業状態を保存する一方で、review と approved の配置にはカンバンのオーバーレイ状態も使われることがあります。
+
+## カンバン
+
+カンバンとは、チーム作業のボードビューです。状態ごとにタスクを一覧したり、タスクの詳細を開いたり、ログを確認したり、差分をレビューしたり、完了した作業を承認したり、変更を依頼したりできます。
+
+## インボックス
+
+インボックスとは、チーム参加者向けのローカルなメッセージファイルです。Agent Teams は、ユーザーメッセージ、リードメッセージ、チームメイトメッセージ、ランタイム配信のメタデータ、クロスチームメッセージ、一部のシステム通知にインボックスを使用します。
+
+メッセージは永続的なローカルレコードです。配信は依然として、選択したランタイムが生存していて次のターンを処理できることに依存します。
+
+## エージェントブロック
+
+エージェントブロックとは、`... ` でラップされた、エージェント専用の非表示の指示テキストです。UI は通常の人間向け表示からこれらのブロックを取り除きますが、エージェントとランタイム配信はそれらを調整の詳細として利用できます。
+
+現在の正規のマーカーは `info_for_agent` です。古いドキュメントでは `info_for_agent` マーカー付きのフェンス付きコードブロックや、XML スタイルの `` タグを使っている場合があります。これらはレガシーなパターンであり、見つけたら `info_for_agent` へ移行すべきです。(元のタグ名は `agent-block` でした。アンダースコア形式の `` は、HTML としてのパースを避けるために VitePress のソースで使用されています。)
+
+## コンテキストフェーズ
+
+コンテキストフェーズとは、セッションのコンテキストタイムラインを構成する 1 つのセグメントです。コンパクションが新しいフェーズを開始するため、リセットの前後でトークンとコンテキストの使用状況を分析できます。
+
+コンテキストの追跡では、プロジェクトの指示、メンションされたファイル、ツール出力、思考テキスト、チームの調整、ユーザーメッセージといったカテゴリを区別します。これらの数値は診断用であり、プロバイダーの請求明細ではありません。
+
+## ランタイム
+
+ランタイムとは、エージェントのターンを実行するローカルの実行経路です。サポートされるランタイム経路には Claude Code、Codex、OpenCode が含まれます。
+
+ランタイムは、モデルの実行挙動、認証の詳細、ツール実行のセマンティクス、レート制限、モデルの可用性、一部のトランスクリプト/ログ形式を担います。
+
+## プロバイダー
+
+プロバイダーとは、ランタイムの背後にあるモデルアクセス経路です。現在のプロバイダー id には Anthropic、Codex、Gemini、OpenCode が含まれます。OpenCode は、独自の設定を通じて多くのモデルプロバイダーへルーティングできます。
+
+Agent Teams はタスクとメッセージをオーケストレーションしますが、プロバイダーの認証やプロバイダーのポリシーを置き換えるものではありません。
+
+## ソロモード
+
+ソロモードは、1 メンバーのチームを実行します。手早い作業、調整オーバーヘッドの削減、フルチームへ拡張する前のプロンプト検証に役立ちます。
+
+## クロスチームコミュニケーション
+
+エージェントはチーム内およびチーム間でメッセージを送信できます。別々のチームが関連する作業を担当しており、すべてを 1 つの大きなチームにまとめることなく調整する必要がある場合に使用します。
+
+## 自律性のレベル
+
+自律性は、エージェントが確認を求める前にどこまで実行できるかを制御します。自律性が高いほど速く、低いほど、機微なコードパス、永続化、プロバイダー認証、Git 操作、リリースに対して安全です。
+
+## レビュー
+
+レビューとは、タスクスコープの受け入れフローです。タスクは review に移動し、コメントや変更依頼を受け取り、結果が受け入れられると approved に移動できます。
+
+レビューはローカルの差分とタスク履歴に結び付いているため、タスクが狭い範囲に保たれ、エージェントが作業中のタスクをメンションするときに最も効果を発揮します。
diff --git a/landing/product-docs/ja/reference/contributor-architecture.md b/landing/product-docs/ja/reference/contributor-architecture.md
new file mode 100644
index 00000000..a6bf6c7a
--- /dev/null
+++ b/landing/product-docs/ja/reference/contributor-architecture.md
@@ -0,0 +1,55 @@
+---
+title: コントリビューター向けアーキテクチャ – Agent Teams ドキュメント
+description: 機能のレイアウト、ランタイム/プロバイダーの境界、ハードガードレール、および正規のアーキテクチャドキュメントについてのコントリビューターガイド。
+lang: ja-JP
+---
+
+# コントリビューター向けアーキテクチャ
+
+このページはコントリビューター向けのマップです。すべての実装ルールを再掲するのではなく、正規のリポジトリガイダンスへの道しるべを示します。
+
+## 正規の情報源
+
+アプリを変更する際は、これらのファイルを信頼できる情報源(source of truth)として使用してください。
+
+| 必要なもの | 正規の情報源 |
+| --- | --- |
+| リポジトリの概要とコマンド | [README.md](https://github.com/777genius/agent-teams-ai/blob/main/README.md) |
+| ローカルでの作業規約 | [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) |
+| ハードガードレール | [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) |
+| 中規模・大規模機能のレイアウト | [docs/FEATURE_ARCHITECTURE_STANDARD.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) |
+| エージェントチームの起動デバッグ | [docs/team-management/debugging-agent-teams.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) |
+
+## 機能のレイアウト
+
+中規模・大規模の機能は `src/features//` の配下に置き、機能アーキテクチャ標準に従ってください。機能の内部実装はパブリックなエントリーポイントの背後に隠し、機能境界をまたぐディープインポートは避けてください。
+
+新規作業では、ローカルのリファレンス実装として既存の `src/features/recent-projects` スライスから始めてください。機能スライスを作成すると価値以上に構造が増えてしまう場合、小さな修正は既存のコードパスの近くに留めても構いません。
+
+## ランタイムとプロバイダーの境界
+
+Agent Teams はオーケストレーションを担います。すなわち、チーム、タスク、メッセージ、起動状態、レビュー UI、診断、およびローカルでの永続化です。
+
+選択されたランタイム/プロバイダーのパスは、モデルの実行、認証、モデルの可用性、レート制限、ツールのセマンティクス、およびランタイム固有のトランスクリプト証跡を担います。認証の欠落、バイナリの欠落、拒否されたモデル ID、またはプロバイダーの障害を、プロンプトや UI の状態で補おうとしないでください。ユーザー向けのセットアップ詳細については、[プロバイダーとランタイム](/ja/reference/providers-runtimes)を参照してください。
+
+## エージェントチームのデバッグ
+
+起動のハング、OpenCode の `registered` / bootstrap-unconfirmed 状態、チームメイトの返信の欠落、または不審なタスクログについては、専用のデバッグ用ランブックから始めてください。`~/.claude/teams//launch-failure-artifacts/latest.json` 配下にある最新の起動失敗アーティファクトを調べ、次に UI の状態を永続化されたファイルおよびランタイム固有の証跡と突き合わせてください。
+
+デバッグ中の広範囲なクリーンアップは避けてください。問題に属すると特定できるプロセス、レーン、チーム、またはスモークランのみを停止してください。
+
+## コントリビューターの規約
+
+- 通常の開発では、デスクトップ版 Electron アプリに `pnpm dev` を使用してください。
+- デスクトップランタイム、IPC、ターミナル、プロバイダー認証、またはチームのライフサイクル挙動の代替として、ブラウザの開発モードを使用しないでください。
+- Electron の main、preload、renderer、shared、および機能の責務を分離して保ってください。
+- マーカーを手動で連結する代わりに、エージェント専用ブロックには `wrapAgentBlock(text)` を使用してください。
+- 焦点を絞った検証を優先してください。タスクが明示的にフォーマットに関するものでない限り、広範囲な `lint:fix` やフォーマットの変更は避けてください。
+- パース、タスクのライフサイクル、プロバイダー/ランタイムの検出、永続化、IPC、Git、およびレビューフローは、的を絞ったテストまたは明確な検証パスを必要とする高リスク領域として扱ってください。
+
+## 関連ページ
+
+- [ランタイムの設定](/ja/guide/runtime-setup)
+- [トラブルシューティング](/ja/guide/troubleshooting)
+- [コードレビュー](/ja/guide/code-review)
+- [プライバシーとローカルデータ](/ja/reference/privacy-local-data)
diff --git a/landing/product-docs/ja/reference/faq.md b/landing/product-docs/ja/reference/faq.md
new file mode 100644
index 00000000..7b4b755f
--- /dev/null
+++ b/landing/product-docs/ja/reference/faq.md
@@ -0,0 +1,95 @@
+---
+title: FAQ – Agent Teams ドキュメント
+description: Agent Teams に関するよくある質問 — 料金、モデルアクセス、ランタイム、プライバシー、レビュー、トラブルシューティングについて。
+lang: ja-JP
+---
+
+# FAQ
+
+## Agent Teams は無料ですか?
+
+はい。アプリは無料でオープンソースです。使用する内容によっては、プロバイダーやランタイムのアクセスに費用がかかる場合があります。
+
+## Agent Teams にモデルアクセスは含まれていますか?
+
+いいえ。Agent Teams はローカルのオーケストレーションおよび UI レイヤーです。モデルアクセスは、選択したランタイム/プロバイダーの経路(Claude Code、Codex、OpenCode など)から提供されます。
+
+## どのランタイムがサポートされていますか?
+
+サポートされているランタイムの経路は Claude Code、Codex、OpenCode です。また、ランタイムが公開している場合、アプリは Anthropic、Codex、Gemini、OpenCode などのプロバイダー id も追跡します。
+
+## 先に Claude Code や Codex をインストールする必要がありますか?
+
+必ずしも必要ではありません。アプリは UI からランタイムの検出とセットアップをガイドします。一部の経路では、外部ランタイムの認証が依然として必要です。
+
+OpenCode のセットアップは、Claude Code や Codex のセットアップとは別です。起動に失敗した場合は、チームプロンプトを変更する前に、ランタイムのステータスとプロバイダー認証を確認してください。
+
+## ランタイムが準備できているかどうかを確認するには?
+
+まずターミナルでランタイムのコマンドを実行します:
+
+```bash
+claude --version
+codex --version
+opencode --version
+```
+
+次に、選択した経路のプロバイダー認証を確認します。コマンドや認証チェックが Agent Teams の外で失敗する場合は、チームを起動する前にセットアップを修正してください。
+
+## 私のコードを Agent Teams のサーバーにアップロードしますか?
+
+いいえ。Agent Teams はクラウドのコード同期サービスではありません。選択したランタイムによっては、プロバイダーを介したモデル呼び出しがプロンプトのコンテキストを受け取る場合があります。
+
+## チームファイルはどこに保存されますか?
+
+チームの調整データはローカルの `~/.claude/teams//`(macOS/Linux)または `%APPDATA%\Claude\teams\\`(Windows)に保存され、タスクファイルは `~/.claude/tasks//` または `%APPDATA%\Claude\tasks\\` に、プロジェクトのセッションデータは利用可能な場合 `~/.claude/projects//` に保存されます。
+
+## 私のマシンから何が外部に出ていく可能性がありますか?
+
+エージェントがプロバイダーを介したモデルを使用するとき、プロンプトのコンテキスト、選択したファイルの内容、ツールの結果、コマンドの出力、タスクのテキスト、コメント、添付ファイルが、ランタイム/プロバイダーの経路を通じてマシンから外部に出ていく可能性があります。正確な挙動はランタイムとプロバイダーによって異なります。
+
+## エージェント同士は会話できますか?
+
+はい。エージェントはチームメイトにメッセージを送ったり、タスクにコメントしたり、チームをまたいで調整したり、タスク参照を使って会話を作業に紐づけたままにしたりできます。
+
+## 最初のチームプロンプトには何を入れるべきですか?
+
+リードに対して、具体的な成果、ファイルや機能の境界、リスクの制限、検証の期待値を与えてください。例えば:
+
+```text
+Improve the docs quickstart. Keep edits inside landing/product-docs, add practical examples, and run `pnpm --dir landing docs:build` before marking work done.
+```
+
+## 受け入れる前にコードをレビューできますか?
+
+はい。レビューフローは、タスク単位の差分とハンク単位の判断を中心に設計されています。
+
+## Agent Block とは何ですか?
+
+Agent Block は、`... ` などのマーカーで囲まれた、エージェント専用の非表示テキストです。アプリは通常のユーザー向け表示からそれを取り除きますが、エージェントの調整のために利用できる状態を保ちます。
+
+## ソロモードとは何ですか?
+
+ソロモードは 1 エージェントのチームです。小規模なタスクや、調整のオーバーヘッドを抑えたい場合に役立ちます。
+
+## worktree の分離を使うべきですか?
+
+複数の OpenCode チームメイトが同じ Git プロジェクトを並行して編集する可能性がある場合に使用してください。ファイルの競合を減らしますが、Git で追跡されているプロジェクトが必要であり、現時点では OpenCode のメンバーに適用されます。
+
+## チームメイトごとに異なるプロバイダーを使えますか?
+
+はい。選択したランタイムの経路が対応している場合、プロバイダー/モデルの設定をチームメンバーごとに引き継げます。OpenCode は、幅広いマルチプロバイダーのルーティングを行うための主要な経路です。
+
+## なぜタスクが done とは別に review や approved を表示するのですか?
+
+作業の状態とレビューの状態は関連していますが、同一ではありません。タスクはエージェントの観点では done になっても、その後かんばん UI で review と approval の段階を進んでいくことがあります。
+
+## 起動がハングしたときはどうすればよいですか?
+
+トラブルシューティングを開き、起動の診断情報を収集し、`~/.claude/teams//` を確認し、プロンプトを変更する前にランタイム/プロバイダーの認証を確認してください。
+
+OpenCode の場合は、チームメイトがオンラインなのにメッセージを無視していると判断する前に、レーン/セッションの証跡を確認してください。
+
+## なぜランタイムによってログが異なるのですか?
+
+Claude Code、Codex、OpenCode は、それぞれ異なるトランスクリプト形式とランタイムの証跡を公開します。Agent Teams は可能な範囲で正規化しますが、ログの完全性や帰属はランタイムによって異なる場合があります。
diff --git a/landing/product-docs/ja/reference/privacy-local-data.md b/landing/product-docs/ja/reference/privacy-local-data.md
new file mode 100644
index 00000000..d8a405d6
--- /dev/null
+++ b/landing/product-docs/ja/reference/privacy-local-data.md
@@ -0,0 +1,82 @@
+---
+title: プライバシーとローカルデータ – Agent Teams ドキュメント
+description: Agent Teams がローカルに保存するもの、プロバイダー経由のモデル呼び出しによってマシンの外に出る可能性があるもの、そして実践的なプライバシーガイダンスについて。
+lang: ja-JP
+---
+
+# プライバシーとローカルデータ
+
+Agent Teams はローカルファーストですが、選択したランタイム/プロバイダーの経路は依然として重要です。このページでは、デスクトップアプリがローカルに保存するものと、エージェントがプロバイダー経由のモデルを呼び出す際にマシンの外に出る可能性があるものについて説明します。
+
+## ローカルに留まるもの
+
+デスクトップアプリはあなたのマシン上で動作し、ローカルのプロジェクト/ランタイムデータを読み取って UI を動かします。一般的なローカルデータには次のものが含まれます。
+
+- プロジェクトファイル
+- チーム構成とメンバーのメタデータ
+- タスクのメタデータ、タスクコメント、タスク参照
+- インボックスメッセージ
+- ランタイム/セッションのログ
+- 起動状態とブートストラップ診断
+- レビュー状態
+- ローカルのアプリ設定
+
+重要なローカルの場所には次のものが含まれます。
+
+| プラットフォーム | 場所 | 用途 |
+| --- | --- | --- |
+| macOS/Linux | `~/.claude/teams//` | チーム構成、メンバーのメタデータ、インボックス、起動状態、ブートストラップの証跡、ランタイム診断、送信メッセージの記録、kanban の状態、レビュー関連のチームファイル。 |
+| Windows | `%APPDATA%\Claude\teams\\` | 同じ — チーム構成、メンバーのメタデータ、インボックス、起動状態、診断。 |
+| macOS/Linux | `~/.claude/tasks//` | チームボード用の永続的なタスク JSON ファイル。 |
+| Windows | `%APPDATA%\Claude\tasks\\` | 同じ — 永続的なタスク JSON ファイル。 |
+| macOS/Linux | `~/.claude/projects//` | セッション履歴、コンテキスト分析、トランスクリプトに基づく UI に使用される Claude/Codex 形式のプロジェクトセッションファイル。 |
+| Windows | `%APPDATA%\Claude\projects\\` | 同じ — プロジェクトセッションファイル。 |
+
+正確なファイルはランタイムやアプリのバージョンによって異なる場合があります。起動のデバッグでは、最新の証跡は通常、該当する `~/.claude/teams//`(または `%APPDATA%\Claude\teams\\`)フォルダー以下にあります。
+
+## マシンの外に出る可能性があるもの
+
+Agent Teams 自体は、あなたのリポジトリ向けのクラウドコード同期サービスではありません。ボード、インボックス、ログ、レビュー UI を表示するために、プロジェクト全体を Agent Teams のサーバーへアップロードする必要はありません。
+
+ただし、エージェントがプロバイダー経由のモデルに作業を依頼する際には、プロンプトのコンテキスト、選択したファイルの内容、タスクのテキスト、コメント、ツールの結果、コマンドの出力、その他のランタイムが提供するコンテキストが、選択したランタイム/プロバイダーの経路を通じて送信される可能性があります。何が送信されるかは、ランタイム、モデル、ツール呼び出し、プロンプト、そしてプロバイダーの構成によって異なります。
+
+プロバイダー認証、プロバイダー側の保持、トレーニング、ロギング、地域ごとの処理、課金は、あなたが選択したプロバイダー/ランタイムによって管理されます。機密性の高いプロジェクトについては、それらのポリシーを確認してください。
+
+一般的な例:
+
+| アクション | ランタイム/プロバイダー経由で送信される可能性があるデータ |
+| --- | --- |
+| エージェントにファイルの編集を依頼する | タスクのプロンプト、関連するファイルの内容、ツールの結果、コマンドの出力 |
+| スクリーンショットを添付する | 添付内容と、その周辺のタスク/コメントのテキスト |
+| コードレビューを依頼する | 差分のコンテキスト、選択したファイル、コメント、検証ログ |
+| 失敗したコマンドをデバッグする | エラー出力、スタックトレース、参照されたソーススニペット |
+
+## アプリが保証しないこと
+
+- プロバイダー経由のモデル呼び出しがプライベートなコードを決して受け取らないことを保証できません。
+- プロバイダーの保持ポリシーや課金ポリシーを上書きすることはできません。
+- リモートのプロバイダーを完全にローカルなモデルのように振る舞わせることはできません。
+- プロンプト、タスクコメント、ファイル、コマンドへ貼り付けるようエージェントに指示された秘密情報を保護することはできません。
+- すべてのランタイムが同じトランスクリプトや監査の詳細を公開するようにすることはできません。
+
+## 実践的なガイダンス
+
+- 秘密情報をタスク、コメント、ダイレクトメッセージに添付しないでください。
+- 機密性の高いプロジェクトについては、プロバイダーのポリシーを確認してください。
+- リスクのあるリポジトリでは、より低い自律性を使用してください。
+- プライベートなコードを扱う際は、タスクの範囲を狭く保ってください。
+- デバッグの際は、ローカルの証跡とログを優先してください。
+- 機密性の高い素材についてエージェントに作業を依頼する前に、生成されたプロンプト、タスクの説明、添付ファイルを確認してください。
+- あなたのプライバシー要件に合ったプロバイダー/モデルの経路を使用してください。
+
+機密性の高いリポジトリで Agent Teams を使用する前に:
+
+1. ワーキングツリーとタスクの添付ファイルから秘密情報を削除する
+2. 使用が許可されているランタイム/プロバイダーの経路を選択する
+3. 低い自律性と小さなタスクから始める
+4. 範囲を広げる前に、タスクのプロンプトと生成されたコメントを確認する
+5. サポートのために意図的に共有する場合を除き、ログをローカルに保つ
+
+## オープンソースモデル
+
+アプリ自体はオープンソースかつ無料です。ローカルのオーケストレーション、タスク追跡、インボックス、ランタイム診断、レビューフローがどのように動作するかを、リポジトリで確認できます。
diff --git a/landing/product-docs/ja/reference/providers-runtimes.md b/landing/product-docs/ja/reference/providers-runtimes.md
new file mode 100644
index 00000000..a292e11c
--- /dev/null
+++ b/landing/product-docs/ja/reference/providers-runtimes.md
@@ -0,0 +1,115 @@
+---
+title: プロバイダーとランタイム – Agent Teams ドキュメント
+description: 対応するランタイムパス(Claude Code、Codex、OpenCode)、プロバイダー ID、モデルの命名、マルチプロバイダー戦略、機能チェックについて。
+lang: ja-JP
+---
+
+# プロバイダーとランタイム
+
+Agent Teams はオーケストレーションとモデルアクセスを分離します。アプリはチーム、タスク、メッセージ、起動状態、レビュー UI を管理し、選択したランタイム/プロバイダーパスが実際のモデル処理を実行します。
+
+## アプリが提供するもの
+
+Agent Teams が提供するもの:
+
+- チームとタスクのオーケストレーション
+- かんばんボード UI
+- チームメイトのメッセージング
+- タスクログ
+- レビュー UI
+- ローカルプロジェクト連携
+- ランタイム検出と機能チェック
+- ローカルログと診断
+
+## ランタイムが提供するもの
+
+ランタイムが提供するもの:
+
+- モデルの実行
+- プロバイダー認証
+- ツール実行の挙動
+- モデル固有のレート制限と機能
+- ランタイム固有のトランスクリプトと配信の証跡
+
+## 対応するランタイムパス
+
+| ランタイムパス | プロバイダー/モデルのパス | 最適な用途 | 備考 |
+| --- | --- | --- | --- |
+| Claude Code | Anthropic / Claude モデル | Claude Code ユーザーおよび Anthropic を基盤とするワークフロー | Claude チーム向けのデフォルトのローカルファーストパス。ランタイムとアカウントアクセスがローカルで利用可能である必要があります。 |
+| Codex | Codex / OpenAI を基盤とするモデル | Codex ネイティブのワークフロー | Codex ランタイム連携と、利用可能な場合は Codex の認証/アカウント状態を使用します。一部の診断は Claude のトランスクリプトとは異なります。 |
+| OpenCode | OpenCode が管理するモデルルーティング | マルチプロバイダーのチームと広範なモデルカバレッジ | OpenCode は多数のモデルプロバイダーを経由してルーティングできます。Agent Teams は OpenCode のレーンをランタイム固有の証跡として扱い、レーンの識別があいまいな場合は推測を行いません。 |
+
+Gemini は、Google ADC(gcloud auth)、Gemini CLI の OAuth、API キー認証を用いた、対応プロバイダーパスとして利用できます。ランタイムが利用可能と報告した場合、チーム作成およびランタイム設定の UI で他のプロバイダーと並んで表示されます。
+
+## プロバイダー ID
+
+アプリは現在、チーム/ランタイム設定で次のプロバイダー ID を認識します:
+
+| プロバイダー ID | 表示の意図 |
+| --- | --- |
+| `anthropic` | Anthropic / Claude Code パス |
+| `codex` | Codex パス |
+| `gemini` | Gemini プロバイダーパス(Google ADC、Gemini CLI、または API キー) |
+| `opencode` | OpenCode パス(OpenCode が管理するプロバイダールーティングを含む) |
+
+この表を、すべてのプロバイダーがすべてのマシン上のすべてのモデルについて認証済み・インストール済み・利用可能であることの保証として読まないでください。特定の起動については、ランタイムのステータスと機能チェックが信頼できる情報源です。
+
+## モデル ID
+
+モデル ID は選択したランタイムに渡されます。Agent Teams はプロバイダーのモデルカタログを汎用的な命名スキームに書き換えることはありません。
+
+例:
+
+| プロバイダーパス | モデル ID の例 | 備考 |
+| --- | --- | --- |
+| Claude Code | `opus`、`sonnet`、または Claude モデルの完全な ID | 利用可否は Claude Code とアカウントアクセスに依存します |
+| Codex | `gpt-5.4`、`gpt-5.3-codex` | 利用可否は Codex のアカウント/ランタイム状態に由来します |
+| OpenCode | `openrouter/moonshotai/kimi-k2.6` | プレフィックスは OpenCode のプロバイダー設定と一致している必要があります |
+
+モデル名が拒否される場合は、まずランタイム/プロバイダーで直接確認してください。チームブリーフを変更しても、利用不可のモデルを起動できるようにはなりません。
+
+## マルチプロバイダー戦略
+
+Agent Teams はオーケストレーションをプロバイダーを意識したものに保ちますが、プロバイダーに所有されることはありません:
+
+- チーム、タスク、受信トレイ、コメント、レビュー状態、起動診断はローカルの Agent Teams ストレージに保持されます
+- 各メンバーはチーム起動メタデータを通じてプロバイダー/モデル設定を保持できます
+- モデルの利用可否、認証、レート制限、ツールの挙動はランタイム/プロバイダーの責務のままです
+- 1 つのチームで複数のプロバイダー/モデルレーンを使用したい場合、OpenCode が最も広範なルーティングパスです
+
+コントリビューター向けの境界と正規の実装ガイダンスについては、[コントリビューター向けアーキテクチャ](/ja/reference/contributor-architecture)を参照してください。
+
+推奨パターン:
+
+| パターン | 役立つ場面 | リスク |
+| --- | --- | --- |
+| すべてのメンバーに 1 つのプロバイダー | 初回の起動、機密性の高いリポジトリ、最もシンプルなデバッグ | 共有のレート制限がチーム全体を停止させる可能性があります |
+| 強力なリード + 安価なビルダー | 実装コストを抑えつつ、計画/レビューの信頼性を維持する | ビルダーの出力にはより厳格なレビューが必要になる場合があります |
+| ビルダーとレビュアーでモデルを分ける | モデル固有の見落としを捕捉する | セットアップと確認すべき帰属がより多くなります |
+
+## プロバイダーのコスト
+
+Agent Teams は無料でオープンソースです。同梱の無料モデルを使えば、認証なしで始められます。登録も API キーもクレジットカードも不要です。有料またはアカウントを基盤とするプロバイダーの利用は、選択したランタイム/プロバイダーによって管理されます。サブスクリプションの制限、API キー、アカウント認証、レート制限、プロバイダーのポリシーはすべて、アプリの外部に残ります。
+
+## 機能チェック
+
+セットアップ中、アプリはアクセスおよび機能のチェックを実行する場合があります。これは、チームの起動がプロビジョニングの途中で失敗する前に、不足しているランタイム認証を検出するのに役立ちます。
+
+機能チェックは、プロバイダーは存在するが認証されていないこと、モデルリストが利用できないこと、ランタイムパスが見つからないこと、または特定の拡張機能がサポートされていないことを報告できます。それらの結果は、タスクの失敗ではなく、セットアップの診断として扱ってください。
+
+一般的なセットアップの修正方法:
+
+| チェック結果 | 対処方法 |
+| --- | --- |
+| ランタイムが見つからない | CLI をインストールするか、`PATH` を修正します |
+| プロバイダーが未認証 | プロバイダーのログインフローを実行するか、必要な API キーを追加します |
+| モデルが利用不可 | そのランタイムのモデルリストに表示されているモデルを選択します |
+| 機能がサポートされていない | そのチームメイトには別のランタイムパスを使用します |
+
+## 想定すべき制限
+
+- ランタイムがサポートされているからといって、Claude Code、Codex、OpenCode の間で同等の機能パリティがあるとは限りません。
+- ログとトランスクリプトのカバレッジはランタイムによって異なります。
+- OpenCode のレーンは、アプリがランタイムログを安全に帰属させられるようになる前に、安定したレーン/セッションの証跡を必要とします。
+- プロバイダーのモデル名と利用可否は、アプリの外部で変わる可能性があります。
+- チームのプロンプトでは、不足している認証、不足している PATH エントリ、プロバイダーの障害、枯渇したレート制限を修正することはできません。
diff --git a/landing/product-docs/ja/reference/release-notes.md b/landing/product-docs/ja/reference/release-notes.md
new file mode 100644
index 00000000..be67d99a
--- /dev/null
+++ b/landing/product-docs/ja/reference/release-notes.md
@@ -0,0 +1,42 @@
+---
+title: リリースノート – Agent Teams ドキュメント
+description: Agent Teams のリリースノートと変更履歴です。詳細は正規の RELEASE.md と CHANGELOG.md へのリンクをご覧ください。
+lang: ja-JP
+---
+
+# リリースノート
+
+現在のリリース: **v1.2.0**(2026-03-31)。`main` ブランチでは引き続き活発な開発が行われており、メンバーの作業同期、OpenCode 配信の堅牢化、CI の安定化に関する未リリースの変更があります。
+
+## リリースの仕組み
+
+Agent Teams は [セマンティック バージョニング](https://semver.org/) に従っています。リポジトリにプッシュされたタグは、自動の [リリースワークフロー](https://github.com/777genius/agent-teams-ai/blob/main/docs/RELEASE.md) をトリガーし、macOS、Windows、Linux 向けの署名済みパッケージをビルドして、GitHub Releases に公開します。
+
+## 最近のリリース
+
+### v1.2.0 — Agent Graph、チーム単位のツール承認、対話型 AskUserQuestion
+
+力学的レイアウトによる可視化とかんばんタスクレイアウトを備えた Agent Graph、読みやすい権限プロンプトを備えたチーム単位のツール承認コントロール、タスクコメント通知、対話型の AskUserQuestion ボタン。Write/Edit/NotebookEdit のシードと MCP ツールカタログ連携を含む権限システムの全面刷新。詳しくは [変更履歴の全文](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md#120---2026-03-31) をご覧ください。
+
+### v1.1.0 — React 19 + Electron 40、ユーザー起点のタスク開始
+
+React 19 + Electron 40 への移行、かんばんボードからのユーザー起点のタスク開始、認証のトラブルシューティングガイド、R/Ruby/PHP/SQL のシンタックスハイライト、3 倍高速化したトランスクリプト検索、WSL/Windows のパス修正、XSS 脆弱性の修正。詳しくは [変更履歴の全文](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md#110---2026-03-25) をご覧ください。
+
+### v1.0.0 — 初回の一般公開リリース
+
+最初の安定版ビルド: パッケージ化されたアプリでの CLI/認証の信頼性、IPC の堅牢化、署名済みの macOS ビルドを含むクロスプラットフォームのパッケージング、オープンソースのガバナンス文書(LICENSE、CONTRIBUTING、CODE_OF_CONDUCT、SECURITY)。詳しくは [変更履歴の全文](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md#100---2026-03-23) をご覧ください。
+
+## 正規の情報源
+
+| ドキュメント | 説明 |
+| --- | --- |
+| [RELEASE.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/RELEASE.md) | リリースプロセス、バージョニングガイド、成果物の命名、自動更新のセットアップ、リリースノートのテンプレート。 |
+| [CHANGELOG.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md) | すべてのバージョンの機能、改善、バグ修正をユーザー視点でまとめた変更履歴の全文。 |
+| [GitHub Releases](https://github.com/777genius/agent-teams-ai/releases) | すべてのプラットフォーム向けのダウンロード可能なインストーラー。 |
+
+## 関連ページ
+
+- [インストール](/ja/guide/installation)
+- [クイックスタート](/ja/guide/quickstart)
+- [コントリビューター向けアーキテクチャ](/ja/reference/contributor-architecture)
+- [開発者向け](/ja/developers/)
diff --git a/landing/product-docs/ru/guide/beginner-workflow.md b/landing/product-docs/ru/guide/beginner-workflow.md
new file mode 100644
index 00000000..9dd2670a
--- /dev/null
+++ b/landing/product-docs/ru/guide/beginner-workflow.md
@@ -0,0 +1,109 @@
+---
+title: "Путь новичка - Документация Agent Teams"
+description: "Структурированный первый запуск для новых пользователей: проект, команда, доска задач, карточка задачи и ревью."
+lang: ru-RU
+---
+
+# Путь новичка
+
+Этот маршрут нужен, если вы впервые открыли Agent Teams и хотите пройти путь от запуска приложения до безопасного approval результата.
+
+Первый запуск должен доказать четыре вещи:
+
+1. Приложение открывает ваш проект.
+2. Небольшая команда запускается с выбранным runtime.
+3. Задачи двигаются по доске и их состояние видно.
+4. Вы можете проверить изменения до approval.
+
+## Базовая модель
+
+В Agent Teams есть четыре основные рабочие поверхности:
+
+| Поверхность | Что там делать |
+| --- | --- |
+| Project и team selector | Выбрать проект и команду, которая будет в нём работать. |
+| Team editor | Назвать команду, добавить участников, выбрать роли, модели и worktree-настройки. |
+| Task board | Смотреть, как задачи проходят Todo, In Progress, Review, Done и Approved. |
+| Task detail и review | Читать задачу, проверять логи, смотреть изменения и approve/request fixes. |
+
+
+
+## Рекомендуемый порядок гайдов
+
+Для первого успешного запуска идите в таком порядке:
+
+1. [Создать первую команду](/ru/guide/create-first-team) - собрать небольшую команду lead-builder-reviewer.
+2. [Запустить и отслеживать работу](/ru/guide/run-and-monitor-work) - дать lead конкретную цель и следить за task board.
+3. [Проверить и approve](/ru/guide/review-and-approve) - проверить task detail, logs и code changes.
+4. [Диагностика](/ru/guide/troubleshooting) - если запуск, сообщения или task logs выглядят неправильно.
+
+## Перед запуском
+
+Начинайте с Git-проекта и понятного baseline:
+
+```bash
+git status --short
+```
+
+Чистое дерево не обязательно, но важно понимать, какие изменения уже были до запуска агентов.
+
+Для первого запуска держите команду маленькой:
+
+| Участник | Первая ответственность |
+| --- | --- |
+| Lead | Разбивает цель на задачи и координирует статус. |
+| Builder | Делает ограниченные implementation tasks. |
+| Reviewer | Проверяет завершённые задачи и просит исправления. |
+
+Не запускайте сразу много участников. Больше агентов - больше логов, параллельных правок, provider usage и review-нагрузки.
+
+## Шаблон первой цели
+
+Цель должна иметь scope, границы и verification:
+
+```text
+Improve the documentation quickstart. Keep edits inside landing/product-docs, add practical examples, preserve existing VitePress syntax, and run `pnpm --dir landing docs:build` before marking tasks done.
+```
+
+Хорошая первая цель конкретная, проверяемая и ограничена известной областью.
+
+## Как выглядит здоровый прогресс
+
+В здоровом запуске:
+
+- lead создаёт маленькие задачи, а не одну огромную
+- каждый teammate пишет план или progress comment
+- работа двигается из Todo в In Progress
+- завершённая работа попадает в Review до approval
+- task detail показывает description, attachments, changes и execution logs
+- финальный comment содержит verification command и result
+
+## Когда вмешиваться
+
+Вмешивайтесь, если задача слишком широкая, размытая, заблокирована или без verification. Пишите task comment, если сообщение относится к конкретной задаче. Пишите direct message, если надо перенаправить teammate или lead.
+
+Примеры:
+
+```text
+Split this into smaller tasks. Each task should have a narrow file scope and a clear verification step.
+```
+
+```text
+Before continuing, post the files you plan to change and the command you will run to verify the result.
+```
+
+```text
+This task is too broad. Keep the change inside the docs guide pages and avoid touching app runtime code.
+```
+
+## Checklist завершения
+
+Первый запуск можно считать успешным, если:
+
+- команда запустилась без runtime errors
+- хотя бы одна задача прошла через Review
+- вы открыли и проверили diff
+- result comment содержит verification result
+- понятно, какие файлы изменились и почему
+
+Дальше: [Создать первую команду](/ru/guide/create-first-team).
diff --git a/landing/product-docs/ru/guide/create-first-team.md b/landing/product-docs/ru/guide/create-first-team.md
new file mode 100644
index 00000000..3307dfda
--- /dev/null
+++ b/landing/product-docs/ru/guide/create-first-team.md
@@ -0,0 +1,112 @@
+---
+title: "Создать первую команду - Документация Agent Teams"
+description: "Пошаговая настройка первой команды: lead, builder, reviewer, роли, модели, worktree isolation и launch brief."
+lang: ru-RU
+---
+
+# Создать первую команду
+
+Цель первого setup - не собрать самую большую команду, а создать маленькую команду, которая стабильно запускается и делает reviewable tasks.
+
+## 1. Откройте проект
+
+Откройте проект, в котором агенты будут работать. Лучше использовать Git-проект, чтобы Agent Teams мог показывать diff, task-linked changes и review state.
+
+Перед запуском проверьте baseline:
+
+```bash
+git status --short
+```
+
+Если уже есть ваши изменения, учитывайте их при review.
+
+## 2. Создайте команду
+
+Через team selector создайте новую команду для текущего проекта. Название держите коротким и рабочим: `docs-onboarding`, `landing-fixes`, `runtime-audit`.
+
+
+
+## 3. Начните с трёх ролей
+
+Рекомендуемая первая форма команды:
+
+| Роль | Ответственность | Зачем |
+| --- | --- | --- |
+| Lead | Делит цель на задачи, назначает owners, отслеживает blockers. | Держит работу скоординированной. |
+| Builder | Делает scoped implementation tasks. | Создаёт основное изменение. |
+| Reviewer | Проверяет completed tasks и просит fixes. | Не даёт непроверенному результату стать финальным. |
+
+Специалистов можно добавить позже. Для первого запуска маленькую команду легче диагностировать и ревьюить.
+
+## 4. Выберите provider и model для каждого
+
+Каждому участнику нужен provider и model. Для lead выбирайте самый надёжный runtime, потому что lead управляет decomposition и coordination.
+
+Обычная первая настройка:
+
+| Участник | Какой provider выбрать |
+| --- | --- |
+| Lead | Самую надёжную модель из доступных. |
+| Builder | Быструю модель для scoped implementation. |
+| Reviewer | Более аккуратную модель с сильным reasoning. |
+
+Если provider отсутствует, сначала исправьте runtime setup: [Настройка рантайма](/ru/guide/runtime-setup).
+
+## 5. Решите, нужен ли Worktree
+
+Включайте **Worktree**, когда участники могут параллельно менять один репозиторий и нужна Git-изоляция. Для самого простого первого запуска можно оставить выключенным.
+
+Worktree полезен, когда:
+
+- несколько teammates могут одновременно менять код
+- нужны более чистые diffs по участникам
+- проект уже является Git-репозиторием
+
+Не включайте Worktree, если:
+
+- проект не в Git
+- вы только проверяете UI flow
+- хотите минимум движущихся частей в первом запуске
+
+## 6. Напишите инструкции участникам
+
+Member prompt должен описывать ответственность участника, а не весь проект.
+
+Lead:
+
+```text
+Split the user goal into small tasks. Assign clear owners, avoid broad refactors, keep task comments updated, and request review before approval.
+```
+
+Builder:
+
+```text
+Implement only the assigned task. Keep changes scoped, post the files you changed, and include the verification command and result before marking work complete.
+```
+
+Reviewer:
+
+```text
+Review completed tasks for correctness, regressions, missing tests, and scope creep. Ask for fixes with specific comments before approving.
+```
+
+## 7. Запустите с узкой целью
+
+Launch brief должен содержать outcome, scope, boundaries и verification:
+
+```text
+Improve the docs onboarding path. Keep changes inside landing/product-docs. Create a beginner-friendly guide sequence, add practical examples, preserve VitePress syntax, and run `pnpm --dir landing docs:build`.
+```
+
+## 8. Проверьте, что запуск здоровый
+
+После запуска:
+
+- lead создаёт задачи
+- хотя бы один teammate начинает задачу
+- board показывает движение в In Progress
+- task comments или logs показывают, что делает teammate
+
+Если запуск завис или задач нет, откройте [Диагностику](/ru/guide/troubleshooting#team-does-not-launch).
+
+Дальше: [Запустить и отслеживать работу](/ru/guide/run-and-monitor-work).
diff --git a/landing/product-docs/ru/guide/review-and-approve.md b/landing/product-docs/ru/guide/review-and-approve.md
new file mode 100644
index 00000000..b3de221d
--- /dev/null
+++ b/landing/product-docs/ru/guide/review-and-approve.md
@@ -0,0 +1,89 @@
+---
+title: "Проверить и approve - Документация Agent Teams"
+description: "Понятный workflow ревью: task detail, execution logs, code changes, hunk decisions, approvals и fix requests."
+lang: ru-RU
+---
+
+# Проверить и approve
+
+Не считайте работу агента завершённой, пока не проверили результат задачи, logs и changes. Review удерживает качество и scope.
+
+## 1. Откройте задачу
+
+Начните с задачи в Review или Done. Сначала прочитайте title, owner, status и description.
+
+
+
+Проверьте:
+
+- понятная ли цель задачи
+- совпадают ли файлы с ожидаемым scope
+- есть ли final comment от teammate
+- есть ли verification command и result
+
+## 2. Проверьте execution evidence
+
+Execution Logs отвечают на базовые вопросы доверия:
+
+| Вопрос | Что искать |
+| --- | --- |
+| Агент реально работал над этой задачей? | Tool calls, comments и status changes внутри task timeline. |
+| Он запускал verification? | Build, test, lint или docs commands с результатом. |
+| Он координировался с другими? | Messages или comments с handoffs и blockers. |
+| Он трогал неожиданные файлы? | Changes, которые не совпадают с task description. |
+
+Если logs и final comment расходятся, попросите уточнение до approval.
+
+## 3. Проверьте diff
+
+Откройте **Changes** и просмотрите каждый changed file.
+
+
+
+Порядок:
+
+1. Прочитать file list.
+2. Открыть каждый changed file.
+3. Проверить, что изменения совпадают с задачей.
+4. Keep для правильных hunks.
+5. Undo или reject для рискованных hunks.
+6. Approve только после проверки важных files.
+
+## 4. Просите fixes конкретно
+
+Если что-то не так, не ограничивайтесь reject. Оставьте конкретный fix request:
+
+```text
+Please keep the copy improvements, but revert the unrelated runtime wording in the provider table. Add the `pnpm --dir landing docs:build` result before resubmitting.
+```
+
+Хороший fix request называет:
+
+- что оставить
+- что изменить
+- чего избегать
+- какая verification обязательна
+
+## 5. Approve только полный результат
+
+Approve уместен, когда:
+
+- task scope закрыт
+- diff совпадает с задачей
+- verification прошёл или отсутствие verification объяснено
+- нет unrelated changes
+- comments объясняют важные решения
+
+Если task менял docs или UI, перед approval откройте соответствующую страницу или экран приложения.
+
+## 6. Финальный checklist
+
+Перед закрытием review:
+
+- изменённые files ожидаемые
+- есть final result comment
+- есть verification result
+- risky hunks проверены отдельно
+- lead или reviewer поставил approved
+
+Если что-то непонятно, request changes лучше, чем approve.
diff --git a/landing/product-docs/ru/guide/run-and-monitor-work.md b/landing/product-docs/ru/guide/run-and-monitor-work.md
new file mode 100644
index 00000000..a926b308
--- /dev/null
+++ b/landing/product-docs/ru/guide/run-and-monitor-work.md
@@ -0,0 +1,101 @@
+---
+title: "Запустить и отслеживать работу - Документация Agent Teams"
+description: "Как дать lead понятный brief, читать task board, использовать messages и comments, открывать task detail и удерживать работу в движении."
+lang: ru-RU
+---
+
+# Запустить и отслеживать работу
+
+После запуска команды ваша задача - держать работу видимой, ограниченной и готовой к review. Главная поверхность - board.
+
+## 1. Дайте lead понятный brief
+
+Lead нужна цель, которую можно разбить на задачи. Укажите:
+
+- outcome
+- разрешённые файлы или область продукта
+- что не трогать
+- verification commands
+- когда просить review
+
+Хороший brief:
+
+```text
+Create a beginner docs path. Keep edits inside landing/product-docs. Add screenshots where they clarify actions. Do not touch runtime code. Run `pnpm --dir landing docs:build` before marking tasks complete.
+```
+
+Слабый brief:
+
+```text
+Improve docs.
+```
+
+Слабый brief даёт lead слишком много свободы и усложняет review.
+
+## 2. Читайте board по колонкам
+
+
+
+| Колонка | Что значит | Что делать |
+| --- | --- | --- |
+| Todo | Задачи есть, но ещё не активны. | Проверить, достаточно ли конкретные titles. |
+| In Progress | Teammate активно работает. | Смотреть updates и не назначать duplicate work. |
+| Review | Работу нужно проверить. | Открыть task и review changes. |
+| Done | Работа завершена, но может требовать review flow. | Проверить review state перед доверием результату. |
+| Approved | Review прошёл. | Считать результат завершённым. |
+
+## 3. Используйте messages и comments осознанно
+
+Task comments подходят для контекста конкретной задачи:
+
+```text
+Please keep this task scoped to the quickstart page. Do not change runtime setup wording in this pass.
+```
+
+Direct messages подходят для координации:
+
+```text
+Lead, pause new task creation until the current review queue is cleared.
+```
+
+Если возможно, предпочитайте task comments. Они остаются привязанными к работе.
+
+## 4. Открывайте task detail, когда карточке нужно внимание
+
+Открывайте task detail, если:
+
+- title слишком размытый
+- задача слишком долго in progress
+- задача готова к review
+- output упоминает неожиданные файлы
+- нужно проверить attachments, changes или logs
+
+
+
+## 5. Разблокируйте работу
+
+Если teammate заблокирован, попросите минимальный следующий шаг:
+
+```text
+Post the blocker, the file or command involved, and the next action you need from the lead or user.
+```
+
+Если задача слишком большая, попросите lead разделить её:
+
+```text
+Split this into separate tasks for copy edits, screenshot assets, and navigation updates. Keep each task independently reviewable.
+```
+
+## 6. Когда остановить команду
+
+Остановите или поставьте на паузу, если:
+
+- review queue больше, чем вы можете проверить
+- lead повторно создаёт размытые задачи
+- runtime errors появляются в нескольких задачах
+- агенты начали менять unrelated files
+- completed work не содержит verification
+
+Команду можно перезапустить после уточнения brief.
+
+Дальше: [Проверить и approve](/ru/guide/review-and-approve).
diff --git a/landing/product-docs/ru/index.md b/landing/product-docs/ru/index.md
index f74cde89..50dde499 100644
--- a/landing/product-docs/ru/index.md
+++ b/landing/product-docs/ru/index.md
@@ -9,8 +9,8 @@ hero:
tagline: Создавайте команды, наблюдайте за канбан-доской, ревьюйте изменения и координируйте Claude, Codex, OpenCode и multimodel workflows без потери локального контроля.
actions:
- theme: brand
- text: Быстрый старт
- link: /ru/guide/quickstart
+ text: Путь новичка
+ link: /ru/guide/beginner-workflow
- theme: alt
text: Установка
link: /ru/guide/installation
@@ -63,6 +63,10 @@ Agent Teams - бесплатное desktop-приложение для орке
После создания первой команды изучите эти руководства:
- **Настройка рантайма** - настройте Claude, Codex, OpenCode или multimodel-провайдеров: [Настроить рантаймы](/ru/guide/runtime-setup)
+- **Путь новичка** - полный первый маршрут от проекта до approval: [Начать walkthrough](/ru/guide/beginner-workflow)
+- **Создать первую команду** - lead, builder, reviewer, роли, модели и Worktree: [Создать команду](/ru/guide/create-first-team)
+- **Запустить и отслеживать работу** - board, comments, task detail и logs: [Запустить работу](/ru/guide/run-and-monitor-work)
+- **Проверить и approve** - task results и code changes до approval: [Проверить работу](/ru/guide/review-and-approve)
- **Workflow агентов** - как агенты координируются через task board: [Разобрать workflow](/ru/guide/agent-workflow)
- **Примеры team briefs** - паттерны промптов из реальных примеров: [Примеры](/ru/guide/team-brief-examples)
- **Код-ревью** - проверяйте diff, принимайте или отклоняйте изменения: [Ревью изменений](/ru/guide/code-review)
@@ -78,4 +82,4 @@ Agent Teams - бесплатное desktop-приложение для орке
## Превью продукта
-
+
diff --git a/landing/product-docs/tsconfig.json b/landing/product-docs/tsconfig.json
new file mode 100644
index 00000000..ef62ebe0
--- /dev/null
+++ b/landing/product-docs/tsconfig.json
@@ -0,0 +1,15 @@
+{
+ "compilerOptions": {
+ "target": "ES2022",
+ "module": "ESNext",
+ "moduleResolution": "Bundler",
+ "lib": ["ES2022", "DOM", "DOM.Iterable"],
+ "types": ["vitepress/client"],
+ "strict": true,
+ "skipLibCheck": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true
+ },
+ "include": [".vitepress/**/*.ts", ".vitepress/**/*.vue"]
+}
diff --git a/landing/product-docs/zh/developers/index.md b/landing/product-docs/zh/developers/index.md
new file mode 100644
index 00000000..31481ad9
--- /dev/null
+++ b/landing/product-docs/zh/developers/index.md
@@ -0,0 +1,69 @@
+---
+title: 开发者中心 – Agent Teams 文档
+description: 面向贡献者和开发者的 Agent Teams 入口,涵盖架构、护栏、调试以及 MCP 扩展路径。
+lang: zh-Hans
+---
+
+# 开发者中心
+
+当你想要修改 Agent Teams 本身、调试团队启动,或用 MCP 工具扩展某个运行时,请使用本页。下面的链接指向仓库中的权威文档,使实现规则集中在一处。
+
+## 从这里开始
+
+| 需求 | 前往 |
+| --- | --- |
+| 仓库概览、脚本与源码设置 | [README.md](https://github.com/777genius/agent-teams-ai/blob/main/README.md) |
+| 智能体导航与架构索引 | [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) |
+| 面向智能体与贡献者的工作约定 | [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) |
+| 硬性实现护栏 | [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) |
+| 中型与大型功能的结构 | [功能架构标准](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) |
+| 启动、引导与队友消息传递的调试 | [智能体团队调试手册](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) |
+| 贡献流程 | [贡献指南](https://github.com/777genius/agent-teams-ai/blob/main/.github/CONTRIBUTING.md) |
+| 发布说明 / 更新日志 | [RELEASE.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/RELEASE.md) — [CHANGELOG.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md) |
+
+## 本地开发路径
+
+运行桌面端 Electron 应用进行常规开发:
+
+```bash
+pnpm install
+pnpm dev
+```
+
+浏览器/网页路径并不能替代桌面端运行时。桌面模式是受支持的本地路径,因为它包含 IPC、终端、提供方鉴权、团队生命周期处理、启动诊断,以及真实团队所使用的运行时桥接。
+
+## 架构检查点
+
+在修改某个功能之前,先确定它的边界:
+
+| 区域 | 预期归属 |
+| --- | --- |
+| 中型或大型产品功能 | `src/features//` |
+| Electron 主进程编排 | `src/main/` |
+| Preload 安全 API 层 | `src/preload/` |
+| 渲染器 UI 与应用状态 | `src/renderer/` |
+| 共享类型与纯工具函数 | `src/shared/` |
+| Agent Teams 看板 MCP 服务器 | `mcp-server/` |
+| 看板数据控制器 | `agent-teams-controller/` |
+
+使用 `src/features/recent-projects` 作为功能组织的参考切片。保持跨进程契约的显式化,并避免跨功能边界进行深层导入。
+
+## 调试路径
+
+针对启动挂起、OpenCode 的 `registered` / 引导未确认状态、队友回复缺失,或可疑的任务日志:
+
+1. 从[调试手册](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md)开始。
+2. 检查 `~/.claude/teams//launch-failure-artifacts/latest.json` 下最新的产物包。
+3. 打开产物中的 `manifest.json`,检查 `classification`、引导面包屑、启动诊断、成员 spawn 状态以及经过脱敏的日志末尾片段。
+4. 仅清理你能确认归属于本次冒烟测试或失败启动的团队、运行、面板或进程。
+
+## MCP 开发路径
+
+Agent Teams 使用一个名为 `agent-teams` 的内置 MCP 服务器进行看板操作。用户级和项目级的 MCP 服务器可以为运行时添加外部能力。设置示例、`.mcp.json` 结构以及工具注册指引,参见 [MCP 集成](/zh/guide/mcp-integration)。
+
+## 相关文档
+
+- [贡献者架构](/zh/reference/contributor-architecture)
+- [运行时设置](/zh/guide/runtime-setup)
+- [MCP 集成](/zh/guide/mcp-integration)
+- [故障排查](/zh/guide/troubleshooting)
diff --git a/landing/product-docs/zh/guide/agent-workflow.md b/landing/product-docs/zh/guide/agent-workflow.md
new file mode 100644
index 00000000..248e3b01
--- /dev/null
+++ b/landing/product-docs/zh/guide/agent-workflow.md
@@ -0,0 +1,121 @@
+---
+title: 智能体工作流 – Agent Teams 文档
+description: 了解任务生命周期、看板、消息、任务日志、并行工作、实时进程以及跨团队通信。
+lang: zh-Hans
+---
+
+# 智能体工作流
+
+Agent Teams 通过任务状态、消息、日志以及可审查的代码变更,让智能体的工作变得可见。
+
+## 模式
+
+| 模式 | 说明 |
+| --- | --- |
+| Solo | 单个队友,自行管理任务 |
+| Team | 多个队友并行工作,互相审查 |
+
+两种模式共享相同的看板、任务日志和代码审查界面。
+
+## 任务生命周期
+
+Agent Teams 沿着两个独立维度跟踪每个任务:工作状态与审查状态。
+
+| 维度 | 状态 | 说明 |
+| --- | --- | --- |
+| 工作状态 | `pending`、`in_progress`、`completed` | 跟踪任务是处于等待、正在被处理,还是已被负责人完成 |
+| 审查状态 | `none`、`review`、`needsFix`、`approved` | 跟踪任务在完成后审查流程中所处的位置 |
+
+看板展示的是组合后的视图,但这两个维度各自独立移动。
+
+### 工作状态流转
+
+| 阶段 | 发生的事情 | 负责人 |
+| --- | --- | --- |
+| Pending | 任务已创建并就绪,但还没有人开始处理 | Lead 或用户 |
+| In progress | 智能体进行工作,并通过看板 MCP 工具更新任务状态 | 队友 |
+| Completed | 负责人发布一条结果评论,并将任务标记为完成 | 队友 |
+
+### 审查状态流转
+
+| 阶段 | 发生的事情 | 负责人 |
+| --- | --- | --- |
+| None | 任务尚未进入审查(可能处于 pending、in progress 或刚刚 completed) | — |
+| Review | 已请求审查;审查者检查 diff 与结果 | 审查者 |
+| Needs fix | 审查期间提出了变更要求;负责人必须更新 | 队友(负责人) |
+| Approved | 审查通过;任务定稿 | 审查者 |
+
+### 规划 → In progress
+
+当队友开始一项任务时,工作状态变为 `in_progress`。智能体创建一条包含其计划的任务评论,并继续工作。所有原生工具操作(read、bash、edit、write)都会被流式记录到任务日志中。
+
+### Completed → Review
+
+当队友完成工作后,它会发布一条结果评论,并将工作状态标记为 `completed`。随后 lead 或审查者可以请求审查,以启动审查流程。
+
+### Review → Approved
+
+如果审查界面显示变更可以接受,则批准该审查。任务随即定稿,并与其 diff 关联。
+
+::: warning Fix-first review
+如果在审查期间要求队友做出变更,它应当发布一条包含修复内容的后续评论,然后 lead 即可批准。
+:::
+
+## 看板
+
+看板是主要的操作界面。它让你能够:
+
+- 浏览处于打开、被阻塞和审查中的工作
+- 打开任务详情并查看运行时日志
+- 无需阅读原始会话文件即可审查变更
+- 指派或重新指派负责人
+
+::: tip
+使用卡片上的快捷操作按钮来开始、完成或请求审查,无需打开详情面板。
+:::
+
+## 消息与评论
+
+| 渠道 | 何时使用 |
+| --- | --- |
+| 私信 | 重新引导某个智能体、快速提问 |
+| 任务评论 | 属于某个特定任务的备注 |
+
+评论为后续审查保留了上下文,并出现在任务时间线中。
+
+::: tip 优先使用任务评论
+如果备注是关于某个特定任务的,请将其作为该任务的评论添加,而不是发送私信。这样能让历史记录与工作保持关联。
+:::
+
+## 任务日志
+
+任务专属日志为单个指派隔离出运行时输出、操作和消息。用它们来回答:
+
+- 这个智能体运行了什么?
+- 它为什么更改了这个文件?
+- 它是否向另一位队友求助过?
+- 是哪个任务产生了这个 diff?
+
+### 验证清单
+
+当某个任务看起来卡住,或其 diff 看起来与任务脱节时,按以下顺序验证生命周期:
+
+1. 任务拥有预期的负责人,并已转入 `in_progress`。
+2. 负责人发布了一条包含计划或首次进度更新的任务评论。
+3. 任务日志显示在任务时间窗口内有运行时活动。
+4. 文件变更与同一个任务、负责人和会话相关联。
+5. 最后一条任务评论包含验证命令及其结果。
+
+如需更深入的调试,请使用[故障排查](/zh/guide/troubleshooting#task-log-triage)中的持久化证据命令。UI 是工作界面,但对于棘手的启动或归属错误,持久化的任务文件、收件箱和运行时证据才是真正的依据。
+
+## 并行工作模式
+
+队友可以同时处理相互独立的任务。你还可以创建依赖关系(`blocked-by`),让一个任务等待另一个任务完成。留意看板上被阻塞的泳道,如果一位队友空闲而另一位负担过重,则重新指派负责人。
+
+## 实时进程
+
+当智能体启动本地服务器或工具时,实时进程区域会显示 URL 和正在运行的进程。直接从应用中打开这些 URL 即可查看结果。进程会一直保持注册状态,直到被显式停止或运行时退出。
+
+## 跨团队通信
+
+当团队之间已建立关联时,智能体可以向其他团队发送消息。可将其用于工作交接、共享库,或各小队之间的状态检查。
diff --git a/landing/product-docs/zh/guide/code-review.md b/landing/product-docs/zh/guide/code-review.md
new file mode 100644
index 00000000..76be1708
--- /dev/null
+++ b/landing/product-docs/zh/guide/code-review.md
@@ -0,0 +1,119 @@
+---
+title: 代码审查 – Agent Teams 文档
+description: 检查任务范围内的差异(diff),接受或拒绝代码块(hunk),留下行内评论,并管理从 none 到 approved 的审查状态。
+lang: zh-Hans
+---
+
+# 代码审查
+
+Agent Teams 中的代码审查以任务为中心。你检查的是某个特定任务发生了哪些变更,而不是在一大堆无结构的差异中翻找。
+
+## 审查界面
+
+对于每个触及文件的已完成任务,审查 UI 让你能够:
+
+- 在带有变更前/后上下文的情况下检查变更的文件
+- 接受或拒绝单个代码块(hunk)
+- 留下行内评论
+- 将差异关联回任务描述和智能体日志
+
+## 代码块(hunk)级别的决策
+
+接受细小且正确的变更,并拒绝个别的错误,而无需丢弃整个任务。当某个智能体基本上解决了任务,但在某个文件上做得过头时,这种方式很有用。
+
+::: tip 增量接受
+如果一份差异大体正确,先接受好的代码块,只对需要修复的部分请求修改。这样可以让看板持续向前推进。
+:::
+
+在以下情形使用代码块(hunk)级别的决策:
+
+| 情形 | 操作 |
+| --- | --- |
+| 范围正确的变更 | 接受该代码块 |
+| 思路正确,但文件错误或重构范围过宽 | 拒绝该代码块并请求一个更窄的修复 |
+| 行为变更不明确 | 评论并要求验证 |
+| 生成的格式噪音 | 拒绝,除非格式调整本就是任务的一部分 |
+
+## 发起审查
+
+1. 打开一个已完成的任务
+2. 查看 **Changes** 标签页
+3. 如果差异看起来合理,点击 **Request Review** 将任务移入审查(review)列
+
+在审查期间,任务尚未被视为完成,因此其他队友或 lead 仍可以对其发表评论。
+
+## 审查循环
+
+一个健康的审查循环看起来是这样的:
+
+1. 任务负责人发表一条结果评论,说明变更范围和验证情况
+2. 审查者打开任务差异,并对照任务描述检查各个代码块
+3. 审查者接受好的代码块、拒绝差的代码块,或请求修改
+4. 负责人只修复所请求的范围,并发表一条后续评论
+5. 当任务结果与差异相匹配时,审查者予以批准
+
+请求修改评论的示例:
+
+```text
+Please keep the copy improvements, but revert the unrelated runtime wording in the provider table. Add the `pnpm --dir landing docs:build` result before resubmitting.
+```
+
+## 审查状态
+
+| 状态 | 含义 |
+| --- | --- |
+| `none` | 任务为新建、进行中,或已完成但尚未进入审查 |
+| `review` | 任务正在被积极审查 |
+| `needsFix` | 已请求修改;负责人必须先更新才能再次批准 |
+| `approved` | 审查已被接受,任务已最终确定 |
+
+## 智能体审查工作流
+
+在你做出最终决定之前,团队之间可以相互审查彼此的工作。这能捕捉到明显的回归,并让看板保持真实,但你仍应亲自审查有风险的区域。
+
+当审查者拥有清晰的评分标准(rubric)时,智能体审查最为有用。例如,让一个审查者只检查文档的清晰度、只检查 IPC 安全性,或只检查测试覆盖率。宽泛的“审查所有内容”请求往往会产生较弱的反馈。
+
+### MCP 驱动的审查状态
+
+审查状态的变更(请求审查、请求修改、批准)是由工具驱动的。在任务上留下一条“请求修改”的评论**并不会**将看板列移动到 `needsFix` —— 必须由 lead 或智能体调用相应的 MCP 工具:
+
+- `review_request_changes` —— 将任务移动到 `needsFix` 并通知负责人
+- `review_approve` —— 将任务移动到 `approved` 并最终确定审查
+
+仅凭评论不足以触发状态转换。有关审查类 MCP 工具及其参数的完整列表,请参阅 [MCP 集成](/zh/guide/mcp-integration)。
+
+## 审查参与者
+
+团队 lead 是默认的审查者。如果你希望同伴之间相互审查工作,可以在 Kanban 设置中配置额外的审查者。
+
+## 需要手动检查的内容
+
+审查时优先关注以下区域:
+
+- **提供方认证与运行时检测** —— 智能体是否以会破坏其他路径的方式更改了运行时设置?
+- **IPC、preload 与文件系统边界** —— 保持 Electron 各项职责相互分离
+- **Git 与 worktree 行为** - 验证分支命名、提交和推送;隔离模式请参阅 [Git 与 worktree 策略](/zh/guide/git-worktree-strategy)。
+- **解析与任务生命周期逻辑** —— 对任务引用、分块(chunking)或过滤的更改可能破坏消息投递
+- **持久化与代码审查流程** —— 对任务存储或审查状态的更改必须在各 IPC 层之间保持一致
+
+有关规范的功能布局和硬性护栏(guardrail)链接,请使用 [贡献者架构](/zh/reference/contributor-architecture)。
+
+## 验证
+
+优先使用聚焦的验证命令。除非任务明确打算进行大范围的格式整理,否则不应使用宽泛的格式化或 lint-fix 命令。
+
+好的验证评论包含命令及其结果:
+
+```text
+Verified with `pnpm --dir landing docs:build`. Build passed.
+```
+
+当跳过验证时,任务评论应说明原因:
+
+```text
+Docs-only wording change. Build not run because the existing dev server was busy; checked Markdown links manually.
+```
+
+::: warning 不要在整个项目范围内自动格式化
+除非任务专门关于格式化,否则避免对无关文件运行 `pnpm lint:fix`。它会在审查界面中制造噪音。
+:::
diff --git a/landing/product-docs/zh/guide/create-team.md b/landing/product-docs/zh/guide/create-team.md
new file mode 100644
index 00000000..f95cf7c7
--- /dev/null
+++ b/landing/product-docs/zh/guide/create-team.md
@@ -0,0 +1,106 @@
+---
+title: 创建团队 – Agent Teams 文档
+description: 定义角色、分配提供方与模型、编写团队简报,并配置 worktree 隔离与自主级别。
+lang: zh-Hans
+---
+
+# 创建团队
+
+团队是一组具名的智能体,它们拥有各自的角色、一个 lead、一个目标项目以及一段协调提示词。
+
+## 推荐的第一个团队
+
+从一个小团队起步:
+
+| 角色 | 用途 |
+| -------- | --------------------------------------------------- |
+| Lead | 拆分工作、创建任务、协调队友 |
+| Builder | 实现范围明确的任务 |
+| Reviewer | 审查产出、捕捉回归、提出修复请求 |
+
+这样的构成提供了足够的协调能力,让你在不让首次启动过于嘈杂的情况下,就能看到产品价值。
+
+::: tip
+你可以稍后再添加更多成员。先从小处着手,验证工作流,然后再扩大规模。
+:::
+
+## 分配提供方与模型
+
+每个团队成员都运行在某个提供方后端上。在团队编辑器中,为每个成员选择一个提供方(Claude、Codex 或 OpenCode)和一个模型。应用只会显示你已经完成身份验证的提供方。
+
+支持在一个团队中混用多个提供方——例如,一个 Claude lead 搭配若干 OpenCode builders。
+
+::: info
+Gemini 作为受支持的提供方路径可用。有关身份验证选项和当前提供方状态,请参阅[提供方与运行时](/zh/reference/providers-runtimes)。
+:::
+
+## 编写一份好的团队简报
+
+团队简报应包含:
+
+- 你想要的结果
+- 重要的文件或功能领域
+- 风险边界,例如“不要重构无关的模块”
+- 审查预期
+- 在你知道的情况下提供验证命令
+
+示例:
+
+```text
+Build a focused improvement to the download flow. Keep changes inside the landing app unless a shared helper is clearly needed. Create tasks before implementation, review each task diff, and run landing lint/build checks.
+```
+
+## worktree 隔离
+
+OpenCode 成员可以使用 **worktree 隔离**,在一个独立的 Git worktree 中工作,而不是在主工作目录中。这可以防止多个智能体编辑同一个项目时产生文件冲突。
+
+::: warning
+worktree 隔离要求项目处于 Git 跟踪之下,并且目前仅限于 OpenCode 成员。
+:::
+
+要启用它,请在添加或编辑某个 OpenCode 团队成员时切换 **Worktree isolation** 选项。
+
+## 选择自主级别
+
+Agent Teams 支持不同级别的控制。对于常规改动使用更高的自主级别,而对于诸如提供方身份验证、IPC、持久化、Git 工作流以及发布工具等高风险领域,则采用更严格的审查。
+
+### 努力级别
+
+每个团队成员都有一个 **effort**(努力)设置,用于控制提供方在响应之前投入多少推理。更高的努力级别会产出更全面的结果,但代价是时间和 token。
+
+| 级别 | 何时使用 |
+| ------ | ---------------------------------------------------------- |
+| Low | 快速查询、小幅格式调整、常规编辑 |
+| Medium | 大多数实现任务的默认级别 |
+| High | 复杂的重构、横切性改动、高风险的代码路径 |
+
+应用为支持相应能力的提供方提供了额外的级别(minimal、xhigh、max)。如果某个模型不支持可配置的努力级别,则该选择器会被禁用,并使用提供方的默认值。
+
+### 快速模式
+
+可按成员切换 **Fast mode**(快速模式),以优先考虑速度而非深度。当可用时,它会映射到提供方原生的 fast/speed 模式。将其设为 **On** 用于常规任务,设为 **Off** 用于需要细致处理的工作,或设为 **Inherit** 以遵循团队级别的默认设置。
+
+### 限制上下文
+
+启用 **Limit context**(限制上下文)以缩减某个成员的上下文窗口。这对于支持扩展上下文(例如 1M token)的 Claude 模型很有用——限制上下文可以避免不必要的 token 占用,并且对于不需要大上下文的任务还能改善延迟。
+
+## 添加上下文
+
+当文件、截图或特定说明会实质性地改变任务时,将它们附加进去。智能体可以将任务描述、评论和附件用作持久的上下文。
+
+## 关注任务质量
+
+优秀的团队所创建的任务应当是:
+
+- 足够具体以便审查
+- 足够小以便完成
+- 与可见的产出相关联
+- 有验证路径作为支撑
+
+如果 lead 创建了含糊的任务,请发送一条私信,要求拆分成更小、可测试的任务。
+
+## 后续步骤
+
+- [运行时设置](/zh/guide/runtime-setup) — 配置提供方身份验证与模型
+- [代码审查](/zh/guide/code-review) — 接受、拒绝或评论智能体的改动
+- [故障排查](/zh/guide/troubleshooting) — 常见问题与修复
diff --git a/landing/product-docs/zh/guide/git-worktree-strategy.md b/landing/product-docs/zh/guide/git-worktree-strategy.md
new file mode 100644
index 00000000..68f64d52
--- /dev/null
+++ b/landing/product-docs/zh/guide/git-worktree-strategy.md
@@ -0,0 +1,102 @@
+---
+title: Git 与 worktree 策略 – Agent Teams 文档
+description: 决定何时使用主 worktree、功能分支或 OpenCode worktree 隔离来进行并行智能体工作。
+lang: zh-Hans
+---
+
+# Git 与 worktree 策略
+
+Git 为 Agent Teams 提供了最强的审查路径:精简的 diff、分支可见性、任务范围内的变更,以及更安全的并行工作。
+
+## 选择一种策略
+
+| 策略 | 适用场景 | 取舍 |
+| --- | --- | --- |
+| 主 worktree | 单人工作、仅文档编辑,或一次只有一个队友 | 简单,但并行编辑可能发生冲突 |
+| 功能分支 | 一个团队正在进行一项连贯的变更 | 审查目标清晰,但队友仍共享文件 |
+| Worktree 隔离 | 多个 OpenCode 队友可能并行编辑同一个仓库 | 隔离性更好,但合并/审查需要更多纪律 |
+
+从简单开始。当可能出现并行编辑时再加入 worktree 隔离,而不是因为每个任务都需要单独的检出(checkout)。
+
+## 何时启用 worktree 隔离
+
+在以下情况下为 OpenCode 队友启用它:
+
+- 两个或更多队友可能同时编辑同一个仓库
+- 某个任务可能运行格式化工具、代码生成器或大范围测试
+- 你希望每个队友的分支和 diff 保持彼此独立
+- lead 工作区是脏的(dirty),不应接收直接编辑
+
+在以下情况下保持关闭:
+
+- 任务是只读的
+- 一个队友负责所有编辑
+- 仓库未被 Git 跟踪
+- 你需要一条不支持此隔离模式的运行时路径
+
+::: warning
+Worktree 隔离目前仅适用于 OpenCode 成员,并且要求项目被 Git 跟踪。
+:::
+
+## 分支卫生
+
+在开始并行工作之前:
+
+```bash
+git status --short
+git branch --show-current
+```
+
+尽可能使用干净的分支。如果主 worktree 已经有用户的改动,请告知智能体不要还原(revert)不相关的文件,并保持任务范围精简。
+
+推荐的分支命名风格:
+
+```text
+agent//
+```
+
+示例:
+
+```text
+agent/docs/mcp-guide
+agent/review/task-log-filtering
+agent/ui/code-review-polish
+```
+
+## 审查流程
+
+对于隔离的 worktree,在将变更合并或应用回主工作区之前,先审查队友的 diff。
+
+1. 确认任务结果评论中说明了变更范围和验证情况。
+2. 在审查 UI 中检查任务 diff。
+3. 如果 diff 触及了不相关的文件,则对该任务请求修改(request changes)。
+4. 仅在测试或手动检查与任务风险相匹配后才批准(approve)。
+5. 有意识地合并或应用变更。
+
+不要仅仅因为任务已完成就自动合并 worktree 的产出。完成只意味着智能体认为这项工作已准备好接受审查。
+
+## 冲突处理策略
+
+针对并行团队,使用以下策略:
+
+| 情形 | 操作 |
+| --- | --- |
+| 两个队友编辑同一个文件 | 暂停其中一个任务,或指定一个负责人来负责整合 |
+| 生成的文件被大范围改动 | 要求附上一条评论,说明所用的生成器和命令 |
+| 主 worktree 有不相关的改动 | 保留这些改动,仅审查任务所属的变更 |
+| Worktree 分支出现分叉 | 在审查后手动 rebase 或 merge,而不要在一个含糊不清的智能体任务内部进行 |
+
+## 任务提示词示例
+
+```text
+Implement the settings validation fix in your assigned worktree. Keep edits inside src/features/settings and focused tests. Do not touch provider auth or task storage. Post the test command and result before completing the task.
+```
+
+这条提示词之所以有效,是因为它指明了允许的区域、敏感的边界以及完成的证据。
+
+## 相关指南
+
+- [创建团队](/zh/guide/create-team)
+- [代码审查](/zh/guide/code-review)
+- [团队简报示例](/zh/guide/team-brief-examples)
+- [运行时设置](/zh/guide/runtime-setup)
diff --git a/landing/product-docs/zh/guide/installation.md b/landing/product-docs/zh/guide/installation.md
new file mode 100644
index 00000000..43f13ed7
--- /dev/null
+++ b/landing/product-docs/zh/guide/installation.md
@@ -0,0 +1,129 @@
+---
+title: 安装 – Agent Teams 文档
+description: 下载并在 macOS、Windows 或 Linux 上安装 Agent Teams。涵盖打包构建、源码设置、自动更新以及环境要求。
+lang: zh-Hans
+---
+
+# 安装
+
+Agent Teams 以桌面应用的形式分发,支持 macOS、Windows 和 Linux。
+
+::: tip 最短路径
+1. 在下方下载适合你平台的构建版本
+2. 启动应用 - 先使用无需认证的免费模型,或从界面中连接提供方认证
+3. 开始[快速开始](/zh/guide/quickstart),创建你的第一个团队
+
+桌面应用启动:运行 `pnpm dev` 来启动 Electron 应用。日常使用时请勿启动浏览器/网页开发模式。
+:::
+
+## 下载构建版本
+
+当你需要打包好的应用时,请使用下载页面 或最新的 [GitHub release](https://github.com/777genius/agent-teams-ai/releases):
+
+- macOS Apple Silicon:`.dmg`
+- macOS Intel:`.dmg`
+- Windows:`.exe`
+- Linux:`.AppImage`、`.deb`、`.rpm` 或 `.pacman`
+
+::: warning Windows SmartScreen
+未签名或新发布的开源应用可能会触发 SmartScreen。如果你信任该发布来源,请选择 **More info**,然后选择 **Run anyway**。
+:::
+
+## 环境要求
+
+打包好的应用旨在实现零设置上手。你可以先使用无需认证的免费模型 - 无需注册、API 密钥或信用卡。如果你想要更多模型,应用会引导你从界面中完成运行时检测和提供方认证。
+
+对于付费或需要账户支持的模型,请至少连接一个提供方:
+
+| 提供方 | 接入方式 |
+| ------------------ | ------------------------------------------------- |
+| Claude (Anthropic) | Claude Code CLI 登录或 API 密钥 |
+| Codex (OpenAI) | Codex CLI 登录或 API 密钥 |
+| Gemini (Google) | Google ADC、Gemini CLI 或 API 密钥 |
+| OpenCode | 内置的无需认证免费模型,或用于受支持后端(例如 OpenRouter)的 API 密钥 |
+
+::: info
+Gemini 作为受支持的提供方路径提供。关于所有提供方的认证选项和当前状态,请参阅[提供方与运行时](/zh/reference/providers-runtimes)。
+:::
+
+对于源码开发,你还需要:
+
+| 工具 | 版本 |
+| ------- | ------- |
+| Node.js | 24.16.0 LTS |
+| pnpm | 10+ |
+
+在 macOS 上,官方的 Node.js 24 预编译二进制文件需要 macOS 13.5+。
+
+## 从源码运行
+
+
+
+```bash
+git clone https://github.com/777genius/agent-teams-ai.git
+cd agent-teams-ai
+pnpm install
+pnpm dev
+```
+
+`pnpm dev` 会启动带有热重载的桌面 Electron 应用。这是默认的开发目标 — 日常开发时请勿启动浏览器网页开发服务器。浏览器路径缺少完整的桌面 IPC、终端、提供方认证以及团队生命周期行为。
+
+`main` 分支承载着最新的稳定开发版本。仅当你需要某个特定的未发布变更时,才切换到功能分支。
+
+## 验证设置
+
+安装完成后,确认构建状态正常:
+
+```bash
+# Check that the desktop app compiles and starts
+pnpm typecheck
+
+# Verify the VitePress documentation site builds
+pnpm --dir landing docs:build
+```
+
+如果 `pnpm typecheck` 报告类型错误,请检查依赖项是否有较新版本,或者固定的 TypeScript 版本。如果 `pnpm --dir landing docs:build` 失败,请检查 `landing/product-docs/` 中 markdown 或配置文件的语法错误。
+
+如果你正在编辑这些文档,请运行构建以验证你的更改:
+
+```bash
+pnpm --dir landing docs:build
+```
+
+## 自动更新
+
+打包好的应用会在启动时以及运行过程中定期自动检查更新。当有可用更新时,应用会提示你下载并安装。你也可以从应用菜单手动检查。
+
+::: tip
+从源码运行时无法使用自动更新。当依赖项发生变化时,请拉取最新更改并重新运行 `pnpm install`。
+:::
+
+## 从源码更新
+
+如果你从源码运行,当依赖项发生变化时,请拉取 `main` 分支并重新运行安装:
+
+```bash
+git pull
+pnpm install
+```
+
+更新后,验证构建和文档:
+
+```bash
+pnpm typecheck
+pnpm --dir landing docs:build
+```
+
+日常开发请始终使用 `pnpm dev`(Electron)— 而不是浏览器开发服务器。
+
+## 后续步骤
+
+- [快速开始](/zh/guide/quickstart) — 从安装到运行第一个团队
+- [运行时设置](/zh/guide/runtime-setup) — 按运行时配置提供方认证和模型选择
+- [创建团队](/zh/guide/create-team) — 推荐的团队形态与简报撰写
+
+### 面向贡献者
+
+- [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) — 仓库导航与架构指引
+- [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) — 工作约定与项目规则
+- [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) — 硬性实现护栏
diff --git a/landing/product-docs/zh/guide/mcp-integration.md b/landing/product-docs/zh/guide/mcp-integration.md
new file mode 100644
index 00000000..53b753a5
--- /dev/null
+++ b/landing/product-docs/zh/guide/mcp-integration.md
@@ -0,0 +1,225 @@
+---
+title: MCP 集成 – Agent Teams 文档
+description: 在 Agent Teams 中配置 MCP,用于看板操作、队友协作、外部工具服务器以及自定义工具开发。
+lang: zh-Hans
+---
+
+# MCP 集成
+
+Agent Teams 在两个实用层级上使用 MCP:
+
+| 层级 | 作用 | 使用者 |
+| --- | --- | --- |
+| 内置看板服务器 | 暴露 Agent Teams 的任务、消息、审查、进程、运行时以及跨团队工具 | 由应用启动的 lead 与队友 |
+| 外部 MCP 服务器 | 添加可选工具,例如浏览器自动化、设计上下文、文档搜索或公司系统 | 用户与已配置的运行时 |
+
+请将这两个层级分开看待。内置的 `agent-teams` MCP 服务器是智能体在 Agent Teams 内部进行协作的方式。外部 MCP 服务器则是可选的运行时工具。
+
+## Agent Teams 如何注入 MCP
+
+当桌面应用启动基于 Claude 的团队成员时,它会写入一个临时的 `--mcp-config` JSON 文件,其中包含内置的 `agent-teams` 服务器:
+
+```json
+{
+ "mcpServers": {
+ "agent-teams": {
+ "command": "node",
+ "args": ["/path/to/agent-teams-mcp/index.js"],
+ "env": {
+ "AGENT_TEAMS_MCP_CLAUDE_DIR": "/Users/you/.claude"
+ }
+ }
+ }
+}
+```
+
+在开发环境中,该命令可能通过 `tsx` 指向 `mcp-server/src/index.ts`。在打包构建中,应用会将捆绑的 MCP 服务器复制到一个稳定的应用数据路径,并使用 Node 运行它。生成的文件归应用所有,并会尽力清理。
+
+用户级和项目级的 MCP 服务器保持独立。应用从以下位置读取已安装的服务器:
+
+| 范围 | 位置 |
+| --- | --- |
+| 用户 | `~/.claude.json` 中的 `mcpServers` |
+| Claude 配置中的本地项目条目 | `~/.claude.json` 中的 `projects[projectPath].mcpServers` |
+| 项目 | `/.mcp.json` 中的 `mcpServers` |
+
+对于属于某一个仓库的工具,优先使用项目范围。对于你要在多个不相关项目中复用的工具,优先使用用户范围。
+
+## 项目 `.mcp.json` 示例
+
+当一个团队应当看到相同的项目范围服务器时,将此文件放在项目根目录:
+
+```json
+{
+ "mcpServers": {
+ "docs-search": {
+ "command": "npx",
+ "args": ["-y", "@acme/docs-search-mcp"],
+ "env": {
+ "DOCS_INDEX_PATH": "./docs-index"
+ }
+ },
+ "local-browser": {
+ "command": "node",
+ "args": ["./tools/mcp/browser-server.js"]
+ }
+ }
+}
+```
+
+不要把密钥放进已提交的 `.mcp.json` 文件。如果某个值必须保留在本地,请把凭据放在你的 shell、用户范围配置中,或应用的自定义 MCP 安装流程中。
+
+## 看板 MCP 工作流
+
+当工作属于某个任务时,智能体应当使用看板 MCP 工具:
+
+1. 读取最新的任务上下文。
+2. 仅在真正开始工作时才启动任务。
+3. 为阻塞项、计划和最终结果添加任务评论。
+4. 在发布结果评论后将任务标记为完成。
+5. 当 lead 或队友需要知道结果时,发送一条简短消息。
+
+智能体流程示例:
+
+```text
+task_get -> task_start -> edit/test -> task_add_comment -> task_complete -> message_send
+```
+
+用直接消息进行协作。用任务评论保存持久的任务历史。
+
+::: tip
+如果该备注涉及审查、验证、变更范围或某个阻塞项,请把它放在任务上。
+:::
+
+## 内置 Agent Teams 工具
+
+MCP 服务器从 `agent-teams-controller/src/mcpToolCatalog.js` 注册工具。注册循环位于 `mcp-server/src/tools/index.ts`,每个分组在 `mcp-server/src/tools/` 下有自己的文件。
+
+常用运维工具:
+
+| 工具 | 用途 |
+| --- | --- |
+| `task_get` | 读取最新的任务上下文、评论、附件、状态以及关联关系 |
+| `task_start` | 在工作真正开始时将任务标记为 in progress |
+| `task_add_comment` | 添加阻塞项备注、验证备注、计划以及最终结果摘要 |
+| `task_complete` | 在发布最终结果评论后完成任务 |
+| `message_send` | 向 lead、队友或用户发送一条可见的收件箱消息 |
+| `review_request`、`review_start`、`review_approve`、`review_request_changes` | 推进任务范围的审查工作流 |
+| `process_register`、`process_list`、`process_stop`、`process_unregister` | 跟踪队友拥有的开发服务器、监听器以及其他后台服务 |
+
+工具名称在运行时可能带有 MCP 命名空间前缀,例如 `mcp__agent-teams__task_get`。在 MCP 服务器内部,规范的工具名称仍然是 `task_get`。
+
+## 注册一个新的内置工具
+
+对于 Agent Teams 仓库的工作,请通过现有的 FastMCP 结构添加内置看板工具:
+
+1. 将工具实现添加到 `mcp-server/src/tools/` 中匹配的文件,如果该领域确实是全新的,则创建一个新的分组文件。
+2. 将工具名称添加到 `agent-teams-controller/src/mcpToolCatalog.js` 中相应的分组。
+3. 仅在需要新的领域分组时,才通过 `mcp-server/src/tools/index.ts` 接入新分组。
+4. 使用 `zod` 校验输入,并调用控制器 API,而不是直接读取看板文件。
+5. 在 `mcp-server/test/tools.test.ts` 中添加针对性测试,或在传输层很重要时添加一个 e2e 用例。
+
+最小结构:
+
+```ts
+server.addTool({
+ name: 'task_example',
+ description: 'Explain what this tool does for agents.',
+ parameters: z.object({
+ teamName: z.string().min(1),
+ claudeDir: z.string().min(1).optional(),
+ taskId: z.string().min(1)
+ }),
+ execute: async ({ teamName, claudeDir, taskId }) => {
+ assertConfiguredTeam(teamName, claudeDir);
+ const controller = getController(teamName, claudeDir);
+ return jsonTextContent(controller.tasks.getTask(taskId));
+ }
+});
+```
+
+不要创建绕过控制器校验、改动无关团队文件,或在没有明确任务需要的情况下暴露宽泛文件系统/进程访问权限的工具。
+
+## 外部 MCP 服务器
+
+当队友需要一个持久的工具连接,而不仅仅是一次带粘贴上下文的提示时,请使用外部 MCP 服务器。
+
+适用场景:
+
+- 浏览器或网站测试工具
+- 设计或产品数据工具
+- 内部文档与搜索系统
+- 问题跟踪或支持系统
+- 使用只读凭据的数据库检查工具
+
+不适用场景:
+
+- 粘贴进提示的密钥
+- 可以直接附加的一次性文件
+- 未经审查就改动生产系统的工具
+- 当更窄的项目范围已经足够时,却使用宽泛的本地文件系统访问
+
+## 范围
+
+Agent Teams 识别共享范围和面向项目的 MCP 范围。
+
+| 范围 | 适用情形 |
+| --- | --- |
+| 用户或全局 | 同一个服务器应当在多个项目间可用 |
+| 项目或本地 | 该服务器属于某一个仓库、工作区或团队上下文 |
+
+优先选择仍能让工作流可用的最窄范围。项目范围的服务器在审查时更易于推理,因为该工具属于正在被修改的项目。
+
+## 设置检查清单
+
+在分配一个依赖某个 MCP 服务器的任务之前:
+
+1. 安装或配置该服务器。
+2. 确认它出现在应用针对目标范围的已安装 MCP 列表中。
+3. 在可用时,从 MCP 注册表或扩展 UI 运行诊断。
+4. 从一个低风险的只读任务开始。
+5. 在任务描述或团队简报中提及预期的 MCP 工具使用方式。
+
+如果某个服务器诊断失败,请先修复它。更好的任务提示并不能修复缺失的命令、错误的配置路径或被拒绝的凭据。
+
+## 从应用安装自定义服务器
+
+桌面应用通过 Electron IPC 暴露 MCP 注册表 API,用于搜索、浏览、安装、自定义安装、卸载、读取已安装状态以及诊断。自定义安装会在调用运行时安装路径之前,校验服务器名称、范围、项目路径、环境变量名以及 HTTP 标头。
+
+当你有一个尚未进入注册表的 MCP 包时,使用自定义安装:
+
+| 字段 | 示例 |
+| --- | --- |
+| 服务器名称 | `docs-search` |
+| 范围 | `project` 表示此仓库,`user` 表示所有项目 |
+| 类型 | `stdio` 表示本地命令,`http` 或 `sse` 表示远程服务器 |
+| 包 | `@acme/docs-search-mcp` |
+| 环境变量 | `DOCS_INDEX_PATH=./docs-index` |
+
+安装后,运行诊断并创建一个小型的只读任务来验证工具界面,然后再分配更大的工作。
+
+## 任务示例
+
+```text
+Audit the docs home page with the browser MCP. Check desktop and mobile widths, capture any layout issue as a task comment, and only edit landing/product-docs files. Run `pnpm --dir landing docs:build` before completion.
+```
+
+这之所以有效,是因为它指明了工具、操作界面、写入边界以及验证步骤。
+
+## 安全规则
+
+- 不要默认给每个队友都配上每一个 MCP 服务器。
+- 除非审查需要,否则将具备写入能力的工具排除在宽泛团队之外。
+- 检查类任务优先使用只读凭据。
+- 把会影响生产的工具使用置于明确的任务评论和审查之后。
+- 将 MCP 诊断失败视为设置失败,而非智能体失败。
+- 避免在 `.mcp.json` 或提示中提交密钥。
+- 通过应用安装项目范围服务器时,使用绝对路径的 `projectPath` 值。
+- 不要编辑应用生成的 `agent-teams-mcp-*.json` 文件;它们是临时的启动产物。
+
+## 相关指南
+
+- [运行时设置](/zh/guide/runtime-setup)
+- [团队简报示例](/zh/guide/team-brief-examples)
+- [智能体工作流](/zh/guide/agent-workflow)
+- [开发者](/zh/developers/)
diff --git a/landing/product-docs/zh/guide/quickstart.md b/landing/product-docs/zh/guide/quickstart.md
new file mode 100644
index 00000000..1ff8591e
--- /dev/null
+++ b/landing/product-docs/zh/guide/quickstart.md
@@ -0,0 +1,193 @@
+---
+title: 快速开始 – Agent Teams 文档
+description: 在几分钟内,从全新安装到运行起一个 AI 智能体团队。涵盖安装、运行时选择、团队创建以及首次代码审查。
+lang: zh-Hans
+---
+
+# 快速开始
+
+本指南帮助你在几分钟内,从全新安装到运行起一个团队。
+
+## 最短路径
+
+```bash
+# 1. Install prerequisites
+node --version # need 20+
+pnpm --version # need 10+
+
+# 2. Clone and install
+git clone https://github.com/777genius/agent-teams-ai.git
+cd agent-teams-ai
+pnpm install
+
+# 3. Start the desktop app (default workflow)
+pnpm dev
+
+# 4. Verify a docs-only change
+pnpm --dir landing docs:build
+```
+
+桌面端 Electron 应用(`pnpm dev`)是首要目标——常规开发中请勿使用浏览器/Web 开发服务器。浏览器路径缺少桌面端 IPC、终端、提供方认证以及团队生命周期行为。
+
+## 开始之前
+
+你需要:
+
+- **一台计算机**,运行 macOS、Windows 或 Linux
+- **(推荐)一个由 Git 跟踪的项目**——worktree 隔离与 diff 审查都依赖 Git
+- **(可选)提供方访问权限**——运行时设置会从 UI 中检测可用的提供方,但某些路径需要已有的认证(Anthropic、OpenAI 等)
+
+如果下面的某个步骤无法奏效,请查阅[故障排查指南](/zh/guide/troubleshooting#team-does-not-launch)以获取常见修复方法。
+
+关于项目约定与架构指引,在做出改动之前请先参考以下规范文件:
+
+- [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) — 仓库导航与架构指引
+- [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) — 工作约定与项目规则
+- [功能架构标准](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) — 新功能的结构
+- [调试操作手册](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) — 启动与队友诊断
+
+## 1. 从源码运行或下载
+
+**下载已打包的应用**(适用于 macOS、Windows 或 Linux),请前往下载页面 ——无需任何前置条件。你可以从免费模型开始、无需认证,或在需要更多模型时从 UI 连接提供方认证。
+
+**或从源码运行**以进行开发:
+
+需要 Node.js 24.16.0 LTS 和 pnpm 10+。在 macOS 上,官方 Node.js 24 预编译二进制文件要求 macOS 13.5+。
+
+```bash
+git clone https://github.com/777genius/agent-teams-ai.git
+cd agent-teams-ai
+pnpm install
+pnpm dev
+```
+
+`pnpm dev` 会启动支持热重载的桌面端 Electron 应用。这是默认的开发目标。常规开发中请勿启动浏览器 Web 开发服务器——浏览器路径缺少完整的桌面端 IPC、终端、提供方认证以及团队生命周期行为。
+
+## 2. 打开或创建一个项目
+
+启动应用,并选择你希望智能体在其中工作的项目目录。Agent Teams 会读取本地项目文件以及运行时/会话状态,以便 UI 能够展示任务、日志、diff 以及队友活动。
+
+::: tip
+选择一个由 Git 跟踪的项目以获得最佳体验。worktree 隔离与基于 diff 的审查都依赖 Git。
+:::
+
+在启动团队之前,请检查项目是否有一个足够干净的基线:
+
+```bash
+git status --short
+```
+
+你不需要一个完全干净的工作树,但在智能体开始编辑之前,你应当清楚哪些改动是你自己的。这能让任务 diff 与代码块(hunk)级别的审查更值得信赖。
+
+## 3. 选择运行时路径
+
+设置流程会自动检测你机器上已安装的运行时。常见的首次设置是:
+
+| 运行时 | 适用于 |
+| -------- | ----------------------------------------------- |
+| Claude | Claude Code 用户以及已有 Anthropic 访问权限的人 |
+| Codex | Codex 原生工作流以及 OpenAI 访问权限 |
+| OpenCode | 免费模型、无需认证,多模型团队,以及众多提供方后端 |
+
+::: info
+Gemini 作为受支持的提供方路径提供。有关认证选项以及当前提供方状态,请参阅[提供方与运行时](/zh/reference/providers-runtimes)。
+:::
+
+有关每个提供方的详细配置,请参阅[运行时设置](/zh/guide/runtime-setup)。
+
+要在应用之外验证一个付费或基于账户的运行时,请检查二进制文件并测试认证:
+
+```bash
+# Check that the runtime is installed and on PATH
+command -v claude && claude --version
+command -v codex && codex --version
+command -v opencode && opencode --version
+```
+
+如果命令失败,请先修复运行时安装或 `PATH`。对于需要认证的模型,团队提示无法绕过缺失的二进制文件或缺失的提供方认证。
+
+::: tip
+如果找到了二进制文件但应用报告 "not logged in",那么你的终端与应用之间的环境可能不同。请参阅[认证诊断日志](/zh/guide/troubleshooting#auth-diagnostic-log)来对比二者。
+:::
+
+## 4. 创建你的第一个团队
+
+创建一个包含一个 lead 和一个或多个专家的团队。第一个团队请保持精简:一个 lead、一个实现智能体以及一个偏向审查的智能体,足以验证整个工作流。
+
+有关推荐的结构与提示,请参阅[创建团队](/zh/guide/create-team)。
+
+对于首次启动,建议采用如下这样的团队结构:
+
+| 成员 | 职责 | 备注 |
+| --- | --- | --- |
+| Lead | 将目标拆分为任务并协调状态 | 部署在你拥有的最可靠的提供方上 |
+| Builder | 实现有明确边界的任务 | 给出清晰的文件或功能边界 |
+| Reviewer | 审查已完成的工作 | 让它专注于回归问题以及缺失的测试 |
+
+避免一开始就配置五个或更多队友。更多的智能体会在你确认设置是否健康之前,增加并发、日志、提供方用量以及冲突风险。
+
+## 5. 给 lead 一个具体的目标
+
+像给一位工程负责人做简报那样写下目标:
+
+```text
+Improve the onboarding flow. Split the work into tasks, keep changes small, and ask for review before broad refactors.
+```
+
+好的首个提示应包含具体的范围、安全边界以及验证:
+
+```text
+Improve the docs quickstart. Keep edits inside landing/product-docs. Add practical examples, preserve existing VitePress syntax, and run `pnpm --dir landing docs:build` before marking tasks done.
+```
+
+在首次运行时,请避免诸如 "make the app better" 这样含糊的提示。lead 能够拆解大型目标,但更好的输入会产生更小的任务以及更整洁的审查。
+
+::: tip
+如果团队已启动但没有任务出现,请检查 lead 是否收到了你的提示。有关诊断,请参阅[智能体回复缺失](/zh/guide/troubleshooting#agent-replies-are-missing)。
+:::
+
+lead 会创建任务、分配工作并协调队友。你可以在 kanban 看板上观察进度,并随时通过评论或直接消息进行干预。
+
+## 6. 审查结果
+
+打开已完成或可供审查(review)的任务,检查 diff,并对单个改动进行接受、拒绝或评论。当你需要理解智能体为何做出某个选择时,可使用任务日志。
+
+有关完整的审查工作流,请参阅[代码审查](/zh/guide/code-review)。
+
+在批准第一个任务之前,请检查三件事:
+
+1. 任务评论解释了改动了什么
+2. 改动的文件与任务范围相符
+3. 验证结果在任务评论或日志中可见
+
+## 常见陷阱
+
+| 症状 | 可能的原因 | 检查 |
+| --- | --- | --- |
+| 应用未检测到运行时 | 二进制文件不在 `PATH` 上,或应用与终端看到的环境不同 | 在终端中运行 `command -v `,然后使用相同的终端环境来启动应用 |
+| 团队启动卡住 | 付费/账户模型缺少提供方认证、模型字符串错误,或找不到运行时二进制文件 | 参阅[故障排查](/zh/guide/troubleshooting#team-does-not-launch) |
+| OpenCode lane 卡在 `registered` | lane 证据尚未提交,或模型字符串不匹配 | 检查 `~/.claude/teams//.opencode-runtime/lanes/` |
+| 智能体回复缺失 | 运行时投递重试、解析或任务归属问题 | 打开任务日志并检查投递账本 |
+| 提供方返回 429 | 达到速率限制 | 等待重置,或切换模型/提供方 |
+
+## 后续步骤
+
+- [创建团队](/zh/guide/create-team) — 推荐的团队结构与简报写法
+- [运行时设置](/zh/guide/runtime-setup) — 提供方认证与模型选择
+- [代码审查](/zh/guide/code-review) — 审查、批准或请求修改
+
+### 面向贡献者
+
+如果你正在修改 Agent Teams 或这些文档,请从仓库根目录的规范项目文件开始:
+
+- [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) — 工作约定与项目规则
+- [AGENTS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENTS.md) — 架构与实现指引的导航层
+- [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) — 硬性实现护栏
+- [功能架构标准](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) — 新功能的结构
+- [智能体团队调试操作手册](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) — 启动、引导(bootstrap)与队友诊断
+
+要验证此文档站点是否正确构建:
+
+```bash
+pnpm --dir landing docs:build
+```
diff --git a/landing/product-docs/zh/guide/runtime-setup.md b/landing/product-docs/zh/guide/runtime-setup.md
new file mode 100644
index 00000000..d2e6b771
--- /dev/null
+++ b/landing/product-docs/zh/guide/runtime-setup.md
@@ -0,0 +1,179 @@
+---
+title: 运行时设置 – Agent Teams 文档
+description: 配置 Claude Code、Codex 或 OpenCode 运行时。涵盖认证、提供方访问、多模型模式以及启动前检查。
+lang: zh-Hans
+---
+
+# 运行时设置
+
+Agent Teams 是一个协调层。实际的模型工作通过受支持的本地运行时与提供方运行。
+
+::: tip 快速开始 - 选择你的第一个运行时
+| 如果你 …… | 从这里开始 |
+| --- | --- |
+| 已经使用 Claude Code 或拥有 Anthropic 访问权限 | **Claude** - 熟悉的认证方式,设置最少 |
+| 使用 Codex 或基于 OpenAI 的工作流 | **Codex** - 原生集成 |
+| 想在不注册、不使用 API key 的情况下试用 Agent Teams | **OpenCode** - 使用内置的免费模型,无需认证 |
+| 想要多模型路由或广泛的提供方覆盖 | **OpenCode** - 最灵活,一份配置对应多个后端 |
+| 不确定哪个运行时适合自己 | **OpenCode** - 覆盖最多的提供方选项,并允许你之后切换 |
+
+先从一个运行时和一名队友开始。在扩展到多模型之前,先确认一次启动可以正常工作。
+:::
+
+## 前置条件
+
+在启动团队之前,请确保:
+
+- 运行时二进制文件已安装并位于你的 `PATH` 中。
+- 你的提供方账户对你打算使用的模型拥有有效访问权限,除非你从内置的免费 OpenCode 模型开始(无需认证)。
+- 项目路径存在且可读。
+- 当你手动测试认证时,应用与你的终端使用相同的 home/config 环境。
+
+::: tip
+先从单个队友和一个提供方开始。在添加多模型通道之前,先确认一次启动可以正常工作。
+:::
+
+快速终端检查:
+
+```bash
+command -v claude
+command -v codex
+command -v opencode
+```
+
+为你计划使用的运行时运行对应的命令。如果它没有任何输出,请先安装该运行时或修复 `PATH`,然后再启动团队。
+
+## 受支持的路径
+
+| 路径 | 默认 CLI | 典型提供方 | 适用场景 |
+| --- | --- | --- | --- |
+| Claude | `claude` | Anthropic | 你已经使用 Claude Code 或基于 Anthropic 的工作流 |
+| Codex | `codex` | OpenAI | 你想要 Codex 原生的运行时集成 |
+| OpenCode | `opencode` | OpenRouter 以及许多后端 | 你想要多模型路由和广泛的提供方覆盖 |
+
+应用会检测受支持的运行时,并在可能时从 UI 中引导你完成设置。
+
+Gemini 作为受支持的提供方路径提供,支持 Google ADC(`gcloud auth`)、Gemini CLI OAuth 以及 API key 认证。当检测到 Gemini 后端时,可在运行时设置 UI 中进行配置。
+
+## 提供方访问
+
+Agent Teams 自身没有付费层级。你可以从内置的免费 OpenCode 模型开始,无需认证 - 无需注册、API key 或信用卡。对于额外的模型,请使用你已经拥有的提供方访问权限:订阅、本地运行时认证或 API key,具体取决于你选择的路径。
+
+- **Claude** 和 **Codex** 路径依赖各自的 CLI 认证工具。
+- **OpenCode** 可以先运行内置的免费模型,无需认证。其他 OpenCode 模型可能需要在配置文件中提供特定于提供方的 API key(例如 `openrouter`、`openai`、`anthropic`)。
+
+## 认证配置
+
+### Claude Code
+
+在终端中运行标准认证流程:
+
+```bash
+claude login
+```
+
+然后验证 CLI 可访问:
+
+```bash
+claude --version
+```
+
+如果打包后的应用报告 "not logged in",而你的终端却能正常工作,请将应用所看到的 `$HOME` 与 `PATH` 和你用于登录的终端进行对比。[故障排查](/zh/guide/troubleshooting#auth-diagnostic-log)中描述的认证诊断日志是最佳的排查起点。
+
+### Codex
+
+通过 OpenAI 的 CLI 流程安装并认证:
+
+```bash
+codex login
+```
+
+然后验证运行时可访问:
+
+```bash
+codex --version
+```
+
+Codex 原生启动在可用时会使用 Codex 账户状态和模型目录数据。如果某个模型未出现在 UI 中,请先刷新提供方状态,再编辑团队 prompt。
+
+### OpenCode
+
+要使用内置的免费模型且无需认证,请在应用中选择它,并在不进行提供方注册的情况下启动。要使用其他 OpenCode 后端,请创建或编辑 `~/.opencode/config.json`(或你所在平台上的等价路径),并填入你想要的提供方 key:
+
+```json
+{
+ "providers": {
+ "openrouter": {
+ "apiKey": "sk-or-..."
+ }
+ }
+}
+```
+
+请使用 OpenCode 期望的确切提供方名称。如果你设置了自定义的提供方名称,请仔细核对它与你在模型字符串中使用的提供方 ID(例如 `openrouter/moonshotai/kimi-k2.6` 会使用 `openrouter` 块)。
+
+模型字符串示例:
+
+| 模型字符串 | 必须存在的提供方块 |
+| --- | --- |
+| `openrouter/moonshotai/kimi-k2.6` | `openrouter` |
+| `openai/gpt-5.4` | `openai` |
+| `anthropic/claude-sonnet-4-6` | `anthropic` |
+
+如果 OpenCode 启动了,但某个队友始终无法变为可送达状态,请在假定模型忽略了 prompt 之前先检查通道证据。参见[故障排查](/zh/guide/troubleshooting#opencode-registered-but-bootstrap-unconfirmed)。
+
+### Gemini
+
+Gemini 支持三种认证方法:
+
+- **Google ADC** — 运行 `gcloud auth application-default login`,通过 Google 应用默认凭据进行认证。
+- **Gemini CLI** — 如果已安装 Gemini CLI,运行 `gemini login`。
+- **API key** — 在环境中设置 `GEMINI_API_KEY`,或通过应用的 Manage Providers UI 进行配置。
+
+应用会自动检测可用的认证方法,并在后端可访问时,于运行时设置和团队创建 UI 中显示 Gemini 提供方。
+
+## 多模型模式
+
+多模型模式可以通过兼容 OpenCode 的配置将工作路由到许多提供方后端。当你需要提供方灵活性,或希望让队友使用不同的模型通道时,请使用它。
+
+::: info 模型通道
+每个队友都可以使用不同的 `providerId` + `model` 组合。在团队编辑 UI 中,展开成员选项即可覆盖全局默认值。
+:::
+
+一个保守的多模型设置:
+
+| 角色 | 提供方 | 原因 |
+| --- | --- | --- |
+| Lead | Claude 或 Codex | 把协调工作放在你最信任的提供方上 |
+| Builder | OpenCode | 为实现工作使用广泛的模型路由 |
+| Reviewer | Claude、Codex 或第二个 OpenCode 模型 | 将审查判断与 builder 通道分开 |
+
+避免在首次启动时混用许多不熟悉的提供方。在分配大量工作之前,先在每个通道上确认一个小任务。
+
+## 启动前检查清单
+
+在启动团队之前:
+
+1. 已安装所选运行时
+2. 运行时二进制文件位于环境 `PATH` 中
+3. 已为所选后端配置提供方认证
+4. 提供方对你指定的确切模型字符串拥有访问权限
+5. 项目路径存在且可读
+
+## 何时切换运行时路径
+
+当当前路径因模型可用性、速率限制、提供方能力或团队角色需求而受阻时进行切换。保持相同的项目和团队工作流,但在切换后验证一个小任务。
+
+::: warning 把设置错误当作设置问题来处理
+如果认证失败、模型名称被拒绝,或找不到运行时二进制文件,请先修复设置。不要为了绕过运行时配置问题而修改团队 prompt 或项目代码。
+:::
+
+使用此决策表:
+
+| 症状 | 更好的首要行动 |
+| --- | --- |
+| 找不到二进制文件 | 修复安装或 `PATH` |
+| 终端中可以登录但应用中不行 | 检查 Electron 认证诊断日志和环境 |
+| 模型被拒绝 | 在提供方运行时中验证确切的模型 id |
+| 反复出现 429 | 降低并发数或切换模型/提供方 |
+| OpenCode 通道卡住 | 检查通道清单和 `opencode-sessions.json` |
diff --git a/landing/product-docs/zh/guide/team-brief-examples.md b/landing/product-docs/zh/guide/team-brief-examples.md
new file mode 100644
index 00000000..bb8f0dc7
--- /dev/null
+++ b/landing/product-docs/zh/guide/team-brief-examples.md
@@ -0,0 +1,131 @@
+---
+title: 团队简报示例 – Agent Teams 文档
+description: 适用于小修复、文档工作、实现任务、审查以及高风险区域的实用团队简报模板。
+lang: zh-Hans
+---
+
+# 团队简报示例
+
+一份好的团队简报会给 lead 提供足够的结构,使其能够创建小任务,而无需在一开始就强行规定每一个实现细节。
+
+使用如下结构:
+
+```text
+Outcome:
+Scope:
+Boundaries:
+Coordination:
+Verification:
+Review:
+```
+
+## 最小化简报
+
+适用于小型、低风险的工作。
+
+```text
+Outcome: Improve the quickstart so a new user can launch one team successfully.
+Scope: Keep edits inside landing/product-docs.
+Boundaries: Do not rewrite the whole docs structure.
+Coordination: Create one or two tasks, keep comments on the task.
+Verification: Run `pnpm --dir landing docs:build`.
+Review: Summarize changed pages and any remaining gaps.
+```
+
+## 实现简报
+
+当代码改动只涉及某一个功能区域时使用。
+
+```text
+Outcome: Add a focused improvement to task comment filtering.
+Scope: Work inside the task/comment feature files unless a shared helper is clearly needed.
+Boundaries: Do not change task storage format or review state semantics.
+Coordination: Split parser, UI, and tests into separate tasks if they can be reviewed independently.
+Verification: Run the focused unit tests first, then the feature typecheck if touched.
+Review: Call out parsing edge cases and any behavior that affects existing task comments.
+```
+
+## 文档简报
+
+适用于文档与指南类工作。
+
+```text
+Outcome: Draft practical workflow guides from the docs audit.
+Scope: Add concise VitePress pages under landing/product-docs/guide.
+Boundaries: Avoid moving existing navigation hubs owned by other tasks.
+Coordination: Check related docs tasks before editing nav.
+Verification: Run `pnpm --dir landing docs:build`.
+Review: Include links added to sidebar and any pages intentionally left as drafts.
+```
+
+## 偏重审查的简报
+
+适用于风险较高的区域,例如 IPC、提供方鉴权、持久化、Git 或任务生命周期逻辑。
+
+```text
+Outcome: Fix the launch failure without changing successful launch behavior.
+Scope: Start from the newest launch-failure artifact and the affected runtime adapter.
+Boundaries: Do not change provider prompts until setup and runtime evidence are inspected.
+Coordination: Make one diagnostic task and one fix task if the cause is confirmed.
+Verification: Run focused tests and one desktop smoke check when practical.
+Review: Lead must inspect the diff before approval.
+```
+
+## 混合提供方简报
+
+当不同队友运行不同的提供方/模型通道时使用。
+
+```text
+Outcome: Implement and review a small feature using separate builder and reviewer lanes.
+Scope: Builder edits the feature. Reviewer inspects only the task diff and tests.
+Boundaries: Do not switch model ids mid-task unless launch fails before work begins.
+Coordination: Builder posts result comment first. Reviewer posts findings as task comments.
+Verification: Builder runs focused tests. Reviewer checks failure output and changed scope.
+Review: Lead approves only after reviewer comments are resolved.
+```
+
+## 简报中的 agent block
+
+agent block 是仅供智能体阅读的隐藏文本,使用诸如 `... ` 这样的标记包裹。应用会将它们从常规显示中剥离,但仍保留下来供智能体协调使用。当简报需要向智能体传达某些对人类读者而言属于干扰信息的内容时,可以使用它们。
+
+示例——一份简报告诉 lead 如何拆分工作,同时又不向用户暴露协调指令:
+
+```text
+Outcome: Add a dark mode toggle to the application settings.
+Scope: Settings UI, theme context, and CSS variables.
+Boundaries: Do not change existing light theme values or provider auth screens.
+
+
+Split this into three tasks: (1) theme context and CSS vars, (2) toggle component and settings wiring, (3) dark mode preview in existing docs screenshots if practical.
+
+```
+
+该 block 让面向人类的简报保持简洁,同时为 lead 提供结构化的任务拆分指引。
+
+## 应避免的做法
+
+| 薄弱的简报 | 更好的替代写法 |
+| --- | --- |
+| “Improve the app” | 指明工作流、文件以及成功检查 |
+| “Fix all docs” | 选定一个指南组和一条构建命令 |
+| “Use the best model” | 指明提供方/模型选择,或让应用的默认设置保持不变 |
+| “Refactor as needed” | 说明允许改动哪些模块 |
+| “Make it production ready” | 定义审查、测试以及上线检查 |
+
+## 启动前
+
+在启动团队之前,请检查以下几点:
+
+1. 简报指明了一个具体的成果。
+2. 风险边界是明确的。
+3. lead 能够把工作拆分成可审查的任务。
+4. 在已知的情况下包含了验证命令。
+5. 敏感区域在批准前需要经过审查。
+
+如果简报仍然过于宽泛,可以先启动一个 solo 或小型团队,并要求它先产出一份任务计划,而不是直接实现。
+
+## 相关指南
+
+- [创建团队](/zh/guide/create-team)
+- [MCP 集成](/zh/guide/mcp-integration)
+- [Git 与 worktree 策略](/zh/guide/git-worktree-strategy)
diff --git a/landing/product-docs/zh/guide/troubleshooting.md b/landing/product-docs/zh/guide/troubleshooting.md
new file mode 100644
index 00000000..80c7d90e
--- /dev/null
+++ b/landing/product-docs/zh/guide/troubleshooting.md
@@ -0,0 +1,310 @@
+---
+title: 故障排查 – Agent Teams 文档
+description: 借助本地诊断手段修复团队启动问题、缺失的智能体回复、速率限制、CLI 认证问题以及通道(lane)引导停滞。
+lang: zh-Hans
+---
+
+# 故障排查
+
+大多数团队问题都可归入以下四类之一:运行时设置、启动确认、任务解析以及提供方限制。
+
+## 快速证据准备
+
+对于任何团队生命周期问题,请先定义以下变量,并复用同一个 shell:
+
+```bash
+TEAM=""
+TEAM_DIR="$HOME/.claude/teams/$TEAM"
+TASKS_DIR="$HOME/.claude/tasks/$TEAM"
+```
+
+然后在解读 UI 状态之前,先确认预期的文件确实存在:
+
+```bash
+test -d "$TEAM_DIR" && find "$TEAM_DIR" -maxdepth 2 -type f | sort | sed -n '1,80p'
+test -d "$TASKS_DIR" && find "$TASKS_DIR" -maxdepth 1 -name '*.json' | sort | sed -n '1,40p'
+```
+
+::: warning 证据优先
+不要仅凭一个卡住的徽章就去修改 prompt、提供方设置或清理进程。请先将 UI 与持久化文件、启动产物以及运行时证据相互印证。
+:::
+
+## 团队无法启动
+
+按顺序逐项检查:
+
+1. **运行时可用** —— 所选 CLI(`claude`、`codex`、`opencode`)已安装
+2. **PATH 可达** —— 二进制文件在环境 `PATH` 中可用
+3. **模型访问** —— 提供方有权访问所请求的模型字符串(尤其对于 OpenCode,精确的提供方/模型名称至关重要)
+4. **项目路径** —— 项目目录存在且可读
+5. **网络 / VPN** —— 某些提供方会在 VPN 处于激活状态时丢弃流量
+
+::: tip
+在终端中运行运行时二进制文件以验证 `PATH` 和认证。例如:`claude --version` 或 `opencode --version`。
+:::
+
+### OpenCode:已注册但引导未确认
+
+如果 OpenCode 显示 `registered` 但引导未确认,请先检查产物,然后再更改团队 prompt。
+
+贡献者/调试细节见[贡献者架构](/zh/reference/contributor-architecture),其中链接到权威的智能体团队调试操作手册。
+
+查看最新的启动失败产物:
+
+```bash
+LATEST_FAILURE="$TEAM_DIR/launch-failure-artifacts/latest.json"
+MANIFEST_PATH="$(jq -r '.manifestPath' "$LATEST_FAILURE")"
+jq '.classification, .bootstrapTransportBreadcrumb, .memberSpawnStatuses' "$MANIFEST_PATH"
+```
+
+`latest.json` 指向最新打包的产物目录及其 `manifest.json`。该 manifest 包含:
+
+- `classification` —— 此次启动被判定为失败的原因
+- `bootstrapTransportBreadcrumb` —— 所使用的投递路径
+- 成员 spawn 状态
+- 已脱敏的日志和追踪
+
+同时检查通道(lane)manifest:
+
+```bash
+jq '.lanes' "$TEAM_DIR/.opencode-runtime/lanes.json" 2>/dev/null
+find "$TEAM_DIR/.opencode-runtime/lanes" -maxdepth 2 -name manifest.json -print -exec jq '.activeRunId, .entries' {} \; 2>/dev/null
+```
+
+::: tip 不要凭 UI 猜测
+始终将 UI 诊断与持久化文件(`launch-state.json`、`bootstrap-journal.jsonl`)以及运行时专有证据相互印证。
+:::
+
+## 通用诊断
+
+从磁盘上的持久化文件开始,而不是仅看 UI。
+
+### 团队根目录
+
+```bash
+printf '%s\n' "$TEAM_DIR"
+```
+
+关键文件及其所能告诉你的信息:
+
+- `launch-state.json` —— 成员启动/存活状态(`.teamLaunchState`、`.summary`、`.members`)
+- `bootstrap-journal.jsonl` —— 来自 CLI/运行时的有序引导事件(`tail -80`)
+- `bootstrap-state.json` —— 引导阶段摘要
+- `config.json` —— 提供方、模型和项目配置
+- `inboxes/*.json` 和 `sentMessages.json` —— 消息投递状态
+
+```bash
+jq '.teamLaunchState, .summary, .members' "$TEAM_DIR/launch-state.json"
+tail -80 "$TEAM_DIR/bootstrap-journal.jsonl" 2>/dev/null
+```
+
+### OpenCode 运行时证据
+
+对于 OpenCode 队友,会话证据位于通道(lane)运行时存储中:
+
+- `.opencode-runtime/lanes.json` —— 带状态的通道索引
+- `.opencode-runtime/lanes//manifest.json` —— `activeRunId` 和证据条目
+- `.opencode-runtime/lanes//opencode-sessions.json` —— 已提交的会话记录
+
+预期的健康状态:通道状态为 `active`,manifest 带有 `activeRunId` 且至少有一个证据条目,成员的 `bootstrapConfirmed: true`。
+
+```bash
+jq '.lanes' "$TEAM_DIR/.opencode-runtime/lanes.json" 2>/dev/null
+find "$TEAM_DIR/.opencode-runtime" -maxdepth 3 -type f | sort
+```
+
+### 启动失败产物
+
+当一次启动被标记为失败时,检查 `latest.json`:
+
+```bash
+LATEST_FAILURE="$TEAM_DIR/launch-failure-artifacts/latest.json"
+jq '.' "$LATEST_FAILURE"
+jq '.' "$(jq -r '.manifestPath' "$LATEST_FAILURE")"
+```
+
+该 manifest 包含:
+- `classification` —— 此次启动被判定为失败的原因
+- `bootstrapTransportBreadcrumb` —— 所使用的投递路径
+- 成员 spawn 状态以及已脱敏的日志/追踪
+
+## 智能体回复缺失
+
+打开任务日志和队友消息。回复缺失常常源于:
+
+- **运行时投递重试** —— 智能体可能已经作答,但消息未投递到应用。请检查投递账本(ledger)。
+- **解析或过滤** —— 智能体输出未包含预期的标记或任务引用。
+- **任务归属** —— 工作确实在会话期间发生,但因为输出中缺少正确的任务 id 而未与任务关联。
+
+::: warning 不要把沉默当成忽略
+在日志确认之前,不要假定模型忽略了消息。
+:::
+
+使用持久化的消息状态来区分“未发送”和“已发送但未渲染”:
+
+```bash
+jq '.' "$TEAM_DIR/inboxes/user.json" 2>/dev/null
+jq '.' "$TEAM_DIR/sentMessages.json" 2>/dev/null
+```
+
+检查 `from`、`to`、`messageId`、`relayOfMessageId` 和 `taskRefs`。对于 OpenCode 队友,在假定模型忽略了 prompt 之前,还要检查运行时投递证据。
+
+## 任务未关联到变更
+
+使用任务专属日志和代码审查链接。如果某个 diff 看起来是脱离关联的:
+
+- 检查智能体输出中是否包含了任务 id 或任务引用。
+- 验证智能体在进行编辑之前是否调用了 `task_add_comment`。
+- 确保智能体调用了 `task_start`,以便看板知道工作已开始。
+
+对于 OpenCode 队友,证明某个会话属于某个任务的权威证据位于 `opencode-sessions.json` 和通道(lane)manifest 条目中,而不仅仅是 UI 消息流。
+
+### 任务日志分诊
+
+当任务日志看起来不完整时,按任务 id 在任务 JSON、收件箱(inboxes)和引导事件中进行搜索:
+
+```bash
+TASK=""
+rg -n "$TASK" "$TASKS_DIR" "$TEAM_DIR/inboxes" "$TEAM_DIR/bootstrap-journal.jsonl" 2>/dev/null
+```
+
+仔细解读结果:
+
+| 证据 | 它能证明什么 | 它不能证明什么 |
+| --- | --- | --- |
+| 消息已投递 | 应用写入或转发了一条 prompt | 智能体取得了进展 |
+| 任务评论 | 智能体发布了看板可见的文本 | 该评论是有意义的进展 |
+| 原生工具行 | 运行时在某个会话中做了工作 | 除非归属匹配,否则该工作属于此任务 |
+| 变更账本条目 | 应用记录了文件变更 | 实现是正确的 |
+
+对于 OpenCode,健康的任务日志通常包含原生运行时行,如 `read`、`bash`、`edit` 或 `write`,外加 Agent Teams MCP 行。如果你只看到 `agent-teams_*` 行,请在扩大日志匹配范围之前先确认任务归属和会话边界。
+
+## 速率限制
+
+如果提供方报告了一个已知的重置时间,Agent Teams 可以在冷却结束后提醒 lead 继续。如果重置时间未知,则等待或切换提供方/运行时路径。
+
+| 提供方行为 | 建议操作 |
+| --- | --- |
+| 显示了已知的重置时间 | 等待冷却后继续 |
+| 未显示重置时间 | 切换提供方或运行时路径 |
+| 反复出现 429 | 降低并发或使用不同的模型通道(lane) |
+
+## CLI 认证问题
+
+### `claude login` 未持久化
+
+如果 CLI 在某个终端中已认证,但应用却说未认证,请验证认证是否已保存到预期的配置路径,以及应用进程是否看到相同的 `$HOME`。
+
+### OpenCode 提供方密钥被拒绝
+
+- 仔细核对 `config.json` 中的提供方名称是否与模型字符串中的提供方前缀匹配
+- 确保密钥未在提供方控制台中过期或被吊销
+
+### 认证诊断日志
+
+每次调用 `CliInstallerService.getStatus()` 都会向 Electron 日志文件夹中的 `claude-cli-auth-diag.ndjson` 追加一行(在 macOS 上通常为 `~/Library/Logs//`)。如果该文件超过 **512 KiB**,则会在下一次写入之前被截断为空。
+
+如果你在打包后的应用中看到 “Not logged in” 或认证错误,请检查此文件。
+
+## 通道(lane)引导卡住
+
+对于 OpenCode 次级通道(secondary lane):
+
+- 缺少 `inboxes/.json` 并不自动意味着这是 bug。OpenCode 通道在启动之前不必先由主收件箱创建。
+- 如果 UI 显示团队仍在启动,而主成员已经可用,那么“所有队友已加入”正在等待次级通道。
+- 如果 `Prepared communication channels for X/Y members` 卡住,请验证 `Y` 是否错误地把次级 OpenCode 成员计算在内。
+
+### 通道(lane)manifest 条目为空
+
+如果桥接(bridge)声称引导成功,但 `manifest.json` 显示 `entries: []`,问题在于**证据提交**,而不是模型行为。在 `opencode-sessions.json` 及其 manifest 条目存在之前,不得将该成员视为可投递。
+
+## 常见成员状态
+
+| 状态 | 含义 |
+| --- | --- |
+| `confirmed_alive` + `bootstrapConfirmed` | 健康且就绪 |
+| `registered` / `runtime_pending_bootstrap` | 进程或通道存在,但引导证据尚未提交 |
+| `failed_to_start` + `runtime_process` | 进程存在,但启动门控失败。请检查诊断 |
+| `failed_to_start` + `stale_metadata` | 已保存的 pid/session 已过期或已失效 |
+
+::: warning
+`member_briefing` 本身并不是运行时证据。对于 OpenCode,权威证据是已提交的运行时证据,例如 `opencode-sessions.json` 和 manifest 条目。
+:::
+
+## 运行时调试模式
+
+对于本地调试,你可以强制队友在 tmux 窗格中运行:
+
+```bash
+# Launch from a terminal
+CLAUDE_TEAM_TEAMMATE_MODE=tmux pnpm dev
+
+# Or add to custom CLI args
+--teammate-mode tmux
+```
+
+用它来检查交互式 CLI 行为。不要将其视为与进程后端完全等价。
+
+## 冒烟检查
+
+正常验证请使用桌面 Electron 应用。浏览器/Web 开发模式不包含完整的桌面运行时、IPC、提供方认证、终端或团队生命周期行为。
+
+### 仅文档的变更
+
+从仓库根目录:
+
+```bash
+pnpm --dir landing docs:build
+git diff --check -- landing/product-docs
+```
+
+### 团队生命周期变更
+
+先收窄范围,再逐步扩展:
+
+```bash
+pnpm test -- test/main/services/team/TeamProvisioningService.test.ts
+pnpm test -- test/main/services/team/TeamAgentLaunchMatrix.safe-e2e.test.ts
+pnpm typecheck
+git diff --check
+```
+
+### 实时团队冒烟测试
+
+使用一个小型团队和一个受 Git 跟踪的一次性项目:
+
+1. 用 `pnpm dev` 启动桌面应用。
+2. 创建一个 lead 加一个 builder。
+3. 请求一个带有明确验证命令的微小变更。
+4. 确认任务从 `pending` -> `in_progress` -> `completed` 移动。
+5. 打开任务日志,验证工具行、任务评论和文件变更相互对应。
+6. 清理时只停止冒烟测试自有的团队/进程。
+
+::: warning 仅做收窄清理
+在清理一次冒烟运行时,不要杀掉所有 OpenCode 主机、无关的 tmux 窗格或用户团队。
+:::
+
+## 安全清理
+
+清理过期进程时:
+
+1. 识别 pid 并确认它属于当前团队 / 通道。
+2. 只停止明确属于冒烟测试或你正在调试的那次启动的进程。
+3. **不要**为了图省事而杀掉所有 OpenCode 或共享主机进程。
+
+## 何时收集证据
+
+在寻求帮助之前,收集:
+
+- 任务 id(短的或完整的)
+- 团队名称
+- 运行时路径(`claude`、`codex` 或 `opencode`)
+- 启动日志摘录(来自 `latest.json` 或 `bootstrap-journal.jsonl`)
+- 提供方 / 模型字符串
+- 问题发生的确切时间窗口
+
+这些数据通常足以调试启动和任务生命周期问题。
+
+::: tip
+如果问题仍然存在,打开团队位于 `~/.claude/teams//` 下的持久化文件,并在更改代码之前将 UI 诊断与实时进程状态相互印证。
+:::
diff --git a/landing/product-docs/zh/index.md b/landing/product-docs/zh/index.md
new file mode 100644
index 00000000..ce9fa0a0
--- /dev/null
+++ b/landing/product-docs/zh/index.md
@@ -0,0 +1,81 @@
+---
+title: Agent Teams 文档 – 从本地桌面应用运行 AI 智能体团队
+description: Agent Teams 的文档,这是一款用于编排 AI 智能体的免费桌面应用。创建团队、在看板上观察工作进展、审查代码变更,并协调 Claude、Codex、OpenCode 与多模型工作流。
+lang: zh-Hans
+layout: home
+hero:
+ name: Agent Teams 文档
+ text: 从本地桌面应用运行 AI 智能体团队
+ tagline: 创建团队、观察工作在看板上流转、审查代码变更,并协调 Claude、Codex、OpenCode 与多模型工作流,同时不放弃对本地的掌控。
+ actions:
+ - theme: brand
+ text: 快速开始
+ link: /zh/guide/quickstart
+ - theme: alt
+ text: 安装
+ link: /zh/guide/installation
+ - theme: alt
+ text: 概念
+ link: /zh/reference/concepts
+features:
+ - icon: "01"
+ title: 团队优先的工作流
+ details: 定义角色,启动一名 lead,让智能体拆分、认领并协调任务。
+ link: /zh/guide/create-team
+ linkText: 创建团队
+ - icon: "02"
+ title: 实时看板
+ details: 在智能体工作时,观察任务在 todo、in progress、review、done 和 approved 之间流转。
+ link: /zh/guide/agent-workflow
+ linkText: 了解工作流
+ - icon: "03"
+ title: 内置代码审查
+ details: 检查以任务为范围的 diff,接受或拒绝代码块(hunk),并在智能体需要指引时留下评论。
+ link: /zh/guide/code-review
+ linkText: 审查变更
+ - icon: "04"
+ title: 运行时感知的设置
+ details: 通过你已有的访问权限,使用 Claude、Codex、OpenCode 或多模型提供方。
+ link: /zh/guide/runtime-setup
+ linkText: 配置运行时
+ - icon: "05"
+ title: 本地优先的掌控
+ details: 该桌面应用读取本地项目与运行时状态。除非选定的提供方接收到提示词上下文,否则你的代码始终留在你的机器上。
+ link: /zh/reference/privacy-local-data
+ linkText: 隐私模型
+ - icon: "06"
+ title: 可调试的团队
+ details: 当启动或任务卡住时,可追踪任务日志、运行时输出、队友消息以及运行中的进程。
+ link: /zh/guide/troubleshooting
+ linkText: 故障排查
+---
+
+
+
+## 从这里开始
+
+Agent Teams 是一款用于编排 AI 智能体团队的免费桌面应用。你不只是在向单个智能体发送孤立的提示词:你创建一个团队、分配角色,并观察智能体通过任务看板协调工作。
+
+
+
+## 启动后的下一步
+
+创建第一个团队后,浏览这些指南以进一步深入:
+
+- **运行时设置** - 配置 Claude、Codex、OpenCode 或多模型提供方:[配置运行时](/zh/guide/runtime-setup)
+- **智能体工作流** - 了解智能体如何通过任务看板协调工作:[了解工作流](/zh/guide/agent-workflow)
+- **团队简报示例** - 从真实世界的简报中学习提示词模式:[查看示例](/zh/guide/team-brief-examples)
+- **代码审查** - 检查 diff,接受或拒绝变更:[审查变更](/zh/guide/code-review)
+- **故障排查** - 诊断卡住的启动、缺失的队友以及任务失败:[故障排查](/zh/guide/troubleshooting)
+- **Git 与 worktree 策略** - 当多名队友并行编辑同一仓库时,使用 worktree 隔离:[了解 worktree](/zh/guide/git-worktree-strategy)
+- **发布说明** - 查看每个版本的新内容:[查看发布版本](/zh/reference/release-notes)
+
+## 参考
+
+当你需要准确的术语、提供方行为、贡献者架构或隐私边界时,请使用参考页面。
+
+
+
+## 产品预览
+
+
diff --git a/landing/product-docs/zh/reference/concepts.md b/landing/product-docs/zh/reference/concepts.md
new file mode 100644
index 00000000..aa4c7749
--- /dev/null
+++ b/landing/product-docs/zh/reference/concepts.md
@@ -0,0 +1,85 @@
+---
+title: 概念 – Agent Teams 文档
+description: Agent Teams 的核心术语——团队、lead、teammate、任务、看板、收件箱、运行时与审查。
+lang: zh-Hans
+---
+
+# 概念
+
+本页定义了贯穿 Agent Teams 的核心术语。请将其作为应用、任务看板、消息与审查流程的共享词汇表。
+
+## 团队
+
+团队是附属于某一项目路径的一组具名智能体。它包含一个 lead、可选的 teammate、运行时/提供方设置、prompt、收件箱、任务以及本地启动状态。
+
+## Lead {#lead}
+
+lead 是团队的协调者。它将用户目标转化为任务,分配或重新调度 teammate,跟踪阻塞项,请求审查,并推动工作在看板上不断流转。
+
+[Teammate →](#teammate)
+
+lead 消息使用与 teammate 消息不同的投递路径:应用会将 lead 收件箱中的条目转发到 lead 运行时,而 teammate 则在两轮之间读取它们各自的收件箱文件。
+
+## Teammate {#teammate}
+
+teammate 是团队中的非 lead 智能体。teammate 通常承担聚焦的角色,例如构建者、审查者、研究者或测试者。teammate 可以接收直接消息、任务分配、任务评论和审查请求。
+
+[Lead ↑](#lead)
+
+## 任务
+
+任务是持久的工作单元。它具有 id、状态、负责人、描述、评论、日志、附件、任务引用以及可审查的变更。
+
+常见的任务状态有 `todo`、`in_progress`、`done`、`review` 和 `approved`。在内部,任务文件存储工作状态,而审查与审批的位置也可以使用看板叠加状态。
+
+## 看板
+
+看板是团队工作的看板视图。它让你能够按状态浏览任务、打开任务详情、检查日志、审查 diff、审批已完成的工作,或请求更改。
+
+## 收件箱
+
+收件箱是团队参与者的本地消息文件。Agent Teams 将收件箱用于用户消息、lead 消息、teammate 消息、运行时投递元数据、跨团队消息以及部分系统通知。
+
+消息是持久的本地记录。投递仍然取决于所选运行时处于活动状态并能够处理其下一轮。
+
+## Agent Block
+
+agent block 是用 `... ` 包裹的隐藏的、仅供智能体使用的指令文本。UI 会在面向人类的常规显示中剥离这些块,但智能体与运行时投递可以将它们用于协调细节。
+
+当前的规范标记是 `info_for_agent`。较旧的文档可能使用带有 `info_for_agent` 标记的围栏代码块,或 XML 风格的 `` 标签——这些都是遗留模式,遇到时应迁移为 `info_for_agent`。(原始标签名为 `agent-block`;下划线形式 `` 在 VitePress 源文件中使用,以避免 HTML 解析。)
+
+## 上下文阶段
+
+上下文阶段是会话上下文时间线中的一个片段。压缩会开启一个新阶段,因此可以分析重置前后的 token 与上下文用量。
+
+上下文跟踪会区分不同类别,例如项目指令、提及的文件、工具输出、思考文本、团队协调与用户消息。这些数字是诊断信息,而非提供方的计费账单。
+
+## 运行时
+
+运行时是运行某一智能体轮次的本地执行路径。受支持的运行时路径包括 Claude Code、Codex 和 OpenCode。
+
+运行时掌控模型执行行为、认证细节、工具执行语义、速率限制、模型可用性,以及部分转录/日志格式。
+
+## 提供方
+
+提供方是运行时背后的模型访问路径。当前的提供方 id 包括 Anthropic、Codex、Gemini 和 OpenCode。OpenCode 可以通过其自身配置路由到许多模型提供方。
+
+Agent Teams 编排任务与消息,但它不会取代提供方的认证或提供方的策略。
+
+## Solo 模式
+
+Solo 模式运行一个单成员团队。它适用于快速工作、降低协调开销,以及在扩展为完整团队之前验证某个 prompt。
+
+## 跨团队通信
+
+智能体可以在团队内部以及跨团队发送消息。当不同团队负责相关工作并需要在不把所有内容合并成一个庞大团队的前提下进行协调时,可以使用这一功能。
+
+## 自主级别
+
+自主级别控制智能体在询问之前能够做多少事情。更高的自主级别更快;更低的自主级别对于敏感的代码路径、持久化、提供方认证、Git 操作与发布更为安全。
+
+## 审查
+
+审查是以任务为范围的验收流程。任务可以进入 review,接收评论或请求的更改,然后在结果被接受时进入 approved。
+
+审查与本地 diff 及任务历史绑定,因此当任务保持聚焦、且智能体提及它们正在处理的任务时,效果最佳。
diff --git a/landing/product-docs/zh/reference/contributor-architecture.md b/landing/product-docs/zh/reference/contributor-architecture.md
new file mode 100644
index 00000000..2208aeac
--- /dev/null
+++ b/landing/product-docs/zh/reference/contributor-architecture.md
@@ -0,0 +1,55 @@
+---
+title: 贡献者架构 – Agent Teams 文档
+description: 面向贡献者的指南,介绍功能布局、运行时/提供方边界、硬性护栏以及权威架构文档。
+lang: zh-Hans
+---
+
+# 贡献者架构
+
+本页是面向贡献者的导览图。它指向权威的仓库指引,而不是重述每一条实现规则。
+
+## 权威来源
+
+在修改应用时,请将以下文件作为唯一可信来源:
+
+| 需求 | 权威来源 |
+| --- | --- |
+| 仓库概览与命令 | [README.md](https://github.com/777genius/agent-teams-ai/blob/main/README.md) |
+| 本地协作约定 | [CLAUDE.md](https://github.com/777genius/agent-teams-ai/blob/main/CLAUDE.md) |
+| 硬性护栏 | [AGENT_CRITICAL_GUARDRAILS.md](https://github.com/777genius/agent-teams-ai/blob/main/AGENT_CRITICAL_GUARDRAILS.md) |
+| 中型与大型功能布局 | [docs/FEATURE_ARCHITECTURE_STANDARD.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/FEATURE_ARCHITECTURE_STANDARD.md) |
+| 智能体团队启动调试 | [docs/team-management/debugging-agent-teams.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/team-management/debugging-agent-teams.md) |
+
+## 功能布局
+
+中型与大型功能应位于 `src/features//` 下,并遵循功能架构标准。将功能内部细节隐藏在公共入口点之后,避免跨越功能边界的深层导入。
+
+对于新的工作,请以现有的 `src/features/recent-projects` 切片作为本地参考实现来起步。当创建功能切片带来的结构开销大于其价值时,小修小补可以保留在现有代码路径附近。
+
+## 运行时与提供方边界
+
+Agent Teams 负责编排:团队、任务、消息、启动状态、审查界面、诊断以及本地持久化。
+
+所选的运行时/提供方路径负责模型执行、认证、模型可用性、速率限制、工具语义以及运行时特定的会话记录证据。不要让 prompt 或 UI 状态去弥补缺失的认证、缺失的二进制文件、被拒绝的 model id 或提供方故障。关于面向用户的设置细节,请参阅 [提供方与运行时](/zh/reference/providers-runtimes)。
+
+## 智能体团队调试
+
+对于启动挂起、OpenCode `registered` / bootstrap 未确认状态、缺失的队友回复或可疑的任务日志,请从专门的调试运行手册开始。检查 `~/.claude/teams//launch-failure-artifacts/latest.json` 下最新的启动失败产物,然后将 UI 状态与持久化文件以及运行时特定的证据相互关联。
+
+调试时避免大范围清理。仅停止你能确认属于该问题的进程、lane、团队或冒烟运行。
+
+## 贡献者约定
+
+- 在常规开发中,使用 `pnpm dev` 启动桌面 Electron 应用。
+- 不要将浏览器开发模式当作桌面运行时、IPC、终端、提供方认证或团队生命周期行为的替代品。
+- 将 Electron 的 main、preload、renderer、shared 与功能各自的职责分开。
+- 使用 `wrapAgentBlock(text)` 处理仅供智能体使用的块,而不是手动拼接标记。
+- 优先进行有针对性的验证。除非任务明确与格式化相关,否则避免大范围的 `lint:fix` 或格式变动。
+- 将解析、任务生命周期、提供方/运行时检测、持久化、IPC、Git 以及审查流程视为高风险区域,它们需要有针对性的测试或清晰的验证路径。
+
+## 相关页面
+
+- [运行时设置](/zh/guide/runtime-setup)
+- [故障排查](/zh/guide/troubleshooting)
+- [代码审查](/zh/guide/code-review)
+- [隐私与本地数据](/zh/reference/privacy-local-data)
diff --git a/landing/product-docs/zh/reference/faq.md b/landing/product-docs/zh/reference/faq.md
new file mode 100644
index 00000000..62fccec1
--- /dev/null
+++ b/landing/product-docs/zh/reference/faq.md
@@ -0,0 +1,95 @@
+---
+title: 常见问题 – Agent Teams 文档
+description: 关于 Agent Teams 的常见问题——价格、模型访问、运行时、隐私、审查与故障排查。
+lang: zh-Hans
+---
+
+# 常见问题
+
+## Agent Teams 是免费的吗?
+
+是的。该应用免费且开源。根据你使用的内容,提供方或运行时访问仍可能产生费用。
+
+## Agent Teams 是否包含模型访问?
+
+不包含。Agent Teams 是本地的编排与 UI 层。模型访问来自所选的运行时/提供方路径,例如 Claude Code、Codex 或 OpenCode。
+
+## 支持哪些运行时?
+
+支持的运行时路径为 Claude Code、Codex 和 OpenCode。当运行时暴露相应信息时,该应用还会跟踪提供方 id,例如 Anthropic、Codex、Gemini 和 OpenCode。
+
+## 我需要先安装 Claude Code 或 Codex 吗?
+
+并非总是如此。该应用会从 UI 引导你完成运行时检测与设置。某些路径仍需要外部运行时认证。
+
+OpenCode 的设置与 Claude Code 和 Codex 的设置是分开的。如果某次启动失败,请在修改团队 prompt 之前先检查运行时状态和提供方认证。
+
+## 如何检查某个运行时是否就绪?
+
+先在终端运行该运行时命令:
+
+```bash
+claude --version
+codex --version
+opencode --version
+```
+
+然后确认你所选路径的提供方认证。如果该命令或认证检查在 Agent Teams 之外失败,请先修复设置,再启动团队。
+
+## 它会把我的代码上传到 Agent Teams 服务器吗?
+
+不会。Agent Teams 不是云端代码同步服务。根据你所选的运行时,由提供方支持的模型调用可能会接收到 prompt 上下文。
+
+## 团队文件存储在哪里?
+
+团队协调数据本地存储在 `~/.claude/teams//`(macOS/Linux)或 `%APPDATA%\Claude\teams\\`(Windows)下,任务文件存储在 `~/.claude/tasks//` 或 `%APPDATA%\Claude\tasks\\` 下,项目会话数据在可用时存储在 `~/.claude/projects//` 下。
+
+## 哪些内容会离开我的机器?
+
+当某个智能体使用由提供方支持的模型时,prompt 上下文、所选文件内容、工具结果、命令输出、任务文本、评论以及附件可能会通过运行时/提供方路径离开你的机器。具体行为取决于运行时和提供方。
+
+## 智能体之间可以互相沟通吗?
+
+可以。智能体可以给队友发消息、在任务上评论、跨团队协调,并使用任务引用让对话与工作保持关联。
+
+## 第一条团队 prompt 里应该写什么?
+
+给 lead 一个具体的产出目标、文件或功能边界、风险限制以及验证预期。例如:
+
+```text
+Improve the docs quickstart. Keep edits inside landing/product-docs, add practical examples, and run `pnpm --dir landing docs:build` before marking work done.
+```
+
+## 我可以在接受代码之前先审查它吗?
+
+可以。审查流程围绕任务范围的 diff 和代码块(hunk)级别的决策构建。
+
+## 什么是 Agent Block?
+
+Agent Block 是隐藏的、仅供智能体使用的文本,用诸如 `... ` 这样的标记包裹。该应用会在面向用户的常规显示中将其剥离,但会保留它以供智能体协调使用。
+
+## 什么是 solo 模式?
+
+solo 模式是单智能体团队。它适用于较小的任务以及较低的协调开销。
+
+## 我应该使用 worktree 隔离吗?
+
+当多个 OpenCode 队友可能并行编辑同一个 Git 项目时,请使用它。它能减少文件冲突,但需要一个受 Git 跟踪的项目,并且目前仅适用于 OpenCode 成员。
+
+## 不同的队友可以使用不同的提供方吗?
+
+可以,当所选的运行时路径支持时,提供方/模型设置可以按团队成员分别携带。OpenCode 是实现广泛多提供方路由的主要路径。
+
+## 为什么某个任务会显示 review 或 approved,而与 done 分开?
+
+工作状态和审查状态相关但并不相同。一个任务可能从智能体的角度看已经 done,然后在 kanban UI 中经过 review 和审批流程。
+
+## 启动卡住时我应该怎么做?
+
+打开故障排查,收集启动诊断信息,检查 `~/.claude/teams//`,并在修改 prompt 之前验证运行时/提供方认证。
+
+对于 OpenCode,请在认定某个队友已在线却忽略消息之前,先检查 lane/会话证据。
+
+## 为什么不同运行时的日志各不相同?
+
+Claude Code、Codex 和 OpenCode 暴露的转录格式和运行时证据各不相同。Agent Teams 会尽可能地将其规范化,但日志的完整性和归属可能因运行时而异。
diff --git a/landing/product-docs/zh/reference/privacy-local-data.md b/landing/product-docs/zh/reference/privacy-local-data.md
new file mode 100644
index 00000000..e781609c
--- /dev/null
+++ b/landing/product-docs/zh/reference/privacy-local-data.md
@@ -0,0 +1,82 @@
+---
+title: 隐私与本地数据 – Agent Teams 文档
+description: Agent Teams 在本地存储哪些数据、哪些数据可能通过提供方支持的模型调用离开你的机器,以及实用的隐私指南。
+lang: zh-Hans
+---
+
+# 隐私与本地数据
+
+Agent Teams 以本地优先为原则,但你所选择的运行时/提供方路径仍然很重要。本页介绍桌面应用在本地存储哪些数据,以及当智能体调用提供方支持的模型时,哪些数据可能离开你的机器。
+
+## 哪些数据留在本地
+
+桌面应用在你的机器上运行,并读取本地的项目/运行时数据来驱动 UI。典型的本地数据包括:
+
+- 项目文件
+- 团队配置与成员元数据
+- 任务元数据、任务评论与任务引用
+- 收件箱消息
+- 运行时/会话日志
+- 启动状态与引导诊断信息
+- 审查状态
+- 本地应用设置
+
+重要的本地位置包括:
+
+| 平台 | 位置 | 用途 |
+| --- | --- | --- |
+| macOS/Linux | `~/.claude/teams//` | 团队配置、成员元数据、收件箱、启动状态、引导证据、运行时诊断信息、已发送消息记录、kanban 状态,以及与审查相关的团队文件。 |
+| Windows | `%APPDATA%\Claude\teams\\` | 同上——团队配置、成员元数据、收件箱、启动状态与诊断信息。 |
+| macOS/Linux | `~/.claude/tasks//` | 团队看板的持久化任务 JSON 文件。 |
+| Windows | `%APPDATA%\Claude\tasks\\` | 同上——持久化任务 JSON 文件。 |
+| macOS/Linux | `~/.claude/projects//` | Claude/Codex 风格的项目会话文件,用于会话历史、上下文分析以及基于转录的 UI。 |
+| Windows | `%APPDATA%\Claude\projects\\` | 同上——项目会话文件。 |
+
+具体文件可能因运行时和应用版本而异。在调试启动问题时,最新的证据通常位于相应的 `~/.claude/teams//`(或 `%APPDATA%\Claude\teams\\`)文件夹下。
+
+## 哪些数据可能离开你的机器
+
+Agent Teams 本身并不是面向你代码仓库的云端代码同步服务。它无需将你的整个项目上传到 Agent Teams 服务器,即可显示看板、收件箱、日志或审查 UI。
+
+然而,当一个智能体请求提供方支持的模型进行工作时,提示词上下文、所选文件内容、任务文本、评论、工具结果、命令输出以及其他运行时提供的上下文,可能会通过所选的运行时/提供方路径被发送出去。发送的内容取决于运行时、模型、工具调用、提示词以及提供方配置。
+
+提供方身份认证、提供方侧的数据保留、训练、日志记录、区域处理以及计费,均受你所选择的提供方/运行时的政策约束。对于敏感项目,请查阅这些政策。
+
+常见示例:
+
+| 操作 | 可能通过运行时/提供方发送的数据 |
+| --- | --- |
+| 让智能体编辑某个文件 | 任务提示词、相关文件内容、工具结果与命令输出 |
+| 附加一张截图 | 附件内容以及周围的任务/评论文本 |
+| 请求代码审查 | diff 上下文、所选文件、评论与验证日志 |
+| 调试失败的命令 | 错误输出、堆栈跟踪与引用的源码片段 |
+
+## 应用不保证哪些事项
+
+- 它无法保证提供方支持的模型调用永远不会接收到私有代码。
+- 它无法覆盖提供方的数据保留或计费政策。
+- 它无法让远程提供方表现得像一个完全本地的模型。
+- 它无法保护那些智能体被指示粘贴到提示词、任务评论、文件或命令中的密钥。
+- 它无法让每个运行时都暴露相同的转录或审计细节。
+
+## 实用指南
+
+- 不要将密钥附加到任务、评论或私信中。
+- 对于敏感项目,请查阅提供方政策。
+- 对于有风险的代码仓库,使用较低的自主级别。
+- 处理私有代码时,保持任务范围狭窄。
+- 调试时优先使用本地证据和日志。
+- 在让智能体处理机密材料之前,检查生成的提示词、任务描述与附加文件。
+- 使用符合你隐私要求的提供方/模型路径。
+
+在敏感的代码仓库上使用 Agent Teams 之前:
+
+1. 从工作区和任务附件中移除密钥
+2. 选择你被允许使用的运行时/提供方路径
+3. 从低自主级别和小任务开始
+4. 在扩大范围之前,审查任务提示词与生成的评论
+5. 将日志保留在本地,除非你有意为获得支持而分享它们
+
+## 开源模式
+
+应用本身是开源且免费的。你可以在代码仓库中查看本地编排、任务跟踪、收件箱、运行时诊断以及审查流程的工作方式。
diff --git a/landing/product-docs/zh/reference/providers-runtimes.md b/landing/product-docs/zh/reference/providers-runtimes.md
new file mode 100644
index 00000000..5841390a
--- /dev/null
+++ b/landing/product-docs/zh/reference/providers-runtimes.md
@@ -0,0 +1,115 @@
+---
+title: 提供方与运行时 – Agent Teams 文档
+description: 受支持的运行时路径(Claude Code、Codex、OpenCode)、提供方 ID、模型命名、多提供方策略以及能力检查。
+lang: zh-Hans
+---
+
+# 提供方与运行时
+
+Agent Teams 将编排与模型访问分离开来。应用负责管理团队、任务、消息、启动状态和审查 UI;所选的运行时/提供方路径则执行实际的模型工作。
+
+## 应用提供什么
+
+Agent Teams 提供:
+
+- 团队与任务编排
+- 看板 UI
+- 队友消息传递
+- 任务日志
+- 审查 UI
+- 本地项目集成
+- 运行时检测与能力检查
+- 本地日志与诊断
+
+## 运行时提供什么
+
+运行时提供:
+
+- 模型执行
+- 提供方身份验证
+- 工具执行行为
+- 特定于模型的速率限制与能力
+- 特定于运行时的转录与投递凭证
+
+## 受支持的运行时路径
+
+| 运行时路径 | 提供方/模型路径 | 最佳适用场景 | 备注 |
+| --- | --- | --- | --- |
+| Claude Code | Anthropic / Claude 模型 | Claude Code 用户以及由 Anthropic 支持的工作流 | Claude 团队默认的本地优先路径。需要本地具备运行时及账户访问权限。 |
+| Codex | Codex / 由 OpenAI 支持的模型 | Codex 原生工作流 | 在可用时使用 Codex 运行时集成以及 Codex 认证/账户状态。部分诊断与 Claude 转录不同。 |
+| OpenCode | OpenCode 托管的模型路由 | 多提供方团队以及广泛的模型覆盖 | OpenCode 可以路由到许多模型提供方。Agent Teams 将 OpenCode 通道视为特定于运行时的凭证,并在通道身份不明确时避免臆测。 |
+
+Gemini 作为一条受支持的提供方路径提供,支持 Google ADC(gcloud auth)、Gemini CLI OAuth 以及 API 密钥身份验证。当运行时报告其可用时,它会在团队创建和运行时设置 UI 中与其他提供方一同出现。
+
+## 提供方 ID
+
+应用目前在团队/运行时配置中识别以下提供方 ID:
+
+| 提供方 ID | 显示意图 |
+| --- | --- |
+| `anthropic` | Anthropic / Claude Code 路径 |
+| `codex` | Codex 路径 |
+| `gemini` | Gemini 提供方路径(Google ADC、Gemini CLI 或 API 密钥) |
+| `opencode` | OpenCode 路径,包括 OpenCode 托管的提供方路由 |
+
+不要将此表解读为对每台机器上每个模型的每个提供方都已认证、已安装或可用的保证。对于某次具体启动而言,运行时状态和能力检查才是事实来源。
+
+## 模型 ID
+
+模型 ID 会被传递给所选的运行时。Agent Teams 不会将某个提供方的模型目录改写为统一的命名方案。
+
+示例:
+
+| 提供方路径 | 示例模型 ID | 备注 |
+| --- | --- | --- |
+| Claude Code | `opus`、`sonnet` 或完整的 Claude 模型 ID | 可用性取决于 Claude Code 与账户访问权限 |
+| Codex | `gpt-5.4`、`gpt-5.3-codex` | 可用性来自 Codex 账户/运行时状态 |
+| OpenCode | `openrouter/moonshotai/kimi-k2.6` | 前缀必须与某个 OpenCode 提供方配置相匹配 |
+
+如果某个模型名称被拒绝,请先直接在运行时/提供方中进行验证。更改团队简报并不能让一个不可用的模型启动。
+
+## 多提供方策略
+
+Agent Teams 让编排具备提供方感知能力,但并不被提供方所拥有:
+
+- 团队、任务、收件箱、评论、审查状态和启动诊断都保留在本地的 Agent Teams 存储中
+- 每位成员都可以通过团队启动元数据携带提供方/模型设置
+- 模型可用性、身份验证、速率限制和工具行为仍由运行时/提供方负责
+- 当你希望让一个团队使用多条提供方/模型通道时,OpenCode 是覆盖面最广的路由路径
+
+关于面向贡献者的边界以及规范的实现指南,请参阅[贡献者架构](/zh/reference/contributor-architecture)。
+
+推荐模式:
+
+| 模式 | 何时有帮助 | 风险 |
+| --- | --- | --- |
+| 所有成员使用同一个提供方 | 首次启动、敏感仓库、最简单的调试 | 共享的速率限制可能让整个团队停摆 |
+| 强 lead + 更廉价的 builder | 在降低实现成本的同时保持规划/审查的可靠性 | builder 的产出可能需要更严格的审查 |
+| 分别使用 builder 和 reviewer 模型 | 捕捉特定于模型的盲点 | 需要更多设置,并需检查更多归属信息 |
+
+## 提供方成本
+
+Agent Teams 免费且开源。你可以从内置的免费模型开始,无需身份验证——无需注册、API 密钥或信用卡。付费或基于账户的提供方使用由你所选择的运行时/提供方管理:订阅额度、API 密钥、账户认证、速率限制和提供方政策都仍然外置于应用之外。
+
+## 能力检查
+
+在设置过程中,应用可能会执行访问与能力检查。这有助于在团队启动于预配中途失败之前,检测出缺失的运行时认证。
+
+能力检查可能会报告:某个提供方存在但未认证、模型列表不可用、缺少某条运行时路径,或某项特定的扩展能力不受支持。请将这些结果视为设置诊断,而非任务失败。
+
+典型的设置修复:
+
+| 检查结果 | 应采取的措施 |
+| --- | --- |
+| 缺少运行时 | 安装 CLI 或修复 `PATH` |
+| 提供方未认证 | 运行提供方登录流程或添加所需的 API 密钥 |
+| 模型不可用 | 选择该运行时模型列表中可见的模型 |
+| 能力不受支持 | 为该队友改用另一条运行时路径 |
+
+## 应预期的限制
+
+- 受支持运行时并不意味着 Claude Code、Codex 和 OpenCode 之间具有同等的功能对等性。
+- 日志和转录的覆盖范围因运行时而异。
+- 在应用能够安全归属运行时日志之前,OpenCode 通道需要稳定的通道/会话凭证。
+- 提供方的模型名称与可用性可能在应用之外发生变化。
+- 团队提示词无法修复缺失的认证、缺失的 PATH 条目、提供方中断或耗尽的速率限制。
diff --git a/landing/product-docs/zh/reference/release-notes.md b/landing/product-docs/zh/reference/release-notes.md
new file mode 100644
index 00000000..307cd1c8
--- /dev/null
+++ b/landing/product-docs/zh/reference/release-notes.md
@@ -0,0 +1,42 @@
+---
+title: 发布说明 – Agent Teams 文档
+description: Agent Teams 的发布说明与变更日志。提供指向权威 RELEASE.md 与 CHANGELOG.md 的链接以获取完整细节。
+lang: zh-Hans
+---
+
+# 发布说明
+
+当前发布版本:**v1.2.0**(2026-03-31)。`main` 分支上仍在持续积极开发,包含尚未发布的成员工作同步、OpenCode 投递加固以及 CI 稳定性方面的改动。
+
+## 发布机制
+
+Agent Teams 遵循[语义化版本](https://semver.org/)。推送到仓库的标签会触发一个自动化的[发布工作流](https://github.com/777genius/agent-teams-ai/blob/main/docs/RELEASE.md),该工作流会为 macOS、Windows 和 Linux 构建签名包,然后将它们发布到 GitHub Releases。
+
+## 近期发布
+
+### v1.2.0 — Agent Graph、按团队工具审批、交互式 AskUserQuestion
+
+Agent Graph 提供力导向可视化与看板任务布局,按团队的工具审批控制并附带可读的权限提示,任务评论通知,以及交互式 AskUserQuestion 按钮。权限系统全面改造,加入 Write/Edit/NotebookEdit 预置以及 MCP 工具目录集成。参见[完整变更日志](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md#120---2026-03-31)。
+
+### v1.1.0 — React 19 + Electron 40、用户发起的任务启动
+
+迁移到 React 19 + Electron 40,从看板发起的用户启动任务,认证故障排查指南,针对 R/Ruby/PHP/SQL 的语法高亮,会话记录搜索速度提升 3 倍,WSL/Windows 路径修复,以及 XSS 漏洞修复。参见[完整变更日志](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md#110---2026-03-25)。
+
+### v1.0.0 — 首个公开发布
+
+首个稳定构建:打包应用中的 CLI/认证可靠性,IPC 加固,带签名 macOS 构建的跨平台打包,开源治理文档(LICENSE、CONTRIBUTING、CODE_OF_CONDUCT、SECURITY)。参见[完整变更日志](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md#100---2026-03-23)。
+
+## 权威来源
+
+| 文档 | 说明 |
+| --- | --- |
+| [RELEASE.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/RELEASE.md) | 发布流程、版本管理指南、构件命名、自动更新设置以及发布说明模板。 |
+| [CHANGELOG.md](https://github.com/777genius/agent-teams-ai/blob/main/docs/CHANGELOG.md) | 完整变更日志,从用户视角列出所有版本、功能、改进与缺陷修复。 |
+| [GitHub Releases](https://github.com/777genius/agent-teams-ai/releases) | 适用于所有平台的可下载安装包。 |
+
+## 相关页面
+
+- [安装](/zh/guide/installation)
+- [快速开始](/zh/guide/quickstart)
+- [贡献者架构](/zh/reference/contributor-architecture)
+- [开发者](/zh/developers/)
diff --git a/landing/public/docs/index.html b/landing/public/docs/index.html
new file mode 100644
index 00000000..9cf7ee07
--- /dev/null
+++ b/landing/public/docs/index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+ Redirecting to Agent Teams Docs
+
+
+ Agent Teams Docs
+
+
diff --git a/landing/public/docs/ru/index.html b/landing/public/docs/ru/index.html
new file mode 100644
index 00000000..c2d0514d
--- /dev/null
+++ b/landing/public/docs/ru/index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+ Redirecting to Agent Teams Docs
+
+
+ Agent Teams Docs
+
+
diff --git a/landing/public/screenshots/guides/code-review-annotated.png b/landing/public/screenshots/guides/code-review-annotated.png
new file mode 100644
index 00000000..33688239
Binary files /dev/null and b/landing/public/screenshots/guides/code-review-annotated.png differ
diff --git a/landing/public/screenshots/guides/create-team-annotated.png b/landing/public/screenshots/guides/create-team-annotated.png
new file mode 100644
index 00000000..b93cf64b
Binary files /dev/null and b/landing/public/screenshots/guides/create-team-annotated.png differ
diff --git a/landing/public/screenshots/guides/task-board-annotated.png b/landing/public/screenshots/guides/task-board-annotated.png
new file mode 100644
index 00000000..ec57cbc8
Binary files /dev/null and b/landing/public/screenshots/guides/task-board-annotated.png differ
diff --git a/landing/public/screenshots/guides/task-detail-annotated.png b/landing/public/screenshots/guides/task-detail-annotated.png
new file mode 100644
index 00000000..be8517aa
Binary files /dev/null and b/landing/public/screenshots/guides/task-detail-annotated.png differ
diff --git a/landing/public/screenshots/product-preview.jpg b/landing/public/screenshots/product-preview.jpg
new file mode 100644
index 00000000..d1ae6f0d
Binary files /dev/null and b/landing/public/screenshots/product-preview.jpg differ
diff --git a/landing/server/routes/llms.txt.ts b/landing/server/routes/llms.txt.ts
index 93b8268d..1c43f160 100644
--- a/landing/server/routes/llms.txt.ts
+++ b/landing/server/routes/llms.txt.ts
@@ -1,4 +1,5 @@
import { defaultLocale, getLocalizedPagePath, sitemapPages, supportedLocales } from "~/data/i18n";
+import { normalizeDocsSiteUrl } from "~/utils/docsUrl";
const trimTrailingSlash = (value: string) => value.replace(/\/+$/, "");
@@ -11,6 +12,7 @@ export default defineEventHandler((event) => {
const githubUrl = `https://github.com/${githubRepo}`;
const releasesUrl = `${githubUrl}/releases`;
const toSiteUrl = (path: string) => `${siteUrl}${path === "/" ? "/" : `/${path.replace(/^\/+/, "")}`}`;
+ const docsSiteUrl = normalizeDocsSiteUrl(config.public.docsSiteUrl) || toSiteUrl("/docs/");
setHeader(event, "content-type", "text/plain; charset=utf-8");
@@ -32,8 +34,8 @@ export default defineEventHandler((event) => {
- Homepage (${defaultLocale}): ${toSiteUrl("/")}
- Download: ${toSiteUrl("/download")}
-- Documentation: ${toSiteUrl("/docs/")}
-- Documentation llms.txt: ${toSiteUrl("/docs/llms.txt")}
+- Documentation: ${docsSiteUrl}
+- Documentation llms.txt: ${docsSiteUrl}llms.txt
- GitHub repository: ${githubUrl}
- Releases: ${releasesUrl}
- Sitemap: ${toSiteUrl("/sitemap.xml")}
diff --git a/landing/server/routes/robots.txt.ts b/landing/server/routes/robots.txt.ts
index 71180757..ca59055e 100644
--- a/landing/server/routes/robots.txt.ts
+++ b/landing/server/routes/robots.txt.ts
@@ -1,12 +1,15 @@
+import { normalizeDocsSiteUrl } from "~/utils/docsUrl";
+
export default defineEventHandler((event) => {
const config = useRuntimeConfig();
const siteUrl = ((config.public.siteUrl as string) || "https://777genius.github.io/agent-teams-ai").replace(/\/+$/, "");
+ const docsSiteUrl = normalizeDocsSiteUrl(config.public.docsSiteUrl) || `${siteUrl}/docs/`;
setHeader(event, "content-type", "text/plain; charset=utf-8");
return `User-agent: *
Allow: /
Sitemap: ${siteUrl}/sitemap.xml
-Sitemap: ${siteUrl}/docs/sitemap.xml
+Sitemap: ${docsSiteUrl}sitemap.xml
`;
});
diff --git a/landing/utils/docsUrl.ts b/landing/utils/docsUrl.ts
new file mode 100644
index 00000000..db0796b7
--- /dev/null
+++ b/landing/utils/docsUrl.ts
@@ -0,0 +1,29 @@
+type DocsLocale = string | undefined;
+
+const trimTrailingSlash = (value: string) => value.replace(/\/+$/, '');
+const withTrailingSlash = (value: string) => `${trimTrailingSlash(value)}/`;
+
+export function normalizeDocsSiteUrl(value: unknown): string | null {
+ if (typeof value !== 'string') return null;
+
+ const trimmed = value.trim();
+ if (!trimmed) return null;
+
+ return withTrailingSlash(trimmed);
+}
+
+export function buildDocsHref(args: {
+ locale?: DocsLocale;
+ docsSiteUrl?: unknown;
+ embeddedBaseURL: string;
+}): string {
+ const localizedPath = args.locale === 'ru' ? 'ru/' : '';
+ const externalDocsUrl = normalizeDocsSiteUrl(args.docsSiteUrl);
+
+ if (externalDocsUrl) {
+ return `${externalDocsUrl}${localizedPath}`;
+ }
+
+ const base = args.embeddedBaseURL.replace(/\/?$/, '/');
+ return `${base}${args.locale === 'ru' ? 'docs/ru/' : 'docs/'}`;
+}
diff --git a/mcp-server/package.json b/mcp-server/package.json
index 71e2a285..988eda5a 100644
--- a/mcp-server/package.json
+++ b/mcp-server/package.json
@@ -48,6 +48,6 @@
"vitest": "^3.1.4"
},
"engines": {
- "node": ">=24.16.0 <25"
+ "node": ">=24.15.0 <25"
}
}
diff --git a/package.json b/package.json
index ebbda85d..e44bcb8f 100644
--- a/package.json
+++ b/package.json
@@ -17,10 +17,11 @@
"url": "https://github.com/777genius/agent-teams-ai/issues"
},
"engines": {
- "node": ">=24.16.0 <25"
+ "node": ">=24.15.0 <25"
},
"main": "dist-electron/main/index.cjs",
"scripts": {
+ "preinstall": "node ./scripts/ci/enforce-pnpm-install.mjs",
"dev": "node ./scripts/dev-with-runtime.mjs",
"dev:mcp": "node ./scripts/dev-with-runtime.mjs --remoteDebuggingPort 9222",
"dev:kill": "node bin/kill-dev.js",
@@ -31,7 +32,7 @@
"opencode:prove-team-provisioning": "node ./scripts/prove-opencode-team-provisioning.mjs",
"team:prove-agent-cli-launch": "node ./scripts/prove-agent-cli-launch.mjs",
"team:prove-provider-launch-stress": "node ./scripts/prove-provider-launch-stress.mjs",
- "team:prove-launch-matrix": "pnpm exec vitest run --maxWorkers 1 --minWorkers 1 test/main/services/team/TeamAgentLaunchMatrix.safe-e2e.test.ts",
+ "team:prove-launch-matrix": "pnpm exec vitest run --maxWorkers=1 test/main/services/team/TeamAgentLaunchMatrix.safe-e2e.test.ts",
"team:smoke-changes-real-data": "tsx scripts/team-changes-real-data-smoke.ts",
"smoke:codex-runtime-install": "tsx scripts/smoke/codex-runtime-install.ts",
"prebuild": "node ./scripts/ci/verify-radix-presence-patch.mjs && tsx scripts/fetch-pricing-data.ts && pnpm --filter agent-teams-controller build && pnpm --filter agent-teams-mcp build",
@@ -80,7 +81,7 @@
"i18n:validate": "tsx scripts/i18n/validate.ts",
"i18n:types": "i18next-cli types --quiet",
"test": "vitest run",
- "test:ci": "vitest run --maxWorkers 1 --minWorkers 1",
+ "test:ci": "vitest run --maxWorkers=1",
"test:task-change-ledger": "vitest run test/main/services/team/TaskChangeLedgerReader.test.ts test/main/services/team/taskChangeLedgerFixtures.integration.test.ts test/main/services/team/ReviewApplierService.test.ts test/main/services/team/FileContentResolver.test.ts test/main/services/team/ChangeExtractorService.test.ts test/renderer/store/changeReviewSlice.test.ts test/renderer/utils/reviewKey.test.ts test/main/services/team/TeamLogSourceTracker.test.ts test/main/services/team/stallMonitor/TeamTaskLogFreshnessReader.test.ts",
"test:watch": "vitest",
"test:coverage": "vitest run --coverage",
@@ -393,10 +394,15 @@
},
"packageManager": "pnpm@10.33.4+sha512.1c67b3b359b2d408119ba1ed289f34b8fc3c6873412bec6fd264fbdc82489e510fcbecb9ce9d22dae7f3b76269d8441046014bdca53b9979cd7a561ad631b800",
"pnpm": {
+ "auditConfig": {
+ "ignoreGhsas": [
+ "GHSA-5xrq-8626-4rwp"
+ ]
+ },
"overrides": {
"@hono/node-server@1": "1.19.13",
"@xmldom/xmldom": "0.8.13",
- "axios": "1.15.2",
+ "axios": "1.16.1",
"brace-expansion@1": "1.1.13",
"brace-expansion@2": "2.0.3",
"brace-expansion@5": "5.0.6",
@@ -448,6 +454,8 @@
"@radix-ui/react-dismissable-layer@1.1.11": "patches/@radix-ui__react-dismissable-layer@1.1.11.patch",
"@radix-ui/react-popper@1.2.8": "patches/@radix-ui__react-popper@1.2.8.patch",
"@radix-ui/react-select@2.2.6": "patches/@radix-ui__react-select@2.2.6.patch",
+ "@radix-ui/react-slot@1.2.3": "patches/@radix-ui__react-slot@1.2.3.patch",
+ "@radix-ui/react-slot@1.2.4": "patches/@radix-ui__react-slot@1.2.4.patch",
"@radix-ui/react-tooltip@1.2.8": "patches/@radix-ui__react-tooltip@1.2.8.patch",
"@radix-ui/react-menu@2.1.16": "patches/@radix-ui__react-menu@2.1.16.patch",
"@radix-ui/react-checkbox@1.3.3": "patches/@radix-ui__react-checkbox@1.3.3.patch"
diff --git a/packages/agent-graph/package.json b/packages/agent-graph/package.json
index 8eca5d33..f6bb1b1e 100644
--- a/packages/agent-graph/package.json
+++ b/packages/agent-graph/package.json
@@ -4,7 +4,7 @@
"private": true,
"type": "module",
"engines": {
- "node": ">=24.16.0 <25"
+ "node": ">=24.15.0 <25"
},
"main": "src/index.ts",
"types": "src/index.ts",
diff --git a/patches/@radix-ui__react-select@2.2.6.patch b/patches/@radix-ui__react-select@2.2.6.patch
index 7c84fd8b..e2dd2022 100644
--- a/patches/@radix-ui__react-select@2.2.6.patch
+++ b/patches/@radix-ui__react-select@2.2.6.patch
@@ -126,17 +126,51 @@ index dc37ac4a018a086c4244a09a67215dbaa9b4de65..fc80522666f91087ce1bce3a34844b17
style: {
display: "flex",
flexDirection: "column",
-@@ -971,9 +1002,10 @@ var SelectItemText = React.forwardRef(
+@@ -864,10 +895,15 @@ var SelectItem = React.forwardRef(
+ const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);
+ const isSelected = context.value === value;
+ const [textValue, setTextValue] = React.useState(textValueProp ?? "");
++ const textValueRef = React.useRef(textValueProp ?? "");
+ const [isFocused, setIsFocused] = React.useState(false);
++ const itemRefCallback = React.useCallback(
++ (node) => contentContext.itemRefCallback?.(node, value, disabled),
++ [contentContext.itemRefCallback, value, disabled]
++ );
+ const composedRefs = (0, import_react_compose_refs.useComposedRefs)(
+ forwardedRef,
+- (node) => contentContext.itemRefCallback?.(node, value, disabled)
++ itemRefCallback
+ );
+ const textId = (0, import_react_id.useId)();
+ const pointerTypeRef = React.useRef("touch");
+@@ -893,7 +931,10 @@ var SelectItem = React.forwardRef(
+ textId,
+ isSelected,
+ onItemTextChange: React.useCallback((node) => {
+- setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? "").trim());
++ const nextTextValue = (node?.textContent ?? "").trim();
++ if (!nextTextValue || textValueRef.current) return;
++ textValueRef.current = nextTextValue;
++ setTextValue(nextTextValue);
+ }, []),
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
+ Collection.ItemSlot,
+@@ -971,9 +1013,14 @@ var SelectItemText = React.forwardRef(
const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);
const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);
const [itemTextNode, setItemTextNode] = React.useState(null);
+ const setItemTextNodeRef = useGuardedNodeSetter(setItemTextNode);
++ const itemTextRefCallback = React.useCallback(
++ (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled),
++ [contentContext.itemTextRefCallback, itemContext.value, itemContext.disabled]
++ );
const composedRefs = (0, import_react_compose_refs.useComposedRefs)(
forwardedRef,
- (node) => setItemTextNode(node),
+ setItemTextNodeRef,
itemContext.onItemTextChange,
- (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)
+- (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)
++ itemTextRefCallback
);
diff --git a/dist/index.mjs b/dist/index.mjs
index f9b94f39dfddef678ef3086354f8d7413ae27e52..4a53ec0d65aa051b95e3e8ea4aff4fdd52a17406 100644
@@ -266,15 +300,49 @@ index f9b94f39dfddef678ef3086354f8d7413ae27e52..4a53ec0d65aa051b95e3e8ea4aff4fdd
style: {
display: "flex",
flexDirection: "column",
-@@ -904,9 +935,10 @@ var SelectItemText = React.forwardRef(
+@@ -797,10 +828,15 @@ var SelectItem = React.forwardRef(
+ const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);
+ const isSelected = context.value === value;
+ const [textValue, setTextValue] = React.useState(textValueProp ?? "");
++ const textValueRef = React.useRef(textValueProp ?? "");
+ const [isFocused, setIsFocused] = React.useState(false);
++ const itemRefCallback = React.useCallback(
++ (node) => contentContext.itemRefCallback?.(node, value, disabled),
++ [contentContext.itemRefCallback, value, disabled]
++ );
+ const composedRefs = useComposedRefs(
+ forwardedRef,
+- (node) => contentContext.itemRefCallback?.(node, value, disabled)
++ itemRefCallback
+ );
+ const textId = useId();
+ const pointerTypeRef = React.useRef("touch");
+@@ -826,7 +864,10 @@ var SelectItem = React.forwardRef(
+ textId,
+ isSelected,
+ onItemTextChange: React.useCallback((node) => {
+- setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? "").trim());
++ const nextTextValue = (node?.textContent ?? "").trim();
++ if (!nextTextValue || textValueRef.current) return;
++ textValueRef.current = nextTextValue;
++ setTextValue(nextTextValue);
+ }, []),
+ children: /* @__PURE__ */ jsx(
+ Collection.ItemSlot,
+@@ -904,9 +946,14 @@ var SelectItemText = React.forwardRef(
const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);
const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);
const [itemTextNode, setItemTextNode] = React.useState(null);
+ const setItemTextNodeRef = useGuardedNodeSetter(setItemTextNode);
++ const itemTextRefCallback = React.useCallback(
++ (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled),
++ [contentContext.itemTextRefCallback, itemContext.value, itemContext.disabled]
++ );
const composedRefs = useComposedRefs(
forwardedRef,
- (node) => setItemTextNode(node),
+ setItemTextNodeRef,
itemContext.onItemTextChange,
- (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)
+- (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)
++ itemTextRefCallback
);
diff --git a/patches/@radix-ui__react-slot@1.2.3.patch b/patches/@radix-ui__react-slot@1.2.3.patch
new file mode 100644
index 00000000..16998b69
--- /dev/null
+++ b/patches/@radix-ui__react-slot@1.2.3.patch
@@ -0,0 +1,44 @@
+diff --git a/dist/index.js b/dist/index.js
+index 6a29e17b2246048ddb3da22732e2c81517bf81da..cecc799949dbbe10ba98d587fdad5d3a9e1d8cf1 100644
+--- a/dist/index.js
++++ b/dist/index.js
+@@ -70,11 +70,15 @@ var Slot = /* @__PURE__ */ createSlot("Slot");
+ function createSlotClone(ownerName) {
+ const SlotClone = React.forwardRef((props, forwardedRef) => {
+ const { children, ...slotProps } = props;
++ const childrenRef = React.isValidElement(children) ? getElementRef(children) : null;
++ const composedRef = React.useMemo(
++ () => forwardedRef && childrenRef ? (0, import_react_compose_refs.composeRefs)(forwardedRef, childrenRef) : forwardedRef || childrenRef || null,
++ [forwardedRef, childrenRef]
++ );
+ if (React.isValidElement(children)) {
+- const childrenRef = getElementRef(children);
+ const props2 = mergeProps(slotProps, children.props);
+ if (children.type !== React.Fragment) {
+- props2.ref = forwardedRef ? (0, import_react_compose_refs.composeRefs)(forwardedRef, childrenRef) : childrenRef;
++ props2.ref = composedRef;
+ }
+ return React.cloneElement(children, props2);
+ }
+diff --git a/dist/index.mjs b/dist/index.mjs
+index 0d5bcb5df0a670f429c157c5354c7b0499e9a599..4b4cbbf55bdfb4ee3f2a91aa02ff1ffef51d98cf 100644
+--- a/dist/index.mjs
++++ b/dist/index.mjs
+@@ -30,11 +30,15 @@ var Slot = /* @__PURE__ */ createSlot("Slot");
+ function createSlotClone(ownerName) {
+ const SlotClone = React.forwardRef((props, forwardedRef) => {
+ const { children, ...slotProps } = props;
++ const childrenRef = React.isValidElement(children) ? getElementRef(children) : null;
++ const composedRef = React.useMemo(
++ () => forwardedRef && childrenRef ? composeRefs(forwardedRef, childrenRef) : forwardedRef || childrenRef || null,
++ [forwardedRef, childrenRef]
++ );
+ if (React.isValidElement(children)) {
+- const childrenRef = getElementRef(children);
+ const props2 = mergeProps(slotProps, children.props);
+ if (children.type !== React.Fragment) {
+- props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;
++ props2.ref = composedRef;
+ }
+ return React.cloneElement(children, props2);
+ }
diff --git a/patches/@radix-ui__react-slot@1.2.4.patch b/patches/@radix-ui__react-slot@1.2.4.patch
new file mode 100644
index 00000000..c274a099
--- /dev/null
+++ b/patches/@radix-ui__react-slot@1.2.4.patch
@@ -0,0 +1,48 @@
+diff --git a/dist/index.js b/dist/index.js
+index 997ad803d345479c6afedb38fbfa4fed36dbb69f..e3845eab81088ac07f86ce0758f8fbb51bf20f7e 100644
+--- a/dist/index.js
++++ b/dist/index.js
+@@ -87,13 +87,17 @@ function createSlotClone(ownerName) {
+ if (isLazyComponent(children) && typeof use === "function") {
+ children = use(children._payload);
+ }
++ const childrenRef = React.isValidElement(children) ? getElementRef(children) : null;
++ const composedRef = React.useMemo(
++ () => forwardedRef && childrenRef ? (0, import_react_compose_refs.composeRefs)(forwardedRef, childrenRef) : forwardedRef || childrenRef || null,
++ [forwardedRef, childrenRef]
++ );
+ if (React.isValidElement(children)) {
+- const childrenRef = getElementRef(children);
+ const props2 = mergeProps(slotProps, children.props);
+ if (children.type !== React.Fragment) {
+- props2.ref = forwardedRef ? (0, import_react_compose_refs.composeRefs)(forwardedRef, childrenRef) : childrenRef;
++ props2.ref = composedRef;
+ }
+ return React.cloneElement(children, props2);
+ }
+ return React.Children.count(children) > 1 ? React.Children.only(null) : null;
+ });
+diff --git a/dist/index.mjs b/dist/index.mjs
+index 6365c8003f76c8a41351ddc65a4e84ad8b6bf0d1..3e6146372c27ae6dc1a628264e49910b9f41f3f7 100644
+--- a/dist/index.mjs
++++ b/dist/index.mjs
+@@ -46,13 +46,17 @@ function createSlotClone(ownerName) {
+ if (isLazyComponent(children) && typeof use === "function") {
+ children = use(children._payload);
+ }
++ const childrenRef = React.isValidElement(children) ? getElementRef(children) : null;
++ const composedRef = React.useMemo(
++ () => forwardedRef && childrenRef ? composeRefs(forwardedRef, childrenRef) : forwardedRef || childrenRef || null,
++ [forwardedRef, childrenRef]
++ );
+ if (React.isValidElement(children)) {
+- const childrenRef = getElementRef(children);
+ const props2 = mergeProps(slotProps, children.props);
+ if (children.type !== React.Fragment) {
+- props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;
++ props2.ref = composedRef;
+ }
+ return React.cloneElement(children, props2);
+ }
+ return React.Children.count(children) > 1 ? React.Children.only(null) : null;
+ });
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a635693b..96bfbe35 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -7,7 +7,7 @@ settings:
overrides:
'@hono/node-server@1': 1.19.13
'@xmldom/xmldom': 0.8.13
- axios: 1.15.2
+ axios: 1.16.1
brace-expansion@1: 1.1.13
brace-expansion@2: 2.0.3
brace-expansion@5: 5.0.6
@@ -68,8 +68,14 @@ patchedDependencies:
hash: afe90f800cfb3b1ce1a9c457772e2441a9202e1aa3f8658eb3b9613b3ba0ef7e
path: patches/@radix-ui__react-presence@1.1.5.patch
'@radix-ui/react-select@2.2.6':
- hash: eea50c1407feb65af64720d0aadd2b534ca7743474d9204e0fc1d6b93e5f31f4
+ hash: 93cdd02c858fd8e3669eb902abbbd15644c2581c4c33aa63862fa351fefb4231
path: patches/@radix-ui__react-select@2.2.6.patch
+ '@radix-ui/react-slot@1.2.3':
+ hash: cc153761e59f07565f64cf0883bb098c78bb27bed60b7363eaadb74ad4317504
+ path: patches/@radix-ui__react-slot@1.2.3.patch
+ '@radix-ui/react-slot@1.2.4':
+ hash: 5c525e90054caa3bbfa5599b10f7650914e2085f54b773bd115ad0e41eeca30a
+ path: patches/@radix-ui__react-slot@1.2.4.patch
'@radix-ui/react-tooltip@1.2.8':
hash: 92cb648a695f616d3b7222b90053cb36e162bab4303abf0fe39b517e1d9dd6b8
path: patches/@radix-ui__react-tooltip@1.2.8.patch
@@ -209,10 +215,10 @@ importers:
version: 1.1.5(patch_hash=afe90f800cfb3b1ce1a9c457772e2441a9202e1aa3f8658eb3b9613b3ba0ef7e)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-select':
specifier: ^2.2.6
- version: 2.2.6(patch_hash=eea50c1407feb65af64720d0aadd2b534ca7743474d9204e0fc1d6b93e5f31f4)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ version: 2.2.6(patch_hash=93cdd02c858fd8e3669eb902abbbd15644c2581c4c33aa63862fa351fefb4231)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-slot':
specifier: ^1.2.4
- version: 1.2.4(@types/react@19.2.14)(react@19.2.4)
+ version: 1.2.4(patch_hash=5c525e90054caa3bbfa5599b10f7650914e2085f54b773bd115ad0e41eeca30a)(@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-tabs':
specifier: ^1.1.13
version: 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -402,7 +408,7 @@ importers:
version: 4.0.4
'@eslint-community/eslint-plugin-eslint-comments':
specifier: ^4.6.0
- version: 4.6.0(eslint@9.39.4(jiti@2.7.0))
+ version: 4.6.0(eslint@9.39.4(jiti@1.21.7))
'@eslint/js':
specifier: ^9.39.2
version: 9.39.2
@@ -435,10 +441,10 @@ importers:
version: 1.15.5
'@vitejs/plugin-react':
specifier: ^4.3.1
- version: 4.7.0(vite@6.4.2(@types/node@24.12.4)(jiti@2.7.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))
+ version: 4.7.0(vite@6.4.2(@types/node@24.12.4)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))
'@vitest/coverage-v8':
specifier: ^3.1.4
- version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.4)(happy-dom@20.9.0)(jiti@2.7.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))
+ version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.4)(happy-dom@20.9.0)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))
autoprefixer:
specifier: ^10.4.17
version: 10.4.23(postcss@8.5.10)
@@ -450,43 +456,43 @@ importers:
version: 26.8.1(electron-builder-squirrel-windows@26.8.1)
electron-vite:
specifier: ^5.0.0
- version: 5.0.0(@swc/core@1.15.33)(vite@6.4.2(@types/node@24.12.4)(jiti@2.7.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))
+ version: 5.0.0(@swc/core@1.15.33)(vite@6.4.2(@types/node@24.12.4)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))
eslint:
specifier: ^9.39.4
- version: 9.39.4(jiti@2.7.0)
+ version: 9.39.4(jiti@1.21.7)
eslint-config-prettier:
specifier: ^10.1.8
- version: 10.1.8(eslint@9.39.4(jiti@2.7.0))
+ version: 10.1.8(eslint@9.39.4(jiti@1.21.7))
eslint-import-resolver-typescript:
specifier: ^4.4.4
- version: 4.4.4(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.57.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.4(jiti@2.7.0)))(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.7.0))
+ version: 4.4.4(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.57.1(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.4(jiti@1.21.7)))(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7))
eslint-plugin-boundaries:
specifier: ^5.3.1
- version: 5.3.1(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.7.0))
+ version: 5.3.1(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@1.21.7))
eslint-plugin-import:
specifier: ^2.32.0
- version: 2.32.0(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.7.0))
+ version: 2.32.0(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@1.21.7))
eslint-plugin-jsx-a11y:
specifier: ^6.10.2
- version: 6.10.2(eslint@9.39.4(jiti@2.7.0))
+ version: 6.10.2(eslint@9.39.4(jiti@1.21.7))
eslint-plugin-react:
specifier: ^7.37.5
- version: 7.37.5(eslint@9.39.4(jiti@2.7.0))
+ version: 7.37.5(eslint@9.39.4(jiti@1.21.7))
eslint-plugin-react-hooks:
specifier: ^7.0.1
- version: 7.0.1(eslint@9.39.4(jiti@2.7.0))
+ version: 7.0.1(eslint@9.39.4(jiti@1.21.7))
eslint-plugin-react-refresh:
specifier: ^0.4.26
- version: 0.4.26(eslint@9.39.4(jiti@2.7.0))
+ version: 0.4.26(eslint@9.39.4(jiti@1.21.7))
eslint-plugin-security:
specifier: ^3.0.1
version: 3.0.1
eslint-plugin-simple-import-sort:
specifier: ^12.1.1
- version: 12.1.1(eslint@9.39.4(jiti@2.7.0))
+ version: 12.1.1(eslint@9.39.4(jiti@1.21.7))
eslint-plugin-sonarjs:
specifier: ^3.0.6
- version: 3.0.6(eslint@9.39.4(jiti@2.7.0))
+ version: 3.0.6(eslint@9.39.4(jiti@1.21.7))
eslint-plugin-tailwindcss:
specifier: ^3.18.2
version: 3.18.2(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.9.0))
@@ -528,13 +534,13 @@ importers:
version: 5.9.3
typescript-eslint:
specifier: ^8.54.0
- version: 8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)
+ version: 8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
vite:
specifier: ^6.4.2
- version: 6.4.2(@types/node@24.12.4)(jiti@2.7.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
+ version: 6.4.2(@types/node@24.12.4)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
vitest:
specifier: ^3.1.4
- version: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.4)(happy-dom@20.9.0)(jiti@2.7.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.4)(happy-dom@20.9.0)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
agent-teams-controller: {}
@@ -615,7 +621,7 @@ importers:
version: 2.1.3(vite@7.3.2(@types/node@25.0.7)(jiti@2.7.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))(vue@3.5.30(typescript@5.9.3))(vuetify@3.12.3)
vitepress:
specifier: 2.0.0-alpha.17
- version: 2.0.0-alpha.17(@types/node@25.0.7)(axios@1.15.2)(change-case@5.4.4)(fuse.js@7.3.0)(idb-keyval@6.2.2)(jiti@2.7.0)(oxc-minify@0.131.0)(postcss@8.5.10)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0)
+ version: 2.0.0-alpha.17(@types/node@25.0.7)(axios@1.16.1)(change-case@5.4.4)(fuse.js@7.3.0)(idb-keyval@6.2.2)(jiti@2.7.0)(oxc-minify@0.131.0)(postcss@8.5.10)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0)
vitepress-codeblock-collapse:
specifier: ^1.0.0
version: 1.0.0(vue@3.5.30(typescript@5.9.3))
@@ -5238,7 +5244,7 @@ packages:
resolution: {integrity: sha512-76I5FT2ESvCmCaSwapI+a/u/CFtNXmzl9f9lNp1hRtx8vKB8hfiokJr8IvQqcQG5ckGXElyXK516b54ozV3MvA==}
peerDependencies:
async-validator: ^4
- axios: 1.15.2
+ axios: 1.16.1
change-case: ^5
drauu: ^0.4
focus-trap: ^7 || ^8
@@ -5565,8 +5571,8 @@ packages:
resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==}
engines: {node: '>=4'}
- axios@1.15.2:
- resolution: {integrity: sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==}
+ axios@1.16.1:
+ resolution: {integrity: sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==}
axobject-query@4.1.0:
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
@@ -11853,10 +11859,10 @@ snapshots:
'@borewit/text-codec@0.2.1': {}
- '@boundaries/elements@1.1.2(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.7.0))':
+ '@boundaries/elements@1.1.2(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@1.21.7))':
dependencies:
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.7.0))
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@1.21.7))
handlebars: 4.7.9
is-core-module: 2.16.1
micromatch: 4.0.8
@@ -12662,12 +12668,17 @@ snapshots:
'@esbuild/win32-x64@0.28.0':
optional: true
- '@eslint-community/eslint-plugin-eslint-comments@4.6.0(eslint@9.39.4(jiti@2.7.0))':
+ '@eslint-community/eslint-plugin-eslint-comments@4.6.0(eslint@9.39.4(jiti@1.21.7))':
dependencies:
escape-string-regexp: 4.0.0
- eslint: 9.39.4(jiti@2.7.0)
+ eslint: 9.39.4(jiti@1.21.7)
ignore: 7.0.5
+ '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@1.21.7))':
+ dependencies:
+ eslint: 9.39.4(jiti@1.21.7)
+ eslint-visitor-keys: 3.4.3
+
'@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.7.0))':
dependencies:
eslint: 9.39.4(jiti@2.7.0)
@@ -14457,7 +14468,7 @@ snapshots:
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.3(patch_hash=cc153761e59f07565f64cf0883bb098c78bb27bed60b7363eaadb74ad4317504)(@types/react@19.2.14)(react@19.2.4)
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
optionalDependencies:
@@ -14510,7 +14521,7 @@ snapshots:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.3(patch_hash=cc153761e59f07565f64cf0883bb098c78bb27bed60b7363eaadb74ad4317504)(@types/react@19.2.14)(react@19.2.4)
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
optionalDependencies:
@@ -14555,7 +14566,7 @@ snapshots:
'@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-presence': 1.1.5(patch_hash=afe90f800cfb3b1ce1a9c457772e2441a9202e1aa3f8658eb3b9613b3ba0ef7e)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.3(patch_hash=cc153761e59f07565f64cf0883bb098c78bb27bed60b7363eaadb74ad4317504)(@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
aria-hidden: 1.2.6
react: 19.2.4
@@ -14665,7 +14676,7 @@ snapshots:
'@radix-ui/react-presence': 1.1.5(patch_hash=afe90f800cfb3b1ce1a9c457772e2441a9202e1aa3f8658eb3b9613b3ba0ef7e)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.3(patch_hash=cc153761e59f07565f64cf0883bb098c78bb27bed60b7363eaadb74ad4317504)(@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
aria-hidden: 1.2.6
react: 19.2.4
@@ -14688,7 +14699,7 @@ snapshots:
'@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-presence': 1.1.5(patch_hash=afe90f800cfb3b1ce1a9c457772e2441a9202e1aa3f8658eb3b9613b3ba0ef7e)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.3(patch_hash=cc153761e59f07565f64cf0883bb098c78bb27bed60b7363eaadb74ad4317504)(@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
aria-hidden: 1.2.6
react: 19.2.4
@@ -14738,7 +14749,7 @@ snapshots:
'@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
dependencies:
- '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.3(patch_hash=cc153761e59f07565f64cf0883bb098c78bb27bed60b7363eaadb74ad4317504)(@types/react@19.2.14)(react@19.2.4)
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
optionalDependencies:
@@ -14747,7 +14758,7 @@ snapshots:
'@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
dependencies:
- '@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.4(patch_hash=5c525e90054caa3bbfa5599b10f7650914e2085f54b773bd115ad0e41eeca30a)(@types/react@19.2.14)(react@19.2.4)
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
optionalDependencies:
@@ -14771,7 +14782,7 @@ snapshots:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
- '@radix-ui/react-select@2.2.6(patch_hash=eea50c1407feb65af64720d0aadd2b534ca7743474d9204e0fc1d6b93e5f31f4)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@radix-ui/react-select@2.2.6(patch_hash=93cdd02c858fd8e3669eb902abbbd15644c2581c4c33aa63862fa351fefb4231)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
dependencies:
'@radix-ui/number': 1.1.1
'@radix-ui/primitive': 1.1.3
@@ -14786,7 +14797,7 @@ snapshots:
'@radix-ui/react-popper': 1.2.8(patch_hash=bab709aa37cbdb3023036cd85534ddb1400f2fccfe54bd6321fe405d5d199404)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.3(patch_hash=cc153761e59f07565f64cf0883bb098c78bb27bed60b7363eaadb74ad4317504)(@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
@@ -14800,14 +14811,14 @@ snapshots:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
- '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.4)':
+ '@radix-ui/react-slot@1.2.3(patch_hash=cc153761e59f07565f64cf0883bb098c78bb27bed60b7363eaadb74ad4317504)(@types/react@19.2.14)(react@19.2.4)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
react: 19.2.4
optionalDependencies:
'@types/react': 19.2.14
- '@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.4)':
+ '@radix-ui/react-slot@1.2.4(patch_hash=5c525e90054caa3bbfa5599b10f7650914e2085f54b773bd115ad0e41eeca30a)(@types/react@19.2.14)(react@19.2.4)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
react: 19.2.4
@@ -14841,7 +14852,7 @@ snapshots:
'@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-presence': 1.1.5(patch_hash=afe90f800cfb3b1ce1a9c457772e2441a9202e1aa3f8658eb3b9613b3ba0ef7e)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.3(patch_hash=cc153761e59f07565f64cf0883bb098c78bb27bed60b7363eaadb74ad4317504)(@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react: 19.2.4
@@ -15926,15 +15937,15 @@ snapshots:
'@types/node': 24.12.4
optional: true
- '@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
'@typescript-eslint/scope-manager': 8.54.0
- '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)
- '@typescript-eslint/utils': 8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)
+ '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
'@typescript-eslint/visitor-keys': 8.54.0
- eslint: 9.39.4(jiti@2.7.0)
+ eslint: 9.39.4(jiti@1.21.7)
ignore: 7.0.5
natural-compare: 1.4.0
ts-api-utils: 2.4.0(typescript@5.9.3)
@@ -15958,14 +15969,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)':
+ '@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
'@typescript-eslint/scope-manager': 8.54.0
'@typescript-eslint/types': 8.54.0
'@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3)
'@typescript-eslint/visitor-keys': 8.54.0
debug: 4.4.3
- eslint: 9.39.4(jiti@2.7.0)
+ eslint: 9.39.4(jiti@1.21.7)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
@@ -16018,13 +16029,13 @@ snapshots:
dependencies:
typescript: 5.9.3
- '@typescript-eslint/type-utils@8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
'@typescript-eslint/types': 8.54.0
'@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
debug: 4.4.3
- eslint: 9.39.4(jiti@2.7.0)
+ eslint: 9.39.4(jiti@1.21.7)
ts-api-utils: 2.4.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
@@ -16076,17 +16087,29 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0))
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7))
'@typescript-eslint/scope-manager': 8.54.0
'@typescript-eslint/types': 8.54.0
'@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3)
- eslint: 9.39.4(jiti@2.7.0)
+ eslint: 9.39.4(jiti@1.21.7)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
+ '@typescript-eslint/utils@8.57.1(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7))
+ '@typescript-eslint/scope-manager': 8.57.1
+ '@typescript-eslint/types': 8.57.1
+ '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3)
+ eslint: 9.39.4(jiti@1.21.7)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
'@typescript-eslint/utils@8.57.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)':
dependencies:
'@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0))
@@ -16199,7 +16222,7 @@ snapshots:
- rollup
- supports-color
- '@vitejs/plugin-react@4.7.0(vite@6.4.2(@types/node@24.12.4)(jiti@2.7.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))':
+ '@vitejs/plugin-react@4.7.0(vite@6.4.2(@types/node@24.12.4)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))':
dependencies:
'@babel/core': 7.28.6
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.6)
@@ -16207,7 +16230,7 @@ snapshots:
'@rolldown/pluginutils': 1.0.0-beta.27
'@types/babel__core': 7.20.5
react-refresh: 0.17.0
- vite: 6.4.2(@types/node@24.12.4)(jiti@2.7.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
+ vite: 6.4.2(@types/node@24.12.4)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
transitivePeerDependencies:
- supports-color
@@ -16235,7 +16258,7 @@ snapshots:
vite: 7.3.3(@types/node@25.0.7)(jiti@2.7.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
vue: 3.5.34(typescript@5.9.3)
- '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.4)(happy-dom@20.9.0)(jiti@2.7.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))':
+ '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.4)(happy-dom@20.9.0)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))':
dependencies:
'@ampproject/remapping': 2.3.0
'@bcoe/v8-coverage': 1.0.2
@@ -16250,7 +16273,7 @@ snapshots:
std-env: 3.10.0
test-exclude: 7.0.1
tinyrainbow: 2.0.0
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.4)(happy-dom@20.9.0)(jiti@2.7.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
+ vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.12.4)(happy-dom@20.9.0)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
transitivePeerDependencies:
- supports-color
@@ -16262,6 +16285,14 @@ snapshots:
chai: 5.3.3
tinyrainbow: 2.0.0
+ '@vitest/mocker@3.2.4(vite@7.3.2(@types/node@24.12.4)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))':
+ dependencies:
+ '@vitest/spy': 3.2.4
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ vite: 7.3.2(@types/node@24.12.4)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
+
'@vitest/mocker@3.2.4(vite@7.3.2(@types/node@24.12.4)(jiti@2.7.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))':
dependencies:
'@vitest/spy': 3.2.4
@@ -16532,13 +16563,13 @@ snapshots:
'@vueuse/shared': 14.3.0(vue@3.5.30(typescript@5.9.3))
vue: 3.5.30(typescript@5.9.3)
- '@vueuse/integrations@14.3.0(axios@1.15.2)(change-case@5.4.4)(focus-trap@8.2.0)(fuse.js@7.3.0)(idb-keyval@6.2.2)(vue@3.5.30(typescript@5.9.3))':
+ '@vueuse/integrations@14.3.0(axios@1.16.1)(change-case@5.4.4)(focus-trap@8.2.0)(fuse.js@7.3.0)(idb-keyval@6.2.2)(vue@3.5.30(typescript@5.9.3))':
dependencies:
'@vueuse/core': 14.3.0(vue@3.5.30(typescript@5.9.3))
'@vueuse/shared': 14.3.0(vue@3.5.30(typescript@5.9.3))
vue: 3.5.30(typescript@5.9.3)
optionalDependencies:
- axios: 1.15.2(debug@4.4.3)
+ axios: 1.16.1(debug@4.4.3)
change-case: 5.4.4
focus-trap: 8.2.0
fuse.js: 7.3.0
@@ -16900,13 +16931,15 @@ snapshots:
axe-core@4.11.1: {}
- axios@1.15.2(debug@4.4.3):
+ axios@1.16.1(debug@4.4.3):
dependencies:
follow-redirects: 1.16.0(debug@4.4.3)
form-data: 4.0.5
+ https-proxy-agent: 5.0.1
proxy-from-env: 2.1.0
transitivePeerDependencies:
- debug
+ - supports-color
axobject-query@4.1.0: {}
@@ -17963,7 +17996,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- electron-vite@5.0.0(@swc/core@1.15.33)(vite@6.4.2(@types/node@24.12.4)(jiti@2.7.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)):
+ electron-vite@5.0.0(@swc/core@1.15.33)(vite@6.4.2(@types/node@24.12.4)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)):
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0)
@@ -17971,7 +18004,7 @@ snapshots:
esbuild: 0.25.12
magic-string: 0.30.21
picocolors: 1.1.1
- vite: 6.4.2(@types/node@24.12.4)(jiti@2.7.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
+ vite: 6.4.2(@types/node@24.12.4)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
optionalDependencies:
'@swc/core': 1.15.33
transitivePeerDependencies:
@@ -18284,9 +18317,9 @@ snapshots:
'@eslint/compat': 2.0.3(eslint@9.39.4(jiti@2.7.0))
eslint: 9.39.4(jiti@2.7.0)
- eslint-config-prettier@10.1.8(eslint@9.39.4(jiti@2.7.0)):
+ eslint-config-prettier@10.1.8(eslint@9.39.4(jiti@1.21.7)):
dependencies:
- eslint: 9.39.4(jiti@2.7.0)
+ eslint: 9.39.4(jiti@1.21.7)
eslint-flat-config-utils@3.0.2:
dependencies:
@@ -18308,10 +18341,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.57.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.4(jiti@2.7.0)))(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.7.0)):
+ eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.57.1(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.4(jiti@1.21.7)))(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7)):
dependencies:
debug: 4.4.3
- eslint: 9.39.4(jiti@2.7.0)
+ eslint: 9.39.4(jiti@1.21.7)
eslint-import-context: 0.1.9(unrs-resolver@1.11.1)
get-tsconfig: 4.13.0
is-bun-module: 2.0.0
@@ -18319,8 +18352,8 @@ snapshots:
tinyglobby: 0.2.15
unrs-resolver: 1.11.1
optionalDependencies:
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.7.0))
- eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.57.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.4(jiti@2.7.0))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@1.21.7))
+ eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.57.1(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.4(jiti@1.21.7))
transitivePeerDependencies:
- supports-color
@@ -18328,24 +18361,24 @@ snapshots:
dependencies:
eslint: 9.39.4(jiti@2.7.0)
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.7.0)):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@1.21.7)):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)
- eslint: 9.39.4(jiti@2.7.0)
+ '@typescript-eslint/parser': 8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
+ eslint: 9.39.4(jiti@1.21.7)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.57.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.4(jiti@2.7.0)))(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.7.0))
+ eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.57.1(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.4(jiti@1.21.7)))(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7))
transitivePeerDependencies:
- supports-color
- eslint-plugin-boundaries@5.3.1(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.7.0)):
+ eslint-plugin-boundaries@5.3.1(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@1.21.7)):
dependencies:
- '@boundaries/elements': 1.1.2(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.7.0))
+ '@boundaries/elements': 1.1.2(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@1.21.7))
chalk: 4.1.2
- eslint: 9.39.4(jiti@2.7.0)
+ eslint: 9.39.4(jiti@1.21.7)
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.7.0))
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@1.21.7))
micromatch: 4.0.8
transitivePeerDependencies:
- '@typescript-eslint/parser'
@@ -18357,6 +18390,26 @@ snapshots:
dependencies:
eslint: 9.39.4(jiti@2.7.0)
+ eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.57.1(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.4(jiti@1.21.7)):
+ dependencies:
+ '@package-json/types': 0.0.12
+ '@typescript-eslint/types': 8.57.1
+ comment-parser: 1.4.5
+ debug: 4.4.3
+ eslint: 9.39.4(jiti@1.21.7)
+ eslint-import-context: 0.1.9(unrs-resolver@1.11.1)
+ is-glob: 4.0.3
+ minimatch: 9.0.7
+ semver: 7.7.4
+ stable-hash-x: 0.2.0
+ unrs-resolver: 1.11.1
+ optionalDependencies:
+ '@typescript-eslint/utils': 8.57.1(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
+ eslint-import-resolver-node: 0.3.9
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.57.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.4(jiti@2.7.0)):
dependencies:
'@package-json/types': 0.0.12
@@ -18376,7 +18429,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.7.0)):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@1.21.7)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
@@ -18385,9 +18438,9 @@ snapshots:
array.prototype.flatmap: 1.3.3
debug: 3.2.7
doctrine: 2.1.0
- eslint: 9.39.4(jiti@2.7.0)
+ eslint: 9.39.4(jiti@1.21.7)
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@2.7.0))
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.4(jiti@1.21.7))
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -18399,7 +18452,7 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
@@ -18425,7 +18478,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.4(jiti@2.7.0)):
+ eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.4(jiti@1.21.7)):
dependencies:
aria-query: 5.3.2
array-includes: 3.1.9
@@ -18435,7 +18488,7 @@ snapshots:
axobject-query: 4.1.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- eslint: 9.39.4(jiti@2.7.0)
+ eslint: 9.39.4(jiti@1.21.7)
hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
@@ -18444,22 +18497,22 @@ snapshots:
safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1
- eslint-plugin-react-hooks@7.0.1(eslint@9.39.4(jiti@2.7.0)):
+ eslint-plugin-react-hooks@7.0.1(eslint@9.39.4(jiti@1.21.7)):
dependencies:
'@babel/core': 7.28.6
'@babel/parser': 7.28.6
- eslint: 9.39.4(jiti@2.7.0)
+ eslint: 9.39.4(jiti@1.21.7)
hermes-parser: 0.25.1
zod: 4.3.6
zod-validation-error: 4.0.2(zod@4.3.6)
transitivePeerDependencies:
- supports-color
- eslint-plugin-react-refresh@0.4.26(eslint@9.39.4(jiti@2.7.0)):
+ eslint-plugin-react-refresh@0.4.26(eslint@9.39.4(jiti@1.21.7)):
dependencies:
- eslint: 9.39.4(jiti@2.7.0)
+ eslint: 9.39.4(jiti@1.21.7)
- eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.7.0)):
+ eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@1.21.7)):
dependencies:
array-includes: 3.1.9
array.prototype.findlast: 1.2.5
@@ -18467,7 +18520,7 @@ snapshots:
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
es-iterator-helpers: 1.2.2
- eslint: 9.39.4(jiti@2.7.0)
+ eslint: 9.39.4(jiti@1.21.7)
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
@@ -18496,16 +18549,16 @@ snapshots:
dependencies:
safe-regex: 2.1.1
- eslint-plugin-simple-import-sort@12.1.1(eslint@9.39.4(jiti@2.7.0)):
+ eslint-plugin-simple-import-sort@12.1.1(eslint@9.39.4(jiti@1.21.7)):
dependencies:
- eslint: 9.39.4(jiti@2.7.0)
+ eslint: 9.39.4(jiti@1.21.7)
- eslint-plugin-sonarjs@3.0.6(eslint@9.39.4(jiti@2.7.0)):
+ eslint-plugin-sonarjs@3.0.6(eslint@9.39.4(jiti@1.21.7)):
dependencies:
'@eslint-community/regexpp': 4.12.2
builtin-modules: 3.3.0
bytes: 3.1.2
- eslint: 9.39.4(jiti@2.7.0)
+ eslint: 9.39.4(jiti@1.21.7)
functional-red-black-tree: 1.0.1
jsx-ast-utils-x: 0.1.0
lodash.merge: 4.6.2
@@ -18576,6 +18629,47 @@ snapshots:
eslint-visitor-keys@5.0.1: {}
+ eslint@9.39.4(jiti@1.21.7):
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7))
+ '@eslint-community/regexpp': 4.12.2
+ '@eslint/config-array': 0.21.2
+ '@eslint/config-helpers': 0.4.2
+ '@eslint/core': 0.17.0
+ '@eslint/eslintrc': 3.3.5
+ '@eslint/js': 9.39.4
+ '@eslint/plugin-kit': 0.4.1
+ '@humanfs/node': 0.16.7
+ '@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.4.3
+ '@types/estree': 1.0.8
+ ajv: 6.14.0
+ chalk: 4.1.2
+ cross-spawn: 7.0.6
+ debug: 4.4.3
+ escape-string-regexp: 4.0.0
+ eslint-scope: 8.4.0
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
+ esquery: 1.7.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 8.0.0
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ json-stable-stringify-without-jsonify: 1.0.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.4
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ optionalDependencies:
+ jiti: 1.21.7
+ transitivePeerDependencies:
+ - supports-color
+
eslint@9.39.4(jiti@2.7.0):
dependencies:
'@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0))
@@ -21558,7 +21652,7 @@ snapshots:
pipenet@1.4.0:
dependencies:
- axios: 1.15.2(debug@4.4.3)
+ axios: 1.16.1(debug@4.4.3)
debug: 4.4.3
human-readable-ids: 1.0.4
koa: 3.1.2
@@ -23267,13 +23361,13 @@ snapshots:
possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10
- typescript-eslint@8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3):
+ typescript-eslint@8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)
- '@typescript-eslint/parser': 8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)
+ '@typescript-eslint/eslint-plugin': 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
'@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.54.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)
- eslint: 9.39.4(jiti@2.7.0)
+ '@typescript-eslint/utils': 8.54.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
+ eslint: 9.39.4(jiti@1.21.7)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
@@ -23643,6 +23737,27 @@ snapshots:
dependencies:
vite: 7.3.2(@types/node@25.0.7)(jiti@2.7.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
+ vite-node@3.2.4(@types/node@24.12.4)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.4.3
+ es-module-lexer: 1.7.0
+ pathe: 2.0.3
+ vite: 7.3.2(@types/node@24.12.4)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
+ transitivePeerDependencies:
+ - '@types/node'
+ - jiti
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - yaml
+
vite-node@3.2.4(@types/node@24.12.4)(jiti@2.7.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0):
dependencies:
cac: 6.7.14
@@ -23739,7 +23854,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- vite@6.4.2(@types/node@24.12.4)(jiti@2.7.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0):
+ vite@6.4.2(@types/node@24.12.4)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0):
dependencies:
esbuild: 0.25.12
fdir: 6.5.0(picomatch@4.0.4)
@@ -23750,7 +23865,24 @@ snapshots:
optionalDependencies:
'@types/node': 24.12.4
fsevents: 2.3.3
- jiti: 2.7.0
+ jiti: 1.21.7
+ sass: 1.98.0
+ terser: 5.46.0
+ tsx: 4.21.0
+ yaml: 2.9.0
+
+ vite@7.3.2(@types/node@24.12.4)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0):
+ dependencies:
+ esbuild: 0.27.4
+ fdir: 6.5.0(picomatch@4.0.4)
+ picomatch: 4.0.4
+ postcss: 8.5.10
+ rollup: 4.59.0
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ '@types/node': 24.12.4
+ fsevents: 2.3.3
+ jiti: 1.21.7
sass: 1.98.0
terser: 5.46.0
tsx: 4.21.0
@@ -23830,7 +23962,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- vitepress@2.0.0-alpha.17(@types/node@25.0.7)(axios@1.15.2)(change-case@5.4.4)(fuse.js@7.3.0)(idb-keyval@6.2.2)(jiti@2.7.0)(oxc-minify@0.131.0)(postcss@8.5.10)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0):
+ vitepress@2.0.0-alpha.17(@types/node@25.0.7)(axios@1.16.1)(change-case@5.4.4)(fuse.js@7.3.0)(idb-keyval@6.2.2)(jiti@2.7.0)(oxc-minify@0.131.0)(postcss@8.5.10)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0):
dependencies:
'@docsearch/css': 4.6.3
'@docsearch/js': 4.6.3
@@ -23844,7 +23976,7 @@ snapshots:
'@vue/devtools-api': 8.1.1
'@vue/shared': 3.5.30
'@vueuse/core': 14.3.0(vue@3.5.30(typescript@5.9.3))
- '@vueuse/integrations': 14.3.0(axios@1.15.2)(change-case@5.4.4)(focus-trap@8.2.0)(fuse.js@7.3.0)(idb-keyval@6.2.2)(vue@3.5.30(typescript@5.9.3))
+ '@vueuse/integrations': 14.3.0(axios@1.16.1)(change-case@5.4.4)(focus-trap@8.2.0)(fuse.js@7.3.0)(idb-keyval@6.2.2)(vue@3.5.30(typescript@5.9.3))
focus-trap: 8.2.0
mark.js: 8.11.1
minisearch: 7.2.0
@@ -23879,6 +24011,49 @@ snapshots:
- universal-cookie
- yaml
+ vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.4)(happy-dom@20.9.0)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0):
+ dependencies:
+ '@types/chai': 5.2.3
+ '@vitest/expect': 3.2.4
+ '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@24.12.4)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0))
+ '@vitest/pretty-format': 3.2.4
+ '@vitest/runner': 3.2.4
+ '@vitest/snapshot': 3.2.4
+ '@vitest/spy': 3.2.4
+ '@vitest/utils': 3.2.4
+ chai: 5.3.3
+ debug: 4.4.3
+ expect-type: 1.3.0
+ magic-string: 0.30.21
+ pathe: 2.0.3
+ picomatch: 4.0.4
+ std-env: 3.10.0
+ tinybench: 2.9.0
+ tinyexec: 0.3.2
+ tinyglobby: 0.2.15
+ tinypool: 1.1.1
+ tinyrainbow: 2.0.0
+ vite: 7.3.2(@types/node@24.12.4)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
+ vite-node: 3.2.4(@types/node@24.12.4)(jiti@1.21.7)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/debug': 4.1.12
+ '@types/node': 24.12.4
+ happy-dom: 20.9.0
+ transitivePeerDependencies:
+ - jiti
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - yaml
+
vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.12.4)(happy-dom@20.9.0)(jiti@2.7.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.9.0):
dependencies:
'@types/chai': 5.2.3
diff --git a/resources/pricing.json b/resources/pricing.json
index 1210abed..fef87fd3 100644
--- a/resources/pricing.json
+++ b/resources/pricing.json
@@ -37,7 +37,6 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true
},
"anthropic.claude-haiku-4-5@20251001": {
@@ -61,7 +60,6 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_streaming": true,
"supports_native_structured_output": true
},
@@ -232,8 +230,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"anthropic.claude-opus-4-20250514-v1:0": {
"cache_creation_input_token_cost": 0.00001875,
@@ -258,8 +255,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"anthropic.claude-opus-4-5-20251101-v1:0": {
"cache_creation_input_token_cost": 0.00000625,
@@ -283,12 +279,12 @@
"supports_pdf_input": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
- "supports_minimal_reasoning_effort": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 159,
- "supports_native_structured_output": true
+ "supports_native_structured_output": true,
+ "supports_output_config": true,
+ "bedrock_output_config_effort_ceiling": "high"
},
"anthropic.claude-opus-4-6-v1": {
"cache_creation_input_token_cost": 0.00000625,
@@ -315,11 +311,10 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true,
"supports_output_config": true,
"supports_max_reasoning_effort": true,
- "supports_minimal_reasoning_effort": true
+ "bedrock_output_config_effort_ceiling": "max"
},
"global.anthropic.claude-opus-4-6-v1": {
"cache_creation_input_token_cost": 0.00000625,
@@ -346,11 +341,10 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true,
"supports_output_config": true,
"supports_max_reasoning_effort": true,
- "supports_minimal_reasoning_effort": true
+ "bedrock_output_config_effort_ceiling": "max"
},
"us.anthropic.claude-opus-4-6-v1": {
"cache_creation_input_token_cost": 0.000006875,
@@ -377,11 +371,10 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true,
"supports_output_config": true,
"supports_max_reasoning_effort": true,
- "supports_minimal_reasoning_effort": true
+ "bedrock_output_config_effort_ceiling": "max"
},
"eu.anthropic.claude-opus-4-6-v1": {
"cache_creation_input_token_cost": 0.000006875,
@@ -407,11 +400,10 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true,
"supports_output_config": true,
"supports_max_reasoning_effort": true,
- "supports_minimal_reasoning_effort": true
+ "bedrock_output_config_effort_ceiling": "max"
},
"au.anthropic.claude-opus-4-6-v1": {
"cache_creation_input_token_cost": 0.000006875,
@@ -437,11 +429,10 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true,
"supports_output_config": true,
"supports_max_reasoning_effort": true,
- "supports_minimal_reasoning_effort": true
+ "bedrock_output_config_effort_ceiling": "max"
},
"anthropic.claude-opus-4-7": {
"cache_creation_input_token_cost": 0.00000625,
@@ -469,10 +460,10 @@
"supports_tool_choice": true,
"supports_vision": true,
"supports_xhigh_reasoning_effort": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true,
"supports_max_reasoning_effort": true,
- "supports_minimal_reasoning_effort": true
+ "supports_output_config": true,
+ "bedrock_output_config_effort_ceiling": "xhigh"
},
"anthropic.claude-mythos-preview": {
"input_cost_per_token": 0,
@@ -486,8 +477,8 @@
"supports_vision": true,
"supports_prompt_caching": false,
"supports_reasoning": true,
- "supports_minimal_reasoning_effort": true,
- "supports_tool_choice": true
+ "supports_tool_choice": true,
+ "supports_output_config": true
},
"global.anthropic.claude-opus-4-7": {
"cache_creation_input_token_cost": 0.00000625,
@@ -515,10 +506,10 @@
"supports_tool_choice": true,
"supports_vision": true,
"supports_xhigh_reasoning_effort": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true,
"supports_max_reasoning_effort": true,
- "supports_minimal_reasoning_effort": true
+ "supports_output_config": true,
+ "bedrock_output_config_effort_ceiling": "xhigh"
},
"us.anthropic.claude-opus-4-7": {
"cache_creation_input_token_cost": 0.000006875,
@@ -546,10 +537,10 @@
"supports_tool_choice": true,
"supports_vision": true,
"supports_xhigh_reasoning_effort": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true,
"supports_max_reasoning_effort": true,
- "supports_minimal_reasoning_effort": true
+ "supports_output_config": true,
+ "bedrock_output_config_effort_ceiling": "xhigh"
},
"eu.anthropic.claude-opus-4-7": {
"cache_creation_input_token_cost": 0.000006875,
@@ -576,10 +567,10 @@
"supports_tool_choice": true,
"supports_vision": true,
"supports_xhigh_reasoning_effort": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true,
"supports_max_reasoning_effort": true,
- "supports_minimal_reasoning_effort": true
+ "supports_output_config": true,
+ "bedrock_output_config_effort_ceiling": "xhigh"
},
"au.anthropic.claude-opus-4-7": {
"cache_creation_input_token_cost": 0.000006875,
@@ -606,10 +597,165 @@
"supports_tool_choice": true,
"supports_vision": true,
"supports_xhigh_reasoning_effort": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true,
"supports_max_reasoning_effort": true,
- "supports_minimal_reasoning_effort": true
+ "supports_output_config": true,
+ "bedrock_output_config_effort_ceiling": "xhigh"
+ },
+ "anthropic.claude-opus-4-8": {
+ "cache_creation_input_token_cost": 0.00000625,
+ "cache_creation_input_token_cost_above_1hr": 0.00001,
+ "cache_read_input_token_cost": 5e-7,
+ "input_cost_per_token": 0.000005,
+ "litellm_provider": "bedrock_converse",
+ "max_input_tokens": 1000000,
+ "max_output_tokens": 128000,
+ "max_tokens": 128000,
+ "mode": "chat",
+ "output_cost_per_token": 0.000025,
+ "search_context_cost_per_query": {
+ "search_context_size_high": 0.01,
+ "search_context_size_low": 0.01,
+ "search_context_size_medium": 0.01
+ },
+ "supports_assistant_prefill": false,
+ "supports_computer_use": true,
+ "supports_function_calling": true,
+ "supports_pdf_input": true,
+ "supports_prompt_caching": true,
+ "supports_reasoning": true,
+ "supports_response_schema": true,
+ "supports_tool_choice": true,
+ "supports_vision": true,
+ "supports_xhigh_reasoning_effort": true,
+ "supports_native_structured_output": true,
+ "supports_max_reasoning_effort": true,
+ "supports_output_config": true,
+ "bedrock_output_config_effort_ceiling": "xhigh"
+ },
+ "global.anthropic.claude-opus-4-8": {
+ "cache_creation_input_token_cost": 0.00000625,
+ "cache_creation_input_token_cost_above_1hr": 0.00001,
+ "cache_read_input_token_cost": 5e-7,
+ "input_cost_per_token": 0.000005,
+ "litellm_provider": "bedrock_converse",
+ "max_input_tokens": 1000000,
+ "max_output_tokens": 128000,
+ "max_tokens": 128000,
+ "mode": "chat",
+ "output_cost_per_token": 0.000025,
+ "search_context_cost_per_query": {
+ "search_context_size_high": 0.01,
+ "search_context_size_low": 0.01,
+ "search_context_size_medium": 0.01
+ },
+ "supports_assistant_prefill": false,
+ "supports_computer_use": true,
+ "supports_function_calling": true,
+ "supports_pdf_input": true,
+ "supports_prompt_caching": true,
+ "supports_reasoning": true,
+ "supports_response_schema": true,
+ "supports_tool_choice": true,
+ "supports_vision": true,
+ "supports_xhigh_reasoning_effort": true,
+ "supports_native_structured_output": true,
+ "supports_max_reasoning_effort": true,
+ "supports_output_config": true,
+ "bedrock_output_config_effort_ceiling": "xhigh"
+ },
+ "us.anthropic.claude-opus-4-8": {
+ "cache_creation_input_token_cost": 0.000006875,
+ "cache_creation_input_token_cost_above_1hr": 0.000011,
+ "cache_read_input_token_cost": 5.5e-7,
+ "input_cost_per_token": 0.0000055,
+ "litellm_provider": "bedrock_converse",
+ "max_input_tokens": 1000000,
+ "max_output_tokens": 128000,
+ "max_tokens": 128000,
+ "mode": "chat",
+ "output_cost_per_token": 0.0000275,
+ "search_context_cost_per_query": {
+ "search_context_size_high": 0.01,
+ "search_context_size_low": 0.01,
+ "search_context_size_medium": 0.01
+ },
+ "supports_assistant_prefill": false,
+ "supports_computer_use": true,
+ "supports_function_calling": true,
+ "supports_pdf_input": true,
+ "supports_prompt_caching": true,
+ "supports_reasoning": true,
+ "supports_response_schema": true,
+ "supports_tool_choice": true,
+ "supports_vision": true,
+ "supports_xhigh_reasoning_effort": true,
+ "supports_native_structured_output": true,
+ "supports_max_reasoning_effort": true,
+ "supports_output_config": true,
+ "bedrock_output_config_effort_ceiling": "xhigh"
+ },
+ "eu.anthropic.claude-opus-4-8": {
+ "cache_creation_input_token_cost": 0.000006875,
+ "cache_creation_input_token_cost_above_1hr": 0.000011,
+ "cache_read_input_token_cost": 5.5e-7,
+ "input_cost_per_token": 0.0000055,
+ "litellm_provider": "bedrock_converse",
+ "max_input_tokens": 1000000,
+ "max_output_tokens": 128000,
+ "max_tokens": 128000,
+ "mode": "chat",
+ "output_cost_per_token": 0.0000275,
+ "search_context_cost_per_query": {
+ "search_context_size_high": 0.01,
+ "search_context_size_low": 0.01,
+ "search_context_size_medium": 0.01
+ },
+ "supports_assistant_prefill": false,
+ "supports_computer_use": true,
+ "supports_function_calling": true,
+ "supports_pdf_input": true,
+ "supports_prompt_caching": true,
+ "supports_reasoning": true,
+ "supports_response_schema": true,
+ "supports_tool_choice": true,
+ "supports_vision": true,
+ "supports_xhigh_reasoning_effort": true,
+ "supports_native_structured_output": true,
+ "supports_max_reasoning_effort": true,
+ "supports_output_config": true,
+ "bedrock_output_config_effort_ceiling": "xhigh"
+ },
+ "au.anthropic.claude-opus-4-8": {
+ "cache_creation_input_token_cost": 0.000006875,
+ "cache_creation_input_token_cost_above_1hr": 0.000011,
+ "cache_read_input_token_cost": 5.5e-7,
+ "input_cost_per_token": 0.0000055,
+ "litellm_provider": "bedrock_converse",
+ "max_input_tokens": 1000000,
+ "max_output_tokens": 128000,
+ "max_tokens": 128000,
+ "mode": "chat",
+ "output_cost_per_token": 0.0000275,
+ "search_context_cost_per_query": {
+ "search_context_size_high": 0.01,
+ "search_context_size_low": 0.01,
+ "search_context_size_medium": 0.01
+ },
+ "supports_assistant_prefill": false,
+ "supports_computer_use": true,
+ "supports_function_calling": true,
+ "supports_pdf_input": true,
+ "supports_prompt_caching": true,
+ "supports_reasoning": true,
+ "supports_response_schema": true,
+ "supports_tool_choice": true,
+ "supports_vision": true,
+ "supports_xhigh_reasoning_effort": true,
+ "supports_native_structured_output": true,
+ "supports_max_reasoning_effort": true,
+ "supports_output_config": true,
+ "bedrock_output_config_effort_ceiling": "xhigh"
},
"anthropic.claude-sonnet-4-6": {
"cache_creation_input_token_cost": 0.00000375,
@@ -637,10 +783,8 @@
"supports_max_reasoning_effort": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true,
- "supports_output_config": true,
- "supports_minimal_reasoning_effort": true
+ "supports_output_config": true
},
"global.anthropic.claude-sonnet-4-6": {
"cache_creation_input_token_cost": 0.00000375,
@@ -668,10 +812,8 @@
"supports_max_reasoning_effort": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true,
- "supports_output_config": true,
- "supports_minimal_reasoning_effort": true
+ "supports_output_config": true
},
"us.anthropic.claude-sonnet-4-6": {
"cache_creation_input_token_cost": 0.000004125,
@@ -699,10 +841,8 @@
"supports_max_reasoning_effort": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true,
- "supports_output_config": true,
- "supports_minimal_reasoning_effort": true
+ "supports_output_config": true
},
"eu.anthropic.claude-sonnet-4-6": {
"cache_creation_input_token_cost": 0.000004125,
@@ -729,10 +869,8 @@
"supports_max_reasoning_effort": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true,
- "supports_output_config": true,
- "supports_minimal_reasoning_effort": true
+ "supports_output_config": true
},
"au.anthropic.claude-sonnet-4-6": {
"cache_creation_input_token_cost": 0.000004125,
@@ -759,10 +897,8 @@
"supports_max_reasoning_effort": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true,
- "supports_output_config": true,
- "supports_minimal_reasoning_effort": true
+ "supports_output_config": true
},
"jp.anthropic.claude-sonnet-4-6": {
"cache_creation_input_token_cost": 0.000004125,
@@ -789,10 +925,8 @@
"supports_max_reasoning_effort": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true,
- "supports_output_config": true,
- "supports_minimal_reasoning_effort": true
+ "supports_output_config": true
},
"anthropic.claude-sonnet-4-20250514-v1:0": {
"cache_creation_input_token_cost": 0.00000375,
@@ -821,8 +955,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"anthropic.claude-sonnet-4-5-20250929-v1:0": {
"cache_creation_input_token_cost": 0.00000375,
@@ -854,7 +987,6 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 159,
"supports_native_structured_output": true
},
"anthropic.claude-v1": {
@@ -947,7 +1079,6 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true
},
"apac.anthropic.claude-3-sonnet-20240229-v1:0": {
@@ -993,8 +1124,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"au.anthropic.claude-sonnet-4-5-20250929-v1:0": {
"cache_creation_input_token_cost": 0.000004125,
@@ -1024,7 +1154,6 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true
},
"azure_ai/claude-haiku-4-5": {
@@ -1065,10 +1194,10 @@
"supports_pdf_input": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
- "supports_minimal_reasoning_effort": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true
+ "supports_vision": true,
+ "supports_output_config": true
},
"azure_ai/claude-opus-4-6": {
"input_cost_per_token": 0.000005,
@@ -1095,10 +1224,8 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 159,
"supports_output_config": true,
- "supports_max_reasoning_effort": true,
- "supports_minimal_reasoning_effort": true
+ "supports_max_reasoning_effort": true
},
"azure_ai/claude-opus-4-7": {
"input_cost_per_token": 0.000005,
@@ -1126,9 +1253,35 @@
"supports_tool_choice": true,
"supports_vision": true,
"supports_xhigh_reasoning_effort": true,
- "tool_use_system_prompt_tokens": 159,
- "supports_max_reasoning_effort": true,
- "supports_minimal_reasoning_effort": true
+ "supports_max_reasoning_effort": true
+ },
+ "azure_ai/claude-opus-4-8": {
+ "input_cost_per_token": 0.000005,
+ "output_cost_per_token": 0.000025,
+ "litellm_provider": "azure_ai",
+ "max_input_tokens": 200000,
+ "max_output_tokens": 128000,
+ "max_tokens": 128000,
+ "mode": "chat",
+ "search_context_cost_per_query": {
+ "search_context_size_high": 0.01,
+ "search_context_size_low": 0.01,
+ "search_context_size_medium": 0.01
+ },
+ "cache_creation_input_token_cost": 0.00000625,
+ "cache_creation_input_token_cost_above_1hr": 0.00001,
+ "cache_read_input_token_cost": 5e-7,
+ "supports_assistant_prefill": false,
+ "supports_computer_use": true,
+ "supports_function_calling": true,
+ "supports_pdf_input": true,
+ "supports_prompt_caching": true,
+ "supports_reasoning": true,
+ "supports_response_schema": true,
+ "supports_tool_choice": true,
+ "supports_vision": true,
+ "supports_xhigh_reasoning_effort": true,
+ "supports_max_reasoning_effort": true
},
"azure_ai/claude-opus-4-1": {
"cache_creation_input_token_cost": 0.00001875,
@@ -1193,9 +1346,7 @@
"supports_max_reasoning_effort": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
- "supports_output_config": true,
- "supports_minimal_reasoning_effort": true
+ "supports_output_config": true
},
"bedrock/ap-northeast-1/anthropic.claude-instant-v1": {
"input_cost_per_token": 0.00000223,
@@ -1587,8 +1738,7 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "supports_web_search": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_web_search": true
},
"claude-3-haiku-20240307": {
"cache_creation_input_token_cost": 3e-7,
@@ -1606,8 +1756,7 @@
"supports_prompt_caching": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 264
+ "supports_vision": true
},
"claude-3-opus-20240229": {
"cache_creation_input_token_cost": 0.00001875,
@@ -1626,8 +1775,7 @@
"supports_prompt_caching": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 395
+ "supports_vision": true
},
"claude-4-opus-20250514": {
"cache_creation_input_token_cost": 0.00001875,
@@ -1652,8 +1800,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"claude-4-sonnet-20250514": {
"cache_creation_input_token_cost": 0.00000375,
@@ -1683,8 +1830,7 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "supports_web_search": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_web_search": true
},
"claude-sonnet-4-5": {
"cache_creation_input_token_cost": 0.00000375,
@@ -1713,8 +1859,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 346
+ "supports_vision": true
},
"claude-sonnet-4-5-20250929": {
"cache_creation_input_token_cost": 0.00000375,
@@ -1744,8 +1889,7 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "supports_web_search": true,
- "tool_use_system_prompt_tokens": 346
+ "supports_web_search": true
},
"claude-sonnet-4-6": {
"cache_creation_input_token_cost": 0.00000375,
@@ -1773,9 +1917,7 @@
"supports_max_reasoning_effort": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
- "supports_output_config": true,
- "supports_minimal_reasoning_effort": true
+ "supports_output_config": true
},
"claude-sonnet-4-5-20250929-v1:0": {
"cache_creation_input_token_cost": 0.00000375,
@@ -1799,8 +1941,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"claude-opus-4-1": {
"cache_creation_input_token_cost": 0.00001875,
@@ -1826,8 +1967,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"claude-opus-4-1-20250805": {
"cache_creation_input_token_cost": 0.00001875,
@@ -1854,8 +1994,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"claude-opus-4-20250514": {
"cache_creation_input_token_cost": 0.00001875,
@@ -1882,8 +2021,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"claude-opus-4-5-20251101": {
"cache_creation_input_token_cost": 0.00000625,
@@ -1907,11 +2045,10 @@
"supports_pdf_input": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
- "supports_minimal_reasoning_effort": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_output_config": true
},
"claude-opus-4-5": {
"cache_creation_input_token_cost": 0.00000625,
@@ -1935,11 +2072,10 @@
"supports_pdf_input": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
- "supports_minimal_reasoning_effort": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_output_config": true
},
"claude-opus-4-6": {
"cache_creation_input_token_cost": 0.00000625,
@@ -1967,14 +2103,12 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"provider_specific_entry": {
"us": 1.1,
"fast": 6
},
"supports_output_config": true,
- "supports_max_reasoning_effort": true,
- "supports_minimal_reasoning_effort": true
+ "supports_max_reasoning_effort": true
},
"claude-opus-4-6-20260205": {
"cache_creation_input_token_cost": 0.00000625,
@@ -2002,13 +2136,11 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"provider_specific_entry": {
"us": 1.1,
"fast": 6
},
"supports_max_reasoning_effort": true,
- "supports_minimal_reasoning_effort": true,
"supports_output_config": true
},
"claude-opus-4-7": {
@@ -2039,12 +2171,10 @@
"supports_vision": true,
"supports_xhigh_reasoning_effort": true,
"supports_max_reasoning_effort": true,
- "tool_use_system_prompt_tokens": 346,
"provider_specific_entry": {
"us": 1.1,
"fast": 6
},
- "supports_minimal_reasoning_effort": true,
"supports_output_config": true
},
"claude-opus-4-7-20260416": {
@@ -2075,12 +2205,44 @@
"supports_vision": true,
"supports_xhigh_reasoning_effort": true,
"supports_max_reasoning_effort": true,
- "tool_use_system_prompt_tokens": 346,
"provider_specific_entry": {
"us": 1.1,
"fast": 6
},
- "supports_minimal_reasoning_effort": true,
+ "supports_output_config": true
+ },
+ "claude-opus-4-8": {
+ "cache_creation_input_token_cost": 0.00000625,
+ "cache_creation_input_token_cost_above_1hr": 0.00001,
+ "cache_read_input_token_cost": 5e-7,
+ "input_cost_per_token": 0.000005,
+ "litellm_provider": "anthropic",
+ "max_input_tokens": 1000000,
+ "max_output_tokens": 128000,
+ "max_tokens": 128000,
+ "mode": "chat",
+ "output_cost_per_token": 0.000025,
+ "search_context_cost_per_query": {
+ "search_context_size_high": 0.01,
+ "search_context_size_low": 0.01,
+ "search_context_size_medium": 0.01
+ },
+ "supports_adaptive_thinking": true,
+ "supports_assistant_prefill": false,
+ "supports_computer_use": true,
+ "supports_function_calling": true,
+ "supports_pdf_input": true,
+ "supports_prompt_caching": true,
+ "supports_reasoning": true,
+ "supports_response_schema": true,
+ "supports_tool_choice": true,
+ "supports_vision": true,
+ "supports_xhigh_reasoning_effort": true,
+ "supports_max_reasoning_effort": true,
+ "provider_specific_entry": {
+ "us": 1.1,
+ "fast": 2
+ },
"supports_output_config": true
},
"claude-sonnet-4-20250514": {
@@ -2112,8 +2274,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"databricks/databricks-claude-3-7-sonnet": {
"input_cost_per_token": 0.0000029999900000000002,
@@ -2208,8 +2369,8 @@
"supports_assistant_prefill": true,
"supports_function_calling": true,
"supports_reasoning": true,
- "supports_minimal_reasoning_effort": true,
- "supports_tool_choice": true
+ "supports_tool_choice": true,
+ "supports_output_config": true
},
"databricks/databricks-claude-sonnet-4": {
"input_cost_per_token": 0.0000029999900000000002,
@@ -2340,7 +2501,6 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true
},
"eu.anthropic.claude-3-5-sonnet-20240620-v1:0": {
@@ -2468,8 +2628,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"eu.anthropic.claude-opus-4-20250514-v1:0": {
"cache_creation_input_token_cost": 0.00001875,
@@ -2494,8 +2653,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"eu.anthropic.claude-sonnet-4-20250514-v1:0": {
"cache_creation_input_token_cost": 0.00000375,
@@ -2524,8 +2682,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"eu.anthropic.claude-sonnet-4-5-20250929-v1:0": {
"cache_creation_input_token_cost": 0.000004125,
@@ -2555,7 +2712,6 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true
},
"gemini-2.5-flash": {
@@ -2721,7 +2877,7 @@
"output_cost_per_token": 0.000025,
"supports_function_calling": true,
"supports_vision": true,
- "supports_minimal_reasoning_effort": true
+ "supports_output_config": true
},
"gmi/anthropic/claude-sonnet-4.5": {
"input_cost_per_token": 0.000003,
@@ -2786,7 +2942,6 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true
},
"global.anthropic.claude-sonnet-4-20250514-v1:0": {
@@ -2816,8 +2971,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"global.anthropic.claude-haiku-4-5-20251001-v1:0": {
"cache_creation_input_token_cost": 0.00000125,
@@ -2840,7 +2994,6 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true
},
"gpt-5.2": {
@@ -3214,7 +3367,6 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true
},
"jp.anthropic.claude-haiku-4-5-20251001-v1:0": {
@@ -3237,7 +3389,6 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true
},
"openrouter/anthropic/claude-3-haiku": {
@@ -3265,8 +3416,7 @@
"supports_computer_use": true,
"supports_function_calling": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"openrouter/anthropic/claude-3.7-sonnet": {
"input_cost_per_image": 0.0048,
@@ -3282,8 +3432,7 @@
"supports_function_calling": true,
"supports_reasoning": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"openrouter/anthropic/claude-opus-4": {
"input_cost_per_image": 0.0048,
@@ -3302,8 +3451,7 @@
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"openrouter/anthropic/claude-opus-4.1": {
"input_cost_per_image": 0.0048,
@@ -3323,8 +3471,7 @@
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"openrouter/anthropic/claude-sonnet-4": {
"input_cost_per_image": 0.0048,
@@ -3347,8 +3494,7 @@
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"openrouter/anthropic/claude-sonnet-4.6": {
"cache_creation_input_token_cost": 0.00000375,
@@ -3372,9 +3518,7 @@
"supports_reasoning": true,
"supports_max_reasoning_effort": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159,
- "supports_minimal_reasoning_effort": true
+ "supports_vision": true
},
"openrouter/anthropic/claude-opus-4.5": {
"cache_creation_input_token_cost": 0.00000625,
@@ -3389,12 +3533,11 @@
"supports_assistant_prefill": true,
"supports_computer_use": true,
"supports_function_calling": true,
- "supports_minimal_reasoning_effort": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_output_config": true
},
"openrouter/anthropic/claude-opus-4.6": {
"cache_creation_input_token_cost": 0.00000625,
@@ -3413,9 +3556,7 @@
"supports_reasoning": true,
"supports_max_reasoning_effort": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
- "supports_minimal_reasoning_effort": true
+ "supports_vision": true
},
"openrouter/anthropic/claude-sonnet-4.5": {
"input_cost_per_image": 0.0048,
@@ -3438,8 +3579,7 @@
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"openrouter/anthropic/claude-haiku-4.5": {
"cache_creation_input_token_cost": 0.00000125,
@@ -3457,8 +3597,7 @@
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 346
+ "supports_vision": true
},
"openrouter/anthropic/claude-opus-4.7": {
"cache_creation_input_token_cost": 0.00000625,
@@ -3480,8 +3619,7 @@
"supports_max_reasoning_effort": true,
"supports_tool_choice": true,
"supports_vision": true,
- "supports_xhigh_reasoning_effort": true,
- "tool_use_system_prompt_tokens": 346
+ "supports_xhigh_reasoning_effort": true
},
"replicate/anthropic/claude-4.5-haiku": {
"input_cost_per_token": 0.000001,
@@ -3599,7 +3737,6 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true
},
"us.anthropic.claude-3-5-sonnet-20240620-v1:0": {
@@ -3727,8 +3864,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"us.anthropic.claude-sonnet-4-5-20250929-v1:0": {
"cache_creation_input_token_cost": 0.000004125,
@@ -3760,7 +3896,6 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true
},
"us-gov.anthropic.claude-sonnet-4-5-20250929-v1:0": {
@@ -3786,7 +3921,6 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true
},
"au.anthropic.claude-haiku-4-5-20251001-v1:0": {
@@ -3808,7 +3942,6 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true
},
"us.anthropic.claude-opus-4-20250514-v1:0": {
@@ -3834,8 +3967,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"us.anthropic.claude-opus-4-5-20251101-v1:0": {
"cache_creation_input_token_cost": 0.000006875,
@@ -3856,15 +3988,15 @@
"supports_assistant_prefill": true,
"supports_computer_use": true,
"supports_function_calling": true,
- "supports_minimal_reasoning_effort": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 159,
- "supports_native_structured_output": true
+ "supports_native_structured_output": true,
+ "supports_output_config": true,
+ "bedrock_output_config_effort_ceiling": "high"
},
"global.anthropic.claude-opus-4-5-20251101-v1:0": {
"cache_creation_input_token_cost": 0.00000625,
@@ -3885,15 +4017,15 @@
"supports_assistant_prefill": true,
"supports_computer_use": true,
"supports_function_calling": true,
- "supports_minimal_reasoning_effort": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 159,
- "supports_native_structured_output": true
+ "supports_native_structured_output": true,
+ "supports_output_config": true,
+ "bedrock_output_config_effort_ceiling": "high"
},
"eu.anthropic.claude-opus-4-5-20251101-v1:0": {
"cache_creation_input_token_cost": 0.00000625,
@@ -3913,15 +4045,15 @@
"supports_assistant_prefill": true,
"supports_computer_use": true,
"supports_function_calling": true,
- "supports_minimal_reasoning_effort": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 159,
- "supports_native_structured_output": true
+ "supports_native_structured_output": true,
+ "supports_output_config": true,
+ "bedrock_output_config_effort_ceiling": "high"
},
"us.anthropic.claude-sonnet-4-20250514-v1:0": {
"cache_creation_input_token_cost": 0.00000375,
@@ -3950,8 +4082,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"vercel_ai_gateway/anthropic/claude-3-haiku": {
"cache_creation_input_token_cost": 3e-7,
@@ -4180,13 +4311,13 @@
"output_cost_per_token": 0.000025,
"supports_assistant_prefill": true,
"supports_computer_use": true,
- "supports_minimal_reasoning_effort": true,
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true
+ "supports_vision": true,
+ "supports_output_config": true
},
"vercel_ai_gateway/anthropic/claude-opus-4.6": {
"cache_creation_input_token_cost": 0.00000625,
@@ -4206,7 +4337,7 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "supports_minimal_reasoning_effort": true
+ "supports_output_config": true
},
"vercel_ai_gateway/anthropic/claude-sonnet-4": {
"cache_creation_input_token_cost": 0.00000375,
@@ -4361,8 +4492,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"vertex_ai/claude-3-haiku": {
"input_cost_per_token": 2.5e-7,
@@ -4465,8 +4595,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"vertex_ai/claude-opus-4-1": {
"cache_creation_input_token_cost": 0.00001875,
@@ -4520,14 +4649,13 @@
"supports_assistant_prefill": true,
"supports_computer_use": true,
"supports_function_calling": true,
- "supports_minimal_reasoning_effort": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_output_config": true
},
"vertex_ai/claude-opus-4-5@20251101": {
"cache_creation_input_token_cost": 0.00000625,
@@ -4547,15 +4675,14 @@
"supports_assistant_prefill": true,
"supports_computer_use": true,
"supports_function_calling": true,
- "supports_minimal_reasoning_effort": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 159,
- "supports_native_streaming": true
+ "supports_native_streaming": true,
+ "supports_output_config": true
},
"vertex_ai/claude-opus-4-6": {
"cache_creation_input_token_cost": 0.00000625,
@@ -4581,10 +4708,8 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_output_config": true,
- "supports_max_reasoning_effort": true,
- "supports_minimal_reasoning_effort": true
+ "supports_max_reasoning_effort": true
},
"vertex_ai/claude-opus-4-6@default": {
"cache_creation_input_token_cost": 0.00000625,
@@ -4610,10 +4735,8 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_output_config": true,
- "supports_max_reasoning_effort": true,
- "supports_minimal_reasoning_effort": true
+ "supports_max_reasoning_effort": true
},
"vertex_ai/claude-opus-4-7": {
"cache_creation_input_token_cost": 0.00000625,
@@ -4640,9 +4763,7 @@
"supports_tool_choice": true,
"supports_vision": true,
"supports_xhigh_reasoning_effort": true,
- "tool_use_system_prompt_tokens": 346,
- "supports_max_reasoning_effort": true,
- "supports_minimal_reasoning_effort": true
+ "supports_max_reasoning_effort": true
},
"vertex_ai/claude-opus-4-7@default": {
"cache_creation_input_token_cost": 0.00000625,
@@ -4669,9 +4790,63 @@
"supports_tool_choice": true,
"supports_vision": true,
"supports_xhigh_reasoning_effort": true,
- "tool_use_system_prompt_tokens": 346,
- "supports_max_reasoning_effort": true,
- "supports_minimal_reasoning_effort": true
+ "supports_max_reasoning_effort": true
+ },
+ "vertex_ai/claude-opus-4-8": {
+ "cache_creation_input_token_cost": 0.00000625,
+ "cache_creation_input_token_cost_above_1hr": 0.00001,
+ "cache_read_input_token_cost": 5e-7,
+ "input_cost_per_token": 0.000005,
+ "litellm_provider": "vertex_ai-anthropic_models",
+ "max_input_tokens": 1000000,
+ "max_output_tokens": 128000,
+ "max_tokens": 128000,
+ "mode": "chat",
+ "output_cost_per_token": 0.000025,
+ "search_context_cost_per_query": {
+ "search_context_size_high": 0.01,
+ "search_context_size_low": 0.01,
+ "search_context_size_medium": 0.01
+ },
+ "supports_assistant_prefill": false,
+ "supports_computer_use": true,
+ "supports_function_calling": true,
+ "supports_pdf_input": true,
+ "supports_prompt_caching": true,
+ "supports_reasoning": true,
+ "supports_response_schema": true,
+ "supports_tool_choice": true,
+ "supports_vision": true,
+ "supports_xhigh_reasoning_effort": true,
+ "supports_max_reasoning_effort": true
+ },
+ "vertex_ai/claude-opus-4-8@default": {
+ "cache_creation_input_token_cost": 0.00000625,
+ "cache_creation_input_token_cost_above_1hr": 0.00001,
+ "cache_read_input_token_cost": 5e-7,
+ "input_cost_per_token": 0.000005,
+ "litellm_provider": "vertex_ai-anthropic_models",
+ "max_input_tokens": 1000000,
+ "max_output_tokens": 128000,
+ "max_tokens": 128000,
+ "mode": "chat",
+ "output_cost_per_token": 0.000025,
+ "search_context_cost_per_query": {
+ "search_context_size_high": 0.01,
+ "search_context_size_low": 0.01,
+ "search_context_size_medium": 0.01
+ },
+ "supports_assistant_prefill": false,
+ "supports_computer_use": true,
+ "supports_function_calling": true,
+ "supports_pdf_input": true,
+ "supports_prompt_caching": true,
+ "supports_reasoning": true,
+ "supports_response_schema": true,
+ "supports_tool_choice": true,
+ "supports_vision": true,
+ "supports_xhigh_reasoning_effort": true,
+ "supports_max_reasoning_effort": true
},
"vertex_ai/claude-sonnet-4-5": {
"cache_creation_input_token_cost": 0.00000375,
@@ -4719,14 +4894,12 @@
"supports_max_reasoning_effort": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
"search_context_size_medium": 0.01
},
- "supports_output_config": true,
- "supports_minimal_reasoning_effort": true
+ "supports_output_config": true
},
"vertex_ai/claude-sonnet-4-5@20250929": {
"cache_creation_input_token_cost": 0.00000375,
@@ -4778,8 +4951,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"vertex_ai/claude-sonnet-4": {
"cache_creation_input_token_cost": 0.00000375,
@@ -4808,8 +4980,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"vertex_ai/claude-sonnet-4@20250514": {
"cache_creation_input_token_cost": 0.00000375,
@@ -4838,8 +5009,7 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
- "supports_vision": true,
- "tool_use_system_prompt_tokens": 159
+ "supports_vision": true
},
"vertex_ai/claude-sonnet-4-6@default": {
"cache_creation_input_token_cost": 0.00000375,
@@ -4861,14 +5031,12 @@
"supports_max_reasoning_effort": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
"search_context_size_medium": 0.01
},
- "supports_output_config": true,
- "supports_minimal_reasoning_effort": true
+ "supports_output_config": true
},
"bedrock/us-gov-east-1/anthropic.claude-haiku-4-5-20251001-v1:0": {
"cache_creation_input_token_cost": 0.0000015,
@@ -4889,7 +5057,6 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true,
"supports_pdf_input": true
},
@@ -4912,7 +5079,6 @@
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true,
- "tool_use_system_prompt_tokens": 346,
"supports_native_structured_output": true,
"supports_pdf_input": true
},
diff --git a/runtime.lock.json b/runtime.lock.json
index ad88da32..03d7019b 100644
--- a/runtime.lock.json
+++ b/runtime.lock.json
@@ -1,27 +1,27 @@
{
- "version": "0.0.50",
- "sourceRef": "v0.0.50",
+ "version": "0.0.51",
+ "sourceRef": "v0.0.51",
"sourceRepository": "777genius/agent_teams_orchestrator",
"releaseRepository": "777genius/agent-teams-ai",
- "releaseTag": "v2.2.1",
+ "releaseTag": "v2.3.0",
"assets": {
"darwin-arm64": {
- "file": "agent-teams-runtime-darwin-arm64-v0.0.50.tar.gz",
+ "file": "agent-teams-runtime-darwin-arm64-v0.0.51.tar.gz",
"archiveKind": "tar.gz",
"binaryName": "claude-multimodel"
},
"darwin-x64": {
- "file": "agent-teams-runtime-darwin-x64-v0.0.50.tar.gz",
+ "file": "agent-teams-runtime-darwin-x64-v0.0.51.tar.gz",
"archiveKind": "tar.gz",
"binaryName": "claude-multimodel"
},
"linux-x64": {
- "file": "agent-teams-runtime-linux-x64-v0.0.50.tar.gz",
+ "file": "agent-teams-runtime-linux-x64-v0.0.51.tar.gz",
"archiveKind": "tar.gz",
"binaryName": "claude-multimodel"
},
"win32-x64": {
- "file": "agent-teams-runtime-win32-x64-v0.0.50.zip",
+ "file": "agent-teams-runtime-win32-x64-v0.0.51.zip",
"archiveKind": "zip",
"binaryName": "claude-multimodel.exe"
}
diff --git a/scripts/ci/enforce-pnpm-install.mjs b/scripts/ci/enforce-pnpm-install.mjs
new file mode 100644
index 00000000..fb33357b
--- /dev/null
+++ b/scripts/ci/enforce-pnpm-install.mjs
@@ -0,0 +1,13 @@
+const userAgent = process.env.npm_config_user_agent ?? '';
+
+if (userAgent.startsWith('pnpm/')) {
+ process.exit(0);
+}
+
+console.error(
+ [
+ 'Use pnpm install for this project.',
+ 'npm and yarn do not apply pnpm patchedDependencies, including the Radix React 19 patches.',
+ ].join('\n')
+);
+process.exit(1);
diff --git a/scripts/ci/verify-radix-presence-patch.mjs b/scripts/ci/verify-radix-presence-patch.mjs
index e62b7515..0c5aec62 100644
--- a/scripts/ci/verify-radix-presence-patch.mjs
+++ b/scripts/ci/verify-radix-presence-patch.mjs
@@ -25,10 +25,19 @@ const patchChecks = [
},
{
packageName: '@radix-ui/react-select',
- requiredMarkers: ['useGuardedNodeSetter', 'setContentRef', 'setItemTextNodeRef'],
+ requiredMarkers: [
+ 'useGuardedNodeSetter',
+ 'setContentRef',
+ 'setItemTextNodeRef',
+ 'textValueRef',
+ 'nextTextValue',
+ ],
forbiddenSnippets: [
'(node) => setContent(node)',
'(node) => setItemTextNode(node)',
+ 'forwardedRef,\n (node) => contentContext.itemRefCallback?.(node, value, disabled)',
+ 'itemContext.onItemTextChange,\n (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)',
+ 'setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? "").trim());',
'onTriggerChange: setTrigger,',
'onValueNodeChange: setValueNode,',
'onViewportChange: setViewport,',
@@ -37,6 +46,23 @@ const patchChecks = [
'setSelectedItemText(node);',
],
},
+ {
+ packageName: '@radix-ui/react-slot',
+ requiredMarkers: ['composedRef', 'React.useMemo'],
+ forbiddenSnippets: [
+ 'props2.ref = forwardedRef ? (0, import_react_compose_refs.composeRefs)(forwardedRef, childrenRef) : childrenRef;',
+ 'props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;',
+ ],
+ },
+ {
+ packageName: '@radix-ui/react-slot',
+ resolverFromPackage: '@radix-ui/react-select',
+ requiredMarkers: ['composedRef', 'React.useMemo'],
+ forbiddenSnippets: [
+ 'props2.ref = forwardedRef ? (0, import_react_compose_refs.composeRefs)(forwardedRef, childrenRef) : childrenRef;',
+ 'props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;',
+ ],
+ },
{
packageName: '@radix-ui/react-popper',
resolverFromPackage: '@radix-ui/react-select',
diff --git a/scripts/ci/verify-radix-renderer-bundle.mjs b/scripts/ci/verify-radix-renderer-bundle.mjs
index 527c4763..528146d1 100644
--- a/scripts/ci/verify-radix-renderer-bundle.mjs
+++ b/scripts/ci/verify-radix-renderer-bundle.mjs
@@ -27,6 +27,9 @@ const requiredMarkers = [
'setSelectedItemRef',
'setSelectedItemTextRef',
'setItemTextNodeRef',
+ 'textValueRef',
+ 'nextTextValue',
+ 'composedRef',
'setControlRef',
'setBubbleInputRef',
];
@@ -35,6 +38,12 @@ const forbiddenSnippets = [
'(node) => setContent(node)',
'(node2) => setNode(node2)',
'(node) => setItemTextNode(node)',
+ 'forwardedRef,\n (node) => contentContext.itemRefCallback?.(node, value, disabled)',
+ 'forwardedRef,\n (node2) => contentContext.itemRefCallback?.(node2, value, disabled)',
+ 'itemContext.onItemTextChange,\n (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)',
+ 'itemContext.onItemTextChange,\n (node2) => contentContext.itemTextRefCallback?.(node2, itemContext.value, itemContext.disabled)',
+ 'setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? "").trim());',
+ 'setTextValue((prevTextValue) => prevTextValue || (node2?.textContent ?? "").trim());',
'onContentChange: setContent,',
'onTriggerChange: setTrigger,',
'onValueNodeChange: setValueNode,',
@@ -46,6 +55,7 @@ const forbiddenSnippets = [
'useComposedRefs(forwardedRef, setBubbleInput)',
'useComposedRefs)(forwardedRef, setControl)',
'useComposedRefs)(forwardedRef, setBubbleInput)',
+ 'props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;',
];
const failures = [];
diff --git a/scripts/prove-agent-cli-launch.mjs b/scripts/prove-agent-cli-launch.mjs
index 980f0169..8cf3035d 100644
--- a/scripts/prove-agent-cli-launch.mjs
+++ b/scripts/prove-agent-cli-launch.mjs
@@ -32,10 +32,7 @@ const result = spawnSyncWithWindowsShell(
'exec',
'vitest',
'run',
- '--maxWorkers',
- '1',
- '--minWorkers',
- '1',
+ '--maxWorkers=1',
'test/main/utils/AgentCliLaunch.live-e2e.test.ts',
],
{
diff --git a/scripts/prove-opencode-mixed-recovery.mjs b/scripts/prove-opencode-mixed-recovery.mjs
index 59845aa2..c2201aa1 100644
--- a/scripts/prove-opencode-mixed-recovery.mjs
+++ b/scripts/prove-opencode-mixed-recovery.mjs
@@ -46,10 +46,7 @@ const result = spawnSyncWithWindowsShell(
'exec',
'vitest',
'run',
- '--maxWorkers',
- '1',
- '--minWorkers',
- '1',
+ '--maxWorkers=1',
'test/main/services/team/OpenCodeMixedRecovery.live.test.ts',
],
{
diff --git a/scripts/prove-opencode-semantic-gauntlet.mjs b/scripts/prove-opencode-semantic-gauntlet.mjs
index 8366d98b..145e677e 100644
--- a/scripts/prove-opencode-semantic-gauntlet.mjs
+++ b/scripts/prove-opencode-semantic-gauntlet.mjs
@@ -52,10 +52,7 @@ const result = spawnSyncWithWindowsShell(
'exec',
'vitest',
'run',
- '--maxWorkers',
- '1',
- '--minWorkers',
- '1',
+ '--maxWorkers=1',
'test/main/services/team/OpenCodeSemanticModelGauntlet.live.test.ts',
],
{
diff --git a/scripts/prove-opencode-semantic-messaging.mjs b/scripts/prove-opencode-semantic-messaging.mjs
index a62877a8..33546b5d 100644
--- a/scripts/prove-opencode-semantic-messaging.mjs
+++ b/scripts/prove-opencode-semantic-messaging.mjs
@@ -44,10 +44,7 @@ const result = spawnSyncWithWindowsShell(
'exec',
'vitest',
'run',
- '--maxWorkers',
- '1',
- '--minWorkers',
- '1',
+ '--maxWorkers=1',
'test/main/services/team/OpenCodeSemanticMessaging.live.test.ts',
],
{
diff --git a/scripts/prove-opencode-semantic-model-matrix.mjs b/scripts/prove-opencode-semantic-model-matrix.mjs
index 1b74e5c6..9ed464bc 100644
--- a/scripts/prove-opencode-semantic-model-matrix.mjs
+++ b/scripts/prove-opencode-semantic-model-matrix.mjs
@@ -42,10 +42,7 @@ const result = spawnSyncWithWindowsShell(
'exec',
'vitest',
'run',
- '--maxWorkers',
- '1',
- '--minWorkers',
- '1',
+ '--maxWorkers=1',
'test/main/services/team/OpenCodeSemanticModelMatrix.live.test.ts',
],
{
diff --git a/scripts/prove-opencode-team-provisioning.mjs b/scripts/prove-opencode-team-provisioning.mjs
index 5cca86a3..42b2977f 100644
--- a/scripts/prove-opencode-team-provisioning.mjs
+++ b/scripts/prove-opencode-team-provisioning.mjs
@@ -44,10 +44,7 @@ const result = spawnSyncWithWindowsShell(
'exec',
'vitest',
'run',
- '--maxWorkers',
- '1',
- '--minWorkers',
- '1',
+ '--maxWorkers=1',
'test/main/services/team/OpenCodeTeamProvisioning.live.test.ts',
],
{
diff --git a/scripts/prove-provider-launch-stress.mjs b/scripts/prove-provider-launch-stress.mjs
index 79665188..4753c60c 100644
--- a/scripts/prove-provider-launch-stress.mjs
+++ b/scripts/prove-provider-launch-stress.mjs
@@ -76,10 +76,7 @@ const result = spawnSyncWithWindowsShell(
'exec',
'vitest',
'run',
- '--maxWorkers',
- '1',
- '--minWorkers',
- '1',
+ '--maxWorkers=1',
'test/main/services/team/ProviderLaunchStress.live-e2e.test.ts',
],
{
diff --git a/src/features/agent-graph/core/domain/taskGraphSemantics.ts b/src/features/agent-graph/core/domain/taskGraphSemantics.ts
index 53ed30ed..caab2677 100644
--- a/src/features/agent-graph/core/domain/taskGraphSemantics.ts
+++ b/src/features/agent-graph/core/domain/taskGraphSemantics.ts
@@ -1,7 +1,6 @@
import {
getTeamTaskWorkflowColumn,
- isTeamTaskDeleted,
- isTeamTaskFinishedForDependency,
+ isTeamTaskBlockedByUnfinishedDependency,
isTeamTaskNeedsFixActionable,
} from '@shared/utils/teamTaskState';
@@ -43,13 +42,5 @@ export function isTaskBlocked(
task: TaskBlockInput,
taskStateById: ReadonlyMap
): boolean {
- const blockedBy = task.blockedBy?.filter((taskId) => taskId.length > 0) ?? [];
- if (blockedBy.length === 0) {
- return false;
- }
-
- return blockedBy.some((taskId) => {
- const blocker = taskStateById.get(taskId);
- return !blocker || (!isTeamTaskFinishedForDependency(blocker) && !isTeamTaskDeleted(blocker));
- });
+ return isTeamTaskBlockedByUnfinishedDependency(task, taskStateById);
}
diff --git a/src/features/agent-graph/renderer/adapters/TeamGraphAdapter.ts b/src/features/agent-graph/renderer/adapters/TeamGraphAdapter.ts
index 5b331b48..347702f7 100644
--- a/src/features/agent-graph/renderer/adapters/TeamGraphAdapter.ts
+++ b/src/features/agent-graph/renderer/adapters/TeamGraphAdapter.ts
@@ -684,19 +684,60 @@ export class TeamGraphAdapter {
): void {
const taskStateById = new Map<
string,
- Pick
+ Pick<
+ TeamGraphData['tasks'][number],
+ 'id' | 'displayId' | 'status' | 'reviewState' | 'kanbanColumn' | 'deletedAt'
+ >
>();
const taskDisplayIds = new Map();
+ const taskIdsByCanonicalReference = new Map>();
+ const taskIdsByDisplayReference = new Map>();
const memberColorByName = new Map();
+ const addTaskReference = (
+ references: Map>,
+ reference: string | undefined,
+ taskId: string
+ ): void => {
+ const normalized = reference?.trim().replace(/^#/, '');
+ if (!normalized) return;
+ const taskIds = references.get(normalized) ?? new Set();
+ taskIds.add(taskId);
+ references.set(normalized, taskIds);
+ };
+ const resolveTaskReference = (reference: string): string | null => {
+ const normalized = reference.trim().replace(/^#/, '');
+ if (!normalized) return null;
+ const canonicalTaskIds = taskIdsByCanonicalReference.get(normalized);
+ if (canonicalTaskIds?.size === 1) {
+ return [...canonicalTaskIds][0];
+ }
+ if (canonicalTaskIds && canonicalTaskIds.size > 1) {
+ return null;
+ }
+ const displayTaskIds = taskIdsByDisplayReference.get(normalized);
+ return displayTaskIds?.size === 1 ? [...displayTaskIds][0] : null;
+ };
+ const formatTaskReference = (reference: string): string => {
+ const taskId = resolveTaskReference(reference);
+ if (taskId) {
+ return taskDisplayIds.get(taskId) ?? `#${taskId.slice(0, 6)}`;
+ }
+ const trimmed = reference.trim();
+ return trimmed.startsWith('#') ? trimmed : `#${trimmed.slice(0, 6)}`;
+ };
for (const t of data.tasks) {
taskStateById.set(t.id, {
+ id: t.id,
+ ...(t.displayId ? { displayId: t.displayId } : {}),
status: t.status,
...(t.reviewState ? { reviewState: t.reviewState } : {}),
...(t.kanbanColumn ? { kanbanColumn: t.kanbanColumn } : {}),
...(t.deletedAt ? { deletedAt: t.deletedAt } : {}),
});
taskDisplayIds.set(t.id, t.displayId ?? `#${t.id.slice(0, 6)}`);
+ addTaskReference(taskIdsByCanonicalReference, t.id, t.id);
+ addTaskReference(taskIdsByDisplayReference, t.displayId, t.id);
}
for (const member of data.members) {
if (member.color) {
@@ -733,10 +774,10 @@ export class TeamGraphAdapter {
: TeamGraphAdapter.#mapReviewState(task.reviewState);
const blockedByDisplayIds = task.blockedBy?.length
- ? task.blockedBy.map((id) => taskDisplayIds.get(id) ?? `#${id.slice(0, 6)}`)
+ ? task.blockedBy.map(formatTaskReference)
: undefined;
const blocksDisplayIds = task.blocks?.length
- ? task.blocks.map((id) => taskDisplayIds.get(id) ?? `#${id.slice(0, 6)}`)
+ ? task.blocks.map(formatTaskReference)
: undefined;
const totalCommentCount = task.comments?.length ?? 0;
@@ -806,7 +847,10 @@ export class TeamGraphAdapter {
targetTaskIds: Set;
}
>();
- const addBlockingRelation = (blockerId: string, blockedId: string): void => {
+ const addBlockingRelation = (blockerRef: string, blockedRef: string): void => {
+ const blockerId = resolveTaskReference(blockerRef);
+ const blockedId = resolveTaskReference(blockedRef);
+ if (!blockerId || !blockedId) return;
if (blockerId === blockedId) return;
const rawRelationKey = `${blockerId}->${blockedId}`;
if (seenBlockingRelations.has(rawRelationKey)) return;
@@ -849,7 +893,9 @@ export class TeamGraphAdapter {
if (!visibleTaskIds.has(task.id)) continue;
- for (const relatedId of task.related ?? []) {
+ for (const relatedRef of task.related ?? []) {
+ const relatedId = resolveTaskReference(relatedRef);
+ if (!relatedId) continue;
if (!visibleTaskIds.has(relatedId)) continue;
const key =
task.id.localeCompare(relatedId) <= 0
diff --git a/src/features/codex-account/renderer/hooks/useCodexAccountSnapshot.ts b/src/features/codex-account/renderer/hooks/useCodexAccountSnapshot.ts
index 368d590f..68d9b8ff 100644
--- a/src/features/codex-account/renderer/hooks/useCodexAccountSnapshot.ts
+++ b/src/features/codex-account/renderer/hooks/useCodexAccountSnapshot.ts
@@ -332,17 +332,27 @@ export function useCodexAccountSnapshot(options: {
[applySnapshot, electronMode, options.enabled]
);
+ const waitingForInitialRefresh =
+ electronMode &&
+ options.enabled &&
+ initialRefreshDelayMs > 0 &&
+ snapshot === null &&
+ !initialRefreshAttempted;
+ const effectiveLoading = loading || waitingForInitialRefresh;
+ const effectiveRateLimitsLoading =
+ rateLimitsLoading || (waitingForInitialRefresh && options.includeRateLimits === true);
+
return useMemo(
() => ({
snapshot,
- loading,
- rateLimitsLoading,
+ loading: effectiveLoading,
+ rateLimitsLoading: effectiveRateLimitsLoading,
error,
refresh,
startChatgptLogin: (mode) => runAction(() => api.startCodexChatgptLogin({ mode })),
cancelChatgptLogin: () => runAction(() => api.cancelCodexChatgptLogin()),
logout: () => runAction(() => api.logoutCodexAccount()),
}),
- [error, loading, rateLimitsLoading, refresh, runAction, snapshot]
+ [effectiveLoading, effectiveRateLimitsLoading, error, refresh, runAction, snapshot]
);
}
diff --git a/src/features/codex-account/renderer/mergeCodexProviderStatusWithSnapshot.ts b/src/features/codex-account/renderer/mergeCodexProviderStatusWithSnapshot.ts
index 620cd1f7..25a65fe7 100644
--- a/src/features/codex-account/renderer/mergeCodexProviderStatusWithSnapshot.ts
+++ b/src/features/codex-account/renderer/mergeCodexProviderStatusWithSnapshot.ts
@@ -168,6 +168,11 @@ export function mergeCodexProviderStatusWithSnapshot(
}
const availableBackends = mergeCodexNativeBackendOption(provider, snapshot);
+ const customProvider = provider.connection?.codex?.customProvider ?? null;
+ const endpointLabel =
+ customProvider?.active === true && customProvider.baseUrl.trim()
+ ? customProvider.baseUrl.trim()
+ : 'codex exec --json';
const baseConnection = provider.connection ?? {
supportsOAuth: false,
supportsApiKey: true,
@@ -203,7 +208,7 @@ export function mergeCodexProviderStatusWithSnapshot(
backend: {
kind: CODEX_NATIVE_BACKEND_ID,
label: CODEX_NATIVE_LABEL,
- endpointLabel: 'codex exec --json',
+ endpointLabel,
projectId: provider.backend?.projectId ?? null,
authMethodDetail: snapshot.effectiveAuthMode ?? null,
},
@@ -227,6 +232,13 @@ export function mergeCodexProviderStatusWithSnapshot(
localActiveChatgptAccountPresent: snapshot.localActiveChatgptAccountPresent,
login: snapshot.login,
rateLimits: snapshot.rateLimits,
+ customProvider: customProvider ?? {
+ enabled: false,
+ active: false,
+ baseUrl: '',
+ model: '',
+ issueMessage: null,
+ },
},
},
};
diff --git a/src/features/localization/contracts/appLocale.ts b/src/features/localization/contracts/appLocale.ts
index b7a91936..d2289c03 100644
--- a/src/features/localization/contracts/appLocale.ts
+++ b/src/features/localization/contracts/appLocale.ts
@@ -14,6 +14,21 @@ export const APP_LOCALE_PREFERENCES = [
'ur',
'id',
'de',
+ 'it',
+ 'tr',
+ 'vi',
+ 'pl',
+ 'fa',
+ 'th',
+ 'uk',
+ 'nl',
+ 'ta',
+ 'te',
+ 'mr',
+ 'fil',
+ 'ms',
+ 'sw',
+ 'ro',
] as const;
export const RESOLVED_APP_LOCALES = [
@@ -31,6 +46,21 @@ export const RESOLVED_APP_LOCALES = [
'ur',
'id',
'de',
+ 'it',
+ 'tr',
+ 'vi',
+ 'pl',
+ 'fa',
+ 'th',
+ 'uk',
+ 'nl',
+ 'ta',
+ 'te',
+ 'mr',
+ 'fil',
+ 'ms',
+ 'sw',
+ 'ro',
] as const;
export type AppLocalePreference = (typeof APP_LOCALE_PREFERENCES)[number];
diff --git a/src/features/localization/renderer/locales/ar/common.json b/src/features/localization/renderer/locales/ar/common.json
index 4cab28ce..2d68a25d 100644
--- a/src/features/localization/renderer/locales/ar/common.json
+++ b/src/features/localization/renderer/locales/ar/common.json
@@ -62,21 +62,36 @@
"locales": {
"emptyMessage": "لم يتم العثور على أي لغة.",
"names": {
- "en": "الإنجليزية",
- "ru": "الروسية",
- "zh": "الصينية",
- "ja": "اليابانية",
- "ko": "الكورية",
- "es": "الإسبانية",
- "hi": "الهندية",
- "pt": "البرتغالية",
- "fr": "الفرنسية",
"ar": "العربية",
"bn": "البنغالية",
- "ur": "الأردية",
- "id": "الإندونيسية",
"de": "الألمانية",
- "system": "النظام"
+ "en": "الإنجليزية",
+ "es": "الإسبانية",
+ "fa": "الفارسية",
+ "fil": "الفلبينية",
+ "fr": "الفرنسية",
+ "hi": "الهندية",
+ "id": "الإندونيسية",
+ "it": "الإيطالية",
+ "ja": "اليابانية",
+ "ko": "الكورية",
+ "mr": "الماراتية",
+ "ms": "الملايو",
+ "nl": "الهولندية",
+ "pl": "البولندية",
+ "pt": "البرتغالية",
+ "ro": "الرومانية",
+ "ru": "الروسية",
+ "sw": "السواحيلية",
+ "system": "النظام",
+ "ta": "التاميلية",
+ "te": "التيلوغوية",
+ "th": "التايلاندية",
+ "tr": "التركية",
+ "uk": "الأوكرانية",
+ "ur": "الأردية",
+ "vi": "الفيتنامية",
+ "zh": "الصينية"
},
"searchPlaceholder": "البحث عن لغة...",
"selectPlaceholder": "اختر لغة التطبيق...",
diff --git a/src/features/localization/renderer/locales/ar/settings.json b/src/features/localization/renderer/locales/ar/settings.json
index 1f515d2f..dd7d7856 100644
--- a/src/features/localization/renderer/locales/ar/settings.json
+++ b/src/features/localization/renderer/locales/ar/settings.json
@@ -68,12 +68,12 @@
"useInTeamPicker": "الاستخدام في مشغل الفريق",
"testInProgress": "اختبار النموذج قيد التشغيل بالفعل.",
"validationContextRequired": "حدد سياق تحقق أعلاه لتفعيل Test و Set default. الحفظ في team picker يخزن route للفرق الجديدة فقط.",
+ "actionsUnavailable": "الإجراءات غير متاحة مؤقتًا.",
"defaultSaveInProgress": "يتم حفظ OpenCode default.",
"routeUnavailableAuth": "يتطلب هذا provider مصادقة قبل استخدام هذا النموذج.",
"routeUnavailableFailed": "فشل هذا model route في آخر execution test.",
- "routeUnavailableUnknown": "هذا النموذج هو OpenCode default الحالي، لكنه غير متاح بعد في live catalog.",
- "actionsUnavailable": "الإجراءات غير متاحة مؤقتًا.",
- "routeUnavailableGeneric": "لا يمكن استخدام هذا model route الآن."
+ "routeUnavailableGeneric": "لا يمكن استخدام هذا model route الآن.",
+ "routeUnavailableUnknown": "هذا النموذج هو OpenCode default الحالي، لكنه غير متاح بعد في live catalog."
},
"providers": {
"catalog": "مُقدِّم الخدمات المفتوحة",
diff --git a/src/features/localization/renderer/locales/ar/team.json b/src/features/localization/renderer/locales/ar/team.json
index c0d9b113..efa26a3c 100644
--- a/src/features/localization/renderer/locales/ar/team.json
+++ b/src/features/localization/renderer/locales/ar/team.json
@@ -1496,7 +1496,7 @@
},
"status": {
"reusedCrossTeamRequest": "Reused recent cross-team request",
- "teamOffline": "الفريق غير المباشر"
+ "teamOffline": "غير متصل"
},
"revision": {
"editing": "جارٍ تعديل الرسالة السابقة",
diff --git a/src/features/localization/renderer/locales/bn/common.json b/src/features/localization/renderer/locales/bn/common.json
index 77a851dc..30668098 100644
--- a/src/features/localization/renderer/locales/bn/common.json
+++ b/src/features/localization/renderer/locales/bn/common.json
@@ -62,21 +62,36 @@
"locales": {
"emptyMessage": "কোনো ভাষা পাওয়া যায়নি।",
"names": {
- "en": "ইংরেজি",
- "ru": "রুশ",
- "zh": "চীনা",
- "ja": "জাপানি",
- "ko": "কোরীয়",
- "es": "স্প্যানিশ",
- "hi": "হিন্দি",
- "pt": "পর্তুগিজ",
- "fr": "ফরাসি",
"ar": "আরবি",
"bn": "বাংলা",
- "ur": "উর্দু",
- "id": "ইন্দোনেশীয়",
"de": "জার্মান",
- "system": "সিস্টেম"
+ "en": "ইংরেজি",
+ "es": "স্প্যানিশ",
+ "fa": "ফারসি",
+ "fil": "ফিলিপিনো",
+ "fr": "ফরাসি",
+ "hi": "হিন্দি",
+ "id": "ইন্দোনেশীয়",
+ "it": "ইতালীয়",
+ "ja": "জাপানি",
+ "ko": "কোরীয়",
+ "mr": "মারাঠি",
+ "ms": "মালয়",
+ "nl": "ডাচ",
+ "pl": "পোলিশ",
+ "pt": "পর্তুগিজ",
+ "ro": "রোমানীয়",
+ "ru": "রুশ",
+ "sw": "সোয়াহিলি",
+ "system": "সিস্টেম",
+ "ta": "তামিল",
+ "te": "তেলুগু",
+ "th": "থাই",
+ "tr": "তুর্কি",
+ "uk": "ইউক্রেনীয়",
+ "ur": "উর্দু",
+ "vi": "ভিয়েতনামি",
+ "zh": "চীনা"
},
"searchPlaceholder": "ভাষা খুঁজুন...",
"selectPlaceholder": "অ্যাপের ভাষা নির্বাচন করুন...",
diff --git a/src/features/localization/renderer/locales/bn/settings.json b/src/features/localization/renderer/locales/bn/settings.json
index 442572c8..be5c5e34 100644
--- a/src/features/localization/renderer/locales/bn/settings.json
+++ b/src/features/localization/renderer/locales/bn/settings.json
@@ -68,12 +68,12 @@
"useInTeamPicker": "গ্রুপ বাছাইকারী ব্যবহার করো",
"testInProgress": "মডেল পরীক্ষা ইতিমধ্যেই চলছে।",
"validationContextRequired": "Test এবং Set default চালু করতে উপরে একটি validation context নির্বাচন করুন। team picker-এ সংরক্ষণ করলে শুধু নতুন দলের জন্য route রাখা হয়।",
+ "actionsUnavailable": "অ্যাকশনগুলো সাময়িকভাবে পাওয়া যাচ্ছে না।",
"defaultSaveInProgress": "OpenCode default সংরক্ষণ করা হচ্ছে।",
"routeUnavailableAuth": "এই মডেল ব্যবহারের আগে এই provider-এর authentication দরকার।",
"routeUnavailableFailed": "এই model route শেষ execution test-এ ব্যর্থ হয়েছে।",
- "routeUnavailableUnknown": "এই মডেলটি বর্তমান OpenCode default, কিন্তু এখনও live catalog-এ নেই।",
- "actionsUnavailable": "অ্যাকশনগুলো সাময়িকভাবে পাওয়া যাচ্ছে না।",
- "routeUnavailableGeneric": "এই model route এখন ব্যবহার করা যাবে না।"
+ "routeUnavailableGeneric": "এই model route এখন ব্যবহার করা যাবে না।",
+ "routeUnavailableUnknown": "এই মডেলটি বর্তমান OpenCode default, কিন্তু এখনও live catalog-এ নেই।"
},
"providers": {
"catalog": "OpenCode উপলব্ধকারী ক্যাটালগ",
diff --git a/src/features/localization/renderer/locales/bn/team.json b/src/features/localization/renderer/locales/bn/team.json
index 6473fac7..b803ee8e 100644
--- a/src/features/localization/renderer/locales/bn/team.json
+++ b/src/features/localization/renderer/locales/bn/team.json
@@ -1496,7 +1496,7 @@
},
"status": {
"reusedCrossTeamRequest": "সম্প্রতি ব্যবহৃত ক্রস-টেম অনুরোধ",
- "teamOffline": "অফলাইন অবস্থায় ব্যবহারের জন্য প্রস্তুত করা হচ্ছে"
+ "teamOffline": "অফলাইন"
},
"revision": {
"editing": "আগের বার্তা সম্পাদনা করা হচ্ছে",
diff --git a/src/features/localization/renderer/locales/de/common.json b/src/features/localization/renderer/locales/de/common.json
index 3fb260f2..9e106704 100644
--- a/src/features/localization/renderer/locales/de/common.json
+++ b/src/features/localization/renderer/locales/de/common.json
@@ -62,21 +62,36 @@
"locales": {
"emptyMessage": "Keine Sprache gefunden.",
"names": {
- "en": "Englisch",
- "ru": "Russisch",
- "zh": "Chinesisch",
- "ja": "Japanisch",
- "ko": "Koreanisch",
- "es": "Spanisch",
- "hi": "Hindi",
- "pt": "Portugiesisch",
- "fr": "Französisch",
"ar": "Arabisch",
"bn": "Bengalisch",
- "ur": "Urdu",
- "id": "Indonesisch",
"de": "Deutsch",
- "system": "System"
+ "en": "Englisch",
+ "es": "Spanisch",
+ "fa": "Persisch",
+ "fil": "Filipino",
+ "fr": "Französisch",
+ "hi": "Hindi",
+ "id": "Indonesisch",
+ "it": "Italienisch",
+ "ja": "Japanisch",
+ "ko": "Koreanisch",
+ "mr": "Marathi",
+ "ms": "Malaiisch",
+ "nl": "Niederländisch",
+ "pl": "Polnisch",
+ "pt": "Portugiesisch",
+ "ro": "Rumänisch",
+ "ru": "Russisch",
+ "sw": "Suaheli",
+ "system": "System",
+ "ta": "Tamilisch",
+ "te": "Telugu",
+ "th": "Thailändisch",
+ "tr": "Türkisch",
+ "uk": "Ukrainisch",
+ "ur": "Urdu",
+ "vi": "Vietnamesisch",
+ "zh": "Chinesisch"
},
"searchPlaceholder": "Sprache suchen...",
"selectPlaceholder": "App-Sprache auswählen...",
diff --git a/src/features/localization/renderer/locales/de/settings.json b/src/features/localization/renderer/locales/de/settings.json
index 1e073d23..ae60d973 100644
--- a/src/features/localization/renderer/locales/de/settings.json
+++ b/src/features/localization/renderer/locales/de/settings.json
@@ -68,12 +68,12 @@
"useInTeamPicker": "Einsatz im Team Picker",
"testInProgress": "Der Modelltest läuft bereits.",
"validationContextRequired": "Wählen Sie oben einen validation context aus, um Test und Set default zu aktivieren. Speichern für team picker speichert nur die route für neue Teams.",
+ "actionsUnavailable": "Aktionen sind vorübergehend nicht verfügbar.",
"defaultSaveInProgress": "OpenCode default wird gespeichert.",
"routeUnavailableAuth": "Dieser provider benötigt eine Authentifizierung, bevor dieses Modell verwendet werden kann.",
"routeUnavailableFailed": "Diese model route ist beim letzten execution test fehlgeschlagen.",
- "routeUnavailableUnknown": "Dieses Modell ist der aktuelle OpenCode default, aber noch nicht im live catalog verfügbar.",
- "actionsUnavailable": "Aktionen sind vorübergehend nicht verfügbar.",
- "routeUnavailableGeneric": "Diese model route kann derzeit nicht verwendet werden."
+ "routeUnavailableGeneric": "Diese model route kann derzeit nicht verwendet werden.",
+ "routeUnavailableUnknown": "Dieses Modell ist der aktuelle OpenCode default, aber noch nicht im live catalog verfügbar."
},
"providers": {
"catalog": "OpenCode Anbieter Katalog",
diff --git a/src/features/localization/renderer/locales/de/team.json b/src/features/localization/renderer/locales/de/team.json
index 1700d050..8367b5f0 100644
--- a/src/features/localization/renderer/locales/de/team.json
+++ b/src/features/localization/renderer/locales/de/team.json
@@ -1496,7 +1496,7 @@
},
"status": {
"reusedCrossTeamRequest": "Neuer Cross-Dampf-Antrag",
- "teamOffline": "Team offline"
+ "teamOffline": "offline"
},
"revision": {
"editing": "Vorherige Nachricht wird bearbeitet",
diff --git a/src/features/localization/renderer/locales/en/common.json b/src/features/localization/renderer/locales/en/common.json
index fc3fab68..a80bdb13 100644
--- a/src/features/localization/renderer/locales/en/common.json
+++ b/src/features/localization/renderer/locales/en/common.json
@@ -62,21 +62,36 @@
"locales": {
"emptyMessage": "No language found.",
"names": {
- "en": "English",
- "ru": "Russian",
- "zh": "Chinese",
- "ja": "Japanese",
- "ko": "Korean",
- "es": "Spanish",
- "hi": "Hindi",
- "pt": "Portuguese",
- "fr": "French",
"ar": "Arabic",
"bn": "Bengali",
- "ur": "Urdu",
- "id": "Indonesian",
"de": "German",
- "system": "System"
+ "en": "English",
+ "es": "Spanish",
+ "fa": "Persian",
+ "fil": "Filipino",
+ "fr": "French",
+ "hi": "Hindi",
+ "id": "Indonesian",
+ "it": "Italian",
+ "ja": "Japanese",
+ "ko": "Korean",
+ "mr": "Marathi",
+ "ms": "Malay",
+ "nl": "Dutch",
+ "pl": "Polish",
+ "pt": "Portuguese",
+ "ro": "Romanian",
+ "ru": "Russian",
+ "sw": "Swahili",
+ "system": "System",
+ "ta": "Tamil",
+ "te": "Telugu",
+ "th": "Thai",
+ "tr": "Turkish",
+ "uk": "Ukrainian",
+ "ur": "Urdu",
+ "vi": "Vietnamese",
+ "zh": "Chinese"
},
"searchPlaceholder": "Search language...",
"selectPlaceholder": "Select app language...",
diff --git a/src/features/localization/renderer/locales/en/team.json b/src/features/localization/renderer/locales/en/team.json
index e0185740..d97ebcec 100644
--- a/src/features/localization/renderer/locales/en/team.json
+++ b/src/features/localization/renderer/locales/en/team.json
@@ -1496,7 +1496,7 @@
},
"status": {
"reusedCrossTeamRequest": "Reused recent cross-team request",
- "teamOffline": "Team offline"
+ "teamOffline": "offline"
},
"revision": {
"editing": "Editing previous message",
diff --git a/src/features/localization/renderer/locales/es/common.json b/src/features/localization/renderer/locales/es/common.json
index fa034384..0484f1ab 100644
--- a/src/features/localization/renderer/locales/es/common.json
+++ b/src/features/localization/renderer/locales/es/common.json
@@ -62,21 +62,36 @@
"locales": {
"emptyMessage": "No se encontró ningún idioma.",
"names": {
- "en": "Inglés",
- "ru": "Ruso",
- "zh": "Chino",
- "ja": "Japonés",
- "ko": "Coreano",
- "es": "Español",
- "hi": "Hindi",
- "pt": "Portugués",
- "fr": "Francés",
"ar": "Árabe",
"bn": "Bengalí",
- "ur": "Urdu",
- "id": "Indonesio",
"de": "Alemán",
- "system": "Sistema"
+ "en": "Inglés",
+ "es": "Español",
+ "fa": "Persa",
+ "fil": "Filipino",
+ "fr": "Francés",
+ "hi": "Hindi",
+ "id": "Indonesio",
+ "it": "Italiano",
+ "ja": "Japonés",
+ "ko": "Coreano",
+ "mr": "Maratí",
+ "ms": "Malayo",
+ "nl": "Neerlandés",
+ "pl": "Polaco",
+ "pt": "Portugués",
+ "ro": "Rumano",
+ "ru": "Ruso",
+ "sw": "Suajili",
+ "system": "Sistema",
+ "ta": "Tamil",
+ "te": "Telugu",
+ "th": "Tailandés",
+ "tr": "Turco",
+ "uk": "Ucraniano",
+ "ur": "Urdu",
+ "vi": "Vietnamita",
+ "zh": "Chino"
},
"searchPlaceholder": "Buscar idioma...",
"selectPlaceholder": "Seleccionar idioma de la app...",
diff --git a/src/features/localization/renderer/locales/es/settings.json b/src/features/localization/renderer/locales/es/settings.json
index ad63d677..564e26a1 100644
--- a/src/features/localization/renderer/locales/es/settings.json
+++ b/src/features/localization/renderer/locales/es/settings.json
@@ -68,12 +68,12 @@
"useInTeamPicker": "Uso en el equipo picker",
"testInProgress": "La prueba del modelo ya está en curso.",
"validationContextRequired": "Selecciona un contexto de validación arriba para habilitar Test y Set default. Guardar para team picker solo almacena la route para equipos nuevos.",
+ "actionsUnavailable": "Las acciones no están disponibles temporalmente.",
"defaultSaveInProgress": "Se está guardando el OpenCode default.",
"routeUnavailableAuth": "Este provider requiere autenticación antes de usar este modelo.",
"routeUnavailableFailed": "Esta model route falló su último execution test.",
- "routeUnavailableUnknown": "Este modelo es el OpenCode default actual, pero aún no está en el live catalog.",
- "actionsUnavailable": "Las acciones no están disponibles temporalmente.",
- "routeUnavailableGeneric": "Esta model route no se puede usar ahora."
+ "routeUnavailableGeneric": "Esta model route no se puede usar ahora.",
+ "routeUnavailableUnknown": "Este modelo es el OpenCode default actual, pero aún no está en el live catalog."
},
"providers": {
"catalog": "Catálogo de proveedores de OpenCode",
diff --git a/src/features/localization/renderer/locales/es/team.json b/src/features/localization/renderer/locales/es/team.json
index 50d3577b..b5317b30 100644
--- a/src/features/localization/renderer/locales/es/team.json
+++ b/src/features/localization/renderer/locales/es/team.json
@@ -1496,7 +1496,7 @@
},
"status": {
"reusedCrossTeamRequest": "Reutilización reciente de la solicitud de equipo cruzado",
- "teamOffline": "Team offline"
+ "teamOffline": "sin conexión"
},
"revision": {
"editing": "Editando mensaje anterior",
diff --git a/src/features/localization/renderer/locales/fa/common.json b/src/features/localization/renderer/locales/fa/common.json
new file mode 100644
index 00000000..f66e9c31
--- /dev/null
+++ b/src/features/localization/renderer/locales/fa/common.json
@@ -0,0 +1,927 @@
+{
+ "actions": {
+ "cancel": "لغو",
+ "close": "بستن",
+ "copied": "کپی شد",
+ "copyUrl": "کپی URL",
+ "open": "باز کردن",
+ "reveal": "نمایش",
+ "retry": "تلاش مجدد",
+ "save": "ذخیره",
+ "showLess": "نمایش کمتر",
+ "showMore": "نمایش بیشتر",
+ "refresh": "تازهسازی",
+ "reset": "بازنشانی",
+ "copyToClipboard": "کپی در کلیپبورد",
+ "moreActions": "اقدامات بیشتر",
+ "closeDialog": "بستن گفتوگو",
+ "goToDashboard": "رفتن به داشبورد",
+ "or": "یا",
+ "hide": "پنهان کردن",
+ "resetSelection": "بازنشانی انتخاب"
+ },
+ "code": {
+ "line": "خط {{line}}",
+ "lines": "خطوط {{from}}-{{to}}",
+ "moreLines": "({{count}} خط بیشتر...)",
+ "moreLines_few": "({{count}} خط بیشتر...)",
+ "moreLines_many": "({{count}} خط بیشتر...)",
+ "moreLines_one": "({{count}} خط بیشتر...)",
+ "moreLines_other": "({{count}} خط بیشتر...)",
+ "code": "کد",
+ "preview": "پیشنمایش",
+ "markdownPreview": "پیشنمایش Markdown",
+ "linesParenthesized": "(خطوط {{from}}-{{to}})",
+ "mermaidSyntaxError": "خطای نحوی Mermaid"
+ },
+ "contextBadge": {
+ "badge": "بافت",
+ "breakdown": {
+ "text": "متن",
+ "thinking": "تفکر"
+ },
+ "detailsAria": "جزئیات تزریق بافت",
+ "sectionSummary": "{{title}} ({{count}}) ~{{tokens}} توکن",
+ "sections": {
+ "claudeMdFiles": "فایلهای CLAUDE.md",
+ "mentionedFiles": "فایلهای ذکرشده",
+ "taskCoordination": "هماهنگی وظیفه",
+ "thinkingText": "تفکر + متن",
+ "toolOutputs": "خروجیهای ابزار",
+ "userMessages": "پیامهای کاربر"
+ },
+ "title": "بافت جدید تزریقشده در این نوبت",
+ "tokenCount": "~{{tokens}} توکن",
+ "totalNewTokens": "کل توکنهای جدید",
+ "turn": "نوبت {{turn}}",
+ "sectionSummary_few": "{{title}} ({{count}}) ~{{tokens}} توکن",
+ "sectionSummary_many": "{{title}} ({{count}}) ~{{tokens}} توکن",
+ "sectionSummary_one": "{{title}} ({{count}}) ~{{tokens}} توکن",
+ "sectionSummary_other": "{{title}} ({{count}}) ~{{tokens}} توکن"
+ },
+ "locales": {
+ "emptyMessage": "هیچ زبانی یافت نشد.",
+ "names": {
+ "ar": "عربی",
+ "bn": "بنگالی",
+ "de": "آلمانی",
+ "en": "انگلیسی",
+ "es": "اسپانیایی",
+ "fa": "فارسی",
+ "fil": "فیلیپینی",
+ "fr": "فرانسوی",
+ "hi": "هندی",
+ "id": "اندونزیایی",
+ "it": "ایتالیایی",
+ "ja": "ژاپنی",
+ "ko": "کرهای",
+ "mr": "مراتی",
+ "ms": "مالایی",
+ "nl": "هلندی",
+ "pl": "لهستانی",
+ "pt": "پرتغالی",
+ "ro": "رومانیایی",
+ "ru": "روسی",
+ "sw": "سواحیلی",
+ "system": "سیستم",
+ "ta": "تامیلی",
+ "te": "تلوگو",
+ "th": "تایلندی",
+ "tr": "ترکی",
+ "uk": "اوکراینی",
+ "ur": "اردو",
+ "vi": "ویتنامی",
+ "zh": "چینی"
+ },
+ "searchPlaceholder": "جستجوی زبان...",
+ "selectPlaceholder": "انتخاب زبان برنامه...",
+ "systemWithResolved": "سیستم - {{locale}}"
+ },
+ "members": {
+ "emptyMessage": "هیچ عضوی یافت نشد.",
+ "searchPlaceholder": "جستجوی اعضا...",
+ "unassigned": "بدون تخصیص",
+ "teammateFallback": "همتیمی"
+ },
+ "providerRuntime": {
+ "codex": {
+ "install": {
+ "checking": "در حال بررسی",
+ "downloading": "در حال دانلود",
+ "installCli": "نصب Codex CLI",
+ "installing": "در حال نصب",
+ "retryInstall": "تلاش مجدد برای نصب"
+ }
+ }
+ },
+ "search": {
+ "noMatchingSuggestions": "هیچ پیشنهاد منطبقی نیست",
+ "searching": "در حال جستجو...",
+ "searchingFiles": "در حال جستجوی فایلها...",
+ "findInConversation": "یافتن در گفتوگو...",
+ "resultCount": "{{current}} از {{total}}",
+ "resultCountCapped": "{{current}} از {{total}}+",
+ "noResults": "نتیجهای نیست",
+ "previousResultShortcut": "نتیجه قبلی (Shift+Enter)",
+ "nextResultShortcut": "نتیجه بعدی (Enter)",
+ "closeShortcut": "بستن (Esc)",
+ "nothingFound": "چیزی یافت نشد",
+ "placeholder": "جستجو..."
+ },
+ "schedules": {
+ "actions": {
+ "addSchedule": "افزودن زمانبندی",
+ "clearFilters": "پاک کردن فیلترها",
+ "createSchedule": "ایجاد زمانبندی",
+ "delete": "حذف",
+ "edit": "ویرایش",
+ "pause": "توقف موقت",
+ "resume": "ازسرگیری",
+ "runNow": "اجرای فوری"
+ },
+ "empty": {
+ "description": "روی هر تیمی یک زمانبندی ایجاد کنید تا اجرای وظایف Claude را با عبارات cron خودکار کنید. زمانبندیهای همه تیمها اینجا ظاهر میشوند.",
+ "noMatches": "هیچ زمانبندیای با فیلترهای فعلی منطبق نیست",
+ "title": "هیچ وظیفه زمانبندیشدهای نیست"
+ },
+ "filters": {
+ "allTeams": "همه تیمها"
+ },
+ "item": {
+ "loadingRunHistory": "در حال بارگذاری تاریخچه اجرا...",
+ "nextRun": "بعدی: {{value}}",
+ "noRunsYet": "هنوز اجرایی نیست"
+ },
+ "loading": "در حال بارگذاری زمانبندیها...",
+ "searchPlaceholder": "جستجوی زمانبندیها...",
+ "status": {
+ "active": "فعال",
+ "all": "همه",
+ "disabled": "غیرفعال",
+ "paused": "متوقفشده"
+ },
+ "title": "زمانبندیها"
+ },
+ "sessions": {
+ "actions": {
+ "hide": "پنهان کردن",
+ "pin": "سنجاق کردن",
+ "unhide": "نمایش دادن"
+ },
+ "empty": {
+ "noMatchingSessions": "هیچ نشست منطبقی نیست",
+ "noMatchingSessionsDescription": "این پروژه هنوز نشست منطبقی ندارد.",
+ "noMatchingSessionsFiltered": "پرسوجوی دیگری امتحان کنید یا فیلتر ارائهدهنده را بازنشانی کنید.",
+ "noSessions": "هیچ نشستی یافت نشد",
+ "noSessionsDescription": "این پروژه هنوز نشستی ندارد",
+ "selectProject": "برای مشاهده نشستها یک پروژه انتخاب کنید"
+ },
+ "errors": {
+ "loading": "خطا در بارگذاری نشستها"
+ },
+ "loadedMatchingMore": "تاکنون {{count}} نشست منطبق بارگذاری شده است - برای بارگذاری بیشتر به پایین اسکرول کنید.",
+ "loadingMore": "در حال بارگذاری نشستهای بیشتر...",
+ "pinned": "سنجاقشده",
+ "scrollToLoadMore": "برای بارگذاری بیشتر اسکرول کنید",
+ "search": {
+ "clear": "پاک کردن جستجوی نشست",
+ "placeholder": "جستجوی نشستها..."
+ },
+ "selection": {
+ "cancel": "لغو انتخاب",
+ "exitMode": "خروج از حالت انتخاب",
+ "hideSelected": "پنهان کردن نشستهای انتخابشده",
+ "pinSelected": "سنجاق کردن نشستهای انتخابشده",
+ "selectSessions": "انتخاب نشستها",
+ "selected": "{{count}} انتخابشده",
+ "unhideSelected": "نمایش نشستهای انتخابشده",
+ "selected_few": "{{count}} انتخابشده",
+ "selected_many": "{{count}} انتخابشده",
+ "selected_one": "{{count}} انتخابشده",
+ "selected_other": "{{count}} انتخابشده"
+ },
+ "sort": {
+ "byContext": "بر اساس بافت",
+ "byContextTooltip": "مرتبسازی بر اساس مصرف بافت",
+ "byRecentTooltip": "مرتبسازی بر اساس جدیدترین",
+ "contextLoadedOnly": "مرتبسازی بر اساس بافت فقط نشستهای بارگذاریشده را رتبهبندی میکند."
+ },
+ "title": "نشستها",
+ "visibility": {
+ "hideHidden": "پنهان کردن نشستهای پنهان",
+ "showHidden": "نمایش نشستهای پنهان"
+ },
+ "worktree": {
+ "switch": "تعویض Worktree"
+ },
+ "loadedMatchingMore_few": "تاکنون {{count}} نشست منطبق بارگذاری شده است - برای بارگذاری بیشتر به پایین اسکرول کنید.",
+ "loadedMatchingMore_many": "تاکنون {{count}} نشست منطبق بارگذاری شده است - برای بارگذاری بیشتر به پایین اسکرول کنید.",
+ "loadedMatchingMore_one": "تاکنون {{count}} نشست منطبق بارگذاری شده است - برای بارگذاری بیشتر به پایین اسکرول کنید.",
+ "loadedMatchingMore_other": "تاکنون {{count}} نشست منطبق بارگذاری شده است - برای بارگذاری بیشتر به پایین اسکرول کنید.",
+ "failedToLoad": "بارگذاری نشست ناموفق بود",
+ "loading": "در حال بارگذاری نشست...",
+ "filter": {
+ "title": "فیلتر نشستها"
+ },
+ "count": "{{count}} نشست",
+ "count_one": "{{count}} نشست",
+ "count_other": "{{count}} نشست",
+ "count_few": "{{count}} نشست",
+ "count_many": "{{count}} نشست",
+ "inProgress": "نشست در حال انجام است..."
+ },
+ "states": {
+ "loading": "در حال بارگذاری...",
+ "offline": "آفلاین",
+ "online": "آنلاین",
+ "unknown": "نامشخص",
+ "error": "خطا"
+ },
+ "markdown": {
+ "imageFallback": "[تصویر: {{label}}]",
+ "largeContentNotice": "محتوا بسیار بزرگ است ({{count}} نویسه). برای حفظ پاسخگویی رابط کاربری، پیشنمایش خام نمایش داده میشود.",
+ "largeContentTitle": "محتوای بزرگ بهصورت خام نمایش داده میشود تا از یخزدگی رابط کاربری جلوگیری شود",
+ "raw": "خام",
+ "rawPreview": "پیشنمایش خام",
+ "renderMarkdown": "رندر Markdown",
+ "showAll": "نمایش همه",
+ "showMore": "نمایش بیشتر",
+ "showRaw": "نمایش خام",
+ "showingChars": "نمایش {{shown}} / {{total}} نویسه",
+ "largeContentNotice_few": "محتوا بسیار بزرگ است ({{count}} نویسه). برای حفظ پاسخگویی رابط کاربری، پیشنمایش خام نمایش داده میشود.",
+ "largeContentNotice_many": "محتوا بسیار بزرگ است ({{count}} نویسه). برای حفظ پاسخگویی رابط کاربری، پیشنمایش خام نمایش داده میشود.",
+ "largeContentNotice_one": "محتوا بسیار بزرگ است ({{count}} نویسه). برای حفظ پاسخگویی رابط کاربری، پیشنمایش خام نمایش داده میشود.",
+ "largeContentNotice_other": "محتوا بسیار بزرگ است ({{count}} نویسه). برای حفظ پاسخگویی رابط کاربری، پیشنمایش خام نمایش داده میشود."
+ },
+ "terminal": {
+ "checkOutputForDetails": "برای جزئیات، خروجی ترمینال بالا را بررسی کنید",
+ "closingInSeconds": "بسته شدن تا {{count}} ثانیه دیگر...",
+ "closingInSeconds_few": "بسته شدن تا {{count}} ثانیه دیگر...",
+ "closingInSeconds_many": "بسته شدن تا {{count}} ثانیه دیگر...",
+ "closingInSeconds_one": "بسته شدن تا {{count}} ثانیه دیگر...",
+ "closingInSeconds_other": "بسته شدن تا {{count}} ثانیه دیگر...",
+ "completedSuccessfully": "با موفقیت تکمیل شد",
+ "exitCode": "(کد خروج {{code}})",
+ "processFailed": "فرایند ناموفق بود",
+ "title": "ترمینال"
+ },
+ "tokens": {
+ "accumulatedWithoutDuplication": "انباشتهشده در سراسر نشست بدون تکرار",
+ "cacheRead": "خواندن از حافظه پنهان",
+ "cacheWrite": "نوشتن در حافظه پنهان",
+ "costUsd": "هزینه (USD)",
+ "inputTokens": "توکنهای ورودی",
+ "model": "مدل",
+ "outputTokens": "توکنهای خروجی",
+ "phase": "مرحله {{phase}}/{{total}}",
+ "promptInputShare": "{{percent}}٪ از ورودی پرامپت",
+ "taskCoordination": "هماهنگی وظیفه",
+ "thinkingText": "تفکر + متن",
+ "toolOutputs": "خروجیهای ابزار",
+ "total": "کل",
+ "userMessages": "پیامهای کاربر",
+ "visibleContext": "بافت قابلمشاهده",
+ "includesClaudeMd": "شامل CLAUDE.md ×{{count}}",
+ "claudeMd": "CLAUDE.md",
+ "mentionedFiles": "@files",
+ "percentValue": "({{percent}}٪)",
+ "approxTokens": "~{{tokens}} توکن",
+ "approxTokensParenthesized": "(~{{tokens}})"
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "کپی تیم",
+ "createTeam": "ایجاد تیم",
+ "deleteForever": "حذف برای همیشه",
+ "deletePermanently": "حذف دائمی",
+ "deleteTeam": "حذف تیم",
+ "launching": "در حال راهاندازی...",
+ "launchTeam": "راهاندازی تیم",
+ "relaunchTeam": "راهاندازی مجدد تیم",
+ "restore": "بازیابی",
+ "restoreTeam": "بازیابی تیم",
+ "retry": "تلاش مجدد",
+ "stopTeam": "توقف تیم",
+ "stopping": "در حال توقف..."
+ },
+ "status": {
+ "active": "فعال",
+ "deleted": "حذفشده",
+ "launching": "در حال راهاندازی...",
+ "offline": "آفلاین",
+ "partialFailure": "راهاندازی در میانه راه ناموفق شد",
+ "partialPending": "راهاندازی اولیه در انتظار",
+ "partialSkipped": "راهاندازی عضو را رد کرد",
+ "running": "در حال اجرا"
+ },
+ "partial": {
+ "pending": "آخرین راهاندازی هنوز در حال هماهنگسازی است.",
+ "skipped": "آخرین راهاندازی همتیمیهایی را رد کرده است.",
+ "skippedWithCount": "آخرین راهاندازی {{count}}/{{expected}} همتیمی را رد کرد.",
+ "skippedWithCount_few": "آخرین راهاندازی {{count}}/{{expected}} همتیمی را رد کرد.",
+ "skippedWithCount_many": "آخرین راهاندازی {{count}}/{{expected}} همتیمی را رد کرد.",
+ "skippedWithCount_one": "آخرین راهاندازی {{count}}/{{expected}} همتیمی را رد کرد.",
+ "skippedWithCount_other": "آخرین راهاندازی {{count}}/{{expected}} همتیمی را رد کرد.",
+ "stopped": "آخرین راهاندازی پیش از پیوستن همه همتیمیها متوقف شد.",
+ "stoppedWithCount": "آخرین راهاندازی پیش از پیوستن {{count}}/{{expected}} همتیمی متوقف شد.",
+ "stoppedWithCount_few": "آخرین راهاندازی پیش از پیوستن {{count}}/{{expected}} همتیمی متوقف شد.",
+ "stoppedWithCount_many": "آخرین راهاندازی پیش از پیوستن {{count}}/{{expected}} همتیمی متوقف شد.",
+ "stoppedWithCount_one": "آخرین راهاندازی پیش از پیوستن {{count}}/{{expected}} همتیمی متوقف شد.",
+ "stoppedWithCount_other": "آخرین راهاندازی پیش از پیوستن {{count}}/{{expected}} همتیمی متوقف شد."
+ },
+ "noDescription": "بدون توضیح",
+ "solo": "تکنفره",
+ "membersCount": "اعضا: {{count}}",
+ "membersCount_few": "اعضا: {{count}}",
+ "membersCount_many": "اعضا: {{count}}",
+ "membersCount_one": "عضو: {{count}}",
+ "membersCount_other": "اعضا: {{count}}",
+ "all": "همه",
+ "moreCount": "+{{count}} بیشتر",
+ "moreCount_one": "+{{count}} بیشتر",
+ "moreCount_other": "+{{count}} بیشتر",
+ "moreCount_few": "+{{count}} بیشتر",
+ "moreCount_many": "+{{count}} بیشتر"
+ },
+ "runtimeProvider": {
+ "defaults": {
+ "scopeDescriptionAllProjects": "پیشفرض برای هر پروژهای که بازنویسی OpenCode مخصوص خود را ندارد.",
+ "scopeDescriptionProject": "فقط پروژه انتخابشده را بازنویسی میکند. تیمهای در حال اجرا تغییر نمیکنند.",
+ "setAllProjectsDefault": "تنظیم پیشفرض همه پروژهها",
+ "setProjectDefault": "تنظیم پیشفرض پروژه",
+ "validationContext": "بافت اعتبارسنجی",
+ "projectOverrideContext": "بافت بازنویسی پروژه",
+ "selectProjectHint": "پیش از تست مدلهای محلی یا ذخیره پیشفرضها، یک پروژه انتخاب کنید.",
+ "allProjectsHint": "تستها از {{project}} استفاده میکنند. پیشفرض اعمال میشود مگر آنکه پروژهای بازنویسی داشته باشد.",
+ "projectHint": "ذخیره فقط {{project}} را بازنویسی میکند."
+ }
+ },
+ "sessionContext": {
+ "header": {
+ "title": "بافت",
+ "closePanel": "بستن پنل",
+ "phase": "مرحله:",
+ "current": "فعلی",
+ "view": "نما:",
+ "category": "دسته",
+ "bySize": "بر اساس اندازه"
+ },
+ "metrics": {
+ "unavailable": "در دسترس نیست",
+ "contextUsed": "بافت مصرفشده",
+ "promptInput": "ورودی پرامپت",
+ "visibleContext": "بافت قابلمشاهده",
+ "ofContext": "از بافت",
+ "ofPrompt": "از پرامپت",
+ "codexTelemetryUnavailable": "مصرف سمت پرامپت Codex هنوز توسط تلهمتری زمان اجرای فعلی افشا نشده است، بنابراین ورودی پرامپت و بافت مصرفشده بهجای نمایش صفر جعلی، در دسترس نخواهند بود.",
+ "sessionCost": "هزینه نشست:",
+ "parentPlus": "والد +",
+ "subagents": "زیرعاملها",
+ "details": "جزئیات"
+ },
+ "help": {
+ "contextUsed": {
+ "title": "بافت مصرفشده",
+ "description": "ورودی پرامپت بهعلاوه توکنهای خروجی که اکنون پنجره بافت مدل را اشغال کردهاند."
+ },
+ "promptInput": {
+ "title": "ورودی پرامپت",
+ "description": "توکنهای ارسالشده به مدل پیش از تولید. برای Claude این شامل `input_tokens + cache_creation_input_tokens + cache_read_input_tokens` است."
+ },
+ "visibleContext": {
+ "title": "بافت قابلمشاهده",
+ "description": "زیرمجموعه قابلبازرسی ورودی پرامپت: فایلها، CLAUDE.md، خروجیهای ابزار، پیامهای کاربر و تزریقهای مشابهی که میتوانید مستقیماً بهینه کنید."
+ },
+ "availability": {
+ "title": "دسترسپذیری",
+ "description": "اگر زمان اجرای ارائهدهنده هنوز مصرف سمت پرامپت را افشا نکند، پنل معیارها را بهجای وانمود به صفر بودن، بهصورت در دسترس نبودن نمایش میدهد."
+ }
+ },
+ "items": {
+ "turn": "@نوبت {{turn}}",
+ "tokensApprox": "~{{tokens}} توکن",
+ "toolsCount": "{{count}} ابزار",
+ "toolsCount_one": "{{count}} ابزار",
+ "toolsCount_other": "{{count}} ابزار",
+ "toolsCount_few": "{{count}} ابزار",
+ "toolsCount_many": "{{count}} ابزار",
+ "itemsCount": "{{count}} مورد",
+ "itemsCount_one": "{{count}} مورد",
+ "itemsCount_other": "{{count}} مورد",
+ "itemsCount_few": "{{count}} مورد",
+ "itemsCount_many": "{{count}} مورد",
+ "missing": "مفقود",
+ "thinking": "تفکر",
+ "text": "متن"
+ },
+ "empty": "هیچ تزریق بافتی در این نشست شناسایی نشد",
+ "view": {
+ "grouped": "گروهبندیشده",
+ "flat": "تخت"
+ },
+ "claudeMdFiles": "فایلهای CLAUDE.md",
+ "mentionedFiles": "فایلهای ذکرشده"
+ },
+ "chat": {
+ "subagent": {
+ "fallbackName": "زیرعامل",
+ "shutdownConfirmed": "خاموشسازی تأیید شد",
+ "summary": {
+ "tools": "{{count}} ابزار",
+ "tools_one": "{{count}} ابزار",
+ "tools_other": "{{count}} ابزار",
+ "tools_few": "{{count}} ابزار",
+ "tools_many": "{{count}} ابزار"
+ },
+ "meta": {
+ "type": "نوع",
+ "duration": "مدت",
+ "model": "مدل",
+ "id": "شناسه"
+ },
+ "metrics": {
+ "contextWindow": "پنجره بافت",
+ "contextUsage": "مصرف بافت",
+ "mainContext": "بافت اصلی",
+ "totalOutput": "کل خروجی",
+ "turns": "({{count}} نوبت)",
+ "turns_one": "({{count}} نوبت)",
+ "turns_other": "({{count}} نوبت)",
+ "subagentContext": "بافت زیرعامل",
+ "phase": "مرحله {{phase}}",
+ "turns_few": "({{count}} نوبت)",
+ "turns_many": "({{count}} نوبت)"
+ },
+ "trace": {
+ "title": "ردیابی اجرا"
+ }
+ },
+ "user": {
+ "you": "شما",
+ "showMore": "نمایش بیشتر",
+ "showLess": "نمایش کمتر",
+ "backgroundTask": "وظیفه پسزمینه",
+ "exitCode": "خروج {{code}}",
+ "imagesAttached": "{{count}} تصویر پیوست شد",
+ "imagesAttached_one": "{{count}} تصویر پیوست شد",
+ "imagesAttached_few": "{{count}} تصویر پیوست شد",
+ "imagesAttached_many": "{{count}} تصویر پیوست شد",
+ "imagesAttached_other": "{{count}} تصویر پیوست شد"
+ },
+ "compact": {
+ "toggle": "تغییر وضعیت محتوای فشردهشده",
+ "contextCompacted": "بافت فشرده شد",
+ "freedTokens": "({{tokens}} آزاد شد)",
+ "phase": "مرحله {{phase}}",
+ "conversationCompacted": "گفتوگو فشرده شد",
+ "summary": "پیامهای قبلی برای صرفهجویی در بافت خلاصه شدند. تاریخچه کامل گفتوگو در فایل نشست حفظ شده است.",
+ "compacted": "فشردهشده"
+ },
+ "executionTrace": {
+ "empty": "هیچ مورد اجرایی نیست",
+ "nested": "تودرتو: {{name}}",
+ "input": "ورودی"
+ },
+ "items": {
+ "empty": "موردی برای نمایش نیست"
+ },
+ "tools": {
+ "teammateSpawned": "همتیمی ایجاد شد",
+ "shutdownRequested": "خاموشسازی درخواست شد ->",
+ "noResultReceived": "هیچ نتیجهای دریافت نشد",
+ "duration": "مدت: {{duration}}",
+ "result": "نتیجه",
+ "write": {
+ "createdFile": "فایل ایجاد شد",
+ "wroteToFile": "در فایل نوشته شد"
+ },
+ "skill": {
+ "instructions": "دستورالعملهای مهارت",
+ "unknown": "مهارت ناشناخته"
+ }
+ },
+ "lastOutput": {
+ "requestInterrupted": "درخواست توسط کاربر قطع شد",
+ "planReadyForApproval": "طرح آماده تأیید است"
+ },
+ "empty": {
+ "icon": "💬",
+ "title": "هیچ تاریخچه گفتوگویی نیست",
+ "description": "این نشست هنوز هیچ پیامی ندارد."
+ },
+ "context": {
+ "remainingPercent": "({{percent}}٪ باقیمانده)",
+ "count": "بافت ({{count}})",
+ "count_one": "بافت ({{count}})",
+ "count_other": "بافت ({{count}})",
+ "count_few": "بافت ({{count}})",
+ "count_many": "بافت ({{count}})"
+ },
+ "scrollToBottom": "اسکرول به پایین",
+ "bottom": "پایین",
+ "teammateMessage": {
+ "message": "پیام",
+ "resent": "ارسال مجدد شد",
+ "fallback": "پیام همتیمی"
+ },
+ "system": {
+ "label": "سیستم"
+ }
+ },
+ "tmuxInstaller": {
+ "summaryTitle": "tmux نصب نشده است",
+ "detectedOs": "سیستمعامل شناساییشده: {{os}}",
+ "runtimePath": "مسیر زمان اجرا: {{path}}",
+ "phase": "مرحله: {{phase}}",
+ "actions": {
+ "cancel": "لغو",
+ "manualGuide": "راهنمای دستی",
+ "hideSetupSteps": "پنهان کردن مراحل راهاندازی",
+ "showSetupSteps": "نمایش مراحل راهاندازی ({{count}})",
+ "showSetupSteps_one": "نمایش مرحله راهاندازی ({{count}})",
+ "showSetupSteps_other": "نمایش مراحل راهاندازی ({{count}})",
+ "recheck": "بررسی مجدد",
+ "showSetupSteps_few": "نمایش مراحل راهاندازی ({{count}})",
+ "showSetupSteps_many": "نمایش مراحل راهاندازی ({{count}})"
+ },
+ "installerProgress": "پیشرفت نصبکننده",
+ "input": {
+ "placeholder": "ارسال ورودی به نصبکننده",
+ "send": "ارسال ورودی",
+ "passwordNotice": "ورودی رمز عبور مستقیماً به ترمینال نصبکننده ارسال میشود و به خروجی گزارش افزوده نمیشود."
+ },
+ "details": {
+ "show": "نمایش جزئیات",
+ "hide": "پنهان کردن جزئیات"
+ }
+ },
+ "commandPalette": {
+ "noRecentActivity": "هیچ فعالیت اخیری نیست",
+ "sessionsCount": "{{count}} نشست",
+ "sessionsCount_one": "{{count}} نشست",
+ "sessionsCount_other": "{{count}} نشست",
+ "mode": {
+ "searchProjects": "جستجوی پروژهها",
+ "searchAcrossProjects": "جستجو در همه پروژهها",
+ "searchInProject": "جستجو در پروژه"
+ },
+ "currentProject": "پروژه فعلی",
+ "global": "سراسری",
+ "placeholders": {
+ "projects": "جستجوی پروژهها...",
+ "conversations": "جستجوی گفتوگوها..."
+ },
+ "empty": {
+ "noProjectsForQuery": "هیچ پروژهای برای «{{query}}» یافت نشد",
+ "noProjects": "هیچ پروژهای یافت نشد",
+ "minChars": "برای جستجو حداقل ۲ نویسه تایپ کنید",
+ "noFastResults": "هیچ نتیجه سریعی در نشستهای اخیر برای «{{query}}» نیست",
+ "noResults": "هیچ نتیجهای برای «{{query}}» یافت نشد"
+ },
+ "footer": {
+ "projectsCount": "{{count}} پروژه",
+ "projectsCount_one": "{{count}} پروژه",
+ "projectsCount_other": "{{count}} پروژه",
+ "results": "{{count}} {{speed}}نتیجه",
+ "results_one": "{{count}} {{speed}}نتیجه",
+ "results_other": "{{count}} {{speed}}نتیجه",
+ "resultsAcrossProjects": "{{count}} {{speed}}نتیجه در همه پروژهها",
+ "resultsAcrossProjects_one": "{{count}} {{speed}}نتیجه در همه پروژهها",
+ "resultsAcrossProjects_other": "{{count}} {{speed}}نتیجه در همه پروژهها",
+ "fastPrefix": "سریع ",
+ "typeToSearch": "برای جستجو تایپ کنید",
+ "navigate": "پیمایش",
+ "select": "انتخاب",
+ "open": "باز کردن",
+ "global": "سراسری",
+ "close": "بستن",
+ "results_few": "{{count}} {{speed}}نتیجه",
+ "results_many": "{{count}} {{speed}}نتیجه",
+ "resultsAcrossProjects_few": "{{count}} {{speed}}نتیجه در همه پروژهها",
+ "resultsAcrossProjects_many": "{{count}} {{speed}}نتیجه در همه پروژهها",
+ "projectsCount_few": "{{count}} پروژه",
+ "projectsCount_many": "{{count}} پروژه",
+ "upDownKey": "↑↓",
+ "escapeKey": "esc"
+ },
+ "sessionsCount_few": "{{count}} نشست",
+ "sessionsCount_many": "{{count}} نشست"
+ },
+ "tasksPanel": {
+ "title": "وظایف",
+ "searchPlaceholder": "جستجوی وظایف...",
+ "pinned": "سنجاقشده",
+ "groupByLabel": "گروهبندی بر اساس:",
+ "groupByAria": "گروهبندی بر اساس",
+ "groupModes": {
+ "none": "هیچکدام",
+ "project": "پروژه",
+ "time": "زمان"
+ },
+ "showArchived": "نمایش بایگانیشدهها",
+ "hideArchived": "پنهان کردن بایگانیشدهها",
+ "empty": {
+ "noMatchingTasks": "هیچ وظیفه منطبقی نیست",
+ "noTasks": "هیچ وظیفهای یافت نشد"
+ },
+ "teamLabel": "تیم: {{team}}",
+ "showMore": "نمایش بیشتر",
+ "showLess": "نمایش کمتر",
+ "deleteConfirm": {
+ "title": "حذف وظیفه",
+ "message": "وظیفه #{{taskId}} به سطل زباله منتقل شود؟",
+ "confirmLabel": "حذف",
+ "cancelLabel": "لغو"
+ },
+ "deleteFailed": {
+ "title": "حذف وظیفه ناموفق بود",
+ "fallbackMessage": "خطای غیرمنتظرهای رخ داد",
+ "confirmLabel": "تأیید"
+ },
+ "sort": {
+ "byTime": "بر اساس زمان",
+ "byUnread": "بر اساس خواندهنشده",
+ "byProject": "بر اساس پروژه",
+ "byTeam": "بر اساس تیم"
+ }
+ },
+ "toolViewer": {
+ "input": "ورودی",
+ "replaceAll": "(جایگزینی همه)",
+ "noInputRecorded": "هیچ ورودیای برای این فراخوانی ابزار ثبت نشده است.",
+ "agent": {
+ "action": "اقدام",
+ "teammate": "همتیمی",
+ "team": "تیم",
+ "runtime": "زمان اجرا",
+ "type": "نوع",
+ "startupInstructionsHidden": "دستورالعملهای راهاندازی در رابط کاربری پنهان هستند."
+ }
+ },
+ "taskContextMenu": {
+ "unpin": "برداشتن سنجاق",
+ "pin": "سنجاق کردن",
+ "rename": "تغییر نام",
+ "markUnread": "علامتگذاری بهعنوان خواندهنشده",
+ "unarchive": "خروج از بایگانی",
+ "archive": "بایگانی",
+ "deleteTask": "حذف وظیفه"
+ },
+ "updateDialog": {
+ "closeDialog": "بستن گفتوگو",
+ "updateAvailable": "بهروزرسانی در دسترس است",
+ "updateReady": "بهروزرسانی آماده است",
+ "noReleaseNotes": "هیچ یادداشت انتشاری در دسترس نیست.",
+ "viewOnGitHub": "مشاهده در GitHub",
+ "later": "بعداً",
+ "restartNow": "راهاندازی مجدد",
+ "download": "دانلود"
+ },
+ "errorBoundary": {
+ "title": "مشکلی پیش آمد",
+ "description": "خطای غیرمنتظرهای در برنامه رخ داد. میتوانید بارگذاری مجدد صفحه یا بازنشانی وضعیت خطا را امتحان کنید.",
+ "componentStack": "پشته مؤلفه",
+ "tryAgain": "تلاش مجدد",
+ "copied": "کپی شد",
+ "copyErrorDetails": "کپی جزئیات خطا",
+ "reportBugOnGitHub": "گزارش باگ در GitHub",
+ "reloadApp": "بارگذاری مجدد برنامه",
+ "diagnosticsNotice": "گزارشهای باگ GitHub و تشخیصهای کپیشده شامل پیام خطا، ردیابی پشته، نسخه برنامه، زبانه فعال، تیم انتخابشده، بافت وظیفه و جزئیات محیط هستند."
+ },
+ "runtimeBackendSelector": {
+ "label": "بکاند زمان اجرا",
+ "resolved": "تعیینشده: {{backend}}",
+ "current": "فعلی",
+ "recommended": "توصیهشده",
+ "unavailable": "در دسترس نیست",
+ "cannotSelectYet": "این بکاند هنوز قابل انتخاب نیست.",
+ "auto": "خودکار",
+ "autoCurrently": "خودکار (فعلاً: {{backend}})",
+ "audience": {
+ "internal": "داخلی"
+ },
+ "states": {
+ "locked": "قفلشده",
+ "disabled": "غیرفعال",
+ "authRequired": "احراز هویت لازم است",
+ "runtimeMissing": "زمان اجرا مفقود است",
+ "degraded": "کاهشیافته",
+ "unavailable": "در دسترس نیست"
+ }
+ },
+ "providerModelBadges": {
+ "checking": "در حال بررسی",
+ "unavailable": "در دسترس نیست",
+ "checkFailed": "بررسی ناموفق بود",
+ "free": "رایگان",
+ "freeTooltip": "گزارششده توسط فراداده OpenCode. دسترسپذیری و محدودیتها ممکن است تغییر کنند."
+ },
+ "taskFilters": {
+ "status": "وضعیت",
+ "clearAll": "پاک کردن همه",
+ "selectAll": "انتخاب همه",
+ "team": "تیم",
+ "allTeams": "همه تیمها",
+ "searchTeams": "جستجوی تیمها...",
+ "noTeamsFound": "هیچ تیمی یافت نشد",
+ "project": "پروژه",
+ "allProjects": "همه پروژهها",
+ "searchProjects": "جستجوی پروژهها...",
+ "noProjects": "هیچ پروژهای نیست",
+ "comments": "نظرات",
+ "apply": "اعمال",
+ "read": {
+ "all": "همه",
+ "unread": "خواندهنشده",
+ "read": "خواندهشده"
+ },
+ "statusOptions": {
+ "todo": "انجامدادنی",
+ "inProgress": "در حال انجام",
+ "needsFix": "نیازمند رفع",
+ "done": "انجامشده",
+ "review": "بازبینی",
+ "approved": "تأییدشده"
+ }
+ },
+ "sessionItem": {
+ "totalContext": "کل بافت: {{tokens}} توکن",
+ "context": "بافت: {{tokens}}",
+ "phase": "مرحله {{phase}}:",
+ "compactedTo": "(فشردهشده به {{tokens}})"
+ },
+ "notifications": {
+ "row": {
+ "team": "تیم",
+ "subagent": "زیرعامل",
+ "markAsRead": "علامتگذاری بهعنوان خواندهشده",
+ "delete": "حذف",
+ "viewInSession": "مشاهده در نشست"
+ },
+ "title": "اعلانها",
+ "loading": "در حال بارگذاری اعلانها...",
+ "actions": {
+ "markFilteredAsRead": "علامتگذاری فیلترشدهها بهعنوان خواندهشده",
+ "markAllAsRead": "علامتگذاری همه بهعنوان خواندهشده",
+ "markFilteredRead": "علامتگذاری فیلترشدهها خواندهشده",
+ "markAllRead": "علامتگذاری همه خواندهشده",
+ "clearFilteredNotifications": "پاک کردن اعلانهای فیلترشده",
+ "clearAllNotifications": "پاک کردن همه اعلانها",
+ "clickToConfirm": "برای تأیید کلیک کنید",
+ "clearFiltered": "پاک کردن فیلترشدهها",
+ "clearAll": "پاک کردن همه"
+ },
+ "counts": {
+ "unreadInFilter": "{{count}} خواندهنشده در فیلتر",
+ "unreadInFilter_one": "{{count}} خواندهنشده در فیلتر",
+ "unreadInFilter_few": "{{count}} خواندهنشده در فیلتر",
+ "unreadInFilter_many": "{{count}} خواندهنشده در فیلتر",
+ "unreadInFilter_other": "{{count}} خواندهنشده در فیلتر",
+ "inFilter": "{{count}} در فیلتر",
+ "inFilter_one": "{{count}} در فیلتر",
+ "inFilter_few": "{{count}} در فیلتر",
+ "inFilter_many": "{{count}} در فیلتر",
+ "inFilter_other": "{{count}} در فیلتر",
+ "unread": "{{count}} خواندهنشده",
+ "unread_one": "{{count}} خواندهنشده",
+ "unread_few": "{{count}} خواندهنشده",
+ "unread_many": "{{count}} خواندهنشده",
+ "unread_other": "{{count}} خواندهنشده",
+ "total": "{{count}} در کل",
+ "total_one": "{{count}} در کل",
+ "total_few": "{{count}} در کل",
+ "total_many": "{{count}} در کل",
+ "total_other": "{{count}} در کل"
+ },
+ "filters": {
+ "other": "سایر"
+ },
+ "empty": {
+ "noMatching": "هیچ اعلان منطبقی نیست",
+ "noNotifications": "هیچ اعلانی نیست",
+ "tryDifferentFilter": "فیلتر دیگری امتحان کنید",
+ "allCaughtUp": "همه چیز بهروز است!"
+ }
+ },
+ "updates": {
+ "restartToUpdate": "برای بهروزرسانی راهاندازی مجدد کنید",
+ "updateApp": "بهروزرسانی برنامه",
+ "downloadedRestartTooltip": "بهروزرسانی دانلود شد، برای اعمال راهاندازی مجدد کنید",
+ "newVersionAvailable": "نسخه جدید در دسترس است",
+ "updatingApp": "در حال بهروزرسانی برنامه",
+ "updateReady": "بهروزرسانی آماده است",
+ "restartNow": "راهاندازی مجدد"
+ },
+ "layout": {
+ "github": "GitHub",
+ "discord": "Discord",
+ "expandSidebar": "گسترش نوار کناری",
+ "collapseSidebarShortcut": "جمع کردن نوار کناری ({{shortcut}})",
+ "sidebarView": "نمای نوار کناری",
+ "resizeSidebar": "تغییر اندازه نوار کناری",
+ "closeTab": "بستن زبانه",
+ "openedFromSearch": "باز شده از جستجو",
+ "pinnedSession": "نشست سنجاقشده",
+ "jumpToSection": "پرش به بخش",
+ "newTab": "زبانه جدید",
+ "newTabDashboard": "زبانه جدید (داشبورد)",
+ "refreshSession": "تازهسازی نشست",
+ "refreshSessionWithShortcut": "تازهسازی نشست ({{shortcut}})",
+ "loadingTab": "در حال بارگذاری زبانه",
+ "menu": {
+ "teams": "تیمها",
+ "settings": "تنظیمات",
+ "extensions": "افزونهها",
+ "search": "جستجو",
+ "schedules": "زمانبندیها",
+ "docs": "مستندات",
+ "exportMarkdown": "خروجی بهصورت Markdown",
+ "exportJson": "خروجی بهصورت JSON",
+ "exportPlainText": "خروجی بهصورت متن ساده",
+ "analyzeSession": "تحلیل نشست"
+ },
+ "tabMenu": {
+ "closeTabs": "بستن {{count}} زبانه",
+ "closeTabs_one": "بستن {{count}} زبانه",
+ "closeTabs_few": "بستن {{count}} زبانه",
+ "closeTabs_many": "بستن {{count}} زبانه",
+ "closeTabs_other": "بستن {{count}} زبانه",
+ "closeTab": "بستن زبانه",
+ "closeOtherTabs": "بستن زبانههای دیگر",
+ "splitRight": "تقسیم به راست",
+ "splitLeft": "تقسیم به چپ",
+ "pinToSidebar": "سنجاق به نوار کناری",
+ "unpinFromSidebar": "برداشتن سنجاق از نوار کناری",
+ "hideFromSidebar": "پنهان کردن از نوار کناری",
+ "unhideFromSidebar": "نمایش در نوار کناری",
+ "closeAllTabs": "بستن همه زبانهها"
+ },
+ "sections": {
+ "team": "تیم",
+ "sessions": "نشستها",
+ "kanban": "Kanban",
+ "claudeLogs": "گزارشها",
+ "messages": "پیامها"
+ }
+ },
+ "editorFormatting": {
+ "bold": "ضخیم",
+ "italic": "مورب",
+ "strike": "خطخورده",
+ "code": "کد"
+ },
+ "diff": {
+ "changed": "تغییریافته",
+ "noChangesDetected": "هیچ تغییری شناسایی نشد"
+ },
+ "codexLogin": {
+ "copyLoginLinkAndCode": "کپی پیوند ورود ChatGPT و کد",
+ "copyLoginLink": "کپی پیوند ورود ChatGPT",
+ "copyFailed": "کپی ناموفق بود",
+ "copyLinkAndCode": "کپی پیوند + کد",
+ "copyLink": "کپی پیوند",
+ "enterCodeOnLoginPage": "این کد را در صفحه ورود ChatGPT وارد کنید"
+ },
+ "window": {
+ "minimize": "کوچک کردن",
+ "maximize": "بزرگ کردن",
+ "restore": "بازیابی"
+ },
+ "context": {
+ "local": "محلی",
+ "switchingTo": "در حال تعویض به {{workspace}}",
+ "loadingWorkspace": "در حال بارگذاری فضای کاری",
+ "switchWorkspace": "تعویض فضای کاری"
+ },
+ "repositories": {
+ "noneAvailable": "هیچ مخزنی در دسترس نیست",
+ "remove": "حذف مخزن"
+ },
+ "export": {
+ "session": "خروجی نشست",
+ "sessionTitle": "خروجی نشست"
+ },
+ "brand": {
+ "claude": "Claude"
+ },
+ "sessionReport": {
+ "noSessionData": "هیچ داده نشستی در دسترس نیست",
+ "title": "گزارش نشست"
+ },
+ "sessionFilters": {
+ "project": {
+ "selectProject": "انتخاب پروژه"
+ }
+ },
+ "tasks": {
+ "date": {
+ "updatedPrefix": "ویرایش",
+ "updatedYesterday": "ویرایش دیروز",
+ "yesterday": "دیروز"
+ },
+ "reviewState": {
+ "needsFix": "نیازمند رفع"
+ },
+ "unassigned": "بدون تخصیص"
+ }
+}
diff --git a/src/features/localization/renderer/locales/fa/dashboard.json b/src/features/localization/renderer/locales/fa/dashboard.json
new file mode 100644
index 00000000..1d2d22b6
--- /dev/null
+++ b/src/features/localization/renderer/locales/fa/dashboard.json
@@ -0,0 +1,197 @@
+{
+ "cliStatus": {
+ "actions": {
+ "alreadyLoggedIn": "قبلاً وارد شدهاید؟",
+ "becomeSponsor": "حامی شوید",
+ "cancel": "لغو",
+ "checkNow": "بررسی فوری",
+ "checkUpdates": "بررسی بهروزرسانیها",
+ "checking": "در حال بررسی...",
+ "connect": "اتصال",
+ "extensions": "افزونهها",
+ "login": "ورود",
+ "manage": "مدیریت",
+ "manageProviders": "مدیریت ارائهدهندگان",
+ "plan": "پلن",
+ "recheck": "بررسی مجدد",
+ "recheckProvider": "بررسی مجدد {{provider}}",
+ "retry": "تلاش مجدد",
+ "updateTo": "بهروزرسانی به نسخه {{version}}",
+ "useCode": "استفاده از کد"
+ },
+ "atlas": {
+ "alt": "Atlas Cloud",
+ "description": "Atlas Cloud یک پلتفرم استنتاج هوش مصنوعی چندوجهی است که به توسعهدهندگان یک API هوش مصنوعی واحد برای دسترسی به تولید ویدیو، تولید تصویر و APIهای LLM میدهد. بهجای مدیریت یکپارچهسازیهای چندگانه با فروشندگان، یکبار متصل میشوید و دسترسی یکپارچه به بیش از ۳۰۰ مدل گزینششده در تمام وجهها به دست میآورید. برای دسترسی مقرونبهصرفهتر به API، پروموشن جدید پلن کدنویسی Atlas Cloud را بررسی کنید.",
+ "openCodeProvider": "ارائهدهنده OpenCode",
+ "plan": "پلن کدنویسی Atlas Cloud",
+ "sponsor": "حامی"
+ },
+ "errors": {
+ "checkStatusFailed": "بررسی وضعیت CLI ناموفق بود",
+ "installationFailed": "نصب ناموفق بود",
+ "refreshFailed": "بررسی بهروزرسانیها ناموفق بود. اتصال شبکه خود را بررسی کنید و دوباره تلاش کنید.",
+ "runtimeUpdatedRefreshFailed": "زمان اجرا بهروزرسانی شد، اما تازهسازی وضعیت ارائهدهنده ناموفق بود."
+ },
+ "hints": {
+ "backgroundStatus": "وضعیت {{runtime}} در پسزمینه بررسی خواهد شد.",
+ "codexApiKeyFallback": "{{hint}} در صورت تغییر حالت احراز هویت، جایگزینی کلید API در دسترس است.",
+ "codexAutoApiKey": "{{hint}} حالت خودکار تا زمان اتصال ChatGPT از کلید API استفاده خواهد کرد.",
+ "codexFinishLogin": "ورود به ChatGPT را در مرورگر تکمیل کنید. در صورت درخواست، کد نمایشدادهشده را وارد کنید.",
+ "codexNoActiveLogin": "محدودیتهای استفاده تنها پس از آنکه Codex CLI یک حساب فعال ChatGPT را ببیند ظاهر میشوند. در حال حاضر هیچ ورود فعال ChatGPT گزارش نشده است.",
+ "codexNoActiveManagedSession": "محدودیتهای استفاده تنها پس از آنکه Codex CLI یک حساب فعال ChatGPT را ببیند ظاهر میشوند. دادههای محلی حساب Codex وجود دارد، اما در حال حاضر هیچ نشست مدیریتشده فعالی انتخاب نشده است.",
+ "codexReconnectNeeded": "محدودیتهای استفاده تنها پس از آنکه Codex نشست ChatGPT انتخابشده فعلی را تازهسازی کند ظاهر میشوند. در حال حاضر نشست محلی نیازمند اتصال مجدد است.",
+ "firstCheckSlow": "اولین بررسی ممکن است تا ۳۰ ثانیه طول بکشد",
+ "loginRequiredForTeams": "مرور نشستها و پروژهها بدون ورود کار میکند. ورود تنها برای اجرای تیمهای عامل لازم است.",
+ "troubleshootTitle": "اگر مطمئنید که وارد شدهاید، این مراحل را امتحان کنید:"
+ },
+ "installer": {
+ "checkingLatest": "در حال بررسی آخرین نسخه...",
+ "downloading": "در حال دانلود {{runtime}}...",
+ "installing": "در حال نصب {{runtime}}...",
+ "success": "{{runtime}} نسخه {{version}} با موفقیت نصب شد",
+ "verifying": "در حال تأیید checksum..."
+ },
+ "labels": {
+ "apiKeyRequired": "کلید API لازم است",
+ "comingSoon": "بهزودی",
+ "collapseProviderDetails": "جمع کردن جزئیات ارائهدهنده",
+ "expandProviderDetails": "گسترش جزئیات ارائهدهنده",
+ "generateLink": "تولید پیوند",
+ "loadingRateLimits": "در حال بارگذاری محدودیتهای نرخ",
+ "loggedOut": "ارائهدهنده خارج شده است",
+ "loginAuthFailed": "احراز هویت ناموفق بود",
+ "loginAuthUpdated": "احراز هویت بهروزرسانی شد",
+ "loginComplete": "ورود تکمیل شد",
+ "loginFailed": "ورود ناموفق بود",
+ "loginTitle": "ورود",
+ "logoutFailed": "خروج ناموفق بود",
+ "logoutTitle": "خروج",
+ "notLoggedIn": "وارد نشدهاید",
+ "openLogin": "باز کردن ورود",
+ "providerActionRequired": "اقدام ارائهدهنده لازم است",
+ "resets": "بازنشانی {{time}}",
+ "runtimeLoginTitle": "ورود {{runtime}}"
+ },
+ "loading": {
+ "aiProviders": "در حال بررسی ارائهدهندگان هوش مصنوعی...",
+ "claudeCli": "در حال بررسی Claude CLI..."
+ },
+ "provider": {
+ "authenticated": "احراز هویتشده",
+ "backend": "بکاند: {{backend}}",
+ "checkingAuthentication": "در حال بررسی احراز هویت...",
+ "checkingProviders": "در حال بررسی ارائهدهندگان...",
+ "configuredLocalCount": "{{count}} پیکربندیشده محلی",
+ "configuredLocalCount_few": "{{count}} پیکربندیشده محلی",
+ "configuredLocalCount_many": "{{count}} پیکربندیشده محلی",
+ "configuredLocalCount_one": "{{count}} پیکربندیشده محلی",
+ "configuredLocalCount_other": "{{count}} پیکربندیشده محلی",
+ "configuredLocalTitle": "مسیرهای محلی OpenCode واردشده از پیکربندی OpenCode شما.",
+ "connectedCount": "ارائهدهندگان: {{connected}}/{{denominator}} متصل",
+ "freeModels": "مدلهای رایگان",
+ "freeModelsTitle": "OpenCode گزینههای مدل رایگان مانند Big Pickle را در صورت موجود بودن در راهاندازی شما شامل میشود. OpenRouter از طریق OpenCode نیز میتواند مدلهای رایگان ارائه دهد، اما هر مدل OpenCode/OpenRouter رایگان نیست. دسترسپذیری و محدودیتها ممکن است تغییر کنند.",
+ "loadingModels": "در حال بارگذاری مدلها...",
+ "modelsUnavailable": "مدلها برای این نسخه زمان اجرا در دسترس نیستند",
+ "runtime": "زمان اجرا: {{runtime}}",
+ "verifiedCount": "{{count}} تأییدشده",
+ "verifiedCount_few": "{{count}} تأییدشده",
+ "verifiedCount_many": "{{count}} تأییدشده",
+ "verifiedCount_one": "{{count}} تأییدشده",
+ "verifiedCount_other": "{{count}} تأییدشده",
+ "verifiedTitle": "مسیرهای OpenCode با اثبات اجرای موفق."
+ },
+ "runtime": {
+ "configuredHealthCheckFailed": "{{runtime}} پیکربندیشده در بررسی سلامت راهاندازی خود ناموفق بود.",
+ "configuredNotFound": "{{runtime}} پیکربندیشده یافت نشد.",
+ "foundButFailed": "{{runtime}} یافت شد اما در راهاندازی ناموفق بود",
+ "healthCheckFailedDescription": "برنامه {{runtime}} پیکربندیشده را یافت، اما بررسی سلامت راهاندازی آن ناموفق بود. آن را تعمیر یا دوباره نصب کنید، سپس دوباره تلاش کنید.",
+ "install": "نصب {{runtime}}",
+ "installRequiredDescription": "{{runtime}} برای راهاندازی تیم و مدیریت نشست لازم است. برای شروع آن را نصب کنید.",
+ "isRequired": "{{runtime}} لازم است",
+ "reinstall": "نصب مجدد {{runtime}}"
+ },
+ "runtimeInstall": {
+ "checking": "در حال بررسی",
+ "codexTitle": "نصب Codex CLI در دادههای برنامه",
+ "downloading": "در حال دانلود",
+ "downloadingPercent": "در حال دانلود {{percent}}%",
+ "install": "نصب",
+ "installing": "در حال نصب",
+ "openCodeTitle": "نصب زمان اجرای OpenCode در دادههای برنامه",
+ "retryInstall": "تلاش مجدد برای نصب"
+ },
+ "troubleshoot": {
+ "again": "دوباره",
+ "authStatusCommand": "فرمان وضعیت احراز هویت CLI پیکربندیشده شما",
+ "checkLoggedIn": "- بررسی کنید که آیا «Logged in» نشان میدهد",
+ "click": "کلیک کنید",
+ "loginCommand": "فرمان ورود زمان اجرا",
+ "logoutCommand": "فرمان خروج زمان اجرا",
+ "openTerminal": "ترمینال خود را باز کنید و اجرا کنید:",
+ "reloginPrefix": "اگر میگوید وارد شدهاید اما برنامه آن را نمیبیند، این را امتحان کنید:",
+ "sameRuntime": "مطمئن شوید CLI در ترمینال شما همان زمان اجرایی است که برنامه استفاده میکند",
+ "statusCacheHint": "- گاهی وضعیت برای چند ثانیه در حافظه پنهان نگه داشته میشود",
+ "then": "سپس"
+ },
+ "warnings": {
+ "multipleApiKeysMissing": "یک یا چند ارائهدهنده روی حالت کلید API تنظیم شدهاند، اما هیچ کلید API پیکربندی نشده است. برای افزودن کلید یا تغییر حالت اتصال، مدیریت ارائهدهندگان را باز کنید.",
+ "multipleApiKeysNeedAttention": "یک یا چند ارائهدهنده روی حالت کلید API تنظیم شدهاند و نیاز به توجه دارند. برای بازبینی کلیدهای ذخیرهشده یا تغییر حالت اتصال، مدیریت ارائهدهندگان را باز کنید.",
+ "notAuthenticated": "{{runtime}} نصب شده است اما شما احراز هویت نشدهاید. ورود برای راهاندازی تیم و ویژگیهای هوش مصنوعی لازم است.",
+ "singleApiKeyMissing": "{{provider}} روی حالت کلید API تنظیم شده است، اما هیچ کلید API پیکربندی نشده است. برای افزودن کلید یا تغییر حالت اتصال، مدیریت ارائهدهندگان را باز کنید.",
+ "singleApiKeyNeedsAttention": "{{provider}} روی حالت کلید API تنظیم شده است، اما متصل نیست. برای بازبینی کلید ذخیرهشده یا تغییر حالت اتصال، مدیریت ارائهدهندگان را باز کنید."
+ }
+ },
+ "recentProjects": {
+ "selectFolderTitle": "یک پوشه پروژه انتخاب کنید",
+ "selectFolder": "انتخاب پوشه",
+ "failedToLoad": "بارگذاری پروژهها ناموفق بود",
+ "retry": "تلاش مجدد",
+ "noProjects": "هیچ پروژهای یافت نشد",
+ "noMatches": "هیچ نتیجهای برای «{{query}}» نیست",
+ "noRecentProjects": "هیچ پروژه اخیری یافت نشد",
+ "emptyDescription": "فعالیتهای اخیر Claude و Codex اینجا ظاهر میشوند.",
+ "loadMore": "بارگذاری بیشتر",
+ "card": {
+ "deleted": "حذفشده",
+ "projectFolderMissing": "پوشه پروژه دیگر وجود ندارد",
+ "taskCounts": {
+ "active": "{{count}} فعال",
+ "active_one": "{{count}} فعال",
+ "active_other": "{{count}} فعال",
+ "active_few": "{{count}} فعال",
+ "active_many": "{{count}} فعال",
+ "pending": "{{count}} در انتظار",
+ "pending_one": "{{count}} در انتظار",
+ "pending_other": "{{count}} در انتظار",
+ "pending_few": "{{count}} در انتظار",
+ "pending_many": "{{count}} در انتظار",
+ "done": "{{count}} انجامشده",
+ "done_one": "{{count}} انجامشده",
+ "done_other": "{{count}} انجامشده",
+ "done_few": "{{count}} انجامشده",
+ "done_many": "{{count}} انجامشده"
+ }
+ },
+ "title": "پروژههای اخیر",
+ "searchResults": "نتایج جستجو",
+ "searchPlaceholder": "جستجوی پروژهها..."
+ },
+ "actions": {
+ "selectTeam": "انتخاب تیم",
+ "or": "یا",
+ "clearSearch": "پاک کردن جستجو"
+ },
+ "windowsAdmin": {
+ "title": "حالت مدیر Windows توصیه میشود",
+ "description": "وقتی Agent Teams AI با دسترسی بالا اجرا نشود، بررسیهای زمان اجرای OpenCode ممکن است زمانبر شده و منقضی شوند. پیش از راهاندازی تیمهای OpenCode، برنامه را با «Run as administrator» مجدداً اجرا کنید."
+ },
+ "webPreview": {
+ "title": "برای عملکرد کامل، برنامه دسکتاپ را باز کنید",
+ "description": "نسخه مرورگر هنوز در حال توسعه است. اقدامات پروژه، یکپارچهسازیها و بهروزرسانیهای وضعیت زنده ممکن است اینجا محدود باشند. برای دسترسی مطمئن به همه ویژگیها از برنامه دسکتاپ استفاده کنید."
+ },
+ "updateBanner": {
+ "newVersionAvailable": "نسخه جدید در دسترس است",
+ "restartNow": "راهاندازی مجدد",
+ "viewDetails": "مشاهده جزئیات"
+ }
+}
diff --git a/src/features/localization/renderer/locales/fa/errors.json b/src/features/localization/renderer/locales/fa/errors.json
new file mode 100644
index 00000000..d2cc702b
--- /dev/null
+++ b/src/features/localization/renderer/locales/fa/errors.json
@@ -0,0 +1,3 @@
+{
+ "fallback": "مشکلی پیش آمد."
+}
diff --git a/src/features/localization/renderer/locales/fa/extensions.json b/src/features/localization/renderer/locales/fa/extensions.json
new file mode 100644
index 00000000..1811ae09
--- /dev/null
+++ b/src/features/localization/renderer/locales/fa/extensions.json
@@ -0,0 +1,688 @@
+{
+ "store": {
+ "actions": {
+ "addCustom": "افزودن سفارشی",
+ "openDashboard": "باز کردن داشبورد",
+ "refreshCatalog": "تازهسازی کاتالوگ"
+ },
+ "capabilities": {
+ "mcp": "MCP: {{status}}",
+ "plugins": "پلاگینها: {{status}}",
+ "skills": "مهارتها: {{status}}"
+ },
+ "desktopOnly": "فقط در برنامه دسکتاپ در دسترس است.",
+ "provider": {
+ "checkingStatus": "در حال بررسی وضعیت ارائهدهنده...",
+ "connected": "متصل",
+ "loading": "در حال بارگذاری...",
+ "needsSetup": "نیازمند راهاندازی",
+ "readyToConfigure": "آماده پیکربندی",
+ "unsupported": "پشتیبانینشده"
+ },
+ "runtime": {
+ "checkingAvailabilityDescription": "افزونهها برای مدیریت پلاگینها، سرورهای MCP، مهارتها و اتصالات ارائهدهنده به زمان اجرای پیکربندیشده نیاز دارند.",
+ "checkingAvailabilityTitle": "در حال بررسی دسترسپذیری زمان اجرای افزونهها",
+ "failedToStartDescription": "افزونهها تا زمانی که زمان اجرا بررسی سلامت راهاندازی خود را بگذراند غیرفعال هستند. برای تعمیر یا نصب مجدد آن، داشبورد را باز کنید.",
+ "failedToStartTitle": "زمان اجرای پیکربندیشده یافت شد اما در راهاندازی ناموفق بود",
+ "multimodelCapabilitiesDescription": "پشتیبانی ارائهدهنده میتواند بسته به بخش متفاوت باشد. پلاگینها تنها در جایی نمایش داده میشوند که زمان اجرا صراحتاً پشتیبانی را اعلام کند.",
+ "multimodelCapabilitiesTitle": "قابلیتهای زمان اجرای چندمدلی",
+ "needsSignInDescription": "{{runtime}} یافت شد{{version}}، اما نصب پلاگینها تا زمانی که از داشبورد وارد شوید غیرفعال است.",
+ "needsSignInTitle": "{{runtime}} نیازمند ورود است",
+ "notAvailableDescription": "افزونهها تا زمانی که زمان اجرا نصب شود غیرفعال هستند. برای نصب آن داشبورد را باز کنید و دوباره تلاش کنید.",
+ "notAvailableTitle": "زمان اجرای پیکربندیشده در دسترس نیست",
+ "readyDescription": "پلاگینها را میتوان از این صفحه نصب کرد{{versionSuffix}}.",
+ "readyTitle": "{{runtime}} آماده است",
+ "requiredForMutations": "زمان اجرای پیکربندیشده برای نصب یا حذف افزونهها لازم است. آن را از داشبورد نصب یا تعمیر کنید."
+ },
+ "sessionsRestartWarning": "نشستهای در حال اجرا تا راهاندازی مجدد، تغییرات افزونه را اعمال نمیکنند.",
+ "tabs": {
+ "apiKeys": {
+ "description": "کلیدهای محرمانه برای سرویسهای آنلاین. آنها را اینجا اضافه کنید تا پلاگینها، سرورها و یکپارچهسازیها بتوانند متصل شده و کار کنند.",
+ "label": "کلیدهای API"
+ },
+ "mcpServers": {
+ "description": "اتصالات به ابزارها و برنامههای بیرونی. آنها به زمان اجرا اجازه میدهند دادهها را بخواند یا اقداماتی فراتر از این برنامه انجام دهد.",
+ "label": "سرورهای MCP"
+ },
+ "plugins": {
+ "description": "افزودنیهای کوچک برای زمان اجرا. در حالت چندمدلی، در حال حاضر هنگام پشتیبانی به نشستهای Anthropic اعمال میشوند. پشتیبانی گستردهتر ارائهدهنده در حال توسعه است.",
+ "label": "پلاگینها"
+ },
+ "skills": {
+ "description": "دستورالعملهای آماده برای کارهای رایج. آنها به زمان اجرا کمک میکنند وظایف تکرارپذیر را با ثبات بیشتری انجام دهد.",
+ "label": "مهارتها"
+ }
+ },
+ "title": "افزونهها"
+ },
+ "pluginsPanel": {
+ "activeFilters": "{{count}} فعال",
+ "browseByFit": "مرور بر اساس تناسب",
+ "capabilities": "قابلیتها",
+ "categories": "دستهها",
+ "clearAllFilters": "پاک کردن همه فیلترها",
+ "clearFilters": "پاک کردن فیلترها",
+ "counts": {
+ "capabilities": "{{count}} قابلیت",
+ "categories": "{{count}} دسته",
+ "plugins": "{{count}} پلاگین",
+ "capabilities_few": "{{count}} قابلیت",
+ "capabilities_many": "{{count}} قابلیت",
+ "capabilities_one": "{{count}} قابلیت",
+ "capabilities_other": "{{count}} قابلیت",
+ "categories_few": "{{count}} دسته",
+ "categories_many": "{{count}} دسته",
+ "categories_one": "{{count}} دسته",
+ "categories_other": "{{count}} دسته",
+ "plugins_few": "{{count}} پلاگین",
+ "plugins_many": "{{count}} پلاگین",
+ "plugins_one": "{{count}} پلاگین",
+ "plugins_other": "{{count}} پلاگین"
+ },
+ "empty": {
+ "description": "بعداً برای پلاگینهای جدید سر بزنید",
+ "filteredDescription": "معیارهای جستجو یا فیلتر خود را تنظیم کنید",
+ "filteredTitle": "هیچ پلاگینی با فیلترهای شما منطبق نیست",
+ "title": "هیچ پلاگینی در دسترس نیست"
+ },
+ "filterDescription": "کاتالوگ را بر اساس دسته، قابلیت یا وضعیت نصب محدود کنید.",
+ "installedOnly": "فقط نصبشدهها",
+ "providerSupportNotice": "در حال حاضر پشتیبانی از پلاگین تنها برای نشستهای Anthropic (Claude) تضمین میشود. ما در تلاش برای پشتیبانی از پلاگینها در همه عاملها هستیم.",
+ "resultsUpdateInstantly": "همزمان با تنظیم فیلترها، نتایج فوراً بهروزرسانی میشوند.",
+ "searchPlaceholder": "جستجوی پلاگینها...",
+ "selectedCount": "{{count}} انتخابشده",
+ "showing": "نمایش {{shown}} از {{total}} پلاگین",
+ "sort": {
+ "category": "دسته",
+ "nameAsc": "نام A-Z",
+ "nameDesc": "نام Z-A",
+ "popular": "محبوب"
+ },
+ "activeFilters_few": "{{count}} فعال",
+ "activeFilters_many": "{{count}} فعال",
+ "activeFilters_one": "{{count}} فعال",
+ "activeFilters_other": "{{count}} فعال",
+ "selectedCount_few": "{{count}} انتخابشده",
+ "selectedCount_many": "{{count}} انتخابشده",
+ "selectedCount_one": "{{count}} انتخابشده",
+ "selectedCount_other": "{{count}} انتخابشده"
+ },
+ "customMcp": {
+ "actions": {
+ "add": "افزودن",
+ "cancel": "لغو",
+ "install": "نصب",
+ "installing": "در حال نصب..."
+ },
+ "description": "یک سرور را بهصورت دستی و بدون کاتالوگ اضافه کنید.",
+ "errors": {
+ "installFailed": "نصب ناموفق بود",
+ "invalidServerName": "نام سرور نامعتبر است. از نویسههای حرفی-عددی، خط تیره، زیرخط و نقطه استفاده کنید.",
+ "npmPackageRequired": "نام بسته npm لازم است",
+ "serverNameRequired": "نام سرور لازم است",
+ "serverUrlRequired": "URL سرور لازم است"
+ },
+ "fields": {
+ "environmentVariables": "متغیرهای محیطی",
+ "headers": "سرآیندها",
+ "npmPackage": "بسته npm",
+ "scope": "دامنه",
+ "serverName": "نام سرور",
+ "serverUrl": "URL سرور",
+ "transport": "انتقال",
+ "transportType": "نوع انتقال",
+ "versionOptional": "نسخه (اختیاری)"
+ },
+ "title": "افزودن سرور MCP سفارشی",
+ "transport": {
+ "httpSse": "HTTP / SSE",
+ "stdio": "Stdio (npm)"
+ },
+ "placeholders": {
+ "headerName": "Header-Name",
+ "envVarName": "ENV_VAR_NAME",
+ "serverName": "my-server",
+ "latest": "latest",
+ "value": "value",
+ "serverUrl": "https://api.example.com/mcp"
+ }
+ },
+ "mcpDetail": {
+ "auth": {
+ "remoteMayNeedHeaders": "سرورهای MCP راه دور ممکن است حتی زمانی که رجیستری آنها را توصیف نکند، همچنان به سرآیندهای سفارشی یا کلیدهای API نیاز داشته باشند. اگر پس از نصب اتصال ناموفق بود، مستندات ارائهدهنده را بررسی کنید.",
+ "required": "این سرور به احراز هویت نیاز دارد"
+ },
+ "diagnostics": {
+ "launchTarget": "هدف راهاندازی"
+ },
+ "form": {
+ "autoFilled": "تکمیلشده خودکار",
+ "environmentVariables": "متغیرهای محیطی",
+ "headers": "سرآیندها",
+ "scope": "دامنه",
+ "serverName": "نام سرور"
+ },
+ "install": {
+ "httpTransport": "HTTP: {{transport}}",
+ "manualSetupDescription": "این سرور به راهاندازی دستی نیاز دارد. برای دستورالعملهای نصب، مخزن را بررسی کنید.",
+ "manualSetupRequired": "راهاندازی دستی لازم است",
+ "npmPackage": "npm: {{package}}",
+ "manage": "مدیریت نصب",
+ "install": "نصب سرور"
+ },
+ "links": {
+ "glama": "Glama",
+ "repository": "مخزن",
+ "website": "وبسایت"
+ },
+ "metadata": {
+ "author": "سازنده",
+ "githubStars": "ستارههای GitHub",
+ "hosting": "میزبانی",
+ "installType": "نوع نصب",
+ "license": "مجوز",
+ "published": "منتشرشده",
+ "source": "منبع",
+ "updated": "بهروزشده",
+ "version": "نسخه"
+ },
+ "scope": {
+ "local": "محلی",
+ "project": "پروژه"
+ },
+ "tools": {
+ "title": "ابزارها ({{count}})",
+ "title_few": "ابزارها ({{count}})",
+ "title_many": "ابزارها ({{count}})",
+ "title_one": "ابزارها ({{count}})",
+ "title_other": "ابزارها ({{count}})"
+ },
+ "placeholders": {
+ "serverName": "my-server"
+ }
+ },
+ "skillEditor": {
+ "actions": {
+ "cancel": "لغو",
+ "createSkill": "ایجاد مهارت",
+ "preparing": "در حال آمادهسازی...",
+ "reviewAndCreate": "بازبینی و ایجاد",
+ "reviewAndSave": "بازبینی و ذخیره",
+ "saveSkill": "ذخیره مهارت"
+ },
+ "advanced": {
+ "customDescription": "این مهارت از یک قالب markdown سفارشی استفاده میکند، بنابراین آن را مستقیماً اینجا ویرایش کنید.",
+ "customTitle": "۲. ویرایشگر SKILL.md",
+ "description": "اکثر افراد میتوانند از این بخش بگذرند. تنها در صورتی آن را باز کنید که بخواهید کنترل مستقیم روی فایل markdown خام داشته باشید.",
+ "hide": "پنهان کردن ویرایشگر پیشرفته",
+ "resetFromStructuredFields": "بازنشانی از فیلدهای ساختاریافته",
+ "show": "نمایش ویرایشگر پیشرفته",
+ "title": "۴. ویرایشگر پیشرفته SKILL.md"
+ },
+ "basics": {
+ "description": "به این مهارت نامی روشن بدهید، انتخاب کنید چه کسی میتواند از آن استفاده کند و تصمیم بگیرید کجا قرار بگیرد.",
+ "title": "۱. اصول"
+ },
+ "description": {
+ "create": "گردشکار را به زبان ساده توصیف کنید، فایلهایی را که ایجاد میشوند بازبینی کنید، سپس آن را ذخیره کنید.",
+ "edit": "این مهارت را بهروزرسانی کنید، تغییرات فایل حاصل را بازبینی کنید، سپس آن را ذخیره کنید."
+ },
+ "extraFiles": {
+ "addedFiles": "فایلهای افزودهشده:",
+ "assets": "داراییها",
+ "assetsDescription": "تنها در صورتی تصاویر یا رسانههای همراه را اضافه کنید که به توضیح گردشکار کمک کنند.",
+ "description": "تنها در صورتی مستندات، اسکریپتها یا داراییهای پشتیبان را اضافه کنید که این مهارت واقعاً به آنها نیاز دارد.",
+ "lockedForEdits": "ریشه و پوشه برای ویرایش قفل شدهاند",
+ "optionalDescription": "فایلهای آغازینی را اضافه کنید که در بازبینی گنجانده شده و همراه با `SKILL.md` نوشته میشوند.",
+ "optionalTitle": "فایلهای اختیاری",
+ "references": "مراجع",
+ "referencesDescription": "مستندات، پیوندها یا نمونههای پشتیبانی را که زمان اجرا میتواند به آنها نگاه کند اضافه کنید.",
+ "scripts": "اسکریپتها",
+ "scriptsDescription": "فرمانهای کمکی یا یادداشتهای راهاندازی را اضافه کنید. پیش از اشتراکگذاری این مهارت با دقت بازبینی کنید.",
+ "title": "۳. فایلهای اضافی"
+ },
+ "fields": {
+ "compatibility": "سازگاری",
+ "description": "توضیح",
+ "folderName": "نام پوشه",
+ "folderNameHint": "ما این را بهطور خودکار از نام مهارت پیشنهاد میدهیم تا بازبینی بلافاصله کار کند.",
+ "invocation": "نحوه استفاده از آن",
+ "license": "مجوز",
+ "name": "نام مهارت",
+ "notes": "یادداشتها یا حفاظهای اضافی",
+ "root": "محل ذخیره",
+ "scope": "چه کسی میتواند از آن استفاده کند",
+ "steps": "گامهای اصلی برای دنبال کردن",
+ "whenToUse": "چه زمانی به سراغ این بروید"
+ },
+ "instructions": {
+ "description": "این بخشها فایل مهارت را برای شما تولید میکنند، بنابراین لازم نیست markdown را ویرایش کنید مگر آنکه بخواهید.",
+ "locked": "فیلدهای ساختاریافته قفل شدهاند زیرا شما به ویرایش دستی `SKILL.md` در پایین تغییر دادهاید.",
+ "title": "۲. دستورالعملها"
+ },
+ "invocation": {
+ "auto": "میتواند بهطور خودکار استفاده شود",
+ "manualOnly": "فقط زمانی که درخواست کنید"
+ },
+ "placeholders": {
+ "description": "این مهارت در چه چیزی کمک میکند",
+ "name": "نام مختصری برای مهارت بنویسید",
+ "notes": "مثال: تستهای جاافتاده، پسرفتها و فرضیات پرخطر را برجسته کنید.",
+ "steps": "۱. فایلهای مرتبط را بررسی کنید.\n۲. ابتدا خطر اصلی را توضیح دهید.\n۳. امنترین رفع را پیشنهاد دهید.",
+ "whenToUse": "مثال: زمانی از این استفاده کنید که وظیفه یک درخواست بازبینی کد یا اولویتبندی باگ است.",
+ "license": "MIT",
+ "compatibility": "claude-code, cursor"
+ },
+ "review": {
+ "creating": "در حال ایجاد یک مهارت",
+ "hint": "ابتدا تغییرات فایل را بازبینی کنید، سپس ذخیره را در گام بعدی تأیید کنید.",
+ "saving": "در حال ذخیره این مهارت"
+ },
+ "root": {
+ "codexOnly": " - فقط Codex",
+ "shared": " - مشترک"
+ },
+ "scope": {
+ "project": "پروژه: {{project}}",
+ "projectUnavailable": "پروژه در دسترس نیست",
+ "user": "کاربر"
+ },
+ "title": {
+ "create": "ایجاد مهارت",
+ "edit": "ویرایش مهارت"
+ }
+ },
+ "skillDetail": {
+ "actions": {
+ "cancel": "لغو",
+ "delete": "حذف",
+ "deleteSkill": "حذف مهارت",
+ "deleting": "در حال حذف...",
+ "editSkill": "ویرایش مهارت",
+ "openFolder": "باز کردن پوشه",
+ "openSkillFile": "باز کردن SKILL.md",
+ "retry": "تلاش مجدد"
+ },
+ "badges": {
+ "assets": "داراییها",
+ "autoUse": "استفاده خودکار",
+ "hasScripts": "دارای اسکریپت",
+ "manualUse": "استفاده دستی",
+ "references": "مراجع",
+ "storedIn": "ذخیرهشده در {{root}}"
+ },
+ "deleteDialog": {
+ "description": "این مهارت حذف شده و به سطل زباله منتقل شود؟",
+ "descriptionWithName": "«{{name}}» حذف شده و به سطل زباله منتقل شود؟ در صورت نیاز میتوانید بعداً آن را از سطل زباله بازیابی کنید.",
+ "title": "مهارت حذف شود؟"
+ },
+ "descriptionFallback": "فراداده مهارت کشفشده و دستورالعملهای خام را بررسی کنید.",
+ "errors": {
+ "deleteFailed": "حذف مهارت ناموفق بود",
+ "loadFailed": "بارگذاری این مهارت ممکن نیست."
+ },
+ "files": {
+ "advancedDetails": "جزئیات پیشرفته فایل",
+ "assets": "داراییها",
+ "references": "مراجع",
+ "scripts": "اسکریپتها",
+ "storedAt": "ذخیرهشده در"
+ },
+ "includes": {
+ "assets": "داراییها",
+ "instructionsOnly": "فقط دستورالعملهای مهارت",
+ "references": "مراجع",
+ "scripts": "اسکریپتها"
+ },
+ "invocation": {
+ "auto": "هنگام مطابقت با وظیفه بهطور خودکار اجرا میشود.",
+ "manualOnly": "فقط زمانی اجرا میشود که صراحتاً درخواست کنید."
+ },
+ "issues": {
+ "bundledScripts": "این مهارت شامل اسکریپتهای همراه است",
+ "reviewCarefully": "پیش از استفاده، این مهارت را با دقت بازبینی کنید"
+ },
+ "loading": "در حال بارگذاری جزئیات مهارت...",
+ "scope": {
+ "personal": "مهارتهای شخصی شما",
+ "projectOnly": "فقط این پروژه"
+ },
+ "summary": {
+ "howUsed": "نحوه استفاده از آن",
+ "included": "چه چیزی همراه آن میآید",
+ "whoCanUse": "چه کسی میتواند از آن استفاده کند"
+ },
+ "titleFallback": "جزئیات مهارت"
+ },
+ "skillsPanel": {
+ "actions": {
+ "createSkill": "ایجاد مهارت",
+ "import": "وارد کردن"
+ },
+ "badges": {
+ "assets": "داراییها",
+ "hasScripts": "دارای اسکریپت",
+ "needsAttention": "نیازمند توجه",
+ "references": "مراجع",
+ "storedIn": "ذخیرهشده در {{root}}"
+ },
+ "configuredRuntime": "زمان اجرای پیکربندیشده",
+ "counts": {
+ "codexOnly": "{{count}} فقط Codex",
+ "personal": "{{count}} شخصی",
+ "project": "{{count}} پروژه",
+ "shared": "{{count}} مشترک",
+ "total": "{{count}} در کل",
+ "codexOnly_few": "{{count}} فقط Codex",
+ "codexOnly_many": "{{count}} فقط Codex",
+ "codexOnly_one": "{{count}} فقط Codex",
+ "codexOnly_other": "{{count}} فقط Codex",
+ "personal_few": "{{count}} شخصی",
+ "personal_many": "{{count}} شخصی",
+ "personal_one": "{{count}} شخصی",
+ "personal_other": "{{count}} شخصی",
+ "project_few": "{{count}} پروژه",
+ "project_many": "{{count}} پروژه",
+ "project_one": "{{count}} پروژه",
+ "project_other": "{{count}} پروژه",
+ "shared_few": "{{count}} مشترک",
+ "shared_many": "{{count}} مشترک",
+ "shared_one": "{{count}} مشترک",
+ "shared_other": "{{count}} مشترک",
+ "total_few": "{{count}} در کل",
+ "total_many": "{{count}} در کل",
+ "total_one": "{{count}} در کل",
+ "total_other": "{{count}} در کل"
+ },
+ "empty": {
+ "noMatches": "هیچ مهارتی با جستجوی شما منطبق نیست",
+ "noMatchesDescription": "عبارت جستجوی دیگری امتحان کنید یا فیلترها را تغییر دهید.",
+ "noSkills": "هنوز هیچ مهارتی نیست",
+ "noSkillsDescription": "اولین مهارت خود را برای آموزش یک گردشکار تکرارپذیر ایجاد کنید، یا مهارتی را که قبلاً استفاده میکنید وارد کنید."
+ },
+ "filters": {
+ "all": "همه مهارتها",
+ "codexOnly": "فقط Codex",
+ "hasScripts": "دارای اسکریپت",
+ "needsAttention": "نیازمند توجه",
+ "personal": "شخصی",
+ "project": "پروژه",
+ "shared": "مشترک"
+ },
+ "hero": {
+ "codexAvailable": "زمانی که یک مهارت باید فقط Codex بماند از `.codex` استفاده کنید.",
+ "codexUnavailable": "مهارتهای `.codex` موجود اینجا قابل ویرایش میمانند، اما مهارتهای جدید فقط-Codex به فعال بودن زمان اجرای Codex نیاز دارند.",
+ "description": "مهارتها دستورالعملهای قابلاستفاده مجددی هستند که به زمان اجرا کمک میکنند نوع یکسانی از وظیفه را با ثبات بیشتری انجام دهد.",
+ "guidance": "برای عادتهایی که همهجا میخواهید از مهارتهای شخصی استفاده کنید. برای گردشکارهایی که فقط درون یک مخزن کد معنا دارند از مهارتهای پروژه استفاده کنید.",
+ "personalContext": "اکنون فقط مهارتهای شخصی خود را میبینید.",
+ "projectContext": "اکنون مهارتهای {{project}} بهعلاوه مهارتهای شخصی خود را میبینید.",
+ "title": "کار تکرارپذیر را آموزش دهید"
+ },
+ "invocation": {
+ "auto": "هنگام تناسب بهطور خودکار اجرا میشود",
+ "manualOnly": "فقط زمانی اجرا میشود که صراحتاً درخواست کنید"
+ },
+ "loading": {
+ "loading": "در حال بارگذاری مهارتها...",
+ "refreshing": "در حال تازهسازی مهارتها..."
+ },
+ "runtimeAudience": "مهارتهای مشترک در `.claude`، `.cursor` و `.agents` برای {{audience}} در دسترس هستند. مهارتهای ذخیرهشده در `.codex` زمانی که پشتیبانی Codex در دسترس باشد فقط-Codex میمانند.",
+ "scope": {
+ "project": "این پروژه",
+ "user": "شخصی"
+ },
+ "searchPlaceholder": "جستجو بر اساس نام مهارت یا چیزی که در آن کمک میکند...",
+ "sections": {
+ "personal": {
+ "description": "عادتها و دستورالعملهایی که میخواهید همهجا در دسترس باشند.",
+ "title": "مهارتهای شخصی"
+ },
+ "project": {
+ "description": "گردشکارهایی که فقط برای این مخزن کد معنا دارند.",
+ "title": "مهارتهای پروژه"
+ }
+ },
+ "sort": {
+ "label": "مرتبسازی مهارتها",
+ "name": "نام",
+ "recent": "جدیدترین"
+ },
+ "status": {
+ "hasScripts": "شامل اسکریپت است، بنابراین آن را با دقت بازبینی کنید",
+ "needsAttention": "پیش از اتکا به آن نیازمند توجه است",
+ "ready": "آماده استفاده"
+ },
+ "success": {
+ "created": "مهارت با موفقیت ایجاد شد.",
+ "imported": "مهارت با موفقیت وارد شد.",
+ "saved": "مهارت با موفقیت ذخیره شد."
+ }
+ },
+ "pluginDetail": {
+ "unknown": "نامشخص",
+ "metadata": {
+ "author": "سازنده",
+ "category": "دسته",
+ "source": "منبع",
+ "version": "نسخه",
+ "capabilities": "قابلیتها",
+ "installs": "نصبها"
+ },
+ "scope": {
+ "label": "دامنه:",
+ "options": {
+ "user": "کاربر (سراسری)",
+ "project": "پروژه (مشترک)",
+ "local": "محلی (gitignoreشده)"
+ }
+ },
+ "links": {
+ "homepage": "صفحه اصلی",
+ "contact": "تماس"
+ },
+ "readme": {
+ "loading": "در حال بارگذاری README...",
+ "empty": "هیچ README در دسترس نیست."
+ }
+ },
+ "skillImport": {
+ "title": "وارد کردن مهارت",
+ "description": "یک پوشه مهارت موجود را انتخاب کنید، آنچه را کپی میشود بازبینی کنید، سپس آن را به یکی از مکانهای پشتیبانیشده مهارت وارد کنید.",
+ "steps": {
+ "chooseFolder": {
+ "title": "۱. یک پوشه مهارت انتخاب کنید",
+ "description": "این باید پوشهای باشد که از قبل شامل فایل `SKILL.md`، `Skill.md` یا `skill.md` است."
+ },
+ "location": {
+ "title": "۲. تصمیم بگیرید کجا قرار بگیرد",
+ "description": "مهارتهای شخصی همهجا کار میکنند. مهارتهای پروژه فقط برای یک مخزن کد نمایش داده میشوند."
+ }
+ },
+ "fields": {
+ "sourceFolder": "پوشه منبع",
+ "destinationFolderName": "نام پوشه مقصد",
+ "audience": "چه کسی میتواند از آن استفاده کند",
+ "storage": "محل ذخیره"
+ },
+ "placeholders": {
+ "defaultFolderName": "پیشفرض روی نام پوشه منبع"
+ },
+ "actions": {
+ "browse": "مرور",
+ "cancel": "لغو",
+ "preparing": "در حال آمادهسازی...",
+ "reviewAndImport": "بازبینی و وارد کردن",
+ "importSkill": "وارد کردن مهارت",
+ "backToImport": "بازگشت به وارد کردن"
+ },
+ "scope": {
+ "user": "کاربر",
+ "project": "پروژه: {{project}}",
+ "projectUnavailable": "پروژه در دسترس نیست"
+ },
+ "rootSuffix": {
+ "codexOnly": " - فقط Codex",
+ "shared": " - مشترک"
+ },
+ "reviewHint": "ابتدا فایلهای کپیشده را بازبینی کنید، سپس وارد کردن را در گام بعدی تأیید کنید.",
+ "reviewLabel": "در حال وارد کردن این مهارت",
+ "errors": {
+ "missingSkillFile": "این پوشه هنوز شبیه یک مهارت به نظر نمیرسد. به فایل SKILL.md، Skill.md یا skill.md نیاز دارد.",
+ "symbolicLinks": "این پوشه شامل پیوندهای نمادین است. بهجای پیوندها، فایلهای واقعی را وارد کنید.",
+ "tooManyFiles": "این پوشه مهارت برای وارد کردن یکباره بسیار بزرگ است. فایلهای اضافی را حذف کرده و دوباره تلاش کنید.",
+ "tooLarge": "این پوشه مهارت برای وارد کردن ایمن بسیار بزرگ است. داراییهای بزرگ را کاهش داده و دوباره تلاش کنید.",
+ "invalidFolderName": "یک نام سادهتر برای پوشه مقصد با حروف، اعداد، نقطه، خط تیره یا زیرخط انتخاب کنید.",
+ "mustBeDirectory": "یک پوشه برای وارد کردن انتخاب کنید، نه یک فایل تنها.",
+ "reviewFailed": "بازبینی تغییرات وارد کردن ناموفق بود",
+ "importFailed": "وارد کردن مهارت ناموفق بود"
+ }
+ },
+ "mcpPanel": {
+ "sort": {
+ "nameAsc": "نام A→Z",
+ "nameDesc": "نام Z→A",
+ "toolsDesc": "بیشترین ابزار"
+ },
+ "health": {
+ "title": "وضعیت سلامت MCP",
+ "checkingViaRuntime": "در حال بررسی سرورهای MCP نصبشده از طریق {{runtime}} ...",
+ "lastChecked": "آخرین بررسی {{time}}",
+ "description": "برای تأیید اتصال MCP نصبشده، عیبیابی را از این صفحه اجرا کنید.",
+ "checking": "در حال بررسی...",
+ "checkStatus": "بررسی وضعیت"
+ },
+ "diagnostics": {
+ "title": "عیبیابی MCP زمان اجرا",
+ "serversCount": "{{count}} سرور",
+ "serversCount_one": "{{count}} سرور",
+ "serversCount_other": "{{count}} سرور",
+ "waiting": "در انتظار نتایج عیبیابی...",
+ "disableReasons": {
+ "checkingRuntimeStatus": "در حال بررسی وضعیت زمان اجرا...",
+ "checkingRuntimeAvailability": "در حال بررسی دسترسپذیری زمان اجرا...",
+ "runtimeFailedToStart": "زمان اجرای پیکربندیشده یافت شد اما در راهاندازی ناموفق بود. برای تعمیر یا نصب مجدد آن داشبورد را باز کنید.",
+ "runtimeRequired": "زمان اجرای پیکربندیشده لازم است. آن را از داشبورد نصب یا تعمیر کنید."
+ },
+ "serversCount_few": "{{count}} سرور",
+ "serversCount_many": "{{count}} سرور"
+ },
+ "searchPlaceholder": "جستجوی سرورهای MCP...",
+ "runtime": {
+ "notAvailable": "{{runtime}} در دسترس نیست",
+ "notInstalled": "{{runtime}} نصب نشده است",
+ "requiredDescription": "بررسیهای سلامت MCP به {{runtime}} نیاز دارند. برای نصب یا تعمیر آن به داشبورد بروید."
+ },
+ "empty": {
+ "searchTitle": "هیچ سروری یافت نشد",
+ "title": "هیچ سرور MCP در دسترس نیست",
+ "searchDescription": "عبارت جستجوی دیگری امتحان کنید",
+ "description": "بعداً برای سرورهای جدید سر بزنید"
+ },
+ "loadMore": "بارگذاری بیشتر"
+ },
+ "apiKeys": {
+ "description": "کلیدهای API را برای تکمیل خودکار هنگام نصب سرورهای MCP بهصورت امن ذخیره کنید.",
+ "storage": {
+ "osKeychain": "کلیدها از طریق {{backend}} رمزنگاری شده و با مجوزهای محدود فایل (فقط مالک) ذخیره میشوند.",
+ "localEncryption": "keychain سیستمعامل در دسترس نیست - کلیدها بهصورت محلی با AES-256 رمزنگاری میشوند. برای محافظت قویتر، یک سرویس keyring (gnome-keyring، kwallet) نصب کنید."
+ },
+ "actions": {
+ "add": "افزودن کلید API",
+ "addFirst": "اولین کلید خود را اضافه کنید",
+ "edit": "ویرایش",
+ "copied": "کپی شد!",
+ "copyEnvVarName": "کپی نام متغیر محیطی",
+ "confirmDelete": "برای تأیید دوباره کلیک کنید",
+ "delete": "حذف"
+ },
+ "empty": {
+ "title": "هیچ کلید API ذخیره نشده است",
+ "description": "کلیدها را اضافه کنید تا هنگام نصب سرورهای MCP متغیرهای محیطی بهطور خودکار تکمیل شوند."
+ },
+ "form": {
+ "addTitle": "افزودن کلید API",
+ "editTitle": "ویرایش کلید API",
+ "addDescription": "یک کلید API را برای تکمیل خودکار در نصب سرورهای MCP ذخیره کنید.",
+ "editDescription": "جزئیات کلید را بهروزرسانی کنید. باید مقدار را دوباره وارد کنید.",
+ "keychainUnavailable": "keychain سیستمعامل در دسترس نیست - کلیدها بهصورت محلی با AES-256 رمزنگاری میشوند. برای محافظت در سطح سیستمعامل gnome-keyring را نصب کنید.",
+ "name": "نام",
+ "namePlaceholder": "مثلاً OpenAI Production",
+ "environmentVariableName": "نام متغیر محیطی",
+ "envVarPlaceholder": "مثلاً OPENAI_API_KEY",
+ "value": "مقدار",
+ "reenterValue": "مقدار کلید را دوباره وارد کنید",
+ "valuePlaceholder": "sk-...",
+ "scope": "دامنه",
+ "userScopeLabel": "کاربر (سراسری)",
+ "projectScopeLabel": "پروژه: {{project}}",
+ "projectUnavailable": "پروژه در دسترس نیست",
+ "boundTo": "متصل به {{path}}",
+ "cancel": "لغو",
+ "saving": "در حال ذخیره...",
+ "update": "بهروزرسانی",
+ "save": "ذخیره",
+ "errors": {
+ "invalidEnvVarFormat": "از حروف، ارقام و زیرخط استفاده کنید. باید با یک حرف یا زیرخط شروع شود.",
+ "nameRequired": "نام لازم است",
+ "envVarRequired": "نام متغیر محیطی لازم است",
+ "invalidEnvVar": "نام متغیر محیطی نامعتبر است",
+ "valueRequired": "مقدار کلید لازم است",
+ "projectScopeRequiresProject": "کلیدهای API با دامنه پروژه به یک پروژه فعال نیاز دارند",
+ "saveFailed": "ذخیره ناموفق بود"
+ }
+ }
+ },
+ "skillReview": {
+ "title": "بازبینی تغییرات مهارت",
+ "description": "{{reviewLabel}} ابتدا تغییرات سیستم فایل را پیشنمایش میکند. تا زمانی که در پایین تأیید نکنید چیزی نوشته نمیشود.",
+ "noPreview": "هیچ پیشنمایشی در دسترس نیست.",
+ "confirmPromptPrefix": "تفاوت زیر را بازبینی کنید، سپس از",
+ "confirmPromptSuffix": "برای اعمال این تغییرات استفاده کنید.",
+ "noChanges": "هنوز هیچ تغییر فایلی شناسایی نشده است.",
+ "binaryBadge": "باینری",
+ "binaryPreviewHidden": "پیشنمایش فایل باینری نمایش داده نمیشود. فایل به همان شکل کپی خواهد شد.",
+ "summary": {
+ "fileChanges": "{{count}} تغییر فایل",
+ "fileChanges_one": "{{count}} تغییر فایل",
+ "fileChanges_other": "{{count}} تغییر فایل",
+ "new": "{{count}} جدید",
+ "updated": "{{count}} بهروزشده",
+ "removed": "{{count}} حذفشده",
+ "binary": "{{count}} باینری",
+ "fileChanges_few": "{{count}} تغییر فایل",
+ "fileChanges_many": "{{count}} تغییر فایل"
+ }
+ },
+ "mcpCard": {
+ "toolsCount": "{{count}} ابزار",
+ "toolsCount_one": "{{count}} ابزار",
+ "toolsCount_other": "{{count}} ابزار",
+ "envCount": "{{count}} متغیر محیطی",
+ "envCount_one": "{{count}} متغیر محیطی",
+ "envCount_other": "{{count}} متغیر محیطی",
+ "auth": "احراز هویت",
+ "byAuthor": "توسط {{author}}",
+ "hosting": {
+ "remote": "راه دور",
+ "local": "محلی",
+ "both": "هر دو"
+ },
+ "toolsCount_few": "{{count}} ابزار",
+ "toolsCount_many": "{{count}} ابزار",
+ "envCount_few": "{{count}} متغیر محیطی",
+ "envCount_many": "{{count}} متغیر محیطی",
+ "repository": "مخزن",
+ "website": "وبسایت"
+ },
+ "installButton": {
+ "installing": "در حال نصب...",
+ "removing": "در حال حذف...",
+ "done": "انجام شد",
+ "retry": "تلاش مجدد",
+ "uninstall": "حذف نصب",
+ "install": "نصب"
+ },
+ "pluginCard": {
+ "official": "رسمی"
+ }
+}
diff --git a/src/features/localization/renderer/locales/fa/report.json b/src/features/localization/renderer/locales/fa/report.json
new file mode 100644
index 00000000..1c3e2347
--- /dev/null
+++ b/src/features/localization/renderer/locales/fa/report.json
@@ -0,0 +1,217 @@
+{
+ "cost": {
+ "breakdownTitle": "تفکیک هزینه (به ازای هر ۱ میلیون توکن)",
+ "cacheRead": "خواندن از حافظه پنهان",
+ "cacheWrite": "نوشتن در حافظه پنهان",
+ "cost": "هزینه",
+ "input": "ورودی",
+ "noCommits": "بدون کامیت",
+ "noLinesChanged": "هیچ خطی تغییر نکرد",
+ "output": "خروجی",
+ "parent": "والد: {{cost}}",
+ "parentCost": "هزینه والد",
+ "perCommit": "به ازای هر کامیت",
+ "perCommitFormula": "هزینه کل ÷ {{count}} کامیت",
+ "perCommitFormula_few": "هزینه کل ÷ {{count}} کامیت",
+ "perCommitFormula_many": "هزینه کل ÷ {{count}} کامیت",
+ "perCommitFormula_one": "هزینه کل ÷ {{count}} کامیت",
+ "perCommitFormula_other": "هزینه کل ÷ {{count}} کامیت",
+ "perLineChanged": "به ازای هر خط تغییریافته",
+ "perLineFormula": "هزینه کل ÷ {{count}} خط",
+ "perLineFormula_few": "هزینه کل ÷ {{count}} خط",
+ "perLineFormula_many": "هزینه کل ÷ {{count}} خط",
+ "perLineFormula_one": "هزینه کل ÷ {{count}} خط",
+ "perLineFormula_other": "هزینه کل ÷ {{count}} خط",
+ "subagent": "زیرعامل: {{cost}}",
+ "subagentCost": "هزینه زیرعامل",
+ "title": "تحلیل هزینه",
+ "total": "کل"
+ },
+ "insights": {
+ "agent": "عامل",
+ "agent_few": "عامل",
+ "agent_many": "عامل",
+ "agent_one": "عامل",
+ "agent_other": "عامل",
+ "agentTree": "درخت عامل ({{count}} {{unit}})",
+ "background": "(پسزمینه)",
+ "bashCommands": "فرمانهای Bash",
+ "outOfScopeFindings": "یافتههای خارج از محدوده ({{count}})",
+ "questionsAsked": "پرسشهای مطرحشده ({{count}})",
+ "repeated": "تکراری",
+ "skillsInvoked": "مهارتهای فراخواندهشده ({{count}})",
+ "taskDispatches": "ارسالهای وظیفه ({{count}})",
+ "tasksCreated": "وظایف ایجادشده ({{count}})",
+ "teamMode": "حالت تیمی",
+ "teams": "تیمها: {{teams}}",
+ "title": "بینشهای نشست",
+ "total": "کل",
+ "unique": "یکتا",
+ "skillsInvoked_few": "مهارتهای فراخواندهشده ({{count}})",
+ "skillsInvoked_many": "مهارتهای فراخواندهشده ({{count}})",
+ "skillsInvoked_one": "مهارتهای فراخواندهشده ({{count}})",
+ "skillsInvoked_other": "مهارتهای فراخواندهشده ({{count}})",
+ "taskDispatches_few": "ارسالهای وظیفه ({{count}})",
+ "taskDispatches_many": "ارسالهای وظیفه ({{count}})",
+ "taskDispatches_one": "ارسالهای وظیفه ({{count}})",
+ "taskDispatches_other": "ارسالهای وظیفه ({{count}})",
+ "tasksCreated_few": "وظایف ایجادشده ({{count}})",
+ "tasksCreated_many": "وظایف ایجادشده ({{count}})",
+ "tasksCreated_one": "وظایف ایجادشده ({{count}})",
+ "tasksCreated_other": "وظایف ایجادشده ({{count}})",
+ "questionsAsked_few": "پرسشهای مطرحشده ({{count}})",
+ "questionsAsked_many": "پرسشهای مطرحشده ({{count}})",
+ "questionsAsked_one": "پرسشهای مطرحشده ({{count}})",
+ "questionsAsked_other": "پرسشهای مطرحشده ({{count}})",
+ "agentTree_few": "درخت عامل ({{count}} {{unit}})",
+ "agentTree_many": "درخت عامل ({{count}} {{unit}})",
+ "agentTree_one": "درخت عامل ({{count}} {{unit}})",
+ "agentTree_other": "درخت عامل ({{count}} {{unit}})",
+ "outOfScopeFindings_few": "یافتههای خارج از محدوده ({{count}})",
+ "outOfScopeFindings_many": "یافتههای خارج از محدوده ({{count}})",
+ "outOfScopeFindings_one": "یافتههای خارج از محدوده ({{count}})",
+ "outOfScopeFindings_other": "یافتههای خارج از محدوده ({{count}})",
+ "keyTakeaways": "نکات کلیدی"
+ },
+ "quality": {
+ "chars": "نویسه",
+ "corrections": "اصلاحات",
+ "failed": "ناموفق",
+ "fileReadRedundancy": "افزونگی خواندن فایل",
+ "firstMessage": "اولین پیام",
+ "firstRun": "اولین اجرا",
+ "frictionRate": "نرخ اصطکاک",
+ "lastRun": "آخرین اجرا",
+ "messagesBeforeWork": "پیامها پیش از کار",
+ "passed": "موفق",
+ "promptQuality": "کیفیت پرامپت",
+ "readsPerUniqueFile": "خواندن/فایل یکتا",
+ "snapshot": "تصویر لحظهای",
+ "snapshot_few": "تصویر لحظهای",
+ "snapshot_many": "تصویر لحظهای",
+ "snapshot_one": "تصویر لحظهای",
+ "snapshot_other": "تصویر لحظهای",
+ "startupOverhead": "سربار راهاندازی",
+ "testProgression": "پیشرفت تست",
+ "title": "سیگنالهای کیفیت",
+ "tokensBeforeWork": "توکنها پیش از کار",
+ "totalReads": "کل خواندنها",
+ "uniqueFiles": "فایلهای یکتا",
+ "userMessages": "پیامهای کاربر",
+ "percentOfTotal": "٪ از کل"
+ },
+ "tokens": {
+ "apiCalls": "فراخوانیهای API",
+ "cacheCreate": "ایجاد حافظه پنهان",
+ "cacheEfficiency": "کارایی حافظه پنهان",
+ "cacheRead": "خواندن از حافظه پنهان",
+ "cacheReadPct": "٪ خواندن از حافظه پنهان",
+ "coldStart": "شروع سرد",
+ "cost": "هزینه",
+ "input": "ورودی",
+ "model": "مدل",
+ "no": "خیر",
+ "output": "خروجی",
+ "readWriteRatio": "نسبت خواندن/نوشتن",
+ "title": "مصرف توکن",
+ "total": "کل",
+ "yes": "بله"
+ },
+ "subagents": {
+ "title": "زیرعاملها",
+ "metrics": {
+ "count": "تعداد",
+ "totalTokens": "کل توکنها",
+ "totalDuration": "مدت کل",
+ "totalCost": "هزینه کل"
+ },
+ "table": {
+ "description": "توضیح",
+ "type": "نوع",
+ "tokens": "توکنها",
+ "duration": "مدت",
+ "cost": "هزینه"
+ }
+ },
+ "overview": {
+ "title": "نمای کلی",
+ "yes": "بله",
+ "no": "خیر",
+ "metrics": {
+ "duration": "مدت",
+ "messages": "پیامها",
+ "contextUsage": "مصرف بافت",
+ "compactions": "فشردهسازیها",
+ "branch": "شاخه",
+ "subagents": "زیرعاملها",
+ "project": "پروژه",
+ "sessionId": "شناسه نشست"
+ }
+ },
+ "timeline": {
+ "title": "خط زمانی و فعالیت",
+ "idleAnalysis": "تحلیل بیکاری",
+ "metrics": {
+ "idleGaps": "وقفههای بیکاری",
+ "totalIdle": "کل بیکاری",
+ "activeTime": "زمان فعال",
+ "idlePercent": "٪ بیکاری"
+ },
+ "modelSwitches": "تعویضهای مدل ({{count}})",
+ "modelSwitches_one": "تعویضهای مدل ({{count}})",
+ "modelSwitches_other": "تعویضهای مدل ({{count}})",
+ "messageNumber": "پیام #{{number}}",
+ "keyEvents": "رویدادهای کلیدی",
+ "modelSwitches_few": "تعویضهای مدل ({{count}})",
+ "modelSwitches_many": "تعویضهای مدل ({{count}})"
+ },
+ "tools": {
+ "title": "مصرف ابزار",
+ "summary": "{{formattedCount}} فراخوانی کل در {{toolCount}} ابزار",
+ "columns": {
+ "tool": "ابزار",
+ "calls": "فراخوانیها",
+ "errors": "خطاها",
+ "successPercent": "٪ موفقیت",
+ "health": "سلامت"
+ }
+ },
+ "git": {
+ "title": "فعالیت Git",
+ "commits": "کامیتها",
+ "pushes": "پوشها",
+ "linesAdded": "خطوط افزودهشده",
+ "linesRemoved": "خطوط حذفشده",
+ "branchesCreated": "شاخههای ایجادشده"
+ },
+ "friction": {
+ "title": "سیگنالهای اصطکاک",
+ "rate": "نرخ اصطکاک: {{rate}}٪",
+ "correctionsCount": "{{count}} اصلاح",
+ "correctionsCount_one": "{{count}} اصلاح",
+ "corrections": "اصلاحات",
+ "thrashingSignals": "سیگنالهای درجازدن",
+ "repeatedBashCommands": "فرمانهای Bash تکراری",
+ "reworkedFiles": "فایلهای بازکاریشده (۳+ ویرایش)",
+ "correctionsCount_few": "{{count}} اصلاح",
+ "correctionsCount_many": "{{count}} اصلاح",
+ "correctionsCount_other": "{{count}} اصلاح"
+ },
+ "errors": {
+ "title": "خطاها",
+ "permissionDenied": "دسترسی رد شد",
+ "messageIndex": "پیام #{{index}}",
+ "input": "ورودی",
+ "error": "خطا",
+ "count": "{{count}} خطا",
+ "count_one": "{{count}} خطا",
+ "permissionDenialCount": "{{count}} رد دسترسی",
+ "permissionDenialCount_one": "{{count}} رد دسترسی",
+ "count_few": "{{count}} خطا",
+ "count_many": "{{count}} خطا",
+ "count_other": "{{count}} خطا",
+ "permissionDenialCount_few": "{{count}} رد دسترسی",
+ "permissionDenialCount_many": "{{count}} رد دسترسی",
+ "permissionDenialCount_other": "{{count}} رد دسترسی"
+ }
+}
diff --git a/src/features/localization/renderer/locales/fa/settings.json b/src/features/localization/renderer/locales/fa/settings.json
new file mode 100644
index 00000000..3f9482b2
--- /dev/null
+++ b/src/features/localization/renderer/locales/fa/settings.json
@@ -0,0 +1,994 @@
+{
+ "tabs": {
+ "advanced": {
+ "description": "گزینههای کاربران حرفهای: خروجی/ورودی پیکربندی، بازنشانی پیشفرضها و ویرایش پیکربندی خام.",
+ "label": "پیشرفته"
+ },
+ "general": {
+ "description": "ترجیحات اصلی برنامه مانند پوسته، زبان، تراکم نمایش و رفتار راهاندازی.",
+ "label": "عمومی"
+ },
+ "infoAriaLabel": "{{label}} چیست؟",
+ "notifications": {
+ "description": "کنترل اینکه چه زمانی و چگونه درباره فعالیت عامل، تکمیل وظایف و خطاها مطلع میشوید.",
+ "label": "اعلانها"
+ }
+ },
+ "view": {
+ "description": "ترجیحات برنامه خود را مدیریت کنید",
+ "loading": "در حال بارگذاری تنظیمات...",
+ "title": "تنظیمات"
+ },
+ "runtimeProvider": {
+ "actions": {
+ "cancel": "لغو",
+ "test": "تست"
+ },
+ "defaults": {
+ "allProjects": "همه پروژهها",
+ "allProjectsHint": "تستها از {{project}} استفاده میکنند. پیشفرض اعمال میشود مگر آنکه پروژهای بازنویسی داشته باشد.",
+ "loadingContexts": "در حال بارگذاری بافتها...",
+ "projectHint": "ذخیره فقط {{project}} را بازنویسی میکند.",
+ "projectOverrideContext": "بافت بازنویسی پروژه",
+ "scopeDescriptionAllProjects": "پیشفرض برای هر پروژهای که بازنویسی OpenCode مخصوص خود را ندارد.",
+ "scopeDescriptionProject": "فقط پروژه انتخابشده را بازنویسی میکند. تیمهای در حال اجرا تغییر نمیکنند.",
+ "selectProjectContext": "انتخاب بافت پروژه",
+ "selectProjectHint": "پیش از تست مدلهای محلی یا ذخیره پیشفرضها، یک پروژه انتخاب کنید.",
+ "selectValidationContext": "انتخاب بافت اعتبارسنجی",
+ "setAllProjectsDefault": "تنظیم پیشفرض همه پروژهها",
+ "setProjectDefault": "تنظیم پیشفرض پروژه",
+ "thisProject": "این پروژه",
+ "title": "پیشفرضهای OpenCode",
+ "validationContext": "بافت اعتبارسنجی"
+ },
+ "diagnostics": {
+ "copied": "عیبیابی کپی شد",
+ "copiedShort": "کپی شد",
+ "copy": "کپی عیبیابی",
+ "hints": "نکات",
+ "likelyCause": "علت احتمالی:",
+ "windowsSymlinkAdminHint": "Windows: Agent Teams AI را بهعنوان مدیر اجرا کنید"
+ },
+ "models": {
+ "alreadyDefault": "این از قبل پیشفرض انتخابشده OpenCode است.",
+ "empty": "هیچ مدلی یافت نشد.",
+ "emptyFree": "هیچ مدل رایگانی یافت نشد.",
+ "emptyRecommended": "هیچ مدل توصیهشدهای یافت نشد.",
+ "emptyRecommendedFree": "هیچ مدل رایگان توصیهشدهای یافت نشد.",
+ "freeOnly": "فقط رایگان",
+ "launchableDescription": "مسیرهای شناختهشده از پیکربندی OpenCode، مدلهای رایگان داخلی و پیشفرض فعلی. مسیرهای محلی پیش از آماده شدن برای راهاندازی تیم به یک تست موفق نیاز دارند.",
+ "launchableTitle": "مسیرهای مدل OpenCode",
+ "loadingRoutes": "در حال بارگذاری مسیرهای مدل OpenCode...",
+ "noRoutesMatch": "هیچ مسیر مدل OpenCode با «{{query}}» منطبق نیست.",
+ "noneReported": "هنوز هیچ مسیر مدل OpenCode گزارش نشده است. یک مسیر محلی در OpenCode پیکربندی کنید یا از زبانه ارائهدهندگان برای بررسی ارائهدهندگان کاتالوگ استفاده کنید.",
+ "recommendedOnly": "فقط توصیهشده",
+ "searchPlaceholder": "جستجوی مدلها",
+ "selectProjectBeforeTesting": "پیش از تست مدلها، یک بافت پروژه انتخاب کنید.",
+ "selectProjectBeforeTestingDefaults": "پیش از تست یا ذخیره پیشفرضهای OpenCode، یک بافت پروژه انتخاب کنید.",
+ "testInProgress": "تست مدل از قبل در حال اجرا است.",
+ "useInTeamPicker": "ذخیره برای انتخابگر تیم",
+ "validationContextRequired": "برای فعال کردن تست و تنظیم پیشفرض، یک بافت اعتبارسنجی در بالا انتخاب کنید. ذخیره برای انتخابگر تیم فقط مسیر را برای تیمهای جدید ذخیره میکند.",
+ "actionsUnavailable": "اقدامات موقتاً در دسترس نیستند.",
+ "defaultSaveInProgress": "پیشفرض OpenCode در حال ذخیره است.",
+ "routeUnavailableAuth": "این ارائهدهنده پیش از استفاده از این مدل به احراز هویت نیاز دارد.",
+ "routeUnavailableFailed": "این مسیر مدل در آخرین تست اجرای خود ناموفق بود.",
+ "routeUnavailableGeneric": "این مسیر مدل در حال حاضر قابل استفاده نیست.",
+ "routeUnavailableUnknown": "این مدل پیشفرض فعلی OpenCode است، اما هنوز در کاتالوگ زنده در دسترس نیست."
+ },
+ "providers": {
+ "catalog": "کاتالوگ ارائهدهندگان OpenCode",
+ "countFallback": "ارائهدهندگان OpenCode",
+ "description": "{{count}}. ارائهدهندگان متصل و توصیهشده ابتدا نمایش داده میشوند.",
+ "loadMore": "بارگذاری ارائهدهندگان بیشتر",
+ "loading": "در حال بارگذاری ارائهدهندگان OpenCode",
+ "noMatches": "هیچ ارائهدهندهای با آن جستجو منطبق نیست.",
+ "noneReported": "هیچ ارائهدهنده OpenCode توسط زمان اجرای مدیریتشده گزارش نشده است.",
+ "recommended": "توصیهشده",
+ "refreshCatalog": "تازهسازی کاتالوگ",
+ "searchPlaceholder": "جستجوی ارائهدهندگان",
+ "description_few": "{{count}}. ارائهدهندگان متصل و توصیهشده ابتدا نمایش داده میشوند.",
+ "description_many": "{{count}}. ارائهدهندگان متصل و توصیهشده ابتدا نمایش داده میشوند.",
+ "description_one": "{{count}}. ارائهدهندگان متصل و توصیهشده ابتدا نمایش داده میشوند.",
+ "description_other": "{{count}}. ارائهدهندگان متصل و توصیهشده ابتدا نمایش داده میشوند."
+ },
+ "setup": {
+ "loading": "در حال بارگذاری راهاندازی ارائهدهنده..."
+ },
+ "summary": {
+ "defaultModel": "پیشفرض OpenCode: {{model}}",
+ "loading": "در حال بارگذاری زمان اجرای مدیریتشده OpenCode، ارائهدهندگان متصل و پیشفرضهای مدل...",
+ "source": "منبع: {{source}}",
+ "title": "زمان اجرای OpenCode"
+ },
+ "tabs": {
+ "models": "مدلها",
+ "providers": "ارائهدهندگان"
+ },
+ "modelRoutes": {
+ "searchPlaceholder": "جستجوی مسیرهای مدل"
+ },
+ "badges": {
+ "usedInTeamPicker": "ذخیرهشده برای انتخابگر تیم",
+ "free": "رایگان",
+ "local": "محلی",
+ "configured": "پیکربندیشده",
+ "knownRoute": "مسیر شناختهشده",
+ "connected": "متصل",
+ "verified": "تأییدشده",
+ "needsTest": "نیازمند تست",
+ "failed": "ناموفق",
+ "unknown": "نامشخص",
+ "default": "پیشفرض"
+ },
+ "compatibleEndpoint": {
+ "baseUrlPlaceholder": "http://localhost:1234"
+ }
+ },
+ "general": {
+ "agentLanguage": {
+ "description": "زبان برای ارتباط عامل",
+ "descriptionWithDetected": "زبان برای ارتباط عامل (شناساییشده: {{detected}})",
+ "emptyMessage": "هیچ زبانی یافت نشد.",
+ "label": "زبان",
+ "searchPlaceholder": "جستجوی زبان...",
+ "selectPlaceholder": "انتخاب زبان...",
+ "title": "زبان عامل"
+ },
+ "appLanguage": {
+ "description": "زبان برای رابط کاربری برنامه.",
+ "label": "زبان",
+ "title": "زبان برنامه"
+ },
+ "appearance": {
+ "autoExpandAIGroups": {
+ "description": "هنگام باز کردن یک رونوشت یا دریافت پیام جدید، هر نوبت پاسخ را بهطور خودکار گسترش بده",
+ "label": "گسترش پاسخهای هوش مصنوعی بهصورت پیشفرض"
+ },
+ "nativeTitleBar": {
+ "description": "بهجای نوار عنوان سفارشی، از قاب پنجره پیشفرض سیستم استفاده کن",
+ "label": "استفاده از نوار عنوان بومی",
+ "restartConfirm": {
+ "confirmLabel": "راهاندازی مجدد",
+ "message": "برنامه برای اعمال تغییر نوار عنوان باید راهاندازی مجدد شود. اکنون راهاندازی مجدد شود؟",
+ "title": "راهاندازی مجدد لازم است"
+ }
+ },
+ "theme": {
+ "description": "پوسته رنگی مورد علاقه خود را انتخاب کنید",
+ "label": "پوسته",
+ "options": {
+ "dark": "تیره",
+ "light": "روشن",
+ "system": "سیستم"
+ }
+ },
+ "title": "ظاهر"
+ },
+ "browserAccess": {
+ "serverMode": {
+ "description": "برای دسترسی به رابط کاربری از یک مرورگر یا جاسازی در iframe، یک سرور HTTP راهاندازی کن",
+ "label": "فعالسازی حالت سرور"
+ },
+ "title": "دسترسی مرورگر"
+ },
+ "localClaudeRoot": {
+ "actions": {
+ "selectFolder": "انتخاب پوشه",
+ "selectFolderManually": "انتخاب پوشه بهصورت دستی",
+ "useAutoDetect": "استفاده از شناسایی خودکار",
+ "useFolder": "استفاده از پوشه",
+ "usePath": "استفاده از مسیر",
+ "useThisPath": "استفاده از این مسیر",
+ "useWsl": "از Linux/WSL استفاده میکنید؟"
+ },
+ "confirm": {
+ "noProjectsDir": {
+ "message": "این پوشه شامل دایرکتوری «projects» نیست. به هر حال ادامه میدهید؟",
+ "title": "دایرکتوری projects یافت نشد"
+ },
+ "notClaudeDir": {
+ "message": "نام این پوشه «{{folderName}}» است، نه «.claude». به هر حال ادامه میدهید؟",
+ "title": "پوشه انتخابشده .claude نیست"
+ },
+ "noWslPaths": {
+ "message": "نتوانستیم توزیعهای WSL با داده Claude را بهطور خودکار پیدا کنیم. پوشه را بهصورت دستی انتخاب میکنید؟",
+ "title": "هیچ مسیر Claude در WSL یافت نشد"
+ },
+ "wslNoProjectsDir": {
+ "message": "«{{path}}» شامل دایرکتوری «projects» نیست. به هر حال ادامه میدهید؟",
+ "title": "مسیر WSL فاقد دایرکتوری projects است"
+ }
+ },
+ "current": {
+ "autoDetected": "شناساییشده خودکار: {{path}}",
+ "autoDetectedPath": "در حال استفاده از مسیر شناساییشده خودکار",
+ "customPath": "در حال استفاده از مسیر سفارشی",
+ "label": "ریشه محلی فعلی"
+ },
+ "description": "انتخاب کنید کدام پوشه محلی بهعنوان ریشه داده Claude شما در نظر گرفته شود",
+ "errors": {
+ "detectWslFailed": "شناسایی مسیرهای ریشه Claude در WSL ناموفق بود",
+ "loadFailed": "بارگذاری تنظیمات ریشه محلی Claude ناموفق بود",
+ "updateFailed": "بهروزرسانی ریشه Claude ناموفق بود"
+ },
+ "title": "ریشه محلی Claude",
+ "wslModal": {
+ "closeAriaLabel": "بستن پنجره مسیر WSL",
+ "description": "توزیعهای WSL شناساییشده و نامزدهای ریشه Claude",
+ "noProjectsDir": "هیچ دایرکتوری projects شناسایی نشد",
+ "title": "انتخاب ریشه Claude در WSL"
+ }
+ },
+ "privacy": {
+ "telemetry": {
+ "description": "با ارسال دادههای ناشناس خرابی و عملکرد به بهبود برنامه کمک کنید",
+ "label": "ارسال گزارشهای خرابی"
+ },
+ "title": "حریم خصوصی"
+ },
+ "server": {
+ "runningOn": "در حال اجرا روی",
+ "standaloneModeDescription": "در حال اجرا در حالت مستقل. سرور HTTP همیشه فعال است. اعلانهای سیستم در دسترس نیستند - محرکهای اعلان فقط در داخل برنامه ثبت میشوند.",
+ "title": "سرور"
+ },
+ "startup": {
+ "launchAtLogin": {
+ "description": "هنگام ورود، برنامه را بهطور خودکار راهاندازی کن",
+ "label": "راهاندازی هنگام ورود"
+ },
+ "showDockIcon": {
+ "description": "نمایش نماد برنامه در dock (macOS)",
+ "label": "نمایش نماد dock"
+ },
+ "title": "راهاندازی"
+ }
+ },
+ "notifications": {
+ "dev": {
+ "descriptionPrefix": "اعلانها ممکن است در حالت توسعه کار نکنند. macOS برنامه را بهجای نام برنامه تولیدی، بهعنوان «Electron» شناسایی میکند (شناسه بسته",
+ "descriptionSuffix": "). برای تأیید مجوزها به System Settings > Notifications > Electron مراجعه کنید.",
+ "title": "حالت توسعه"
+ },
+ "ignoredRepositories": {
+ "description": "اعلانهای این مخازن نادیده گرفته میشوند",
+ "empty": "هیچ مخزنی نادیده گرفته نشده است",
+ "selectPlaceholder": "انتخاب مخزن برای نادیده گرفتن...",
+ "title": "مخازن نادیدهگرفتهشده"
+ },
+ "settings": {
+ "enabled": {
+ "description": "نمایش اعلانهای سیستم برای خطاها و رویدادها",
+ "label": "فعالسازی اعلانهای سیستم"
+ },
+ "sound": {
+ "description": "هنگام ظاهر شدن اعلانها صدا پخش کن",
+ "label": "پخش صدا"
+ },
+ "subagentErrors": {
+ "description": "شناسایی و اطلاعرسانی درباره خطاها در نشستهای زیرعامل",
+ "label": "شامل کردن خطاهای زیرعامل"
+ },
+ "title": "تنظیمات اعلان"
+ },
+ "snooze": {
+ "clear": "پاک کردن تعویق",
+ "description": "توقف موقت اعلانها",
+ "descriptionWithTime": "به تعویق افتاده تا {{time}}",
+ "label": "تعویق اعلانها",
+ "options": {
+ "15": "۱۵ دقیقه",
+ "30": "۳۰ دقیقه",
+ "60": "۱ ساعت",
+ "120": "۲ ساعت",
+ "240": "۴ ساعت",
+ "-1": "تا فردا"
+ },
+ "selectDuration": "انتخاب مدت..."
+ },
+ "taskCompletion": {
+ "description": "هنگامی که Claude وظایف را به پایان میرساند، اعلانهای بومی سیستمعامل دریافت کنید - صداها، بنرها و نشانهای Dock/نوار وظیفه. روی macOS، Linux و Windows کار میکند.",
+ "installPlugin": "نصب پلاگین claude-notifications-go",
+ "title": "اعلانهای تکمیل وظیفه"
+ },
+ "team": {
+ "allTasksCompleted": {
+ "description": "هنگامی که هر وظیفه در یک تیم به وضعیت تکمیلشده میرسد اطلاع بده",
+ "label": "همه وظایف تکمیل شدند"
+ },
+ "autoResumeOnRateLimit": {
+ "description": "هنگامی که Claude زمان بازنشانی را گزارش میدهد، یک تلنگر پیگیری برای سرتیم پس از بازنشانی محدودیت زمانبندی کن",
+ "label": "ازسرگیری خودکار پس از محدودیت نرخ"
+ },
+ "clarifications": {
+ "description": "هنگامی که یک وظیفه به ورودی شما نیاز دارد، اعلانهای بومی سیستمعامل نمایش بده",
+ "label": "اعلانهای شفافسازی وظیفه"
+ },
+ "crossTeamMessage": {
+ "description": "هنگامی که پیامی از تیم دیگری میرسد اطلاع بده",
+ "label": "اعلانهای پیام بینتیمی"
+ },
+ "leadInbox": {
+ "description": "هنگامی که همتیمیها به سرتیم پیام میفرستند اطلاع بده",
+ "label": "اعلانهای صندوق ورودی سرتیم"
+ },
+ "statusChange": {
+ "description": "هنگامی که وضعیت یک وظیفه تغییر میکند، اعلانهای بومی سیستمعامل نمایش بده",
+ "label": "اعلانهای تغییر وضعیت وظیفه",
+ "onlySolo": {
+ "description": "فقط زمانی اطلاع بده که تیم هیچ همتیمی ندارد",
+ "label": "فقط در حالت تکنفره"
+ },
+ "statuses": {
+ "description": "کدام وضعیتهای هدف یک اعلان را فعال میکنند",
+ "label": "اطلاعرسانی در این وضعیتها",
+ "options": {
+ "approved": "تأییدشده",
+ "completed": "تکمیلشده",
+ "deleted": "حذفشده",
+ "in_progress": "آغازشده",
+ "needsFix": "نیازمند رفع",
+ "pending": "در انتظار",
+ "review": "بازبینی"
+ }
+ }
+ },
+ "taskComments": {
+ "description": "هنگامی که عاملها روی وظایف نظر میدهند، اعلانهای بومی سیستمعامل نمایش بده",
+ "label": "اعلانهای نظر وظیفه"
+ },
+ "taskCreated": {
+ "description": "هنگامی که یک وظیفه جدید ایجاد میشود، اعلانهای بومی سیستمعامل نمایش بده",
+ "label": "اعلانهای ایجاد وظیفه"
+ },
+ "teamLaunched": {
+ "description": "هنگامی که یک تیم راهاندازی را به پایان رسانده و آماده است اطلاع بده",
+ "label": "اعلانهای راهاندازی تیم"
+ },
+ "title": "اعلانهای تیم",
+ "toolApproval": {
+ "description": "هنگامی که یک ابزار به تأیید شما نیاز دارد (اجازه/رد) در حالی که برنامه در فوکوس نیست اطلاع بده",
+ "label": "اعلانهای تأیید ابزار"
+ },
+ "userInbox": {
+ "description": "هنگامی که همتیمیها به شما پیام میفرستند اطلاع بده",
+ "label": "اعلانهای صندوق ورودی کاربر"
+ }
+ },
+ "test": {
+ "action": "ارسال تست",
+ "description": "یک اعلان تست برای تأیید تحویل ارسال کنید",
+ "failedToSend": "ارسال اعلان تست ناموفق بود",
+ "label": "اعلان تست",
+ "sending": "در حال ارسال...",
+ "sent": "ارسال شد!",
+ "unknownError": "خطای نامشخص"
+ }
+ },
+ "advanced": {
+ "about": {
+ "appIconAlt": "نماد برنامه",
+ "description": "تیمهای عامل هوش مصنوعی را سرهم کنید که بهطور مستقل و موازی کار میکنند، بین تیمها ارتباط برقرار میکنند و وظایف را روی یک تخته kanban مدیریت میکنند - با بازبینی کد داخلی، نظارت زنده بر فرایند و دید کامل ابزار.",
+ "standalone": "مستقل",
+ "title": "درباره",
+ "version": "نسخه {{version}}"
+ },
+ "configuration": {
+ "editConfig": "ویرایش پیکربندی",
+ "exportConfig": "خروجی پیکربندی",
+ "importConfig": "ورودی پیکربندی",
+ "openInEditor": "باز کردن در ویرایشگر",
+ "resetToDefaults": "بازنشانی به پیشفرضها",
+ "title": "پیکربندی"
+ },
+ "updates": {
+ "available": "نسخه {{version}} در دسترس است",
+ "check": "بررسی بهروزرسانیها",
+ "checking": "در حال بررسی...",
+ "ready": "بهروزرسانی آماده است",
+ "unknownVersion": "نامشخص",
+ "upToDate": "بهروز"
+ },
+ "appName": "Agent Teams AI"
+ },
+ "configEditor": {
+ "errors": {
+ "loadFailed": "بارگذاری پیکربندی ناموفق بود",
+ "saveFailed": "ذخیره پیکربندی ناموفق بود"
+ },
+ "footer": {
+ "autoSave": "تغییرات پس از ویرایش بهطور خودکار ذخیره میشوند",
+ "toClose": "برای بستن",
+ "escapeKey": "Esc"
+ },
+ "loading": "در حال بارگذاری پیکربندی...",
+ "status": {
+ "invalidJson": "JSON نامعتبر",
+ "saveFailed": "ذخیره ناموفق بود",
+ "saved": "ذخیره شد",
+ "saving": "در حال ذخیره..."
+ },
+ "title": "ویرایش پیکربندی"
+ },
+ "notificationTriggers": {
+ "add": {
+ "cancel": "لغو",
+ "submit": "افزودن محرک",
+ "title": "افزودن محرک سفارشی"
+ },
+ "builtin": {
+ "description": "محرکهای پیشفرضی که همراه برنامه میآیند. میتوانید آنها را فعال یا غیرفعال کرده و الگوهایشان را سفارشی کنید.",
+ "title": "محرکهای داخلی"
+ },
+ "card": {
+ "builtinBadge": "داخلی",
+ "collapseAriaLabel": "جمع کردن",
+ "deleteAriaLabel": "حذف محرک",
+ "editNameAriaLabel": "ویرایش نام",
+ "expandAriaLabel": "گسترش"
+ },
+ "color": {
+ "customHexTitle": "رنگ hex سفارشی",
+ "invalidHex": "hex نامعتبر"
+ },
+ "configuration": {
+ "alertIfGreaterThan": "هشدار اگر >",
+ "emptyPatternHint": "برای تطبیق با تمام محتوا خالی بگذارید. از نحو regex جاوااسکریپت استفاده میکند.",
+ "errorStatusDescription": "زمانی فعال میشود که اجرای یک ابزار خطایی گزارش کند (is_error: true).",
+ "tokensUnit": "توکن",
+ "matchPatternPlaceholder": "مثلاً error|failed|exception"
+ },
+ "custom": {
+ "description": "محرکهای خود را ایجاد کنید تا برای الگوها یا خروجیهای ابزار خاص مطلع شوید.",
+ "empty": "هنوز هیچ محرک سفارشی پیکربندی نشده است.",
+ "title": "محرکهای سفارشی"
+ },
+ "errors": {
+ "invalidRegexPattern": "الگوی regex نامعتبر"
+ },
+ "fields": {
+ "contentType": "نوع محتوا",
+ "matchField": "فیلد تطبیق",
+ "matchPattern": "الگوی تطبیق (Regex)",
+ "scopeToolName": "دامنه / نام ابزار",
+ "scopeToolNameOptional": "دامنه / نام ابزار (اختیاری)",
+ "threshold": "آستانه",
+ "tokenType": "نوع توکن",
+ "triggerNamePlaceholder": "مثلاً هشدار شکست ساخت",
+ "triggerNameRequired": "نام محرک *"
+ },
+ "ignorePatterns": {
+ "hint": "برای افزودن Enter را فشار دهید. اگر هر الگویی مطابقت کند، اعلان رد میشود.",
+ "placeholder": "افزودن regex نادیدهگیری...",
+ "removeAriaLabel": "حذف الگوی نادیدهگیری",
+ "summary": "پیشرفته: قوانین استثنا",
+ "title": "الگوهای نادیدهگیری (در صورت مطابقت رد شود)"
+ },
+ "options": {
+ "contentTypes": {
+ "text": "خروجی متنی",
+ "thinking": "تفکر",
+ "tool_result": "نتیجه ابزار",
+ "tool_use": "استفاده از ابزار"
+ },
+ "matchFields": {
+ "args": "آرگومانها",
+ "command": "فرمان",
+ "content": "محتوا",
+ "description": "توضیح",
+ "file_path": "مسیر فایل",
+ "fullInput": "ورودی کامل (JSON)",
+ "glob": "فیلتر Glob",
+ "new_string": "رشته جدید",
+ "old_string": "رشته قدیمی",
+ "path": "مسیر",
+ "pattern": "الگو",
+ "prompt": "پرامپت",
+ "query": "پرسوجو",
+ "skill": "نام مهارت",
+ "subagent_type": "نوع زیرعامل",
+ "text": "محتوای متنی",
+ "thinking": "محتوای تفکر",
+ "url": "URL"
+ },
+ "modes": {
+ "content_match": "الگوی محتوا",
+ "error_status": "خطای اجرا",
+ "token_threshold": "مصرف بالای توکن"
+ },
+ "tokenTypes": {
+ "input": "توکنهای ورودی",
+ "output": "توکنهای خروجی",
+ "total": "کل توکنها"
+ },
+ "toolNames": {
+ "anyTool": "هر ابزاری"
+ }
+ },
+ "preview": {
+ "defaultTestTriggerName": "محرک تست",
+ "detectedSuffix": "خطا شناسایی میشد",
+ "more": "...و {{count}} مورد دیگر",
+ "more_few": "...و {{count}} مورد دیگر",
+ "more_many": "...و {{count}} مورد دیگر",
+ "more_one": "...و {{count}} مورد دیگر",
+ "more_other": "...و {{count}} مورد دیگر",
+ "testTrigger": "محرک تست",
+ "testing": "در حال تست...",
+ "title": "پیشنمایش",
+ "truncatedWarning": "جستجو زودتر متوقف شد (انقضای زمان یا محدودیت تعداد). تطابقهای واقعی ممکن است بیشتر باشد.",
+ "viewSession": "مشاهده نشست"
+ },
+ "repositoryScope": {
+ "empty": "هیچ مخزنی انتخاب نشده است - محرک برای همه مخازن اعمال میشود",
+ "hint": "هنگامی که مخازن انتخاب میشوند، این محرک فقط برای خطاهای آن مخازن فعال میشود.",
+ "placeholder": "انتخاب مخزن برای افزودن...",
+ "summary": "پیشرفته: دامنه مخزن",
+ "title": "محدود کردن به مخازن (فقط برای مخازن انتخابشده اعمال میشود)"
+ },
+ "sections": {
+ "configuration": "پیکربندی",
+ "dotColor": "رنگ نقطه",
+ "generalInfo": "اطلاعات عمومی",
+ "triggerCondition": "شرط محرک"
+ }
+ },
+ "workspaceProfiles": {
+ "actions": {
+ "addProfile": "افزودن نمایه",
+ "cancel": "لغو",
+ "deleteProfile": "حذف نمایه",
+ "editProfile": "ویرایش نمایه",
+ "save": "ذخیره"
+ },
+ "authMethods": {
+ "agent": "عامل SSH",
+ "auto": "خودکار (از پیکربندی SSH)",
+ "password": "رمز عبور",
+ "privateKey": "کلید خصوصی"
+ },
+ "deleteConfirm": {
+ "confirmLabel": "حذف",
+ "message": "آیا مطمئنید که میخواهید «{{name}}» را حذف کنید؟ این عمل قابل بازگشت نیست.",
+ "title": "حذف نمایه"
+ },
+ "description": "نمایههای اتصال SSH را برای اتصال مجدد سریع ذخیره کنید",
+ "empty": {
+ "description": "برای اتصال سریع یک نمایه SSH اضافه کنید",
+ "title": "هیچ نمایه ذخیرهشدهای نیست"
+ },
+ "form": {
+ "authentication": "احراز هویت",
+ "host": "میزبان",
+ "name": "نام",
+ "passwordPrompt": "هنگام اتصال، رمز عبور از شما خواسته خواهد شد.",
+ "port": "درگاه",
+ "privateKeyPath": "مسیر کلید خصوصی",
+ "username": "نام کاربری",
+ "namePlaceholder": "سرور من",
+ "hostPlaceholder": "نام میزبان یا IP",
+ "usernamePlaceholder": "user"
+ },
+ "loading": "در حال بارگذاری نمایهها...",
+ "title": "نمایههای فضای کاری"
+ },
+ "connection": {
+ "actions": {
+ "connect": "اتصال",
+ "connecting": "در حال اتصال...",
+ "disconnect": "قطع اتصال",
+ "testConnection": "تست اتصال",
+ "testing": "در حال تست..."
+ },
+ "currentMode": {
+ "description": "منبع داده برای فایلهای نشست",
+ "label": "حالت فعلی",
+ "local": "محلی ({{path}})"
+ },
+ "description": "برای مشاهده نشستهای Claude Code در حال اجرا، به یک ماشین راه دور متصل شوید",
+ "form": {
+ "authentication": "احراز هویت",
+ "host": "میزبان",
+ "password": "رمز عبور",
+ "port": "درگاه",
+ "privateKeyPath": "مسیر کلید خصوصی",
+ "username": "نام کاربری",
+ "hostPlaceholder": "نام میزبان یا نام مستعار پیکربندی SSH",
+ "usernamePlaceholder": "user"
+ },
+ "savedProfiles": {
+ "title": "نمایههای ذخیرهشده"
+ },
+ "ssh": {
+ "title": "اتصال SSH"
+ },
+ "status": {
+ "connectedTo": "متصل به {{host}}",
+ "remoteSessions": "در حال مشاهده نشستهای راه دور از طریق SSH"
+ },
+ "test": {
+ "failed": "اتصال ناموفق بود: {{error}}",
+ "success": "اتصال موفق بود",
+ "unknownError": "خطای نامشخص"
+ },
+ "title": "اتصال راه دور"
+ },
+ "providerRuntime": {
+ "actions": {
+ "cancel": "لغو",
+ "cancelLogin": "لغو ورود",
+ "connectChatGpt": "اتصال ChatGPT",
+ "delete": "حذف",
+ "disable": "غیرفعال کردن",
+ "disconnectAccount": "قطع اتصال حساب",
+ "generateLink": "تولید پیوند",
+ "openLogin": "باز کردن ورود",
+ "reconnectAnthropic": "اتصال مجدد Anthropic",
+ "refresh": "تازهسازی",
+ "replaceKey": "جایگزینی کلید",
+ "saveEndpoint": "ذخیره نقطه پایانی",
+ "saveKey": "ذخیره کلید",
+ "saving": "در حال ذخیره...",
+ "setApiKey": "تنظیم کلید API",
+ "updateKey": "بهروزرسانی کلید",
+ "useCode": "استفاده از کد"
+ },
+ "apiKey": {
+ "loadingStoredCredentials": "در حال بارگذاری اعتبارنامههای ذخیرهشده...",
+ "projectScope": "پروژه",
+ "scope": "دامنه",
+ "storedIn": "ذخیرهشده در {{backend}}",
+ "userScope": "کاربر",
+ "storedInApp": "ذخیرهشده در برنامه",
+ "providers": {
+ "anthropic": {
+ "name": "کلید API Anthropic",
+ "title": "کلید API",
+ "description": "از یک کلید API مستقیم Anthropic برای دسترسی صورتحسابمحور API استفاده کنید. نشست اشتراک Anthropic شما هنگام بازگشت در دسترس میماند.",
+ "placeholder": "sk-ant-..."
+ },
+ "codex": {
+ "name": "کلید API Codex",
+ "title": "کلید API",
+ "description": "از یک کلید API OpenAI بهعنوان مسیر احراز هویت ثانویه Codex استفاده کنید. اگر Codex را به حالت کلید API تغییر دهید، برنامه OPENAI_API_KEY را برای راهاندازیهای بومی در CODEX_API_KEY بازتاب میدهد.",
+ "placeholder": "sk-proj-..."
+ },
+ "gemini": {
+ "name": "کلید API Gemini",
+ "title": "دسترسی API",
+ "description": "از `GEMINI_API_KEY` برای بکاند Gemini API استفاده کنید. CLI SDK و ADC به آن نیاز ندارند.",
+ "placeholder": "AIza..."
+ }
+ }
+ },
+ "codex": {
+ "account": {
+ "appServer": "سرور برنامه: {{state}}",
+ "connected": "متصل",
+ "description": "نشست حساب سرور برنامه محلی Codex را که راهاندازیهای بومی پشتیبانیشده با اشتراک را تأمین میکند مدیریت کنید.",
+ "loginInProgress": "ورود در حال انجام",
+ "plan": "پلن: {{plan}}",
+ "reconnectRequired": "اتصال مجدد لازم است",
+ "title": "حساب ChatGPT",
+ "hints": {
+ "autoUsesApiKeyUntilChatgpt": "{{message}} حالت خودکار تا زمان اتصال ChatGPT از کلید API شناساییشده استفاده خواهد کرد.",
+ "detectedApiKeyNeedsApiMode": "{{message}} کلید API شناساییشده فقط پس از تغییر Codex به حالت کلید API استفاده میشود.",
+ "localArtifactsNoSession": "Codex CLI در حال حاضر هیچ حساب فعال ChatGPT را گزارش نمیکند. دادههای محلی حساب Codex وجود دارد، اما هیچ نشست مدیریتشده فعالی انتخاب نشده است. محدودیتهای استفاده فقط پس از آنکه Codex CLI یکی را ببیند اینجا ظاهر میشوند.",
+ "noActiveAccount": "Codex CLI در حال حاضر هیچ حساب فعال ChatGPT را گزارش نمیکند. محدودیتهای استفاده فقط پس از آنکه Codex CLI یکی را ببیند اینجا ظاهر میشوند.",
+ "reconnectBeforeUsage": "Codex یک حساب ChatGPT بهصورت محلی انتخابشده دارد، اما نشست فعلی پیش از آنکه محدودیتهای استفاده اینجا بارگذاری شوند نیازمند اتصال مجدد است.",
+ "usageLimitsAfterReport": "محدودیتهای استفاده پس از آنکه Codex آنها را برای حساب ChatGPT متصل گزارش کند اینجا ظاهر میشوند."
+ }
+ },
+ "install": {
+ "checking": "در حال بررسی",
+ "downloading": "در حال دانلود",
+ "installCli": "نصب Codex CLI",
+ "installing": "در حال نصب",
+ "retryInstall": "تلاش مجدد برای نصب",
+ "title": "نصب Codex CLI در دادههای برنامه"
+ },
+ "rateLimits": {
+ "credits": "اعتبارها",
+ "creditsDescription": "اعتبارها جدا از مصرف اشتراک پنجرهمحور نمایش داده میشوند و ممکن است برای نشستهای ChatGPT پشتیبانیشده با پلن در دسترس نباشند.",
+ "noSecondaryWindow": "Codex برای این تصویر لحظهای حساب، پنجره ثانویهای برنگرداند.",
+ "notReported": "گزارش نشده",
+ "primaryReset": "بازنشانی اولیه",
+ "primaryUsed": "استفادهشده اولیه",
+ "primaryWindow": "پنجره اولیه",
+ "remainingLeft": "{{value}} باقیمانده",
+ "remainingUnknown": "باقیمانده نامشخص",
+ "secondaryReset": "بازنشانی ثانویه",
+ "secondaryUsed": "استفادهشده ثانویه",
+ "secondaryWindow": "پنجره ثانویه",
+ "usedQuotaNote": "این درصدها سهمیه استفادهشده را نشان میدهند، نه سهمیه باقیمانده.",
+ "weeklyReset": "بازنشانی هفتگی",
+ "weeklyUsed": "استفادهشده هفتگی",
+ "weeklyUsedOneWeek": "استفادهشده هفتگی (۱ هفته)",
+ "weeklyWindow": "پنجره هفتگی",
+ "secondaryFallback": "ثانویه",
+ "secondaryWindowNote": " محدودیتهای هفتگی بهطور جداگانه در پنجره {{window}} نمایش داده میشوند.",
+ "usageExplanationGeneric": "سهمیه استفادهشده را نشان میدهد، نه سهمیه باقیمانده.",
+ "usageExplanationWindowOnly": "سهمیه استفادهشده در پنجره {{window}} فعلی را نشان میدهد، نه سهمیه باقیمانده.",
+ "usageExplanationWithRemaining": "{{used}} استفادهشده - حدود {{remaining}} در پنجره {{window}} فعلی باقیمانده."
+ }
+ },
+ "compatibleEndpoint": {
+ "authToken": "توکن احراز هویت",
+ "authTokenMissing": "توکن احراز هویت پیکربندی نشده است.",
+ "baseUrl": "URL پایه",
+ "description": "از یک نقطه پایانی زمان اجرای محلی سازگار با Anthropic استفاده کنید.",
+ "keepSavedToken": "برای نگه داشتن توکن ذخیرهشده خالی بگذارید",
+ "title": "نقطه پایانی محلی / سازگار",
+ "tokenStatus": "توکن {{status}}",
+ "validation": {
+ "baseUrlRequired": "URL پایه لازم است",
+ "firstPartyAnthropic": "برای Anthropic دستاول از خودکار، اشتراک یا کلید API استفاده کنید",
+ "httpRequired": "URL پایه باید از http:// یا https:// استفاده کند",
+ "invalidUrl": "URL نامعتبر",
+ "noCredentials": "URL پایه نباید شامل اعتبارنامهها باشد"
+ },
+ "status": {
+ "endpointDisabledTokenKept": "نقطه پایانی غیرفعال شد. توکن ذخیرهشده نگه داشته شد.",
+ "endpointSaved": "نقطه پایانی ذخیره شد",
+ "endpointSavedTokenMissing": "نقطه پایانی ذخیره شد. توکن احراز هویت پیکربندی نشده است."
+ }
+ },
+ "connection": {
+ "authenticationMethod": "روش احراز هویت",
+ "descriptions": {
+ "anthropic": "انتخاب کنید نشستهای Anthropic راهاندازیشده توسط برنامه چگونه احراز هویت شوند.",
+ "codex": "انتخاب کنید Codex هنگام راهاندازی زمان اجرای بومی، اشتراک ChatGPT شما را ترجیح دهد یا یک کلید API را.",
+ "gemini": "دسترسی API اختیاری را پیکربندی کنید. CLI SDK و ADC همچنان بهطور خودکار کشف میشوند.",
+ "opencode": "احراز هویت OpenCode و فهرست ارائهدهنده توسط زمان اجرای OpenCode مدیریت میشوند."
+ },
+ "method": "روش اتصال",
+ "mode": "حالت: {{mode}}",
+ "selected": "انتخابشده",
+ "switching": "در حال تعویض...",
+ "title": "اتصال"
+ },
+ "connectionCards": {
+ "apiKey": {
+ "title": "کلید API"
+ },
+ "anthropic": {
+ "apiKeyDescription": "از ANTHROPIC_API_KEY و صورتحساب API Anthropic استفاده کنید.",
+ "autoDescription": "از پیشفرضهای زمان اجرای Anthropic و بهترین اعتبارنامه محلی در دسترس استفاده کنید.",
+ "hint": "حالت خودکار، Anthropic را روی تعیین اعتبارنامه محلی پیشفرض خود نگه میدارد.",
+ "subscriptionDescription": "از نشست ورود محلی Anthropic و دسترسی اشتراکی خود استفاده کنید.",
+ "subscriptionTitle": "اشتراک Anthropic"
+ },
+ "auto": {
+ "title": "خودکار"
+ },
+ "codex": {
+ "apiKeyDescription": "از صورتحساب OPENAI_API_KEY و CODEX_API_KEY برای راهاندازیهای بومی Codex استفاده کنید.",
+ "autoDescription": "حساب و اشتراک ChatGPT خود را ترجیح دهید. فقط در صورت نیاز از حالت کلید API استفاده کنید.",
+ "chatgptDescription": "از حساب ChatGPT متصل و اشتراک Codex خود استفاده کنید.",
+ "chatgptTitle": "حساب ChatGPT",
+ "hint": "Codex همیشه از طریق زمان اجرای بومی اجرا میشود. حالت خودکار پیش از بازگشت به اعتبارنامههای کلید API، حساب ChatGPT شما را ترجیح میدهد."
+ }
+ },
+ "description": "مدیریت کنید هر ارائهدهنده چگونه متصل میشود و، هنگام پشتیبانی، زمان اجرای چندمدلی باید از کدام بکاند استفاده کند.",
+ "fastMode": {
+ "defaultOff": "پیشفرض خاموش",
+ "description": "هنگامی که مدل و زمان اجرای تعیینشده اجازه دهند، حالت Fast مربوط به Claude Code را بهطور پیشفرض برای راهاندازیهای تیم جدید Anthropic اعمال کن.",
+ "disabledHint": "راهاندازیهای جدید Anthropic روی سرعت عادی میمانند مگر آنکه یک تیم صراحتاً حالت Fast را فعال کند.",
+ "enabledHint": "راهاندازیهای جدید Anthropic هنگامی که مدل تعیینشده پشتیبانی کند، بهطور پیشفرض حالت Fast را درخواست خواهند کرد.",
+ "notExposed": "این زمان اجرای Anthropic حالت Fast را افشا نمیکند.",
+ "preferFast": "ترجیح Fast",
+ "title": "پیشفرض حالت Fast",
+ "unavailableForRuntime": "حالت Fast در حال حاضر برای این زمان اجرای Anthropic در دسترس نیست."
+ },
+ "alerts": {
+ "anthropicApiKeyMissing": "حالت کلید API انتخاب شده است، اما هنوز هیچ اعتبارنامه API Anthropic در دسترس نیست.",
+ "anthropicStoredKeyAvailable": "یک کلید API ذخیرهشده در دسترس است، اما نشستهای Anthropic راهاندازیشده توسط برنامه تنها پس از تغییر شما به حالت کلید API از آن استفاده میکنند.",
+ "anthropicSubscriptionMissing": "حالت اشتراک Anthropic انتخاب شده است. برای استفاده از این ارائهدهنده با Anthropic وارد شوید.",
+ "authTokenMissing": "توکن احراز هویت پیکربندی نشده است. بسیاری از نقاط پایانی محلی سازگار با Anthropic به یک توکن غیرخالی نیاز دارند.",
+ "chatgptLoginPending": "در انتظار اتمام ورود حساب ChatGPT...",
+ "chatgptLoginStarting": "در حال شروع ورود ChatGPT...",
+ "codexApiKeyMissing": "حالت کلید API انتخاب شده است، اما هنوز هیچ اعتبارنامه OPENAI_API_KEY یا CODEX_API_KEY در دسترس نیست.",
+ "codexLocalArtifactsNoSession": "Codex CLI در حال حاضر هیچ حساب فعال ChatGPT ندارد. دادههای محلی حساب Codex وجود دارد، اما هیچ نشست مدیریتشده فعالی انتخاب نشده است.",
+ "codexNeedsReconnect": "Codex یک حساب ChatGPT بهصورت محلی انتخابشده دارد، اما نشست فعلی نیازمند اتصال مجدد است.",
+ "codexNoChatgptAccount": "Codex CLI در حال حاضر هیچ حساب فعال ChatGPT ندارد. برای استفاده از اشتراک خود ChatGPT را متصل کنید.",
+ "codexNoCredential": "هنوز هیچ حساب ChatGPT یا کلید API در دسترس نیست.",
+ "geminiApiUnavailable": "Gemini API در حال حاضر در دسترس نیست. `GEMINI_API_KEY` را اینجا پیکربندی کنید یا از اعتبارنامههای معتبر Google ADC استفاده کنید.",
+ "withApiKeyFallback": "{{message}} برای استفاده از کلید API شناساییشده به حالت کلید API تغییر دهید."
+ },
+ "authModeDescriptions": {
+ "anthropic": {
+ "apiKey": "نشستهای Anthropic راهاندازیشده توسط برنامه را وادار به استفاده از اعتبارنامه کلید API کن.",
+ "auto": "از رفتار پیشفرض زمان اجرا استفاده کن. کلیدهای API ذخیرهشده در این برنامه تنها پس از تغییر به حالت کلید API استفاده میشوند.",
+ "oauth": "نشستهای Anthropic راهاندازیشده توسط برنامه را وادار به استفاده از نشست اشتراک محلی Anthropic کن."
+ },
+ "codex": {
+ "apiKey": "راهاندازیهای بومی Codex را وادار به استفاده از صورتحساب OPENAI_API_KEY / CODEX_API_KEY کن.",
+ "auto": "هنگامی که حساب ChatGPT شما در دسترس است آن را ترجیح بده. فقط در صورت نیاز به حالت کلید API بازگرد.",
+ "chatgpt": "راهاندازیهای بومی Codex را وادار به استفاده از حساب ChatGPT متصل و اشتراک شما کن."
+ }
+ },
+ "progress": {
+ "applyingConnectionChanges": "در حال اعمال تغییرات اتصال...",
+ "refreshingProviderStatus": "در حال تازهسازی وضعیت ارائهدهنده...",
+ "savingCompatibleEndpoint": "در حال ذخیره نقطه پایانی سازگار...",
+ "switchingAnthropicSubscription": "در حال تعویض به اشتراک Anthropic...",
+ "switchingApiKey": "در حال تعویض به کلید API...",
+ "switchingApiKeyMode": "در حال تعویض به حالت کلید API...",
+ "switchingAuto": "در حال تعویض به خودکار...",
+ "switchingChatgpt": "در حال تعویض به حالت حساب ChatGPT..."
+ },
+ "provider": "ارائهدهنده",
+ "runtime": {
+ "descriptions": {
+ "anthropic": "Anthropic در حال حاضر انتخابگر بکاند زمان اجرای جداگانهای ندارد.",
+ "codex": "Codex اکنون فقط از طریق مسیر زمان اجرای بومی اجرا میشود.",
+ "gemini": "انتخاب کنید چندمدلی باید از کدام بکاند زمان اجرای Gemini استفاده کند.",
+ "opencode": "OpenCode از میزبان زمان اجرای مدیریتشده خود استفاده میکند. دسکتاپ در حال حاضر فقط وضعیت را افشا میکند."
+ },
+ "title": "زمان اجرا",
+ "updating": "در حال بهروزرسانی زمان اجرا..."
+ },
+ "runtimeSummary": "زمان اجرا: {{runtime}}",
+ "status": {
+ "configured": "پیکربندیشده",
+ "enabled": "فعال",
+ "notConfigured": "پیکربندینشده",
+ "notSet": "تنظیمنشده",
+ "off": "خاموش",
+ "unknown": "نامشخص"
+ },
+ "title": "تنظیمات ارائهدهنده",
+ "usage": {
+ "apiKey": "در حال استفاده از کلید API",
+ "apiKeyRequired": "کلید API لازم است",
+ "compatibleEndpoint": "در حال استفاده از نقطه پایانی سازگار",
+ "notConnected": "متصل نیست",
+ "usingMethod": "در حال استفاده از {{method}}"
+ },
+ "errors": {
+ "apiKeyDeletedRefreshFailed": "کلید API حذف شد، اما تازهسازی وضعیت ارائهدهنده ناموفق بود.",
+ "apiKeySavedRefreshFailed": "کلید API ذخیره شد، اما تازهسازی وضعیت ارائهدهنده ناموفق بود.",
+ "connectionUpdatedRefreshFailed": "اتصال بهروزرسانی شد، اما تازهسازی وضعیت ارائهدهنده ناموفق بود.",
+ "deleteApiKey": "حذف کلید API ناموفق بود",
+ "disableEndpoint": "غیرفعال کردن نقطه پایانی ناموفق بود",
+ "endpointDisabledRefreshFailed": "نقطه پایانی غیرفعال شد، اما تازهسازی وضعیت ارائهدهنده ناموفق بود.",
+ "endpointSavedRefreshFailed": "نقطه پایانی ذخیره شد، اما تازهسازی وضعیت ارائهدهنده ناموفق بود.",
+ "refreshCodexAccount": "تازهسازی حساب Codex ناموفق بود",
+ "saveApiKey": "ذخیره کلید API ناموفق بود",
+ "saveEndpoint": "ذخیره نقطه پایانی ناموفق بود",
+ "updateAnthropicFastMode": "بهروزرسانی حالت Fast مربوط به Anthropic ناموفق بود",
+ "updateConnection": "بهروزرسانی اتصال ناموفق بود",
+ "updateRuntimeBackend": "بهروزرسانی بکاند زمان اجرا ناموفق بود",
+ "apiKeyRequired": "کلید API لازم است"
+ },
+ "connectionUi": {
+ "authMode": {
+ "auto": "خودکار",
+ "oauth": "اشتراک / OAuth",
+ "chatgpt": "حساب ChatGPT",
+ "apiKey": "کلید API",
+ "anthropicSubscription": "اشتراک Anthropic"
+ },
+ "authMethod": {
+ "apiKey": "کلید API",
+ "apiKeyHelper": "کمککننده کلید API",
+ "oauth": "OAuth",
+ "claudeSubscription": "اشتراک Claude",
+ "geminiCli": "Gemini CLI",
+ "googleAccount": "حساب Google",
+ "serviceAccount": "حساب سرویس"
+ },
+ "runtime": {
+ "codexNative": "Codex بومی",
+ "currentRuntime": "زمان اجرای فعلی",
+ "selectedRuntime": "زمان اجرای انتخابشده",
+ "summary": "{{prefix}}: {{runtime}}"
+ },
+ "status": {
+ "checking": "در حال بررسی...",
+ "modelsAvailable": "مدلها در دسترس هستند",
+ "checked": "بررسیشده",
+ "providerActivity": "فعالیت ارائهدهنده",
+ "notConnected": "متصل نیست",
+ "startingChatGptLogin": "در حال شروع ورود ChatGPT...",
+ "waitingForChatGptLogin": "در انتظار ورود حساب ChatGPT...",
+ "chatGptVerificationDegraded": "حساب ChatGPT شناسایی شد - تأیید حساب در حال حاضر کاهشیافته است.",
+ "chatGptAccountReady": "حساب ChatGPT آماده است",
+ "apiKeyReady": "کلید API آماده است",
+ "codexLocalAccountNeedsReconnect": "Codex یک حساب ChatGPT بهصورت محلی انتخابشده دارد، اما نشست فعلی نیازمند اتصال مجدد است.",
+ "codexNoActiveManagedSession": "Codex CLI هیچ ورود فعال ChatGPT را گزارش نمیکند. دادههای محلی حساب Codex وجود دارد، اما هیچ نشست مدیریتشده فعالی انتخاب نشده است.",
+ "codexNoActiveChatGptLogin": "Codex CLI هیچ ورود فعال ChatGPT را گزارش نمیکند",
+ "connectChatGptForSubscription": "برای استفاده از اشتراک Codex خود یک حساب ChatGPT متصل کنید.",
+ "codexNativeReady": "Codex بومی آماده است",
+ "codexNativeUnavailable": "Codex بومی در دسترس نیست",
+ "unavailableInCurrentRuntime": "در زمان اجرای فعلی در دسترس نیست",
+ "connectedViaApiKey": "متصل از طریق کلید API",
+ "apiKeyConfiguredNotVerified": "کلید API پیکربندی شد، اما هنوز تأیید نشده است",
+ "apiKeyModeMissingCredential": "حالت کلید API انتخاب شد، اما هیچ کلید API پیکربندی نشده است",
+ "connectedVia": "متصل از طریق {{method}}",
+ "unableToVerify": "تأیید ممکن نیست"
+ },
+ "mode": {
+ "selectedAuth": "احراز هویت انتخابشده: {{authMode}}",
+ "preferredAuth": "احراز هویت ترجیحی: {{authMode}}"
+ },
+ "credential": {
+ "apiKeyConfigured": "کلید API پیکربندی شده است",
+ "savedApiKeyAvailable": "کلید API ذخیرهشده در بخش مدیریت در دسترس است",
+ "apiKeyAlsoConfigured": "کلید API نیز در بخش مدیریت پیکربندی شده است",
+ "apiKeyConfiguredInManage": "کلید API در بخش مدیریت پیکربندی شده است",
+ "apiKeyFallbackInManage": "کلید API نیز در بخش مدیریت بهعنوان جایگزین در دسترس است",
+ "availableAsFallback": "{{summary}} - در دسترس بهعنوان جایگزین",
+ "savedApiKeyAvailableIfSwitch": "اگر به حالت کلید API تغییر دهید، کلید API ذخیرهشده در بخش مدیریت در دسترس است",
+ "availableIfSwitch": "{{summary}} - در صورت تغییر به حالت کلید API در دسترس است",
+ "autoWillUseUntilChatGpt": "{{summary}} - حالت خودکار تا زمان اتصال ChatGPT از این استفاده خواهد کرد"
+ },
+ "actions": {
+ "connect": "اتصال",
+ "connectAnthropic": "اتصال Anthropic",
+ "connectChatGpt": "اتصال ChatGPT",
+ "disconnect": "قطع اتصال",
+ "openLogin": "باز کردن ورود"
+ },
+ "disconnect": {
+ "anthropicTitle": "اشتراک Anthropic قطع شود؟",
+ "anthropic": "این کار نشست اشتراک محلی Anthropic را از زمان اجرای Claude CLI حذف میکند.",
+ "anthropicWithApiKey": "این کار نشست اشتراک محلی Anthropic را از زمان اجرای Claude CLI حذف میکند. کلیدهای API ذخیرهشده در بخش مدیریت در دسترس میمانند.",
+ "geminiTitle": "Gemini CLI قطع شود؟",
+ "gemini": "این کار فراداده نشست محلی Gemini CLI را پاک میکند. اعتبارنامههای خارجی ADC و کلیدهای API ذخیرهشده حذف نمیشوند."
+ }
+ }
+ },
+ "cliRuntime": {
+ "actions": {
+ "checkForUpdates": "بررسی بهروزرسانیها",
+ "checking": "در حال بررسی...",
+ "extensions": "افزونهها",
+ "installRuntime": "نصب {{runtime}}",
+ "manage": "مدیریت",
+ "recheck": "بررسی مجدد",
+ "reinstallRuntime": "نصب مجدد {{runtime}}",
+ "retry": "تلاش مجدد",
+ "update": "بهروزرسانی"
+ },
+ "installer": {
+ "checkingLatest": "در حال بررسی آخرین نسخه...",
+ "downloading": "در حال دانلود...",
+ "failed": "نصب ناموفق بود",
+ "installed": "نسخه {{version}} نصب شد",
+ "installing": "در حال نصب...",
+ "latest": "latest",
+ "verifying": "در حال تأیید checksum..."
+ },
+ "labels": {
+ "multimodel": "چندمدلی"
+ },
+ "loading": {
+ "aiProviders": "در حال بررسی ارائهدهندگان هوش مصنوعی...",
+ "claudeCli": "در حال بررسی Claude CLI..."
+ },
+ "provider": {
+ "backend": "بکاند: {{backend}}",
+ "loadingModels": "در حال بارگذاری مدلها...",
+ "modelsUnavailable": "مدلها برای این نسخه زمان اجرا در دسترس نیستند",
+ "runtime": "زمان اجرا: {{runtime}}"
+ },
+ "providerTerminal": {
+ "authFailed": "احراز هویت ناموفق بود",
+ "authUpdated": "احراز هویت بهروزرسانی شد",
+ "loggedOut": "ارائهدهنده خارج شد",
+ "login": "ورود",
+ "logout": "خروج",
+ "logoutFailed": "خروج ناموفق بود"
+ },
+ "status": {
+ "configuredNotFound": "{{runtime}} پیکربندیشده یافت نشد.",
+ "foundButFailed": "{{runtime}} یافت شد اما در راهاندازی ناموفق بود",
+ "healthCheckFailed": "{{runtime}} پیکربندیشده در بررسی سلامت راهاندازی خود ناموفق بود.",
+ "notInstalled": "{{runtime}} نصب نشده است"
+ },
+ "title": "زمان اجرای CLI"
+ },
+ "cliStatus": {
+ "versionUpgrade": "v{{current}} -> v{{latest}}"
+ }
+}
diff --git a/src/features/localization/renderer/locales/fa/team.json b/src/features/localization/renderer/locales/fa/team.json
new file mode 100644
index 00000000..86468585
--- /dev/null
+++ b/src/features/localization/renderer/locales/fa/team.json
@@ -0,0 +1,2487 @@
+{
+ "activity": {
+ "actions": {
+ "createTaskFromMessage": "ایجاد وظیفه از پیام",
+ "editMessage": "ویرایش پیام",
+ "expandMessage": "گسترش پیام",
+ "replyToMessage": "پاسخ به پیام",
+ "restartTeam": "راهاندازی مجدد تیم"
+ },
+ "authError": {
+ "description": "احراز هویت ناموفق بود. راهاندازی مجدد تیم نشست را تازهسازی میکند و ممکن است این مشکل را حل کند. اگر مشکل ادامه داشت، اعتبارنامههای API خود را بررسی کنید یا بعداً دوباره تلاش کنید."
+ },
+ "automation": {
+ "reviewPickup": "از همتیمی خواسته شد بازبینی را به عهده بگیرد",
+ "stallNudge": "از همتیمی خواسته شد وظیفه متوقفشده را ادامه دهد",
+ "workSyncBody": "از همتیمی خواسته شد کار فعلی را همگامسازی کند"
+ },
+ "badges": {
+ "automation": "خودکارسازی",
+ "bootstrap": "راهاندازی اولیه",
+ "command": "فرمان",
+ "comment": "نظر",
+ "live": "زنده",
+ "note": "یادداشت",
+ "rateLimited": "محدودیت نرخ",
+ "restart": "راهاندازی مجدد",
+ "result": "نتیجه",
+ "session": "نشست",
+ "stallNudge": "تلنگر توقف",
+ "start": "شروع",
+ "workSync": "همگامسازی کار",
+ "agentError": "خطای عامل",
+ "apiError": "خطای API"
+ },
+ "bootstrap": {
+ "acknowledged": "راهاندازی اولیه تأیید شد",
+ "restarting": "در حال راهاندازی مجدد همتیمی",
+ "starting": "در حال شروع همتیمی"
+ },
+ "rawJson": "JSON خام",
+ "unread": "خواندهنشده",
+ "thoughts": {
+ "count": "{{count}} فکر",
+ "count_one": "{{count}} فکر",
+ "expand": "گسترش افکار",
+ "showMore": "نمایش بیشتر",
+ "showLess": "نمایش کمتر",
+ "count_few": "{{count}} فکر",
+ "count_many": "{{count}} فکر",
+ "count_other": "{{count}} فکر",
+ "toolSummary": "🔧 {{summary}}",
+ "titleForMember": "{{name}} - افکار"
+ },
+ "timeline": {
+ "loadingMessages": "در حال بارگذاری پیامها...",
+ "noMessages": "هیچ پیامی نیست",
+ "emptyHint": "برای دیدن فعالیت، به یک عضو پیام بفرستید.",
+ "newSession": "نشست جدید",
+ "olderCount": "+{{count}} قدیمیتر",
+ "showMore": "نمایش {{count}} مورد بیشتر",
+ "showAll": "نمایش همه",
+ "olderCount_one": "+{{count}} قدیمیتر",
+ "olderCount_few": "+{{count}} قدیمیتر",
+ "olderCount_many": "+{{count}} قدیمیتر",
+ "olderCount_other": "+{{count}} قدیمیتر"
+ },
+ "pendingReplies": {
+ "title": "در انتظار پاسخها",
+ "openMember": "باز کردن عضو",
+ "messageSentAwaitingReply": "پیام ارسال شد، در انتظار پاسخ",
+ "awaitingReply": "در انتظار پاسخ",
+ "externalTeam": "تیم خارجی",
+ "crossTeamAwaitingReply": "پیام بینتیمی ارسال شد، در انتظار پاسخ",
+ "user": "کاربر",
+ "awaitingApproval": "در انتظار تأیید"
+ },
+ "reply": {
+ "replyingTo": "در حال پاسخ به",
+ "action": "پاسخ"
+ },
+ "activeTasks": {
+ "inProgress": "در حال انجام",
+ "expandInProgress": "گسترش موارد در حال انجام",
+ "collapseInProgress": "جمع کردن موارد در حال انجام",
+ "reviewing": "در حال بازبینی",
+ "workingOn": "در حال کار روی"
+ },
+ "expandDialog": {
+ "description": "نمای گسترشیافته پیام"
+ }
+ },
+ "create": {
+ "actions": {
+ "create": "ایجاد",
+ "creating": "در حال ایجاد...",
+ "openExisting": "باز کردن تیم موجود",
+ "skipPreflightAndCreate": "رد کردن بررسی اولیه و ایجاد"
+ },
+ "conflict": {
+ "description": "اجرای دو تیم در یک دایرکتوری پرخطر است - ممکن است در ویرایش فایلهای یکسان تداخل کنند. برای جداسازی، استفاده از دایرکتوری متفاوت یا یک git worktree را در نظر بگیرید.",
+ "title": "تیم دیگری با نام «{{team}}» از قبل برای این دایرکتوری کاری در حال اجرا است",
+ "workingDirectory": "دایرکتوری کاری:"
+ },
+ "description": {
+ "copy": "یک تیم جدید بر اساس تیمی موجود ایجاد کنید.",
+ "create": "تیم خود را راهاندازی کرده و انتخاب کنید چگونه شروع شود."
+ },
+ "errors": {
+ "nameExists": "نام تیم از قبل وجود دارد",
+ "nameLaunching": "تیمی با این نام در حال حاضر در حال راهاندازی است",
+ "createConfigFailed": "ایجاد پیکربندی تیم ناموفق بود",
+ "loadProjectsFailed": "بارگذاری پروژهها ناموفق بود"
+ },
+ "fields": {
+ "color": "رنگ (اختیاری)",
+ "description": "توضیح (اختیاری)",
+ "prompt": "پرامپت برای سرتیم (اختیاری)",
+ "teamName": "نام تیم"
+ },
+ "launchAfterCreate": {
+ "description": "تیم را بلافاصله از طریق Claude CLI محلی شروع کن.",
+ "label": "اجرای فرمان پس از ایجاد"
+ },
+ "localOnly": "فقط در حالت محلی Electron در دسترس است.",
+ "onDisk": "روی دیسک:",
+ "placeholders": {
+ "description": "توضیح مختصری از هدف تیم",
+ "prompt": "دستورالعملها برای سرتیم در طول تأمین..."
+ },
+ "saved": "ذخیره شد",
+ "solo": {
+ "description": "فقط سرتیم (فرایند اصلی) شروع خواهد شد - هیچ همتیمیای ایجاد نمیشود. مانند یک نشست عامل معمولی در زمان اجرای انتخابی شما (Claude Code، Codex، OpenCode، Gemini) کار میکند اما با دسترسی به تخته وظایف برای برنامهریزی. با اجتناب از سربار هماهنگی همتیمیها در توکنها صرفهجویی میکند. میتوانید بعداً اعضا را از تنظیمات تیم اضافه کنید.",
+ "label": "تیم تکنفره"
+ },
+ "title": {
+ "copy": "کپی تیم",
+ "create": "ایجاد تیم"
+ },
+ "optional": {
+ "launchSettingsTitle": "تنظیمات اختیاری راهاندازی",
+ "launchSettingsDescription": "پرامپت، ایمنی و بازنویسیهای CLI هنگام نیاز اینجا قرار دارند.",
+ "teamDetailsTitle": "جزئیات اختیاری تیم",
+ "teamDetailsDescription": "جریان پیشفرض را فشرده نگه دارید و فقط زمانی این را باز کنید که بافت اضافی یا رنگ سفارشی میخواهید."
+ },
+ "prepare": {
+ "unsupportedPreload": "نسخه preload فعلی از team:prepareProvisioning پشتیبانی نمیکند. برنامه dev را مجدداً راهاندازی کنید.",
+ "selectWorkingDirectory": "برای اعتبارسنجی محیط راهاندازی، یک دایرکتوری کاری انتخاب کنید.",
+ "someProvidersNeedAttention": "برخی از ارائهدهندگان انتخابشده نیازمند توجه هستند.",
+ "readyWithNotes": "همه ارائهدهندگان انتخابشده آمادهاند، همراه با یادداشتها.",
+ "ready": "همه ارائهدهندگان انتخابشده آمادهاند.",
+ "failed": "آمادهسازی ارائهدهندگان انتخابشده ناموفق بود",
+ "checkingProviders": "در حال بررسی ارائهدهندگان انتخابشده...",
+ "preparingEnvironment": "در حال آمادهسازی محیط...",
+ "selectedProvidersReadyWithNotes": "ارائهدهندگان انتخابشده آمادهاند (همراه با یادداشتها)",
+ "selectedProvidersReady": "ارائهدهندگان انتخابشده آمادهاند"
+ },
+ "validation": {
+ "nameMustContainLetterOrDigit": "نام باید حداقل شامل یک حرف یا رقم باشد",
+ "nameTooLong": "نام بیش از حد طولانی است (حداکثر ۱۲۸ نویسه)",
+ "selectWorkingDirectory": "انتخاب دایرکتوری کاری (cwd)",
+ "memberNameRequired": "نام عضو نمیتواند خالی باشد",
+ "memberNameInvalid": "نام عضو باید با حرف یا عدد شروع شود، فقط از [a-zA-Z0-9._-] استفاده کند، حداکثر ۱۲۸ نویسه",
+ "memberNamesUnique": "نام اعضا باید یکتا باشند",
+ "openCodeLeadModelRequired": "سرتیم OpenCode به یک مدل انتخابشده نیاز دارد.",
+ "openCodeTeammateRequired": "سرتیم OpenCode به حداقل یک همتیمی OpenCode نیاز دارد.",
+ "teamLaunching": "تیم در حال حاضر در حال راهاندازی است",
+ "teamNameExists": "نام تیم از قبل وجود دارد",
+ "checkFormFields": "فیلدهای فرم را بررسی کنید"
+ }
+ },
+ "editTeam": {
+ "actions": {
+ "cancel": "لغو",
+ "save": "ذخیره"
+ },
+ "addMemberLockReason": "برای افزودن همتیمیهای جدید در حالی که تیم زنده است، از گفتوگوی اختصاصی افزودن عضو استفاده کنید.",
+ "description": "تغییر نام، توضیح و رنگ تیم",
+ "errors": {
+ "changesSavedRefreshFailed": "تغییرات تیم ذخیره شد، اما تازهسازی آخرین نما ناموفق بود: {{message}}",
+ "liveRenameBlocked": "همتیمیهای موجود را نمیتوان در حالی که تیم زنده است تغییر نام داد. تغییر نام داده شده: {{names}}",
+ "memberNameEmpty": "نام عضو نمیتواند خالی باشد",
+ "memberNameInvalid": "نام عضو باید با حرف یا عدد شروع شود، فقط از [a-zA-Z0-9._-] استفاده کند، حداکثر ۱۲۸ نویسه",
+ "memberNameNumericSuffix": "نام عضو «{{name}}» مجاز نیست (برای پسوند خودکار Claude CLI رزرو شده است). بهجای آن از «{{base}}» استفاده کنید.",
+ "memberNameReserved": "نام عضو «{{name}}» رزرو شده است",
+ "memberNamesUnique": "نام اعضا باید پیش از ذخیره یکتا باشند",
+ "newLiveTeammates": "همتیمیهای جدید را در حالی که تیم زنده است از گفتوگوی اختصاصی افزودن عضو اضافه کنید. ویرایش تیم فقط از بهروزرسانی همتیمیهای موجود پشتیبانی میکند.",
+ "provisioning": "تنظیمات تیم را نمیتوان در حالی که تأمین هنوز در حال انجام است ویرایش کرد. منتظر بمانید تا راهاندازی به پایان برسد، سپس دوباره تلاش کنید.",
+ "restartFailedMany": "تیم ذخیره شد، اما راهاندازی مجدد این همتیمیها ناموفق بود: {{failures}}",
+ "restartFailedOne": "تیم ذخیره شد، اما راهاندازی مجدد این همتیمی ناموفق بود: {{failures}}",
+ "saveFailed": "ذخیره ناموفق بود",
+ "settingsChanged": "تنظیمات تیم در حالی که این گفتوگو باز بود تغییر کرد. آن را دوباره باز کنید و پیش از ذخیره آخرین وضعیت را بازبینی کنید.",
+ "settingsSavedMembersAndRefreshFailed": "تنظیمات تیم ذخیره شد، اما تغییرات عضو ناموفق بود: {{message}}. تازهسازی نیز ناموفق بود: {{refreshError}}",
+ "settingsSavedMembersFailed": "تنظیمات تیم ذخیره شد، اما تغییرات عضو ناموفق بود: {{message}}",
+ "settingsSavedRefreshFailed": "تنظیمات تیم ذخیره شد، اما تازهسازی آخرین نما ناموفق بود: {{message}}",
+ "teamNameEmpty": "نام تیم نمیتواند خالی باشد",
+ "unsupportedMixedPrimaryMutation": "ویرایشهای زنده همتیمیهای متعلق به لاین اصلی در تیمهای ترکیبی OpenCode هنوز پشتیبانی نمیشود. تیم را متوقف کنید، فهرست اعضا را ویرایش کنید، سپس دوباره راهاندازی کنید. تحت تأثیر: {{names}}"
+ },
+ "fields": {
+ "colorOptional": "رنگ (اختیاری)",
+ "description": "توضیح",
+ "name": "نام"
+ },
+ "memberRestartWarning": "ذخیره این همتیمی را برای اعمال تغییرات نقش، گردشکار، جداسازی worktree، ارائهدهنده، مدل، تلاش یا دسترسی MCP راهاندازی مجدد میکند.",
+ "notices": {
+ "liveRenameBlocked": "ذخیره زنده مسدود شده است زیرا همتیمیهای موجود تغییر نام داده شدند. آن تغییرات هویتی را بازگردانید یا ابتدا تیم را متوقف کنید.",
+ "newLiveTeammates": "همتیمیهای جدید را نمیتوان از ویرایش تیم در حالی که تیم زنده است اضافه کرد. بهجای آن از گفتوگوی افزودن عضو استفاده کنید.",
+ "provisioning": "تأمین تیم هنوز در حال انجام است. ویرایش موقتاً تا اتمام راهاندازی قفل شده است.",
+ "restartMany": "ذخیره این همتیمیها را برای اعمال تغییرات نقش، گردشکار، جداسازی worktree، ارائهدهنده، مدل، تلاش یا دسترسی MCP راهاندازی مجدد یا دوباره راهاندازی میکند: {{names}}.",
+ "restartOne": "ذخیره این همتیمی را برای اعمال تغییرات نقش، گردشکار، جداسازی worktree، ارائهدهنده، مدل، تلاش یا دسترسی MCP راهاندازی مجدد یا دوباره راهاندازی میکند: {{names}}.",
+ "unsupportedMixedPrimaryMutation": "ویرایشها/حذفهای زنده برای همتیمیهای متعلق به لاین اصلی در تیمهای ترکیبی OpenCode نیازمند توقف و راهاندازی مجدد تیم است: {{names}}."
+ },
+ "placeholders": {
+ "description": "توضیح تیم (اختیاری)",
+ "teamName": "نام تیم"
+ },
+ "teamLead": {
+ "changeRuntime": "تغییر زمان اجرای سرتیم",
+ "changeRuntimeDescription": "برای تغییر ارائهدهنده، مدل یا تلاش سرتیم، راهاندازی مجدد تیم را باز کنید.",
+ "modelLockReason": "زمان اجرای سرتیم از راهاندازی مجدد تیم مدیریت میشود.",
+ "readOnlyHint": "نام و نقش سرتیم اینجا فقطخواندنی میمانند. برای تغییر ارائهدهنده، مدل یا تلاش، پنل زمان اجرا را روی ردیف سرتیم باز کنید.",
+ "role": "سرتیم"
+ },
+ "title": "ویرایش تیم"
+ },
+ "memberDraft": {
+ "actions": {
+ "remove": "حذف عضو",
+ "removeAria": "حذف {{name}}",
+ "restore": "بازیابی عضو",
+ "restoreAria": "بازیابی {{name}}"
+ },
+ "anthropicContext": {
+ "defaultSetting": "تنظیم بافت پیشفرض",
+ "description": "بافت Anthropic برای این راهاندازی در سراسر تیم است: {{mode}}. برای تغییر آن از چکباکس محدود کردن بافت در پنل زمان اجرای سرتیم استفاده کنید.",
+ "limitEnabled": "محدودیت ۲۰۰ هزار فعال است"
+ },
+ "mcp": {
+ "buttonInherit": "ارثبری MCP",
+ "buttonScopes": "دامنههای MCP",
+ "chooseScopes": "انتخاب دامنهها",
+ "inheritLead": "ارثبری از سرتیم",
+ "lockedInfo": "فقط MCP مربوط به Agent Teams برای همه همتیمیها فعال است. این همتیمی فقط با سرور Agent Teams راهاندازی میشود.",
+ "mode": "حالت MCP",
+ "scopes": {
+ "local": "محلی",
+ "project": "پروژه",
+ "user": "کاربر"
+ },
+ "serverNames": "نام سرورها",
+ "settingInfo": "MCP مربوط به Agent Teams این همتیمی را فقط با سرور Agent Teams راهاندازی میکند. حالتهای دامنه و فهرست مجاز فقط برای این راهاندازی همتیمی اعمال میشوند.",
+ "strictAllowlist": "فهرست مجاز سختگیرانه",
+ "tooltip": "{{label}}: سیاست ارثبری MCP این عضو را کنترل کنید",
+ "agentTeamsMcp": "MCP مربوط به Agent Teams"
+ },
+ "model": {
+ "ariaLabel": "ارائهدهنده {{provider}}، {{model}}",
+ "currentLeadRuntime": "زمان اجرای فعلی سرتیم",
+ "default": "پیشفرض",
+ "inheritedTooltip": "ارائهدهنده، مدل و تلاش تا زمانی که همگامسازی فعال است از سرتیم به ارث میرسند.",
+ "leadSuffix": "{{label}} (سرتیم)",
+ "liveDisabled": "تغییرات ارائهدهنده، مدل و تلاش در حالی که تیم زنده است غیرفعال هستند. برای اعمال ایمن آنها، تیم را مجدداً متصل کنید.",
+ "lockedActionFallback": "تغییرات زمان اجرای سرتیم، راهاندازی مجدد تیم را باز میکنند، جایی که ارائهدهنده، مدل و تلاش قابل بهروزرسانی هستند.",
+ "restartWholeTeam": "ذخیره آن تغییرات زمان اجرا کل تیم را راهاندازی مجدد میکند."
+ },
+ "nameAria": "نام عضو {{index}}",
+ "nameFallback": "عضو {{index}}",
+ "noRole": "بدون نقش",
+ "removed": "حذفشده",
+ "workflow": {
+ "addTooltip": "افزودن گردشکار همتیمی",
+ "editTooltip": "ویرایش گردشکار همتیمی",
+ "label": "گردشکار (اختیاری)",
+ "placeholder": "این عامل چگونه باید رفتار کند، با دیگران تعامل کند...",
+ "saved": "ذخیره شد"
+ },
+ "worktree": {
+ "description": "این همتیمی را در یک git worktree جداگانه اجرا کنید. اعمال/رد تغییرات آن worktree را هدف قرار میدهد، نه فضای کاری سرتیم را.",
+ "label": "Worktree"
+ },
+ "addMembers": {
+ "title": "افزودن اعضا",
+ "description": "افزودن اعضای جدید به {{teamName}}"
+ },
+ "placeholders": {
+ "name": "member-name",
+ "mcpServers": "github, sentry"
+ }
+ },
+ "detail": {
+ "actions": {
+ "add": "افزودن",
+ "cancel": "لغو",
+ "delete": "حذف",
+ "editCode": "ویرایش کد",
+ "launch": "راهاندازی",
+ "remove": "حذف",
+ "stop": "توقف",
+ "task": "وظیفه",
+ "visualize": "تجسم"
+ },
+ "deleteTeam": {
+ "description": "تیم «{{team}}» حذف شود؟ این عمل برگشتناپذیر است. تمام دادهها و وظایف تیم حذف خواهند شد.",
+ "title": "حذف تیم"
+ },
+ "draft": {
+ "descriptionPrefix": "این یک تیم پیشنویس است -",
+ "descriptionSuffix": "با {{count}} {{member}} پیکربندی شده اما هنوز توسط CLI تأمین نشده است. برای انتخاب مدل و شروع تیم روی راهاندازی کلیک کنید.",
+ "descriptionSuffix_few": "با {{count}} {{member}} پیکربندی شده اما هنوز توسط CLI تأمین نشده است. برای انتخاب مدل و شروع تیم روی راهاندازی کلیک کنید.",
+ "descriptionSuffix_many": "با {{count}} {{member}} پیکربندی شده اما هنوز توسط CLI تأمین نشده است. برای انتخاب مدل و شروع تیم روی راهاندازی کلیک کنید.",
+ "descriptionSuffix_one": "با {{count}} {{member}} پیکربندی شده اما هنوز توسط CLI تأمین نشده است. برای انتخاب مدل و شروع تیم روی راهاندازی کلیک کنید.",
+ "descriptionSuffix_other": "با {{count}} {{member}} پیکربندی شده اما هنوز توسط CLI تأمین نشده است. برای انتخاب مدل و شروع تیم روی راهاندازی کلیک کنید.",
+ "member": "عضو",
+ "member_few": "عضو",
+ "member_many": "عضو",
+ "member_one": "عضو",
+ "member_other": "عضو",
+ "title": "تیم هنوز راهاندازی نشده است"
+ },
+ "invalidTab": "زبانه تیم نامعتبر",
+ "kanbanSafeData": "بارگذاری کامل kanban ناموفق بود. در حال نمایش دادههای ایمن.",
+ "loadFailed": "بارگذاری تیم ناموفق بود",
+ "loading": "در حال بارگذاری تیم",
+ "loadingSidebar": "در حال بارگذاری نوار کناری تیم",
+ "offline": {
+ "offline": "تیم آفلاین است",
+ "partialFailed": "آخرین راهاندازی در میانه راه ناموفق شد",
+ "partialMissing": "آخرین راهاندازی در میانه راه ناموفق شد - {{missing}}/{{expected}} همتیمی نپیوستند",
+ "reconciling": "آخرین راهاندازی هنوز در حال هماهنگسازی است"
+ },
+ "previous": "قبلی: {{paths}}",
+ "removeMember": {
+ "description": "«{{member}}» از تیم حذف شود؟ وظایف و پیامها حفظ میشوند، اما این نام قابل استفاده مجدد نیست.",
+ "title": "حذف عضو"
+ },
+ "sections": {
+ "team": "تیم"
+ },
+ "solo": "تکنفره",
+ "status": {
+ "active": "فعال",
+ "launching": "در حال راهاندازی...",
+ "running": "در حال اجرا"
+ },
+ "telemetry": {
+ "cpu": "CPU",
+ "memory": "حافظه"
+ },
+ "tooltips": {
+ "deleteTeam": "حذف تیم",
+ "editTeam": "ویرایش تیم",
+ "editUnavailableProvisioning": "ویرایش تیم در حالی که تأمین هنوز در حال انجام است در دسترس نیست",
+ "openBuiltInEditor": "باز کردن پروژه در ویرایشگر داخلی",
+ "openTeamGraph": "باز کردن گراف تیم",
+ "stopTeam": "توقف تیم"
+ },
+ "waitingForProvisioning": "دادههای تیم پس از اتمام تأمین ظاهر میشوند",
+ "context": {
+ "title": "بافت",
+ "loading": "در حال بارگذاری...",
+ "noSessionLoaded": "هیچ نشستی بارگذاری نشده است",
+ "closePanel": "بستن پنل بافت {{team}}",
+ "loadingContext": "در حال بارگذاری بافت...",
+ "openLeadSession": "برای مشاهده بافت، نشست سرتیم را باز کنید."
+ }
+ },
+ "review": {
+ "fileHeader": {
+ "actions": {
+ "accept": "پذیرفتن",
+ "discard": "دور انداختن",
+ "discardTooltip": "دور انداختن همه ویرایشهای این فایل",
+ "keepMyDraft": "نگه داشتن پیشنویس من",
+ "reject": "رد کردن",
+ "reloadFromDisk": "بارگذاری مجدد از دیسک",
+ "restore": "بازیابی",
+ "restoreTooltip": "ایجاد/بازیابی این فایل روی دیسک از پیشنمایش",
+ "saveFile": "ذخیره فایل",
+ "saveFileTooltip": "ذخیره فایل روی دیسک"
+ },
+ "badges": {
+ "deleted": "حذفشده",
+ "manualReview": "بازبینی دستی",
+ "new": "جدید",
+ "worktree": "WORKTREE"
+ },
+ "contentSource": {
+ "disk-current": "دیسک فعلی",
+ "file-history": "تاریخچه فایل",
+ "git-fallback": "جایگزین Git",
+ "ledger-exact": "دفتر وظیفه",
+ "ledger-snapshot": "تصویر لحظهای دفتر",
+ "snippet-reconstruction": "بازسازیشده",
+ "unavailable": "محتوا در دسترس نیست"
+ },
+ "contentUnavailable": {
+ "badge": "محتوا در دسترس نیست",
+ "description": "دفتر فراداده این تغییر را ثبت کرد، اما محتوای متنی کامل در دسترس نیست. این معمولاً به معنای محتوای باینری، بزرگ یا فقط-هش است.",
+ "safety": "پذیرفتن/رد کردن خودکار برای این فایل غیرفعال است تا از نوشتن ناایمن روی دیسک جلوگیری شود.",
+ "title": "محتوای متنی در دسترس نیست"
+ },
+ "disabled": {
+ "acceptRejectContentUnavailable": "پذیرفتن/رد کردن غیرفعال است زیرا محتوای متنی کامل در دسترس نیست.",
+ "acceptRejectMissingOnDisk": "پذیرفتن/رد کردن در حالی که فایل روی دیسک مفقود است غیرفعال است.",
+ "rejectBaselineUnavailable": "رد کردن غیرفعال است زیرا مبنای اصلی در دسترس نیست.",
+ "rejectContentUnavailable": "رد کردن غیرفعال است زیرا محتوای متنی کامل در دسترس نیست.",
+ "rejectManualLedgerReview": "رد کردن غیرفعال است زیرا این تغییر دفتر محتوای باینری، بزرگ یا در دسترس نبودنی دارد."
+ },
+ "externalChange": {
+ "changedOnDisk": "روی دیسک تغییر کرد",
+ "deletedOnDisk": "روی دیسک حذف شد",
+ "recreatedOnDisk": "روی دیسک دوباره ایجاد شد"
+ },
+ "missingOnDisk": {
+ "badge": "روی دیسک مفقود است",
+ "description": "ما همچنان میتوانیم پیشنمایشی از گزارشهای عامل نمایش دهیم، اما سیستم فایل شما همگام نیست.",
+ "restorePrefix": "از",
+ "restoreSuffix": "برای نوشتن محتوای پیشنمایش به دیسک استفاده کنید.",
+ "restoreUnavailable": "محتوای کامل فایل برای بازیابی خودکار در دسترس نیست.",
+ "title": "فایل روی دیسک مفقود است"
+ },
+ "pathChange": {
+ "from": "از {{path}}",
+ "to": "به {{path}}"
+ },
+ "worktree": {
+ "isolated": "worktree جداشده"
+ }
+ },
+ "toolbar": {
+ "stats": {
+ "pending": "{{count}} در انتظار",
+ "pending_one": "{{count}} در انتظار",
+ "pending_other": "{{count}} در انتظار",
+ "accepted": "{{count}} پذیرفتهشده",
+ "accepted_one": "{{count}} پذیرفتهشده",
+ "accepted_other": "{{count}} پذیرفتهشده",
+ "rejected": "{{count}} ردشده",
+ "rejected_one": "{{count}} ردشده",
+ "rejected_other": "{{count}} ردشده",
+ "acrossFiles": "در {{count}} فایل",
+ "acrossFiles_one": "در {{count}} فایل",
+ "acrossFiles_other": "در {{count}} فایل",
+ "edited": "{{count}} ویرایششده",
+ "edited_one": "{{count}} ویرایششده",
+ "edited_other": "{{count}} ویرایششده",
+ "pending_few": "{{count}} در انتظار",
+ "pending_many": "{{count}} در انتظار",
+ "accepted_few": "{{count}} پذیرفتهشده",
+ "accepted_many": "{{count}} پذیرفتهشده",
+ "rejected_few": "{{count}} ردشده",
+ "rejected_many": "{{count}} ردشده",
+ "acrossFiles_few": "در {{count}} فایل",
+ "acrossFiles_many": "در {{count}} فایل",
+ "edited_few": "{{count}} ویرایششده",
+ "edited_many": "{{count}} ویرایششده"
+ },
+ "actions": {
+ "auto": "خودکار",
+ "undo": "واگرد",
+ "acceptAll": "پذیرفتن همه",
+ "rejectAll": "رد کردن همه",
+ "applying": "در حال اعمال...",
+ "applyRejections": "اعمال ردها"
+ },
+ "tooltips": {
+ "autoOn": "علامتگذاری خودکار فایلها بهعنوان مشاهدهشده هنگام اسکرول تا انتها (روشن)",
+ "autoOff": "علامتگذاری خودکار فایلها بهعنوان مشاهدهشده هنگام اسکرول تا انتها (خاموش)",
+ "undo": "واگرد آخرین عملیات بازبینی (Ctrl+Z)",
+ "acceptAll": "پذیرفتن همه تغییرات در همه فایلها",
+ "rejectAll": "رد کردن ایمن همه تغییرات قابل رد در همه فایلها",
+ "rejectAllDisabled": "هیچ فایل در انتظاری مبنای اصلی ایمنی برای رد کردن ندارد.",
+ "applyRejections": "اعمال بخشهای ردشده روی دیسک؛ تغییرات پذیرفتهشده به همان صورت نگه داشته میشوند"
+ }
+ },
+ "diffError": {
+ "title": "رندر نمای تفاوت ناموفق بود",
+ "unexpected": "خطای غیرمنتظرهای هنگام رندر تفاوت رخ داد.",
+ "actions": {
+ "retry": "تلاش مجدد"
+ },
+ "raw": {
+ "show": "نمایش داده خام تفاوت",
+ "file": "فایل: {{file}}",
+ "original": "--- اصلی",
+ "modified": "+++ اصلاحشده",
+ "charsTotal": "... ({{count}} نویسه در کل)",
+ "charsTotal_one": "... ({{count}} نویسه در کل)",
+ "charsTotal_other": "... ({{count}} نویسه در کل)",
+ "charsTotal_few": "... ({{count}} نویسه در کل)",
+ "charsTotal_many": "... ({{count}} نویسه در کل)"
+ }
+ },
+ "fileTree": {
+ "viewed": "مشاهدهشده",
+ "badges": {
+ "new": "جدید",
+ "deleted": "حذفشده"
+ },
+ "collapseFolder": "جمع کردن {{name}}",
+ "expandFolder": "گسترش {{name}}",
+ "empty": {
+ "noChangedFiles": "هیچ فایل تغییریافتهای نیست",
+ "noMatchingFiles": "هیچ فایل منطبقی نیست"
+ },
+ "searchPlaceholder": "جستجوی فایلها…",
+ "filters": {
+ "unresolved": "حلنشده",
+ "rejected": "ردشده",
+ "new": "جدید",
+ "clear": "پاک کردن"
+ }
+ },
+ "diffControls": {
+ "previousChunk": "بخش قبلی",
+ "nextChunk": "بخش بعدی",
+ "rejectChange": "رد کردن تغییر (⌘N)",
+ "acceptChange": "پذیرفتن تغییر (⌘Y)",
+ "undo": "واگرد",
+ "keep": "نگه داشتن",
+ "rejectShortcut": "⌘N",
+ "acceptShortcut": "⌘Y"
+ },
+ "conflict": {
+ "title": "تداخل شناسایی شد",
+ "description": "این فایل از زمان تغییرات عامل اصلاح شده است",
+ "cancel": "لغو",
+ "saveResolution": "ذخیره راهحل",
+ "editManually": "ویرایش دستی",
+ "useOriginal": "استفاده از اصلی",
+ "keepCurrent": "نگه داشتن فعلی"
+ },
+ "fullDiffLoading": {
+ "titleOne": "در حال آمادهسازی تفاوت کامل",
+ "titleMany": "در حال آمادهسازی {{count}} تفاوت کامل",
+ "subtitleForFile": "در حال نهایی کردن تفاوت دقیق ویرایشگر برای {{file}}.",
+ "subtitleCurrentFile": "در حال نهایی کردن تفاوت دقیق ویرایشگر برای فایل فعلی.",
+ "subtitleMany": "در حال تعیین مبناهای دقیق قبل/بعد برای فایلهایی که در حال بارگذاری هستند.",
+ "previewsReady": "{{count}} پیشنمایش آماده",
+ "previewsReady_one": "{{count}} پیشنمایش آماده",
+ "editorViewLoading": "در حال بارگذاری نمای ویرایشگر",
+ "filesInProgress": "{{count}} فایل در حال انجام",
+ "filesInProgress_one": "{{count}} فایل در حال انجام",
+ "filesReady": "{{ready}}/{{total}} فایل آماده",
+ "progressDescription": "{{ready}} آماده، {{loading}} هنوز در حال بارگذاری. تفاوتهای پیشنمایش در حالی که مبناهای باقیمانده تعیین میشوند در پایین قابلمشاهده میمانند.",
+ "singleDescription": "تفاوتهای پیشنمایش در حالی که مبنای دقیق تعیین میشود در پایین قابلمشاهده میمانند.",
+ "previewsReady_few": "{{count}} پیشنمایش آماده",
+ "previewsReady_many": "{{count}} پیشنمایش آماده",
+ "previewsReady_other": "{{count}} پیشنمایش آماده",
+ "filesInProgress_few": "{{count}} فایل در حال انجام",
+ "filesInProgress_many": "{{count}} فایل در حال انجام",
+ "filesInProgress_other": "{{count}} فایل در حال انجام"
+ },
+ "fileMissingPrefix": "فایل روی دیسک مفقود است. این تفاوت ممکن است فقط پیشنمایشی از گزارشهای عامل باشد. از",
+ "restore": "بازیابی",
+ "fileMissingSuffix": "برای ایجاد فایل روی دیسک استفاده کنید.",
+ "filePlaceholder": {
+ "loading": "در حال بارگذاری",
+ "description": "در حال آمادهسازی یک تفاوت کامل ویرایشگر برای این فایل."
+ },
+ "loading": {
+ "diff": "تفاوت",
+ "ledgerObjectsProcessed": "{{count}} شیء دفتر پردازش شد",
+ "ledgerObjectsProcessed_one": "{{count}} شیء دفتر پردازش شد",
+ "ledgerObjectsProcessed_other": "{{count}} شیء دفتر پردازش شد",
+ "ledgerObjectsProcessed_few": "{{count}} شیء دفتر پردازش شد",
+ "ledgerObjectsProcessed_many": "{{count}} شیء دفتر پردازش شد",
+ "phases": {
+ "readingLedger": "در حال خواندن دفتر وظیفه...",
+ "resolvingFiles": "در حال تعیین وضعیت فایلها...",
+ "checkingWorktree": "در حال بررسی بافت worktree...",
+ "preparingDiffs": "در حال آمادهسازی تفاوتهای بازبینی..."
+ }
+ },
+ "progress": {
+ "viewed": "{{viewed}}/{{total}} مشاهدهشده"
+ },
+ "scope": {
+ "readMore": "بیشتر بخوانید",
+ "tiers": {
+ "exact": {
+ "title": "محدوده وظیفه بهطور دقیق تعیین شد",
+ "detail": "هر دو نشانگر شروع و تکمیل در گزارش نشست یافت شدند. تفاوت فقط شامل تغییرات اعمالشده در طول این وظیفه خاص است - وظایف دیگری که همان فایلها را تغییر دادهاند مستثنی شدهاند."
+ },
+ "endEstimated": {
+ "title": "مرز پایان تخمین زده شد",
+ "detail": "فقط نشانگر شروع یافت شد - وظیفه هنوز نشانگر تکمیل ندارد. تغییرات از شروع وظیفه تا پایان نشست نمایش داده میشوند. اگر وظایف دیگری پس از این در همان نشست اجرا شده باشند، تغییرات آنها نیز ممکن است گنجانده شود."
+ },
+ "startEstimated": {
+ "title": "مرز شروع تخمین زده شد",
+ "detail": "فقط نشانگر تکمیل یافت شد - شروع کار ثبت نشد. اگر وظایف دیگری پیش از این در همان نشست اجرا شده باشند، تغییرات آنها روی همان فایلها نیز ممکن است گنجانده شود."
+ },
+ "allSession": {
+ "title": "در حال نمایش همه تغییرات نشست",
+ "detail": "هیچ نشانگر وظیفهای در گزارش نشست یافت نشد. نمیتوان این وظیفه را جدا کرد - همه تغییرات فایل از کل نشست نمایش داده میشوند، شامل تغییرات از وظایف دیگر. این میتواند با نسخههای قدیمیتر CLI یا گردشکارهای غیراستاندارد رخ دهد."
+ }
+ },
+ "ledger": {
+ "exact": {
+ "title": "تغییرات توسط دفتر وظیفه ثبت شد",
+ "detail": "ارکستراتور این تغییرات فایل را در حالی که عامل روی این وظیفه کار میکرد ثبت کرد.",
+ "badge": "دفتر دقیق"
+ },
+ "limited": {
+ "title": "تغییرات با قابلیت بازبینی محدود ثبت شد",
+ "detail": "ارکستراتور این تغییرات فایل را برای این وظیفه ثبت کرد، اما حداقل یک تغییر از یک تصویر لحظهای یا منبع فقط-فراداده ثبت شد. تفاوتهای متنی دقیق را در جایی که در دسترس است بازبینی کنید؛ محتوای باینری یا در دسترس نبودنی ممکن است نیازمند بازبینی دستی باشد.",
+ "mixedBadge": "قابلیت بازبینی ترکیبی",
+ "needsReviewBadge": "نیازمند بازبینی"
+ }
+ },
+ "workInterval": {
+ "title": "محدودشده با بازه کاری پایدارشده",
+ "detail": "نشانگر شروع وظیفه در گزارش نشست در دسترس نبود، بنابراین تفاوت با بازه کاری وظیفه ذخیرهشده روی تخته محدود شده است.",
+ "badge": "محدودشده با بازه"
+ },
+ "confidence": {
+ "high": "اطمینان بالا",
+ "medium": "اطمینان متوسط",
+ "low": "اطمینان پایین",
+ "bestEffort": "بهترین تلاش"
+ }
+ },
+ "shortcuts": {
+ "title": "میانبرهای صفحهکلید",
+ "actions": {
+ "nextChange": "تغییر بعدی",
+ "previousChange": "تغییر قبلی",
+ "nextFile": "فایل بعدی",
+ "previousFile": "فایل قبلی",
+ "acceptChange": "پذیرفتن تغییر",
+ "rejectChange": "رد کردن تغییر",
+ "saveFile": "ذخیره فایل",
+ "undo": "واگرد",
+ "redo": "ازنو",
+ "toggleShortcuts": "تغییر وضعیت میانبرها",
+ "closeDialog": "بستن گفتوگو"
+ }
+ },
+ "timeline": {
+ "empty": "هیچ رویداد ویرایشی نیست",
+ "titleWithCount": "خط زمانی ویرایش ({{count}})"
+ },
+ "continuousScroll": {
+ "empty": "هیچ تغییر فایل قابل بازبینیای نیست"
+ },
+ "empty": {
+ "noSafeDiff": "هیچ تفاوت ایمنی در دسترس نیست",
+ "noFileChangesRecorded": "هیچ تغییر فایلی ثبت نشد",
+ "noSafeDiffDescription": "دفتر وظیفه تفاوت فایل ایمنی برای این وظیفه افشا نکرد.",
+ "noSafeDiffDiagnosticsDescription": "دفتر وظیفه تفاوت فایل ایمنی برای این وظیفه افشا نکرد. عیبیابیهای زیر علت آن را توضیح میدهند.",
+ "noFileEventsYet": "دفتر وظیفه هنوز هیچ رویداد فایلی برای این وظیفه ندارد.",
+ "noFileEvents": "دفتر وظیفه هیچ رویداد فایلی برای این وظیفه ندارد."
+ }
+ },
+ "messages": {
+ "actions": {
+ "bottomSheetActions": "اقدامات برگه پایینی پیام",
+ "collapseAll": "جمع کردن همه پیامها",
+ "collapseSheet": "جمع کردن برگه",
+ "expandAll": "گسترش همه پیامها",
+ "expandSheet": "گسترش برگه",
+ "floatComposer": "شناور کردن نگارنده",
+ "floatMessagesComposer": "شناور کردن نگارنده پیامها",
+ "hideSearch": "پنهان کردن جستجو",
+ "loadOlder": "بارگذاری پیامهای قدیمیتر",
+ "markAllRead": "علامتگذاری همه بهعنوان خواندهشده",
+ "messageActions": "اقدامات پیام",
+ "moveMessagesToBottomSheet": "انتقال پیامها به برگه پایینی",
+ "moveMessagesToSidebar": "انتقال پیامها به نوار کناری",
+ "moveToBottomSheet": "انتقال به برگه پایینی",
+ "moveToInline": "انتقال به درونخطی",
+ "moveToSidebar": "انتقال به نوار کناری",
+ "panelActions": "اقدامات پنل پیام",
+ "searchMessages": "جستجوی پیامها"
+ },
+ "delivery": {
+ "copied": "کپی شد",
+ "copyDebugDetails": "کپی جزئیات اشکالزدایی",
+ "details": "جزئیات",
+ "fields": {
+ "acceptanceUnknown": "acceptanceUnknown",
+ "delivered": "delivered",
+ "diagnostics": "diagnostics",
+ "ledgerStatus": "ledgerStatus",
+ "messageId": "messageId",
+ "providerId": "providerId",
+ "queuedBehindMessageId": "queuedBehindMessageId",
+ "reason": "reason",
+ "responsePending": "responsePending",
+ "responseState": "responseState",
+ "statusMessageId": "statusMessageId",
+ "userVisibleMessage": "userVisibleMessage",
+ "userVisibleNextReviewAt": "userVisibleNextReviewAt",
+ "userVisibleReasonCode": "userVisibleReasonCode",
+ "userVisibleState": "userVisibleState",
+ "visibleReplyCorrelation": "visibleReplyCorrelation",
+ "visibleReplyMessageId": "visibleReplyMessageId"
+ }
+ },
+ "panelMode": "حالت پنل پیام",
+ "title": "پیامها",
+ "unread": {
+ "new": "{{count}} جدید",
+ "unread": "{{count}} خواندهنشده",
+ "new_few": "{{count}} جدید",
+ "new_many": "{{count}} جدید",
+ "new_one": "{{count}} جدید",
+ "new_other": "{{count}} جدید",
+ "unread_few": "{{count}} خواندهنشده",
+ "unread_many": "{{count}} خواندهنشده",
+ "unread_one": "{{count}} خواندهنشده",
+ "unread_other": "{{count}} خواندهنشده"
+ },
+ "filter": {
+ "ariaLabel": "فیلتر پیامها",
+ "tooltip": "فیلتر پیامها",
+ "from": "از",
+ "to": "به",
+ "noData": "هیچ دادهای نیست",
+ "showStatusUpdates": "نمایش بهروزرسانیهای وضعیت (بیکاری/خاموشسازی)",
+ "actions": {
+ "reset": "بازنشانی",
+ "save": "ذخیره"
+ }
+ },
+ "status": {
+ "title": "وضعیت"
+ },
+ "actionMode": {
+ "label": "حالت اقدام"
+ },
+ "search": {
+ "placeholder": "جستجو..."
+ }
+ },
+ "modelSelector": {
+ "badges": {
+ "configured": "پیکربندیشده",
+ "connected": "متصل",
+ "failed": "ناموفق",
+ "free": "رایگان",
+ "local": "محلی",
+ "needsTest": "نیازمند تست",
+ "verified": "تأییدشده",
+ "unavailable": "در دسترس نیست",
+ "issue": "مشکل"
+ },
+ "customModelId": "شناسه مدل سفارشی",
+ "label": "مدل (اختیاری)",
+ "multimodelRequired": "Codex و Gemini به حالت چندمدلی نیاز دارند.",
+ "openCode": {
+ "allSources": "همه منابع OpenCode",
+ "filterSource": "فیلتر {{source}}",
+ "filterSources": "فیلتر منابع OpenCode",
+ "freeOnly": "فقط رایگان",
+ "freeTooltip": "OpenCode این مدل را بهعنوان رایگان علامت میزند.",
+ "loadingModels": "در حال بارگذاری مدلهای OpenCode...",
+ "noSourcesFound": "هیچ منبعی یافت نشد.",
+ "recommendedOnly": "فقط توصیهشده",
+ "searchSources": "جستجوی منابع",
+ "sourcesCount": "{{count}} منبع OpenCode",
+ "sourcesCount_few": "{{count}} منبع OpenCode",
+ "sourcesCount_many": "{{count}} منبع OpenCode",
+ "sourcesCount_one": "{{count}} منبع OpenCode",
+ "sourcesCount_other": "{{count}} منبع OpenCode"
+ },
+ "reason": "دلیل: {{reason}}",
+ "runtimeModelsSyncing": "مدلهای صریح از زمان اجرای فعلی بارگذاری میشوند. پیشفرض در حالی که فهرست در حال همگامسازی است در دسترس میماند.",
+ "fastMode": {
+ "codexLabel": "حالت Fast (۲ برابر اعتبار)",
+ "optionalLabel": "حالت Fast (اختیاری)",
+ "defaultOff": "پیشفرض (خاموش)",
+ "fast": "Fast",
+ "off": "خاموش",
+ "defaultFast": "پیشفرض (Fast)",
+ "defaultResolvesTo": "پیشفرض در حال حاضر به {{mode}} تعیین میشود.",
+ "runtimeBackedHint": "حالت Fast بر پایه زمان اجرا است و تنها زمانی باز میشود که مدل راهاندازی Anthropic تعیینشده از آن پشتیبانی کند."
+ },
+ "anthropicExtraUsage": {
+ "pricingDocs": "مستندات قیمتگذاری Anthropic را بخوانید"
+ },
+ "searchModels": "جستجوی مدلها",
+ "defaultModel": "پیشفرض",
+ "empty": {
+ "noSearchMatches": "هیچ مدلی با این جستجو منطبق نیست.",
+ "recommendedFreeOpenCode": "هیچ مدل رایگان توصیهشده OpenCode در فهرست زمان اجرای فعلی در دسترس نیست.",
+ "freeOpenCode": "هیچ مدل رایگان OpenCode در فهرست زمان اجرای فعلی در دسترس نیست.",
+ "recommendedOpenCode": "هیچ مدل توصیهشده OpenCode در فهرست زمان اجرای فعلی در دسترس نیست.",
+ "noModels": "هیچ مدلی در فهرست زمان اجرای فعلی در دسترس نیست."
+ },
+ "openCodeStatus": {
+ "notReadyTitle": "OpenCode برای راهاندازی تیم آماده نیست",
+ "freeModelsAvailableTitle": "مدلهای رایگان OpenCode در دسترس هستند",
+ "providerNotConnectedTitle": "ارائهدهنده OpenCode متصل نیست",
+ "readyTitle": "OpenCode آماده است",
+ "readyMessage": "OpenCode آمادگی ارائهدهنده را گذراند. برای استفاده از مدلهای OpenCode برای این تیم آن را انتخاب کنید.",
+ "useOpenCode": "استفاده از OpenCode",
+ "badges": {
+ "check": "بررسی",
+ "install": "نصب",
+ "free": "رایگان",
+ "setup": "راهاندازی"
+ },
+ "summary": {
+ "checking": "وضعیت OpenCode: در حال بررسی زمان اجرا",
+ "status": "وضعیت OpenCode: {{parts}}"
+ },
+ "summaryParts": {
+ "teamLaunchBlocked": "راهاندازی تیم مسدود شده است",
+ "providerOptional": "اتصال ارائهدهنده اختیاری است",
+ "providerModelsNeedSetup": "مدلهای پشتیبانیشده با ارائهدهنده نیازمند راهاندازی هستند",
+ "teamLaunchReady": "راهاندازی تیم آماده است",
+ "runtimeDetected": "زمان اجرا شناسایی شد",
+ "runtimeMissing": "زمان اجرا مفقود است",
+ "freeWithoutAuth": "مدلهای رایگان بدون احراز هویت در دسترس هستند",
+ "providerConnected": "ارائهدهنده متصل است",
+ "providerNotConnected": "ارائهدهنده متصل نیست"
+ },
+ "messages": {
+ "checking": "برنامه هنوز در حال بررسی زمان اجرای OpenCode است. منتظر بمانید تا وضعیت ارائهدهنده به پایان برسد، سپس دوباره تلاش کنید.",
+ "unsupported": "OpenCode نصب نشده، یافت نشده، یا زمان اجرای شناساییشده پشتیبانی نمیشود. OpenCode را نصب یا بهروزرسانی کنید، سپس وضعیت ارائهدهنده را تازهسازی کنید. همچنین میتوانید از دکمه نصب در صفحه اصلی استفاده کنید.",
+ "freeAvailable": "OpenCode شناسایی شد. میتوانید از مدلهای رایگان OpenCode مانند Big Pickle بدون اتصال یک ارائهدهنده استفاده کنید. تنها زمانی که مدلهای پشتیبانیشده با ارائهدهنده بخواهید، یک ارائهدهنده متصل کنید.",
+ "noFreeListed": "OpenCode شناسایی شد، اما هنوز هیچ مدل رایگان OpenCode فهرست نشده است. وضعیت ارائهدهنده را تازهسازی کنید، یا برای مدلهای پشتیبانیشده با ارائهدهنده یک ارائهدهنده در OpenCode متصل کنید.",
+ "launchBlocked": "OpenCode نصب و احراز هویت شده است، اما آمادگی راهاندازی Agent Teams مسدود شده است.",
+ "ready": "OpenCode برای راهاندازی تیم آماده است."
+ },
+ "loadingRuntime": "وضعیت زمان اجرای OpenCode هنوز در حال بارگذاری است."
+ },
+ "advisory": {
+ "pingNotConfirmed": "ping تأیید نشد",
+ "note": "یادداشت"
+ },
+ "placeholders": {
+ "customModelId": "openai/gpt-oss-20b"
+ },
+ "routeGroups": {
+ "openCodeConfig": "پیکربندی OpenCode",
+ "builtinFree": "رایگان داخلی",
+ "connectedProviders": "ارائهدهندگان متصل",
+ "otherCatalog": "سایر کاتالوگ OpenCode"
+ },
+ "pricing": {
+ "free": "رایگان",
+ "inputShort": "ورودی {{rate}}",
+ "outputShort": "خروجی {{rate}}",
+ "perMillionSummary": "{{summary}} / ۱ میلیون",
+ "inputTitle": "ورودی: {{rate}} به ازای هر ۱ میلیون توکن",
+ "outputTitle": "خروجی: {{rate}} به ازای هر ۱ میلیون توکن",
+ "cacheReadTitle": "خواندن از حافظه پنهان: {{rate}} به ازای هر ۱ میلیون توکن",
+ "cacheWriteTitle": "نوشتن در حافظه پنهان: {{rate}} به ازای هر ۱ میلیون توکن"
+ },
+ "defaultTooltip": {
+ "anthropicCompatibleWithResolved": "از مدل پیشفرض نقطه پایانی سازگار با Anthropic استفاده میکند.\nدر حال حاضر به {{model}} تعیین میشود.",
+ "anthropicCompatible": "از مدل پیشفرض نقطه پایانی سازگار با Anthropic استفاده میکند.",
+ "anthropic": "از مدل پیشفرض تیم Claude استفاده میکند.\nهنگام فعال بودن محدود کردن بافت، به {{longContextModel}} با بافت ۱ میلیون، یا {{limitedContextModel}} با بافت ۲۰۰ هزار تعیین میشود.",
+ "openCodeWithResolved": "از مدل پیشفرض OpenCode استفاده میکند.\nدر حال حاضر به {{model}} تعیین میشود.",
+ "openCode": "از مدل پیشفرض زمان اجرای OpenCode استفاده میکند.",
+ "runtime": "از پیشفرض زمان اجرا برای ارائهدهنده انتخابشده استفاده میکند."
+ },
+ "multimodelOff": "چندمدلی خاموش",
+ "unavailableInRuntime": "در زمان اجرای فعلی در دسترس نیست"
+ },
+ "taskDetail": {
+ "actions": {
+ "cancel": "لغو",
+ "delete": "حذف",
+ "markResolved": "علامتگذاری حلشده",
+ "save": "ذخیره"
+ },
+ "attachments": {
+ "commentAttachment": "پیوست نظر",
+ "fromComments": "از نظرات",
+ "preview": "پیشنمایش {{filename}}"
+ },
+ "changes": {
+ "badges": {
+ "attention": "توجه",
+ "noSafeDiff": "بدون تفاوت ایمن"
+ },
+ "empty": {
+ "noFileChangesRecorded": "هیچ تغییر فایلی ثبت نشد",
+ "noFileChangesRecordedYet": "هنوز هیچ تغییر فایلی ثبت نشده است",
+ "noReviewableChangesRecovered": "هیچ تغییر فایل قابل بازبینیای بازیابی نشد",
+ "noSafeDiffAvailable": "هیچ تفاوت ایمنی در دسترس نیست"
+ },
+ "loadFailed": "بارگذاری خلاصه تغییرات وظیفه ناموفق بود",
+ "loading": "در حال بارگذاری تغییرات...",
+ "fileCount": "{{count}} فایل",
+ "fileRowsHidden": "{{count}} ردیف فایل پنهان شد",
+ "moreDiagnostics": "{{count}} عیبیابی بیشتر",
+ "moreFiles": "{{count}} فایل بیشتر",
+ "openInEditor": "باز کردن در ویرایشگر",
+ "openTask": "باز کردن وظیفه {{subject}}",
+ "refresh": "تازهسازی تغییرات",
+ "refreshFailed": "تازهسازی ناموفق بود: {{error}}",
+ "refreshing": "در حال تازهسازی",
+ "refreshingChanges": "در حال تازهسازی تغییرات...",
+ "refreshTeamChanges": "تازهسازی تغییرات تیم",
+ "refreshShort": "تازهسازی",
+ "reviewDiff": "بازبینی تفاوت",
+ "reviewTaskDiff": "بازبینی تفاوت وظیفه",
+ "scannedCandidateTasks": "{{requested}} از {{eligible}} وظیفه نامزد اسکن شد",
+ "tasksDeferred": "{{count}} وظیفه در این دور به تعویق افتاد",
+ "title": "تغییرات",
+ "fileCount_few": "{{count}} فایل",
+ "fileCount_many": "{{count}} فایل",
+ "fileCount_one": "{{count}} فایل",
+ "fileCount_other": "{{count}} فایل",
+ "fileRowsHidden_few": "{{count}} ردیف فایل پنهان شد",
+ "fileRowsHidden_many": "{{count}} ردیف فایل پنهان شد",
+ "fileRowsHidden_one": "{{count}} ردیف فایل پنهان شد",
+ "fileRowsHidden_other": "{{count}} ردیف فایل پنهان شد",
+ "moreDiagnostics_few": "{{count}} عیبیابی بیشتر",
+ "moreDiagnostics_many": "{{count}} عیبیابی بیشتر",
+ "moreDiagnostics_one": "{{count}} عیبیابی بیشتر",
+ "moreDiagnostics_other": "{{count}} عیبیابی بیشتر",
+ "moreFiles_few": "{{count}} فایل بیشتر",
+ "moreFiles_many": "{{count}} فایل بیشتر",
+ "moreFiles_one": "{{count}} فایل بیشتر",
+ "moreFiles_other": "{{count}} فایل بیشتر",
+ "tasksDeferred_few": "{{count}} وظیفه در این دور به تعویق افتاد",
+ "tasksDeferred_many": "{{count}} وظیفه در این دور به تعویق افتاد",
+ "tasksDeferred_one": "{{count}} وظیفه در این دور به تعویق افتاد",
+ "tasksDeferred_other": "{{count}} وظیفه در این دور به تعویق افتاد"
+ },
+ "clarification": {
+ "awaitingLead": "در انتظار شفافسازی از سرتیم",
+ "awaitingUser": "در انتظار شفافسازی از شما"
+ },
+ "description": {
+ "add": "برای افزودن توضیح کلیک کنید...",
+ "edit": "ویرایش توضیح",
+ "placeholder": "توضیح وظیفه (از markdown پشتیبانی میکند)"
+ },
+ "loading": {
+ "fetchingTeamData": "در حال واکشی دادههای تیم",
+ "title": "در حال بارگذاری وظیفه..."
+ },
+ "logs": {
+ "newArriving": "گزارشهای جدید وظیفه در حال رسیدن"
+ },
+ "notFound": "وظیفه یافت نشد",
+ "related": {
+ "blockedBy": "مسدودشده توسط",
+ "blocks": "مسدود میکند",
+ "linkedFrom": "پیوندخورده از",
+ "links": "پیوندها",
+ "title": "وظایف مرتبط"
+ },
+ "review": {
+ "reviewer": "بازبین: {{reviewer}}"
+ },
+ "sections": {
+ "attachments": "پیوستها",
+ "changes": "تغییرات",
+ "comments": "نظرات",
+ "description": "توضیح",
+ "taskLogs": "گزارشهای وظیفه",
+ "workflowHistory": "تاریخچه گردشکار"
+ },
+ "unassigned": "بدون تخصیص",
+ "workflow": {
+ "implementationTimeTitle": "زمان پیادهسازی از بازههای کاری پایدارشده",
+ "inProgressTime": "زمان در حال انجام {{duration}}"
+ },
+ "comments": {
+ "renderLimit": "در حال نمایش {{formattedCount}} نظر اخیر برای حفظ پاسخگویی رابط کاربری.",
+ "badges": {
+ "approved": "تأییدشده",
+ "reviewRequested": "بازبینی درخواست شد"
+ },
+ "unknownTime": "زمان نامشخص",
+ "actions": {
+ "reply": "پاسخ",
+ "replyToComment": "پاسخ به نظر",
+ "showMore": "نمایش نظرات بیشتر ({{visible}}/{{total}})",
+ "cancelReply": "لغو پاسخ",
+ "comment": "نظر"
+ },
+ "attachments": {
+ "previewAlt": "پیشنمایش پیوست",
+ "downloadFailed": "دانلود ناموفق بود"
+ },
+ "replyingTo": "در حال پاسخ به",
+ "input": {
+ "placeholder": "یک نظر اضافه کنید... (Enter برای ارسال)",
+ "charsLeft": "{{count}} نویسه باقیمانده",
+ "charsLeft_one": "{{count}} نویسه باقیمانده",
+ "charsLeft_other": "{{count}} نویسه باقیمانده",
+ "charsLeft_few": "{{count}} نویسه باقیمانده",
+ "charsLeft_many": "{{count}} نویسه باقیمانده"
+ }
+ },
+ "workflowTimeline": {
+ "empty": "هیچ تاریخچه گردشکاری ثبت نشد",
+ "currentImplementationInterval": "بازه پیادهسازی فعلی",
+ "implementationIntervalEnded": "بازه پیادهسازی در این انتقال پایان یافت",
+ "runningPrefix": "در حال اجرا ",
+ "createdAs": "ایجادشده بهعنوان",
+ "by": "توسط",
+ "reassigned": "بازتخصیصشده",
+ "assignedTo": "تخصیصیافته به",
+ "unassignedFrom": "تخصیصنیافته از",
+ "ownerChanged": "مالک تغییر کرد",
+ "reviewRequested": "بازبینی درخواست شد",
+ "reviewStarted": "بازبینی شروع شد",
+ "changesRequested": "تغییرات درخواست شد",
+ "approved": "تأییدشده",
+ "unknownEvent": "رویداد نامشخص"
+ },
+ "reviewStates": {
+ "approved": "تأییدشده",
+ "needsFix": "نیازمند رفع",
+ "inReview": "در حال بازبینی"
+ }
+ },
+ "tasks": {
+ "createTask": {
+ "assignee": "تخصیصگیرنده",
+ "assigneeOptional": "تخصیصگیرنده (اختیاری)",
+ "blockedByOptional": "وظایف مسدودکننده (اختیاری)",
+ "blockedBySummary": "وظیفه مسدود خواهد شد توسط: {{tasks}}",
+ "cancel": "لغو",
+ "create": "ایجاد",
+ "creating": "در حال ایجاد...",
+ "description": "وظیفه در دایرکتوری tasks/ تیم ایجاد شده و روی تخته Kanban ظاهر میشود.",
+ "descriptionOptional": "توضیح (اختیاری)",
+ "detailsPlaceholder": "جزئیات وظیفه (از markdown پشتیبانی میکند)",
+ "hideOptionalFields": "پنهان کردن فیلدهای اختیاری",
+ "offlineNotice": {
+ "after": "- برای شروع اجرا، تیم را راهاندازی کنید.",
+ "before": "تیم آفلاین است. وظیفه افزوده خواهد شد به"
+ },
+ "promptOptional": "پرامپت برای تخصیصگیرنده (اختیاری)",
+ "promptPlaceholder": "دستورالعملهای سفارشی برای عضو تیم...",
+ "relatedOptional": "وظایف مرتبط (اختیاری)",
+ "relatedSummary": "مرتبط: {{tasks}}",
+ "saved": "ذخیره شد",
+ "searchTasks": "جستجوی وظایف...",
+ "selectMember": "یک عضو انتخاب کنید",
+ "selectMemberOptional": "انتخاب عضو...",
+ "showOptionalFields": "نمایش فیلدهای اختیاری",
+ "startImmediately": "شروع فوری",
+ "startOfflineHint": "تیم آفلاین است. ابتدا تیم را راهاندازی کنید تا وظایف بلافاصله شروع شوند.",
+ "subject": "موضوع",
+ "subjectPlaceholder": "چه کاری باید انجام شود؟",
+ "title": "ایجاد وظیفه",
+ "todo": "انجامدادنی"
+ },
+ "list": {
+ "columns": {
+ "blockedBy": "مسدودشده توسط",
+ "blocks": "مسدود میکند",
+ "id": "شناسه",
+ "owner": "مالک",
+ "status": "وضعیت",
+ "subject": "موضوع"
+ },
+ "empty": "هیچ وظیفهای در این تیم نیست",
+ "filters": {
+ "allOwners": "همه مالکان",
+ "allStatuses": "همه وضعیتها",
+ "ownerAria": "فیلتر وظایف بر اساس مالک",
+ "statusAria": "فیلتر وظایف بر اساس وضعیت"
+ },
+ "showing": "در حال نمایش {{shown}} از {{total}}"
+ },
+ "status": {
+ "completed": "completed",
+ "deleted": "deleted",
+ "inProgress": "in_progress",
+ "pending": "pending"
+ },
+ "statusSummary": {
+ "progressAria": "وظایف {{completed}}/{{total}} تکمیلشده",
+ "inProgress": "{{count}} in_progress",
+ "inProgress_one": "{{count}} in_progress",
+ "inProgress_other": "{{count}} in_progress",
+ "inProgress_few": "{{count}} in_progress",
+ "inProgress_many": "{{count}} in_progress",
+ "pending": "{{count}} pending",
+ "pending_one": "{{count}} pending",
+ "pending_other": "{{count}} pending",
+ "pending_few": "{{count}} pending",
+ "pending_many": "{{count}} pending",
+ "completed": "{{count}} completed",
+ "completed_one": "{{count}} completed",
+ "completed_other": "{{count}} completed",
+ "completed_few": "{{count}} completed",
+ "completed_many": "{{count}} completed"
+ },
+ "unassigned": "بدون تخصیص",
+ "teamPrefix": "تیم:",
+ "openTask": "باز کردن وظیفه",
+ "deleteConfirm": {
+ "title": "حذف وظیفه",
+ "message": "وظیفه #{{taskId}} به سطل زباله منتقل شود؟",
+ "confirmLabel": "حذف",
+ "cancelLabel": "لغو"
+ }
+ },
+ "editor": {
+ "actions": {
+ "cancel": "لغو",
+ "closeEditor": "بستن ویرایشگر",
+ "closeTab": "بستن زبانه",
+ "closeTooltip": "بستن ویرایشگر (Esc)",
+ "discard": "دور انداختن",
+ "discardAndClose": "دور انداختن و بستن",
+ "keep": "نگه داشتن",
+ "keepMine": "نگه داشتن مال من",
+ "keyboardShortcuts": "میانبرهای صفحهکلید",
+ "overwrite": "بازنویسی",
+ "refreshAria": "تازهسازی (F5)",
+ "refreshTooltip": "تازهسازی وضعیت git (F5)",
+ "reload": "بارگذاری مجدد",
+ "retry": "تلاش مجدد",
+ "save": "ذخیره",
+ "saveAllAndClose": "ذخیره همه و بستن"
+ },
+ "ariaLabel": "ویرایشگر پروژه",
+ "dialogs": {
+ "conflictDescription": "فایل از زمانی که آن را باز کردید بهصورت خارجی اصلاح شده است. با تغییرات شما بازنویسی شود؟",
+ "conflictTitle": "تداخل ذخیره",
+ "unsavedDescription": "تغییرات ذخیرهنشده دارید. میخواهید چه کاری انجام دهید؟",
+ "unsavedFileDescription": "این فایل تغییرات ذخیرهنشده دارد. میخواهید چه کاری انجام دهید؟",
+ "unsavedTitle": "تغییرات ذخیرهنشده"
+ },
+ "newFile": {
+ "validation": {
+ "nameRequired": "نام نمیتواند خالی باشد",
+ "invalidName": "نام نامعتبر",
+ "invalidCharacters": "نام شامل نویسههای نامعتبر است",
+ "nameTooLong": "نام بیش از حد طولانی است"
+ },
+ "placeholders": {
+ "fileName": "نام فایل...",
+ "folderName": "نام پوشه..."
+ },
+ "aria": {
+ "newFileName": "نام فایل جدید",
+ "newFolderName": "نام پوشه جدید"
+ }
+ },
+ "draftRecovered": "تغییرات ذخیرهنشده از یک نشست قبلی بازیابی شد.",
+ "externalChange": {
+ "changed": "فایل روی دیسک تغییر کرد.",
+ "deleted": "فایل دیگر روی دیسک وجود ندارد."
+ },
+ "saveFailed": "ذخیره ناموفق بود: {{error}}",
+ "sidebar": {
+ "explorer": "کاوشگر",
+ "hide": "پنهان کردن نوار کناری",
+ "hideWithShortcut": "پنهان کردن نوار کناری ({{shortcut}})",
+ "show": "نمایش نوار کناری",
+ "showWithShortcut": "نمایش نوار کناری ({{shortcut}})"
+ },
+ "searchInFiles": {
+ "title": "جستجو در فایلها",
+ "closeSearch": "بستن جستجو",
+ "closeSearchShortcut": "بستن جستجو (Esc)",
+ "searchPlaceholder": "جستجو...",
+ "matchCase": "تطبیق حروف بزرگ و کوچک",
+ "matchCaseToggle": "Aa",
+ "noResults": "هیچ نتیجهای یافت نشد",
+ "resultsSummary": "{{count}} تطابق در {{fileCount}} فایل",
+ "resultsSummary_one": "{{count}} تطابق در {{fileCount}} فایل",
+ "truncated": "(کوتاهشده)",
+ "resultsSummary_few": "{{count}} تطابق در {{fileCount}} فایل",
+ "resultsSummary_many": "{{count}} تطابق در {{fileCount}} فایل",
+ "resultsSummary_other": "{{count}} تطابق در {{fileCount}} فایل"
+ },
+ "fileTree": {
+ "failedToLoadFiles": "بارگذاری فایلها ناموفق بود: {{error}}",
+ "loading": "در حال بارگذاری فایلها...",
+ "empty": "هیچ فایلی یافت نشد",
+ "dropForProjectRoot": "برای ریشه پروژه اینجا رها کنید",
+ "moveToTrash": "انتقال به سطل زباله",
+ "moveToTrashConfirm": "«{{name}}» به سطل زباله منتقل شود؟",
+ "cancel": "لغو"
+ },
+ "goToLine": {
+ "title": "رفتن به خط",
+ "position": "(فعلی: {{current}}، کل: {{total}})",
+ "placeholder": "شماره خط، +آفست، -آفست، یا %",
+ "go": "برو"
+ },
+ "searchPanel": {
+ "previousMatch": "تطابق قبلی",
+ "nextMatch": "تطابق بعدی",
+ "close": "بستن",
+ "replacePlaceholder": "جایگزینی",
+ "replace": "جایگزینی",
+ "replaceNext": "جایگزینی بعدی",
+ "all": "همه",
+ "replaceAll": "جایگزینی همه"
+ },
+ "statusBar": {
+ "position": "خط {{line}}، ستون {{col}}",
+ "enableWatcher": "فعالسازی ناظر فایل",
+ "disableWatcher": "غیرفعالسازی ناظر فایل",
+ "watch": "نظارت",
+ "watching": "در حال نظارت",
+ "watchExternalChanges": "نظارت بر تغییرات خارجی",
+ "disableExternalWatcher": "غیرفعالسازی ناظر تغییرات خارجی",
+ "encodingUtf8": "UTF-8",
+ "spaces": "فاصلهها: {{count}}"
+ },
+ "imagePreview": {
+ "loading": "در حال بارگذاری پیشنمایش...",
+ "openFullSize": "باز کردن پیشنمایش اندازه کامل",
+ "openSystemViewer": "باز کردن در نمایشگر سیستم"
+ },
+ "quickOpen": {
+ "title": "باز کردن سریع",
+ "searchPlaceholder": "جستجوی فایلها بر اساس نام...",
+ "loading": "در حال بارگذاری فایلها...",
+ "empty": "هیچ فایلی یافت نشد"
+ },
+ "errorBoundary": {
+ "crashed": "ویرایشگر از کار افتاد",
+ "unknownError": "خطای نامشخص"
+ },
+ "binaryPlaceholder": {
+ "file": "فایل باینری ({{size}})"
+ },
+ "unsavedChanges": "تغییرات ذخیرهنشده",
+ "empty": {
+ "selectFile": "برای ویرایش، فایلی از درخت انتخاب کنید"
+ },
+ "search": {
+ "toggleReplace": "تغییر وضعیت جایگزینی",
+ "placeholder": "جستجو"
+ },
+ "shortcuts": {
+ "title": "میانبرهای صفحهکلید",
+ "groups": {
+ "fileOperations": "عملیات فایل",
+ "search": "جستجو",
+ "navigation": "پیمایش",
+ "editing": "ویرایش",
+ "markdown": "Markdown",
+ "general": "عمومی"
+ },
+ "actions": {
+ "quickOpen": "باز کردن سریع",
+ "save": "ذخیره",
+ "saveAll": "ذخیره همه",
+ "closeTab": "بستن زبانه",
+ "findInFile": "یافتن در فایل",
+ "searchInFiles": "جستجو در فایلها",
+ "goToLine": "رفتن به خط",
+ "nextTab": "زبانه بعدی",
+ "previousTab": "زبانه قبلی",
+ "cycleTabs": "چرخش بین زبانهها",
+ "toggleSidebar": "تغییر وضعیت نوار کناری",
+ "undo": "واگرد",
+ "redo": "ازنو",
+ "selectNextMatch": "انتخاب تطابق بعدی",
+ "toggleComment": "تغییر وضعیت نظر",
+ "splitPreview": "پیشنمایش تقسیمشده",
+ "fullPreview": "پیشنمایش کامل",
+ "closeEditor": "بستن ویرایشگر"
+ }
+ },
+ "toolbar": {
+ "enableWordWrap": "فعالسازی شکست کلمه",
+ "disableWordWrap": "غیرفعالسازی شکست کلمه",
+ "closeSplitPreview": "بستن پیشنمایش تقسیمشده",
+ "closePreview": "بستن پیشنمایش"
+ }
+ },
+ "launch": {
+ "actions": {
+ "createSchedule": "ایجاد زمانبندی",
+ "creating": "در حال ایجاد...",
+ "goToDashboard": "رفتن به داشبورد",
+ "launchTeam": "راهاندازی تیم",
+ "launching": "در حال راهاندازی...",
+ "relaunchTeam": "راهاندازی مجدد تیم",
+ "relaunching": "در حال راهاندازی مجدد...",
+ "saveChanges": "ذخیره تغییرات",
+ "saving": "در حال ذخیره..."
+ },
+ "billing": {
+ "prefix": "از ۱۵ ژوئن ۲۰۲۶، Anthropic مصرف",
+ "readArticle": "مقاله Anthropic را بخوانید",
+ "suffix": "و Agent SDK را از اعتبار ماهانه Agent SDK، جدا از محدودیتهای تعاملی Claude Code، صورتحساب میکند. اعتبار در هر دوره صورتحساب بازنشانی میشود و اعتبار استفادهنشده منتقل نمیشود."
+ },
+ "conflict": {
+ "description": "اجرای دو تیم در یک دایرکتوری پرخطر است - ممکن است در ویرایش فایلهای یکسان تداخل کنند. برای جداسازی، استفاده از دایرکتوری متفاوت یا یک git worktree را در نظر بگیرید.",
+ "title": "تیم دیگری با نام «{{team}}» از قبل برای این دایرکتوری کاری در حال اجرا است",
+ "workingDirectory": "دایرکتوری کاری:"
+ },
+ "description": {
+ "createSchedule": "زمانبندی اجرای خودکار وظایف Claude",
+ "createScheduleForTeam": "زمانبندی اجراهای خودکار برای تیم «{{team}}»",
+ "editSchedule": "در حال ویرایش زمانبندی برای تیم «{{team}}»",
+ "launchPrefix": "شروع تیم",
+ "launchSuffix": "از طریق Claude CLI محلی.",
+ "relaunchPrefix": "توقف اجرای فعلی برای",
+ "relaunchSuffix": "و شروع مجدد آن از طریق Claude CLI محلی."
+ },
+ "prepare": {
+ "action": {
+ "launch": "راهاندازی",
+ "relaunch": "راهاندازی مجدد"
+ },
+ "blocked": "محیط زمان اجرا در دسترس نیست - {{action}} مسدود شده است",
+ "checkingProviders": "در حال بررسی ارائهدهندگان انتخابشده...",
+ "failed": "آمادهسازی ارائهدهندگان انتخابشده ناموفق بود",
+ "preflight": "بررسی اولیه برای یافتن خطاها پیش از {{action}}",
+ "preparingEnvironment": "در حال آمادهسازی محیط...",
+ "ready": "همه ارائهدهندگان انتخابشده آمادهاند.",
+ "readyWithNotes": "همه ارائهدهندگان انتخابشده آمادهاند، همراه با یادداشتها.",
+ "unsupportedPreload": "نسخه preload فعلی از team:prepareProvisioning پشتیبانی نمیکند. برنامه dev را مجدداً راهاندازی کنید.",
+ "selectWorkingDirectory": "برای اعتبارسنجی محیط راهاندازی، یک دایرکتوری کاری انتخاب کنید.",
+ "someProvidersNeedAttention": "برخی از ارائهدهندگان انتخابشده نیازمند توجه هستند."
+ },
+ "prompt": {
+ "label": "پرامپت",
+ "oneShotPrefix": "این پرامپت به",
+ "oneShotSuffix": "برای اجرای یکباره منتقل خواهد شد",
+ "saved": "ذخیره شد",
+ "schedulePlaceholder": "دستورالعملها برای اجرای Claude طبق زمانبندی...",
+ "teamLeadOptional": "پرامپت برای سرتیم (اختیاری)",
+ "teamLeadPlaceholder": "دستورالعملها برای سرتیم..."
+ },
+ "providerChanged": "ارائهدهنده از {{from}} به {{to}} تغییر کرد. نشست سرتیم قبلی ازسرگیری نخواهد شد، و سرتیم با بافت تازه شروع میشود تا زمان اجرای جدید بهدرستی اعمال شود.",
+ "relaunchFreshSession": "راهاندازی مجدد تیم یک نشست سرتیم تازه شروع میکند. وضعیت پایدار تیم، تخته وظایف و پیکربندی اعضا دوباره به پرامپت راهاندازی بازگردانی میشوند.",
+ "relaunchWarning": {
+ "description": "ذخیره این تنظیمات فرایند تیم فعلی را متوقف میکند، فهرست اعضای بهروزشده را پایدار میکند، و تیم را دوباره با زمان اجرای جدید راهاندازی میکند.",
+ "title": "راهاندازی مجدد، اجرای فعلی تیم را راهاندازی مجدد خواهد کرد"
+ },
+ "schedule": {
+ "labelOptional": "برچسب (اختیاری)",
+ "labelPlaceholder": "مثلاً بازبینی روزانه کد، تستهای شبانه...",
+ "maxBudgetUsd": "حداکثر بودجه (USD)",
+ "maxTurns": "حداکثر نوبتها",
+ "noLimit": "بدون محدودیت",
+ "noMatches": "هیچ تیمی با جستجوی شما منطبق نیست.",
+ "noTeams": "هیچ تیمی در دسترس نیست. ابتدا یک تیم ایجاد کنید.",
+ "searchTeams": "جستجوی تیمها...",
+ "selectTeam": "یک تیم انتخاب کنید...",
+ "team": "تیم",
+ "title": "زمانبندی"
+ },
+ "title": {
+ "createSchedule": "ایجاد زمانبندی",
+ "editSchedule": "ویرایش زمانبندی",
+ "launch": "راهاندازی تیم",
+ "relaunch": "راهاندازی مجدد تیم"
+ },
+ "errors": {
+ "loadProjectsFailed": "بارگذاری پروژهها ناموفق بود",
+ "saveScheduleFailed": "ذخیره زمانبندی ناموفق بود",
+ "relaunchFailed": "راهاندازی مجدد تیم ناموفق بود",
+ "launchFailed": "راهاندازی تیم ناموفق بود"
+ },
+ "validation": {
+ "openCodeLeadModelRequired": "سرتیم OpenCode به یک مدل انتخابشده نیاز دارد.",
+ "openCodeTeammateRequired": "سرتیم OpenCode به حداقل یک همتیمی OpenCode نیاز دارد.",
+ "selectWorkingDirectory": "انتخاب دایرکتوری کاری (cwd)",
+ "fixMemberNames": "نام اعضا را پیش از راهاندازی اصلاح کنید",
+ "memberNamesUnique": "نام اعضا باید پیش از راهاندازی یکتا باشند"
+ },
+ "optionalSettings": {
+ "relaunchTitle": "تنظیمات راهاندازی مجدد",
+ "title": "تنظیمات اختیاری راهاندازی",
+ "relaunchDescription": "پیش از راهاندازی مجدد تیم، فهرست اعضا و زمان اجرای سرتیم را بازبینی کنید.",
+ "description": "جریان راهاندازی را روی مسیر پروژه متمرکز نگه دارید و فقط زمانی این را گسترش دهید که کنترل بیشتری بخواهید."
+ }
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "کپی تیم",
+ "createTeam": "ایجاد تیم",
+ "deleteForever": "حذف برای همیشه",
+ "deletePermanently": "حذف دائمی",
+ "deleteTeam": "حذف تیم",
+ "launching": "در حال راهاندازی...",
+ "launchTeam": "راهاندازی تیم",
+ "relaunchTeam": "راهاندازی مجدد تیم",
+ "restore": "بازیابی",
+ "restoreTeam": "بازیابی تیم",
+ "retry": "تلاش مجدد",
+ "stopTeam": "توقف تیم",
+ "stopping": "در حال توقف..."
+ },
+ "electronOnly": {
+ "description": "در حالت مرورگر، دسترسی به دایرکتوریهای محلی `~/.claude/teams` در دسترس نیست.",
+ "title": "تیمها فقط در حالت Electron در دسترس است"
+ },
+ "empty": {
+ "description": "برای شروع، اینجا یک تیم ایجاد کنید. بهطور خودکار در فهرست نمایش داده میشود.",
+ "localOnly": "ایجاد تیم فقط در حالت محلی Electron در دسترس است.",
+ "title": "هیچ تیمی یافت نشد"
+ },
+ "filter": {
+ "clearAll": "پاک کردن همه",
+ "label": "فیلتر تیمها",
+ "projectPriority": "اولویت پروژه",
+ "status": "وضعیت"
+ },
+ "loadFailed": "بارگذاری تیمها ناموفق بود",
+ "loading": "در حال بارگذاری تیمها...",
+ "localOnly": "فقط در حالت محلی Electron در دسترس است.",
+ "membersCount": "اعضا: {{count}}",
+ "membersCount_few": "اعضا: {{count}}",
+ "membersCount_many": "اعضا: {{count}}",
+ "membersCount_one": "عضو: {{count}}",
+ "membersCount_other": "اعضا: {{count}}",
+ "noDescription": "بدون توضیح",
+ "noMatches": "هیچ تیمی با فیلترهای فعلی منطبق نیست",
+ "partial": {
+ "pending": "آخرین راهاندازی هنوز در حال هماهنگسازی است.",
+ "skipped": "آخرین راهاندازی همتیمیهایی را رد کرده است.",
+ "skippedWithCount": "آخرین راهاندازی {{count}}/{{expected}} همتیمی را رد کرد.",
+ "skippedWithCount_few": "آخرین راهاندازی {{count}}/{{expected}} همتیمی را رد کرد.",
+ "skippedWithCount_many": "آخرین راهاندازی {{count}}/{{expected}} همتیمی را رد کرد.",
+ "skippedWithCount_one": "آخرین راهاندازی {{count}}/{{expected}} همتیمی را رد کرد.",
+ "skippedWithCount_other": "آخرین راهاندازی {{count}}/{{expected}} همتیمی را رد کرد.",
+ "stopped": "آخرین راهاندازی پیش از پیوستن همه همتیمیها متوقف شد.",
+ "stoppedWithCount": "آخرین راهاندازی پیش از پیوستن {{count}}/{{expected}} همتیمی متوقف شد.",
+ "stoppedWithCount_few": "آخرین راهاندازی پیش از پیوستن {{count}}/{{expected}} همتیمی متوقف شد.",
+ "stoppedWithCount_many": "آخرین راهاندازی پیش از پیوستن {{count}}/{{expected}} همتیمی متوقف شد.",
+ "stoppedWithCount_one": "آخرین راهاندازی پیش از پیوستن {{count}}/{{expected}} همتیمی متوقف شد.",
+ "stoppedWithCount_other": "آخرین راهاندازی پیش از پیوستن {{count}}/{{expected}} همتیمی متوقف شد."
+ },
+ "searchPlaceholder": "جستجوی تیمها...",
+ "sections": {
+ "otherTeams": "سایر تیمها",
+ "projectTeams": "تیمهای {{project}}",
+ "selectedProject": "پروژه انتخابشده"
+ },
+ "solo": "تکنفره",
+ "status": {
+ "active": "فعال",
+ "deleted": "حذفشده",
+ "launching": "در حال راهاندازی...",
+ "offline": "آفلاین",
+ "partialFailure": "راهاندازی در میانه راه ناموفق شد",
+ "partialPending": "راهاندازی اولیه در انتظار",
+ "partialSkipped": "راهاندازی عضو را رد کرد",
+ "running": "در حال اجرا"
+ },
+ "title": "انتخاب تیم",
+ "trash": "سطل زباله ({{count}})",
+ "trash_few": "سطل زباله ({{count}})",
+ "trash_many": "سطل زباله ({{count}})",
+ "trash_one": "سطل زباله ({{count}})",
+ "trash_other": "سطل زباله ({{count}})",
+ "deleteDraft": {
+ "title": "حذف پیشنویس",
+ "message": "تیم پیشنویس «{{teamName}}» حذف شود؟ این عمل قابل بازگشت نیست.",
+ "confirmLabel": "حذف",
+ "cancelLabel": "لغو"
+ },
+ "moveToTrash": {
+ "title": "انتقال به سطل زباله",
+ "message": "تیم «{{teamName}}» به سطل زباله منتقل شود؟ میتوانید بعداً آن را بازیابی کنید.",
+ "confirmLabel": "انتقال به سطل زباله",
+ "cancelLabel": "لغو"
+ },
+ "deleteForever": {
+ "title": "حذف دائمی",
+ "message": "تیم «{{teamName}}» بهطور دائمی حذف شود؟ همه دادهها از دست خواهند رفت.",
+ "confirmLabel": "حذف برای همیشه",
+ "cancelLabel": "لغو"
+ }
+ },
+ "messageComposer": {
+ "crossTeam": {
+ "hint": "نکته: پیامهای بینتیمی به سرتیم تیم هدف میروند. اگر میخواهید پاسخ بهجای شما به سرتیم شما بازگردد، این را صراحتاً در پیام بگویید."
+ },
+ "attachments": {
+ "attachFiles": "پیوست فایلها (چسباندن یا کشیدن و رها کردن)",
+ "unavailable": "پیوستها در دسترس نیستند",
+ "disabledHint": "پیوست فایل برای سرتیم آنلاین و همتیمیهای آنلاین OpenCode پشتیبانی میشود. پیوستها را حذف کنید یا گیرنده را تغییر دهید.",
+ "restrictions": {
+ "crossTeam": "پیوست فایل برای پیامهای بینتیمی پشتیبانی نمیشود",
+ "teamOffline": "تیم باید آنلاین باشد تا فایل پیوست شود",
+ "unsupportedRecipient": "فایلها را میتوان به سرتیم یا همتیمیهای OpenCode فرستاد",
+ "openCodeOffline": "تیم باید آنلاین باشد تا فایل برای همتیمیهای OpenCode پیوست شود",
+ "sending": "پیش از افزودن فایلها، منتظر اتمام ارسال پیام فعلی بمانید",
+ "maximumReached": "حداکثر پیوستها رسیده است",
+ "leadOnly": "فایلها را فقط میتوان به سرتیم فرستاد"
+ }
+ },
+ "slash": {
+ "restrictions": {
+ "attachments": "فرمانهای اسلش به یک سرتیم زنده نیاز دارند و نمیتوانند با پیوستها ارسال شوند",
+ "crossTeam": "فرمانهای اسلش را فقط میتوان روی سرتیم فعلی اجرا کرد",
+ "notLead": "فرمانهای اسلش را فقط میتوان به سرتیم فرستاد",
+ "leadOffline": "فرمانهای اسلش به آنلاین بودن سرتیم نیاز دارند"
+ }
+ },
+ "status": {
+ "reusedCrossTeamRequest": "درخواست بینتیمی اخیر استفاده مجدد شد",
+ "teamOffline": "تیم آفلاین"
+ },
+ "revision": {
+ "editing": "در حال ویرایش پیام قبلی",
+ "cancel": "لغو",
+ "tooltip": "از عامل بخواهید پیام قبلی را نادیده بگیرد و آن را به کادر نگارش بازگرداند."
+ },
+ "input": {
+ "charsLeft": "{{count}} نویسه باقیمانده",
+ "charsLeft_one": "{{count}} نویسه باقیمانده",
+ "charsLeft_other": "{{count}} نویسه باقیمانده",
+ "teamLaunchingPlaceholder": "تیم در حال راهاندازی است... پیام برای تحویل به صندوق ورودی در صف قرار میگیرد.",
+ "crossTeamPlaceholder": "پیام بینتیمی به {{team}}...",
+ "teamFallback": "تیم",
+ "placeholder": "یک پیام بنویسید... (Enter برای ارسال، Shift+Enter برای خط جدید)",
+ "slashTip": "نکته: میتوانید از «/» برای اجرای هر فرمان Claude استفاده کنید.",
+ "charsLeft_few": "{{count}} نویسه باقیمانده",
+ "charsLeft_many": "{{count}} نویسه باقیمانده"
+ },
+ "teamSelector": {
+ "thisTeam": "این تیم",
+ "current": "فعلی",
+ "online": "آنلاین",
+ "offline": "آفلاین",
+ "onlineTitle": "آنلاین",
+ "offlineTitle": "آفلاین"
+ },
+ "recipient": {
+ "select": "انتخاب...",
+ "searchPlaceholder": "جستجو...",
+ "noResults": "نتیجهای نیست"
+ },
+ "actions": {
+ "voiceToText": "صدا به متن",
+ "send": "ارسال",
+ "sendingUnavailableLaunching": "ارسال در حالی که تیم در حال راهاندازی است در دسترس نیست"
+ }
+ },
+ "claudeLogs": {
+ "filter": {
+ "ariaLabel": "فیلتر گزارشها",
+ "tooltip": "فیلتر گزارشها",
+ "sections": {
+ "stream": "جریان",
+ "content": "محتوا"
+ },
+ "kinds": {
+ "output": "خروجی",
+ "thinking": "تفکر",
+ "tool": "فراخوانیهای ابزار"
+ },
+ "actions": {
+ "reset": "بازنشانی",
+ "save": "ذخیره"
+ },
+ "streams": {
+ "stdout": "stdout",
+ "stderr": "stderr"
+ }
+ },
+ "rawLineCount": "{{formattedCount}} خط خام",
+ "rawLineCount_one": "{{formattedCount}} خط خام",
+ "rawLinesCaptured": "{{count}} ضبطشده",
+ "emptyRawLogs": "{{count}}؛ هنوز هیچکدام خروجی دستیار/ابزار نیستند.",
+ "noLogsYet": "هنوز هیچ گزارشی نیست.",
+ "teamNotRunning": "تیم در حال اجرا نیست.",
+ "searchPlaceholder": "جستجوی گزارشها...",
+ "clearSearch": "پاک کردن جستجو",
+ "newCount": "+{{count}} جدید",
+ "loading": "در حال بارگذاری...",
+ "showMore": "نمایش بیشتر",
+ "noLogsCaptured": "هیچ گزارشی ضبط نشد.",
+ "noMatchingLogs": "هیچ گزارش منطبقی نیست.",
+ "rawLineCount_few": "{{formattedCount}} خط خام",
+ "rawLineCount_many": "{{formattedCount}} خط خام",
+ "rawLineCount_other": "{{formattedCount}} خط خام",
+ "openFullscreen": "باز کردن گزارشها در تمامصفحه",
+ "fullscreen": "تمامصفحه",
+ "viewingFullscreen": "در حال مشاهده در حالت تمامصفحه",
+ "logsTitle": "گزارشها",
+ "sourceSelect": {
+ "placeholder": "انتخاب منبع گزارش...",
+ "searchPlaceholder": "جستجوی منابع گزارش...",
+ "emptyMessage": "هیچ منبع گزارشی یافت نشد.",
+ "ariaLabel": "منبع گزارش",
+ "leadLabel": "سرتیم",
+ "selectSourceEmpty": "یک منبع گزارش انتخاب کنید.",
+ "leadDescription": "سرتیم",
+ "removedLabel": "حذفشده",
+ "removedDescription": "حذفشده"
+ }
+ },
+ "agentGraph": {
+ "popover": {
+ "externalTeam": "تیم خارجی",
+ "process": {
+ "startedBy": "شروعشده توسط:",
+ "at": "در:",
+ "openUrl": "باز کردن URL"
+ },
+ "overflow": {
+ "hiddenTasks": "وظایف پنهان",
+ "empty": "هیچ وظیفه پنهانی در دسترس نیست."
+ },
+ "member": {
+ "lead": "سرتیم",
+ "workingOn": "در حال کار روی",
+ "recentTools": "ابزارهای اخیر",
+ "spawn": {
+ "waitingToStart": "در انتظار شروع",
+ "starting": "در حال شروع",
+ "failed": "ناموفق"
+ },
+ "state": {
+ "active": "فعال",
+ "idle": "بیکار",
+ "offline": "آفلاین",
+ "runningTool": "در حال اجرای ابزار"
+ },
+ "activeTool": {
+ "running": "در حال اجرای ابزار",
+ "failed": "ابزار ناموفق بود",
+ "finished": "ابزار به پایان رسید"
+ },
+ "actions": {
+ "message": "پیام",
+ "profile": "نمایه",
+ "task": "وظیفه"
+ }
+ }
+ },
+ "logPreview": {
+ "logs": "گزارشها",
+ "loading": "در حال بارگذاری گزارشها",
+ "more": "+{{count}} بیشتر",
+ "more_one": "+{{count}} بیشتر",
+ "more_other": "+{{count}} بیشتر",
+ "more_few": "+{{count}} بیشتر",
+ "more_many": "+{{count}} بیشتر",
+ "unsupportedProvider": "ارائهدهنده پشتیبانینشده",
+ "openCodeLogsDelayed": "گزارشهای OpenCode با تأخیر",
+ "logsUnavailable": "گزارشها در دسترس نیستند",
+ "noRecentLogs": "هیچ گزارش اخیری نیست",
+ "toolError": "خطای ابزار",
+ "toolResult": "نتیجه ابزار",
+ "toolUse": "استفاده از ابزار",
+ "thinking": "تفکر",
+ "error": "خطا",
+ "logEvent": "رویداد گزارش",
+ "noErrorOutput": "هیچ خروجی خطایی نیست",
+ "noOutput": "هیچ خروجیای نیست",
+ "noInput": "هیچ ورودیای نیست"
+ },
+ "blockingEdge": {
+ "title": "وابستگی مسدودکننده",
+ "blocks": "مسدود میکند",
+ "close": "بستن",
+ "blockingHiddenTasks": "وظایف پنهان مسدودکننده",
+ "blockedHiddenTasks": "وظایف پنهان مسدودشده",
+ "links_one": "{{count}} پیوند",
+ "links_other": "{{count}} پیوند",
+ "hiddenBlockingLinks_one": "{{count}} پیوند مسدودکننده پنهان",
+ "hiddenBlockingLinks_other": "{{count}} پیوند مسدودکننده پنهان",
+ "hiddenTaskStack": "پشته وظیفه پنهان",
+ "hiddenTasks_one": "{{count}} وظیفه پنهان",
+ "hiddenTasks_other": "{{count}} وظیفه پنهان",
+ "task": "وظیفه",
+ "openBlockerStack": "باز کردن پشته مسدودکننده",
+ "openBlockedStack": "باز کردن پشته مسدودشده",
+ "openBlockerTask": "باز کردن وظیفه مسدودکننده",
+ "openBlockedTask": "باز کردن وظیفه مسدودشده"
+ },
+ "activityHud": {
+ "activity": "فعالیت",
+ "noRecentActivity": "هیچ فعالیت اخیری نیست",
+ "more": "+{{count}} بیشتر",
+ "more_one": "+{{count}} بیشتر",
+ "more_other": "+{{count}} بیشتر",
+ "more_few": "+{{count}} بیشتر",
+ "more_many": "+{{count}} بیشتر"
+ },
+ "provisioning": {
+ "launchDetails": "جزئیات راهاندازی",
+ "launchDetailsDescription": "پیشرفت دقیق راهاندازی تیم، خروجی زنده و گزارشهای CLI."
+ }
+ },
+ "projectPath": {
+ "label": "پروژه",
+ "source": {
+ "claude": "یافتشده توسط Claude",
+ "codex": "یافتشده توسط Codex",
+ "mixed": "یافتشده توسط Claude و Codex"
+ },
+ "deleted": {
+ "title": "پوشه پروژه دیگر وجود ندارد",
+ "label": "حذفشده"
+ },
+ "mode": {
+ "projectList": "از فهرست پروژه",
+ "customPath": "مسیر سفارشی"
+ },
+ "loadingProjects": "در حال بارگذاری پروژهها...",
+ "selectProject": "انتخاب یک پروژه...",
+ "searchPlaceholder": "جستجوی پروژه بر اساس نام یا مسیر",
+ "empty": "چیزی یافت نشد",
+ "selectFromList": "یک پروژه از فهرست انتخاب کنید",
+ "noProjects": "هیچ پروژهای یافت نشد، به مسیر سفارشی تغییر دهید.",
+ "customWorkingDirectory": "دایرکتوری کاری سفارشی",
+ "browse": "مرور",
+ "createAutomatically": "اگر دایرکتوری وجود نداشته باشد، بهطور خودکار ایجاد خواهد شد."
+ },
+ "members": {
+ "badges": {
+ "worktree": "worktree"
+ },
+ "runtimeTelemetry": {
+ "title": "بار زمان اجرای محلی",
+ "description": "فقط فرایندهای والد و فرزند. استنتاج LLM راه دور گنجانده نشده است.",
+ "cpu": "CPU",
+ "memory": "حافظه",
+ "summedRss": "مجموع RSS",
+ "sharedHost": "معیار میزبان مشترک OpenCode. اختصاصی این عضو نیست.",
+ "processTreeCapped": "درخت فرایند برای این نمونه محدود شد.",
+ "rssHint": "RSS میتواند شامل صفحات مشترک باشد، بنابراین بهتر است بهعنوان سیگنال بار خوانده شود، نه حافظه اختصاصی."
+ },
+ "editor": {
+ "title": "اعضا",
+ "addMember": "افزودن عضو",
+ "editAsJson": "ویرایش بهصورت JSON",
+ "runInSeparateWorktrees": "اجرای همتیمیها در worktreeهای جداگانه",
+ "agentTeamsMcpOnly": "فقط MCP مربوط به Agent Teams",
+ "removedCount": "حذفشده ({{count}})",
+ "removedModelLockReason": "اعضای حذفشده برای تاریخچه حذف نرم نگه داشته میشوند. برای ویرایش تنظیمات آنها را بازیابی کنید.",
+ "memberNamesUnique": "نام اعضا باید یکتا باشند"
+ },
+ "stats": {
+ "computing": "در حال محاسبه آمار...",
+ "empty": "هیچ آماری در دسترس نیست",
+ "lines": "خطوط",
+ "linesInfo": "تقریبی. برای ابزارهای Edit و Write دقیق است. نوشتن فایل با Bash از الگوهای فرمان (heredoc، echo، sed) تخمین زده میشود و ممکن است کمتر گزارش شود.",
+ "files": "فایلها",
+ "toolCalls": "فراخوانیهای ابزار",
+ "tokens": "توکنها",
+ "toolUsage": "مصرف ابزار",
+ "filesTouched": "فایلهای لمسشده ({{count}})",
+ "viewAllChanges": "مشاهده همه تغییرات",
+ "showLess": "نمایش کمتر",
+ "moreFiles": "+{{count}} بیشتر",
+ "footer": "{{count}} نشست · محاسبهشده {{computedAgo}}",
+ "footer_one": "{{count}} نشست · محاسبهشده {{computedAgo}}",
+ "footer_few": "{{count}} نشست · محاسبهشده {{computedAgo}}",
+ "footer_many": "{{count}} نشست · محاسبهشده {{computedAgo}}",
+ "footer_other": "{{count}} نشست · محاسبهشده {{computedAgo}}"
+ },
+ "logs": {
+ "searching": "در حال جستجوی گزارشها...",
+ "empty": "هیچ گزارشی یافت نشد",
+ "waitingForTaskActivity": "وظیفه در حال انجام است - در انتظار فعالیت نشست (تازهسازی خودکار)...",
+ "noTaskActivity": "هنوز هیچ فعالیت نشستی برای این وظیفه نیست",
+ "noMemberActivity": "این عضو هنوز هیچ فعالیت نشست ثبتشدهای ندارد",
+ "leadSessionTooltip": "گزارشهای کامل نشست سرتیم - برای بافت ارکستراسیون سراسری مفید است، نه مختص این عامل",
+ "memberSessionTooltip": "گزارشهای کامل نشست پایدار همتیمی - زمانی مفید است که کار در یک نشست عضو ریشه بهجای یک فایل زیرعامل اجرا شود",
+ "startedAt": "شروعشده {{time}}",
+ "active": "فعال",
+ "showDetails": "نمایش جزئیات",
+ "hideDetails": "پنهان کردن جزئیات",
+ "loadingDetails": "در حال بارگذاری جزئیات...",
+ "failedToLoadDetails": "بارگذاری جزئیات ناموفق بود"
+ },
+ "detail": {
+ "relaunchOpenCode": "راهاندازی مجدد OpenCode",
+ "restart": "راهاندازی مجدد",
+ "legacyLogsFallback": "جایگزین گزارشهای قدیمی",
+ "copyDiagnostics": "کپی عیبیابی",
+ "pid": "PID {{pid}}",
+ "removedAt": "حذفشده {{date}}",
+ "failedToRestartMember": "راهاندازی مجدد عضو ناموفق بود",
+ "sendMessage": "ارسال پیام",
+ "assignTask": "تخصیص وظیفه",
+ "remove": "حذف"
+ },
+ "list": {
+ "loading": "در حال بارگذاری اعضای تیم",
+ "unavailable": "فهرست اعضا در دسترس نیست",
+ "unavailableDescription": "{{count}} همتیمی از فراداده تیم شناخته شدهاند، اما جزئیات فهرست مفقود است.",
+ "unavailableDescription_one": "{{count}} همتیمی از فراداده تیم شناخته شده است، اما جزئیات فهرست مفقود است.",
+ "soloLeadOnly": "تیم تکنفره - فقط سرتیم",
+ "removedCount": "حذفشده ({{count}})",
+ "unavailableDescription_few": "{{count}} همتیمی از فراداده تیم شناخته شدهاند، اما جزئیات فهرست مفقود است.",
+ "unavailableDescription_many": "{{count}} همتیمی از فراداده تیم شناخته شدهاند، اما جزئیات فهرست مفقود است.",
+ "unavailableDescription_other": "{{count}} همتیمی از فراداده تیم شناخته شدهاند، اما جزئیات فهرست مفقود است."
+ },
+ "executionLog": {
+ "empty": "چیزی برای نمایش نیست",
+ "emptyUserMessage": "{{time}} - (خالی)",
+ "agentInstructions": "دستورالعملهای عامل",
+ "memberTurn": "نوبت {{member}}",
+ "agentTurn": "نوبت عامل",
+ "turn": "نوبت"
+ },
+ "recentMessages": {
+ "latest": "آخرین پیامها",
+ "latestForMember": "آخرین پیامها - {{member}}",
+ "loadMore": "بارگذاری بیشتر",
+ "expand": "گسترش",
+ "collapse": "جمع کردن"
+ },
+ "leadModel": {
+ "defaultModel": "پیشفرض",
+ "providerModelAria": "ارائهدهنده {{provider}}، {{model}}",
+ "leadShort": "سرتیم",
+ "teamLead": "سرتیم",
+ "syncWithTeammates": "همگامسازی مدل با همتیمیها",
+ "anthropicTeamWide": "Anthropic در سراسر تیم",
+ "runtimeInheritance": "زمان اجرای سرتیم برای همتیمیها اعمال میشود مگر آنکه ارائهدهنده یا مدل خود را تنظیم کنند.",
+ "anthropicContextLimit": "محدودیت بافت ۲۰۰ هزار برای زمان اجراهای Anthropic در این راهاندازی، از جمله همتیمیهای سفارشی Anthropic، در سراسر تیم است."
+ },
+ "runtimeLogs": {
+ "autoRefresh": "تازهسازی خودکار",
+ "wrapLines": "شکست خطوط",
+ "loadingTail": "در حال بارگذاری انتهای گزارش فرایند...",
+ "empty": "هنوز هیچ فایل گزارش فرایندی برای این عضو ضبط نشده است.",
+ "copy": "کپی",
+ "fileEmpty": "فایل گزارش فرایند خالی است.",
+ "showingLast": "در حال نمایش آخرین {{bytes}}.",
+ "showing": "در حال نمایش {{bytes}}."
+ },
+ "tasks": {
+ "empty": "هیچ وظیفهای به این عضو تخصیص نیافته است"
+ },
+ "messages": {
+ "loadOlder": "بارگذاری پیامهای قدیمیتر",
+ "filters": {
+ "all": "همه",
+ "messages": "پیامها",
+ "comments": "نظرات"
+ },
+ "empty": {
+ "loading": "در حال بارگذاری فعالیت...",
+ "noComments": "هیچ نظری برای این عضو نیست",
+ "noLoadedMessages": "هنوز هیچ پیام بارگذاریشدهای برای این عضو نیست",
+ "noMessages": "هیچ پیامی با این عضو نیست",
+ "noLoadedActivity": "هنوز هیچ فعالیت بارگذاریشدهای برای این عضو نیست",
+ "noActivity": "هیچ فعالیتی با این عضو نیست"
+ }
+ },
+ "actions": {
+ "openProfile": "باز کردن نمایه",
+ "editRole": "ویرایش نقش",
+ "sendMessage": "ارسال پیام",
+ "assignTask": "تخصیص وظیفه"
+ },
+ "roleSelect": {
+ "customRolePlaceholder": "نقش سفارشی را وارد کنید..."
+ }
+ },
+ "schedule": {
+ "count": "{{count}} زمانبندی",
+ "count_one": "{{count}} زمانبندی",
+ "count_other": "{{count}} زمانبندی",
+ "nextRun": "بعدی: {{next}}",
+ "actions": {
+ "runNow": "اجرای فوری",
+ "edit": "ویرایش",
+ "pause": "توقف موقت",
+ "resume": "ازسرگیری",
+ "delete": "حذف",
+ "addSchedule": "افزودن زمانبندی"
+ },
+ "runHistory": {
+ "loading": "در حال بارگذاری تاریخچه اجرا...",
+ "empty": "هنوز اجرایی نیست"
+ },
+ "count_few": "{{count}} زمانبندی",
+ "count_many": "{{count}} زمانبندی",
+ "runLog": {
+ "title": "گزارش اجرا",
+ "exitCode": "خروج {{code}}",
+ "retryCount": "تلاش مجدد {{count}}/{{max}}",
+ "stillRunning": "وظیفه هنوز در حال اجرا است...",
+ "loadingLogs": "در حال بارگذاری گزارشها...",
+ "errors": "خطاها",
+ "close": "بستن"
+ },
+ "cron": {
+ "expression": "عبارت Cron",
+ "highFrequencyWarning": "زمانبندی با فرکانس بالا (بازه کمتر از ۵ دقیقه)",
+ "nextRuns": "اجراهای بعدی:",
+ "timezone": "منطقه زمانی",
+ "selectTimezone": "انتخاب منطقه زمانی",
+ "warmUpTime": "زمان گرم کردن",
+ "warmUpDescription": "ارائهدهندگان انتخابشده را پیش از اجرای زمانبندیشده آماده میکند",
+ "errors": {
+ "enterExpression": "یک عبارت cron وارد کنید",
+ "invalidExpression": "عبارت cron نامعتبر"
+ },
+ "presets": {
+ "everyHour": "هر ساعت",
+ "everySixHours": "هر ۶ ساعت",
+ "dailyAtNine": "روزانه ساعت ۹ صبح",
+ "weekdaysAtNine": "روزهای هفته ساعت ۹ صبح",
+ "mondayAtNine": "دوشنبه ساعت ۹ صبح",
+ "everyThirtyMinutes": "هر ۳۰ دقیقه"
+ },
+ "warmUpOptions": {
+ "none": "بدون گرم کردن",
+ "fiveMinutes": "۵ دقیقه",
+ "tenMinutes": "۱۰ دقیقه",
+ "fifteenMinutes": "۱۵ دقیقه",
+ "thirtyMinutes": "۳۰ دقیقه"
+ }
+ },
+ "empty": {
+ "title": "هنوز هیچ زمانبندیای نیست",
+ "description": "یک زمانبندی ایجاد کنید تا وظایف Claude را بهطور خودکار طبق یک زمانبندی cron اجرا کند."
+ },
+ "title": "زمانبندیها",
+ "status": {
+ "active": "فعال",
+ "paused": "متوقفشده",
+ "disabled": "غیرفعال"
+ },
+ "runStatus": {
+ "pending": "در انتظار",
+ "warmingUp": "در حال گرم شدن",
+ "warm": "گرم",
+ "running": "در حال اجرا",
+ "completed": "تکمیلشده",
+ "failed": "ناموفق",
+ "interrupted": "قطعشده",
+ "cancelled": "لغوشده"
+ }
+ },
+ "openCodeContextConfigHint": {
+ "summary": "مدلهای محلی OpenCode میتوانند بهجای محدودیتهای فقط-پرامپت از یک بودجه بافت OpenCode استفاده کنند.",
+ "description": "محدودیتهای متناظر را به پیکربندی OpenCode برای ارائهدهنده و مدلی که این همتیمی استفاده میکند اضافه کنید. این به OpenCode کمک میکند پیش از سرریز پنجره بافت مدلهای محلی، فشردهسازی و هرس کند.",
+ "replacePrefix": "جایگزین کنید",
+ "and": "و",
+ "replaceSuffix": "با شناسههای ارائهدهنده و مدل از راهاندازی OpenCode شما. دستورالعملهای پرامپت مانند",
+ "promptInstructionsSuffix": "ضعیفتر هستند زیرا درخواست پیش از خواندن آنها توسط مدل سرهم میشود.",
+ "providerLimits": "محدودیتهای ارائهدهنده",
+ "compactionConfig": "پیکربندی فشردهسازی"
+ },
+ "sessions": {
+ "noProjectPath": "هیچ مسیر پروژهای پیوند داده نشده است",
+ "provisioningHint": "نشستها پس از تأمین تیم ظاهر میشوند",
+ "projectNotFound": "پروژه یافت نشد",
+ "loading": "در حال بارگذاری نشستها...",
+ "empty": "هیچ نشستی یافت نشد",
+ "showAllSessions": "نمایش برای همه نشستها",
+ "lead": "سرتیم",
+ "removeFilter": "حذف فیلتر",
+ "filterBySession": "فیلتر بر اساس این نشست",
+ "openSession": "باز کردن نشست",
+ "title": "نشستها"
+ },
+ "provisioning": {
+ "pid": "PID {{pid}}",
+ "cancel": "لغو",
+ "moreWarningsHidden": "{{count}} هشدار بیشتر پنهان شد",
+ "diagnostics": "عیبیابی",
+ "liveOutput": "خروجی زنده",
+ "diagnosticsCopied": "عیبیابی کپی شد",
+ "copyDiagnostics": "کپی عیبیابی",
+ "copied": "کپی شد",
+ "noOutput": "هنوز هیچ خروجیای ضبط نشده است.",
+ "cliLogs": "گزارشهای CLI",
+ "steps": {
+ "starting": "در حال شروع",
+ "configuring": "راهاندازی تیم",
+ "assembling": "در حال پیوستن اعضا",
+ "finalizing": "در حال نهایی کردن"
+ },
+ "providerStatus": {
+ "status": {
+ "checking": "در حال بررسی...",
+ "ready": "موفق",
+ "notes": "موفق (یادداشتها)",
+ "failed": "خطا",
+ "pending": "در انتظار"
+ },
+ "detailSummary": {
+ "cliBinaryMissing": "باینری CLI مفقود است",
+ "openCodeRuntimeMissing": "زمان اجرای OpenCode مفقود است",
+ "openCodeWindowsAccessBlocked": "دسترسی OpenCode در Windows مسدود شد",
+ "openCodeNoOutput": "بررسی زمان اجرای OpenCode هیچ خروجیای برنگرداند",
+ "openCodeMcpUnreachable": "MCP برنامه OpenCode غیرقابل دسترس",
+ "workingDirectoryMissing": "دایرکتوری کاری مفقود است",
+ "cliBinaryCouldNotStart": "باینری CLI نتوانست شروع شود",
+ "cliPreflightIncomplete": "بررسی اولیه CLI تکمیل نشد",
+ "authenticationRequired": "احراز هویت لازم است",
+ "runtimeProviderNotConfigured": "ارائهدهنده زمان اجرا پیکربندی نشده است",
+ "cliPreflightFailed": "بررسی اولیه CLI ناموفق بود",
+ "selectedModelCompatible": "مدل انتخابشده سازگار است",
+ "selectedModelCompatibilityPending": "سازگاری مدل انتخابشده در انتظار است",
+ "selectedModelAvailable": "مدل انتخابشده در دسترس است",
+ "selectedModelVerified": "مدل انتخابشده تأیید شد",
+ "selectedModelUnavailable": "مدل انتخابشده در دسترس نیست",
+ "selectedModelTimedOut": "تأیید مدل انتخابشده زمانبر شد و منقضی شد",
+ "selectedModelCheckFailed": "بررسی مدل انتخابشده ناموفق بود",
+ "selectedModelDeferred": "تأیید مدل انتخابشده به تعویق افتاد",
+ "selectedModelPingNotConfirmed": "ping مدل انتخابشده تأیید نشد",
+ "readyWithNotes": "آماده همراه با یادداشتها",
+ "needsAttention": "نیازمند توجه"
+ },
+ "modelChecksSummary": "بررسیهای مدل انتخابشده - {{details}}",
+ "modelParts": {
+ "unavailable": "{{count}} مدل در دسترس نیست",
+ "unavailable_one": "{{count}} مدل در دسترس نیست",
+ "unavailable_other": "{{count}} مدل در دسترس نیستند",
+ "checkFailed": "بررسی {{count}} مدل ناموفق بود",
+ "checkFailed_one": "بررسی {{count}} مدل ناموفق بود",
+ "checkFailed_other": "بررسی {{count}} مدل ناموفق بود",
+ "timedOut": "{{count}} مدل منقضی شد",
+ "timedOut_one": "{{count}} مدل منقضی شد",
+ "timedOut_other": "{{count}} مدل منقضی شدند",
+ "deferred": "{{count}} تأیید به تعویق افتاد",
+ "deferred_one": "{{count}} تأیید به تعویق افتاد",
+ "deferred_other": "{{count}} تأیید به تعویق افتاد",
+ "pingNotConfirmed": "{{count}} ping تأیید نشد",
+ "pingNotConfirmed_one": "{{count}} ping تأیید نشد",
+ "pingNotConfirmed_other": "{{count}} ping تأیید نشد",
+ "compatibilityPending": "{{count}} سازگار، تأیید عمیق در انتظار",
+ "compatibilityPending_one": "{{count}} سازگار، تأیید عمیق در انتظار",
+ "compatibilityPending_other": "{{count}} سازگار، تأیید عمیق در انتظار",
+ "compatible": "{{count}} سازگار",
+ "compatible_one": "{{count}} سازگار",
+ "compatible_other": "{{count}} سازگار",
+ "checking": "{{count}} در حال بررسی",
+ "checking_one": "{{count}} در حال بررسی",
+ "checking_other": "{{count}} در حال بررسی",
+ "available": "{{count}} در دسترس",
+ "available_one": "{{count}} در دسترس",
+ "available_other": "{{count}} در دسترس",
+ "verified": "{{count}} تأییدشده",
+ "verified_one": "{{count}} تأییدشده",
+ "verified_other": "{{count}} تأییدشده",
+ "unavailable_few": "{{count}} مدل در دسترس نیستند",
+ "unavailable_many": "{{count}} مدل در دسترس نیستند",
+ "checkFailed_few": "بررسی {{count}} مدل ناموفق بود",
+ "checkFailed_many": "بررسی {{count}} مدل ناموفق بود",
+ "timedOut_few": "{{count}} مدل منقضی شدند",
+ "timedOut_many": "{{count}} مدل منقضی شدند",
+ "deferred_few": "{{count}} تأیید به تعویق افتاد",
+ "deferred_many": "{{count}} تأیید به تعویق افتاد",
+ "pingNotConfirmed_few": "{{count}} ping تأیید نشد",
+ "pingNotConfirmed_many": "{{count}} ping تأیید نشد",
+ "compatibilityPending_few": "{{count}} سازگار، تأیید عمیق در انتظار",
+ "compatibilityPending_many": "{{count}} سازگار، تأیید عمیق در انتظار",
+ "compatible_few": "{{count}} سازگار",
+ "compatible_many": "{{count}} سازگار",
+ "checking_few": "{{count}} در حال بررسی",
+ "checking_many": "{{count}} در حال بررسی",
+ "available_few": "{{count}} در دسترس",
+ "available_many": "{{count}} در دسترس",
+ "verified_few": "{{count}} تأییدشده",
+ "verified_many": "{{count}} تأییدشده"
+ },
+ "openProviderSettings": "باز کردن تنظیمات {{provider}}",
+ "copied": "کپی شد",
+ "copyDiagnostics": "کپی عیبیابی",
+ "deepVerificationPending": "تأیید عمیق هنوز در حال اجرا است. مدلهای رایگان OpenCode ممکن است حدود ۲۰ ثانیه طول بکشند.",
+ "progress": {
+ "checkingSelectedProviders": "در حال بررسی موازی ارائهدهندگان انتخابشده...",
+ "checkingProvider": "در حال بررسی ارائهدهنده {{provider}}...",
+ "checkingProviders": "در حال بررسی ارائهدهندگان {{providers}}..."
+ },
+ "failureHints": {
+ "openCodeAccessDenied": "مجوزهای پوشه را اصلاح کنید یا پروژه را به پوشهای قابل نوشتن توسط کاربر منتقل کنید. اجرا بهعنوان مدیر فقط یک راهحل موقت است.",
+ "openCodeBridgeNoOutput": "برنامه و زمان اجرای OpenCode را مجدداً راهاندازی کنید، سپس دوباره تلاش کنید. اگر تکرار شد، عیبیابی را کپی کنید.",
+ "workingDirectoryMissing": "یک دایرکتوری کاری موجود انتخاب کنید، سپس این گفتوگو را دوباره باز کنید.",
+ "authenticationRequired": "ارائهدهنده موردنیاز را در Claude CLI احراز هویت کنید، سپس این گفتوگو را دوباره باز کنید.",
+ "runtimeProviderNotConfigured": "زمان اجرای ارائهدهنده انتخابشده را پیکربندی کنید، سپس این گفتوگو را دوباره باز کنید.",
+ "openCodeRuntimeMissing": "زمان اجرای OpenCode را از کارت وضعیت ارائهدهنده نصب یا دوباره تلاش کنید، سپس این گفتوگو را دوباره باز کنید.",
+ "openCodeAppMcpUnreachable": "برای تازهسازی پل MCP برنامه OpenCode، راهاندازی را دوباره تلاش کنید. اگر تکرار شد، برنامه و زمان اجرای OpenCode را مجدداً راهاندازی کنید.",
+ "cliBinaryMissing": "مطمئن شوید باینری محلی Claude CLI وجود دارد و میتواند شروع شود، سپس این گفتوگو را دوباره باز کنید.",
+ "default": "مشکل بالا را حل کنید، سپس این گفتوگو را دوباره باز کنید.",
+ "openCodeNodeModulesSymlinkPermission": "Agent Teams AI را بهعنوان مدیر اجرا کنید، سپس راهاندازی را دوباره تلاش کنید."
+ }
+ },
+ "presentation": {
+ "awaitingPermission": "{{count}} همتیمی در انتظار تأیید مجوز",
+ "nameListWithMore": "{{names}}، +{{count}} بیشتر",
+ "waitingForOpenCode": "در انتظار OpenCode: {{names}}",
+ "bootstrapStalled": "راهاندازی اولیه متوقف شد: {{names}}",
+ "bootstrapStalledWithOpenCodeWait": "{{stalled}}؛ در انتظار OpenCode: {{names}}",
+ "namedPendingDiagnostic": "{{label}}: {{names}}",
+ "countPendingDiagnostic": "{{count}} {{label}}",
+ "pendingLabels": {
+ "bootstrapStalled": "راهاندازی اولیه متوقف شد",
+ "shellOnly": "فقط پوسته",
+ "waitingForBootstrap": "در انتظار راهاندازی اولیه",
+ "bootstrapUnconfirmed": "راهاندازی اولیه تأییدنشده",
+ "awaitingPermission": "در انتظار مجوز",
+ "waitingForRuntime": "در انتظار زمان اجرا",
+ "shellOnlyLower": "فقط پوسته",
+ "waitingForBootstrapLower": "در انتظار راهاندازی اولیه",
+ "bootstrapUnconfirmedLower": "راهاندازی اولیه تأییدنشده",
+ "awaitingPermissionLower": "در انتظار مجوز",
+ "waitingForRuntimeLower": "در انتظار زمان اجرا"
+ },
+ "failed": {
+ "memberFailedToStart": "{{name}} در شروع ناموفق بود",
+ "teammatesFailedToStart": "{{count}} همتیمی در شروع ناموفق بودند",
+ "teammatesFailedRatio": "{{count}}/{{total}} همتیمی در شروع ناموفق بودند"
+ },
+ "skipped": {
+ "memberSkipped": "{{name}} برای این راهاندازی رد شد",
+ "memberSkippedWithReason": "{{name}} برای این راهاندازی رد شد - {{reason}}",
+ "memberSkippedCompact": "{{name}} رد شد",
+ "teammatesSkipped": "{{count}} همتیمی رد شدند",
+ "teammatesSkippedList": "همتیمیهای ردشده: {{list}}",
+ "teammatesSkippedRatio": "{{count}}/{{total}} همتیمی برای این راهاندازی رد شدند"
+ },
+ "joining": {
+ "teammatesStillJoining": "{{count}} همتیمی همچنان در حال پیوستن",
+ "teammatesStillJoining_one": "{{count}} همتیمی همچنان در حال پیوستن",
+ "teammatesStillJoining_few": "{{count}} همتیمی همچنان در حال پیوستن",
+ "teammatesStillJoining_many": "{{count}} همتیمی همچنان در حال پیوستن",
+ "teammatesStillJoining_other": "{{count}} همتیمی همچنان در حال پیوستن",
+ "teammatesConfirmedRatio": "{{count}}/{{total}} همتیمی تأیید شدند"
+ },
+ "ready": {
+ "leadOnline": "سرتیم آنلاین",
+ "allTeammatesJoined": "همه {{count}} همتیمی پیوستند",
+ "teamProvisionedLeadOnline": "تیم تأمین شد - سرتیم آنلاین",
+ "teamProvisionedAllJoined": "تیم تأمین شد - همه {{count}} همتیمی پیوستند",
+ "teamProvisionedStillJoining": "تیم تأمین شد - همتیمیها همچنان در حال پیوستن هستند",
+ "launchFinishedWithErrors": "راهاندازی با خطا به پایان رسید - {{count}}/{{total}} همتیمی در شروع ناموفق بودند",
+ "launchContinuedSkipped": "راهاندازی ادامه یافت - {{count}}/{{total}} همتیمی رد شدند",
+ "teamLaunchedLeadOnline": "تیم راهاندازی شد - سرتیم آنلاین",
+ "teamLaunchedAllJoined": "تیم راهاندازی شد - همه {{count}} همتیمی پیوستند"
+ },
+ "panel": {
+ "launchFailed": "راهاندازی ناموفق بود",
+ "launchDetails": "جزئیات راهاندازی",
+ "launchFinishedWithErrors": "راهاندازی با خطا به پایان رسید",
+ "launchContinuedSkipped": "راهاندازی با همتیمیهای ردشده ادامه یافت",
+ "coreTeamReady": "تیم اصلی آماده است",
+ "finishingLaunch": "در حال اتمام راهاندازی",
+ "teamLaunched": "تیم راهاندازی شد",
+ "launchingTeam": "در حال راهاندازی تیم"
+ }
+ }
+ },
+ "liveRuntimeStatus": {
+ "title": "وضعیت زنده زمان اجرا",
+ "description": "ضربان قلب و وضعیت راهاندازی فقط برای نمایش. کنترلهای فرایند در پایین باقی میمانند.",
+ "source": "منبع: {{source}}",
+ "lane": "لاین {{lane}}",
+ "diagnosticOnly": "فقط عیبیابی",
+ "updated": "بهروزشده {{value}}",
+ "states": {
+ "running": "در حال اجرا",
+ "starting": "در حال شروع",
+ "waiting": "در انتظار",
+ "degraded": "نیازمند توجه",
+ "stopped": "متوقفشده",
+ "unknown": "نامشخص"
+ }
+ },
+ "taskLogs": {
+ "exact": {
+ "title": "گزارشهای دقیق وظیفه",
+ "loading": "در حال بارگذاری گزارشهای دقیق وظیفه...",
+ "description": "برشهای دقیق رونوشت که با همان مؤلفههای گزارش اجرای استفادهشده در گزارشها رندر شدهاند.",
+ "emptyTitle": "هنوز هیچ گزارش دقیق وظیفهای نیست",
+ "emptyDescription": "بستههای دقیق رونوشت زمانی اینجا ظاهر میشوند که فراداده رونوشت صریح پیوندخورده به وظیفه در دسترس باشد.",
+ "summaryOnly": "فقط خلاصه"
+ },
+ "executionSessions": {
+ "title": "نشستهای اجرا",
+ "online": "آنلاین",
+ "updating": "در حال بهروزرسانی...",
+ "description": "مرور و پیشنمایش رونوشت نشستمحور قدیمی."
+ },
+ "stream": {
+ "title": "جریان گزارش وظیفه"
+ }
+ },
+ "kanban": {
+ "taskCard": {
+ "cancelTask": "لغو وظیفه {{taskId}}",
+ "cancel": "لغو",
+ "moveBackToTodoConfirm": "این وظیفه به انجامدادنی بازگردانده شده و به تیم اطلاع داده شود؟",
+ "confirm": "تأیید",
+ "keep": "نگه داشتن",
+ "changesNeedAttention": "تغییرات نیازمند توجه هستند",
+ "changes": "تغییرات",
+ "deleteTask": "حذف وظیفه",
+ "taskLogsActive": "گزارشهای وظیفه فعال",
+ "newTaskLogsArriving": "گزارشهای جدید وظیفه در حال رسیدن",
+ "awaitingUser": "در انتظار کاربر",
+ "awaitingLead": "در انتظار سرتیم",
+ "blockedBy": "مسدودشده توسط",
+ "blocks": "مسدود میکند",
+ "start": "شروع",
+ "complete": "تکمیل",
+ "approve": "تأیید",
+ "requestReview": "درخواست بازبینی",
+ "manualReview": "بازبینی دستی",
+ "requestChanges": "درخواست تغییرات"
+ },
+ "filter": {
+ "title": "فیلتر وظایف",
+ "session": "نشست",
+ "allSessions": "همه نشستها",
+ "teammate": "همتیمی",
+ "unassigned": "(بدون تخصیص)",
+ "column": "ستون",
+ "clearAll": "پاک کردن همه"
+ },
+ "board": {
+ "addTask": "افزودن وظیفه",
+ "noTasks": "هیچ وظیفهای نیست",
+ "showMore": "نمایش {{count}} مورد بیشتر",
+ "hiddenCount": "{{count}} پنهان",
+ "trash": "سطل زباله",
+ "gridView": "نمای شبکهای",
+ "columnsView": "نمای ستونی"
+ },
+ "trash": {
+ "title": "سطل زباله",
+ "empty": "هیچ وظیفه حذفشدهای نیست",
+ "subject": "موضوع",
+ "owner": "مالک",
+ "deleted": "حذفشده",
+ "unassigned": "بدون تخصیص",
+ "restoreTask": "بازیابی وظیفه",
+ "restore": "بازیابی",
+ "close": "بستن"
+ },
+ "sort": {
+ "title": "مرتبسازی وظایف",
+ "sortBy": "مرتبسازی بر اساس",
+ "reset": "بازنشانی",
+ "options": {
+ "updatedAt": {
+ "label": "آخرین بهروزرسانی",
+ "description": "اخیراً بهروزشدهها اول"
+ },
+ "createdAt": {
+ "label": "ایجادشده",
+ "description": "جدیدترین اول"
+ },
+ "owner": {
+ "label": "مالک",
+ "description": "بر اساس حروف الفبای تخصیصگیرنده"
+ },
+ "manual": {
+ "label": "دستی",
+ "description": "ترتیب کشیدن و رها کردن"
+ }
+ }
+ },
+ "search": {
+ "clearSearch": "پاک کردن جستجو",
+ "tasks": "وظایف",
+ "createdAgo": "ایجادشده {{time}}",
+ "updatedAgo": "بهروزشده {{time}}",
+ "placeholder": "جستجوی وظایف... (#شناسه یا متن)"
+ },
+ "grid": {
+ "addTask": "افزودن وظیفه",
+ "noTasks": "هیچ وظیفهای نیست"
+ },
+ "title": "Kanban",
+ "columns": {
+ "todo": "انجامدادنی",
+ "inProgress": "در حال انجام",
+ "review": "بازبینی",
+ "done": "انجامشده",
+ "approved": "تأییدشده"
+ }
+ },
+ "worktreeGitReadiness": {
+ "checking": "در حال بررسی وضعیت مخزن Git برای worktreeهای همتیمی...",
+ "ready": "worktreeهای Git آمادهاند.",
+ "readyOnBranch": "worktreeهای Git روی شاخه {{branch}} آمادهاند.",
+ "needsSetup": "جداسازی worktree نیازمند راهاندازی Git است",
+ "initialCommitNotice": "اقدام کامیت اولیه همه فایلهای فعلی را با پیام مرحلهبندی و کامیت میکند",
+ "initializeRepository": "مقداردهی اولیه مخزن Git",
+ "createInitialCommit": "ایجاد کامیت اولیه",
+ "initialCommitMessage": "chore: initial commit"
+ },
+ "toolApproval": {
+ "settings": "تنظیمات",
+ "autoAllowAllTools": "اجازه خودکار همه ابزارها",
+ "autoAllowFileEdits": "اجازه خودکار ویرایش فایلها (Edit، Write، NotebookEdit)",
+ "autoAllowSafeCommands": "اجازه خودکار فرمانهای ایمن (git، pnpm، npm، ls...)",
+ "onTimeout": "هنگام انقضای زمان:",
+ "after": "پس از",
+ "secondsShort": "ثانیه",
+ "timeoutActions": {
+ "wait": "همیشه منتظر بمان",
+ "allow": "اجازه",
+ "deny": "رد"
+ },
+ "submit": "ثبت",
+ "allow": "اجازه",
+ "deny": "رد",
+ "allowAll": "اجازه همه",
+ "pendingCount": "{{count}} در انتظار",
+ "autoActionIn": "{{action}} خودکار در {{time}}",
+ "diff": {
+ "previewChanges": "پیشنمایش تغییرات",
+ "readingFile": "در حال خواندن فایل...",
+ "binaryFile": "فایل باینری - قابل پیشنمایش نیست",
+ "truncated": "فایل در ۲ مگابایت کوتاه شد - تفاوت ممکن است ناقص باشد",
+ "newFile": "فایل جدید"
+ }
+ },
+ "memberWorkSync": {
+ "details": {
+ "title": "همگامسازی کار عضو",
+ "actionableItems": "موارد قابل اقدام",
+ "fingerprint": "اثر انگشت",
+ "report": "گزارش",
+ "none": "هیچکدام",
+ "shadowWouldNudge": "سایه تلنگر میزد",
+ "yes": "بله",
+ "no": "خیر",
+ "moreActionableItems": "{{count}} مورد قابل اقدام بیشتر",
+ "diagnostics": "عیبیابی: {{diagnostics}}"
+ },
+ "title": "همگامسازی کار عضو",
+ "loadingDiagnostics": "در حال بارگذاری عیبیابی همگامسازی کار عضو.",
+ "diagnosticsUnavailable": "عیبیابی همگامسازی کار عضو در دسترس نیست."
+ },
+ "advancedCli": {
+ "title": "پیشرفته",
+ "useWorktree": "استفاده از worktree",
+ "recent": "اخیر",
+ "commandPreview": "پیشنمایش فرمان",
+ "customArguments": "آرگومانهای سفارشی",
+ "validate": "اعتبارسنجی",
+ "validation": {
+ "allFlagsValid": "همه فلگها معتبر هستند",
+ "unknownFlags": "ناشناخته: {{flags}}",
+ "protectedFlags": "محافظتشده: {{flags}}",
+ "failed": "اعتبارسنجی ناموفق بود"
+ },
+ "placeholders": {
+ "worktreeName": "worktree-name"
+ }
+ },
+ "processes": {
+ "ago": "{{time}} پیش",
+ "stoppedAgo": "متوقفشده {{time}} پیش",
+ "running": "در حال اجرا",
+ "stopped": "متوقفشده",
+ "stopProcess": "توقف فرایند (SIGTERM)",
+ "kill": "از بین بردن",
+ "openInBrowser": "باز کردن در مرورگر",
+ "open": "باز کردن",
+ "pid": "PID{{pid}}",
+ "title": "فرایندهای CLI"
+ },
+ "taskActivity": {
+ "loadingDetails": "در حال بارگذاری جزئیات فعالیت...",
+ "contextUnavailable": "بافت رونوشت دقیق دیگر برای این فعالیت در دسترس نیست.",
+ "loading": "در حال بارگذاری فعالیت وظیفه...",
+ "lowSignalOnly": "هنوز هیچ فعالیت کلیدی وظیفه یافت نشد. جزئیات اجرای سطح پایین در پایین در جریان گزارش وظیفه در دسترس است.",
+ "empty": "هنوز هیچ فعالیت صریح وظیفهای در رونوشتهای در دسترس یافت نشد. گزارشهای نشست قدیمیتر یا اکتشافی ممکن است همچنان در پایین در نشستهای اجرا در دسترس باشند.",
+ "title": "فعالیت وظیفه",
+ "description": "فعالیت کلیدی صریح زمان اجرا که از فراداده رونوشت به این وظیفه پیوند خورده است."
+ },
+ "sendMessage": {
+ "title": "ارسال پیام",
+ "description": "یک پیام مستقیم به یک عضو تیم بفرستید.",
+ "recipientLabel": "گیرنده",
+ "selectMemberPlaceholder": "انتخاب عضو...",
+ "messageLabel": "پیام",
+ "placeholder": "پیام خود را بنویسید... (Enter برای ارسال)",
+ "send": "ارسال",
+ "sending": "در حال ارسال...",
+ "charsLeft": "{{count}} نویسه باقیمانده",
+ "saved": "ذخیره شد",
+ "attachments": {
+ "teamOnlineRequired": "تیم باید آنلاین باشد تا فایل پیوست شود",
+ "recipientUnsupported": "فایلها را میتوان به سرتیم یا همتیمیهای OpenCode فرستاد",
+ "openCodeOnlineRequired": "تیم باید آنلاین باشد تا فایل برای همتیمیهای OpenCode پیوست شود",
+ "disabledHint": "پیوست فایل برای سرتیم آنلاین و همتیمیهای آنلاین OpenCode پشتیبانی میشود. پیوستها را حذف کنید یا گیرنده را تغییر دهید.",
+ "attachFiles": "پیوست فایلها (چسباندن یا کشیدن و رها کردن)",
+ "unavailable": "پیوستها در دسترس نیستند"
+ },
+ "quote": {
+ "remove": "حذف نقلقول",
+ "replyingTo": "در حال پاسخ به"
+ }
+ },
+ "taskComments": {
+ "cancelReply": "لغو پاسخ",
+ "replyingTo": "در حال پاسخ به",
+ "placeholder": "یک نظر اضافه کنید... (Enter برای ارسال)",
+ "attachFile": "پیوست فایل (یا چسباندن)",
+ "voiceToText": "صدا به متن",
+ "comment": "نظر",
+ "charsLeft": "{{count}} نویسه باقیمانده",
+ "saved": "ذخیره شد",
+ "awaitingReplyFrom": "در انتظار پاسخ از",
+ "or": "یا"
+ },
+ "taskAttachments": {
+ "dropImageHere": "تصویر را اینجا رها کنید",
+ "attachImage": "پیوست تصویر",
+ "pasteOrDragDrop": "یا چسباندن / کشیدن و رها کردن",
+ "fromOriginalMessage": "از پیام اصلی",
+ "dropFilesHere": "فایلها را اینجا رها کنید",
+ "loading": "در حال بارگذاری پیوستها..."
+ },
+ "permissions": {
+ "autoApproveAllTools": "تأیید خودکار همه ابزارها",
+ "autonomousModeDescription": "حالت خودمختار: ابزارهای تیم بدون تأیید اجرا میشوند. با کد غیرقابلاعتماد محتاط باشید.",
+ "manualModeDescription": "حالت دستی: هر فراخوانی ابزار را بهصورت بلادرنگ تأیید یا رد خواهید کرد."
+ },
+ "memberLogStream": {
+ "tabs": {
+ "execution": "اجرا",
+ "process": "فرایند"
+ },
+ "filters": {
+ "all": "همه"
+ },
+ "logs": {
+ "title": "گزارشها",
+ "loading": "در حال بارگذاری جریان گزارش عضو...",
+ "emptyTitle": "هنوز هیچ ورودی جریان گزارشی برای این عضو یافت نشد.",
+ "emptyDescription": "گزارشهای رونوشت یا زمان اجرای مختص عضو زمانی که در دسترس باشند اینجا ظاهر میشوند."
+ }
+ },
+ "reviewDialog": {
+ "placeholder": "توصیف کنید چه چیزی باید تغییر کند... (Enter برای ثبت)",
+ "submit": "ثبت",
+ "charsLeft": "{{count}} نویسه باقیمانده",
+ "saved": "ذخیره شد",
+ "title": "درخواست تغییرات"
+ },
+ "dialogs": {
+ "actions": {
+ "openDashboard": "باز کردن داشبورد",
+ "openTeam": "باز کردن تیم",
+ "cancel": "لغو"
+ },
+ "membersJson": {
+ "hide": "پنهان کردن JSON"
+ },
+ "optional": {
+ "badge": "اختیاری"
+ }
+ },
+ "runningTeams": {
+ "title": "تیمهای در حال اجرا",
+ "status": {
+ "active": "فعال",
+ "provisioning": "در حال راهاندازی",
+ "idle": "در حال اجرا"
+ },
+ "noProject": "هیچ پروژهای نیست"
+ },
+ "layout": {
+ "maxPanesReached": "حداکثر {{count}} پنل رسیده است"
+ },
+ "codexReconnect": {
+ "description": "به نظر میرسد نشست Codex شما کهنه است. برای ادامه مجدداً متصل شوید.",
+ "useCode": "استفاده از کد",
+ "generating": "در حال تولید...",
+ "openLogin": "باز کردن ورود",
+ "generateLink": "تولید پیوند"
+ },
+ "effortLevel": {
+ "label": "سطح تلاش (اختیاری)",
+ "maxDescription": "حداکثر، بیشترین زمان استدلال را برای وظایف دشوار به مدل میدهد."
+ },
+ "contextLimit": {
+ "limitTo200k": "محدود کردن بافت به ۲۰۰ هزار توکن",
+ "always200k": "(همیشه ۲۰۰ هزار برای این مدل)",
+ "tooltipContent": "راهاندازیها را هنگام پشتیبانی درون یک پنجره بافت ۲۰۰ هزار توکنی نگه میدارد.",
+ "tooltipTitle": "محدودیت بافت"
+ },
+ "roleSelect": {
+ "noRole": "بدون نقش",
+ "customRole": "نقش سفارشی...",
+ "searchPlaceholder": "جستجوی نقشها...",
+ "empty": "هیچ نقشی یافت نشد.",
+ "reservedRole": "این نقش رزرو شده است",
+ "emptyCustomRole": "نقش نمیتواند خالی باشد"
+ }
+}
diff --git a/src/features/localization/renderer/locales/fil/common.json b/src/features/localization/renderer/locales/fil/common.json
new file mode 100644
index 00000000..8a022ead
--- /dev/null
+++ b/src/features/localization/renderer/locales/fil/common.json
@@ -0,0 +1,927 @@
+{
+ "actions": {
+ "cancel": "Kanselahin",
+ "close": "Isara",
+ "copied": "Nakopya",
+ "copyUrl": "Kopyahin ang URL",
+ "open": "Buksan",
+ "reveal": "Ipakita",
+ "retry": "Subukang muli",
+ "save": "I-save",
+ "showLess": "Magpakita ng mas kaunti",
+ "showMore": "Magpakita pa",
+ "refresh": "I-refresh",
+ "reset": "I-reset",
+ "copyToClipboard": "Kopyahin sa clipboard",
+ "moreActions": "Higit pang aksyon",
+ "closeDialog": "Isara ang dialog",
+ "goToDashboard": "Pumunta sa Dashboard",
+ "or": "o",
+ "hide": "Itago",
+ "resetSelection": "I-reset ang pagpili"
+ },
+ "code": {
+ "line": "linya {{line}}",
+ "lines": "mga linya {{from}}-{{to}}",
+ "moreLines": "({{count}} pang linya...)",
+ "moreLines_few": "({{count}} pang linya...)",
+ "moreLines_many": "({{count}} pang linya...)",
+ "moreLines_one": "({{count}} pang linya...)",
+ "moreLines_other": "({{count}} pang linya...)",
+ "code": "Code",
+ "preview": "Preview",
+ "markdownPreview": "Markdown Preview",
+ "linesParenthesized": "(mga linya {{from}}-{{to}})",
+ "mermaidSyntaxError": "Mermaid syntax error"
+ },
+ "contextBadge": {
+ "badge": "Context",
+ "breakdown": {
+ "text": "Text",
+ "thinking": "Thinking"
+ },
+ "detailsAria": "Mga detalye ng context injection",
+ "sectionSummary": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sections": {
+ "claudeMdFiles": "Mga CLAUDE.md File",
+ "mentionedFiles": "Mga Nabanggit na File",
+ "taskCoordination": "Task Coordination",
+ "thinkingText": "Thinking + Text",
+ "toolOutputs": "Mga Tool Output",
+ "userMessages": "Mga Mensahe ng User"
+ },
+ "title": "Bagong Context na Idinagdag sa Turn na Ito",
+ "tokenCount": "~{{tokens}} token",
+ "totalNewTokens": "Kabuuang bagong token",
+ "turn": "Turn {{turn}}",
+ "sectionSummary_few": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sectionSummary_many": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sectionSummary_one": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sectionSummary_other": "{{title}} ({{count}}) ~{{tokens}} token"
+ },
+ "locales": {
+ "emptyMessage": "Walang nahanap na wika.",
+ "names": {
+ "ar": "Arabic",
+ "bn": "Bengali",
+ "de": "German",
+ "en": "English",
+ "es": "Spanish",
+ "fa": "Persian",
+ "fil": "Filipino",
+ "fr": "French",
+ "hi": "Hindi",
+ "id": "Indonesian",
+ "it": "Italian",
+ "ja": "Japanese",
+ "ko": "Korean",
+ "mr": "Marathi",
+ "ms": "Malay",
+ "nl": "Dutch",
+ "pl": "Polish",
+ "pt": "Portuguese",
+ "ro": "Romanian",
+ "ru": "Russian",
+ "sw": "Swahili",
+ "system": "System",
+ "ta": "Tamil",
+ "te": "Telugu",
+ "th": "Thai",
+ "tr": "Turkish",
+ "uk": "Ukrainian",
+ "ur": "Urdu",
+ "vi": "Vietnamese",
+ "zh": "Chinese"
+ },
+ "searchPlaceholder": "Maghanap ng wika...",
+ "selectPlaceholder": "Piliin ang wika ng app...",
+ "systemWithResolved": "System - {{locale}}"
+ },
+ "members": {
+ "emptyMessage": "Walang nahanap na miyembro.",
+ "searchPlaceholder": "Maghanap ng miyembro...",
+ "unassigned": "Hindi nakatalaga",
+ "teammateFallback": "teammate"
+ },
+ "providerRuntime": {
+ "codex": {
+ "install": {
+ "checking": "Sinusuri",
+ "downloading": "Dina-download",
+ "installCli": "I-install ang Codex CLI",
+ "installing": "Ini-install",
+ "retryInstall": "Subukang muli ang pag-install"
+ }
+ }
+ },
+ "search": {
+ "noMatchingSuggestions": "Walang tumutugmang suhestiyon",
+ "searching": "Naghahanap...",
+ "searchingFiles": "Naghahanap ng mga file...",
+ "findInConversation": "Maghanap sa pag-uusap...",
+ "resultCount": "{{current}} ng {{total}}",
+ "resultCountCapped": "{{current}} ng {{total}}+",
+ "noResults": "Walang resulta",
+ "previousResultShortcut": "Nakaraang resulta (Shift+Enter)",
+ "nextResultShortcut": "Susunod na resulta (Enter)",
+ "closeShortcut": "Isara (Esc)",
+ "nothingFound": "Walang nahanap",
+ "placeholder": "Maghanap..."
+ },
+ "schedules": {
+ "actions": {
+ "addSchedule": "Magdagdag ng Schedule",
+ "clearFilters": "I-clear ang mga filter",
+ "createSchedule": "Lumikha ng Schedule",
+ "delete": "Tanggalin",
+ "edit": "I-edit",
+ "pause": "I-pause",
+ "resume": "Ituloy",
+ "runNow": "Patakbuhin ngayon"
+ },
+ "empty": {
+ "description": "Lumikha ng schedule sa anumang team para i-automate ang execution ng Claude task gamit ang mga cron expression. Lalabas dito ang mga schedule mula sa lahat ng team.",
+ "noMatches": "Walang schedule na tumutugma sa kasalukuyang mga filter",
+ "title": "Walang naka-schedule na task"
+ },
+ "filters": {
+ "allTeams": "Lahat ng team"
+ },
+ "item": {
+ "loadingRunHistory": "Niloload ang kasaysayan ng pagtakbo...",
+ "nextRun": "Susunod: {{value}}",
+ "noRunsYet": "Wala pang pagtakbo"
+ },
+ "loading": "Niloload ang mga schedule...",
+ "searchPlaceholder": "Maghanap ng mga schedule...",
+ "status": {
+ "active": "Aktibo",
+ "all": "Lahat",
+ "disabled": "Naka-disable",
+ "paused": "Naka-pause"
+ },
+ "title": "Mga Schedule"
+ },
+ "sessions": {
+ "actions": {
+ "hide": "Itago",
+ "pin": "I-pin",
+ "unhide": "Ipakita"
+ },
+ "empty": {
+ "noMatchingSessions": "Walang tumutugmang session",
+ "noMatchingSessionsDescription": "Wala pang tumutugmang session ang proyektong ito.",
+ "noMatchingSessionsFiltered": "Subukan ang ibang query o i-reset ang provider filter.",
+ "noSessions": "Walang nahanap na session",
+ "noSessionsDescription": "Wala pang session ang proyektong ito",
+ "selectProject": "Pumili ng proyekto para tingnan ang mga session"
+ },
+ "errors": {
+ "loading": "May error sa pag-load ng mga session"
+ },
+ "loadedMatchingMore": "{{count}} tumutugmang session ang na-load sa ngayon - mag-scroll pababa para mag-load pa.",
+ "loadingMore": "Niloload pa ang mga session...",
+ "pinned": "Naka-pin",
+ "scrollToLoadMore": "Mag-scroll para mag-load pa",
+ "search": {
+ "clear": "I-clear ang paghahanap ng session",
+ "placeholder": "Maghanap ng mga session..."
+ },
+ "selection": {
+ "cancel": "Kanselahin ang pagpili",
+ "exitMode": "Lumabas sa selection mode",
+ "hideSelected": "Itago ang mga napiling session",
+ "pinSelected": "I-pin ang mga napiling session",
+ "selectSessions": "Pumili ng mga session",
+ "selected": "{{count}} napili",
+ "unhideSelected": "Ipakita ang mga napiling session",
+ "selected_few": "{{count}} napili",
+ "selected_many": "{{count}} napili",
+ "selected_one": "{{count}} napili",
+ "selected_other": "{{count}} napili"
+ },
+ "sort": {
+ "byContext": "Ayon sa Context",
+ "byContextTooltip": "Ayusin ayon sa paggamit ng context",
+ "byRecentTooltip": "Ayusin ayon sa kamakailan",
+ "contextLoadedOnly": "Ang pag-ayos ayon sa context ay nagra-rank lang ng mga na-load na session."
+ },
+ "title": "Mga Session",
+ "visibility": {
+ "hideHidden": "Itago ang mga nakatagong session",
+ "showHidden": "Ipakita ang mga nakatagong session"
+ },
+ "worktree": {
+ "switch": "Lumipat ng Worktree"
+ },
+ "loadedMatchingMore_few": "{{count}} tumutugmang session ang na-load sa ngayon - mag-scroll pababa para mag-load pa.",
+ "loadedMatchingMore_many": "{{count}} tumutugmang session ang na-load sa ngayon - mag-scroll pababa para mag-load pa.",
+ "loadedMatchingMore_one": "{{count}} tumutugmang session ang na-load sa ngayon - mag-scroll pababa para mag-load pa.",
+ "loadedMatchingMore_other": "{{count}} tumutugmang session ang na-load sa ngayon - mag-scroll pababa para mag-load pa.",
+ "failedToLoad": "Nabigong i-load ang session",
+ "loading": "Niloload ang session...",
+ "filter": {
+ "title": "I-filter ang mga session"
+ },
+ "count": "{{count}} session",
+ "count_one": "{{count}} session",
+ "count_other": "{{count}} session",
+ "count_few": "{{count}} session",
+ "count_many": "{{count}} session",
+ "inProgress": "Isinasagawa ang session..."
+ },
+ "states": {
+ "loading": "Niloload...",
+ "offline": "Offline",
+ "online": "Online",
+ "unknown": "Hindi alam",
+ "error": "Error"
+ },
+ "markdown": {
+ "imageFallback": "[Larawan: {{label}}]",
+ "largeContentNotice": "Napakalaki ng content ({{count}} chars). Ipinapakita ang raw preview para manatiling responsive ang UI.",
+ "largeContentTitle": "Ipinapakita ang malaking content bilang raw para maiwasan ang pag-freeze ng UI",
+ "raw": "Raw",
+ "rawPreview": "Raw preview",
+ "renderMarkdown": "I-render ang markdown",
+ "showAll": "Ipakita lahat",
+ "showMore": "Magpakita pa",
+ "showRaw": "Ipakita ang raw",
+ "showingChars": "Ipinapakita ang {{shown}} / {{total}} chars",
+ "largeContentNotice_few": "Napakalaki ng content ({{count}} chars). Ipinapakita ang raw preview para manatiling responsive ang UI.",
+ "largeContentNotice_many": "Napakalaki ng content ({{count}} chars). Ipinapakita ang raw preview para manatiling responsive ang UI.",
+ "largeContentNotice_one": "Napakalaki ng content ({{count}} chars). Ipinapakita ang raw preview para manatiling responsive ang UI.",
+ "largeContentNotice_other": "Napakalaki ng content ({{count}} chars). Ipinapakita ang raw preview para manatiling responsive ang UI."
+ },
+ "terminal": {
+ "checkOutputForDetails": "Tingnan ang terminal output sa itaas para sa mga detalye",
+ "closingInSeconds": "Magsasara sa loob ng {{count}}s...",
+ "closingInSeconds_few": "Magsasara sa loob ng {{count}}s...",
+ "closingInSeconds_many": "Magsasara sa loob ng {{count}}s...",
+ "closingInSeconds_one": "Magsasara sa loob ng {{count}}s...",
+ "closingInSeconds_other": "Magsasara sa loob ng {{count}}s...",
+ "completedSuccessfully": "Matagumpay na natapos",
+ "exitCode": "(exit code {{code}})",
+ "processFailed": "Nabigo ang proseso",
+ "title": "Terminal"
+ },
+ "tokens": {
+ "accumulatedWithoutDuplication": "Naipon sa buong session nang walang duplikasyon",
+ "cacheRead": "Cache Read",
+ "cacheWrite": "Cache Write",
+ "costUsd": "Gastos (USD)",
+ "inputTokens": "Input Token",
+ "model": "Model",
+ "outputTokens": "Output Token",
+ "phase": "Phase {{phase}}/{{total}}",
+ "promptInputShare": "{{percent}}% ng prompt input",
+ "taskCoordination": "Task Coordination",
+ "thinkingText": "Thinking + Text",
+ "toolOutputs": "Mga Tool Output",
+ "total": "Kabuuan",
+ "userMessages": "Mga Mensahe ng User",
+ "visibleContext": "Visible Context",
+ "includesClaudeMd": "kasama ang CLAUDE.md ×{{count}}",
+ "claudeMd": "CLAUDE.md",
+ "mentionedFiles": "@files",
+ "percentValue": "({{percent}}%)",
+ "approxTokens": "~{{tokens}} token",
+ "approxTokensParenthesized": "(~{{tokens}})"
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Kopyahin ang team",
+ "createTeam": "Lumikha ng Team",
+ "deleteForever": "Tanggalin nang permanente",
+ "deletePermanently": "Tanggalin nang permanente",
+ "deleteTeam": "Tanggalin ang team",
+ "launching": "Inilulunsad...",
+ "launchTeam": "Ilunsad ang team",
+ "relaunchTeam": "Ilunsad muli ang team",
+ "restore": "Ibalik",
+ "restoreTeam": "Ibalik ang team",
+ "retry": "Subukang muli",
+ "stopTeam": "Ihinto ang team",
+ "stopping": "Inihihinto..."
+ },
+ "status": {
+ "active": "Aktibo",
+ "deleted": "Tinanggal",
+ "launching": "Inilulunsad...",
+ "offline": "Offline",
+ "partialFailure": "Nabigo ang paglunsad sa kalagitnaan",
+ "partialPending": "Nakabinbin ang bootstrap",
+ "partialSkipped": "Nilaktawan ng paglunsad ang miyembro",
+ "running": "Tumatakbo"
+ },
+ "partial": {
+ "pending": "Nire-reconcile pa ang huling paglunsad.",
+ "skipped": "May nilaktawang teammate ang huling paglunsad.",
+ "skippedWithCount": "Nilaktawan ng huling paglunsad ang {{count}}/{{expected}} na teammate.",
+ "skippedWithCount_few": "Nilaktawan ng huling paglunsad ang {{count}}/{{expected}} na teammate.",
+ "skippedWithCount_many": "Nilaktawan ng huling paglunsad ang {{count}}/{{expected}} na teammate.",
+ "skippedWithCount_one": "Nilaktawan ng huling paglunsad ang {{count}}/{{expected}} na teammate.",
+ "skippedWithCount_other": "Nilaktawan ng huling paglunsad ang {{count}}/{{expected}} na teammate.",
+ "stopped": "Huminto ang huling paglunsad bago sumali ang lahat ng teammate.",
+ "stoppedWithCount": "Huminto ang huling paglunsad bago sumali ang {{count}}/{{expected}} na teammate.",
+ "stoppedWithCount_few": "Huminto ang huling paglunsad bago sumali ang {{count}}/{{expected}} na teammate.",
+ "stoppedWithCount_many": "Huminto ang huling paglunsad bago sumali ang {{count}}/{{expected}} na teammate.",
+ "stoppedWithCount_one": "Huminto ang huling paglunsad bago sumali ang {{count}}/{{expected}} na teammate.",
+ "stoppedWithCount_other": "Huminto ang huling paglunsad bago sumali ang {{count}}/{{expected}} na teammate."
+ },
+ "noDescription": "Walang paglalarawan",
+ "solo": "Solo",
+ "membersCount": "Mga miyembro: {{count}}",
+ "membersCount_few": "Mga miyembro: {{count}}",
+ "membersCount_many": "Mga miyembro: {{count}}",
+ "membersCount_one": "Miyembro: {{count}}",
+ "membersCount_other": "Mga miyembro: {{count}}",
+ "all": "Lahat",
+ "moreCount": "+{{count}} pa",
+ "moreCount_one": "+{{count}} pa",
+ "moreCount_other": "+{{count}} pa",
+ "moreCount_few": "+{{count}} pa",
+ "moreCount_many": "+{{count}} pa"
+ },
+ "runtimeProvider": {
+ "defaults": {
+ "scopeDescriptionAllProjects": "Default para sa bawat proyekto na walang sariling OpenCode override.",
+ "scopeDescriptionProject": "I-override lang ang napiling proyekto. Hindi babaguhin ang mga tumatakbong team.",
+ "setAllProjectsDefault": "Itakda ang default para sa lahat ng proyekto",
+ "setProjectDefault": "Itakda ang default ng proyekto",
+ "validationContext": "Validation context",
+ "projectOverrideContext": "Project override context",
+ "selectProjectHint": "Pumili ng proyekto bago subukan ang mga lokal na model o mag-save ng mga default.",
+ "allProjectsHint": "Gumagamit ang mga test ng {{project}}. Nalalapat ang default maliban kung may override ang isang proyekto.",
+ "projectHint": "Ino-override lang ng pag-save ang {{project}}."
+ }
+ },
+ "sessionContext": {
+ "header": {
+ "title": "Context",
+ "closePanel": "Isara ang panel",
+ "phase": "Phase:",
+ "current": "Kasalukuyan",
+ "view": "View:",
+ "category": "Kategorya",
+ "bySize": "Ayon sa Laki"
+ },
+ "metrics": {
+ "unavailable": "Hindi available",
+ "contextUsed": "Context na Ginamit",
+ "promptInput": "Prompt Input",
+ "visibleContext": "Visible Context",
+ "ofContext": "ng context",
+ "ofPrompt": "ng prompt",
+ "codexTelemetryUnavailable": "Hindi pa inilalantad ng kasalukuyang runtime telemetry ang prompt-side usage ng Codex, kaya nananatiling hindi available ang Prompt Input at Context na Ginamit sa halip na magpakita ng pekeng zero.",
+ "sessionCost": "Gastos ng Session:",
+ "parentPlus": "parent +",
+ "subagents": "mga subagent",
+ "details": "mga detalye"
+ },
+ "help": {
+ "contextUsed": {
+ "title": "Context na Ginamit",
+ "description": "Prompt input kasama ang mga output token na kasalukuyang sumasakop sa context window ng model."
+ },
+ "promptInput": {
+ "title": "Prompt Input",
+ "description": "Mga token na ipinadala sa model bago ang generation. Para sa Claude, kasama dito ang `input_tokens + cache_creation_input_tokens + cache_read_input_tokens`."
+ },
+ "visibleContext": {
+ "title": "Visible Context",
+ "description": "Ang masusuring bahagi ng prompt input: mga file, CLAUDE.md, mga tool output, mga mensahe ng user, at katulad na mga injection na direkta mong maoo-optimize."
+ },
+ "availability": {
+ "title": "Availability",
+ "description": "Kung hindi pa inilalantad ng isang provider runtime ang prompt-side usage, ipinapakita ng panel ang mga metric bilang hindi available sa halip na magpanggap na zero ang mga ito."
+ }
+ },
+ "items": {
+ "turn": "@Turn {{turn}}",
+ "tokensApprox": "~{{tokens}} token",
+ "toolsCount": "{{count}} tool",
+ "toolsCount_one": "{{count}} tool",
+ "toolsCount_other": "{{count}} tool",
+ "toolsCount_few": "{{count}} tool",
+ "toolsCount_many": "{{count}} tool",
+ "itemsCount": "{{count}} item",
+ "itemsCount_one": "{{count}} item",
+ "itemsCount_other": "{{count}} item",
+ "itemsCount_few": "{{count}} item",
+ "itemsCount_many": "{{count}} item",
+ "missing": "nawawala",
+ "thinking": "Thinking",
+ "text": "Text"
+ },
+ "empty": "Walang natukoy na context injection sa session na ito",
+ "view": {
+ "grouped": "Naka-grupo",
+ "flat": "Flat"
+ },
+ "claudeMdFiles": "Mga CLAUDE.md File",
+ "mentionedFiles": "Mga Nabanggit na File"
+ },
+ "chat": {
+ "subagent": {
+ "fallbackName": "Subagent",
+ "shutdownConfirmed": "Nakumpirma ang shutdown",
+ "summary": {
+ "tools": "{{count}} tool",
+ "tools_one": "{{count}} tool",
+ "tools_other": "{{count}} tool",
+ "tools_few": "{{count}} tool",
+ "tools_many": "{{count}} tool"
+ },
+ "meta": {
+ "type": "Uri",
+ "duration": "Tagal",
+ "model": "Model",
+ "id": "ID"
+ },
+ "metrics": {
+ "contextWindow": "Context Window",
+ "contextUsage": "Paggamit ng Context",
+ "mainContext": "Main Context",
+ "totalOutput": "Kabuuang Output",
+ "turns": "({{count}} turn)",
+ "turns_one": "({{count}} turn)",
+ "turns_other": "({{count}} turn)",
+ "subagentContext": "Subagent Context",
+ "phase": "Phase {{phase}}",
+ "turns_few": "({{count}} turn)",
+ "turns_many": "({{count}} turn)"
+ },
+ "trace": {
+ "title": "Execution Trace"
+ }
+ },
+ "user": {
+ "you": "Ikaw",
+ "showMore": "Magpakita pa",
+ "showLess": "Magpakita ng mas kaunti",
+ "backgroundTask": "Background task",
+ "exitCode": "exit {{code}}",
+ "imagesAttached": "{{count}} larawang naka-attach",
+ "imagesAttached_one": "{{count}} larawang naka-attach",
+ "imagesAttached_few": "{{count}} larawang naka-attach",
+ "imagesAttached_many": "{{count}} larawang naka-attach",
+ "imagesAttached_other": "{{count}} larawang naka-attach"
+ },
+ "compact": {
+ "toggle": "I-toggle ang compacted content",
+ "contextCompacted": "Na-compact ang context",
+ "freedTokens": "({{tokens}} napalaya)",
+ "phase": "Phase {{phase}}",
+ "conversationCompacted": "Na-compact ang Pag-uusap",
+ "summary": "Nilagom ang mga nakaraang mensahe para makatipid ng context. Napreserba ang buong kasaysayan ng pag-uusap sa session file.",
+ "compacted": "Na-compact"
+ },
+ "executionTrace": {
+ "empty": "Walang execution item",
+ "nested": "Nested: {{name}}",
+ "input": "Input"
+ },
+ "items": {
+ "empty": "Walang item na ipapakita"
+ },
+ "tools": {
+ "teammateSpawned": "Na-spawn ang teammate",
+ "shutdownRequested": "Hiniling ang shutdown ->",
+ "noResultReceived": "Walang natanggap na resulta",
+ "duration": "Tagal: {{duration}}",
+ "result": "Resulta",
+ "write": {
+ "createdFile": "Nilikhang file",
+ "wroteToFile": "Isinulat sa file"
+ },
+ "skill": {
+ "instructions": "Mga Tagubilin sa Skill",
+ "unknown": "Hindi Kilalang Skill"
+ }
+ },
+ "lastOutput": {
+ "requestInterrupted": "Inabala ng user ang request",
+ "planReadyForApproval": "Handa na ang Plano para sa Pag-apruba"
+ },
+ "empty": {
+ "icon": "💬",
+ "title": "Walang kasaysayan ng pag-uusap",
+ "description": "Wala pang mensahe ang session na ito."
+ },
+ "context": {
+ "remainingPercent": "({{percent}}% natitira)",
+ "count": "Context ({{count}})",
+ "count_one": "Context ({{count}})",
+ "count_other": "Context ({{count}})",
+ "count_few": "Context ({{count}})",
+ "count_many": "Context ({{count}})"
+ },
+ "scrollToBottom": "Mag-scroll pababa",
+ "bottom": "Ibaba",
+ "teammateMessage": {
+ "message": "Mensahe",
+ "resent": "Ipinadalang muli",
+ "fallback": "Mensahe ng teammate"
+ },
+ "system": {
+ "label": "System"
+ }
+ },
+ "tmuxInstaller": {
+ "summaryTitle": "Hindi naka-install ang tmux",
+ "detectedOs": "Natukoy na OS: {{os}}",
+ "runtimePath": "Runtime path: {{path}}",
+ "phase": "Phase: {{phase}}",
+ "actions": {
+ "cancel": "Kanselahin",
+ "manualGuide": "Manual na gabay",
+ "hideSetupSteps": "Itago ang mga hakbang sa setup",
+ "showSetupSteps": "Ipakita ang mga hakbang sa setup ({{count}})",
+ "showSetupSteps_one": "Ipakita ang hakbang sa setup ({{count}})",
+ "showSetupSteps_other": "Ipakita ang mga hakbang sa setup ({{count}})",
+ "recheck": "Suriing muli",
+ "showSetupSteps_few": "Ipakita ang mga hakbang sa setup ({{count}})",
+ "showSetupSteps_many": "Ipakita ang mga hakbang sa setup ({{count}})"
+ },
+ "installerProgress": "Progreso ng installer",
+ "input": {
+ "placeholder": "Magpadala ng input sa installer",
+ "send": "Magpadala ng input",
+ "passwordNotice": "Direktang ipinapadala ang password input sa terminal ng installer at hindi idinaragdag sa log output."
+ },
+ "details": {
+ "show": "Ipakita ang mga detalye",
+ "hide": "Itago ang mga detalye"
+ }
+ },
+ "commandPalette": {
+ "noRecentActivity": "Walang kamakailang aktibidad",
+ "sessionsCount": "{{count}} session",
+ "sessionsCount_one": "{{count}} session",
+ "sessionsCount_other": "{{count}} session",
+ "mode": {
+ "searchProjects": "Maghanap ng mga proyekto",
+ "searchAcrossProjects": "Maghanap sa lahat ng proyekto",
+ "searchInProject": "Maghanap sa proyekto"
+ },
+ "currentProject": "Kasalukuyang proyekto",
+ "global": "Global",
+ "placeholders": {
+ "projects": "Maghanap ng mga proyekto...",
+ "conversations": "Maghanap ng mga pag-uusap..."
+ },
+ "empty": {
+ "noProjectsForQuery": "Walang nahanap na proyekto para sa \"{{query}}\"",
+ "noProjects": "Walang nahanap na proyekto",
+ "minChars": "Mag-type ng hindi bababa sa 2 character para maghanap",
+ "noFastResults": "Walang mabilis na resulta sa kamakailang mga session para sa \"{{query}}\"",
+ "noResults": "Walang nahanap na resulta para sa \"{{query}}\""
+ },
+ "footer": {
+ "projectsCount": "{{count}} proyekto",
+ "projectsCount_one": "{{count}} proyekto",
+ "projectsCount_other": "{{count}} proyekto",
+ "results": "{{count}} {{speed}}resulta",
+ "results_one": "{{count}} {{speed}}resulta",
+ "results_other": "{{count}} {{speed}}resulta",
+ "resultsAcrossProjects": "{{count}} {{speed}}resulta sa lahat ng proyekto",
+ "resultsAcrossProjects_one": "{{count}} {{speed}}resulta sa lahat ng proyekto",
+ "resultsAcrossProjects_other": "{{count}} {{speed}}resulta sa lahat ng proyekto",
+ "fastPrefix": "mabilis ",
+ "typeToSearch": "Mag-type para maghanap",
+ "navigate": "mag-navigate",
+ "select": "pumili",
+ "open": "buksan",
+ "global": "global",
+ "close": "isara",
+ "results_few": "{{count}} {{speed}}resulta",
+ "results_many": "{{count}} {{speed}}resulta",
+ "resultsAcrossProjects_few": "{{count}} {{speed}}resulta sa lahat ng proyekto",
+ "resultsAcrossProjects_many": "{{count}} {{speed}}resulta sa lahat ng proyekto",
+ "projectsCount_few": "{{count}} proyekto",
+ "projectsCount_many": "{{count}} proyekto",
+ "upDownKey": "↑↓",
+ "escapeKey": "esc"
+ },
+ "sessionsCount_few": "{{count}} session",
+ "sessionsCount_many": "{{count}} session"
+ },
+ "tasksPanel": {
+ "title": "Mga Task",
+ "searchPlaceholder": "Maghanap ng mga task...",
+ "pinned": "Naka-pin",
+ "groupByLabel": "Igrupo ayon sa:",
+ "groupByAria": "Igrupo ayon sa",
+ "groupModes": {
+ "none": "Wala",
+ "project": "Proyekto",
+ "time": "Oras"
+ },
+ "showArchived": "Ipakita ang naka-archive",
+ "hideArchived": "Itago ang naka-archive",
+ "empty": {
+ "noMatchingTasks": "Walang tumutugmang task",
+ "noTasks": "Walang nahanap na task"
+ },
+ "teamLabel": "Team: {{team}}",
+ "showMore": "Magpakita pa",
+ "showLess": "Magpakita ng mas kaunti",
+ "deleteConfirm": {
+ "title": "Tanggalin ang task",
+ "message": "Ilipat ang task #{{taskId}} sa trash?",
+ "confirmLabel": "Tanggalin",
+ "cancelLabel": "Kanselahin"
+ },
+ "deleteFailed": {
+ "title": "Nabigong tanggalin ang task",
+ "fallbackMessage": "May naganap na hindi inaasahang error",
+ "confirmLabel": "OK"
+ },
+ "sort": {
+ "byTime": "Ayon sa oras",
+ "byUnread": "Ayon sa hindi nabasa",
+ "byProject": "Ayon sa proyekto",
+ "byTeam": "Ayon sa team"
+ }
+ },
+ "toolViewer": {
+ "input": "Input",
+ "replaceAll": "(palitan lahat)",
+ "noInputRecorded": "Walang naitalang input para sa tool call na ito.",
+ "agent": {
+ "action": "aksyon",
+ "teammate": "teammate",
+ "team": "team",
+ "runtime": "runtime",
+ "type": "uri",
+ "startupInstructionsHidden": "Nakatago sa UI ang mga startup instruction."
+ }
+ },
+ "taskContextMenu": {
+ "unpin": "I-unpin",
+ "pin": "I-pin",
+ "rename": "Palitan ang pangalan",
+ "markUnread": "Markahan bilang hindi nabasa",
+ "unarchive": "I-unarchive",
+ "archive": "I-archive",
+ "deleteTask": "Tanggalin ang task"
+ },
+ "updateDialog": {
+ "closeDialog": "Isara ang dialog",
+ "updateAvailable": "May available na update",
+ "updateReady": "Handa na ang Update",
+ "noReleaseNotes": "Walang available na release notes.",
+ "viewOnGitHub": "Tingnan sa GitHub",
+ "later": "Mamaya",
+ "restartNow": "I-restart ngayon",
+ "download": "I-download"
+ },
+ "errorBoundary": {
+ "title": "May naganap na mali",
+ "description": "May naganap na hindi inaasahang error sa application. Maaari mong subukang i-reload ang page o i-reset ang error state.",
+ "componentStack": "Component Stack",
+ "tryAgain": "Subukang Muli",
+ "copied": "Nakopya",
+ "copyErrorDetails": "Kopyahin ang mga Detalye ng Error",
+ "reportBugOnGitHub": "Mag-ulat ng Bug sa GitHub",
+ "reloadApp": "I-reload ang App",
+ "diagnosticsNotice": "Kasama sa mga ulat ng bug sa GitHub at sa mga kinopyang diagnostics ang mensahe ng error, mga stack trace, bersyon ng app, aktibong tab, napiling team, task context, at mga detalye ng environment."
+ },
+ "runtimeBackendSelector": {
+ "label": "Runtime backend",
+ "resolved": "Resolved: {{backend}}",
+ "current": "Kasalukuyan",
+ "recommended": "Inirerekomenda",
+ "unavailable": "Hindi available",
+ "cannotSelectYet": "Hindi pa mapipili ang backend na ito.",
+ "auto": "Auto",
+ "autoCurrently": "Auto (kasalukuyan: {{backend}})",
+ "audience": {
+ "internal": "Internal"
+ },
+ "states": {
+ "locked": "Naka-lock",
+ "disabled": "Naka-disable",
+ "authRequired": "Kailangan ng auth",
+ "runtimeMissing": "Nawawala ang runtime",
+ "degraded": "Degraded",
+ "unavailable": "Hindi available"
+ }
+ },
+ "providerModelBadges": {
+ "checking": "Sinusuri",
+ "unavailable": "Hindi available",
+ "checkFailed": "Nabigo ang pagsuri",
+ "free": "Libre",
+ "freeTooltip": "Iniulat ng OpenCode metadata. Maaaring magbago ang availability at mga limitasyon."
+ },
+ "taskFilters": {
+ "status": "Status",
+ "clearAll": "I-clear lahat",
+ "selectAll": "Piliin lahat",
+ "team": "Team",
+ "allTeams": "Lahat ng team",
+ "searchTeams": "Maghanap ng mga team...",
+ "noTeamsFound": "Walang nahanap na team",
+ "project": "Proyekto",
+ "allProjects": "Lahat ng Proyekto",
+ "searchProjects": "Maghanap ng mga proyekto...",
+ "noProjects": "Walang proyekto",
+ "comments": "Mga Komento",
+ "apply": "Ilapat",
+ "read": {
+ "all": "Lahat",
+ "unread": "Hindi nabasa",
+ "read": "Nabasa"
+ },
+ "statusOptions": {
+ "todo": "TODO",
+ "inProgress": "GINAGAWA",
+ "needsFix": "KAILANGANG AYUSIN",
+ "done": "TAPOS",
+ "review": "REVIEW",
+ "approved": "INAPRUBAHAN"
+ }
+ },
+ "sessionItem": {
+ "totalContext": "Kabuuang Context: {{tokens}} token",
+ "context": "Context: {{tokens}}",
+ "phase": "Phase {{phase}}:",
+ "compactedTo": "(na-compact sa {{tokens}})"
+ },
+ "notifications": {
+ "row": {
+ "team": "team",
+ "subagent": "subagent",
+ "markAsRead": "Markahan bilang nabasa",
+ "delete": "Tanggalin",
+ "viewInSession": "Tingnan sa session"
+ },
+ "title": "Mga Notification",
+ "loading": "Niloload ang mga notification...",
+ "actions": {
+ "markFilteredAsRead": "Markahan ang na-filter bilang nabasa",
+ "markAllAsRead": "Markahan lahat bilang nabasa",
+ "markFilteredRead": "Markahan ang na-filter na nabasa",
+ "markAllRead": "Markahan lahat na nabasa",
+ "clearFilteredNotifications": "I-clear ang mga na-filter na notification",
+ "clearAllNotifications": "I-clear ang lahat ng notification",
+ "clickToConfirm": "I-click para kumpirmahin",
+ "clearFiltered": "I-clear ang na-filter",
+ "clearAll": "I-clear lahat"
+ },
+ "counts": {
+ "unreadInFilter": "{{count}} hindi nabasa sa filter",
+ "unreadInFilter_one": "{{count}} hindi nabasa sa filter",
+ "unreadInFilter_few": "{{count}} hindi nabasa sa filter",
+ "unreadInFilter_many": "{{count}} hindi nabasa sa filter",
+ "unreadInFilter_other": "{{count}} hindi nabasa sa filter",
+ "inFilter": "{{count}} sa filter",
+ "inFilter_one": "{{count}} sa filter",
+ "inFilter_few": "{{count}} sa filter",
+ "inFilter_many": "{{count}} sa filter",
+ "inFilter_other": "{{count}} sa filter",
+ "unread": "{{count}} hindi nabasa",
+ "unread_one": "{{count}} hindi nabasa",
+ "unread_few": "{{count}} hindi nabasa",
+ "unread_many": "{{count}} hindi nabasa",
+ "unread_other": "{{count}} hindi nabasa",
+ "total": "{{count}} kabuuan",
+ "total_one": "{{count}} kabuuan",
+ "total_few": "{{count}} kabuuan",
+ "total_many": "{{count}} kabuuan",
+ "total_other": "{{count}} kabuuan"
+ },
+ "filters": {
+ "other": "Iba pa"
+ },
+ "empty": {
+ "noMatching": "Walang tumutugmang notification",
+ "noNotifications": "Walang notification",
+ "tryDifferentFilter": "Subukan ang ibang filter",
+ "allCaughtUp": "Wala ka nang dapat abutan!"
+ }
+ },
+ "updates": {
+ "restartToUpdate": "I-restart para mag-update",
+ "updateApp": "I-update ang app",
+ "downloadedRestartTooltip": "Na-download ang update, i-restart para ilapat",
+ "newVersionAvailable": "May bagong bersyon na available",
+ "updatingApp": "Ina-update ang app",
+ "updateReady": "Handa na ang update",
+ "restartNow": "I-restart ngayon"
+ },
+ "layout": {
+ "github": "GitHub",
+ "discord": "Discord",
+ "expandSidebar": "I-expand ang sidebar",
+ "collapseSidebarShortcut": "I-collapse ang sidebar ({{shortcut}})",
+ "sidebarView": "Sidebar view",
+ "resizeSidebar": "I-resize ang sidebar",
+ "closeTab": "Isara ang tab",
+ "openedFromSearch": "Binuksan mula sa paghahanap",
+ "pinnedSession": "Naka-pin na session",
+ "jumpToSection": "Tumalon sa seksyon",
+ "newTab": "Bagong tab",
+ "newTabDashboard": "Bagong tab (Dashboard)",
+ "refreshSession": "I-refresh ang session",
+ "refreshSessionWithShortcut": "I-refresh ang Session ({{shortcut}})",
+ "loadingTab": "Niloload ang tab",
+ "menu": {
+ "teams": "Mga Team",
+ "settings": "Mga Setting",
+ "extensions": "Extensions",
+ "search": "Maghanap",
+ "schedules": "Mga Schedule",
+ "docs": "Docs",
+ "exportMarkdown": "I-export bilang Markdown",
+ "exportJson": "I-export bilang JSON",
+ "exportPlainText": "I-export bilang Plain Text",
+ "analyzeSession": "Suriin ang Session"
+ },
+ "tabMenu": {
+ "closeTabs": "Isara ang {{count}} Tab",
+ "closeTabs_one": "Isara ang {{count}} Tab",
+ "closeTabs_few": "Isara ang {{count}} Tab",
+ "closeTabs_many": "Isara ang {{count}} Tab",
+ "closeTabs_other": "Isara ang {{count}} Tab",
+ "closeTab": "Isara ang Tab",
+ "closeOtherTabs": "Isara ang Ibang Tab",
+ "splitRight": "Hatiin sa Kanan",
+ "splitLeft": "Hatiin sa Kaliwa",
+ "pinToSidebar": "I-pin sa Sidebar",
+ "unpinFromSidebar": "I-unpin mula sa Sidebar",
+ "hideFromSidebar": "Itago mula sa Sidebar",
+ "unhideFromSidebar": "Ipakita mula sa Sidebar",
+ "closeAllTabs": "Isara ang Lahat ng Tab"
+ },
+ "sections": {
+ "team": "Team",
+ "sessions": "Mga Session",
+ "kanban": "Kanban",
+ "claudeLogs": "Mga Log",
+ "messages": "Mga Mensahe"
+ }
+ },
+ "editorFormatting": {
+ "bold": "Bold",
+ "italic": "Italic",
+ "strike": "Strike",
+ "code": "Code"
+ },
+ "diff": {
+ "changed": "Binago",
+ "noChangesDetected": "Walang natukoy na pagbabago"
+ },
+ "codexLogin": {
+ "copyLoginLinkAndCode": "Kopyahin ang ChatGPT login link at code",
+ "copyLoginLink": "Kopyahin ang ChatGPT login link",
+ "copyFailed": "Nabigo ang pagkopya",
+ "copyLinkAndCode": "Kopyahin ang link + code",
+ "copyLink": "Kopyahin ang link",
+ "enterCodeOnLoginPage": "Ilagay ang code na ito sa ChatGPT login page"
+ },
+ "window": {
+ "minimize": "I-minimize",
+ "maximize": "I-maximize",
+ "restore": "Ibalik"
+ },
+ "context": {
+ "local": "Lokal",
+ "switchingTo": "Lumilipat sa {{workspace}}",
+ "loadingWorkspace": "Niloload ang workspace",
+ "switchWorkspace": "Lumipat ng Workspace"
+ },
+ "repositories": {
+ "noneAvailable": "Walang available na repository",
+ "remove": "Tanggalin ang repository"
+ },
+ "export": {
+ "session": "I-export ang session",
+ "sessionTitle": "I-export ang Session"
+ },
+ "brand": {
+ "claude": "Claude"
+ },
+ "sessionReport": {
+ "noSessionData": "Walang available na session data",
+ "title": "Session Report"
+ },
+ "sessionFilters": {
+ "project": {
+ "selectProject": "Pumili ng Proyekto"
+ }
+ },
+ "tasks": {
+ "date": {
+ "updatedPrefix": "upd",
+ "updatedYesterday": "upd kahapon",
+ "yesterday": "Kahapon"
+ },
+ "reviewState": {
+ "needsFix": "Kailangang Ayusin"
+ },
+ "unassigned": "hindi nakatalaga"
+ }
+}
diff --git a/src/features/localization/renderer/locales/fil/dashboard.json b/src/features/localization/renderer/locales/fil/dashboard.json
new file mode 100644
index 00000000..44ab32e6
--- /dev/null
+++ b/src/features/localization/renderer/locales/fil/dashboard.json
@@ -0,0 +1,197 @@
+{
+ "cliStatus": {
+ "actions": {
+ "alreadyLoggedIn": "Naka-login na?",
+ "becomeSponsor": "Maging sponsor",
+ "cancel": "Kanselahin",
+ "checkNow": "Tingnan ngayon",
+ "checkUpdates": "Maghanap ng Update",
+ "checking": "Sinusuri...",
+ "connect": "Kumonekta",
+ "extensions": "Extensions",
+ "login": "Mag-login",
+ "manage": "Pamahalaan",
+ "manageProviders": "Pamahalaan ang mga Provider",
+ "plan": "Plano",
+ "recheck": "Suriing muli",
+ "recheckProvider": "Suriing muli ang {{provider}}",
+ "retry": "Subukang muli",
+ "updateTo": "I-update sa v{{version}}",
+ "useCode": "Gamitin ang code"
+ },
+ "atlas": {
+ "alt": "Atlas Cloud",
+ "description": "Ang Atlas Cloud ay isang full-modal na platform para sa AI inference na nagbibigay sa mga developer ng iisang AI API para ma-access ang video generation, image generation, at mga LLM API. Sa halip na mamahala ng maraming vendor integration, kumonekta ka nang isang beses at makakakuha ng pinag-isang access sa 300+ na curated na model sa lahat ng modality. Tingnan ang bagong coding plan promotion ng Atlas Cloud para sa mas abot-kayang access sa API.",
+ "openCodeProvider": "OpenCode provider",
+ "plan": "Atlas Cloud coding plan",
+ "sponsor": "Sponsor"
+ },
+ "errors": {
+ "checkStatusFailed": "Hindi nasuri ang status ng CLI",
+ "installationFailed": "Nabigo ang pag-install",
+ "refreshFailed": "Hindi nasuri ang mga update. Tingnan ang iyong koneksyon sa network at subukang muli.",
+ "runtimeUpdatedRefreshFailed": "Na-update ang runtime, ngunit hindi na-refresh ang status ng provider."
+ },
+ "hints": {
+ "backgroundStatus": "Susuriin ang status ng {{runtime}} sa background.",
+ "codexApiKeyFallback": "{{hint}} May available na API key fallback kung lilipat ka ng auth mode.",
+ "codexAutoApiKey": "{{hint}} Patuloy na gagamitin ng Auto ang API key hanggang sa makonekta ang ChatGPT.",
+ "codexFinishLogin": "Tapusin ang pag-login sa ChatGPT sa browser. Ilagay ang ipinapakitang code kung hihilingin.",
+ "codexNoActiveLogin": "Lumalabas lang ang mga usage limit pagkatapos makita ng Codex CLI ang isang aktibong ChatGPT account. Sa ngayon, wala itong nakikitang aktibong ChatGPT login.",
+ "codexNoActiveManagedSession": "Lumalabas lang ang mga usage limit pagkatapos makita ng Codex CLI ang isang aktibong ChatGPT account. May lokal na data ng Codex account, ngunit walang aktibong managed session na napili sa ngayon.",
+ "codexReconnectNeeded": "Lumalabas lang ang mga usage limit pagkatapos i-refresh ng Codex ang kasalukuyang napiling ChatGPT session. Sa ngayon, kailangang ikonekta muli ang lokal na session.",
+ "firstCheckSlow": "Maaaring tumagal nang hanggang 30 segundo ang unang pagsuri",
+ "loginRequiredForTeams": "Gumagana ang pag-browse ng mga session at proyekto kahit walang login. Kailangan lang ng login para magpatakbo ng agent teams.",
+ "troubleshootTitle": "Kung sigurado kang naka-login ka, subukan ang mga hakbang na ito:"
+ },
+ "installer": {
+ "checkingLatest": "Sinusuri ang pinakabagong bersyon...",
+ "downloading": "Dina-download ang {{runtime}}...",
+ "installing": "Ini-install ang {{runtime}}...",
+ "success": "Matagumpay na na-install ang {{runtime}} v{{version}}",
+ "verifying": "Bineberipika ang checksum..."
+ },
+ "labels": {
+ "apiKeyRequired": "Kailangan ng API key",
+ "comingSoon": "Malapit nang dumating",
+ "collapseProviderDetails": "I-collapse ang mga detalye ng provider",
+ "expandProviderDetails": "I-expand ang mga detalye ng provider",
+ "generateLink": "Bumuo ng link",
+ "loadingRateLimits": "Niloload ang mga rate limit",
+ "loggedOut": "Naka-logout ang provider",
+ "loginAuthFailed": "Nabigo ang authentication",
+ "loginAuthUpdated": "Na-update ang authentication",
+ "loginComplete": "Tapos na ang login",
+ "loginFailed": "Nabigo ang login",
+ "loginTitle": "Login",
+ "logoutFailed": "Nabigo ang logout",
+ "logoutTitle": "Logout",
+ "notLoggedIn": "Hindi naka-login",
+ "openLogin": "Buksan ang login",
+ "providerActionRequired": "Kailangan ng aksyon mula sa provider",
+ "resets": "magre-reset {{time}}",
+ "runtimeLoginTitle": "{{runtime}} Login"
+ },
+ "loading": {
+ "aiProviders": "Sinusuri ang mga AI Provider...",
+ "claudeCli": "Sinusuri ang Claude CLI..."
+ },
+ "provider": {
+ "authenticated": "Authenticated",
+ "backend": "Backend: {{backend}}",
+ "checkingAuthentication": "Sinusuri ang authentication...",
+ "checkingProviders": "Sinusuri ang mga provider...",
+ "configuredLocalCount": "{{count}} na-configure na lokal",
+ "configuredLocalCount_few": "{{count}} na-configure na lokal",
+ "configuredLocalCount_many": "{{count}} na-configure na lokal",
+ "configuredLocalCount_one": "{{count}} na-configure na lokal",
+ "configuredLocalCount_other": "{{count}} na-configure na lokal",
+ "configuredLocalTitle": "Mga lokal na OpenCode route na na-import mula sa iyong OpenCode config.",
+ "connectedCount": "Mga provider: {{connected}}/{{denominator}} konektado",
+ "freeModels": "Mga libreng model",
+ "freeModelsTitle": "Kasama sa OpenCode ang mga libreng model na opsyon tulad ng Big Pickle kapag available sa iyong setup. Maaari ding maglabas ang OpenRouter sa pamamagitan ng OpenCode ng mga libreng model, ngunit hindi lahat ng OpenCode/OpenRouter model ay libre. Maaaring magbago ang availability at mga limitasyon.",
+ "loadingModels": "Niloload ang mga model...",
+ "modelsUnavailable": "Hindi available ang mga model para sa runtime build na ito",
+ "runtime": "Runtime: {{runtime}}",
+ "verifiedCount": "{{count}} na-verify",
+ "verifiedCount_few": "{{count}} na-verify",
+ "verifiedCount_many": "{{count}} na-verify",
+ "verifiedCount_one": "{{count}} na-verify",
+ "verifiedCount_other": "{{count}} na-verify",
+ "verifiedTitle": "Mga OpenCode route na may matagumpay na execution proof."
+ },
+ "runtime": {
+ "configuredHealthCheckFailed": "Nabigo sa startup health check ang na-configure na {{runtime}}.",
+ "configuredNotFound": "Hindi nakita ang na-configure na {{runtime}}.",
+ "foundButFailed": "Nakita ang {{runtime}} ngunit nabigong magsimula",
+ "healthCheckFailedDescription": "Nakita ng app ang na-configure na {{runtime}}, ngunit nabigo ang startup health check nito. Ayusin o i-reinstall ito, pagkatapos ay subukang muli.",
+ "install": "I-install ang {{runtime}}",
+ "installRequiredDescription": "Kailangan ang {{runtime}} para sa team provisioning at session management. I-install ito para makapagsimula.",
+ "isRequired": "Kailangan ang {{runtime}}",
+ "reinstall": "I-reinstall ang {{runtime}}"
+ },
+ "runtimeInstall": {
+ "checking": "Sinusuri",
+ "codexTitle": "I-install ang Codex CLI sa app data",
+ "downloading": "Dina-download",
+ "downloadingPercent": "Dina-download {{percent}}%",
+ "install": "I-install",
+ "installing": "Ini-install",
+ "openCodeTitle": "I-install ang OpenCode runtime sa app data",
+ "retryInstall": "Subukang muli ang pag-install"
+ },
+ "troubleshoot": {
+ "again": "muli",
+ "authStatusCommand": "ang iyong na-configure na CLI auth status command",
+ "checkLoggedIn": "- tingnan kung ipinapakita nito ang \"Logged in\"",
+ "click": "I-click",
+ "loginCommand": "ang runtime login command",
+ "logoutCommand": "ang runtime logout command",
+ "openTerminal": "Buksan ang iyong terminal at patakbuhin:",
+ "reloginPrefix": "Kung sinasabi nitong naka-login ka ngunit hindi ito nakikita ng app, subukan:",
+ "sameRuntime": "Tiyaking ang CLI sa iyong terminal ay pareho ng runtime na ginagamit ng app",
+ "statusCacheHint": "- minsan naka-cache ang status nang ilang segundo",
+ "then": "pagkatapos"
+ },
+ "warnings": {
+ "multipleApiKeysMissing": "Isa o higit pang provider ang naka-set sa API key mode, ngunit walang naka-configure na API key. Buksan ang Manage Providers para magdagdag ng key o palitan ang connection mode.",
+ "multipleApiKeysNeedAttention": "Isa o higit pang provider ang naka-set sa API key mode at nangangailangan ng atensyon. Buksan ang Manage Providers para suriin ang mga naka-save na key o palitan ang connection mode.",
+ "notAuthenticated": "Naka-install ang {{runtime}} ngunit hindi ka authenticated. Kailangan ng login para sa team provisioning at mga AI feature.",
+ "singleApiKeyMissing": "Ang {{provider}} ay naka-set sa API key mode, ngunit walang naka-configure na API key. Buksan ang Manage Providers para magdagdag ng key o palitan ang connection mode.",
+ "singleApiKeyNeedsAttention": "Ang {{provider}} ay naka-set sa API key mode, ngunit hindi ito konektado. Buksan ang Manage Providers para suriin ang naka-save na key o palitan ang connection mode."
+ }
+ },
+ "recentProjects": {
+ "selectFolderTitle": "Pumili ng folder ng proyekto",
+ "selectFolder": "Pumili ng Folder",
+ "failedToLoad": "Nabigong i-load ang mga proyekto",
+ "retry": "Subukang muli",
+ "noProjects": "Walang nahanap na proyekto",
+ "noMatches": "Walang tugma para sa \"{{query}}\"",
+ "noRecentProjects": "Walang nahanap na kamakailang proyekto",
+ "emptyDescription": "Lalabas dito ang kamakailang aktibidad ng Claude at Codex.",
+ "loadMore": "Mag-load pa",
+ "card": {
+ "deleted": "Tinanggal",
+ "projectFolderMissing": "Wala na ang folder ng proyekto",
+ "taskCounts": {
+ "active": "{{count}} aktibo",
+ "active_one": "{{count}} aktibo",
+ "active_other": "{{count}} aktibo",
+ "active_few": "{{count}} aktibo",
+ "active_many": "{{count}} aktibo",
+ "pending": "{{count}} nakabinbin",
+ "pending_one": "{{count}} nakabinbin",
+ "pending_other": "{{count}} nakabinbin",
+ "pending_few": "{{count}} nakabinbin",
+ "pending_many": "{{count}} nakabinbin",
+ "done": "{{count}} tapos",
+ "done_one": "{{count}} tapos",
+ "done_other": "{{count}} tapos",
+ "done_few": "{{count}} tapos",
+ "done_many": "{{count}} tapos"
+ }
+ },
+ "title": "Kamakailang Proyekto",
+ "searchResults": "Mga Resulta ng Paghahanap",
+ "searchPlaceholder": "Maghanap ng proyekto..."
+ },
+ "actions": {
+ "selectTeam": "Pumili ng Team",
+ "or": "o",
+ "clearSearch": "I-clear ang paghahanap"
+ },
+ "windowsAdmin": {
+ "title": "Inirerekomenda ang Windows Administrator mode",
+ "description": "Maaaring mag-time out ang mga pagsuri ng OpenCode runtime kapag hindi naka-elevate ang Agent Teams AI. I-restart ang app gamit ang Run as administrator bago maglunsad ng mga OpenCode team."
+ },
+ "webPreview": {
+ "title": "Buksan ang desktop app para sa buong functionality",
+ "description": "Nasa development pa rin ang bersyon sa browser. Maaaring limitado dito ang mga aksyon sa proyekto, integration, at live na update ng status. Gamitin ang desktop app para ma-access nang maaasahan ang lahat ng feature."
+ },
+ "updateBanner": {
+ "newVersionAvailable": "May bagong bersyon na available",
+ "restartNow": "I-restart ngayon",
+ "viewDetails": "Tingnan ang mga detalye"
+ }
+}
diff --git a/src/features/localization/renderer/locales/fil/errors.json b/src/features/localization/renderer/locales/fil/errors.json
new file mode 100644
index 00000000..fe78249d
--- /dev/null
+++ b/src/features/localization/renderer/locales/fil/errors.json
@@ -0,0 +1,3 @@
+{
+ "fallback": "May naganap na mali."
+}
diff --git a/src/features/localization/renderer/locales/fil/extensions.json b/src/features/localization/renderer/locales/fil/extensions.json
new file mode 100644
index 00000000..8ca61880
--- /dev/null
+++ b/src/features/localization/renderer/locales/fil/extensions.json
@@ -0,0 +1,688 @@
+{
+ "store": {
+ "actions": {
+ "addCustom": "Magdagdag ng Custom",
+ "openDashboard": "Buksan ang Dashboard",
+ "refreshCatalog": "I-refresh ang catalog"
+ },
+ "capabilities": {
+ "mcp": "MCP: {{status}}",
+ "plugins": "Plugins: {{status}}",
+ "skills": "Skills: {{status}}"
+ },
+ "desktopOnly": "Available sa desktop app lang.",
+ "provider": {
+ "checkingStatus": "Sinusuri ang status ng provider...",
+ "connected": "Konektado",
+ "loading": "Niloload...",
+ "needsSetup": "Kailangan ng setup",
+ "readyToConfigure": "Handa nang i-configure",
+ "unsupported": "Hindi sinusuportahan"
+ },
+ "runtime": {
+ "checkingAvailabilityDescription": "Kailangan ng Extensions ang na-configure na runtime para mamahala ng mga plugin, MCP server, skill, at provider connection.",
+ "checkingAvailabilityTitle": "Sinusuri ang availability ng extensions runtime",
+ "failedToStartDescription": "Naka-disable ang Extensions hanggang sa pumasa ang runtime sa startup health check nito. Buksan ang Dashboard para ayusin o i-reinstall ito.",
+ "failedToStartTitle": "Nakita ang na-configure na runtime ngunit nabigong magsimula",
+ "multimodelCapabilitiesDescription": "Maaaring magkaiba ang suporta ng provider ayon sa seksyon. Ipinapakita ang mga plugin kung saan lang tahasang idineklara ng runtime ang suporta.",
+ "multimodelCapabilitiesTitle": "Mga kakayahan ng multimodel runtime",
+ "needsSignInDescription": "Nakita ang {{runtime}}{{version}}, ngunit naka-disable ang mga pag-install ng plugin hanggang sa mag-sign in ka mula sa Dashboard.",
+ "needsSignInTitle": "Kailangang mag-sign in ang {{runtime}}",
+ "notAvailableDescription": "Naka-disable ang Extensions hanggang sa ma-install ang runtime. Buksan ang Dashboard para i-install ito at subukang muli.",
+ "notAvailableTitle": "Hindi available ang na-configure na runtime",
+ "readyDescription": "Maaaring i-install ang mga plugin mula sa page na ito{{versionSuffix}}.",
+ "readyTitle": "Handa na ang {{runtime}}",
+ "requiredForMutations": "Kailangan ang na-configure na runtime para mag-install o mag-uninstall ng mga extension. I-install o ayusin ito mula sa Dashboard."
+ },
+ "sessionsRestartWarning": "Hindi makukuha ng mga tumatakbong session ang mga pagbabago sa extension hanggang sa ma-restart ang mga ito.",
+ "tabs": {
+ "apiKeys": {
+ "description": "Mga secret key para sa mga online service. Idagdag ang mga ito dito para makakonekta at gumana ang mga plugin, server, at integration.",
+ "label": "API Keys"
+ },
+ "mcpServers": {
+ "description": "Mga koneksyon sa mga panlabas na tool at app. Pinapayagan nila ang runtime na magbasa ng data o gumawa ng mga aksyon lampas sa app na ito.",
+ "label": "MCP Servers"
+ },
+ "plugins": {
+ "description": "Mga maliit na add-on para sa runtime. Sa multimodel mode, kasalukuyang nalalapat ang mga ito sa mga Anthropic session kapag sinusuportahan. Nasa development pa ang mas malawak na suporta ng provider.",
+ "label": "Plugins"
+ },
+ "skills": {
+ "description": "Mga handa nang tagubilin para sa mga karaniwang gawain. Tinutulungan nila ang runtime na hawakan ang mga paulit-ulit na task nang mas pare-pareho.",
+ "label": "Skills"
+ }
+ },
+ "title": "Extensions"
+ },
+ "pluginsPanel": {
+ "activeFilters": "{{count}} aktibo",
+ "browseByFit": "Mag-browse ayon sa angkop",
+ "capabilities": "Mga Kakayahan",
+ "categories": "Mga Kategorya",
+ "clearAllFilters": "I-clear lahat ng filter",
+ "clearFilters": "I-clear ang mga filter",
+ "counts": {
+ "capabilities": "{{count}} kakayahan",
+ "categories": "{{count}} kategorya",
+ "plugins": "{{count}} plugin",
+ "capabilities_few": "{{count}} kakayahan",
+ "capabilities_many": "{{count}} kakayahan",
+ "capabilities_one": "{{count}} kakayahan",
+ "capabilities_other": "{{count}} kakayahan",
+ "categories_few": "{{count}} kategorya",
+ "categories_many": "{{count}} kategorya",
+ "categories_one": "{{count}} kategorya",
+ "categories_other": "{{count}} kategorya",
+ "plugins_few": "{{count}} plugin",
+ "plugins_many": "{{count}} plugin",
+ "plugins_one": "{{count}} plugin",
+ "plugins_other": "{{count}} plugin"
+ },
+ "empty": {
+ "description": "Bumalik mamaya para sa mga bagong plugin",
+ "filteredDescription": "Subukang ayusin ang iyong paghahanap o criteria ng filter",
+ "filteredTitle": "Walang plugin na tumutugma sa iyong mga filter",
+ "title": "Walang available na plugin"
+ },
+ "filterDescription": "Paliitin ang catalog ayon sa kategorya, kakayahan, o naka-install na state.",
+ "installedOnly": "Naka-install lang",
+ "providerSupportNotice": "Kasalukuyang ginagarantiya ang suporta sa plugin para sa mga Anthropic (Claude) session lang. Ginagawan namin ng paraan na suportahan ang mga plugin sa lahat ng agent.",
+ "resultsUpdateInstantly": "Agad na nag-a-update ang mga resulta habang pinipino mo ang mga filter.",
+ "searchPlaceholder": "Maghanap ng mga plugin...",
+ "selectedCount": "{{count}} napili",
+ "showing": "Ipinapakita ang {{shown}} ng {{total}} plugin",
+ "sort": {
+ "category": "Kategorya",
+ "nameAsc": "Pangalan A-Z",
+ "nameDesc": "Pangalan Z-A",
+ "popular": "Popular"
+ },
+ "activeFilters_few": "{{count}} aktibo",
+ "activeFilters_many": "{{count}} aktibo",
+ "activeFilters_one": "{{count}} aktibo",
+ "activeFilters_other": "{{count}} aktibo",
+ "selectedCount_few": "{{count}} napili",
+ "selectedCount_many": "{{count}} napili",
+ "selectedCount_one": "{{count}} napili",
+ "selectedCount_other": "{{count}} napili"
+ },
+ "customMcp": {
+ "actions": {
+ "add": "Idagdag",
+ "cancel": "Kanselahin",
+ "install": "I-install",
+ "installing": "Ini-install..."
+ },
+ "description": "Magdagdag ng server nang manu-mano nang walang catalog.",
+ "errors": {
+ "installFailed": "Nabigo ang pag-install",
+ "invalidServerName": "Invalid na pangalan ng server. Gumamit ng mga alphanumeric na character, gitling, underscore, tuldok.",
+ "npmPackageRequired": "Kailangan ang pangalan ng npm package",
+ "serverNameRequired": "Kailangan ang pangalan ng server",
+ "serverUrlRequired": "Kailangan ang URL ng server"
+ },
+ "fields": {
+ "environmentVariables": "Environment Variables",
+ "headers": "Headers",
+ "npmPackage": "npm Package",
+ "scope": "Scope",
+ "serverName": "Server Name",
+ "serverUrl": "Server URL",
+ "transport": "Transport",
+ "transportType": "Transport Type",
+ "versionOptional": "Bersyon (opsyonal)"
+ },
+ "title": "Magdagdag ng Custom MCP Server",
+ "transport": {
+ "httpSse": "HTTP / SSE",
+ "stdio": "Stdio (npm)"
+ },
+ "placeholders": {
+ "headerName": "Header-Name",
+ "envVarName": "ENV_VAR_NAME",
+ "serverName": "my-server",
+ "latest": "latest",
+ "value": "value",
+ "serverUrl": "https://api.example.com/mcp"
+ }
+ },
+ "mcpDetail": {
+ "auth": {
+ "remoteMayNeedHeaders": "Maaaring kailanganin pa rin ng mga remote MCP server ang mga custom header o API key kahit hindi inilalarawan ng registry ang mga ito. Kung nabigo ang koneksyon pagkatapos i-install, tingnan ang mga docs ng provider.",
+ "required": "Kailangan ng authentication ng server na ito"
+ },
+ "diagnostics": {
+ "launchTarget": "Launch Target"
+ },
+ "form": {
+ "autoFilled": "Awtomatikong napunan",
+ "environmentVariables": "Environment Variables",
+ "headers": "Headers",
+ "scope": "Scope",
+ "serverName": "Server Name"
+ },
+ "install": {
+ "httpTransport": "HTTP: {{transport}}",
+ "manualSetupDescription": "Kailangan ng manu-manong setup ng server na ito. Tingnan ang repository para sa mga tagubilin sa pag-install.",
+ "manualSetupRequired": "Kailangan ng manu-manong setup",
+ "npmPackage": "npm: {{package}}",
+ "manage": "Pamahalaan ang Pag-install",
+ "install": "I-install ang Server"
+ },
+ "links": {
+ "glama": "Glama",
+ "repository": "Repository",
+ "website": "Website"
+ },
+ "metadata": {
+ "author": "May-akda",
+ "githubStars": "GitHub Stars",
+ "hosting": "Hosting",
+ "installType": "Uri ng Install",
+ "license": "Lisensya",
+ "published": "Nai-publish",
+ "source": "Pinagmulan",
+ "updated": "Na-update",
+ "version": "Bersyon"
+ },
+ "scope": {
+ "local": "Lokal",
+ "project": "Proyekto"
+ },
+ "tools": {
+ "title": "Mga Tool ({{count}})",
+ "title_few": "Mga Tool ({{count}})",
+ "title_many": "Mga Tool ({{count}})",
+ "title_one": "Mga Tool ({{count}})",
+ "title_other": "Mga Tool ({{count}})"
+ },
+ "placeholders": {
+ "serverName": "my-server"
+ }
+ },
+ "skillEditor": {
+ "actions": {
+ "cancel": "Kanselahin",
+ "createSkill": "Lumikha ng Skill",
+ "preparing": "Naghahanda...",
+ "reviewAndCreate": "Suriin At Likhain",
+ "reviewAndSave": "Suriin At I-save",
+ "saveSkill": "I-save ang Skill"
+ },
+ "advanced": {
+ "customDescription": "Gumagamit ang skill na ito ng custom markdown format, kaya i-edit ito nang direkta dito.",
+ "customTitle": "2. SKILL.md editor",
+ "description": "Maaari itong laktawan ng karamihan. Buksan lang ito kung gusto mo ng direktang kontrol sa raw na markdown file.",
+ "hide": "Itago ang Advanced Editor",
+ "resetFromStructuredFields": "I-reset Mula sa Mga Structured Field",
+ "show": "Ipakita ang Advanced Editor",
+ "title": "4. Advanced SKILL.md editor"
+ },
+ "basics": {
+ "description": "Bigyan ang skill na ito ng malinaw na pangalan, piliin kung sino ang makakagamit nito, at magpasya kung saan ito dapat mailagay.",
+ "title": "1. Mga Pangunahin"
+ },
+ "description": {
+ "create": "Ilarawan ang workflow sa simpleng wika, suriin ang mga file na lilikhain, pagkatapos ay i-save ito.",
+ "edit": "I-update ang skill na ito, suriin ang mga resultang pagbabago sa file, pagkatapos ay i-save ito."
+ },
+ "extraFiles": {
+ "addedFiles": "Mga idinagdag na file:",
+ "assets": "Mga Asset",
+ "assetsDescription": "Magdagdag ng mga screenshot o naka-bundle na media kung tumutulong lang ang mga ito na ipaliwanag ang workflow.",
+ "description": "Magdagdag ng mga sumusuportang doc, script, o asset kung talagang kailangan ng skill na ito ng mga ito.",
+ "lockedForEdits": "Naka-lock para sa mga pag-edit ang root at folder",
+ "optionalDescription": "Magdagdag ng mga starter file na isasama sa review at isusulat kasama ang `SKILL.md`.",
+ "optionalTitle": "Mga opsyonal na file",
+ "references": "Mga Reference",
+ "referencesDescription": "Magdagdag ng mga sumusuportang doc, link, o halimbawa na maaaring tingnan ng runtime.",
+ "scripts": "Mga Script",
+ "scriptsDescription": "Magdagdag ng mga helper command o setup note. Suriing mabuti bago ibahagi ang skill na ito.",
+ "title": "3. Mga karagdagang file"
+ },
+ "fields": {
+ "compatibility": "Compatibility",
+ "description": "Paglalarawan",
+ "folderName": "Pangalan ng folder",
+ "folderNameHint": "Awtomatiko namin itong isinusuhestiyon mula sa pangalan ng skill para agad gumana ang review.",
+ "invocation": "Paano ito dapat gamitin",
+ "license": "Lisensya",
+ "name": "Pangalan ng skill",
+ "notes": "Mga karagdagang nota o guardrail",
+ "root": "Saan iimbak",
+ "scope": "Sino ang makakagamit nito",
+ "steps": "Mga pangunahing hakbang na susundin",
+ "whenToUse": "Kailan gagamitin ito"
+ },
+ "instructions": {
+ "description": "Ang mga seksyong ito ay bumubuo ng skill file para sa iyo, kaya hindi mo kailangang i-edit ang markdown maliban kung gusto mo.",
+ "locked": "Naka-lock ang mga structured field dahil lumipat ka sa manu-manong pag-edit ng `SKILL.md` sa ibaba.",
+ "title": "2. Mga Tagubilin"
+ },
+ "invocation": {
+ "auto": "Maaaring gamitin nang awtomatiko",
+ "manualOnly": "Kapag hiniling mo lang"
+ },
+ "placeholders": {
+ "description": "Ano ang tinutulungan ng skill na ito",
+ "name": "Magsulat ng maikling pangalan ng skill",
+ "notes": "Halimbawa: Tukuyin ang mga nawawalang test, regression, at mga mapanganib na palagay.",
+ "steps": "1. Suriin ang mga kaugnay na file.\n2. Ipaliwanag muna ang pangunahing panganib.\n3. Imungkahi ang pinakaligtas na ayos.",
+ "whenToUse": "Halimbawa: Gamitin ito kapag ang task ay isang code review o bug triage na kahilingan.",
+ "license": "MIT",
+ "compatibility": "claude-code, cursor"
+ },
+ "review": {
+ "creating": "Lumilikha ng skill",
+ "hint": "Suriin muna ang mga pagbabago sa file, pagkatapos ay kumpirmahin ang pag-save sa susunod na hakbang.",
+ "saving": "Sine-save ang skill na ito"
+ },
+ "root": {
+ "codexOnly": " - Codex lang",
+ "shared": " - Shared"
+ },
+ "scope": {
+ "project": "Proyekto: {{project}}",
+ "projectUnavailable": "Hindi available ang proyekto",
+ "user": "User"
+ },
+ "title": {
+ "create": "Lumikha ng skill",
+ "edit": "I-edit ang skill"
+ }
+ },
+ "skillDetail": {
+ "actions": {
+ "cancel": "Kanselahin",
+ "delete": "Tanggalin",
+ "deleteSkill": "Tanggalin ang Skill",
+ "deleting": "Tinatanggal...",
+ "editSkill": "I-edit ang Skill",
+ "openFolder": "Buksan ang Folder",
+ "openSkillFile": "Buksan ang SKILL.md",
+ "retry": "Subukang muli"
+ },
+ "badges": {
+ "assets": "Mga Asset",
+ "autoUse": "Awtomatikong paggamit",
+ "hasScripts": "May mga script",
+ "manualUse": "Manu-manong paggamit",
+ "references": "Mga Reference",
+ "storedIn": "Naka-store sa {{root}}"
+ },
+ "deleteDialog": {
+ "description": "Tanggalin ang skill na ito at ilipat sa Trash?",
+ "descriptionWithName": "Tanggalin ang \"{{name}}\" at ilipat sa Trash? Maaari mo itong ibalik mamaya mula sa Trash kung kailangan.",
+ "title": "Tanggalin ang skill?"
+ },
+ "descriptionFallback": "Suriin ang natuklasang skill metadata at raw na mga tagubilin.",
+ "errors": {
+ "deleteFailed": "Nabigong tanggalin ang skill",
+ "loadFailed": "Hindi ma-load ang skill na ito."
+ },
+ "files": {
+ "advancedDetails": "Advanced na detalye ng file",
+ "assets": "Mga Asset",
+ "references": "Mga Reference",
+ "scripts": "Mga Script",
+ "storedAt": "Naka-store sa"
+ },
+ "includes": {
+ "assets": "mga asset",
+ "instructionsOnly": "Ang mga tagubilin lang ng skill",
+ "references": "mga reference",
+ "scripts": "mga script"
+ },
+ "invocation": {
+ "auto": "Awtomatikong tumatakbo kapag tumugma sa task.",
+ "manualOnly": "Tumatakbo lang kapag tahasan mong hiniling."
+ },
+ "issues": {
+ "bundledScripts": "May kasamang mga script ang skill na ito",
+ "reviewCarefully": "Suriing mabuti ang skill na ito bago gamitin"
+ },
+ "loading": "Niloload ang mga detalye ng skill...",
+ "scope": {
+ "personal": "Ang iyong mga personal na skill",
+ "projectOnly": "Proyektong ito lang"
+ },
+ "summary": {
+ "howUsed": "Paano ito ginagamit",
+ "included": "Ano ang kasama nito",
+ "whoCanUse": "Sino ang makakagamit nito"
+ },
+ "titleFallback": "Mga detalye ng skill"
+ },
+ "skillsPanel": {
+ "actions": {
+ "createSkill": "Lumikha ng Skill",
+ "import": "I-import"
+ },
+ "badges": {
+ "assets": "Mga Asset",
+ "hasScripts": "May mga script",
+ "needsAttention": "Kailangan ng atensyon",
+ "references": "Mga Reference",
+ "storedIn": "Naka-store sa {{root}}"
+ },
+ "configuredRuntime": "ang na-configure na runtime",
+ "counts": {
+ "codexOnly": "{{count}} Codex lang",
+ "personal": "{{count}} personal",
+ "project": "{{count}} proyekto",
+ "shared": "{{count}} shared",
+ "total": "{{count}} kabuuan",
+ "codexOnly_few": "{{count}} Codex lang",
+ "codexOnly_many": "{{count}} Codex lang",
+ "codexOnly_one": "{{count}} Codex lang",
+ "codexOnly_other": "{{count}} Codex lang",
+ "personal_few": "{{count}} personal",
+ "personal_many": "{{count}} personal",
+ "personal_one": "{{count}} personal",
+ "personal_other": "{{count}} personal",
+ "project_few": "{{count}} proyekto",
+ "project_many": "{{count}} proyekto",
+ "project_one": "{{count}} proyekto",
+ "project_other": "{{count}} proyekto",
+ "shared_few": "{{count}} shared",
+ "shared_many": "{{count}} shared",
+ "shared_one": "{{count}} shared",
+ "shared_other": "{{count}} shared",
+ "total_few": "{{count}} kabuuan",
+ "total_many": "{{count}} kabuuan",
+ "total_one": "{{count}} kabuuan",
+ "total_other": "{{count}} kabuuan"
+ },
+ "empty": {
+ "noMatches": "Walang skill na tumutugma sa iyong paghahanap",
+ "noMatchesDescription": "Subukan ang ibang search term o palitan ang mga filter.",
+ "noSkills": "Wala pang skill",
+ "noSkillsDescription": "Likhain ang iyong unang skill para magturo ng paulit-ulit na workflow, o mag-import ng ginagamit mo na."
+ },
+ "filters": {
+ "all": "Lahat ng skill",
+ "codexOnly": "Codex lang",
+ "hasScripts": "May mga script",
+ "needsAttention": "Kailangan ng atensyon",
+ "personal": "Personal",
+ "project": "Proyekto",
+ "shared": "Shared"
+ },
+ "hero": {
+ "codexAvailable": "Gamitin ang `.codex` kapag dapat manatiling Codex-only ang isang skill.",
+ "codexUnavailable": "Mananatiling mae-edit dito ang mga umiiral na `.codex` skill, ngunit kailangan ng mga bagong Codex-only na skill na naka-enable ang Codex runtime.",
+ "description": "Ang mga skill ay magagamit-muling mga tagubilin na tumutulong sa runtime na hawakan ang parehong uri ng task nang mas pare-pareho.",
+ "guidance": "Gamitin ang mga personal na skill para sa mga gawi na gusto mo kahit saan. Gamitin ang mga project skill para sa mga workflow na makabuluhan lang sa loob ng isang codebase.",
+ "personalContext": "Nakikita mo lang ang iyong mga personal na skill sa ngayon.",
+ "projectContext": "Nakikita mo ang mga skill para sa {{project}} kasama ang iyong mga personal na skill.",
+ "title": "Magturo ng paulit-ulit na trabaho"
+ },
+ "invocation": {
+ "auto": "Awtomatikong tumatakbo kapag angkop",
+ "manualOnly": "Tumatakbo lang kapag tahasan mong hiniling"
+ },
+ "loading": {
+ "loading": "Niloload ang mga skill...",
+ "refreshing": "Nire-refresh ang mga skill..."
+ },
+ "runtimeAudience": "Ang mga shared na skill sa `.claude`, `.cursor`, at `.agents` ay available sa {{audience}}. Ang mga skill na naka-store sa `.codex` ay nananatiling Codex-only kapag available ang Codex support.",
+ "scope": {
+ "project": "Proyektong ito",
+ "user": "Personal"
+ },
+ "searchPlaceholder": "Maghanap ayon sa pangalan ng skill o kung ano ang tinutulungan nito...",
+ "sections": {
+ "personal": {
+ "description": "Mga gawi at tagubilin na gusto mong available kahit saan.",
+ "title": "Mga personal na skill"
+ },
+ "project": {
+ "description": "Mga workflow na makabuluhan lang para sa codebase na ito.",
+ "title": "Mga project skill"
+ }
+ },
+ "sort": {
+ "label": "Ayusin ang mga skill",
+ "name": "Pangalan",
+ "recent": "Kamakailan"
+ },
+ "status": {
+ "hasScripts": "May kasamang mga script, kaya suriing mabuti",
+ "needsAttention": "Kailangan ng atensyon bago ka umasa dito",
+ "ready": "Handa nang gamitin"
+ },
+ "success": {
+ "created": "Matagumpay na nalikha ang skill.",
+ "imported": "Matagumpay na na-import ang skill.",
+ "saved": "Matagumpay na na-save ang skill."
+ }
+ },
+ "pluginDetail": {
+ "unknown": "Hindi alam",
+ "metadata": {
+ "author": "May-akda",
+ "category": "Kategorya",
+ "source": "Pinagmulan",
+ "version": "Bersyon",
+ "capabilities": "Mga Kakayahan",
+ "installs": "Mga Install"
+ },
+ "scope": {
+ "label": "Scope:",
+ "options": {
+ "user": "User (global)",
+ "project": "Proyekto (shared)",
+ "local": "Lokal (gitignored)"
+ }
+ },
+ "links": {
+ "homepage": "Homepage",
+ "contact": "Contact"
+ },
+ "readme": {
+ "loading": "Niloload ang README...",
+ "empty": "Walang available na README."
+ }
+ },
+ "skillImport": {
+ "title": "I-import ang skill",
+ "description": "Pumili ng umiiral na skill folder, suriin kung ano ang kokopyahin, pagkatapos ay i-import ito sa isa sa iyong mga sinusuportahang skill location.",
+ "steps": {
+ "chooseFolder": {
+ "title": "1. Pumili ng skill folder",
+ "description": "Dapat itong isang folder na naglalaman na ng `SKILL.md`, `Skill.md`, o `skill.md` na file."
+ },
+ "location": {
+ "title": "2. Magpasya kung saan ito nabibilang",
+ "description": "Gumagana ang mga personal na skill kahit saan. Lumalabas lang ang mga project skill para sa isang codebase."
+ }
+ },
+ "fields": {
+ "sourceFolder": "Source folder",
+ "destinationFolderName": "Pangalan ng destination folder",
+ "audience": "Sino ang makakagamit nito",
+ "storage": "Saan iimbak"
+ },
+ "placeholders": {
+ "defaultFolderName": "Nagde-default sa pangalan ng source folder"
+ },
+ "actions": {
+ "browse": "Mag-browse",
+ "cancel": "Kanselahin",
+ "preparing": "Naghahanda...",
+ "reviewAndImport": "Suriin At I-import",
+ "importSkill": "I-import ang Skill",
+ "backToImport": "Bumalik Sa Import"
+ },
+ "scope": {
+ "user": "User",
+ "project": "Proyekto: {{project}}",
+ "projectUnavailable": "Hindi available ang proyekto"
+ },
+ "rootSuffix": {
+ "codexOnly": " - Codex lang",
+ "shared": " - Shared"
+ },
+ "reviewHint": "Suriin muna ang mga kinopyang file, pagkatapos ay kumpirmahin ang import sa susunod na hakbang.",
+ "reviewLabel": "Ini-import ang skill na ito",
+ "errors": {
+ "missingSkillFile": "Hindi pa mukhang skill ang folder na ito. Kailangan nito ng SKILL.md, Skill.md, o skill.md na file.",
+ "symbolicLinks": "May mga symbolic link ang folder na ito. I-import ang mga totoong file sa halip na mga link.",
+ "tooManyFiles": "Masyadong malaki ang skill folder na ito para i-import nang sabay-sabay. Tanggalin ang mga karagdagang file at subukang muli.",
+ "tooLarge": "Masyadong malaki ang skill folder na ito para i-import nang ligtas. Bawasan ang malalaking asset at subukang muli.",
+ "invalidFolderName": "Pumili ng mas simpleng pangalan ng destination folder gamit ang mga letra, numero, tuldok, gitling, o underscore.",
+ "mustBeDirectory": "Pumili ng folder na i-import, hindi isang file.",
+ "reviewFailed": "Nabigong suriin ang mga pagbabago sa import",
+ "importFailed": "Nabigong i-import ang skill"
+ }
+ },
+ "mcpPanel": {
+ "sort": {
+ "nameAsc": "Pangalan A→Z",
+ "nameDesc": "Pangalan Z→A",
+ "toolsDesc": "Pinakamaraming tool"
+ },
+ "health": {
+ "title": "MCP Health Status",
+ "checkingViaRuntime": "Sinusuri ang mga naka-install na MCP server sa pamamagitan ng {{runtime}} ...",
+ "lastChecked": "Huling sinuri {{time}}",
+ "description": "Magpatakbo ng diagnostics mula sa page na ito para i-verify ang naka-install na MCP connectivity.",
+ "checking": "Sinusuri...",
+ "checkStatus": "Suriin ang Status"
+ },
+ "diagnostics": {
+ "title": "Runtime MCP Diagnostics",
+ "serversCount": "{{count}} server",
+ "serversCount_one": "{{count}} server",
+ "serversCount_other": "{{count}} server",
+ "waiting": "Naghihintay ng mga resulta ng diagnostics...",
+ "disableReasons": {
+ "checkingRuntimeStatus": "Sinusuri ang status ng runtime...",
+ "checkingRuntimeAvailability": "Sinusuri ang availability ng runtime...",
+ "runtimeFailedToStart": "Nakita ang na-configure na runtime ngunit nabigong magsimula. Buksan ang Dashboard para ayusin o i-reinstall ito.",
+ "runtimeRequired": "Kailangan ang na-configure na runtime. I-install o ayusin ito mula sa Dashboard."
+ },
+ "serversCount_few": "{{count}} server",
+ "serversCount_many": "{{count}} server"
+ },
+ "searchPlaceholder": "Maghanap ng mga MCP server...",
+ "runtime": {
+ "notAvailable": "Hindi available ang {{runtime}}",
+ "notInstalled": "Hindi naka-install ang {{runtime}}",
+ "requiredDescription": "Kailangan ng mga MCP health check ang {{runtime}}. Pumunta sa Dashboard para i-install o ayusin ito."
+ },
+ "empty": {
+ "searchTitle": "Walang nahanap na server",
+ "title": "Walang available na MCP server",
+ "searchDescription": "Subukan ang ibang search term",
+ "description": "Bumalik mamaya para sa mga bagong server"
+ },
+ "loadMore": "Mag-load pa"
+ },
+ "apiKeys": {
+ "description": "Ligtas na mag-store ng mga API key para sa auto-fill kapag nag-i-install ng mga MCP server.",
+ "storage": {
+ "osKeychain": "Naka-encrypt ang mga key sa pamamagitan ng {{backend}} at naka-store na may pinaghihigpitang file permission (owner-only).",
+ "localEncryption": "Hindi available ang OS keychain - naka-encrypt ang mga key nang lokal gamit ang AES-256. Para sa mas matibay na proteksyon, mag-install ng keyring service (gnome-keyring, kwallet)."
+ },
+ "actions": {
+ "add": "Magdagdag ng API Key",
+ "addFirst": "Idagdag ang iyong unang key",
+ "edit": "I-edit",
+ "copied": "Nakopya!",
+ "copyEnvVarName": "Kopyahin ang env var name",
+ "confirmDelete": "I-click muli para kumpirmahin",
+ "delete": "Tanggalin"
+ },
+ "empty": {
+ "title": "Walang naka-save na API key",
+ "description": "Magdagdag ng mga key para awtomatikong punan ang mga environment variable kapag nag-i-install ng mga MCP server."
+ },
+ "form": {
+ "addTitle": "Magdagdag ng API Key",
+ "editTitle": "I-edit ang API Key",
+ "addDescription": "Mag-store ng API key para sa auto-fill sa mga pag-install ng MCP server.",
+ "editDescription": "I-update ang mga detalye ng key. Kailangan mong muling ilagay ang value.",
+ "keychainUnavailable": "Hindi available ang OS keychain - naka-encrypt ang mga key gamit ang AES-256 nang lokal. Mag-install ng gnome-keyring para sa OS-level na proteksyon.",
+ "name": "Pangalan",
+ "namePlaceholder": "hal. OpenAI Production",
+ "environmentVariableName": "Pangalan ng Environment Variable",
+ "envVarPlaceholder": "hal. OPENAI_API_KEY",
+ "value": "Value",
+ "reenterValue": "Muling ilagay ang value ng key",
+ "valuePlaceholder": "sk-...",
+ "scope": "Scope",
+ "userScopeLabel": "User (global)",
+ "projectScopeLabel": "Proyekto: {{project}}",
+ "projectUnavailable": "Hindi available ang proyekto",
+ "boundTo": "Naka-bound sa {{path}}",
+ "cancel": "Kanselahin",
+ "saving": "Sine-save...",
+ "update": "I-update",
+ "save": "I-save",
+ "errors": {
+ "invalidEnvVarFormat": "Gumamit ng mga letra, numero, underscore. Dapat magsimula sa letra o underscore.",
+ "nameRequired": "Kailangan ang pangalan",
+ "envVarRequired": "Kailangan ang pangalan ng environment variable",
+ "invalidEnvVar": "Invalid na pangalan ng environment variable",
+ "valueRequired": "Kailangan ang value ng key",
+ "projectScopeRequiresProject": "Nangangailangan ng aktibong proyekto ang mga project-scoped na API key",
+ "saveFailed": "Nabigong mag-save"
+ }
+ }
+ },
+ "skillReview": {
+ "title": "Suriin ang mga pagbabago sa skill",
+ "description": "Pino-preview muna ng {{reviewLabel}} ang mga pagbabago sa filesystem. Walang isusulat hanggang sa kumpirmahin mo sa ibaba.",
+ "noPreview": "Walang available na preview.",
+ "confirmPromptPrefix": "Suriin ang diff sa ibaba, pagkatapos ay gamitin ang",
+ "confirmPromptSuffix": "para ilapat ang mga pagbabagong ito.",
+ "noChanges": "Wala pang natukoy na pagbabago sa file.",
+ "binaryBadge": "binary",
+ "binaryPreviewHidden": "Hindi ipinapakita ang preview ng binary file. Kokopyahin ang file kung ano ito.",
+ "summary": {
+ "fileChanges": "{{count}} pagbabago sa file",
+ "fileChanges_one": "{{count}} pagbabago sa file",
+ "fileChanges_other": "{{count}} pagbabago sa file",
+ "new": "{{count}} bago",
+ "updated": "{{count}} na-update",
+ "removed": "{{count}} inalis",
+ "binary": "{{count}} binary",
+ "fileChanges_few": "{{count}} pagbabago sa file",
+ "fileChanges_many": "{{count}} pagbabago sa file"
+ }
+ },
+ "mcpCard": {
+ "toolsCount": "{{count}} tool",
+ "toolsCount_one": "{{count}} tool",
+ "toolsCount_other": "{{count}} tool",
+ "envCount": "{{count}} env",
+ "envCount_one": "{{count}} env",
+ "envCount_other": "{{count}} env",
+ "auth": "Auth",
+ "byAuthor": "ni {{author}}",
+ "hosting": {
+ "remote": "Remote",
+ "local": "Lokal",
+ "both": "Pareho"
+ },
+ "toolsCount_few": "{{count}} tool",
+ "toolsCount_many": "{{count}} tool",
+ "envCount_few": "{{count}} env",
+ "envCount_many": "{{count}} env",
+ "repository": "Repository",
+ "website": "Website"
+ },
+ "installButton": {
+ "installing": "Ini-install...",
+ "removing": "Inaalis...",
+ "done": "Tapos na",
+ "retry": "Subukang muli",
+ "uninstall": "I-uninstall",
+ "install": "I-install"
+ },
+ "pluginCard": {
+ "official": "Opisyal"
+ }
+}
diff --git a/src/features/localization/renderer/locales/fil/report.json b/src/features/localization/renderer/locales/fil/report.json
new file mode 100644
index 00000000..19b3a461
--- /dev/null
+++ b/src/features/localization/renderer/locales/fil/report.json
@@ -0,0 +1,217 @@
+{
+ "cost": {
+ "breakdownTitle": "Breakdown ng Gastos (bawat 1M token)",
+ "cacheRead": "Cache Read",
+ "cacheWrite": "Cache Write",
+ "cost": "Gastos",
+ "input": "Input",
+ "noCommits": "walang commit",
+ "noLinesChanged": "walang linyang binago",
+ "output": "Output",
+ "parent": "Parent: {{cost}}",
+ "parentCost": "Gastos ng Parent",
+ "perCommit": "Bawat Commit",
+ "perCommitFormula": "kabuuang gastos ÷ {{count}} commit",
+ "perCommitFormula_few": "kabuuang gastos ÷ {{count}} commit",
+ "perCommitFormula_many": "kabuuang gastos ÷ {{count}} commit",
+ "perCommitFormula_one": "kabuuang gastos ÷ {{count}} commit",
+ "perCommitFormula_other": "kabuuang gastos ÷ {{count}} commit",
+ "perLineChanged": "Bawat Linyang Binago",
+ "perLineFormula": "kabuuang gastos ÷ {{count}} linya",
+ "perLineFormula_few": "kabuuang gastos ÷ {{count}} linya",
+ "perLineFormula_many": "kabuuang gastos ÷ {{count}} linya",
+ "perLineFormula_one": "kabuuang gastos ÷ {{count}} linya",
+ "perLineFormula_other": "kabuuang gastos ÷ {{count}} linya",
+ "subagent": "Subagent: {{cost}}",
+ "subagentCost": "Gastos ng Subagent",
+ "title": "Pagsusuri ng Gastos",
+ "total": "Kabuuan"
+ },
+ "insights": {
+ "agent": "agent",
+ "agent_few": "mga agent",
+ "agent_many": "mga agent",
+ "agent_one": "agent",
+ "agent_other": "mga agent",
+ "agentTree": "Agent Tree ({{count}} {{unit}})",
+ "background": "(background)",
+ "bashCommands": "Mga Bash Command",
+ "outOfScopeFindings": "Mga Out-of-Scope na Natuklasan ({{count}})",
+ "questionsAsked": "Mga Tanong na Itinanong ({{count}})",
+ "repeated": "Inulit",
+ "skillsInvoked": "Mga Skill na Ginamit ({{count}})",
+ "taskDispatches": "Mga Task Dispatch ({{count}})",
+ "tasksCreated": "Mga Task na Nilikha ({{count}})",
+ "teamMode": "Team Mode",
+ "teams": "Mga Team: {{teams}}",
+ "title": "Session Insights",
+ "total": "Kabuuan",
+ "unique": "Natatangi",
+ "skillsInvoked_few": "Mga Skill na Ginamit ({{count}})",
+ "skillsInvoked_many": "Mga Skill na Ginamit ({{count}})",
+ "skillsInvoked_one": "Mga Skill na Ginamit ({{count}})",
+ "skillsInvoked_other": "Mga Skill na Ginamit ({{count}})",
+ "taskDispatches_few": "Mga Task Dispatch ({{count}})",
+ "taskDispatches_many": "Mga Task Dispatch ({{count}})",
+ "taskDispatches_one": "Mga Task Dispatch ({{count}})",
+ "taskDispatches_other": "Mga Task Dispatch ({{count}})",
+ "tasksCreated_few": "Mga Task na Nilikha ({{count}})",
+ "tasksCreated_many": "Mga Task na Nilikha ({{count}})",
+ "tasksCreated_one": "Mga Task na Nilikha ({{count}})",
+ "tasksCreated_other": "Mga Task na Nilikha ({{count}})",
+ "questionsAsked_few": "Mga Tanong na Itinanong ({{count}})",
+ "questionsAsked_many": "Mga Tanong na Itinanong ({{count}})",
+ "questionsAsked_one": "Mga Tanong na Itinanong ({{count}})",
+ "questionsAsked_other": "Mga Tanong na Itinanong ({{count}})",
+ "agentTree_few": "Agent Tree ({{count}} {{unit}})",
+ "agentTree_many": "Agent Tree ({{count}} {{unit}})",
+ "agentTree_one": "Agent Tree ({{count}} {{unit}})",
+ "agentTree_other": "Agent Tree ({{count}} {{unit}})",
+ "outOfScopeFindings_few": "Mga Out-of-Scope na Natuklasan ({{count}})",
+ "outOfScopeFindings_many": "Mga Out-of-Scope na Natuklasan ({{count}})",
+ "outOfScopeFindings_one": "Mga Out-of-Scope na Natuklasan ({{count}})",
+ "outOfScopeFindings_other": "Mga Out-of-Scope na Natuklasan ({{count}})",
+ "keyTakeaways": "Mga Pangunahing Aral"
+ },
+ "quality": {
+ "chars": "chars",
+ "corrections": "Mga Pagwawasto",
+ "failed": "nabigo",
+ "fileReadRedundancy": "Redundancy ng File Read",
+ "firstMessage": "Unang Mensahe",
+ "firstRun": "Unang Pagtakbo",
+ "frictionRate": "Friction Rate",
+ "lastRun": "Huling Pagtakbo",
+ "messagesBeforeWork": "Mga Mensahe Bago ang Trabaho",
+ "passed": "pumasa",
+ "promptQuality": "Kalidad ng Prompt",
+ "readsPerUniqueFile": "Reads/Natatanging File",
+ "snapshot": "snapshot",
+ "snapshot_few": "mga snapshot",
+ "snapshot_many": "mga snapshot",
+ "snapshot_one": "snapshot",
+ "snapshot_other": "mga snapshot",
+ "startupOverhead": "Startup Overhead",
+ "testProgression": "Pag-usad ng Test",
+ "title": "Mga Signal ng Kalidad",
+ "tokensBeforeWork": "Mga Token Bago ang Trabaho",
+ "totalReads": "Kabuuang Reads",
+ "uniqueFiles": "Mga Natatanging File",
+ "userMessages": "Mga Mensahe ng User",
+ "percentOfTotal": "% ng Kabuuan"
+ },
+ "tokens": {
+ "apiCalls": "Mga API Call",
+ "cacheCreate": "Cache Create",
+ "cacheEfficiency": "Cache Efficiency",
+ "cacheRead": "Cache Read",
+ "cacheReadPct": "Cache Read %",
+ "coldStart": "Cold Start",
+ "cost": "Gastos",
+ "input": "Input",
+ "model": "Model",
+ "no": "Hindi",
+ "output": "Output",
+ "readWriteRatio": "R/W Ratio",
+ "title": "Paggamit ng Token",
+ "total": "Kabuuan",
+ "yes": "Oo"
+ },
+ "subagents": {
+ "title": "Mga Subagent",
+ "metrics": {
+ "count": "Bilang",
+ "totalTokens": "Kabuuang Token",
+ "totalDuration": "Kabuuang Tagal",
+ "totalCost": "Kabuuang Gastos"
+ },
+ "table": {
+ "description": "Paglalarawan",
+ "type": "Uri",
+ "tokens": "Mga Token",
+ "duration": "Tagal",
+ "cost": "Gastos"
+ }
+ },
+ "overview": {
+ "title": "Pangkalahatang-tanaw",
+ "yes": "Oo",
+ "no": "Hindi",
+ "metrics": {
+ "duration": "Tagal",
+ "messages": "Mga Mensahe",
+ "contextUsage": "Paggamit ng Context",
+ "compactions": "Mga Compaction",
+ "branch": "Branch",
+ "subagents": "Mga Subagent",
+ "project": "Proyekto",
+ "sessionId": "Session ID"
+ }
+ },
+ "timeline": {
+ "title": "Timeline at Aktibidad",
+ "idleAnalysis": "Pagsusuri ng Idle",
+ "metrics": {
+ "idleGaps": "Mga Idle Gap",
+ "totalIdle": "Kabuuang Idle",
+ "activeTime": "Aktibong Oras",
+ "idlePercent": "Idle %"
+ },
+ "modelSwitches": "Mga Paglipat ng Model ({{count}})",
+ "modelSwitches_one": "Mga Paglipat ng Model ({{count}})",
+ "modelSwitches_other": "Mga Paglipat ng Model ({{count}})",
+ "messageNumber": "msg #{{number}}",
+ "keyEvents": "Mga Pangunahing Event",
+ "modelSwitches_few": "Mga Paglipat ng Model ({{count}})",
+ "modelSwitches_many": "Mga Paglipat ng Model ({{count}})"
+ },
+ "tools": {
+ "title": "Paggamit ng Tool",
+ "summary": "{{formattedCount}} kabuuang tawag sa {{toolCount}} na tool",
+ "columns": {
+ "tool": "Tool",
+ "calls": "Mga Tawag",
+ "errors": "Mga Error",
+ "successPercent": "Success %",
+ "health": "Health"
+ }
+ },
+ "git": {
+ "title": "Git Activity",
+ "commits": "Mga Commit",
+ "pushes": "Mga Push",
+ "linesAdded": "Mga Linyang Idinagdag",
+ "linesRemoved": "Mga Linyang Inalis",
+ "branchesCreated": "Mga Branch na Nilikha"
+ },
+ "friction": {
+ "title": "Mga Friction Signal",
+ "rate": "Friction Rate: {{rate}}%",
+ "correctionsCount": "{{count}} pagwawasto",
+ "correctionsCount_one": "{{count}} pagwawasto",
+ "corrections": "Mga Pagwawasto",
+ "thrashingSignals": "Mga Thrashing Signal",
+ "repeatedBashCommands": "Mga Inulit na Bash Command",
+ "reworkedFiles": "Mga Na-rework na File (3+ na edit)",
+ "correctionsCount_few": "{{count}} pagwawasto",
+ "correctionsCount_many": "{{count}} pagwawasto",
+ "correctionsCount_other": "{{count}} pagwawasto"
+ },
+ "errors": {
+ "title": "Mga Error",
+ "permissionDenied": "Tinanggihan ang Permiso",
+ "messageIndex": "msg #{{index}}",
+ "input": "Input",
+ "error": "Error",
+ "count": "{{count}} error",
+ "count_one": "{{count}} error",
+ "permissionDenialCount": "{{count}} pagtanggi ng permiso",
+ "permissionDenialCount_one": "{{count}} pagtanggi ng permiso",
+ "count_few": "{{count}} error",
+ "count_many": "{{count}} error",
+ "count_other": "{{count}} error",
+ "permissionDenialCount_few": "{{count}} pagtanggi ng permiso",
+ "permissionDenialCount_many": "{{count}} pagtanggi ng permiso",
+ "permissionDenialCount_other": "{{count}} pagtanggi ng permiso"
+ }
+}
diff --git a/src/features/localization/renderer/locales/fil/settings.json b/src/features/localization/renderer/locales/fil/settings.json
new file mode 100644
index 00000000..057e59c4
--- /dev/null
+++ b/src/features/localization/renderer/locales/fil/settings.json
@@ -0,0 +1,994 @@
+{
+ "tabs": {
+ "advanced": {
+ "description": "Mga opsyon para sa power-user: i-export/i-import ang config, i-reset ang mga default, at raw na pag-edit ng configuration.",
+ "label": "Advanced"
+ },
+ "general": {
+ "description": "Mga pangunahing kagustuhan sa app tulad ng theme, wika, display density, at startup behavior.",
+ "label": "General"
+ },
+ "infoAriaLabel": "Ano ang {{label}}?",
+ "notifications": {
+ "description": "Kontrolin kung kailan at paano ka aabisuhan tungkol sa aktibidad ng agent, mga natapos na task, at mga error.",
+ "label": "Mga Notification"
+ }
+ },
+ "view": {
+ "description": "Pamahalaan ang iyong mga kagustuhan sa app",
+ "loading": "Niloload ang mga setting...",
+ "title": "Mga Setting"
+ },
+ "runtimeProvider": {
+ "actions": {
+ "cancel": "Kanselahin",
+ "test": "Subukan"
+ },
+ "defaults": {
+ "allProjects": "Lahat ng proyekto",
+ "allProjectsHint": "Gumagamit ang mga test ng {{project}}. Nalalapat ang default maliban kung may override ang isang proyekto.",
+ "loadingContexts": "Niloload ang mga context...",
+ "projectHint": "Ino-override lang ng pag-save ang {{project}}.",
+ "projectOverrideContext": "Project override context",
+ "scopeDescriptionAllProjects": "Default para sa bawat proyekto na walang sariling OpenCode override.",
+ "scopeDescriptionProject": "I-override lang ang napiling proyekto. Hindi babaguhin ang mga tumatakbong team.",
+ "selectProjectContext": "Piliin ang project context",
+ "selectProjectHint": "Pumili ng proyekto bago subukan ang mga lokal na model o mag-save ng mga default.",
+ "selectValidationContext": "Piliin ang validation context",
+ "setAllProjectsDefault": "Itakda ang default para sa lahat ng proyekto",
+ "setProjectDefault": "Itakda ang default ng proyekto",
+ "thisProject": "Proyektong ito",
+ "title": "Mga OpenCode default",
+ "validationContext": "Validation context"
+ },
+ "diagnostics": {
+ "copied": "Nakopya ang diagnostics",
+ "copiedShort": "Nakopya",
+ "copy": "Kopyahin ang diagnostics",
+ "hints": "Mga Hint",
+ "likelyCause": "Malamang na sanhi:",
+ "windowsSymlinkAdminHint": "Windows: patakbuhin ang Agent Teams AI bilang Administrator"
+ },
+ "models": {
+ "alreadyDefault": "Ito na ang napiling OpenCode default.",
+ "empty": "Walang nahanap na model.",
+ "emptyFree": "Walang nahanap na libreng model.",
+ "emptyRecommended": "Walang nahanap na inirerekomendang model.",
+ "emptyRecommendedFree": "Walang nahanap na inirerekomendang libreng model.",
+ "freeOnly": "Libre lang",
+ "launchableDescription": "Mga kilalang route mula sa OpenCode config, mga libreng built-in na model, at ang kasalukuyang default. Kailangan ng matagumpay na test ng mga lokal na route bago sila maging handa para sa paglunsad ng team.",
+ "launchableTitle": "Mga OpenCode model route",
+ "loadingRoutes": "Niloload ang mga OpenCode model route...",
+ "noRoutesMatch": "Walang OpenCode model route na tumutugma sa \"{{query}}\".",
+ "noneReported": "Wala pang OpenCode model route na naiulat. I-configure ang isang lokal na route sa OpenCode o gamitin ang Providers tab para suriin ang mga catalog provider.",
+ "recommendedOnly": "Inirerekomenda lang",
+ "searchPlaceholder": "Maghanap ng mga model",
+ "selectProjectBeforeTesting": "Pumili ng project context bago subukan ang mga model.",
+ "selectProjectBeforeTestingDefaults": "Pumili ng project context bago subukan o i-save ang mga OpenCode default.",
+ "testInProgress": "Tumatakbo na ang model test.",
+ "useInTeamPicker": "I-save para sa team picker",
+ "validationContextRequired": "Pumili ng validation context sa itaas para paganahin ang Test at Set default. Ang pag-save para sa team picker ay nag-iimbak lang ng route para sa mga bagong team.",
+ "actionsUnavailable": "Pansamantalang hindi available ang mga aksyon.",
+ "defaultSaveInProgress": "Sine-save ang OpenCode default.",
+ "routeUnavailableAuth": "Kailangan ng authentication ng provider na ito bago magamit ang model na ito.",
+ "routeUnavailableFailed": "Nabigo sa huling execution test ang model route na ito.",
+ "routeUnavailableGeneric": "Hindi magagamit ang model route na ito sa ngayon.",
+ "routeUnavailableUnknown": "Ang model na ito ang kasalukuyang OpenCode default, ngunit hindi pa ito available sa live catalog."
+ },
+ "providers": {
+ "catalog": "OpenCode provider catalog",
+ "countFallback": "Mga OpenCode provider",
+ "description": "{{count}}. Ipinapakita muna ang mga konektado at inirerekomendang provider.",
+ "loadMore": "Mag-load pa ng mga provider",
+ "loading": "Niloload ang mga OpenCode provider",
+ "noMatches": "Walang provider na tumutugma sa paghahanap na iyon.",
+ "noneReported": "Walang OpenCode provider na naiulat ng managed runtime.",
+ "recommended": "Inirerekomenda",
+ "refreshCatalog": "I-refresh ang catalog",
+ "searchPlaceholder": "Maghanap ng mga provider",
+ "description_few": "{{count}}. Ipinapakita muna ang mga konektado at inirerekomendang provider.",
+ "description_many": "{{count}}. Ipinapakita muna ang mga konektado at inirerekomendang provider.",
+ "description_one": "{{count}}. Ipinapakita muna ang mga konektado at inirerekomendang provider.",
+ "description_other": "{{count}}. Ipinapakita muna ang mga konektado at inirerekomendang provider."
+ },
+ "setup": {
+ "loading": "Niloload ang provider setup..."
+ },
+ "summary": {
+ "defaultModel": "OpenCode default: {{model}}",
+ "loading": "Niloload ang managed OpenCode runtime, mga konektadong provider, at mga default ng model...",
+ "source": "Pinagmulan: {{source}}",
+ "title": "OpenCode runtime"
+ },
+ "tabs": {
+ "models": "Mga Model",
+ "providers": "Mga Provider"
+ },
+ "modelRoutes": {
+ "searchPlaceholder": "Maghanap ng mga model route"
+ },
+ "badges": {
+ "usedInTeamPicker": "Naka-save para sa team picker",
+ "free": "libre",
+ "local": "lokal",
+ "configured": "naka-configure",
+ "knownRoute": "kilalang route",
+ "connected": "konektado",
+ "verified": "na-verify",
+ "needsTest": "kailangan ng test",
+ "failed": "nabigo",
+ "unknown": "hindi alam",
+ "default": "default"
+ },
+ "compatibleEndpoint": {
+ "baseUrlPlaceholder": "http://localhost:1234"
+ }
+ },
+ "general": {
+ "agentLanguage": {
+ "description": "Wika para sa komunikasyon ng agent",
+ "descriptionWithDetected": "Wika para sa komunikasyon ng agent (natukoy: {{detected}})",
+ "emptyMessage": "Walang nahanap na wika.",
+ "label": "Wika",
+ "searchPlaceholder": "Maghanap ng wika...",
+ "selectPlaceholder": "Pumili ng wika...",
+ "title": "Wika ng Agent"
+ },
+ "appLanguage": {
+ "description": "Wika para sa interface ng application.",
+ "label": "Wika",
+ "title": "Wika ng App"
+ },
+ "appearance": {
+ "autoExpandAIGroups": {
+ "description": "Awtomatikong i-expand ang bawat response turn kapag nagbukas ng transcript o nakatanggap ng bagong mensahe",
+ "label": "I-expand ang mga sagot ng AI bilang default"
+ },
+ "nativeTitleBar": {
+ "description": "Gamitin ang default na window frame ng sistema sa halip na ang custom title bar",
+ "label": "Gamitin ang native title bar",
+ "restartConfirm": {
+ "confirmLabel": "I-restart",
+ "message": "Kailangang mag-restart ang app para ilapat ang pagbabago sa title bar. I-restart ngayon?",
+ "title": "Kailangang mag-restart"
+ }
+ },
+ "theme": {
+ "description": "Piliin ang iyong gustong color theme",
+ "label": "Theme",
+ "options": {
+ "dark": "Madilim",
+ "light": "Maliwanag",
+ "system": "System"
+ }
+ },
+ "title": "Hitsura"
+ },
+ "browserAccess": {
+ "serverMode": {
+ "description": "Magsimula ng HTTP server para ma-access ang UI mula sa browser o i-embed sa mga iframe",
+ "label": "Paganahin ang server mode"
+ },
+ "title": "Browser Access"
+ },
+ "localClaudeRoot": {
+ "actions": {
+ "selectFolder": "Pumili ng Folder",
+ "selectFolderManually": "Piliin ang Folder nang Manu-mano",
+ "useAutoDetect": "Gamitin ang Auto-Detect",
+ "useFolder": "Gamitin ang Folder",
+ "usePath": "Gamitin ang Path",
+ "useThisPath": "Gamitin ang Path na Ito",
+ "useWsl": "Gumagamit ng Linux/WSL?"
+ },
+ "confirm": {
+ "noProjectsDir": {
+ "message": "Walang \"projects\" directory ang folder na ito. Magpatuloy pa rin?",
+ "title": "Walang nahanap na projects directory"
+ },
+ "notClaudeDir": {
+ "message": "Ang folder na ito ay pinangalanang \"{{folderName}}\", hindi \".claude\". Magpatuloy pa rin?",
+ "title": "Ang napiling folder ay hindi .claude"
+ },
+ "noWslPaths": {
+ "message": "Hindi awtomatikong nahanap ang mga WSL distro na may Claude data. Piliin ang folder nang manu-mano?",
+ "title": "Walang nahanap na WSL Claude path"
+ },
+ "wslNoProjectsDir": {
+ "message": "Walang \"projects\" directory ang \"{{path}}\". Magpatuloy pa rin?",
+ "title": "Nawawala ang projects directory sa WSL path"
+ }
+ },
+ "current": {
+ "autoDetected": "Awtomatikong natukoy: {{path}}",
+ "autoDetectedPath": "Gumagamit ng awtomatikong natukoy na path",
+ "customPath": "Gumagamit ng custom na path",
+ "label": "Kasalukuyang Local Root"
+ },
+ "description": "Piliin kung aling lokal na folder ang ituturing na iyong Claude data root",
+ "errors": {
+ "detectWslFailed": "Nabigong matukoy ang mga WSL Claude root path",
+ "loadFailed": "Nabigong i-load ang mga setting ng lokal na Claude root",
+ "updateFailed": "Nabigong i-update ang Claude root"
+ },
+ "title": "Lokal na Claude Root",
+ "wslModal": {
+ "closeAriaLabel": "Isara ang WSL path modal",
+ "description": "Mga natukoy na WSL distribution at mga kandidatong Claude root",
+ "noProjectsDir": "Walang natukoy na projects directory",
+ "title": "Piliin ang WSL Claude Root"
+ }
+ },
+ "privacy": {
+ "telemetry": {
+ "description": "Tumulong na pahusayin ang app sa pamamagitan ng pagpapadala ng hindi nakikilalang crash at performance data",
+ "label": "Magpadala ng mga crash report"
+ },
+ "title": "Privacy"
+ },
+ "server": {
+ "runningOn": "Tumatakbo sa",
+ "standaloneModeDescription": "Tumatakbo sa standalone mode. Palaging aktibo ang HTTP server. Hindi available ang mga system notification - naka-log lang sa loob ng app ang mga notification trigger.",
+ "title": "Server"
+ },
+ "startup": {
+ "launchAtLogin": {
+ "description": "Awtomatikong simulan ang app kapag nag-log in ka",
+ "label": "Ilunsad sa pag-login"
+ },
+ "showDockIcon": {
+ "description": "Ipakita ang app icon sa dock (macOS)",
+ "label": "Ipakita ang dock icon"
+ },
+ "title": "Startup"
+ }
+ },
+ "notifications": {
+ "dev": {
+ "descriptionPrefix": "Maaaring hindi gumana ang mga notification sa development mode. Kinikilala ng macOS ang app bilang \"Electron\" (bundle ID",
+ "descriptionSuffix": ") sa halip na ang production app name. Tingnan ang System Settings > Notifications > Electron para i-verify ang mga permiso.",
+ "title": "Dev Mode"
+ },
+ "ignoredRepositories": {
+ "description": "Hindi papansinin ang mga notification mula sa mga repository na ito",
+ "empty": "Walang ipinagwalang-bahala na repository",
+ "selectPlaceholder": "Piliin ang repository na ipagwawalang-bahala...",
+ "title": "Mga Ipinagwawalang-bahalang Repository"
+ },
+ "settings": {
+ "enabled": {
+ "description": "Magpakita ng mga system notification para sa mga error at event",
+ "label": "Paganahin ang Mga System Notification"
+ },
+ "sound": {
+ "description": "Magpatugtog ng tunog kapag lumitaw ang mga notification",
+ "label": "Magpatugtog ng tunog"
+ },
+ "subagentErrors": {
+ "description": "Tukuyin at abisuhan ang mga error sa mga subagent session",
+ "label": "Isama ang mga error ng subagent"
+ },
+ "title": "Mga Setting ng Notification"
+ },
+ "snooze": {
+ "clear": "I-clear ang Snooze",
+ "description": "Pansamantalang i-pause ang mga notification",
+ "descriptionWithTime": "Naka-snooze hanggang {{time}}",
+ "label": "I-snooze ang mga notification",
+ "options": {
+ "15": "15 minuto",
+ "30": "30 minuto",
+ "60": "1 oras",
+ "120": "2 oras",
+ "240": "4 oras",
+ "-1": "Hanggang bukas"
+ },
+ "selectDuration": "Piliin ang tagal..."
+ },
+ "taskCompletion": {
+ "description": "Makakuha ng mga native OS notification kapag natapos ng Claude ang mga task - mga tunog, banner, at Dock/taskbar badge. Gumagana sa macOS, Linux, at Windows.",
+ "installPlugin": "I-install ang claude-notifications-go plugin",
+ "title": "Mga Notification sa Pagkatapos ng Task"
+ },
+ "team": {
+ "allTasksCompleted": {
+ "description": "Abisuhan kapag naabot ng bawat task sa isang team ang status na completed",
+ "label": "Lahat ng task tapos na"
+ },
+ "autoResumeOnRateLimit": {
+ "description": "Kapag nag-ulat ang Claude ng reset time, mag-schedule ng follow-up na pang-udyok para sa team lead pagkatapos mag-reset ang limit",
+ "label": "Auto-resume pagkatapos ng rate limit"
+ },
+ "clarifications": {
+ "description": "Magpakita ng mga native OS notification kapag nangangailangan ng iyong input ang isang task",
+ "label": "Mga notification sa paglilinaw ng task"
+ },
+ "crossTeamMessage": {
+ "description": "Abisuhan kapag may dumating na mensahe mula sa ibang team",
+ "label": "Mga cross-team message notification"
+ },
+ "leadInbox": {
+ "description": "Abisuhan kapag nagpadala ang mga teammate ng mensahe sa team lead",
+ "label": "Mga lead inbox notification"
+ },
+ "statusChange": {
+ "description": "Magpakita ng mga native OS notification kapag nagbago ang status ng isang task",
+ "label": "Mga notification sa pagbabago ng status ng task",
+ "onlySolo": {
+ "description": "Abisuhan lang kapag walang teammate ang team",
+ "label": "Sa Solo mode lang"
+ },
+ "statuses": {
+ "description": "Aling mga target status ang nag-trigger ng notification",
+ "label": "Abisuhan sa mga status na ito",
+ "options": {
+ "approved": "Inaprubahan",
+ "completed": "Tapos na",
+ "deleted": "Tinanggal",
+ "in_progress": "Sinimulan",
+ "needsFix": "Kailangang Ayusin",
+ "pending": "Nakabinbin",
+ "review": "Review"
+ }
+ }
+ },
+ "taskComments": {
+ "description": "Magpakita ng mga native OS notification kapag nagkomento ang mga agent sa mga task",
+ "label": "Mga task comment notification"
+ },
+ "taskCreated": {
+ "description": "Magpakita ng mga native OS notification kapag may nilikhang bagong task",
+ "label": "Mga task created notification"
+ },
+ "teamLaunched": {
+ "description": "Abisuhan kapag natapos maglunsad ang isang team at handa na",
+ "label": "Mga team launched notification"
+ },
+ "title": "Mga Notification ng Team",
+ "toolApproval": {
+ "description": "Abisuhan kapag nangangailangan ng iyong pag-apruba ang isang tool (Allow/Deny) habang hindi naka-focus ang app",
+ "label": "Mga tool approval notification"
+ },
+ "userInbox": {
+ "description": "Abisuhan kapag nagpadala sa iyo ng mensahe ang mga teammate",
+ "label": "Mga user inbox notification"
+ }
+ },
+ "test": {
+ "action": "Magpadala ng Test",
+ "description": "Magpadala ng test notification para i-verify ang paghahatid",
+ "failedToSend": "Nabigong magpadala ng test notification",
+ "label": "Test notification",
+ "sending": "Nagpapadala...",
+ "sent": "Naipadala!",
+ "unknownError": "Hindi kilalang error"
+ }
+ },
+ "advanced": {
+ "about": {
+ "appIconAlt": "App icon",
+ "description": "Bumuo ng mga AI agent team na gumagana nang autonomous at parallel, nag-uusap sa iba't ibang team, at namamahala ng mga task sa kanban board - na may built-in na code review, live na pagmonitor ng proseso, at buong visibility ng tool.",
+ "standalone": "Standalone",
+ "title": "Tungkol sa",
+ "version": "Bersyon {{version}}"
+ },
+ "configuration": {
+ "editConfig": "I-edit ang Config",
+ "exportConfig": "I-export ang Config",
+ "importConfig": "I-import ang Config",
+ "openInEditor": "Buksan sa Editor",
+ "resetToDefaults": "I-reset sa mga Default",
+ "title": "Configuration"
+ },
+ "updates": {
+ "available": "available ang v{{version}}",
+ "check": "Maghanap ng Update",
+ "checking": "Sinusuri...",
+ "ready": "Handa na ang update",
+ "unknownVersion": "hindi alam",
+ "upToDate": "Napapanahon"
+ },
+ "appName": "Agent Teams AI"
+ },
+ "configEditor": {
+ "errors": {
+ "loadFailed": "Nabigong i-load ang config",
+ "saveFailed": "Nabigong i-save ang config"
+ },
+ "footer": {
+ "autoSave": "Awtomatikong na-save ang mga pagbabago pagkatapos i-edit",
+ "toClose": "para isara",
+ "escapeKey": "Esc"
+ },
+ "loading": "Niloload ang config...",
+ "status": {
+ "invalidJson": "Invalid na JSON",
+ "saveFailed": "Nabigo ang pag-save",
+ "saved": "Na-save",
+ "saving": "Sine-save..."
+ },
+ "title": "I-edit ang Configuration"
+ },
+ "notificationTriggers": {
+ "add": {
+ "cancel": "Kanselahin",
+ "submit": "Magdagdag ng Trigger",
+ "title": "Magdagdag ng Custom Trigger"
+ },
+ "builtin": {
+ "description": "Mga default na trigger na kasama ng application. Maaari mong paganahin o i-disable ang mga ito at i-customize ang kanilang mga pattern.",
+ "title": "Mga Built-in na Trigger"
+ },
+ "card": {
+ "builtinBadge": "Builtin",
+ "collapseAriaLabel": "I-collapse",
+ "deleteAriaLabel": "Tanggalin ang trigger",
+ "editNameAriaLabel": "I-edit ang pangalan",
+ "expandAriaLabel": "I-expand"
+ },
+ "color": {
+ "customHexTitle": "Custom hex color",
+ "invalidHex": "Invalid na hex"
+ },
+ "configuration": {
+ "alertIfGreaterThan": "Alertuhin kung >",
+ "emptyPatternHint": "Iwanang blangko para itugma ang lahat ng content. Gumagamit ng JavaScript regex syntax.",
+ "errorStatusDescription": "Nag-trigger kapag nag-ulat ng error ang isang tool execution (is_error: true).",
+ "tokensUnit": "token",
+ "matchPatternPlaceholder": "hal., error|failed|exception"
+ },
+ "custom": {
+ "description": "Lumikha ng sarili mong mga trigger para maabisuhan para sa mga partikular na pattern o tool output.",
+ "empty": "Wala pang naka-configure na custom trigger.",
+ "title": "Mga Custom Trigger"
+ },
+ "errors": {
+ "invalidRegexPattern": "Invalid na regex pattern"
+ },
+ "fields": {
+ "contentType": "Content Type",
+ "matchField": "Match Field",
+ "matchPattern": "Match Pattern (Regex)",
+ "scopeToolName": "Scope / Tool Name",
+ "scopeToolNameOptional": "Scope / Tool Name (opsyonal)",
+ "threshold": "Threshold",
+ "tokenType": "Token Type",
+ "triggerNamePlaceholder": "hal., Build Failure Alert",
+ "triggerNameRequired": "Trigger Name *"
+ },
+ "ignorePatterns": {
+ "hint": "Pindutin ang Enter para idagdag. Nilalaktawan ang notification kung may pattern na tumugma.",
+ "placeholder": "Magdagdag ng ignore regex...",
+ "removeAriaLabel": "Tanggalin ang ignore pattern",
+ "summary": "Advanced: Mga Exclusion Rule",
+ "title": "Mga Ignore Pattern (laktawan kung tumugma)"
+ },
+ "options": {
+ "contentTypes": {
+ "text": "Text Output",
+ "thinking": "Thinking",
+ "tool_result": "Tool Result",
+ "tool_use": "Tool Use"
+ },
+ "matchFields": {
+ "args": "Mga Argument",
+ "command": "Command",
+ "content": "Content",
+ "description": "Paglalarawan",
+ "file_path": "File Path",
+ "fullInput": "Full Input (JSON)",
+ "glob": "Glob Filter",
+ "new_string": "New String",
+ "old_string": "Old String",
+ "path": "Path",
+ "pattern": "Pattern",
+ "prompt": "Prompt",
+ "query": "Query",
+ "skill": "Skill Name",
+ "subagent_type": "Subagent Type",
+ "text": "Text Content",
+ "thinking": "Thinking Content",
+ "url": "URL"
+ },
+ "modes": {
+ "content_match": "Content Pattern",
+ "error_status": "Execution Error",
+ "token_threshold": "Mataas na Paggamit ng Token"
+ },
+ "tokenTypes": {
+ "input": "Input Token",
+ "output": "Output Token",
+ "total": "Kabuuang Token"
+ },
+ "toolNames": {
+ "anyTool": "Anumang Tool"
+ }
+ },
+ "preview": {
+ "defaultTestTriggerName": "Test Trigger",
+ "detectedSuffix": "na error ang matutukoy sana",
+ "more": "...at {{count}} pa",
+ "more_few": "...at {{count}} pa",
+ "more_many": "...at {{count}} pa",
+ "more_one": "...at {{count}} pa",
+ "more_other": "...at {{count}} pa",
+ "testTrigger": "Test Trigger",
+ "testing": "Sinusubok...",
+ "title": "Preview",
+ "truncatedWarning": "Maagang huminto ang paghahanap (timeout o count limit). Maaaring mas mataas ang aktwal na mga tumugma.",
+ "viewSession": "Tingnan ang Session"
+ },
+ "repositoryScope": {
+ "empty": "Walang napiling repository - nalalapat ang trigger sa lahat ng repository",
+ "hint": "Kapag may mga napiling repository, nag-trigger lang ito para sa mga error sa mga repository na iyon.",
+ "placeholder": "Piliin ang repository na idadagdag...",
+ "summary": "Advanced: Repository Scope",
+ "title": "Limitahan sa mga Repository (nalalapat lang sa mga napiling repository)"
+ },
+ "sections": {
+ "configuration": "Configuration",
+ "dotColor": "Dot Color",
+ "generalInfo": "Pangkalahatang Impormasyon",
+ "triggerCondition": "Trigger Condition"
+ }
+ },
+ "workspaceProfiles": {
+ "actions": {
+ "addProfile": "Magdagdag ng Profile",
+ "cancel": "Kanselahin",
+ "deleteProfile": "Tanggalin ang profile",
+ "editProfile": "I-edit ang profile",
+ "save": "I-save"
+ },
+ "authMethods": {
+ "agent": "SSH Agent",
+ "auto": "Auto (mula sa SSH Config)",
+ "password": "Password",
+ "privateKey": "Private Key"
+ },
+ "deleteConfirm": {
+ "confirmLabel": "Tanggalin",
+ "message": "Sigurado ka bang gusto mong tanggalin ang \"{{name}}\"? Hindi na ito maibabalik.",
+ "title": "Tanggalin ang Profile"
+ },
+ "description": "I-save ang mga SSH connection profile para sa mabilis na muling pagkonekta",
+ "empty": {
+ "description": "Magdagdag ng SSH profile para mabilis na makakonekta",
+ "title": "Walang naka-save na profile"
+ },
+ "form": {
+ "authentication": "Authentication",
+ "host": "Host",
+ "name": "Pangalan",
+ "passwordPrompt": "Hihilingin sa iyo ang password kapag kumonekta.",
+ "port": "Port",
+ "privateKeyPath": "Private Key Path",
+ "username": "Username",
+ "namePlaceholder": "Aking Server",
+ "hostPlaceholder": "hostname o IP",
+ "usernamePlaceholder": "user"
+ },
+ "loading": "Niloload ang mga profile...",
+ "title": "Mga Workspace Profile"
+ },
+ "connection": {
+ "actions": {
+ "connect": "Kumonekta",
+ "connecting": "Kumokonekta...",
+ "disconnect": "Idiskonekta",
+ "testConnection": "Subukan ang Koneksyon",
+ "testing": "Sinusubok..."
+ },
+ "currentMode": {
+ "description": "Pinagmulan ng data para sa mga session file",
+ "label": "Kasalukuyang Mode",
+ "local": "Lokal ({{path}})"
+ },
+ "description": "Kumonekta sa isang remote machine para tingnan ang mga Claude Code session na tumatakbo doon",
+ "form": {
+ "authentication": "Authentication",
+ "host": "Host",
+ "password": "Password",
+ "port": "Port",
+ "privateKeyPath": "Private Key Path",
+ "username": "Username",
+ "hostPlaceholder": "hostname o SSH config alias",
+ "usernamePlaceholder": "user"
+ },
+ "savedProfiles": {
+ "title": "Mga Naka-save na Profile"
+ },
+ "ssh": {
+ "title": "SSH Connection"
+ },
+ "status": {
+ "connectedTo": "Nakakonekta sa {{host}}",
+ "remoteSessions": "Tinitingnan ang mga remote session sa pamamagitan ng SSH"
+ },
+ "test": {
+ "failed": "Nabigo ang koneksyon: {{error}}",
+ "success": "Matagumpay ang koneksyon",
+ "unknownError": "Hindi kilalang error"
+ },
+ "title": "Remote Connection"
+ },
+ "providerRuntime": {
+ "actions": {
+ "cancel": "Kanselahin",
+ "cancelLogin": "Kanselahin ang login",
+ "connectChatGpt": "Ikonekta ang ChatGPT",
+ "delete": "Tanggalin",
+ "disable": "I-disable",
+ "disconnectAccount": "Idiskonekta ang account",
+ "generateLink": "Bumuo ng link",
+ "openLogin": "Buksan ang login",
+ "reconnectAnthropic": "Ikonekta muli ang Anthropic",
+ "refresh": "I-refresh",
+ "replaceKey": "Palitan ang key",
+ "saveEndpoint": "I-save ang endpoint",
+ "saveKey": "I-save ang key",
+ "saving": "Sine-save...",
+ "setApiKey": "Itakda ang API key",
+ "updateKey": "I-update ang key",
+ "useCode": "Gamitin ang code"
+ },
+ "apiKey": {
+ "loadingStoredCredentials": "Niloload ang mga naka-store na credential...",
+ "projectScope": "Proyekto",
+ "scope": "Scope",
+ "storedIn": "Naka-store sa {{backend}}",
+ "userScope": "User",
+ "storedInApp": "Naka-store sa app",
+ "providers": {
+ "anthropic": {
+ "name": "Anthropic API Key",
+ "title": "API key",
+ "description": "Gumamit ng direktang Anthropic API key para sa API-billed na access. Mananatiling available ang iyong Anthropic subscription session kapag bumalik ka.",
+ "placeholder": "sk-ant-..."
+ },
+ "codex": {
+ "name": "Codex API Key",
+ "title": "API key",
+ "description": "Gumamit ng OpenAI API key bilang pangalawang Codex auth path. Kung lilipat ka ng Codex sa API key mode, isasalamin ng app ang OPENAI_API_KEY sa CODEX_API_KEY para sa mga native launch.",
+ "placeholder": "sk-proj-..."
+ },
+ "gemini": {
+ "name": "Gemini API Key",
+ "title": "API access",
+ "description": "Gumamit ng `GEMINI_API_KEY` para sa Gemini API backend. Hindi ito kailangan ng CLI SDK at ADC.",
+ "placeholder": "AIza..."
+ }
+ }
+ },
+ "codex": {
+ "account": {
+ "appServer": "App-server: {{state}}",
+ "connected": "Konektado",
+ "description": "Pamahalaan ang lokal na Codex app-server account session na nagpapagana sa mga subscription-backed na native launch.",
+ "loginInProgress": "Isinasagawa ang login",
+ "plan": "Plano: {{plan}}",
+ "reconnectRequired": "Kailangang ikonekta muli",
+ "title": "ChatGPT account",
+ "hints": {
+ "autoUsesApiKeyUntilChatgpt": "{{message}} Patuloy na gagamitin ng Auto ang natukoy na API key hanggang sa makonekta ang ChatGPT.",
+ "detectedApiKeyNeedsApiMode": "{{message}} Ginagamit lang ang natukoy na API key pagkatapos mong ilipat ang Codex sa API key mode.",
+ "localArtifactsNoSession": "Kasalukuyang nag-uulat ang Codex CLI ng walang aktibong ChatGPT account. May lokal na data ng Codex account, ngunit walang aktibong managed session na napili. Lumalabas dito ang mga usage limit pagkatapos lang makita ng Codex CLI ang isa.",
+ "noActiveAccount": "Kasalukuyang nag-uulat ang Codex CLI ng walang aktibong ChatGPT account. Lumalabas dito ang mga usage limit pagkatapos lang makita ng Codex CLI ang isa.",
+ "reconnectBeforeUsage": "May lokal na napiling ChatGPT account ang Codex, ngunit kailangang ikonekta muli ang kasalukuyang session bago ma-load dito ang mga usage limit.",
+ "usageLimitsAfterReport": "Lumalabas dito ang mga usage limit pagkatapos iulat ng Codex ang mga ito para sa konektadong ChatGPT account."
+ }
+ },
+ "install": {
+ "checking": "Sinusuri",
+ "downloading": "Dina-download",
+ "installCli": "I-install ang Codex CLI",
+ "installing": "Ini-install",
+ "retryInstall": "Subukang muli ang pag-install",
+ "title": "I-install ang Codex CLI sa app data"
+ },
+ "rateLimits": {
+ "credits": "Mga Credit",
+ "creditsDescription": "Ipinapakita ang mga credit nang hiwalay sa window-based na subscription usage at maaaring hindi available para sa mga plan-backed na ChatGPT session.",
+ "noSecondaryWindow": "Hindi nagbalik ang Codex ng secondary window para sa account snapshot na ito.",
+ "notReported": "Hindi naiulat",
+ "primaryReset": "Primary reset",
+ "primaryUsed": "Primary na ginamit",
+ "primaryWindow": "Primary window",
+ "remainingLeft": "{{value}} natitira",
+ "remainingUnknown": "Hindi alam ang natitira",
+ "secondaryReset": "Secondary reset",
+ "secondaryUsed": "Secondary na ginamit",
+ "secondaryWindow": "Secondary window",
+ "usedQuotaNote": "Ipinapakita ng mga porsyentong ito ang ginamit na quota, hindi ang natitirang quota.",
+ "weeklyReset": "Weekly reset",
+ "weeklyUsed": "Lingguhang ginamit",
+ "weeklyUsedOneWeek": "Lingguhang ginamit (1w)",
+ "weeklyWindow": "Weekly window",
+ "secondaryFallback": "secondary",
+ "secondaryWindowNote": " Ipinapakita nang hiwalay ang mga lingguhang limit sa {{window}} window.",
+ "usageExplanationGeneric": "Ipinapakita ang ginamit na quota, hindi ang natitirang quota.",
+ "usageExplanationWindowOnly": "Ipinapakita ang ginamit na quota sa kasalukuyang {{window}} window, hindi ang natitirang quota.",
+ "usageExplanationWithRemaining": "{{used}} ginamit - mga {{remaining}} ang natitira sa kasalukuyang {{window}} window."
+ }
+ },
+ "compatibleEndpoint": {
+ "authToken": "Auth token",
+ "authTokenMissing": "Hindi naka-configure ang auth token.",
+ "baseUrl": "Base URL",
+ "description": "Gumamit ng Anthropic-compatible na lokal na runtime endpoint.",
+ "keepSavedToken": "Iwanang blangko para panatilihin ang naka-save na token",
+ "title": "Lokal / compatible na endpoint",
+ "tokenStatus": "Token {{status}}",
+ "validation": {
+ "baseUrlRequired": "Kailangan ang Base URL",
+ "firstPartyAnthropic": "Gamitin ang Auto, Subscription, o API key para sa first-party na Anthropic",
+ "httpRequired": "Dapat gumamit ang Base URL ng http:// o https://",
+ "invalidUrl": "Invalid na URL",
+ "noCredentials": "Hindi dapat maglaman ng credential ang Base URL"
+ },
+ "status": {
+ "endpointDisabledTokenKept": "Naka-disable ang endpoint. Napanatili ang naka-save na token.",
+ "endpointSaved": "Na-save ang endpoint",
+ "endpointSavedTokenMissing": "Na-save ang endpoint. Hindi naka-configure ang auth token."
+ }
+ },
+ "connection": {
+ "authenticationMethod": "Paraan ng authentication",
+ "descriptions": {
+ "anthropic": "Piliin kung paano mag-authenticate ang mga Anthropic session na inilunsad ng app.",
+ "codex": "Piliin kung dapat bang gustuhin ng Codex ang iyong ChatGPT subscription o isang API key kapag inilunsad ang native runtime.",
+ "gemini": "I-configure ang opsyonal na API access. Awtomatiko pa ring natutuklasan ang CLI SDK at ADC.",
+ "opencode": "Pinamamahalaan ng OpenCode runtime ang OpenCode authentication at provider inventory."
+ },
+ "method": "Paraan ng koneksyon",
+ "mode": "Mode: {{mode}}",
+ "selected": "Napili",
+ "switching": "Lumilipat...",
+ "title": "Connection"
+ },
+ "connectionCards": {
+ "apiKey": {
+ "title": "API key"
+ },
+ "anthropic": {
+ "apiKeyDescription": "Gamitin ang ANTHROPIC_API_KEY at Anthropic API billing.",
+ "autoDescription": "Gamitin ang mga Anthropic runtime default at ang pinakamahusay na available na lokal na credential.",
+ "hint": "Pinapanatili ng Auto ang Anthropic sa default nitong lokal na credential resolution.",
+ "subscriptionDescription": "Gamitin ang iyong lokal na Anthropic sign-in session at subscription access.",
+ "subscriptionTitle": "Anthropic subscription"
+ },
+ "auto": {
+ "title": "Auto"
+ },
+ "codex": {
+ "apiKeyDescription": "Gamitin ang OPENAI_API_KEY at CODEX_API_KEY billing para sa mga native Codex launch.",
+ "autoDescription": "Gustuhin ang iyong ChatGPT account at subscription. Gamitin lang ang API key mode kung kailangan.",
+ "chatgptDescription": "Gamitin ang iyong konektadong ChatGPT account at Codex subscription.",
+ "chatgptTitle": "ChatGPT account",
+ "hint": "Palaging tumatakbo ang Codex sa native runtime. Mas gustuhin ng Auto ang iyong ChatGPT account bago bumalik sa mga API-key na credential."
+ }
+ },
+ "description": "Pamahalaan kung paano kumonekta ang bawat provider at, kung sinusuportahan, kung aling backend ang dapat gamitin ng multimodel runtime.",
+ "fastMode": {
+ "defaultOff": "Default na Naka-off",
+ "description": "Ilapat ang Claude Code Fast mode bilang default para sa mga bagong Anthropic team launch kapag pinapayagan ito ng na-resolve na model at runtime.",
+ "disabledHint": "Mananatili sa normal na bilis ang mga bagong Anthropic launch maliban kung tahasang paganahin ng isang team ang Fast mode.",
+ "enabledHint": "Hihilingin ng mga bagong Anthropic launch ang Fast mode bilang default kapag sinusuportahan ito ng na-resolve na model.",
+ "notExposed": "Hindi inilalantad ng Anthropic runtime na ito ang Fast mode.",
+ "preferFast": "Gustuhin ang Fast",
+ "title": "Default ng Fast mode",
+ "unavailableForRuntime": "Kasalukuyang hindi available ang Fast mode para sa Anthropic runtime na ito."
+ },
+ "alerts": {
+ "anthropicApiKeyMissing": "Napili ang API key mode, ngunit wala pang available na Anthropic API credential.",
+ "anthropicStoredKeyAvailable": "May available na naka-save na API key, ngunit ginagamit lang ito ng mga Anthropic session na inilunsad ng app pagkatapos kang lumipat sa API key mode.",
+ "anthropicSubscriptionMissing": "Napili ang Anthropic subscription mode. Mag-sign in sa Anthropic para gamitin ang provider na ito.",
+ "authTokenMissing": "Hindi naka-configure ang auth token. Maraming lokal na Anthropic-compatible na endpoint ang nangangailangan ng hindi blangkong token.",
+ "chatgptLoginPending": "Naghihintay na matapos ang login ng ChatGPT account...",
+ "chatgptLoginStarting": "Sinisimulan ang ChatGPT login...",
+ "codexApiKeyMissing": "Napili ang API key mode, ngunit wala pang available na OPENAI_API_KEY o CODEX_API_KEY credential.",
+ "codexLocalArtifactsNoSession": "Kasalukuyang walang aktibong ChatGPT account ang Codex CLI. May lokal na data ng Codex account, ngunit walang aktibong managed session na napili.",
+ "codexNeedsReconnect": "May lokal na napiling ChatGPT account ang Codex, ngunit kailangang ikonekta muli ang kasalukuyang session.",
+ "codexNoChatgptAccount": "Kasalukuyang walang aktibong ChatGPT account ang Codex CLI. Ikonekta ang ChatGPT para gamitin ang iyong subscription.",
+ "codexNoCredential": "Wala pang available na ChatGPT account o API key.",
+ "geminiApiUnavailable": "Kasalukuyang hindi available ang Gemini API. I-configure ang `GEMINI_API_KEY` dito o gumamit ng mga valid na Google ADC credential.",
+ "withApiKeyFallback": "{{message}} Lumipat sa API key mode para gamitin ang natukoy na API key."
+ },
+ "authModeDescriptions": {
+ "anthropic": {
+ "apiKey": "Pilitin ang mga Anthropic session na inilunsad ng app na gumamit ng API key credential.",
+ "auto": "Gamitin ang default na runtime behavior. Ginagamit lang ang mga naka-save na API key sa app na ito pagkatapos kang lumipat sa API key mode.",
+ "oauth": "Pilitin ang mga Anthropic session na inilunsad ng app na gumamit ng lokal na Anthropic subscription session."
+ },
+ "codex": {
+ "apiKey": "Pilitin ang mga native Codex launch na gumamit ng OPENAI_API_KEY / CODEX_API_KEY billing.",
+ "auto": "Gustuhin ang iyong ChatGPT account kapag available ito. Bumalik sa API key mode kapag kailangan lang.",
+ "chatgpt": "Pilitin ang mga native Codex launch na gumamit ng iyong konektadong ChatGPT account at subscription."
+ }
+ },
+ "progress": {
+ "applyingConnectionChanges": "Inilalapat ang mga pagbabago sa koneksyon...",
+ "refreshingProviderStatus": "Nire-refresh ang status ng provider...",
+ "savingCompatibleEndpoint": "Sine-save ang compatible endpoint...",
+ "switchingAnthropicSubscription": "Lumilipat sa Anthropic subscription...",
+ "switchingApiKey": "Lumilipat sa API key...",
+ "switchingApiKeyMode": "Lumilipat sa API key mode...",
+ "switchingAuto": "Lumilipat sa Auto...",
+ "switchingChatgpt": "Lumilipat sa ChatGPT account mode..."
+ },
+ "provider": "Provider",
+ "runtime": {
+ "descriptions": {
+ "anthropic": "Kasalukuyang walang hiwalay na runtime backend selector ang Anthropic.",
+ "codex": "Tumatakbo na ngayon ang Codex sa native runtime path lang.",
+ "gemini": "Piliin kung aling Gemini runtime backend ang dapat gamitin ng multimodel.",
+ "opencode": "Gumagamit ang OpenCode ng sarili nitong managed runtime host. Kasalukuyang inilalantad lang ng Desktop ang status."
+ },
+ "title": "Runtime",
+ "updating": "Ina-update ang runtime..."
+ },
+ "runtimeSummary": "Runtime: {{runtime}}",
+ "status": {
+ "configured": "naka-configure",
+ "enabled": "Pinagana",
+ "notConfigured": "Hindi naka-configure",
+ "notSet": "hindi nakatakda",
+ "off": "Off",
+ "unknown": "Hindi alam"
+ },
+ "title": "Mga Setting ng Provider",
+ "usage": {
+ "apiKey": "Gumagamit ng API key",
+ "apiKeyRequired": "Kailangan ng API key",
+ "compatibleEndpoint": "Gumagamit ng compatible endpoint",
+ "notConnected": "Hindi konektado",
+ "usingMethod": "Gumagamit ng {{method}}"
+ },
+ "errors": {
+ "apiKeyDeletedRefreshFailed": "Natanggal ang API key, ngunit nabigong i-refresh ang status ng provider.",
+ "apiKeySavedRefreshFailed": "Na-save ang API key, ngunit nabigong i-refresh ang status ng provider.",
+ "connectionUpdatedRefreshFailed": "Na-update ang koneksyon, ngunit nabigong i-refresh ang status ng provider.",
+ "deleteApiKey": "Nabigong tanggalin ang API key",
+ "disableEndpoint": "Nabigong i-disable ang endpoint",
+ "endpointDisabledRefreshFailed": "Naka-disable ang endpoint, ngunit nabigong i-refresh ang status ng provider.",
+ "endpointSavedRefreshFailed": "Na-save ang endpoint, ngunit nabigong i-refresh ang status ng provider.",
+ "refreshCodexAccount": "Nabigong i-refresh ang Codex account",
+ "saveApiKey": "Nabigong i-save ang API key",
+ "saveEndpoint": "Nabigong i-save ang endpoint",
+ "updateAnthropicFastMode": "Nabigong i-update ang Anthropic Fast mode",
+ "updateConnection": "Nabigong i-update ang koneksyon",
+ "updateRuntimeBackend": "Nabigong i-update ang runtime backend",
+ "apiKeyRequired": "Kailangan ang API key"
+ },
+ "connectionUi": {
+ "authMode": {
+ "auto": "Auto",
+ "oauth": "Subscription / OAuth",
+ "chatgpt": "ChatGPT account",
+ "apiKey": "API key",
+ "anthropicSubscription": "Anthropic subscription"
+ },
+ "authMethod": {
+ "apiKey": "API key",
+ "apiKeyHelper": "API key helper",
+ "oauth": "OAuth",
+ "claudeSubscription": "Claude subscription",
+ "geminiCli": "Gemini CLI",
+ "googleAccount": "Google account",
+ "serviceAccount": "service account"
+ },
+ "runtime": {
+ "codexNative": "Codex native",
+ "currentRuntime": "Kasalukuyang runtime",
+ "selectedRuntime": "Napiling runtime",
+ "summary": "{{prefix}}: {{runtime}}"
+ },
+ "status": {
+ "checking": "Sinusuri...",
+ "modelsAvailable": "May available na model",
+ "checked": "Nasuri",
+ "providerActivity": "Aktibidad ng Provider",
+ "notConnected": "Hindi konektado",
+ "startingChatGptLogin": "Sinisimulan ang ChatGPT login...",
+ "waitingForChatGptLogin": "Naghihintay sa login ng ChatGPT account...",
+ "chatGptVerificationDegraded": "Natukoy ang ChatGPT account - kasalukuyang degraded ang account verification.",
+ "chatGptAccountReady": "Handa na ang ChatGPT account",
+ "apiKeyReady": "Handa na ang API key",
+ "codexLocalAccountNeedsReconnect": "May lokal na napiling ChatGPT account ang Codex, ngunit kailangang ikonekta muli ang kasalukuyang session.",
+ "codexNoActiveManagedSession": "Nag-uulat ang Codex CLI ng walang aktibong ChatGPT login. May lokal na data ng Codex account, ngunit walang aktibong managed session na napili.",
+ "codexNoActiveChatGptLogin": "Nag-uulat ang Codex CLI ng walang aktibong ChatGPT login",
+ "connectChatGptForSubscription": "Ikonekta ang isang ChatGPT account para gamitin ang iyong Codex subscription.",
+ "codexNativeReady": "Handa na ang Codex native",
+ "codexNativeUnavailable": "Hindi available ang Codex native",
+ "unavailableInCurrentRuntime": "Hindi available sa kasalukuyang runtime",
+ "connectedViaApiKey": "Konektado sa pamamagitan ng API key",
+ "apiKeyConfiguredNotVerified": "Naka-configure ang API key, ngunit hindi pa na-verify",
+ "apiKeyModeMissingCredential": "Napili ang API key mode, ngunit walang naka-configure na API key",
+ "connectedVia": "Konektado sa pamamagitan ng {{method}}",
+ "unableToVerify": "Hindi ma-verify"
+ },
+ "mode": {
+ "selectedAuth": "Napiling auth: {{authMode}}",
+ "preferredAuth": "Gustong auth: {{authMode}}"
+ },
+ "credential": {
+ "apiKeyConfigured": "Naka-configure ang API key",
+ "savedApiKeyAvailable": "May available na naka-save na API key sa Manage",
+ "apiKeyAlsoConfigured": "Naka-configure din ang API key sa Manage",
+ "apiKeyConfiguredInManage": "Naka-configure ang API key sa Manage",
+ "apiKeyFallbackInManage": "May available ding API key sa Manage bilang fallback",
+ "availableAsFallback": "{{summary}} - available bilang fallback",
+ "savedApiKeyAvailableIfSwitch": "May available na naka-save na API key sa Manage kung lilipat ka sa API key mode",
+ "availableIfSwitch": "{{summary}} - available kung lilipat ka sa API key mode",
+ "autoWillUseUntilChatGpt": "{{summary}} - Gagamitin ito ng Auto hanggang sa makonekta ang ChatGPT"
+ },
+ "actions": {
+ "connect": "Kumonekta",
+ "connectAnthropic": "Ikonekta ang Anthropic",
+ "connectChatGpt": "Ikonekta ang ChatGPT",
+ "disconnect": "Idiskonekta",
+ "openLogin": "Buksan ang Login"
+ },
+ "disconnect": {
+ "anthropicTitle": "Idiskonekta ang Anthropic subscription?",
+ "anthropic": "Inaalis nito ang lokal na Anthropic subscription session mula sa Claude CLI runtime.",
+ "anthropicWithApiKey": "Inaalis nito ang lokal na Anthropic subscription session mula sa Claude CLI runtime. Mananatiling available ang mga naka-save na API key sa Manage.",
+ "geminiTitle": "Idiskonekta ang Gemini CLI?",
+ "gemini": "Nili-clear nito ang lokal na metadata ng Gemini CLI session. Hindi inaalis ang mga external na ADC credential at naka-save na API key."
+ }
+ }
+ },
+ "cliRuntime": {
+ "actions": {
+ "checkForUpdates": "Maghanap ng Update",
+ "checking": "Sinusuri...",
+ "extensions": "Extensions",
+ "installRuntime": "I-install ang {{runtime}}",
+ "manage": "Pamahalaan",
+ "recheck": "Suriing muli",
+ "reinstallRuntime": "I-reinstall ang {{runtime}}",
+ "retry": "Subukang muli",
+ "update": "I-update"
+ },
+ "installer": {
+ "checkingLatest": "Sinusuri ang pinakabagong bersyon...",
+ "downloading": "Dina-download...",
+ "failed": "Nabigo ang pag-install",
+ "installed": "Na-install ang v{{version}}",
+ "installing": "Ini-install...",
+ "latest": "pinakabago",
+ "verifying": "Bineberipika ang checksum..."
+ },
+ "labels": {
+ "multimodel": "Multimodel"
+ },
+ "loading": {
+ "aiProviders": "Sinusuri ang mga AI Provider...",
+ "claudeCli": "Sinusuri ang Claude CLI..."
+ },
+ "provider": {
+ "backend": "Backend: {{backend}}",
+ "loadingModels": "Niloload ang mga model...",
+ "modelsUnavailable": "Hindi available ang mga model para sa runtime build na ito",
+ "runtime": "Runtime: {{runtime}}"
+ },
+ "providerTerminal": {
+ "authFailed": "Nabigo ang authentication",
+ "authUpdated": "Na-update ang authentication",
+ "loggedOut": "Naka-logout ang provider",
+ "login": "Login",
+ "logout": "Logout",
+ "logoutFailed": "Nabigo ang logout"
+ },
+ "status": {
+ "configuredNotFound": "Hindi nakita ang na-configure na {{runtime}}.",
+ "foundButFailed": "Nakita ang {{runtime}} ngunit nabigong magsimula",
+ "healthCheckFailed": "Nabigo sa startup health check ang na-configure na {{runtime}}.",
+ "notInstalled": "Hindi naka-install ang {{runtime}}"
+ },
+ "title": "CLI Runtime"
+ },
+ "cliStatus": {
+ "versionUpgrade": "v{{current}} -> v{{latest}}"
+ }
+}
diff --git a/src/features/localization/renderer/locales/fil/team.json b/src/features/localization/renderer/locales/fil/team.json
new file mode 100644
index 00000000..1caa2610
--- /dev/null
+++ b/src/features/localization/renderer/locales/fil/team.json
@@ -0,0 +1,2487 @@
+{
+ "activity": {
+ "actions": {
+ "createTaskFromMessage": "Lumikha ng task mula sa mensahe",
+ "editMessage": "I-edit ang mensahe",
+ "expandMessage": "I-expand ang mensahe",
+ "replyToMessage": "Sumagot sa mensahe",
+ "restartTeam": "I-restart ang team"
+ },
+ "authError": {
+ "description": "Nabigo ang authentication. Ang pag-restart ng team ay magre-refresh ng session at maaaring lutasin ang isyung ito. Kung magpatuloy ang problema, tingnan ang iyong mga API credential o subukang muli mamaya."
+ },
+ "automation": {
+ "reviewPickup": "Hiniling sa teammate na kunin ang review",
+ "stallNudge": "Hiniling sa teammate na ituloy ang naantalang task",
+ "workSyncBody": "Hiniling sa teammate na i-sync ang kasalukuyang trabaho"
+ },
+ "badges": {
+ "automation": "automation",
+ "bootstrap": "bootstrap",
+ "command": "command",
+ "comment": "Komento",
+ "live": "live",
+ "note": "note",
+ "rateLimited": "Rate Limited",
+ "restart": "restart",
+ "result": "result",
+ "session": "session",
+ "stallNudge": "stall nudge",
+ "start": "start",
+ "workSync": "work sync",
+ "agentError": "Agent Error",
+ "apiError": "API Error"
+ },
+ "bootstrap": {
+ "acknowledged": "Nakilala ang bootstrap",
+ "restarting": "Nire-restart ang teammate",
+ "starting": "Sinisimulan ang teammate"
+ },
+ "rawJson": "Raw JSON",
+ "unread": "Hindi nabasa",
+ "thoughts": {
+ "count": "{{count}} kaisipan",
+ "count_one": "{{count}} kaisipan",
+ "expand": "I-expand ang mga kaisipan",
+ "showMore": "Magpakita pa",
+ "showLess": "Magpakita ng mas kaunti",
+ "count_few": "{{count}} kaisipan",
+ "count_many": "{{count}} kaisipan",
+ "count_other": "{{count}} kaisipan",
+ "toolSummary": "🔧 {{summary}}",
+ "titleForMember": "{{name}} - mga kaisipan"
+ },
+ "timeline": {
+ "loadingMessages": "Niloload ang mga mensahe...",
+ "noMessages": "Walang mensahe",
+ "emptyHint": "Magpadala ng mensahe sa isang miyembro para makita ang aktibidad.",
+ "newSession": "Bagong session",
+ "olderCount": "+{{count}} mas luma",
+ "showMore": "Magpakita ng {{count}} pa",
+ "showAll": "Ipakita lahat",
+ "olderCount_one": "+{{count}} mas luma",
+ "olderCount_few": "+{{count}} mas luma",
+ "olderCount_many": "+{{count}} mas luma",
+ "olderCount_other": "+{{count}} mas luma"
+ },
+ "pendingReplies": {
+ "title": "Naghihintay ng sagot",
+ "openMember": "Buksan ang miyembro",
+ "messageSentAwaitingReply": "Naipadala ang mensahe, naghihintay ng sagot",
+ "awaitingReply": "naghihintay ng sagot",
+ "externalTeam": "external na team",
+ "crossTeamAwaitingReply": "Naipadala ang cross-team na mensahe, naghihintay ng sagot",
+ "user": "user",
+ "awaitingApproval": "naghihintay ng pag-apruba"
+ },
+ "reply": {
+ "replyingTo": "Sumasagot kay",
+ "action": "Sumagot"
+ },
+ "activeTasks": {
+ "inProgress": "Ginagawa",
+ "expandInProgress": "I-expand ang ginagawa",
+ "collapseInProgress": "I-collapse ang ginagawa",
+ "reviewing": "sinusuri",
+ "workingOn": "ginagawa"
+ },
+ "expandDialog": {
+ "description": "Naka-expand na view ng mensahe"
+ }
+ },
+ "create": {
+ "actions": {
+ "create": "Lumikha",
+ "creating": "Lumilikha...",
+ "openExisting": "Buksan ang Umiiral na Team",
+ "skipPreflightAndCreate": "Laktawan ang preflight at lumikha"
+ },
+ "conflict": {
+ "description": "Mapanganib ang pagpapatakbo ng dalawang team sa parehong directory - maaaring magkasalungat sila sa pag-edit ng parehong mga file. Isaalang-alang ang paggamit ng ibang directory o git worktree para sa isolation.",
+ "title": "May isa pang team na \"{{team}}\" na tumatakbo na para sa working directory na ito",
+ "workingDirectory": "Working directory:"
+ },
+ "description": {
+ "copy": "Lumikha ng bagong team batay sa isang umiiral na.",
+ "create": "I-set up ang iyong team at piliin kung paano ito magsisimula."
+ },
+ "errors": {
+ "nameExists": "Umiiral na ang pangalan ng team",
+ "nameLaunching": "May team na may ganitong pangalan na kasalukuyang inilulunsad",
+ "createConfigFailed": "Nabigong lumikha ng team config",
+ "loadProjectsFailed": "Nabigong i-load ang mga proyekto"
+ },
+ "fields": {
+ "color": "Kulay (opsyonal)",
+ "description": "Paglalarawan (opsyonal)",
+ "prompt": "Prompt para sa team lead (opsyonal)",
+ "teamName": "Pangalan ng team"
+ },
+ "launchAfterCreate": {
+ "description": "Simulan agad ang team sa pamamagitan ng lokal na Claude CLI.",
+ "label": "Patakbuhin ang command pagkatapos lumikha"
+ },
+ "localOnly": "Available lang sa lokal na Electron mode.",
+ "onDisk": "Sa disk:",
+ "placeholders": {
+ "description": "Maikling paglalarawan ng layunin ng team",
+ "prompt": "Mga tagubilin para sa team lead sa panahon ng provisioning..."
+ },
+ "saved": "Na-save",
+ "solo": {
+ "description": "Ang team lead lang (main process) ang sisimulan - walang teammate na isi-spawn. Gumagana tulad ng regular na agent session sa iyong piniling runtime (Claude Code, Codex, OpenCode, Gemini) ngunit may access sa task board para sa pagpaplano. Nagtitipid ng token sa pamamagitan ng pag-iwas sa overhead ng koordinasyon ng teammate. Maaari kang magdagdag ng mga miyembro mamaya mula sa mga setting ng team.",
+ "label": "Solo team"
+ },
+ "title": {
+ "copy": "Kopyahin ang Team",
+ "create": "Lumikha ng Team"
+ },
+ "optional": {
+ "launchSettingsTitle": "Mga opsyonal na launch setting",
+ "launchSettingsDescription": "Naririto ang prompt, safety, at mga CLI override kapag kailangan mo ang mga ito.",
+ "teamDetailsTitle": "Mga opsyonal na detalye ng team",
+ "teamDetailsDescription": "Panatilihing compact ang default na flow at buksan lang ito kapag gusto mo ng karagdagang context o custom na kulay."
+ },
+ "prepare": {
+ "unsupportedPreload": "Hindi sinusuportahan ng kasalukuyang preload version ang team:prepareProvisioning. I-restart ang dev app.",
+ "selectWorkingDirectory": "Pumili ng working directory para i-validate ang launch environment.",
+ "someProvidersNeedAttention": "May ilang napiling provider na nangangailangan ng atensyon.",
+ "readyWithNotes": "Handa na ang lahat ng napiling provider, may mga nota.",
+ "ready": "Handa na ang lahat ng napiling provider.",
+ "failed": "Nabigong ihanda ang mga napiling provider",
+ "checkingProviders": "Sinusuri ang mga napiling provider...",
+ "preparingEnvironment": "Inihahanda ang environment...",
+ "selectedProvidersReadyWithNotes": "Handa na ang mga napiling provider (may mga nota)",
+ "selectedProvidersReady": "Handa na ang mga napiling provider"
+ },
+ "validation": {
+ "nameMustContainLetterOrDigit": "Ang pangalan ay dapat maglaman ng kahit isang letra o numero",
+ "nameTooLong": "Masyadong mahaba ang pangalan (max 128 chars)",
+ "selectWorkingDirectory": "Pumili ng working directory (cwd)",
+ "memberNameRequired": "Hindi maaaring blangko ang pangalan ng miyembro",
+ "memberNameInvalid": "Ang pangalan ng miyembro ay dapat magsimula sa alphanumeric, gumamit lang ng [a-zA-Z0-9._-], max 128 chars",
+ "memberNamesUnique": "Ang mga pangalan ng miyembro ay dapat natatangi",
+ "openCodeLeadModelRequired": "Nangangailangan ang OpenCode lead ng napiling model.",
+ "openCodeTeammateRequired": "Nangangailangan ang OpenCode lead ng kahit isang OpenCode teammate.",
+ "teamLaunching": "Kasalukuyang inilulunsad ang team",
+ "teamNameExists": "Umiiral na ang pangalan ng team",
+ "checkFormFields": "Tingnan ang mga field ng form"
+ }
+ },
+ "editTeam": {
+ "actions": {
+ "cancel": "Kanselahin",
+ "save": "I-save"
+ },
+ "addMemberLockReason": "Gamitin ang dedikadong Add member dialog para magdagdag ng mga bagong teammate habang live ang team.",
+ "description": "Baguhin ang pangalan, paglalarawan at kulay ng team",
+ "errors": {
+ "changesSavedRefreshFailed": "Na-save ang mga pagbabago sa team, ngunit nabigong i-refresh ang pinakabagong view: {{message}}",
+ "liveRenameBlocked": "Hindi maaaring palitan ang pangalan ng mga umiiral na teammate habang live ang team. pinalitan ng pangalan: {{names}}",
+ "memberNameEmpty": "Hindi maaaring blangko ang pangalan ng miyembro",
+ "memberNameInvalid": "Ang pangalan ng miyembro ay dapat magsimula sa alphanumeric, gumamit lang ng [a-zA-Z0-9._-], max 128 chars",
+ "memberNameNumericSuffix": "Hindi pinapayagan ang pangalan ng miyembro na \"{{name}}\" (nakareserba para sa Claude CLI auto-suffix). Gamitin ang \"{{base}}\" sa halip.",
+ "memberNameReserved": "Nakareserba ang pangalan ng miyembro na \"{{name}}\"",
+ "memberNamesUnique": "Ang mga pangalan ng miyembro ay dapat natatangi bago mag-save",
+ "newLiveTeammates": "Magdagdag ng mga bagong teammate mula sa dedikadong Add member dialog habang live ang team. Sinusuportahan lang ng Edit Team ang pag-update ng mga umiiral na teammate.",
+ "provisioning": "Hindi maaaring i-edit ang mga setting ng team habang isinasagawa pa ang provisioning. Maghintay na matapos ang paglunsad, pagkatapos ay subukang muli.",
+ "restartFailedMany": "Na-save ang team, ngunit nabigong i-restart ang mga teammate na ito: {{failures}}",
+ "restartFailedOne": "Na-save ang team, ngunit nabigong i-restart ang teammate na ito: {{failures}}",
+ "saveFailed": "Nabigong mag-save",
+ "settingsChanged": "Nabago ang mga setting ng team habang bukas ang dialog na ito. Buksang muli ito at suriin ang pinakabagong state bago mag-save.",
+ "settingsSavedMembersAndRefreshFailed": "Na-save ang mga setting ng team, ngunit nabigo ang mga pagbabago sa miyembro: {{message}}. Nabigo rin ang pag-refresh: {{refreshError}}",
+ "settingsSavedMembersFailed": "Na-save ang mga setting ng team, ngunit nabigo ang mga pagbabago sa miyembro: {{message}}",
+ "settingsSavedRefreshFailed": "Na-save ang mga setting ng team, ngunit nabigong i-refresh ang pinakabagong view: {{message}}",
+ "teamNameEmpty": "Hindi maaaring blangko ang pangalan ng team",
+ "unsupportedMixedPrimaryMutation": "Hindi pa sinusuportahan ang mga live na pag-edit sa mga primary-owned na teammate sa mga mixed na OpenCode team. Ihinto ang team, i-edit ang roster, pagkatapos ay ilunsad muli. Apektado: {{names}}"
+ },
+ "fields": {
+ "colorOptional": "Kulay (opsyonal)",
+ "description": "Paglalarawan",
+ "name": "Pangalan"
+ },
+ "memberRestartWarning": "Ang pag-save ay magre-restart sa teammate na ito para ilapat ang mga pagbabago sa role, workflow, worktree isolation, provider, model, effort, o MCP access.",
+ "notices": {
+ "liveRenameBlocked": "Naka-block ang live save dahil pinalitan ng pangalan ang mga umiiral na teammate. Ibalik ang mga pagbabago sa identity na iyon o ihinto muna ang team.",
+ "newLiveTeammates": "Hindi maaaring magdagdag ng mga bagong teammate mula sa Edit Team habang live ang team. Gamitin ang Add member dialog sa halip.",
+ "provisioning": "Isinasagawa pa ang team provisioning. Pansamantalang naka-lock ang pag-edit hanggang matapos ang paglunsad.",
+ "restartMany": "Ang pag-save ay magre-restart o magre-relaunch sa mga teammate na ito para ilapat ang mga pagbabago sa role, workflow, worktree isolation, provider, model, effort, o MCP access: {{names}}.",
+ "restartOne": "Ang pag-save ay magre-restart o magre-relaunch sa teammate na ito para ilapat ang mga pagbabago sa role, workflow, worktree isolation, provider, model, effort, o MCP access: {{names}}.",
+ "unsupportedMixedPrimaryMutation": "Ang mga live na pag-edit/pagtanggal para sa mga primary-owned na teammate sa mga mixed na OpenCode team ay nangangailangan ng paghinto at pag-relaunch ng team: {{names}}."
+ },
+ "placeholders": {
+ "description": "Paglalarawan ng team (opsyonal)",
+ "teamName": "Pangalan ng team"
+ },
+ "teamLead": {
+ "changeRuntime": "Palitan ang lead runtime",
+ "changeRuntimeDescription": "Buksan ang Relaunch Team para palitan ang lead provider, model, o effort.",
+ "modelLockReason": "Ang team lead runtime ay pinamamahalaan mula sa Relaunch Team.",
+ "readOnlyHint": "Ang pangalan at role ng team lead ay nananatiling read-only dito. Buksan ang runtime panel sa lead row para palitan ang provider, model, o effort.",
+ "role": "Team Lead"
+ },
+ "title": "I-edit ang Team"
+ },
+ "memberDraft": {
+ "actions": {
+ "remove": "Tanggalin ang miyembro",
+ "removeAria": "Tanggalin si {{name}}",
+ "restore": "Ibalik ang miyembro",
+ "restoreAria": "Ibalik si {{name}}"
+ },
+ "anthropicContext": {
+ "defaultSetting": "default na context setting",
+ "description": "Ang Anthropic context ay team-wide para sa paglunsad na ito: {{mode}}. Gamitin ang Limit context checkbox ng lead runtime panel para palitan ito.",
+ "limitEnabled": "Naka-enable ang 200K limit"
+ },
+ "mcp": {
+ "buttonInherit": "MCP inherit",
+ "buttonScopes": "MCP scopes",
+ "chooseScopes": "Pumili ng mga scope",
+ "inheritLead": "Mana mula sa lead",
+ "lockedInfo": "Naka-enable ang Agent Teams MCP only para sa lahat ng teammate. Maglulunsad ang teammate na ito gamit lang ang Agent Teams server.",
+ "mode": "MCP mode",
+ "scopes": {
+ "local": "local",
+ "project": "project",
+ "user": "user"
+ },
+ "serverNames": "Mga pangalan ng server",
+ "settingInfo": "Inilulunsad ng Agent Teams MCP ang teammate na ito gamit lang ang Agent Teams server. Ang scope at allowlist mode ay nalalapat lang sa paglunsad ng teammate na ito.",
+ "strictAllowlist": "Strict allowlist",
+ "tooltip": "{{label}}: Kontrolin ang MCP inheritance policy ng miyembrong ito",
+ "agentTeamsMcp": "Agent Teams MCP"
+ },
+ "model": {
+ "ariaLabel": "{{provider}} provider, {{model}}",
+ "currentLeadRuntime": "Kasalukuyang lead runtime",
+ "default": "Default",
+ "inheritedTooltip": "Ang provider, model, at effort ay minana mula sa lead habang naka-enable ang sync.",
+ "leadSuffix": "{{label}} (lead)",
+ "liveDisabled": "Naka-disable ang mga pagbabago sa provider, model, at effort habang live ang team. Ikonekta muli ang team para ilapat ang mga ito nang ligtas.",
+ "lockedActionFallback": "Binubuksan ng mga pagbabago sa lead runtime ang Relaunch Team, kung saan maaaring i-update ang provider, model, at effort.",
+ "restartWholeTeam": "Ang pag-save ng mga pagbabagong iyon sa runtime ay magre-restart sa buong team."
+ },
+ "nameAria": "Pangalan ng miyembro {{index}}",
+ "nameFallback": "miyembro {{index}}",
+ "noRole": "Walang role",
+ "removed": "Tinanggal",
+ "workflow": {
+ "addTooltip": "Magdagdag ng workflow ng teammate",
+ "editTooltip": "I-edit ang workflow ng teammate",
+ "label": "Workflow (opsyonal)",
+ "placeholder": "Paano dapat kumilos ang agent na ito, makipag-ugnayan sa iba...",
+ "saved": "Na-save"
+ },
+ "worktree": {
+ "description": "Patakbuhin ang teammate na ito sa hiwalay na git worktree. Ang pag-apply/pag-reject ng mga pagbabago ay nakatuon sa worktree na iyon, hindi sa lead workspace.",
+ "label": "Worktree"
+ },
+ "addMembers": {
+ "title": "Magdagdag ng Mga Miyembro",
+ "description": "Magdagdag ng mga bagong miyembro sa {{teamName}}"
+ },
+ "placeholders": {
+ "name": "member-name",
+ "mcpServers": "github, sentry"
+ }
+ },
+ "detail": {
+ "actions": {
+ "add": "Idagdag",
+ "cancel": "Kanselahin",
+ "delete": "Tanggalin",
+ "editCode": "I-edit ang code",
+ "launch": "Ilunsad",
+ "remove": "Tanggalin",
+ "stop": "Ihinto",
+ "task": "Task",
+ "visualize": "I-visualize"
+ },
+ "deleteTeam": {
+ "description": "Tanggalin ang team na \"{{team}}\"? Hindi na maibabalik ang aksyon na ito. Tatanggalin ang lahat ng data at task ng team.",
+ "title": "Tanggalin ang team"
+ },
+ "draft": {
+ "descriptionPrefix": "Ito ay draft na team -",
+ "descriptionSuffix": "ay na-configure na may {{count}} {{member}} ngunit hindi pa na-provision ng CLI. I-click ang Launch para pumili ng model at simulan ang team.",
+ "descriptionSuffix_few": "ay na-configure na may {{count}} {{member}} ngunit hindi pa na-provision ng CLI. I-click ang Launch para pumili ng model at simulan ang team.",
+ "descriptionSuffix_many": "ay na-configure na may {{count}} {{member}} ngunit hindi pa na-provision ng CLI. I-click ang Launch para pumili ng model at simulan ang team.",
+ "descriptionSuffix_one": "ay na-configure na may {{count}} {{member}} ngunit hindi pa na-provision ng CLI. I-click ang Launch para pumili ng model at simulan ang team.",
+ "descriptionSuffix_other": "ay na-configure na may {{count}} {{member}} ngunit hindi pa na-provision ng CLI. I-click ang Launch para pumili ng model at simulan ang team.",
+ "member": "mga miyembro",
+ "member_few": "mga miyembro",
+ "member_many": "mga miyembro",
+ "member_one": "miyembro",
+ "member_other": "mga miyembro",
+ "title": "Hindi pa nailulunsad ang team"
+ },
+ "invalidTab": "Invalid na team tab",
+ "kanbanSafeData": "Nabigong ganap na i-load ang kanban. Ipinapakita ang safe na data.",
+ "loadFailed": "Nabigong i-load ang team",
+ "loading": "Niloload ang team",
+ "loadingSidebar": "Niloload ang team sidebar",
+ "offline": {
+ "offline": "Offline ang team",
+ "partialFailed": "Nabigo ang huling paglunsad sa kalagitnaan",
+ "partialMissing": "Nabigo ang huling paglunsad sa kalagitnaan - {{missing}}/{{expected}} na teammate ang hindi sumali",
+ "reconciling": "Nire-reconcile pa ang huling paglunsad"
+ },
+ "previous": "Nakaraan: {{paths}}",
+ "removeMember": {
+ "description": "Tanggalin si \"{{member}}\" mula sa team? Mapepreserba ang mga task at mensahe, ngunit hindi na magagamit muli ang pangalang ito.",
+ "title": "Tanggalin ang miyembro"
+ },
+ "sections": {
+ "team": "Team"
+ },
+ "solo": "Solo",
+ "status": {
+ "active": "Aktibo",
+ "launching": "Inilulunsad...",
+ "running": "Tumatakbo"
+ },
+ "telemetry": {
+ "cpu": "CPU",
+ "memory": "Memory"
+ },
+ "tooltips": {
+ "deleteTeam": "Tanggalin ang team",
+ "editTeam": "I-edit ang team",
+ "editUnavailableProvisioning": "Hindi available ang pag-edit ng team habang isinasagawa pa ang provisioning",
+ "openBuiltInEditor": "Buksan ang proyekto sa built-in editor",
+ "openTeamGraph": "Buksan ang team graph",
+ "stopTeam": "Ihinto ang team"
+ },
+ "waitingForProvisioning": "Lalabas ang data ng team kapag natapos ang provisioning",
+ "context": {
+ "title": "Context",
+ "loading": "Niloload...",
+ "noSessionLoaded": "Walang naka-load na session",
+ "closePanel": "Isara ang context panel ng {{team}}",
+ "loadingContext": "Niloload ang context...",
+ "openLeadSession": "Buksan ang team lead session para tingnan ang context."
+ }
+ },
+ "review": {
+ "fileHeader": {
+ "actions": {
+ "accept": "Tanggapin",
+ "discard": "Itapon",
+ "discardTooltip": "Itapon ang lahat ng edit para sa file na ito",
+ "keepMyDraft": "Panatilihin ang aking draft",
+ "reject": "Tanggihan",
+ "reloadFromDisk": "I-reload mula sa disk",
+ "restore": "Ibalik",
+ "restoreTooltip": "Lumikha/ibalik ang file na ito sa disk mula sa preview",
+ "saveFile": "I-save ang File",
+ "saveFileTooltip": "I-save ang file sa disk"
+ },
+ "badges": {
+ "deleted": "TINANGGAL",
+ "manualReview": "MANUAL NA REVIEW",
+ "new": "BAGO",
+ "worktree": "WORKTREE"
+ },
+ "contentSource": {
+ "disk-current": "Kasalukuyang Disk",
+ "file-history": "File History",
+ "git-fallback": "Git Fallback",
+ "ledger-exact": "Task Ledger",
+ "ledger-snapshot": "Ledger Snapshot",
+ "snippet-reconstruction": "Muling Binuo",
+ "unavailable": "Hindi available ang content"
+ },
+ "contentUnavailable": {
+ "badge": "Hindi available ang content",
+ "description": "Nagtala ang ledger ng metadata para sa pagbabagong ito, ngunit hindi available ang buong text content. Karaniwang nangangahulugan ito ng binary, malaki, o hash-only na content.",
+ "safety": "Naka-disable ang awtomatikong accept/reject para sa file na ito para maiwasan ang mga hindi ligtas na disk write.",
+ "title": "Hindi available ang text content"
+ },
+ "disabled": {
+ "acceptRejectContentUnavailable": "Naka-disable ang Accept/Reject dahil hindi available ang buong text content.",
+ "acceptRejectMissingOnDisk": "Naka-disable ang Accept/Reject habang nawawala ang file sa disk.",
+ "rejectBaselineUnavailable": "Naka-disable ang Reject dahil hindi available ang orihinal na baseline.",
+ "rejectContentUnavailable": "Naka-disable ang Reject dahil hindi available ang buong text content.",
+ "rejectManualLedgerReview": "Naka-disable ang Reject dahil ang ledger change na ito ay may binary, malaki, o hindi available na content."
+ },
+ "externalChange": {
+ "changedOnDisk": "Nabago sa disk",
+ "deletedOnDisk": "Tinanggal sa disk",
+ "recreatedOnDisk": "Muling nilikha sa disk"
+ },
+ "missingOnDisk": {
+ "badge": "Nawawala sa disk",
+ "description": "Maaari pa rin kaming magpakita ng preview mula sa mga agent log, ngunit hindi naka-sync ang iyong filesystem.",
+ "restorePrefix": "Gamitin ang",
+ "restoreSuffix": "para isulat muli ang preview content sa disk.",
+ "restoreUnavailable": "Hindi available ang buong content ng file para awtomatikong maibalik.",
+ "title": "Nawawala ang file sa disk"
+ },
+ "pathChange": {
+ "from": "Mula sa {{path}}",
+ "to": "Sa {{path}}"
+ },
+ "worktree": {
+ "isolated": "Naka-isolate na worktree"
+ }
+ },
+ "toolbar": {
+ "stats": {
+ "pending": "{{count}} nakabinbin",
+ "pending_one": "{{count}} nakabinbin",
+ "pending_other": "{{count}} nakabinbin",
+ "accepted": "{{count}} tinanggap",
+ "accepted_one": "{{count}} tinanggap",
+ "accepted_other": "{{count}} tinanggap",
+ "rejected": "{{count}} tinanggihan",
+ "rejected_one": "{{count}} tinanggihan",
+ "rejected_other": "{{count}} tinanggihan",
+ "acrossFiles": "sa {{count}} na file",
+ "acrossFiles_one": "sa {{count}} na file",
+ "acrossFiles_other": "sa {{count}} na file",
+ "edited": "{{count}} na-edit",
+ "edited_one": "{{count}} na-edit",
+ "edited_other": "{{count}} na-edit",
+ "pending_few": "{{count}} nakabinbin",
+ "pending_many": "{{count}} nakabinbin",
+ "accepted_few": "{{count}} tinanggap",
+ "accepted_many": "{{count}} tinanggap",
+ "rejected_few": "{{count}} tinanggihan",
+ "rejected_many": "{{count}} tinanggihan",
+ "acrossFiles_few": "sa {{count}} na file",
+ "acrossFiles_many": "sa {{count}} na file",
+ "edited_few": "{{count}} na-edit",
+ "edited_many": "{{count}} na-edit"
+ },
+ "actions": {
+ "auto": "Auto",
+ "undo": "I-undo",
+ "acceptAll": "Tanggapin Lahat",
+ "rejectAll": "Tanggihan Lahat",
+ "applying": "Inilalapat...",
+ "applyRejections": "Ilapat ang mga Pagtanggi"
+ },
+ "tooltips": {
+ "autoOn": "Awtomatikong markahan ang mga file bilang nakita kapag na-scroll hanggang dulo (ON)",
+ "autoOff": "Awtomatikong markahan ang mga file bilang nakita kapag na-scroll hanggang dulo (OFF)",
+ "undo": "I-undo ang huling review operation (Ctrl+Z)",
+ "acceptAll": "Tanggapin ang lahat ng pagbabago sa lahat ng file",
+ "rejectAll": "Tanggihan ang lahat ng ligtas na maaaring tanggihang pagbabago sa lahat ng file",
+ "rejectAllDisabled": "Walang nakabinbing file na may safe na orihinal na baseline para tanggihan.",
+ "applyRejections": "Ilapat ang mga tinanggihang hunk sa disk; pinapanatili ang mga tinanggap na pagbabago kung ano sila"
+ }
+ },
+ "diffError": {
+ "title": "Nabigong i-render ang diff view",
+ "unexpected": "May naganap na hindi inaasahang error habang nire-render ang diff.",
+ "actions": {
+ "retry": "Subukang muli"
+ },
+ "raw": {
+ "show": "Ipakita ang raw na diff data",
+ "file": "File: {{file}}",
+ "original": "--- Original",
+ "modified": "+++ Modified",
+ "charsTotal": "... ({{count}} chars total)",
+ "charsTotal_one": "... ({{count}} char total)",
+ "charsTotal_other": "... ({{count}} chars total)",
+ "charsTotal_few": "... ({{count}} chars total)",
+ "charsTotal_many": "... ({{count}} chars total)"
+ }
+ },
+ "fileTree": {
+ "viewed": "Nakita",
+ "badges": {
+ "new": "bago",
+ "deleted": "tinanggal"
+ },
+ "collapseFolder": "I-collapse ang {{name}}",
+ "expandFolder": "I-expand ang {{name}}",
+ "empty": {
+ "noChangedFiles": "Walang binagong file",
+ "noMatchingFiles": "Walang tumutugmang file"
+ },
+ "searchPlaceholder": "Maghanap ng mga file…",
+ "filters": {
+ "unresolved": "Hindi pa naayos",
+ "rejected": "Tinanggihan",
+ "new": "Bago",
+ "clear": "I-clear"
+ }
+ },
+ "diffControls": {
+ "previousChunk": "Nakaraang chunk",
+ "nextChunk": "Susunod na chunk",
+ "rejectChange": "Tanggihan ang pagbabago (⌘N)",
+ "acceptChange": "Tanggapin ang pagbabago (⌘Y)",
+ "undo": "I-undo",
+ "keep": "Panatilihin",
+ "rejectShortcut": "⌘N",
+ "acceptShortcut": "⌘Y"
+ },
+ "conflict": {
+ "title": "Natukoy ang Conflict",
+ "description": "Nabago ang file na ito mula nang gawin ang mga pagbabago ng agent",
+ "cancel": "Kanselahin",
+ "saveResolution": "I-save ang Resolution",
+ "editManually": "I-edit nang Manu-mano",
+ "useOriginal": "Gamitin ang Orihinal",
+ "keepCurrent": "Panatilihin ang Kasalukuyan"
+ },
+ "fullDiffLoading": {
+ "titleOne": "Inihahanda ang Buong Diff",
+ "titleMany": "Inihahanda ang {{count}} na Buong Diff",
+ "subtitleForFile": "Tinatapos ang eksaktong editor diff para sa {{file}}.",
+ "subtitleCurrentFile": "Tinatapos ang eksaktong editor diff para sa kasalukuyang file.",
+ "subtitleMany": "Nireresolba ang eksaktong before/after na baseline para sa mga file na kasalukuyang niloload.",
+ "previewsReady": "{{count}} preview na handa",
+ "previewsReady_one": "{{count}} preview na handa",
+ "editorViewLoading": "Niloload ang editor view",
+ "filesInProgress": "{{count}} file na ginagawa",
+ "filesInProgress_one": "{{count}} file na ginagawa",
+ "filesReady": "{{ready}}/{{total}} file na handa",
+ "progressDescription": "{{ready}} handa, {{loading}} niloload pa. Mananatiling nakikita ang preview diff sa ibaba habang nireresolba ang natitirang mga baseline.",
+ "singleDescription": "Mananatiling nakikita ang preview diff sa ibaba habang nireresolba ang eksaktong baseline.",
+ "previewsReady_few": "{{count}} preview na handa",
+ "previewsReady_many": "{{count}} preview na handa",
+ "previewsReady_other": "{{count}} preview na handa",
+ "filesInProgress_few": "{{count}} file na ginagawa",
+ "filesInProgress_many": "{{count}} file na ginagawa",
+ "filesInProgress_other": "{{count}} file na ginagawa"
+ },
+ "fileMissingPrefix": "Nawawala ang file sa disk. Maaaring preview lang mula sa mga agent log ang diff na ito. Gamitin ang",
+ "restore": "Ibalik",
+ "fileMissingSuffix": "para likhain ang file sa disk.",
+ "filePlaceholder": {
+ "loading": "Niloload",
+ "description": "Inihahanda ang buong editor diff para sa file na ito."
+ },
+ "loading": {
+ "diff": "DIFF",
+ "ledgerObjectsProcessed": "{{count}} ledger object ang naproseso",
+ "ledgerObjectsProcessed_one": "{{count}} ledger object ang naproseso",
+ "ledgerObjectsProcessed_other": "{{count}} ledger object ang naproseso",
+ "ledgerObjectsProcessed_few": "{{count}} ledger object ang naproseso",
+ "ledgerObjectsProcessed_many": "{{count}} ledger object ang naproseso",
+ "phases": {
+ "readingLedger": "Binabasa ang task ledger...",
+ "resolvingFiles": "Nireresolba ang mga file state...",
+ "checkingWorktree": "Sinusuri ang worktree context...",
+ "preparingDiffs": "Inihahanda ang mga review diff..."
+ }
+ },
+ "progress": {
+ "viewed": "{{viewed}}/{{total}} nakita"
+ },
+ "scope": {
+ "readMore": "Magbasa pa",
+ "tiers": {
+ "exact": {
+ "title": "Tumpak na natukoy ang task scope",
+ "detail": "Parehong nahanap ang start at completion marker sa session log. Kasama sa diff ang mga pagbabago lang na ginawa sa panahon ng partikular na task na ito - hindi kasama ang ibang task na nagbago sa parehong mga file."
+ },
+ "endEstimated": {
+ "title": "Tinatayang end boundary",
+ "detail": "Ang start marker lang ang nahanap - wala pang completion marker ang task. Ipinapakita ang mga pagbabago mula sa simula ng task hanggang sa dulo ng session. Kung may ibang task na tumakbo pagkatapos nito sa parehong session, maaaring kasama rin ang kanilang mga pagbabago."
+ },
+ "startEstimated": {
+ "title": "Tinatayang start boundary",
+ "detail": "Ang completion marker lang ang nahanap - hindi nakuha ang simula ng trabaho. Kung may ibang task na tumakbo bago ito sa parehong session, maaaring kasama rin ang kanilang mga pagbabago sa parehong mga file."
+ },
+ "allSession": {
+ "title": "Ipinapakita ang lahat ng pagbabago sa session",
+ "detail": "Walang nahanap na task marker sa session log. Hindi maihihiwalay ang task na ito - ipinapakita ang lahat ng pagbabago sa file mula sa buong session, kasama ang mga pagbabago mula sa ibang task. Maaari itong mangyari sa mga lumang bersyon ng CLI o hindi karaniwang workflow."
+ }
+ },
+ "ledger": {
+ "exact": {
+ "title": "Mga pagbabagong nakuha ng task ledger",
+ "detail": "Nakuha ng orchestrator ang mga pagbabagong ito sa file habang ginagawa ng agent ang task na ito.",
+ "badge": "Ledger exact"
+ },
+ "limited": {
+ "title": "Mga pagbabagong nakuha na may limitadong reviewability",
+ "detail": "Nakuha ng orchestrator ang mga pagbabagong ito sa file para sa task na ito, ngunit kahit isang pagbabago ang nakuha mula sa snapshot o metadata-only na pinagmulan. Suriin ang mga eksaktong text diff kung saan available; maaaring mangailangan ng manu-manong review ang binary o hindi available na content.",
+ "mixedBadge": "Mixed reviewability",
+ "needsReviewBadge": "Kailangang suriin"
+ }
+ },
+ "workInterval": {
+ "title": "Naka-scope ayon sa naka-persist na work interval",
+ "detail": "Hindi available ang task start marker sa session log, kaya naka-scope ang diff ayon sa task work interval na naka-store sa board.",
+ "badge": "Interval scoped"
+ },
+ "confidence": {
+ "high": "Mataas na kumpiyansa",
+ "medium": "Katamtamang kumpiyansa",
+ "low": "Mababang kumpiyansa",
+ "bestEffort": "Best effort"
+ }
+ },
+ "shortcuts": {
+ "title": "Mga Keyboard Shortcut",
+ "actions": {
+ "nextChange": "Susunod na pagbabago",
+ "previousChange": "Nakaraang pagbabago",
+ "nextFile": "Susunod na file",
+ "previousFile": "Nakaraang file",
+ "acceptChange": "Tanggapin ang pagbabago",
+ "rejectChange": "Tanggihan ang pagbabago",
+ "saveFile": "I-save ang file",
+ "undo": "I-undo",
+ "redo": "I-redo",
+ "toggleShortcuts": "I-toggle ang mga shortcut",
+ "closeDialog": "Isara ang dialog"
+ }
+ },
+ "timeline": {
+ "empty": "Walang edit event",
+ "titleWithCount": "Edit Timeline ({{count}})"
+ },
+ "continuousScroll": {
+ "empty": "Walang masusuring pagbabago sa file"
+ },
+ "empty": {
+ "noSafeDiff": "Walang available na safe diff",
+ "noFileChangesRecorded": "Walang naitalang pagbabago sa file",
+ "noSafeDiffDescription": "Hindi inilantad ng task ledger ang safe na file diff para sa task na ito.",
+ "noSafeDiffDiagnosticsDescription": "Hindi inilantad ng task ledger ang safe na file diff para sa task na ito. Ipinapaliwanag ng diagnostics sa ibaba kung bakit.",
+ "noFileEventsYet": "Wala pang file event ang task ledger para sa task na ito.",
+ "noFileEvents": "Walang file event ang task ledger para sa task na ito."
+ }
+ },
+ "messages": {
+ "actions": {
+ "bottomSheetActions": "Mga aksyon ng message bottom sheet",
+ "collapseAll": "I-collapse lahat ng mensahe",
+ "collapseSheet": "I-collapse ang sheet",
+ "expandAll": "I-expand lahat ng mensahe",
+ "expandSheet": "I-expand ang sheet",
+ "floatComposer": "I-float ang composer",
+ "floatMessagesComposer": "I-float ang messages composer",
+ "hideSearch": "Itago ang paghahanap",
+ "loadOlder": "Mag-load ng mga lumang mensahe",
+ "markAllRead": "Markahan lahat bilang nabasa",
+ "messageActions": "Mga aksyon sa mensahe",
+ "moveMessagesToBottomSheet": "Ilipat ang mga mensahe sa bottom sheet",
+ "moveMessagesToSidebar": "Ilipat ang mga mensahe sa sidebar",
+ "moveToBottomSheet": "Ilipat sa bottom sheet",
+ "moveToInline": "Ilipat sa inline",
+ "moveToSidebar": "Ilipat sa sidebar",
+ "panelActions": "Mga aksyon ng message panel",
+ "searchMessages": "Maghanap ng mga mensahe"
+ },
+ "delivery": {
+ "copied": "Nakopya",
+ "copyDebugDetails": "Kopyahin ang mga debug detail",
+ "details": "Mga detalye",
+ "fields": {
+ "acceptanceUnknown": "acceptanceUnknown",
+ "delivered": "delivered",
+ "diagnostics": "diagnostics",
+ "ledgerStatus": "ledgerStatus",
+ "messageId": "messageId",
+ "providerId": "providerId",
+ "queuedBehindMessageId": "queuedBehindMessageId",
+ "reason": "reason",
+ "responsePending": "responsePending",
+ "responseState": "responseState",
+ "statusMessageId": "statusMessageId",
+ "userVisibleMessage": "userVisibleMessage",
+ "userVisibleNextReviewAt": "userVisibleNextReviewAt",
+ "userVisibleReasonCode": "userVisibleReasonCode",
+ "userVisibleState": "userVisibleState",
+ "visibleReplyCorrelation": "visibleReplyCorrelation",
+ "visibleReplyMessageId": "visibleReplyMessageId"
+ }
+ },
+ "panelMode": "Mode ng message panel",
+ "title": "Mga Mensahe",
+ "unread": {
+ "new": "{{count}} bago",
+ "unread": "{{count}} hindi nabasa",
+ "new_few": "{{count}} bago",
+ "new_many": "{{count}} bago",
+ "new_one": "{{count}} bago",
+ "new_other": "{{count}} bago",
+ "unread_few": "{{count}} hindi nabasa",
+ "unread_many": "{{count}} hindi nabasa",
+ "unread_one": "{{count}} hindi nabasa",
+ "unread_other": "{{count}} hindi nabasa"
+ },
+ "filter": {
+ "ariaLabel": "I-filter ang mga mensahe",
+ "tooltip": "I-filter ang mga mensahe",
+ "from": "Mula kay",
+ "to": "Kay",
+ "noData": "Walang data",
+ "showStatusUpdates": "Ipakita ang mga status update (idle/shutdown)",
+ "actions": {
+ "reset": "I-reset",
+ "save": "I-save"
+ }
+ },
+ "status": {
+ "title": "Status"
+ },
+ "actionMode": {
+ "label": "Action mode"
+ },
+ "search": {
+ "placeholder": "Maghanap..."
+ }
+ },
+ "modelSelector": {
+ "badges": {
+ "configured": "Naka-configure",
+ "connected": "Konektado",
+ "failed": "Nabigo",
+ "free": "Libre",
+ "local": "Lokal",
+ "needsTest": "Kailangan ng test",
+ "verified": "Na-verify",
+ "unavailable": "Hindi available",
+ "issue": "Isyu"
+ },
+ "customModelId": "Custom model id",
+ "label": "Model (opsyonal)",
+ "multimodelRequired": "Nangangailangan ang Codex at Gemini ng Multimodel mode.",
+ "openCode": {
+ "allSources": "Lahat ng OpenCode source",
+ "filterSource": "I-filter ang {{source}}",
+ "filterSources": "I-filter ang mga OpenCode source",
+ "freeOnly": "Libre lang",
+ "freeTooltip": "Minarkahan ng OpenCode ang model na ito bilang libre.",
+ "loadingModels": "Niloload ang mga OpenCode model...",
+ "noSourcesFound": "Walang nahanap na source.",
+ "recommendedOnly": "Inirerekomenda lang",
+ "searchSources": "Maghanap ng mga source",
+ "sourcesCount": "{{count}} OpenCode source",
+ "sourcesCount_few": "{{count}} OpenCode source",
+ "sourcesCount_many": "{{count}} OpenCode source",
+ "sourcesCount_one": "{{count}} OpenCode source",
+ "sourcesCount_other": "{{count}} OpenCode source"
+ },
+ "reason": "Dahilan: {{reason}}",
+ "runtimeModelsSyncing": "Niloload ang mga explicit na model mula sa kasalukuyang runtime. Mananatiling available ang Default habang sini-sync ang listahan.",
+ "fastMode": {
+ "codexLabel": "Fast mode (2x credit)",
+ "optionalLabel": "Fast mode (opsyonal)",
+ "defaultOff": "Default (Off)",
+ "fast": "Fast",
+ "off": "Off",
+ "defaultFast": "Default (Fast)",
+ "defaultResolvesTo": "Kasalukuyang nireresolba ang Default sa {{mode}}.",
+ "runtimeBackedHint": "Ang Fast mode ay runtime-backed at nag-a-unlock lang kapag sinusuportahan ito ng na-resolve na Anthropic launch model."
+ },
+ "anthropicExtraUsage": {
+ "pricingDocs": "Basahin ang Anthropic pricing docs"
+ },
+ "searchModels": "Maghanap ng mga model",
+ "defaultModel": "Default",
+ "empty": {
+ "noSearchMatches": "Walang model na tumutugma sa paghahanap na ito.",
+ "recommendedFreeOpenCode": "Walang inirerekomendang libreng OpenCode model na available sa kasalukuyang runtime list.",
+ "freeOpenCode": "Walang libreng OpenCode model na available sa kasalukuyang runtime list.",
+ "recommendedOpenCode": "Walang inirerekomendang OpenCode model na available sa kasalukuyang runtime list.",
+ "noModels": "Walang model na available sa kasalukuyang runtime list."
+ },
+ "openCodeStatus": {
+ "notReadyTitle": "Hindi handa ang OpenCode para sa team launch",
+ "freeModelsAvailableTitle": "May available na mga libreng OpenCode model",
+ "providerNotConnectedTitle": "Hindi konektado ang OpenCode provider",
+ "readyTitle": "Handa na ang OpenCode",
+ "readyMessage": "Pumasa ang OpenCode sa provider readiness. Piliin ito para gumamit ng mga OpenCode model para sa team na ito.",
+ "useOpenCode": "Gamitin ang OpenCode",
+ "badges": {
+ "check": "Suriin",
+ "install": "I-install",
+ "free": "Libre",
+ "setup": "Setup"
+ },
+ "summary": {
+ "checking": "OpenCode status: sinusuri ang runtime",
+ "status": "OpenCode status: {{parts}}"
+ },
+ "summaryParts": {
+ "teamLaunchBlocked": "naka-block ang team launch",
+ "providerOptional": "opsyonal ang provider connection",
+ "providerModelsNeedSetup": "kailangan ng setup ang provider-backed na mga model",
+ "teamLaunchReady": "handa na ang team launch",
+ "runtimeDetected": "natukoy ang runtime",
+ "runtimeMissing": "nawawala ang runtime",
+ "freeWithoutAuth": "available ang mga libreng model nang walang auth",
+ "providerConnected": "konektado ang provider",
+ "providerNotConnected": "hindi konektado ang provider"
+ },
+ "messages": {
+ "checking": "Sinusuri pa ng app ang OpenCode runtime. Maghintay na matapos ang provider status, pagkatapos ay subukang muli.",
+ "unsupported": "Hindi naka-install, hindi nahanap, o hindi sinusuportahan ang natukoy na runtime ng OpenCode. I-install o i-update ang OpenCode, pagkatapos ay i-refresh ang provider status. Maaari mo ring gamitin ang Install button sa home page.",
+ "freeAvailable": "Natukoy ang OpenCode. Maaari kang gumamit ng mga libreng OpenCode model tulad ng Big Pickle nang walang kinokonektang provider. Kumonekta ng provider lang kapag gusto mo ng provider-backed na mga model.",
+ "noFreeListed": "Natukoy ang OpenCode, ngunit wala pang libreng OpenCode model na nakalista. I-refresh ang provider status, o kumonekta ng provider sa OpenCode para sa provider-backed na mga model.",
+ "launchBlocked": "Naka-install at authenticated ang OpenCode, ngunit naka-block ang Agent Teams launch readiness.",
+ "ready": "Handa na ang OpenCode para sa team launch."
+ },
+ "loadingRuntime": "Niloload pa ang OpenCode runtime status."
+ },
+ "advisory": {
+ "pingNotConfirmed": "Hindi nakumpirma ang ping",
+ "note": "Note"
+ },
+ "placeholders": {
+ "customModelId": "openai/gpt-oss-20b"
+ },
+ "routeGroups": {
+ "openCodeConfig": "OpenCode config",
+ "builtinFree": "Libreng built-in",
+ "connectedProviders": "Mga konektadong provider",
+ "otherCatalog": "Iba pang OpenCode catalog"
+ },
+ "pricing": {
+ "free": "Libre",
+ "inputShort": "in {{rate}}",
+ "outputShort": "out {{rate}}",
+ "perMillionSummary": "{{summary}} / 1M",
+ "inputTitle": "Input: {{rate}} bawat 1M token",
+ "outputTitle": "Output: {{rate}} bawat 1M token",
+ "cacheReadTitle": "Cache read: {{rate}} bawat 1M token",
+ "cacheWriteTitle": "Cache write: {{rate}} bawat 1M token"
+ },
+ "defaultTooltip": {
+ "anthropicCompatibleWithResolved": "Ginagamit ang default model ng Anthropic-compatible na endpoint.\nKasalukuyang nireresolba sa {{model}}.",
+ "anthropicCompatible": "Ginagamit ang default model ng Anthropic-compatible na endpoint.",
+ "anthropic": "Ginagamit ang default model ng Claude team.\nNireresolba sa {{longContextModel}} na may 1M context, o {{limitedContextModel}} na may 200K context kapag naka-enable ang Limit context.",
+ "openCodeWithResolved": "Ginagamit ang OpenCode default model.\nKasalukuyang nireresolba sa {{model}}.",
+ "openCode": "Ginagamit ang default model ng OpenCode runtime.",
+ "runtime": "Ginagamit ang runtime default para sa napiling provider."
+ },
+ "multimodelOff": "Naka-off ang Multimodel",
+ "unavailableInRuntime": "Hindi available sa kasalukuyang runtime"
+ },
+ "taskDetail": {
+ "actions": {
+ "cancel": "Kanselahin",
+ "delete": "Tanggalin",
+ "markResolved": "Markahan bilang naayos",
+ "save": "I-save"
+ },
+ "attachments": {
+ "commentAttachment": "Attachment ng komento",
+ "fromComments": "Mula sa mga komento",
+ "preview": "I-preview ang {{filename}}"
+ },
+ "changes": {
+ "badges": {
+ "attention": "atensyon",
+ "noSafeDiff": "walang safe diff"
+ },
+ "empty": {
+ "noFileChangesRecorded": "Walang naitalang pagbabago sa file",
+ "noFileChangesRecordedYet": "Wala pang naitalang pagbabago sa file",
+ "noReviewableChangesRecovered": "Walang nareco na masusuring pagbabago sa file",
+ "noSafeDiffAvailable": "Walang available na safe diff"
+ },
+ "loadFailed": "Nabigong i-load ang buod ng mga pagbabago sa task",
+ "loading": "Niloload ang mga pagbabago...",
+ "fileCount": "{{count}} file",
+ "fileRowsHidden": "{{count}} file row na nakatago",
+ "moreDiagnostics": "{{count}} pang diagnostics",
+ "moreFiles": "{{count}} pang file",
+ "openInEditor": "Buksan sa editor",
+ "openTask": "Buksan ang task na {{subject}}",
+ "refresh": "I-refresh ang mga pagbabago",
+ "refreshFailed": "Nabigo ang pag-refresh: {{error}}",
+ "refreshing": "Nire-refresh",
+ "refreshingChanges": "Nire-refresh ang mga pagbabago...",
+ "refreshTeamChanges": "I-refresh ang mga pagbabago ng team",
+ "refreshShort": "I-refresh",
+ "reviewDiff": "Suriin ang diff",
+ "reviewTaskDiff": "Suriin ang task diff",
+ "scannedCandidateTasks": "Na-scan ang {{requested}} ng {{eligible}} na kandidatong task",
+ "tasksDeferred": "{{count}} task ang ipinagpaliban sa pass na ito",
+ "title": "Mga Pagbabago",
+ "fileCount_few": "{{count}} file",
+ "fileCount_many": "{{count}} file",
+ "fileCount_one": "{{count}} file",
+ "fileCount_other": "{{count}} file",
+ "fileRowsHidden_few": "{{count}} file row na nakatago",
+ "fileRowsHidden_many": "{{count}} file row na nakatago",
+ "fileRowsHidden_one": "{{count}} file row na nakatago",
+ "fileRowsHidden_other": "{{count}} file row na nakatago",
+ "moreDiagnostics_few": "{{count}} pang diagnostics",
+ "moreDiagnostics_many": "{{count}} pang diagnostics",
+ "moreDiagnostics_one": "{{count}} pang diagnostics",
+ "moreDiagnostics_other": "{{count}} pang diagnostics",
+ "moreFiles_few": "{{count}} pang file",
+ "moreFiles_many": "{{count}} pang file",
+ "moreFiles_one": "{{count}} pang file",
+ "moreFiles_other": "{{count}} pang file",
+ "tasksDeferred_few": "{{count}} task ang ipinagpaliban sa pass na ito",
+ "tasksDeferred_many": "{{count}} task ang ipinagpaliban sa pass na ito",
+ "tasksDeferred_one": "{{count}} task ang ipinagpaliban sa pass na ito",
+ "tasksDeferred_other": "{{count}} task ang ipinagpaliban sa pass na ito"
+ },
+ "clarification": {
+ "awaitingLead": "Naghihintay ng paglilinaw mula sa team lead",
+ "awaitingUser": "Naghihintay ng paglilinaw mula sa iyo"
+ },
+ "description": {
+ "add": "I-click para magdagdag ng paglalarawan...",
+ "edit": "I-edit ang paglalarawan",
+ "placeholder": "Paglalarawan ng task (sinusuportahan ang markdown)"
+ },
+ "loading": {
+ "fetchingTeamData": "Kinukuha ang data ng team",
+ "title": "Niloload ang task..."
+ },
+ "logs": {
+ "newArriving": "May dumarating na bagong task log"
+ },
+ "notFound": "Hindi nahanap ang task",
+ "related": {
+ "blockedBy": "Hinaharangan ng",
+ "blocks": "Hinaharangan",
+ "linkedFrom": "Naka-link mula sa",
+ "links": "Mga link",
+ "title": "Mga kaugnay na task"
+ },
+ "review": {
+ "reviewer": "Reviewer: {{reviewer}}"
+ },
+ "sections": {
+ "attachments": "Mga Attachment",
+ "changes": "Mga Pagbabago",
+ "comments": "Mga Komento",
+ "description": "Paglalarawan",
+ "taskLogs": "Mga Task Log",
+ "workflowHistory": "Kasaysayan ng Workflow"
+ },
+ "unassigned": "Hindi nakatalaga",
+ "workflow": {
+ "implementationTimeTitle": "Oras ng implementasyon mula sa mga naka-persist na work interval",
+ "inProgressTime": "Oras na ginagawa {{duration}}"
+ },
+ "comments": {
+ "renderLimit": "Ipinapakita ang pinakabagong {{formattedCount}} na komento para manatiling responsive ang UI.",
+ "badges": {
+ "approved": "Inaprubahan",
+ "reviewRequested": "Hiniling ang review"
+ },
+ "unknownTime": "hindi alam na oras",
+ "actions": {
+ "reply": "Sumagot",
+ "replyToComment": "Sumagot sa komento",
+ "showMore": "Magpakita pa ng mga komento ({{visible}}/{{total}})",
+ "cancelReply": "Kanselahin ang sagot",
+ "comment": "Magkomento"
+ },
+ "attachments": {
+ "previewAlt": "Preview ng attachment",
+ "downloadFailed": "Nabigo ang download"
+ },
+ "replyingTo": "Sumasagot kay",
+ "input": {
+ "placeholder": "Magdagdag ng komento... (Enter para ipadala)",
+ "charsLeft": "{{count}} char na natitira",
+ "charsLeft_one": "{{count}} char na natitira",
+ "charsLeft_other": "{{count}} char na natitira",
+ "charsLeft_few": "{{count}} char na natitira",
+ "charsLeft_many": "{{count}} char na natitira"
+ }
+ },
+ "workflowTimeline": {
+ "empty": "Walang naitalang kasaysayan ng workflow",
+ "currentImplementationInterval": "Kasalukuyang implementation interval",
+ "implementationIntervalEnded": "Natapos ang implementation interval sa transition na ito",
+ "runningPrefix": "tumatakbo ",
+ "createdAs": "Nilikha bilang",
+ "by": "ni",
+ "reassigned": "Inilipat",
+ "assignedTo": "Itinalaga kay",
+ "unassignedFrom": "Inalis kay",
+ "ownerChanged": "Nabago ang may-ari",
+ "reviewRequested": "Hiniling ang review",
+ "reviewStarted": "Nagsimula ang review",
+ "changesRequested": "Hiniling ang mga pagbabago",
+ "approved": "Inaprubahan",
+ "unknownEvent": "Hindi kilalang event"
+ },
+ "reviewStates": {
+ "approved": "Inaprubahan",
+ "needsFix": "Kailangang ayusin",
+ "inReview": "Sinusuri"
+ }
+ },
+ "tasks": {
+ "createTask": {
+ "assignee": "Assignee",
+ "assigneeOptional": "Assignee (opsyonal)",
+ "blockedByOptional": "Mga task na humaharang (opsyonal)",
+ "blockedBySummary": "Haharangin ang task ng: {{tasks}}",
+ "cancel": "Kanselahin",
+ "create": "Lumikha",
+ "creating": "Lumilikha...",
+ "description": "Lilikhain ang task sa tasks/ directory ng team at lalabas sa Kanban board.",
+ "descriptionOptional": "Paglalarawan (opsyonal)",
+ "detailsPlaceholder": "Mga detalye ng task (sinusuportahan ang markdown)",
+ "hideOptionalFields": "Itago ang mga opsyonal na field",
+ "offlineNotice": {
+ "after": "- ilunsad ang team para simulan ang execution.",
+ "before": "Offline ang team. Idadagdag ang task sa"
+ },
+ "promptOptional": "Prompt para sa assignee (opsyonal)",
+ "promptPlaceholder": "Custom na mga tagubilin para sa miyembro ng team...",
+ "relatedOptional": "Mga kaugnay na task (opsyonal)",
+ "relatedSummary": "Kaugnay: {{tasks}}",
+ "saved": "Na-save",
+ "searchTasks": "Maghanap ng mga task...",
+ "selectMember": "Pumili ng miyembro",
+ "selectMemberOptional": "Pumili ng miyembro...",
+ "showOptionalFields": "Ipakita ang mga opsyonal na field",
+ "startImmediately": "Simulan agad",
+ "startOfflineHint": "Offline ang team. Ilunsad muna ang team para simulan agad ang mga task.",
+ "subject": "Paksa",
+ "subjectPlaceholder": "Ano ang kailangang gawin?",
+ "title": "Lumikha ng Task",
+ "todo": "TODO"
+ },
+ "list": {
+ "columns": {
+ "blockedBy": "Hinaharangan Ng",
+ "blocks": "Hinaharangan",
+ "id": "ID",
+ "owner": "May-ari",
+ "status": "Status",
+ "subject": "Paksa"
+ },
+ "empty": "Walang task sa team na ito",
+ "filters": {
+ "allOwners": "Lahat ng may-ari",
+ "allStatuses": "Lahat ng status",
+ "ownerAria": "I-filter ang mga task ayon sa may-ari",
+ "statusAria": "I-filter ang mga task ayon sa status"
+ },
+ "showing": "Ipinapakita ang {{shown}} ng {{total}}"
+ },
+ "status": {
+ "completed": "completed",
+ "deleted": "deleted",
+ "inProgress": "in_progress",
+ "pending": "pending"
+ },
+ "statusSummary": {
+ "progressAria": "Mga task {{completed}}/{{total}} na natapos",
+ "inProgress": "{{count}} in_progress",
+ "inProgress_one": "{{count}} in_progress",
+ "inProgress_other": "{{count}} in_progress",
+ "inProgress_few": "{{count}} in_progress",
+ "inProgress_many": "{{count}} in_progress",
+ "pending": "{{count}} pending",
+ "pending_one": "{{count}} pending",
+ "pending_other": "{{count}} pending",
+ "pending_few": "{{count}} pending",
+ "pending_many": "{{count}} pending",
+ "completed": "{{count}} completed",
+ "completed_one": "{{count}} completed",
+ "completed_other": "{{count}} completed",
+ "completed_few": "{{count}} completed",
+ "completed_many": "{{count}} completed"
+ },
+ "unassigned": "Hindi nakatalaga",
+ "teamPrefix": "Team:",
+ "openTask": "Buksan ang task",
+ "deleteConfirm": {
+ "title": "Tanggalin ang task",
+ "message": "Ilipat ang task #{{taskId}} sa trash?",
+ "confirmLabel": "Tanggalin",
+ "cancelLabel": "Kanselahin"
+ }
+ },
+ "editor": {
+ "actions": {
+ "cancel": "Kanselahin",
+ "closeEditor": "Isara ang editor",
+ "closeTab": "Isara ang tab",
+ "closeTooltip": "Isara ang editor (Esc)",
+ "discard": "Itapon",
+ "discardAndClose": "Itapon at Isara",
+ "keep": "Panatilihin",
+ "keepMine": "Panatilihin ang akin",
+ "keyboardShortcuts": "Mga keyboard shortcut",
+ "overwrite": "I-overwrite",
+ "refreshAria": "I-refresh (F5)",
+ "refreshTooltip": "I-refresh ang git status (F5)",
+ "reload": "I-reload",
+ "retry": "Subukang muli",
+ "save": "I-save",
+ "saveAllAndClose": "I-save Lahat at Isara"
+ },
+ "ariaLabel": "Project Editor",
+ "dialogs": {
+ "conflictDescription": "Nabago ang file nang panlabas mula nang buksan mo ito. I-overwrite gamit ang iyong mga pagbabago?",
+ "conflictTitle": "Save Conflict",
+ "unsavedDescription": "May mga hindi na-save na pagbabago ka. Ano ang gusto mong gawin?",
+ "unsavedFileDescription": "May mga hindi na-save na pagbabago ang file na ito. Ano ang gusto mong gawin?",
+ "unsavedTitle": "Mga Hindi Na-save na Pagbabago"
+ },
+ "newFile": {
+ "validation": {
+ "nameRequired": "Hindi maaaring blangko ang pangalan",
+ "invalidName": "Invalid na pangalan",
+ "invalidCharacters": "Naglalaman ng invalid na character ang pangalan",
+ "nameTooLong": "Masyadong mahaba ang pangalan"
+ },
+ "placeholders": {
+ "fileName": "Pangalan ng file...",
+ "folderName": "Pangalan ng folder..."
+ },
+ "aria": {
+ "newFileName": "Pangalan ng bagong file",
+ "newFolderName": "Pangalan ng bagong folder"
+ }
+ },
+ "draftRecovered": "Narecover ang mga hindi na-save na pagbabago mula sa nakaraang session.",
+ "externalChange": {
+ "changed": "Nabago ang file sa disk.",
+ "deleted": "Wala na ang file sa disk."
+ },
+ "saveFailed": "Nabigo ang pag-save: {{error}}",
+ "sidebar": {
+ "explorer": "Explorer",
+ "hide": "Itago ang sidebar",
+ "hideWithShortcut": "Itago ang sidebar ({{shortcut}})",
+ "show": "Ipakita ang sidebar",
+ "showWithShortcut": "Ipakita ang sidebar ({{shortcut}})"
+ },
+ "searchInFiles": {
+ "title": "Maghanap sa Mga File",
+ "closeSearch": "Isara ang paghahanap",
+ "closeSearchShortcut": "Isara ang paghahanap (Esc)",
+ "searchPlaceholder": "Maghanap...",
+ "matchCase": "Match Case",
+ "matchCaseToggle": "Aa",
+ "noResults": "Walang nahanap na resulta",
+ "resultsSummary": "{{count}} tumugma sa {{fileCount}} na file",
+ "resultsSummary_one": "{{count}} tumugma sa {{fileCount}} na file",
+ "truncated": "(pinaikli)",
+ "resultsSummary_few": "{{count}} tumugma sa {{fileCount}} na file",
+ "resultsSummary_many": "{{count}} tumugma sa {{fileCount}} na file",
+ "resultsSummary_other": "{{count}} tumugma sa {{fileCount}} na file"
+ },
+ "fileTree": {
+ "failedToLoadFiles": "Nabigong i-load ang mga file: {{error}}",
+ "loading": "Niloload ang mga file...",
+ "empty": "Walang nahanap na file",
+ "dropForProjectRoot": "I-drop dito para sa project root",
+ "moveToTrash": "Ilipat sa Trash",
+ "moveToTrashConfirm": "Ilipat ang \"{{name}}\" sa Trash?",
+ "cancel": "Kanselahin"
+ },
+ "goToLine": {
+ "title": "Pumunta sa Linya",
+ "position": "(kasalukuyan: {{current}}, kabuuan: {{total}})",
+ "placeholder": "Numero ng linya, +offset, -offset, o %",
+ "go": "Pumunta"
+ },
+ "searchPanel": {
+ "previousMatch": "Nakaraang Tumugma",
+ "nextMatch": "Susunod na Tumugma",
+ "close": "Isara",
+ "replacePlaceholder": "Palitan",
+ "replace": "Palitan",
+ "replaceNext": "Palitan ang Susunod",
+ "all": "Lahat",
+ "replaceAll": "Palitan Lahat"
+ },
+ "statusBar": {
+ "position": "Ln {{line}}, Col {{col}}",
+ "enableWatcher": "Paganahin ang file watcher",
+ "disableWatcher": "I-disable ang file watcher",
+ "watch": "watch",
+ "watching": "watching",
+ "watchExternalChanges": "Bantayan ang mga panlabas na pagbabago",
+ "disableExternalWatcher": "I-disable ang external change watcher",
+ "encodingUtf8": "UTF-8",
+ "spaces": "Spaces: {{count}}"
+ },
+ "imagePreview": {
+ "loading": "Niloload ang preview...",
+ "openFullSize": "Buksan ang full-size na preview",
+ "openSystemViewer": "Buksan sa System Viewer"
+ },
+ "quickOpen": {
+ "title": "Quick Open",
+ "searchPlaceholder": "Maghanap ng mga file ayon sa pangalan...",
+ "loading": "Niloload ang mga file...",
+ "empty": "Walang nahanap na file"
+ },
+ "errorBoundary": {
+ "crashed": "Nag-crash ang editor",
+ "unknownError": "Hindi kilalang error"
+ },
+ "binaryPlaceholder": {
+ "file": "Binary file ({{size}})"
+ },
+ "unsavedChanges": "Mga hindi na-save na pagbabago",
+ "empty": {
+ "selectFile": "Pumili ng file mula sa tree para i-edit"
+ },
+ "search": {
+ "toggleReplace": "I-toggle ang Replace",
+ "placeholder": "Maghanap"
+ },
+ "shortcuts": {
+ "title": "Mga Keyboard Shortcut",
+ "groups": {
+ "fileOperations": "Mga File Operation",
+ "search": "Paghahanap",
+ "navigation": "Navigation",
+ "editing": "Pag-edit",
+ "markdown": "Markdown",
+ "general": "Pangkalahatan"
+ },
+ "actions": {
+ "quickOpen": "Quick Open",
+ "save": "I-save",
+ "saveAll": "I-save Lahat",
+ "closeTab": "Isara ang Tab",
+ "findInFile": "Maghanap sa File",
+ "searchInFiles": "Maghanap sa Mga File",
+ "goToLine": "Pumunta sa Linya",
+ "nextTab": "Susunod na Tab",
+ "previousTab": "Nakaraang Tab",
+ "cycleTabs": "I-cycle ang mga Tab",
+ "toggleSidebar": "I-toggle ang Sidebar",
+ "undo": "I-undo",
+ "redo": "I-redo",
+ "selectNextMatch": "Piliin ang Susunod na Tumugma",
+ "toggleComment": "I-toggle ang Komento",
+ "splitPreview": "Split Preview",
+ "fullPreview": "Full Preview",
+ "closeEditor": "Isara ang Editor"
+ }
+ },
+ "toolbar": {
+ "enableWordWrap": "Paganahin ang word wrap",
+ "disableWordWrap": "I-disable ang word wrap",
+ "closeSplitPreview": "Isara ang split preview",
+ "closePreview": "Isara ang preview"
+ }
+ },
+ "launch": {
+ "actions": {
+ "createSchedule": "Lumikha ng Schedule",
+ "creating": "Lumilikha...",
+ "goToDashboard": "Pumunta sa Dashboard",
+ "launchTeam": "Ilunsad ang team",
+ "launching": "Inilulunsad...",
+ "relaunchTeam": "Ilunsad muli ang team",
+ "relaunching": "Inilulunsad muli...",
+ "saveChanges": "I-save ang mga Pagbabago",
+ "saving": "Sine-save..."
+ },
+ "billing": {
+ "prefix": "Simula Hunyo 15, 2026, sinisingil ng Anthropic ang",
+ "readArticle": "Basahin ang artikulo ng Anthropic",
+ "suffix": "at ang paggamit ng Agent SDK mula sa buwanang Agent SDK credit, hiwalay sa mga interactive na limitasyon ng Claude Code. Nagre-reset ang credit bawat billing cycle at hindi nire-roll over ang hindi nagamit na credit."
+ },
+ "conflict": {
+ "description": "Mapanganib ang pagpapatakbo ng dalawang team sa parehong directory - maaaring magkasalungat sila sa pag-edit ng parehong mga file. Isaalang-alang ang paggamit ng ibang directory o git worktree para sa isolation.",
+ "title": "May isa pang team na \"{{team}}\" na tumatakbo na para sa working directory na ito",
+ "workingDirectory": "Working directory:"
+ },
+ "description": {
+ "createSchedule": "Mag-schedule ng awtomatikong execution ng Claude task",
+ "createScheduleForTeam": "Mag-schedule ng awtomatikong pagtakbo para sa team na \"{{team}}\"",
+ "editSchedule": "Ine-edit ang schedule para sa team na \"{{team}}\"",
+ "launchPrefix": "Simulan ang team",
+ "launchSuffix": "sa pamamagitan ng lokal na Claude CLI.",
+ "relaunchPrefix": "Ihinto ang kasalukuyang pagtakbo para sa",
+ "relaunchSuffix": "at simulan itong muli sa pamamagitan ng lokal na Claude CLI."
+ },
+ "prepare": {
+ "action": {
+ "launch": "ilunsad",
+ "relaunch": "ilunsad muli"
+ },
+ "blocked": "Hindi available ang runtime environment - naka-block ang {{action}}",
+ "checkingProviders": "Sinusuri ang mga napiling provider...",
+ "failed": "Nabigong ihanda ang mga napiling provider",
+ "preflight": "Pre-flight check para mahuli ang mga error bago mag-{{action}}",
+ "preparingEnvironment": "Inihahanda ang environment...",
+ "ready": "Handa na ang lahat ng napiling provider.",
+ "readyWithNotes": "Handa na ang lahat ng napiling provider, may mga nota.",
+ "unsupportedPreload": "Hindi sinusuportahan ng kasalukuyang preload version ang team:prepareProvisioning. I-restart ang dev app.",
+ "selectWorkingDirectory": "Pumili ng working directory para i-validate ang launch environment.",
+ "someProvidersNeedAttention": "May ilang napiling provider na nangangailangan ng atensyon."
+ },
+ "prompt": {
+ "label": "Prompt",
+ "oneShotPrefix": "Ipapasa ang prompt na ito sa",
+ "oneShotSuffix": "para sa one-shot na execution",
+ "saved": "Na-save",
+ "schedulePlaceholder": "Mga tagubilin para sa Claude na isasagawa ayon sa schedule...",
+ "teamLeadOptional": "Prompt para sa team lead (opsyonal)",
+ "teamLeadPlaceholder": "Mga tagubilin para sa team lead..."
+ },
+ "providerChanged": "Nabago ang provider mula {{from}} sa {{to}}. Hindi ituloy ang nakaraang lead session, at magsisimula ang lead na may sariwang context para tama ang pagkakalapat ng bagong runtime.",
+ "relaunchFreshSession": "Ang relaunch ng team ay nagsisimula ng sariwang lead session. Ang matibay na team state, task board, at member configuration ay muling nire-rehydrate sa launch prompt.",
+ "relaunchWarning": {
+ "description": "Ang pag-save ng mga setting na ito ay maghihinto sa kasalukuyang team process, magpe-persist ng na-update na roster, at maglulunsad muli ng team gamit ang bagong runtime.",
+ "title": "Magre-restart ang relaunch sa kasalukuyang pagtakbo ng team"
+ },
+ "schedule": {
+ "labelOptional": "Label (opsyonal)",
+ "labelPlaceholder": "hal., Araw-araw na code review, Gabing test...",
+ "maxBudgetUsd": "Max na badyet (USD)",
+ "maxTurns": "Max na turn",
+ "noLimit": "Walang limitasyon",
+ "noMatches": "Walang team na tumutugma sa iyong paghahanap.",
+ "noTeams": "Walang available na team. Lumikha muna ng team.",
+ "searchTeams": "Maghanap ng mga team...",
+ "selectTeam": "Pumili ng team...",
+ "team": "Team",
+ "title": "Schedule"
+ },
+ "title": {
+ "createSchedule": "Lumikha ng Schedule",
+ "editSchedule": "I-edit ang Schedule",
+ "launch": "Ilunsad ang Team",
+ "relaunch": "Ilunsad Muli ang Team"
+ },
+ "errors": {
+ "loadProjectsFailed": "Nabigong i-load ang mga proyekto",
+ "saveScheduleFailed": "Nabigong i-save ang schedule",
+ "relaunchFailed": "Nabigong ilunsad muli ang team",
+ "launchFailed": "Nabigong ilunsad ang team"
+ },
+ "validation": {
+ "openCodeLeadModelRequired": "Nangangailangan ang OpenCode lead ng napiling model.",
+ "openCodeTeammateRequired": "Nangangailangan ang OpenCode lead ng kahit isang OpenCode teammate.",
+ "selectWorkingDirectory": "Pumili ng working directory (cwd)",
+ "fixMemberNames": "Ayusin ang mga pangalan ng miyembro bago ilunsad",
+ "memberNamesUnique": "Ang mga pangalan ng miyembro ay dapat natatangi bago ilunsad"
+ },
+ "optionalSettings": {
+ "relaunchTitle": "Mga relaunch setting",
+ "title": "Mga opsyonal na launch setting",
+ "relaunchDescription": "Suriin ang roster at lead runtime bago i-restart ang team.",
+ "description": "Panatilihing nakatuon ang launch flow sa project path at i-expand lang ito kapag gusto mo ng karagdagang kontrol."
+ }
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Kopyahin ang team",
+ "createTeam": "Lumikha ng Team",
+ "deleteForever": "Tanggalin nang permanente",
+ "deletePermanently": "Tanggalin nang permanente",
+ "deleteTeam": "Tanggalin ang team",
+ "launching": "Inilulunsad...",
+ "launchTeam": "Ilunsad ang team",
+ "relaunchTeam": "Ilunsad muli ang team",
+ "restore": "Ibalik",
+ "restoreTeam": "Ibalik ang team",
+ "retry": "Subukang muli",
+ "stopTeam": "Ihinto ang team",
+ "stopping": "Inihihinto..."
+ },
+ "electronOnly": {
+ "description": "Sa browser mode, hindi available ang access sa mga lokal na `~/.claude/teams` directory.",
+ "title": "Available lang ang Teams sa Electron mode"
+ },
+ "empty": {
+ "description": "Lumikha ng team dito para makapagsimula. Awtomatiko itong lalabas sa listahan.",
+ "localOnly": "Available lang ang paglikha ng team sa lokal na Electron mode.",
+ "title": "Walang nahanap na team"
+ },
+ "filter": {
+ "clearAll": "I-clear lahat",
+ "label": "I-filter ang mga team",
+ "projectPriority": "Project priority",
+ "status": "Status"
+ },
+ "loadFailed": "Nabigong i-load ang mga team",
+ "loading": "Niloload ang mga team...",
+ "localOnly": "Available lang sa lokal na Electron mode.",
+ "membersCount": "Mga miyembro: {{count}}",
+ "membersCount_few": "Mga miyembro: {{count}}",
+ "membersCount_many": "Mga miyembro: {{count}}",
+ "membersCount_one": "Miyembro: {{count}}",
+ "membersCount_other": "Mga miyembro: {{count}}",
+ "noDescription": "Walang paglalarawan",
+ "noMatches": "Walang team na tumutugma sa kasalukuyang mga filter",
+ "partial": {
+ "pending": "Nire-reconcile pa ang huling paglunsad.",
+ "skipped": "May nilaktawang teammate ang huling paglunsad.",
+ "skippedWithCount": "Nilaktawan ng huling paglunsad ang {{count}}/{{expected}} na teammate.",
+ "skippedWithCount_few": "Nilaktawan ng huling paglunsad ang {{count}}/{{expected}} na teammate.",
+ "skippedWithCount_many": "Nilaktawan ng huling paglunsad ang {{count}}/{{expected}} na teammate.",
+ "skippedWithCount_one": "Nilaktawan ng huling paglunsad ang {{count}}/{{expected}} na teammate.",
+ "skippedWithCount_other": "Nilaktawan ng huling paglunsad ang {{count}}/{{expected}} na teammate.",
+ "stopped": "Huminto ang huling paglunsad bago sumali ang lahat ng teammate.",
+ "stoppedWithCount": "Huminto ang huling paglunsad bago sumali ang {{count}}/{{expected}} na teammate.",
+ "stoppedWithCount_few": "Huminto ang huling paglunsad bago sumali ang {{count}}/{{expected}} na teammate.",
+ "stoppedWithCount_many": "Huminto ang huling paglunsad bago sumali ang {{count}}/{{expected}} na teammate.",
+ "stoppedWithCount_one": "Huminto ang huling paglunsad bago sumali ang {{count}}/{{expected}} na teammate.",
+ "stoppedWithCount_other": "Huminto ang huling paglunsad bago sumali ang {{count}}/{{expected}} na teammate."
+ },
+ "searchPlaceholder": "Maghanap ng mga team...",
+ "sections": {
+ "otherTeams": "Iba pang team",
+ "projectTeams": "Mga team para sa {{project}}",
+ "selectedProject": "napiling proyekto"
+ },
+ "solo": "Solo",
+ "status": {
+ "active": "Aktibo",
+ "deleted": "Tinanggal",
+ "launching": "Inilulunsad...",
+ "offline": "Offline",
+ "partialFailure": "Nabigo ang paglunsad sa kalagitnaan",
+ "partialPending": "Nakabinbin ang bootstrap",
+ "partialSkipped": "Nilaktawan ng paglunsad ang miyembro",
+ "running": "Tumatakbo"
+ },
+ "title": "Pumili ng Team",
+ "trash": "Trash ({{count}})",
+ "trash_few": "Trash ({{count}})",
+ "trash_many": "Trash ({{count}})",
+ "trash_one": "Trash ({{count}})",
+ "trash_other": "Trash ({{count}})",
+ "deleteDraft": {
+ "title": "Tanggalin ang draft",
+ "message": "Tanggalin ang draft na team na \"{{teamName}}\"? Hindi na ito maibabalik.",
+ "confirmLabel": "Tanggalin",
+ "cancelLabel": "Kanselahin"
+ },
+ "moveToTrash": {
+ "title": "Ilipat sa trash",
+ "message": "Ilipat ang team na \"{{teamName}}\" sa trash? Maaari mo itong ibalik mamaya.",
+ "confirmLabel": "Ilipat sa trash",
+ "cancelLabel": "Kanselahin"
+ },
+ "deleteForever": {
+ "title": "Tanggalin nang permanente",
+ "message": "Tanggalin ang team na \"{{teamName}}\" nang permanente? Mawawala ang lahat ng data.",
+ "confirmLabel": "Tanggalin nang permanente",
+ "cancelLabel": "Kanselahin"
+ }
+ },
+ "messageComposer": {
+ "crossTeam": {
+ "hint": "Tip: Ang mga cross-team na mensahe ay napupunta sa lead ng target na team. Kung gusto mong bumalik ang sagot sa iyong team lead sa halip na sa iyo, sabihin iyon nang tahasan sa mensahe."
+ },
+ "attachments": {
+ "attachFiles": "Mag-attach ng mga file (i-paste o i-drag & drop)",
+ "unavailable": "Hindi available ang mga attachment",
+ "disabledHint": "Sinusuportahan ang mga file attachment para sa online na team lead at online na mga OpenCode teammate. Tanggalin ang mga attachment o palitan ang tatanggap.",
+ "restrictions": {
+ "crossTeam": "Hindi sinusuportahan ang mga file attachment para sa cross-team na mensahe",
+ "teamOffline": "Dapat online ang team para mag-attach ng mga file",
+ "unsupportedRecipient": "Maaaring ipadala ang mga file sa team lead o mga OpenCode teammate",
+ "openCodeOffline": "Dapat online ang team para mag-attach ng mga file para sa mga OpenCode teammate",
+ "sending": "Hintaying matapos ipadala ang kasalukuyang mensahe bago magdagdag ng mga file",
+ "maximumReached": "Naabot na ang maximum na attachment",
+ "leadOnly": "Maaari lang ipadala ang mga file sa team lead"
+ }
+ },
+ "slash": {
+ "restrictions": {
+ "attachments": "Nangangailangan ang mga slash command ng live na team lead at hindi maipapadala kasama ng mga attachment",
+ "crossTeam": "Maaari lang patakbuhin ang mga slash command sa kasalukuyang team lead",
+ "notLead": "Maaari lang ipadala ang mga slash command sa team lead",
+ "leadOffline": "Nangangailangan ang mga slash command na online ang team lead"
+ }
+ },
+ "status": {
+ "reusedCrossTeamRequest": "Muling ginamit ang kamakailang cross-team na request",
+ "teamOffline": "Offline ang team"
+ },
+ "revision": {
+ "editing": "Ine-edit ang nakaraang mensahe",
+ "cancel": "Kanselahin",
+ "tooltip": "Hilingin sa agent na huwag pansinin ang nakaraang mensahe at ibalik ito sa composer."
+ },
+ "input": {
+ "charsLeft": "{{count}} char na natitira",
+ "charsLeft_one": "{{count}} char na natitira",
+ "charsLeft_other": "{{count}} char na natitira",
+ "teamLaunchingPlaceholder": "Inilulunsad ang team... ipipila ang mensahe para sa inbox delivery.",
+ "crossTeamPlaceholder": "Cross-team na mensahe sa {{team}}...",
+ "teamFallback": "team",
+ "placeholder": "Magsulat ng mensahe... (Enter para ipadala, Shift+Enter para sa bagong linya)",
+ "slashTip": "Tip: Maaari mong gamitin ang \"/\" para patakbuhin ang anumang Claude command.",
+ "charsLeft_few": "{{count}} char na natitira",
+ "charsLeft_many": "{{count}} char na natitira"
+ },
+ "teamSelector": {
+ "thisTeam": "Team na ito",
+ "current": "kasalukuyan",
+ "online": "online",
+ "offline": "offline",
+ "onlineTitle": "Online",
+ "offlineTitle": "Offline"
+ },
+ "recipient": {
+ "select": "Pumili...",
+ "searchPlaceholder": "Maghanap...",
+ "noResults": "Walang resulta"
+ },
+ "actions": {
+ "voiceToText": "Voice to text",
+ "send": "Ipadala",
+ "sendingUnavailableLaunching": "Hindi available ang pagpapadala habang inilulunsad ang team"
+ }
+ },
+ "claudeLogs": {
+ "filter": {
+ "ariaLabel": "I-filter ang mga log",
+ "tooltip": "I-filter ang mga log",
+ "sections": {
+ "stream": "Stream",
+ "content": "Content"
+ },
+ "kinds": {
+ "output": "Output",
+ "thinking": "Thinking",
+ "tool": "Tool calls"
+ },
+ "actions": {
+ "reset": "I-reset",
+ "save": "I-save"
+ },
+ "streams": {
+ "stdout": "stdout",
+ "stderr": "stderr"
+ }
+ },
+ "rawLineCount": "{{formattedCount}} raw na linya",
+ "rawLineCount_one": "{{formattedCount}} raw na linya",
+ "rawLinesCaptured": "{{count}} nakuha",
+ "emptyRawLogs": "{{count}}; wala pang assistant/tool output.",
+ "noLogsYet": "Wala pang log.",
+ "teamNotRunning": "Hindi tumatakbo ang team.",
+ "searchPlaceholder": "Maghanap ng mga log...",
+ "clearSearch": "I-clear ang paghahanap",
+ "newCount": "+{{count}} bago",
+ "loading": "Niloload...",
+ "showMore": "Magpakita pa",
+ "noLogsCaptured": "Walang nakuhang log.",
+ "noMatchingLogs": "Walang tumutugmang log.",
+ "rawLineCount_few": "{{formattedCount}} raw na linya",
+ "rawLineCount_many": "{{formattedCount}} raw na linya",
+ "rawLineCount_other": "{{formattedCount}} raw na linya",
+ "openFullscreen": "Buksan ang fullscreen na mga log",
+ "fullscreen": "Fullscreen",
+ "viewingFullscreen": "Tinitingnan sa fullscreen mode",
+ "logsTitle": "Mga Log",
+ "sourceSelect": {
+ "placeholder": "Pumili ng log source...",
+ "searchPlaceholder": "Maghanap ng mga log source...",
+ "emptyMessage": "Walang nahanap na log source.",
+ "ariaLabel": "Log source",
+ "leadLabel": "Lead",
+ "selectSourceEmpty": "Pumili ng log source.",
+ "leadDescription": "Team Lead",
+ "removedLabel": "tinanggal",
+ "removedDescription": "Tinanggal"
+ }
+ },
+ "agentGraph": {
+ "popover": {
+ "externalTeam": "External na team",
+ "process": {
+ "startedBy": "Sinimulan ni:",
+ "at": "Sa:",
+ "openUrl": "Buksan ang URL"
+ },
+ "overflow": {
+ "hiddenTasks": "Mga nakatagong task",
+ "empty": "Walang available na nakatagong task."
+ },
+ "member": {
+ "lead": "Lead",
+ "workingOn": "ginagawa",
+ "recentTools": "Mga kamakailang tool",
+ "spawn": {
+ "waitingToStart": "naghihintay magsimula",
+ "starting": "nagsisimula",
+ "failed": "nabigo"
+ },
+ "state": {
+ "active": "aktibo",
+ "idle": "idle",
+ "offline": "offline",
+ "runningTool": "nagpapatakbo ng tool"
+ },
+ "activeTool": {
+ "running": "Nagpapatakbo ng tool",
+ "failed": "Nabigo ang tool",
+ "finished": "Natapos ang tool"
+ },
+ "actions": {
+ "message": "Mensahe",
+ "profile": "Profile",
+ "task": "Task"
+ }
+ }
+ },
+ "logPreview": {
+ "logs": "Mga Log",
+ "loading": "Niloload ang mga log",
+ "more": "+{{count}} pa",
+ "more_one": "+{{count}} pa",
+ "more_other": "+{{count}} pa",
+ "more_few": "+{{count}} pa",
+ "more_many": "+{{count}} pa",
+ "unsupportedProvider": "Hindi sinusuportahang provider",
+ "openCodeLogsDelayed": "Naantala ang mga OpenCode log",
+ "logsUnavailable": "Hindi available ang mga log",
+ "noRecentLogs": "Walang kamakailang log",
+ "toolError": "Tool error",
+ "toolResult": "Tool result",
+ "toolUse": "Tool use",
+ "thinking": "Thinking",
+ "error": "Error",
+ "logEvent": "Log event",
+ "noErrorOutput": "Walang error output",
+ "noOutput": "Walang output",
+ "noInput": "Walang input"
+ },
+ "blockingEdge": {
+ "title": "Blocking Dependency",
+ "blocks": "hinaharangan",
+ "close": "Isara",
+ "blockingHiddenTasks": "Mga humaharang na nakatagong task",
+ "blockedHiddenTasks": "Mga hinarang na nakatagong task",
+ "links_one": "{{count}} link",
+ "links_other": "{{count}} link",
+ "hiddenBlockingLinks_one": "{{count}} nakatagong blocking link",
+ "hiddenBlockingLinks_other": "{{count}} nakatagong blocking link",
+ "hiddenTaskStack": "Hidden task stack",
+ "hiddenTasks_one": "{{count}} nakatagong task",
+ "hiddenTasks_other": "{{count}} nakatagong task",
+ "task": "Task",
+ "openBlockerStack": "Buksan ang blocker stack",
+ "openBlockedStack": "Buksan ang blocked stack",
+ "openBlockerTask": "Buksan ang blocker task",
+ "openBlockedTask": "Buksan ang blocked task"
+ },
+ "activityHud": {
+ "activity": "Aktibidad",
+ "noRecentActivity": "Walang kamakailang aktibidad",
+ "more": "+{{count}} pa",
+ "more_one": "+{{count}} pa",
+ "more_other": "+{{count}} pa",
+ "more_few": "+{{count}} pa",
+ "more_many": "+{{count}} pa"
+ },
+ "provisioning": {
+ "launchDetails": "Mga detalye ng paglunsad",
+ "launchDetailsDescription": "Detalyadong progreso ng paglunsad ng team, live na output at mga CLI log."
+ }
+ },
+ "projectPath": {
+ "label": "Proyekto",
+ "source": {
+ "claude": "Nahanap ng Claude",
+ "codex": "Nahanap ng Codex",
+ "mixed": "Nahanap ng Claude at Codex"
+ },
+ "deleted": {
+ "title": "Wala na ang folder ng proyekto",
+ "label": "Tinanggal"
+ },
+ "mode": {
+ "projectList": "Mula sa listahan ng proyekto",
+ "customPath": "Custom na path"
+ },
+ "loadingProjects": "Niloload ang mga proyekto...",
+ "selectProject": "Pumili ng proyekto...",
+ "searchPlaceholder": "Maghanap ng proyekto ayon sa pangalan o path",
+ "empty": "Walang nahanap",
+ "selectFromList": "Pumili ng proyekto mula sa listahan",
+ "noProjects": "Walang nahanap na proyekto, lumipat sa custom na path.",
+ "customWorkingDirectory": "Custom na working directory",
+ "browse": "Mag-browse",
+ "createAutomatically": "Kung hindi umiiral ang directory, awtomatiko itong lilikhain."
+ },
+ "members": {
+ "badges": {
+ "worktree": "worktree"
+ },
+ "runtimeTelemetry": {
+ "title": "Lokal na runtime load",
+ "description": "Parent at child process lang. Hindi kasama ang remote LLM inference.",
+ "cpu": "CPU",
+ "memory": "Memory",
+ "summedRss": "summed RSS",
+ "sharedHost": "Shared OpenCode host metric. Hindi ito eksklusibo sa miyembrong ito.",
+ "processTreeCapped": "Na-cap ang process tree para sa sample na ito.",
+ "rssHint": "Maaaring kasama sa RSS ang mga shared page, kaya pinakamahusay itong basahin bilang load signal, hindi eksklusibong memory."
+ },
+ "editor": {
+ "title": "Mga Miyembro",
+ "addMember": "Magdagdag ng miyembro",
+ "editAsJson": "I-edit bilang JSON",
+ "runInSeparateWorktrees": "Patakbuhin ang mga teammate sa hiwalay na worktree",
+ "agentTeamsMcpOnly": "Agent Teams MCP only",
+ "removedCount": "Tinanggal ({{count}})",
+ "removedModelLockReason": "Pinapanatili ang mga tinanggal na miyembro para sa soft delete history. Ibalik ang mga ito para i-edit ang mga setting.",
+ "memberNamesUnique": "Ang mga pangalan ng miyembro ay dapat natatangi"
+ },
+ "stats": {
+ "computing": "Kinakalkula ang mga stat...",
+ "empty": "Walang available na stat",
+ "lines": "Mga Linya",
+ "linesInfo": "Tinatantya. Tumpak para sa mga Edit at Write tool. Tinatantya ang mga Bash file write mula sa mga command pattern (heredoc, echo, sed) at maaaring kulang sa ulat.",
+ "files": "Mga File",
+ "toolCalls": "Mga Tool Call",
+ "tokens": "Mga Token",
+ "toolUsage": "Paggamit ng Tool",
+ "filesTouched": "Mga File na Nahawakan ({{count}})",
+ "viewAllChanges": "Tingnan ang Lahat ng Pagbabago",
+ "showLess": "Magpakita ng mas kaunti",
+ "moreFiles": "+{{count}} pa",
+ "footer": "{{count}} session · kinalkula {{computedAgo}}",
+ "footer_one": "{{count}} session · kinalkula {{computedAgo}}",
+ "footer_few": "{{count}} session · kinalkula {{computedAgo}}",
+ "footer_many": "{{count}} session · kinalkula {{computedAgo}}",
+ "footer_other": "{{count}} session · kinalkula {{computedAgo}}"
+ },
+ "logs": {
+ "searching": "Naghahanap ng mga log...",
+ "empty": "Walang nahanap na log",
+ "waitingForTaskActivity": "Ginagawa ang task - naghihintay ng session activity (awtomatikong nire-refresh)...",
+ "noTaskActivity": "Wala pang session activity para sa task na ito",
+ "noMemberActivity": "Wala pang naitalang session activity ang miyembrong ito",
+ "leadSessionTooltip": "Buong team lead session log - kapaki-pakinabang para sa global orchestration context, hindi partikular sa agent na ito",
+ "memberSessionTooltip": "Buong persistent teammate session log - kapaki-pakinabang kapag tumakbo ang trabaho sa root member session sa halip na sa subagent file",
+ "startedAt": "nagsimula {{time}}",
+ "active": "aktibo",
+ "showDetails": "Ipakita ang mga detalye",
+ "hideDetails": "Itago ang mga detalye",
+ "loadingDetails": "Niloload ang mga detalye...",
+ "failedToLoadDetails": "Nabigong i-load ang mga detalye"
+ },
+ "detail": {
+ "relaunchOpenCode": "Ilunsad muli ang OpenCode",
+ "restart": "I-restart",
+ "legacyLogsFallback": "Legacy Logs Fallback",
+ "copyDiagnostics": "Kopyahin ang diagnostics",
+ "pid": "PID {{pid}}",
+ "removedAt": "Tinanggal {{date}}",
+ "failedToRestartMember": "Nabigong i-restart ang miyembro",
+ "sendMessage": "Magpadala ng Mensahe",
+ "assignTask": "Magtalaga ng Task",
+ "remove": "Tanggalin"
+ },
+ "list": {
+ "loading": "Niloload ang mga miyembro ng team",
+ "unavailable": "Hindi available ang member roster",
+ "unavailableDescription": "{{count}} teammate ang kilala mula sa team metadata, ngunit nawawala ang mga detalye ng roster.",
+ "unavailableDescription_one": "{{count}} teammate ang kilala mula sa team metadata, ngunit nawawala ang mga detalye ng roster.",
+ "soloLeadOnly": "Solo team - lead lang",
+ "removedCount": "Tinanggal ({{count}})",
+ "unavailableDescription_few": "{{count}} teammate ang kilala mula sa team metadata, ngunit nawawala ang mga detalye ng roster.",
+ "unavailableDescription_many": "{{count}} teammate ang kilala mula sa team metadata, ngunit nawawala ang mga detalye ng roster.",
+ "unavailableDescription_other": "{{count}} teammate ang kilala mula sa team metadata, ngunit nawawala ang mga detalye ng roster."
+ },
+ "executionLog": {
+ "empty": "Walang ipapakita",
+ "emptyUserMessage": "{{time}} - (blangko)",
+ "agentInstructions": "Mga tagubilin ng agent",
+ "memberTurn": "Turn ni {{member}}",
+ "agentTurn": "Turn ng agent",
+ "turn": "turn"
+ },
+ "recentMessages": {
+ "latest": "Pinakabagong mensahe",
+ "latestForMember": "Pinakabagong mensahe - {{member}}",
+ "loadMore": "Mag-load pa",
+ "expand": "I-expand",
+ "collapse": "I-collapse"
+ },
+ "leadModel": {
+ "defaultModel": "Default",
+ "providerModelAria": "{{provider}} provider, {{model}}",
+ "leadShort": "lead",
+ "teamLead": "Team Lead",
+ "syncWithTeammates": "I-sync ang model sa mga teammate",
+ "anthropicTeamWide": "Anthropic team-wide",
+ "runtimeInheritance": "Nalalapat ang lead runtime sa mga teammate maliban kung magtakda sila ng sarili nilang provider o model.",
+ "anthropicContextLimit": "Ang 200K context limit ay team-wide para sa mga Anthropic runtime sa paglunsad na ito, kasama ang mga custom na Anthropic teammate."
+ },
+ "runtimeLogs": {
+ "autoRefresh": "Auto-refresh",
+ "wrapLines": "I-wrap ang mga linya",
+ "loadingTail": "Niloload ang process log tail...",
+ "empty": "Wala pang nakuhang process log file para sa miyembrong ito.",
+ "copy": "Kopyahin",
+ "fileEmpty": "Blangko ang process log file.",
+ "showingLast": "Ipinapakita ang huling {{bytes}}.",
+ "showing": "Ipinapakita ang {{bytes}}."
+ },
+ "tasks": {
+ "empty": "Walang task na nakatalaga sa miyembrong ito"
+ },
+ "messages": {
+ "loadOlder": "Mag-load ng mga lumang mensahe",
+ "filters": {
+ "all": "Lahat",
+ "messages": "Mga Mensahe",
+ "comments": "Mga Komento"
+ },
+ "empty": {
+ "loading": "Niloload ang aktibidad...",
+ "noComments": "Walang komento para sa miyembrong ito",
+ "noLoadedMessages": "Wala pang naka-load na mensahe para sa miyembrong ito",
+ "noMessages": "Walang mensahe sa miyembrong ito",
+ "noLoadedActivity": "Wala pang naka-load na aktibidad para sa miyembrong ito",
+ "noActivity": "Walang aktibidad sa miyembrong ito"
+ }
+ },
+ "actions": {
+ "openProfile": "Buksan ang profile",
+ "editRole": "I-edit ang role",
+ "sendMessage": "Magpadala ng mensahe",
+ "assignTask": "Magtalaga ng task"
+ },
+ "roleSelect": {
+ "customRolePlaceholder": "Maglagay ng custom na role..."
+ }
+ },
+ "schedule": {
+ "count": "{{count}} schedule",
+ "count_one": "{{count}} schedule",
+ "count_other": "{{count}} schedule",
+ "nextRun": "Susunod: {{next}}",
+ "actions": {
+ "runNow": "Patakbuhin ngayon",
+ "edit": "I-edit",
+ "pause": "I-pause",
+ "resume": "Ituloy",
+ "delete": "Tanggalin",
+ "addSchedule": "Magdagdag ng Schedule"
+ },
+ "runHistory": {
+ "loading": "Niloload ang kasaysayan ng pagtakbo...",
+ "empty": "Wala pang pagtakbo"
+ },
+ "count_few": "{{count}} schedule",
+ "count_many": "{{count}} schedule",
+ "runLog": {
+ "title": "Run Log",
+ "exitCode": "exit {{code}}",
+ "retryCount": "retry {{count}}/{{max}}",
+ "stillRunning": "Tumatakbo pa ang task...",
+ "loadingLogs": "Niloload ang mga log...",
+ "errors": "Mga Error",
+ "close": "Isara"
+ },
+ "cron": {
+ "expression": "Cron expression",
+ "highFrequencyWarning": "High frequency na schedule (mas mababa sa 5 min na interval)",
+ "nextRuns": "Mga susunod na pagtakbo:",
+ "timezone": "Timezone",
+ "selectTimezone": "Pumili ng timezone",
+ "warmUpTime": "Warm-up time",
+ "warmUpDescription": "Inihahanda ang mga napiling provider bago ang naka-schedule na execution",
+ "errors": {
+ "enterExpression": "Maglagay ng cron expression",
+ "invalidExpression": "Invalid na cron expression"
+ },
+ "presets": {
+ "everyHour": "Bawat oras",
+ "everySixHours": "Bawat 6 oras",
+ "dailyAtNine": "Araw-araw nang 9am",
+ "weekdaysAtNine": "Mga karaniwang araw nang 9am",
+ "mondayAtNine": "Lunes nang 9am",
+ "everyThirtyMinutes": "Bawat 30 min"
+ },
+ "warmUpOptions": {
+ "none": "Walang warm-up",
+ "fiveMinutes": "5 min",
+ "tenMinutes": "10 min",
+ "fifteenMinutes": "15 min",
+ "thirtyMinutes": "30 min"
+ }
+ },
+ "empty": {
+ "title": "Wala pang schedule",
+ "description": "Lumikha ng schedule para awtomatikong magpatakbo ng mga Claude task sa isang cron schedule."
+ },
+ "title": "Mga Schedule",
+ "status": {
+ "active": "Aktibo",
+ "paused": "Naka-pause",
+ "disabled": "Naka-disable"
+ },
+ "runStatus": {
+ "pending": "Nakabinbin",
+ "warmingUp": "Nagwa-warm up",
+ "warm": "Warm",
+ "running": "Tumatakbo",
+ "completed": "Tapos na",
+ "failed": "Nabigo",
+ "interrupted": "Naantala",
+ "cancelled": "Kinansela"
+ }
+ },
+ "openCodeContextConfigHint": {
+ "summary": "Maaaring gumamit ang mga lokal na OpenCode model ng OpenCode context budget sa halip na prompt-only na mga limitasyon.",
+ "description": "Magdagdag ng tumutugmang mga limitasyon sa OpenCode config para sa provider at model na ginagamit ng teammate na ito. Tinutulungan nito ang OpenCode na mag-compact at mag-prune bago umapaw ang mga lokal na model sa kanilang context window.",
+ "replacePrefix": "Palitan ang",
+ "and": "at",
+ "replaceSuffix": "ng provider at model ID mula sa iyong OpenCode setup. Ang mga prompt instruction tulad ng",
+ "promptInstructionsSuffix": "ay mas mahina dahil binubuo ang request bago basahin ng model ang mga ito.",
+ "providerLimits": "Mga limitasyon ng provider",
+ "compactionConfig": "Compaction config"
+ },
+ "sessions": {
+ "noProjectPath": "Walang naka-link na project path",
+ "provisioningHint": "Lalabas ang mga session pagkatapos ng team provisioning",
+ "projectNotFound": "Hindi nahanap ang proyekto",
+ "loading": "Niloload ang mga session...",
+ "empty": "Walang nahanap na session",
+ "showAllSessions": "Ipakita para sa lahat ng session",
+ "lead": "lead",
+ "removeFilter": "Tanggalin ang filter",
+ "filterBySession": "I-filter ayon sa session na ito",
+ "openSession": "Buksan ang session",
+ "title": "Mga Session"
+ },
+ "provisioning": {
+ "pid": "PID {{pid}}",
+ "cancel": "Kanselahin",
+ "moreWarningsHidden": "{{count}} pang babala na nakatago",
+ "diagnostics": "Diagnostics",
+ "liveOutput": "Live na output",
+ "diagnosticsCopied": "Nakopya ang diagnostics",
+ "copyDiagnostics": "Kopyahin ang diagnostics",
+ "copied": "Nakopya",
+ "noOutput": "Wala pang nakuhang output.",
+ "cliLogs": "Mga CLI log",
+ "steps": {
+ "starting": "Nagsisimula",
+ "configuring": "Team setup",
+ "assembling": "Sumasali ang mga miyembro",
+ "finalizing": "Tinatapos"
+ },
+ "providerStatus": {
+ "status": {
+ "checking": "sinusuri...",
+ "ready": "OK",
+ "notes": "OK (mga nota)",
+ "failed": "ERR",
+ "pending": "naghihintay"
+ },
+ "detailSummary": {
+ "cliBinaryMissing": "Nawawala ang CLI binary",
+ "openCodeRuntimeMissing": "Nawawala ang OpenCode runtime",
+ "openCodeWindowsAccessBlocked": "Naka-block ang OpenCode Windows access",
+ "openCodeNoOutput": "Walang ibinalik na output ang OpenCode runtime check",
+ "openCodeMcpUnreachable": "Hindi maabot ang OpenCode app MCP",
+ "workingDirectoryMissing": "Nawawala ang working directory",
+ "cliBinaryCouldNotStart": "Hindi masimulan ang CLI binary",
+ "cliPreflightIncomplete": "Hindi natapos ang CLI preflight",
+ "authenticationRequired": "Kailangan ng authentication",
+ "runtimeProviderNotConfigured": "Hindi naka-configure ang runtime provider",
+ "cliPreflightFailed": "Nabigo ang CLI preflight",
+ "selectedModelCompatible": "Compatible ang napiling model",
+ "selectedModelCompatibilityPending": "Nakabinbin ang compatibility ng napiling model",
+ "selectedModelAvailable": "Available ang napiling model",
+ "selectedModelVerified": "Na-verify ang napiling model",
+ "selectedModelUnavailable": "Hindi available ang napiling model",
+ "selectedModelTimedOut": "Nag-time out ang verification ng napiling model",
+ "selectedModelCheckFailed": "Nabigo ang pagsuri sa napiling model",
+ "selectedModelDeferred": "Ipinagpaliban ang verification ng napiling model",
+ "selectedModelPingNotConfirmed": "Hindi nakumpirma ang ping ng napiling model",
+ "readyWithNotes": "Handa na may mga nota",
+ "needsAttention": "Kailangan ng atensyon"
+ },
+ "modelChecksSummary": "Mga pagsuri sa napiling model - {{details}}",
+ "modelParts": {
+ "unavailable": "{{count}} model na hindi available",
+ "unavailable_one": "{{count}} model na hindi available",
+ "unavailable_other": "{{count}} model na hindi available",
+ "checkFailed": "{{count}} model na nabigo sa pagsuri",
+ "checkFailed_one": "{{count}} model na nabigo sa pagsuri",
+ "checkFailed_other": "{{count}} model na nabigo sa pagsuri",
+ "timedOut": "{{count}} model na nag-time out",
+ "timedOut_one": "{{count}} model na nag-time out",
+ "timedOut_other": "{{count}} model na nag-time out",
+ "deferred": "{{count}} verification na ipinagpaliban",
+ "deferred_one": "{{count}} verification na ipinagpaliban",
+ "deferred_other": "{{count}} verification na ipinagpaliban",
+ "pingNotConfirmed": "{{count}} ping na hindi nakumpirma",
+ "pingNotConfirmed_one": "{{count}} ping na hindi nakumpirma",
+ "pingNotConfirmed_other": "{{count}} ping na hindi nakumpirma",
+ "compatibilityPending": "{{count}} compatible, nakabinbin ang deep verification",
+ "compatibilityPending_one": "{{count}} compatible, nakabinbin ang deep verification",
+ "compatibilityPending_other": "{{count}} compatible, nakabinbin ang deep verification",
+ "compatible": "{{count}} compatible",
+ "compatible_one": "{{count}} compatible",
+ "compatible_other": "{{count}} compatible",
+ "checking": "{{count}} sinusuri",
+ "checking_one": "{{count}} sinusuri",
+ "checking_other": "{{count}} sinusuri",
+ "available": "{{count}} available",
+ "available_one": "{{count}} available",
+ "available_other": "{{count}} available",
+ "verified": "{{count}} na-verify",
+ "verified_one": "{{count}} na-verify",
+ "verified_other": "{{count}} na-verify",
+ "unavailable_few": "{{count}} model na hindi available",
+ "unavailable_many": "{{count}} model na hindi available",
+ "checkFailed_few": "{{count}} model na nabigo sa pagsuri",
+ "checkFailed_many": "{{count}} model na nabigo sa pagsuri",
+ "timedOut_few": "{{count}} model na nag-time out",
+ "timedOut_many": "{{count}} model na nag-time out",
+ "deferred_few": "{{count}} verification na ipinagpaliban",
+ "deferred_many": "{{count}} verification na ipinagpaliban",
+ "pingNotConfirmed_few": "{{count}} ping na hindi nakumpirma",
+ "pingNotConfirmed_many": "{{count}} ping na hindi nakumpirma",
+ "compatibilityPending_few": "{{count}} compatible, nakabinbin ang deep verification",
+ "compatibilityPending_many": "{{count}} compatible, nakabinbin ang deep verification",
+ "compatible_few": "{{count}} compatible",
+ "compatible_many": "{{count}} compatible",
+ "checking_few": "{{count}} sinusuri",
+ "checking_many": "{{count}} sinusuri",
+ "available_few": "{{count}} available",
+ "available_many": "{{count}} available",
+ "verified_few": "{{count}} na-verify",
+ "verified_many": "{{count}} na-verify"
+ },
+ "openProviderSettings": "Buksan ang mga setting ng {{provider}}",
+ "copied": "Nakopya",
+ "copyDiagnostics": "Kopyahin ang diagnostics",
+ "deepVerificationPending": "Tumatakbo pa ang deep verification. Ang mga libreng OpenCode model ay maaaring tumagal nang halos 20 segundo.",
+ "progress": {
+ "checkingSelectedProviders": "Sinusuri ang mga napiling provider nang parallel...",
+ "checkingProvider": "Sinusuri ang {{provider}} provider...",
+ "checkingProviders": "Sinusuri ang {{providers}} na provider..."
+ },
+ "failureHints": {
+ "openCodeAccessDenied": "Ayusin ang mga folder permission o ilipat ang proyekto sa folder na nasusulatan ng user. Pansamantalang solusyon lang ang pagpapatakbo bilang administrator.",
+ "openCodeBridgeNoOutput": "I-restart ang app at OpenCode runtime, pagkatapos ay subukang muli. Kung uulit ito, kopyahin ang diagnostics.",
+ "workingDirectoryMissing": "Pumili ng umiiral na working directory, pagkatapos ay buksang muli ang dialog na ito.",
+ "authenticationRequired": "I-authenticate ang kinakailangang provider sa Claude CLI, pagkatapos ay buksang muli ang dialog na ito.",
+ "runtimeProviderNotConfigured": "I-configure ang napiling provider runtime, pagkatapos ay buksang muli ang dialog na ito.",
+ "openCodeRuntimeMissing": "I-install o subukang muli ang OpenCode runtime mula sa provider status card, pagkatapos ay buksang muli ang dialog na ito.",
+ "openCodeAppMcpUnreachable": "Subukang muli ang paglunsad para i-refresh ang OpenCode app MCP bridge. Kung uulit ito, i-restart ang app at OpenCode runtime.",
+ "cliBinaryMissing": "Tiyaking umiiral ang lokal na Claude CLI binary at masisimulan ito, pagkatapos ay buksang muli ang dialog na ito.",
+ "default": "Lutasin ang isyu sa itaas, pagkatapos ay buksang muli ang dialog na ito.",
+ "openCodeNodeModulesSymlinkPermission": "Patakbuhin ang Agent Teams AI bilang Administrator, pagkatapos ay subukang muli ang paglunsad."
+ }
+ },
+ "presentation": {
+ "awaitingPermission": "{{count}} teammate na naghihintay ng pag-apruba ng permiso",
+ "nameListWithMore": "{{names}}, +{{count}} pa",
+ "waitingForOpenCode": "Naghihintay para sa OpenCode: {{names}}",
+ "bootstrapStalled": "Naantala ang bootstrap: {{names}}",
+ "bootstrapStalledWithOpenCodeWait": "{{stalled}}; Naghihintay para sa OpenCode: {{names}}",
+ "namedPendingDiagnostic": "{{label}}: {{names}}",
+ "countPendingDiagnostic": "{{count}} {{label}}",
+ "pendingLabels": {
+ "bootstrapStalled": "Naantala ang bootstrap",
+ "shellOnly": "Shell-only",
+ "waitingForBootstrap": "Naghihintay ng bootstrap",
+ "bootstrapUnconfirmed": "Hindi nakumpirma ang bootstrap",
+ "awaitingPermission": "Naghihintay ng permiso",
+ "waitingForRuntime": "Naghihintay ng runtime",
+ "shellOnlyLower": "shell-only",
+ "waitingForBootstrapLower": "naghihintay ng bootstrap",
+ "bootstrapUnconfirmedLower": "hindi nakumpirma ang bootstrap",
+ "awaitingPermissionLower": "naghihintay ng permiso",
+ "waitingForRuntimeLower": "naghihintay ng runtime"
+ },
+ "failed": {
+ "memberFailedToStart": "Nabigong magsimula si {{name}}",
+ "teammatesFailedToStart": "{{count}} teammate ang nabigong magsimula",
+ "teammatesFailedRatio": "{{count}}/{{total}} teammate ang nabigong magsimula"
+ },
+ "skipped": {
+ "memberSkipped": "Nilaktawan si {{name}} para sa paglunsad na ito",
+ "memberSkippedWithReason": "Nilaktawan si {{name}} para sa paglunsad na ito - {{reason}}",
+ "memberSkippedCompact": "Nilaktawan si {{name}}",
+ "teammatesSkipped": "{{count}} teammate ang nilaktawan",
+ "teammatesSkippedList": "Mga nilaktawang teammate: {{list}}",
+ "teammatesSkippedRatio": "{{count}}/{{total}} teammate ang nilaktawan para sa paglunsad na ito"
+ },
+ "joining": {
+ "teammatesStillJoining": "{{count}} teammate ang sumasali pa",
+ "teammatesStillJoining_one": "{{count}} teammate ang sumasali pa",
+ "teammatesStillJoining_few": "{{count}} teammate ang sumasali pa",
+ "teammatesStillJoining_many": "{{count}} teammate ang sumasali pa",
+ "teammatesStillJoining_other": "{{count}} teammate ang sumasali pa",
+ "teammatesConfirmedRatio": "{{count}}/{{total}} teammate ang nakumpirma"
+ },
+ "ready": {
+ "leadOnline": "Online ang lead",
+ "allTeammatesJoined": "Lahat ng {{count}} teammate ay sumali",
+ "teamProvisionedLeadOnline": "Na-provision ang team - online ang lead",
+ "teamProvisionedAllJoined": "Na-provision ang team - lahat ng {{count}} teammate ay sumali",
+ "teamProvisionedStillJoining": "Na-provision ang team - sumasali pa ang mga teammate",
+ "launchFinishedWithErrors": "Natapos ang paglunsad na may mga error - {{count}}/{{total}} teammate ang nabigong magsimula",
+ "launchContinuedSkipped": "Nagpatuloy ang paglunsad - {{count}}/{{total}} teammate ang nilaktawan",
+ "teamLaunchedLeadOnline": "Nailunsad ang team - online ang lead",
+ "teamLaunchedAllJoined": "Nailunsad ang team - lahat ng {{count}} teammate ay sumali"
+ },
+ "panel": {
+ "launchFailed": "Nabigo ang paglunsad",
+ "launchDetails": "Mga detalye ng paglunsad",
+ "launchFinishedWithErrors": "Natapos ang paglunsad na may mga error",
+ "launchContinuedSkipped": "Nagpatuloy ang paglunsad na may mga nilaktawang teammate",
+ "coreTeamReady": "Handa na ang core team",
+ "finishingLaunch": "Tinatapos ang paglunsad",
+ "teamLaunched": "Nailunsad ang team",
+ "launchingTeam": "Inilulunsad ang team"
+ }
+ }
+ },
+ "liveRuntimeStatus": {
+ "title": "Live runtime status",
+ "description": "Display-only na heartbeat at launch state. Nananatili sa ibaba ang mga process control.",
+ "source": "source: {{source}}",
+ "lane": "{{lane}} lane",
+ "diagnosticOnly": "Diagnostic lang",
+ "updated": "na-update {{value}}",
+ "states": {
+ "running": "Tumatakbo",
+ "starting": "Nagsisimula",
+ "waiting": "Naghihintay",
+ "degraded": "Kailangan ng atensyon",
+ "stopped": "Naihinto",
+ "unknown": "Hindi alam"
+ }
+ },
+ "taskLogs": {
+ "exact": {
+ "title": "Mga Eksaktong Task Log",
+ "loading": "Niloload ang mga eksaktong task log...",
+ "description": "Mga eksaktong transcript slice na nire-render gamit ang parehong execution-log na bahagi na ginagamit sa Logs.",
+ "emptyTitle": "Wala pang eksaktong task log",
+ "emptyDescription": "Lalabas dito ang mga eksaktong transcript bundle kapag available ang explicit na task-linked na transcript metadata.",
+ "summaryOnly": "buod lang"
+ },
+ "executionSessions": {
+ "title": "Mga Execution Session",
+ "online": "Online",
+ "updating": "Ina-update...",
+ "description": "Legacy na session-centric na pag-browse at preview ng transcript."
+ },
+ "stream": {
+ "title": "Task Log Stream"
+ }
+ },
+ "kanban": {
+ "taskCard": {
+ "cancelTask": "Kanselahin ang task {{taskId}}",
+ "cancel": "Kanselahin",
+ "moveBackToTodoConfirm": "Ibalik ang task na ito sa TODO at abisuhan ang team?",
+ "confirm": "Kumpirmahin",
+ "keep": "Panatilihin",
+ "changesNeedAttention": "Kailangan ng atensyon ang mga pagbabago",
+ "changes": "Mga Pagbabago",
+ "deleteTask": "Tanggalin ang task",
+ "taskLogsActive": "Aktibo ang task log",
+ "newTaskLogsArriving": "May dumarating na bagong task log",
+ "awaitingUser": "Naghihintay sa user",
+ "awaitingLead": "Naghihintay sa lead",
+ "blockedBy": "Hinaharangan ng",
+ "blocks": "Hinaharangan",
+ "start": "Simulan",
+ "complete": "Tapusin",
+ "approve": "Aprubahan",
+ "requestReview": "Humiling ng review",
+ "manualReview": "Manual na review",
+ "requestChanges": "Humiling ng mga pagbabago"
+ },
+ "filter": {
+ "title": "I-filter ang mga task",
+ "session": "Session",
+ "allSessions": "Lahat ng session",
+ "teammate": "Teammate",
+ "unassigned": "(hindi nakatalaga)",
+ "column": "Column",
+ "clearAll": "I-clear lahat"
+ },
+ "board": {
+ "addTask": "Magdagdag ng task",
+ "noTasks": "Walang task",
+ "showMore": "Magpakita ng {{count}} pa",
+ "hiddenCount": "{{count}} nakatago",
+ "trash": "Trash",
+ "gridView": "Grid view",
+ "columnsView": "Columns view"
+ },
+ "trash": {
+ "title": "Trash",
+ "empty": "Walang tinanggal na task",
+ "subject": "Paksa",
+ "owner": "May-ari",
+ "deleted": "Tinanggal",
+ "unassigned": "Hindi nakatalaga",
+ "restoreTask": "Ibalik ang task",
+ "restore": "Ibalik",
+ "close": "Isara"
+ },
+ "sort": {
+ "title": "Ayusin ang mga task",
+ "sortBy": "Ayusin ayon sa",
+ "reset": "I-reset",
+ "options": {
+ "updatedAt": {
+ "label": "Huling na-update",
+ "description": "Kamakailang na-update muna"
+ },
+ "createdAt": {
+ "label": "Nilikha",
+ "description": "Pinakabago muna"
+ },
+ "owner": {
+ "label": "May-ari",
+ "description": "Ayon sa alpabeto sa pamamagitan ng assignee"
+ },
+ "manual": {
+ "label": "Manual",
+ "description": "Drag-and-drop na pagkakasunod"
+ }
+ }
+ },
+ "search": {
+ "clearSearch": "I-clear ang paghahanap",
+ "tasks": "Mga Task",
+ "createdAgo": "nilikha {{time}}",
+ "updatedAgo": "na-update {{time}}",
+ "placeholder": "Maghanap ng mga task... (#id o text)"
+ },
+ "grid": {
+ "addTask": "Magdagdag ng task",
+ "noTasks": "Walang task"
+ },
+ "title": "Kanban",
+ "columns": {
+ "todo": "TODO",
+ "inProgress": "GINAGAWA",
+ "review": "REVIEW",
+ "done": "TAPOS",
+ "approved": "INAPRUBAHAN"
+ }
+ },
+ "worktreeGitReadiness": {
+ "checking": "Sinusuri ang status ng Git repository para sa mga teammate worktree...",
+ "ready": "Handa na ang mga Git worktree.",
+ "readyOnBranch": "Handa na ang mga Git worktree sa branch {{branch}}.",
+ "needsSetup": "Nangangailangan ng Git setup ang worktree isolation",
+ "initialCommitNotice": "Ang initial commit action ay nagsa-stage at nagko-commit ng lahat ng kasalukuyang file na may mensaheng",
+ "initializeRepository": "Simulan ang Git repository",
+ "createInitialCommit": "Lumikha ng initial commit",
+ "initialCommitMessage": "chore: initial commit"
+ },
+ "toolApproval": {
+ "settings": "Mga Setting",
+ "autoAllowAllTools": "Awtomatikong payagan ang lahat ng tool",
+ "autoAllowFileEdits": "Awtomatikong payagan ang mga file edit (Edit, Write, NotebookEdit)",
+ "autoAllowSafeCommands": "Awtomatikong payagan ang mga ligtas na command (git, pnpm, npm, ls...)",
+ "onTimeout": "Sa timeout:",
+ "after": "pagkatapos ng",
+ "secondsShort": "seg",
+ "timeoutActions": {
+ "wait": "Maghintay nang walang hanggan",
+ "allow": "Payagan",
+ "deny": "Tanggihan"
+ },
+ "submit": "Isumite",
+ "allow": "Payagan",
+ "deny": "Tanggihan",
+ "allowAll": "Payagan lahat",
+ "pendingCount": "{{count}} nakabinbin",
+ "autoActionIn": "Auto-{{action}} sa {{time}}",
+ "diff": {
+ "previewChanges": "I-preview ang mga pagbabago",
+ "readingFile": "Binabasa ang file...",
+ "binaryFile": "Binary file - hindi mai-preview",
+ "truncated": "Pinaikli ang file sa 2MB - maaaring hindi kumpleto ang diff",
+ "newFile": "Bagong file"
+ }
+ },
+ "memberWorkSync": {
+ "details": {
+ "title": "Member work sync",
+ "actionableItems": "Mga naaaksyunang item",
+ "fingerprint": "Fingerprint",
+ "report": "Ulat",
+ "none": "wala",
+ "shadowWouldNudge": "Mag-uudyok sana ang shadow",
+ "yes": "oo",
+ "no": "hindi",
+ "moreActionableItems": "{{count}} pang naaaksyunang item",
+ "diagnostics": "Diagnostics: {{diagnostics}}"
+ },
+ "title": "Member work sync",
+ "loadingDiagnostics": "Niloload ang member work sync diagnostics.",
+ "diagnosticsUnavailable": "Hindi available ang member work sync diagnostics."
+ },
+ "advancedCli": {
+ "title": "Advanced",
+ "useWorktree": "Gumamit ng worktree",
+ "recent": "Kamakailan",
+ "commandPreview": "Command preview",
+ "customArguments": "Mga custom na argument",
+ "validate": "I-validate",
+ "validation": {
+ "allFlagsValid": "Valid ang lahat ng flag",
+ "unknownFlags": "Hindi alam: {{flags}}",
+ "protectedFlags": "Protektado: {{flags}}",
+ "failed": "Nabigo ang validation"
+ },
+ "placeholders": {
+ "worktreeName": "worktree-name"
+ }
+ },
+ "processes": {
+ "ago": "{{time}} na ang nakalipas",
+ "stoppedAgo": "naihinto {{time}} na ang nakalipas",
+ "running": "Tumatakbo",
+ "stopped": "Naihinto",
+ "stopProcess": "Ihinto ang proseso (SIGTERM)",
+ "kill": "Patayin",
+ "openInBrowser": "Buksan sa browser",
+ "open": "Buksan",
+ "pid": "PID{{pid}}",
+ "title": "Mga CLI Process"
+ },
+ "taskActivity": {
+ "loadingDetails": "Niloload ang mga detalye ng aktibidad...",
+ "contextUnavailable": "Hindi na available ang detalyadong transcript context para sa aktibidad na ito.",
+ "loading": "Niloload ang aktibidad ng task...",
+ "lowSignalOnly": "Wala pang nahanap na pangunahing task activity. Available ang mga low-level na detalye ng execution sa ibaba sa Task Log Stream.",
+ "empty": "Wala pang nahanap na explicit na task activity sa mga available na transcript. Maaaring available pa rin ang mga lumang o heuristic na session log sa ibaba sa Execution Sessions.",
+ "title": "Aktibidad ng Task",
+ "description": "Pangunahing explicit na runtime activity na naka-link sa task na ito mula sa transcript metadata."
+ },
+ "sendMessage": {
+ "title": "Magpadala ng Mensahe",
+ "description": "Magpadala ng direktang mensahe sa isang miyembro ng team.",
+ "recipientLabel": "Tatanggap",
+ "selectMemberPlaceholder": "Pumili ng miyembro...",
+ "messageLabel": "Mensahe",
+ "placeholder": "Magsulat ng iyong mensahe... (Enter para ipadala)",
+ "send": "Ipadala",
+ "sending": "Nagpapadala...",
+ "charsLeft": "{{count}} char na natitira",
+ "saved": "Na-save",
+ "attachments": {
+ "teamOnlineRequired": "Dapat online ang team para mag-attach ng mga file",
+ "recipientUnsupported": "Maaaring ipadala ang mga file sa team lead o mga OpenCode teammate",
+ "openCodeOnlineRequired": "Dapat online ang team para mag-attach ng mga file para sa mga OpenCode teammate",
+ "disabledHint": "Sinusuportahan ang mga file attachment para sa online na team lead at online na mga OpenCode teammate. Tanggalin ang mga attachment o palitan ang tatanggap.",
+ "attachFiles": "Mag-attach ng mga file (i-paste o i-drag & drop)",
+ "unavailable": "Hindi available ang mga attachment"
+ },
+ "quote": {
+ "remove": "Tanggalin ang quote",
+ "replyingTo": "Sumasagot kay"
+ }
+ },
+ "taskComments": {
+ "cancelReply": "Kanselahin ang sagot",
+ "replyingTo": "Sumasagot kay",
+ "placeholder": "Magdagdag ng komento... (Enter para ipadala)",
+ "attachFile": "Mag-attach ng file (o i-paste)",
+ "voiceToText": "Voice to text",
+ "comment": "Magkomento",
+ "charsLeft": "{{count}} char na natitira",
+ "saved": "Na-save",
+ "awaitingReplyFrom": "Naghihintay ng sagot mula kay",
+ "or": "o"
+ },
+ "taskAttachments": {
+ "dropImageHere": "I-drop ang larawan dito",
+ "attachImage": "Mag-attach ng larawan",
+ "pasteOrDragDrop": "o i-paste / i-drag-drop",
+ "fromOriginalMessage": "Mula sa orihinal na mensahe",
+ "dropFilesHere": "I-drop ang mga file dito",
+ "loading": "Niloload ang mga attachment..."
+ },
+ "permissions": {
+ "autoApproveAllTools": "Awtomatikong aprubahan ang lahat ng tool",
+ "autonomousModeDescription": "Autonomous mode: nag-e-execute ang mga team tool nang walang kumpirmasyon. Mag-ingat sa hindi mapagkakatiwalaang code.",
+ "manualModeDescription": "Manual mode: aaprubahan o tatanggihan mo ang bawat tool call nang real time."
+ },
+ "memberLogStream": {
+ "tabs": {
+ "execution": "Execution",
+ "process": "Process"
+ },
+ "filters": {
+ "all": "Lahat"
+ },
+ "logs": {
+ "title": "Mga Log",
+ "loading": "Niloload ang member log stream...",
+ "emptyTitle": "Wala pang nahanap na log stream entry para sa miyembrong ito.",
+ "emptyDescription": "Lalabas dito ang mga member-scoped na transcript o runtime log kapag available."
+ }
+ },
+ "reviewDialog": {
+ "placeholder": "Ilarawan kung ano ang kailangang baguhin... (Enter para isumite)",
+ "submit": "Isumite",
+ "charsLeft": "{{count}} char na natitira",
+ "saved": "Na-save",
+ "title": "Humiling ng mga Pagbabago"
+ },
+ "dialogs": {
+ "actions": {
+ "openDashboard": "Buksan ang Dashboard",
+ "openTeam": "Buksan ang team",
+ "cancel": "Kanselahin"
+ },
+ "membersJson": {
+ "hide": "Itago ang JSON"
+ },
+ "optional": {
+ "badge": "Opsyonal"
+ }
+ },
+ "runningTeams": {
+ "title": "Mga Tumatakbong Team",
+ "status": {
+ "active": "Aktibo",
+ "provisioning": "Inilulunsad",
+ "idle": "Tumatakbo"
+ },
+ "noProject": "Walang proyekto"
+ },
+ "layout": {
+ "maxPanesReached": "Naabot ang maximum na {{count}} pane"
+ },
+ "codexReconnect": {
+ "description": "Mukhang luma na ang iyong Codex session. Kumonekta muli para magpatuloy.",
+ "useCode": "Gamitin ang code",
+ "generating": "Bumubuo...",
+ "openLogin": "Buksan ang login",
+ "generateLink": "Bumuo ng link"
+ },
+ "effortLevel": {
+ "label": "Effort level (opsyonal)",
+ "maxDescription": "Binibigyan ng Max ang model ng pinakamaraming oras sa pangangatwiran para sa mahihirap na task."
+ },
+ "contextLimit": {
+ "limitTo200k": "Limitahan ang context sa 200K na token",
+ "always200k": "(palaging 200K para sa model na ito)",
+ "tooltipContent": "Pinapanatili ang mga paglunsad sa loob ng 200K-token na context window kapag sinusuportahan.",
+ "tooltipTitle": "Context limit"
+ },
+ "roleSelect": {
+ "noRole": "Walang role",
+ "customRole": "Custom na role...",
+ "searchPlaceholder": "Maghanap ng mga role...",
+ "empty": "Walang nahanap na role.",
+ "reservedRole": "Nakareserba ang role na ito",
+ "emptyCustomRole": "Hindi maaaring blangko ang role"
+ }
+}
diff --git a/src/features/localization/renderer/locales/fr/common.json b/src/features/localization/renderer/locales/fr/common.json
index 3e88994f..7b464b7a 100644
--- a/src/features/localization/renderer/locales/fr/common.json
+++ b/src/features/localization/renderer/locales/fr/common.json
@@ -62,21 +62,36 @@
"locales": {
"emptyMessage": "Aucune langue trouvée.",
"names": {
- "en": "Anglais",
- "ru": "Russe",
- "zh": "Chinois",
- "ja": "Japonais",
- "ko": "Coréen",
- "es": "Espagnol",
- "hi": "Hindi",
- "pt": "Portugais",
- "fr": "Français",
"ar": "Arabe",
"bn": "Bengali",
- "ur": "Ourdou",
- "id": "Indonésien",
"de": "Allemand",
- "system": "Système"
+ "en": "Anglais",
+ "es": "Espagnol",
+ "fa": "Persan",
+ "fil": "Philippin",
+ "fr": "Français",
+ "hi": "Hindi",
+ "id": "Indonésien",
+ "it": "Italien",
+ "ja": "Japonais",
+ "ko": "Coréen",
+ "mr": "Marathi",
+ "ms": "Malais",
+ "nl": "Néerlandais",
+ "pl": "Polonais",
+ "pt": "Portugais",
+ "ro": "Roumain",
+ "ru": "Russe",
+ "sw": "Swahili",
+ "system": "Système",
+ "ta": "Tamoul",
+ "te": "Télougou",
+ "th": "Thaï",
+ "tr": "Turc",
+ "uk": "Ukrainien",
+ "ur": "Ourdou",
+ "vi": "Vietnamien",
+ "zh": "Chinois"
},
"searchPlaceholder": "Rechercher une langue...",
"selectPlaceholder": "Sélectionnez la langue de l'application...",
diff --git a/src/features/localization/renderer/locales/fr/settings.json b/src/features/localization/renderer/locales/fr/settings.json
index 3f9e94dd..106d2cf6 100644
--- a/src/features/localization/renderer/locales/fr/settings.json
+++ b/src/features/localization/renderer/locales/fr/settings.json
@@ -68,12 +68,12 @@
"useInTeamPicker": "Utilisation dans le sélectionneur d'équipe",
"testInProgress": "Le test du modèle est déjà en cours.",
"validationContextRequired": "Sélectionnez un contexte de validation ci-dessus pour activer Test et Set default. L'enregistrement pour team picker ne conserve que la route pour les nouvelles équipes.",
+ "actionsUnavailable": "Les actions sont temporairement indisponibles.",
"defaultSaveInProgress": "L'OpenCode default est en cours d'enregistrement.",
"routeUnavailableAuth": "Ce provider nécessite une authentification avant d'utiliser ce modèle.",
"routeUnavailableFailed": "Cette model route a échoué au dernier execution test.",
- "routeUnavailableUnknown": "Ce modèle est l'OpenCode default actuel, mais il n'est pas encore disponible dans le live catalog.",
- "actionsUnavailable": "Les actions sont temporairement indisponibles.",
- "routeUnavailableGeneric": "Cette model route ne peut pas être utilisée maintenant."
+ "routeUnavailableGeneric": "Cette model route ne peut pas être utilisée maintenant.",
+ "routeUnavailableUnknown": "Ce modèle est l'OpenCode default actuel, mais il n'est pas encore disponible dans le live catalog."
},
"providers": {
"catalog": "Catalogue des fournisseurs OpenCode",
diff --git a/src/features/localization/renderer/locales/fr/team.json b/src/features/localization/renderer/locales/fr/team.json
index 4ce92b1a..91561704 100644
--- a/src/features/localization/renderer/locales/fr/team.json
+++ b/src/features/localization/renderer/locales/fr/team.json
@@ -1496,7 +1496,7 @@
},
"status": {
"reusedCrossTeamRequest": "Réutilisée récente demande cross-team",
- "teamOffline": "Équipe hors ligne"
+ "teamOffline": "hors ligne"
},
"revision": {
"editing": "Modification du message précédent",
diff --git a/src/features/localization/renderer/locales/hi/common.json b/src/features/localization/renderer/locales/hi/common.json
index 6d8bc686..ebb4d925 100644
--- a/src/features/localization/renderer/locales/hi/common.json
+++ b/src/features/localization/renderer/locales/hi/common.json
@@ -62,21 +62,36 @@
"locales": {
"emptyMessage": "कोई भाषा नहीं मिली।",
"names": {
- "en": "अंग्रेज़ी",
- "ru": "रूसी",
- "zh": "चीनी",
- "ja": "जापानी",
- "ko": "कोरियाई",
- "es": "स्पैनिश",
- "hi": "हिंदी",
- "pt": "पुर्तगाली",
- "fr": "फ़्रेंच",
"ar": "अरबी",
"bn": "बांग्ला",
- "ur": "उर्दू",
- "id": "इंडोनेशियाई",
"de": "जर्मन",
- "system": "सिस्टम"
+ "en": "अंग्रेज़ी",
+ "es": "स्पैनिश",
+ "fa": "फ़ारसी",
+ "fil": "फ़िलिपिनो",
+ "fr": "फ़्रेंच",
+ "hi": "हिंदी",
+ "id": "इंडोनेशियाई",
+ "it": "इतालवी",
+ "ja": "जापानी",
+ "ko": "कोरियाई",
+ "mr": "मराठी",
+ "ms": "मलय",
+ "nl": "डच",
+ "pl": "पोलिश",
+ "pt": "पुर्तगाली",
+ "ro": "रोमानियाई",
+ "ru": "रूसी",
+ "sw": "स्वाहिली",
+ "system": "सिस्टम",
+ "ta": "तमिल",
+ "te": "तेलुगु",
+ "th": "थाई",
+ "tr": "तुर्की",
+ "uk": "यूक्रेनी",
+ "ur": "उर्दू",
+ "vi": "वियतनामी",
+ "zh": "चीनी"
},
"searchPlaceholder": "भाषा खोजें...",
"selectPlaceholder": "ऐप भाषा चुनें...",
diff --git a/src/features/localization/renderer/locales/hi/settings.json b/src/features/localization/renderer/locales/hi/settings.json
index 4c39346e..4865555a 100644
--- a/src/features/localization/renderer/locales/hi/settings.json
+++ b/src/features/localization/renderer/locales/hi/settings.json
@@ -68,12 +68,12 @@
"useInTeamPicker": "टीम पिकर में उपयोग करें",
"testInProgress": "मॉडल टेस्ट पहले से चल रहा है।",
"validationContextRequired": "Test और Set default सक्षम करने के लिए ऊपर validation context चुनें। team picker के लिए सेव करने से सिर्फ नई टीमों की route सेव होती है।",
+ "actionsUnavailable": "Actions अस्थायी रूप से उपलब्ध नहीं हैं।",
"defaultSaveInProgress": "OpenCode default सेव हो रहा है।",
"routeUnavailableAuth": "इस model का उपयोग करने से पहले इस provider को authentication चाहिए।",
"routeUnavailableFailed": "यह model route पिछले execution test में विफल रहा।",
- "routeUnavailableUnknown": "यह model वर्तमान OpenCode default है, लेकिन अभी live catalog में उपलब्ध नहीं है।",
- "actionsUnavailable": "Actions अस्थायी रूप से उपलब्ध नहीं हैं।",
- "routeUnavailableGeneric": "यह model route अभी उपयोग नहीं किया जा सकता।"
+ "routeUnavailableGeneric": "यह model route अभी उपयोग नहीं किया जा सकता।",
+ "routeUnavailableUnknown": "यह model वर्तमान OpenCode default है, लेकिन अभी live catalog में उपलब्ध नहीं है।"
},
"providers": {
"catalog": "ओपनकोड प्रदाता सूची",
diff --git a/src/features/localization/renderer/locales/hi/team.json b/src/features/localization/renderer/locales/hi/team.json
index e3f846c7..ef6aaf3a 100644
--- a/src/features/localization/renderer/locales/hi/team.json
+++ b/src/features/localization/renderer/locales/hi/team.json
@@ -1496,7 +1496,7 @@
},
"status": {
"reusedCrossTeamRequest": "हाल के क्रॉस-टीम अनुरोध का पुन: उपयोग किया",
- "teamOffline": "टीम ऑफलाइन"
+ "teamOffline": "ऑफलाइन"
},
"revision": {
"editing": "पिछला संदेश संपादित हो रहा है",
diff --git a/src/features/localization/renderer/locales/id/common.json b/src/features/localization/renderer/locales/id/common.json
index 8b1db189..ffa1c298 100644
--- a/src/features/localization/renderer/locales/id/common.json
+++ b/src/features/localization/renderer/locales/id/common.json
@@ -62,21 +62,36 @@
"locales": {
"emptyMessage": "Tidak ada bahasa ditemukan.",
"names": {
- "en": "Inggris",
- "ru": "Rusia",
- "zh": "Tionghoa",
- "ja": "Jepang",
- "ko": "Korea",
- "es": "Spanyol",
- "hi": "Hindi",
- "pt": "Portugis",
- "fr": "Prancis",
"ar": "Arab",
"bn": "Bengali",
- "ur": "Urdu",
- "id": "Indonesia",
"de": "Jerman",
- "system": "Sistem"
+ "en": "Inggris",
+ "es": "Spanyol",
+ "fa": "Persia",
+ "fil": "Filipino",
+ "fr": "Prancis",
+ "hi": "Hindi",
+ "id": "Indonesia",
+ "it": "Italia",
+ "ja": "Jepang",
+ "ko": "Korea",
+ "mr": "Marathi",
+ "ms": "Melayu",
+ "nl": "Belanda",
+ "pl": "Polandia",
+ "pt": "Portugis",
+ "ro": "Rumania",
+ "ru": "Rusia",
+ "sw": "Swahili",
+ "system": "Sistem",
+ "ta": "Tamil",
+ "te": "Telugu",
+ "th": "Thai",
+ "tr": "Turki",
+ "uk": "Ukraina",
+ "ur": "Urdu",
+ "vi": "Vietnam",
+ "zh": "Tionghoa"
},
"searchPlaceholder": "Cari bahasa...",
"selectPlaceholder": "Pilih bahasa aplikasi...",
diff --git a/src/features/localization/renderer/locales/id/settings.json b/src/features/localization/renderer/locales/id/settings.json
index 5f20f85c..ff8eaa69 100644
--- a/src/features/localization/renderer/locales/id/settings.json
+++ b/src/features/localization/renderer/locales/id/settings.json
@@ -68,12 +68,12 @@
"useInTeamPicker": "Gunakan dalam tim picker",
"testInProgress": "Pengujian model sudah berjalan.",
"validationContextRequired": "Pilih validation context di atas untuk mengaktifkan Test dan Set default. Menyimpan untuk team picker hanya menyimpan route untuk tim baru.",
+ "actionsUnavailable": "Aksi sementara tidak tersedia.",
"defaultSaveInProgress": "OpenCode default sedang disimpan.",
"routeUnavailableAuth": "Provider ini memerlukan autentikasi sebelum model ini dapat digunakan.",
"routeUnavailableFailed": "Model route ini gagal pada execution test terakhir.",
- "routeUnavailableUnknown": "Model ini adalah OpenCode default saat ini, tetapi belum tersedia di live catalog.",
- "actionsUnavailable": "Aksi sementara tidak tersedia.",
- "routeUnavailableGeneric": "Model route ini tidak dapat digunakan sekarang."
+ "routeUnavailableGeneric": "Model route ini tidak dapat digunakan sekarang.",
+ "routeUnavailableUnknown": "Model ini adalah OpenCode default saat ini, tetapi belum tersedia di live catalog."
},
"providers": {
"catalog": "Katalog penyedia OpenCode",
diff --git a/src/features/localization/renderer/locales/id/team.json b/src/features/localization/renderer/locales/id/team.json
index 2d3fa801..912cca48 100644
--- a/src/features/localization/renderer/locales/id/team.json
+++ b/src/features/localization/renderer/locales/id/team.json
@@ -1496,7 +1496,7 @@
},
"status": {
"reusedCrossTeamRequest": "Mengulang permintaan tim-cross- baru-baru ini",
- "teamOffline": "Tim luring"
+ "teamOffline": "offline"
},
"revision": {
"editing": "Mengedit pesan sebelumnya",
diff --git a/src/features/localization/renderer/locales/it/common.json b/src/features/localization/renderer/locales/it/common.json
new file mode 100644
index 00000000..53cced5c
--- /dev/null
+++ b/src/features/localization/renderer/locales/it/common.json
@@ -0,0 +1,927 @@
+{
+ "actions": {
+ "cancel": "Annulla",
+ "close": "Chiudi",
+ "copied": "Copiato",
+ "copyUrl": "Copia URL",
+ "open": "Apri",
+ "reveal": "Mostra",
+ "retry": "Riprova",
+ "save": "Salva",
+ "showLess": "Mostra di meno",
+ "showMore": "Mostra di più",
+ "refresh": "Aggiorna",
+ "reset": "Reimposta",
+ "copyToClipboard": "Copia negli appunti",
+ "moreActions": "Altre azioni",
+ "closeDialog": "Chiudi finestra di dialogo",
+ "goToDashboard": "Vai alla dashboard",
+ "or": "oppure",
+ "hide": "Nascondi",
+ "resetSelection": "Reimposta selezione"
+ },
+ "code": {
+ "line": "riga {{line}}",
+ "lines": "righe {{from}}-{{to}}",
+ "moreLines": "(altre {{count}} righe...)",
+ "moreLines_few": "(altre {{count}} righe...)",
+ "moreLines_many": "(altre {{count}} righe...)",
+ "moreLines_one": "(ancora {{count}} riga...)",
+ "moreLines_other": "(altre {{count}} righe...)",
+ "code": "Codice",
+ "preview": "Anteprima",
+ "markdownPreview": "Anteprima Markdown",
+ "linesParenthesized": "(righe {{from}}-{{to}})",
+ "mermaidSyntaxError": "Errore di sintassi Mermaid"
+ },
+ "contextBadge": {
+ "badge": "Contesto",
+ "breakdown": {
+ "text": "Testo",
+ "thinking": "Ragionamento"
+ },
+ "detailsAria": "Dettagli dell'iniezione di contesto",
+ "sectionSummary": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sections": {
+ "claudeMdFiles": "File CLAUDE.md",
+ "mentionedFiles": "File menzionati",
+ "taskCoordination": "Coordinamento dei task",
+ "thinkingText": "Ragionamento + Testo",
+ "toolOutputs": "Output degli strumenti",
+ "userMessages": "Messaggi utente"
+ },
+ "title": "Nuovo contesto iniettato in questo turno",
+ "tokenCount": "~{{tokens}} token",
+ "totalNewTokens": "Totale nuovi token",
+ "turn": "Turno {{turn}}",
+ "sectionSummary_few": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sectionSummary_many": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sectionSummary_one": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sectionSummary_other": "{{title}} ({{count}}) ~{{tokens}} token"
+ },
+ "locales": {
+ "emptyMessage": "Nessuna lingua trovata.",
+ "names": {
+ "ar": "Arabo",
+ "bn": "Bengalese",
+ "de": "Tedesco",
+ "en": "Inglese",
+ "es": "Spagnolo",
+ "fa": "Persiano",
+ "fil": "Filippino",
+ "fr": "Francese",
+ "hi": "Hindi",
+ "id": "Indonesiano",
+ "it": "Italiano",
+ "ja": "Giapponese",
+ "ko": "Coreano",
+ "mr": "Marathi",
+ "ms": "Malese",
+ "nl": "Olandese",
+ "pl": "Polacco",
+ "pt": "Portoghese",
+ "ro": "Rumeno",
+ "ru": "Russo",
+ "sw": "Swahili",
+ "system": "Sistema",
+ "ta": "Tamil",
+ "te": "Telugu",
+ "th": "Thailandese",
+ "tr": "Turco",
+ "uk": "Ucraino",
+ "ur": "Urdu",
+ "vi": "Vietnamita",
+ "zh": "Cinese"
+ },
+ "searchPlaceholder": "Cerca lingua...",
+ "selectPlaceholder": "Seleziona la lingua dell'app...",
+ "systemWithResolved": "Sistema - {{locale}}"
+ },
+ "members": {
+ "emptyMessage": "Nessun membro trovato.",
+ "searchPlaceholder": "Cerca membri...",
+ "unassigned": "Non assegnato",
+ "teammateFallback": "membro del team"
+ },
+ "providerRuntime": {
+ "codex": {
+ "install": {
+ "checking": "Controllo",
+ "downloading": "Download",
+ "installCli": "Installa Codex CLI",
+ "installing": "Installazione",
+ "retryInstall": "Riprova installazione"
+ }
+ }
+ },
+ "search": {
+ "noMatchingSuggestions": "Nessun suggerimento corrispondente",
+ "searching": "Ricerca in corso...",
+ "searchingFiles": "Ricerca file...",
+ "findInConversation": "Trova nella conversazione...",
+ "resultCount": "{{current}} di {{total}}",
+ "resultCountCapped": "{{current}} di {{total}}+",
+ "noResults": "Nessun risultato",
+ "previousResultShortcut": "Risultato precedente (Maiusc+Invio)",
+ "nextResultShortcut": "Risultato successivo (Invio)",
+ "closeShortcut": "Chiudi (Esc)",
+ "nothingFound": "Nessun risultato trovato",
+ "placeholder": "Cerca..."
+ },
+ "schedules": {
+ "actions": {
+ "addSchedule": "Aggiungi pianificazione",
+ "clearFilters": "Cancella filtri",
+ "createSchedule": "Crea pianificazione",
+ "delete": "Elimina",
+ "edit": "Modifica",
+ "pause": "Sospendi",
+ "resume": "Riprendi",
+ "runNow": "Esegui ora"
+ },
+ "empty": {
+ "description": "Crea una pianificazione su qualsiasi team per automatizzare l'esecuzione dei task di Claude con espressioni cron. Le pianificazioni di tutti i team appariranno qui.",
+ "noMatches": "Nessuna pianificazione corrisponde ai filtri attuali",
+ "title": "Nessun task pianificato"
+ },
+ "filters": {
+ "allTeams": "Tutti i team"
+ },
+ "item": {
+ "loadingRunHistory": "Caricamento della cronologia di esecuzione...",
+ "nextRun": "Successiva: {{value}}",
+ "noRunsYet": "Ancora nessuna esecuzione"
+ },
+ "loading": "Caricamento delle pianificazioni...",
+ "searchPlaceholder": "Cerca pianificazioni...",
+ "status": {
+ "active": "Attive",
+ "all": "Tutte",
+ "disabled": "Disabilitate",
+ "paused": "Sospese"
+ },
+ "title": "Pianificazioni"
+ },
+ "sessions": {
+ "actions": {
+ "hide": "Nascondi",
+ "pin": "Fissa",
+ "unhide": "Mostra"
+ },
+ "empty": {
+ "noMatchingSessions": "Nessuna sessione corrispondente",
+ "noMatchingSessionsDescription": "Questo progetto non ha ancora sessioni corrispondenti.",
+ "noMatchingSessionsFiltered": "Prova un'altra query o reimposta il filtro del provider.",
+ "noSessions": "Nessuna sessione trovata",
+ "noSessionsDescription": "Questo progetto non ha ancora sessioni",
+ "selectProject": "Seleziona un progetto per visualizzare le sessioni"
+ },
+ "errors": {
+ "loading": "Errore durante il caricamento delle sessioni"
+ },
+ "loadedMatchingMore": "{{count}} sessioni corrispondenti caricate finora - scorri verso il basso per caricarne altre.",
+ "loadingMore": "Caricamento di altre sessioni...",
+ "pinned": "Fissate",
+ "scrollToLoadMore": "Scorri per caricarne altre",
+ "search": {
+ "clear": "Cancella ricerca sessioni",
+ "placeholder": "Cerca sessioni..."
+ },
+ "selection": {
+ "cancel": "Annulla selezione",
+ "exitMode": "Esci dalla modalità selezione",
+ "hideSelected": "Nascondi sessioni selezionate",
+ "pinSelected": "Fissa sessioni selezionate",
+ "selectSessions": "Seleziona sessioni",
+ "selected": "{{count}} selezionate",
+ "unhideSelected": "Mostra sessioni selezionate",
+ "selected_few": "{{count}} selezionate",
+ "selected_many": "{{count}} selezionate",
+ "selected_one": "{{count}} selezionata",
+ "selected_other": "{{count}} selezionate"
+ },
+ "sort": {
+ "byContext": "Per contesto",
+ "byContextTooltip": "Ordina per consumo di contesto",
+ "byRecentTooltip": "Ordina per più recenti",
+ "contextLoadedOnly": "L'ordinamento per contesto classifica solo le sessioni caricate."
+ },
+ "title": "Sessioni",
+ "visibility": {
+ "hideHidden": "Nascondi sessioni nascoste",
+ "showHidden": "Mostra sessioni nascoste"
+ },
+ "worktree": {
+ "switch": "Cambia worktree"
+ },
+ "loadedMatchingMore_few": "{{count}} sessioni corrispondenti caricate finora - scorri verso il basso per caricarne altre.",
+ "loadedMatchingMore_many": "{{count}} sessioni corrispondenti caricate finora - scorri verso il basso per caricarne altre.",
+ "loadedMatchingMore_one": "{{count}} sessione corrispondente caricata finora - scorri verso il basso per caricarne altre.",
+ "loadedMatchingMore_other": "{{count}} sessioni corrispondenti caricate finora - scorri verso il basso per caricarne altre.",
+ "failedToLoad": "Impossibile caricare la sessione",
+ "loading": "Caricamento della sessione...",
+ "filter": {
+ "title": "Filtra sessioni"
+ },
+ "count": "{{count}} sessioni",
+ "count_one": "{{count}} sessione",
+ "count_other": "{{count}} sessioni",
+ "count_few": "{{count}} sessioni",
+ "count_many": "{{count}} sessioni",
+ "inProgress": "Sessione in corso..."
+ },
+ "states": {
+ "loading": "Caricamento...",
+ "offline": "Offline",
+ "online": "Online",
+ "unknown": "Sconosciuto",
+ "error": "Errore"
+ },
+ "markdown": {
+ "imageFallback": "[Immagine: {{label}}]",
+ "largeContentNotice": "Il contenuto è molto grande ({{count}} caratteri). Viene mostrata l'anteprima grezza per mantenere reattiva l'interfaccia.",
+ "largeContentTitle": "I contenuti di grandi dimensioni vengono mostrati come grezzi per evitare il blocco dell'interfaccia",
+ "raw": "Grezzo",
+ "rawPreview": "Anteprima grezza",
+ "renderMarkdown": "Visualizza markdown",
+ "showAll": "Mostra tutto",
+ "showMore": "Mostra di più",
+ "showRaw": "Mostra grezzo",
+ "showingChars": "Visualizzati {{shown}} / {{total}} caratteri",
+ "largeContentNotice_few": "Il contenuto è molto grande ({{count}} caratteri). Viene mostrata l'anteprima grezza per mantenere reattiva l'interfaccia.",
+ "largeContentNotice_many": "Il contenuto è molto grande ({{count}} caratteri). Viene mostrata l'anteprima grezza per mantenere reattiva l'interfaccia.",
+ "largeContentNotice_one": "Il contenuto è molto grande ({{count}} carattere). Viene mostrata l'anteprima grezza per mantenere reattiva l'interfaccia.",
+ "largeContentNotice_other": "Il contenuto è molto grande ({{count}} caratteri). Viene mostrata l'anteprima grezza per mantenere reattiva l'interfaccia."
+ },
+ "terminal": {
+ "checkOutputForDetails": "Controlla l'output del terminale qui sopra per i dettagli",
+ "closingInSeconds": "Chiusura tra {{count}}s...",
+ "closingInSeconds_few": "Chiusura tra {{count}}s...",
+ "closingInSeconds_many": "Chiusura tra {{count}}s...",
+ "closingInSeconds_one": "Chiusura tra {{count}}s...",
+ "closingInSeconds_other": "Chiusura tra {{count}}s...",
+ "completedSuccessfully": "Completato correttamente",
+ "exitCode": "(codice di uscita {{code}})",
+ "processFailed": "Processo non riuscito",
+ "title": "Terminale"
+ },
+ "tokens": {
+ "accumulatedWithoutDuplication": "Accumulato sull'intera sessione senza duplicazione",
+ "cacheRead": "Lettura cache",
+ "cacheWrite": "Scrittura cache",
+ "costUsd": "Costo (USD)",
+ "inputTokens": "Token di input",
+ "model": "Modello",
+ "outputTokens": "Token di output",
+ "phase": "Fase {{phase}}/{{total}}",
+ "promptInputShare": "{{percent}}% dell'input del prompt",
+ "taskCoordination": "Coordinamento dei task",
+ "thinkingText": "Ragionamento + Testo",
+ "toolOutputs": "Output degli strumenti",
+ "total": "Totale",
+ "userMessages": "Messaggi utente",
+ "visibleContext": "Contesto visibile",
+ "includesClaudeMd": "incl. CLAUDE.md ×{{count}}",
+ "claudeMd": "CLAUDE.md",
+ "mentionedFiles": "@file",
+ "percentValue": "({{percent}}%)",
+ "approxTokens": "~{{tokens}} token",
+ "approxTokensParenthesized": "(~{{tokens}})"
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Copia team",
+ "createTeam": "Crea team",
+ "deleteForever": "Elimina definitivamente",
+ "deletePermanently": "Elimina in modo permanente",
+ "deleteTeam": "Elimina team",
+ "launching": "Avvio in corso...",
+ "launchTeam": "Avvia team",
+ "relaunchTeam": "Riavvia team",
+ "restore": "Ripristina",
+ "restoreTeam": "Ripristina team",
+ "retry": "Riprova",
+ "stopTeam": "Ferma team",
+ "stopping": "Arresto in corso..."
+ },
+ "status": {
+ "active": "Attivo",
+ "deleted": "Eliminato",
+ "launching": "Avvio in corso...",
+ "offline": "Offline",
+ "partialFailure": "Avvio interrotto a metà",
+ "partialPending": "Bootstrap in attesa",
+ "partialSkipped": "Avvio: membro saltato",
+ "running": "In esecuzione"
+ },
+ "partial": {
+ "pending": "L'ultimo avvio è ancora in fase di riconciliazione.",
+ "skipped": "L'ultimo avvio ha saltato dei membri del team.",
+ "skippedWithCount": "L'ultimo avvio ha saltato {{count}}/{{expected}} membro del team.",
+ "skippedWithCount_few": "L'ultimo avvio ha saltato {{count}}/{{expected}} membri del team.",
+ "skippedWithCount_many": "L'ultimo avvio ha saltato {{count}}/{{expected}} membri del team.",
+ "skippedWithCount_one": "L'ultimo avvio ha saltato {{count}}/{{expected}} membro del team.",
+ "skippedWithCount_other": "L'ultimo avvio ha saltato {{count}}/{{expected}} membri del team.",
+ "stopped": "L'ultimo avvio si è fermato prima che tutti i membri si unissero.",
+ "stoppedWithCount": "L'ultimo avvio si è fermato prima che {{count}}/{{expected}} membro del team si unisse.",
+ "stoppedWithCount_few": "L'ultimo avvio si è fermato prima che {{count}}/{{expected}} membri del team si unissero.",
+ "stoppedWithCount_many": "L'ultimo avvio si è fermato prima che {{count}}/{{expected}} membri del team si unissero.",
+ "stoppedWithCount_one": "L'ultimo avvio si è fermato prima che {{count}}/{{expected}} membro del team si unisse.",
+ "stoppedWithCount_other": "L'ultimo avvio si è fermato prima che {{count}}/{{expected}} membri del team si unissero."
+ },
+ "noDescription": "Nessuna descrizione",
+ "solo": "Solo",
+ "membersCount": "Membri: {{count}}",
+ "membersCount_few": "Membri: {{count}}",
+ "membersCount_many": "Membri: {{count}}",
+ "membersCount_one": "Membro: {{count}}",
+ "membersCount_other": "Membri: {{count}}",
+ "all": "Tutti",
+ "moreCount": "+{{count}} altri",
+ "moreCount_one": "+{{count}} altro",
+ "moreCount_other": "+{{count}} altri",
+ "moreCount_few": "+{{count}} altri",
+ "moreCount_many": "+{{count}} altri"
+ },
+ "runtimeProvider": {
+ "defaults": {
+ "scopeDescriptionAllProjects": "Impostazione predefinita per ogni progetto che non ha un proprio override OpenCode.",
+ "scopeDescriptionProject": "Sovrascrivi solo il progetto selezionato. I team in esecuzione non vengono modificati.",
+ "setAllProjectsDefault": "Imposta predefinito per tutti i progetti",
+ "setProjectDefault": "Imposta predefinito di progetto",
+ "validationContext": "Contesto di convalida",
+ "projectOverrideContext": "Contesto di override del progetto",
+ "selectProjectHint": "Seleziona un progetto prima di testare i modelli locali o salvare le impostazioni predefinite.",
+ "allProjectsHint": "I test usano {{project}}. L'impostazione predefinita si applica a meno che un progetto non abbia un override.",
+ "projectHint": "Il salvataggio sovrascrive solo {{project}}."
+ }
+ },
+ "sessionContext": {
+ "header": {
+ "title": "Contesto",
+ "closePanel": "Chiudi pannello",
+ "phase": "Fase:",
+ "current": "Attuale",
+ "view": "Vista:",
+ "category": "Categoria",
+ "bySize": "Per dimensione"
+ },
+ "metrics": {
+ "unavailable": "Non disponibile",
+ "contextUsed": "Contesto usato",
+ "promptInput": "Input del prompt",
+ "visibleContext": "Contesto visibile",
+ "ofContext": "del contesto",
+ "ofPrompt": "del prompt",
+ "codexTelemetryUnavailable": "L'utilizzo lato prompt di Codex non è ancora esposto dalla telemetria del runtime attuale, quindi Input del prompt e Contesto usato restano non disponibili invece di mostrare un falso zero.",
+ "sessionCost": "Costo sessione:",
+ "parentPlus": "genitore +",
+ "subagents": "sottoagenti",
+ "details": "dettagli"
+ },
+ "help": {
+ "contextUsed": {
+ "title": "Contesto usato",
+ "description": "Input del prompt più token di output che attualmente occupano la finestra di contesto del modello."
+ },
+ "promptInput": {
+ "title": "Input del prompt",
+ "description": "Token inviati al modello prima della generazione. Per Claude include `input_tokens + cache_creation_input_tokens + cache_read_input_tokens`."
+ },
+ "visibleContext": {
+ "title": "Contesto visibile",
+ "description": "Il sottoinsieme ispezionabile dell'input del prompt: file, CLAUDE.md, output degli strumenti, messaggi utente e iniezioni simili che puoi ottimizzare direttamente."
+ },
+ "availability": {
+ "title": "Disponibilità",
+ "description": "Se un runtime di provider non espone ancora l'utilizzo lato prompt, il pannello mostra le metriche come non disponibili invece di fingere che siano zero."
+ }
+ },
+ "items": {
+ "turn": "@Turno {{turn}}",
+ "tokensApprox": "~{{tokens}} token",
+ "toolsCount": "{{count}} strumenti",
+ "toolsCount_one": "{{count}} strumento",
+ "toolsCount_other": "{{count}} strumenti",
+ "toolsCount_few": "{{count}} strumenti",
+ "toolsCount_many": "{{count}} strumenti",
+ "itemsCount": "{{count}} elementi",
+ "itemsCount_one": "{{count}} elemento",
+ "itemsCount_other": "{{count}} elementi",
+ "itemsCount_few": "{{count}} elementi",
+ "itemsCount_many": "{{count}} elementi",
+ "missing": "mancante",
+ "thinking": "Ragionamento",
+ "text": "Testo"
+ },
+ "empty": "Nessuna iniezione di contesto rilevata in questa sessione",
+ "view": {
+ "grouped": "Raggruppato",
+ "flat": "Piatto"
+ },
+ "claudeMdFiles": "File CLAUDE.md",
+ "mentionedFiles": "File menzionati"
+ },
+ "chat": {
+ "subagent": {
+ "fallbackName": "Sottoagente",
+ "shutdownConfirmed": "Arresto confermato",
+ "summary": {
+ "tools": "{{count}} strumenti",
+ "tools_one": "{{count}} strumento",
+ "tools_other": "{{count}} strumenti",
+ "tools_few": "{{count}} strumenti",
+ "tools_many": "{{count}} strumenti"
+ },
+ "meta": {
+ "type": "Tipo",
+ "duration": "Durata",
+ "model": "Modello",
+ "id": "ID"
+ },
+ "metrics": {
+ "contextWindow": "Finestra di contesto",
+ "contextUsage": "Utilizzo del contesto",
+ "mainContext": "Contesto principale",
+ "totalOutput": "Output totale",
+ "turns": "({{count}} turni)",
+ "turns_one": "({{count}} turno)",
+ "turns_other": "({{count}} turni)",
+ "subagentContext": "Contesto del sottoagente",
+ "phase": "Fase {{phase}}",
+ "turns_few": "({{count}} turni)",
+ "turns_many": "({{count}} turni)"
+ },
+ "trace": {
+ "title": "Traccia di esecuzione"
+ }
+ },
+ "user": {
+ "you": "Tu",
+ "showMore": "Mostra di più",
+ "showLess": "Mostra di meno",
+ "backgroundTask": "Task in background",
+ "exitCode": "uscita {{code}}",
+ "imagesAttached": "{{count}} immagini allegate",
+ "imagesAttached_one": "{{count}} immagine allegata",
+ "imagesAttached_few": "{{count}} immagini allegate",
+ "imagesAttached_many": "{{count}} immagini allegate",
+ "imagesAttached_other": "{{count}} immagini allegate"
+ },
+ "compact": {
+ "toggle": "Attiva/disattiva contenuto compattato",
+ "contextCompacted": "Contesto compattato",
+ "freedTokens": "({{tokens}} liberati)",
+ "phase": "Fase {{phase}}",
+ "conversationCompacted": "Conversazione compattata",
+ "summary": "I messaggi precedenti sono stati riassunti per risparmiare contesto. La cronologia completa della conversazione è conservata nel file di sessione.",
+ "compacted": "Compattato"
+ },
+ "executionTrace": {
+ "empty": "Nessun elemento di esecuzione",
+ "nested": "Annidato: {{name}}",
+ "input": "Input"
+ },
+ "items": {
+ "empty": "Nessun elemento da visualizzare"
+ },
+ "tools": {
+ "teammateSpawned": "Membro del team generato",
+ "shutdownRequested": "Arresto richiesto ->",
+ "noResultReceived": "Nessun risultato ricevuto",
+ "duration": "Durata: {{duration}}",
+ "result": "Risultato",
+ "write": {
+ "createdFile": "File creato",
+ "wroteToFile": "Scritto su file"
+ },
+ "skill": {
+ "instructions": "Istruzioni della skill",
+ "unknown": "Skill sconosciuta"
+ }
+ },
+ "lastOutput": {
+ "requestInterrupted": "Richiesta interrotta dall'utente",
+ "planReadyForApproval": "Piano pronto per l'approvazione"
+ },
+ "empty": {
+ "icon": "💬",
+ "title": "Nessuna cronologia della conversazione",
+ "description": "Questa sessione non contiene ancora alcun messaggio."
+ },
+ "context": {
+ "remainingPercent": "({{percent}}% rimanente)",
+ "count": "Contesto ({{count}})",
+ "count_one": "Contesto ({{count}})",
+ "count_other": "Contesto ({{count}})",
+ "count_few": "Contesto ({{count}})",
+ "count_many": "Contesto ({{count}})"
+ },
+ "scrollToBottom": "Scorri in fondo",
+ "bottom": "Fondo",
+ "teammateMessage": {
+ "message": "Messaggio",
+ "resent": "Reinviato",
+ "fallback": "Messaggio del membro del team"
+ },
+ "system": {
+ "label": "Sistema"
+ }
+ },
+ "tmuxInstaller": {
+ "summaryTitle": "tmux non è installato",
+ "detectedOs": "Sistema operativo rilevato: {{os}}",
+ "runtimePath": "Percorso del runtime: {{path}}",
+ "phase": "Fase: {{phase}}",
+ "actions": {
+ "cancel": "Annulla",
+ "manualGuide": "Guida manuale",
+ "hideSetupSteps": "Nascondi i passaggi di configurazione",
+ "showSetupSteps": "Mostra i passaggi di configurazione ({{count}})",
+ "showSetupSteps_one": "Mostra il passaggio di configurazione ({{count}})",
+ "showSetupSteps_other": "Mostra i passaggi di configurazione ({{count}})",
+ "recheck": "Ricontrolla",
+ "showSetupSteps_few": "Mostra i passaggi di configurazione ({{count}})",
+ "showSetupSteps_many": "Mostra i passaggi di configurazione ({{count}})"
+ },
+ "installerProgress": "Avanzamento dell'installazione",
+ "input": {
+ "placeholder": "Invia input al programma di installazione",
+ "send": "Invia input",
+ "passwordNotice": "L'input della password viene inviato direttamente al terminale del programma di installazione e non viene aggiunto all'output del log."
+ },
+ "details": {
+ "show": "Mostra dettagli",
+ "hide": "Nascondi dettagli"
+ }
+ },
+ "commandPalette": {
+ "noRecentActivity": "Nessuna attività recente",
+ "sessionsCount": "{{count}} sessioni",
+ "sessionsCount_one": "{{count}} sessione",
+ "sessionsCount_other": "{{count}} sessioni",
+ "mode": {
+ "searchProjects": "Cerca progetti",
+ "searchAcrossProjects": "Cerca in tutti i progetti",
+ "searchInProject": "Cerca nel progetto"
+ },
+ "currentProject": "Progetto attuale",
+ "global": "Globale",
+ "placeholders": {
+ "projects": "Cerca progetti...",
+ "conversations": "Cerca conversazioni..."
+ },
+ "empty": {
+ "noProjectsForQuery": "Nessun progetto trovato per \"{{query}}\"",
+ "noProjects": "Nessun progetto trovato",
+ "minChars": "Digita almeno 2 caratteri per cercare",
+ "noFastResults": "Nessun risultato rapido nelle sessioni recenti per \"{{query}}\"",
+ "noResults": "Nessun risultato trovato per \"{{query}}\""
+ },
+ "footer": {
+ "projectsCount": "{{count}} progetti",
+ "projectsCount_one": "{{count}} progetto",
+ "projectsCount_other": "{{count}} progetti",
+ "results": "{{count}} {{speed}}risultati",
+ "results_one": "{{count}} {{speed}}risultato",
+ "results_other": "{{count}} {{speed}}risultati",
+ "resultsAcrossProjects": "{{count}} {{speed}}risultati in tutti i progetti",
+ "resultsAcrossProjects_one": "{{count}} {{speed}}risultato in tutti i progetti",
+ "resultsAcrossProjects_other": "{{count}} {{speed}}risultati in tutti i progetti",
+ "fastPrefix": "rapidi ",
+ "typeToSearch": "Digita per cercare",
+ "navigate": "naviga",
+ "select": "seleziona",
+ "open": "apri",
+ "global": "globale",
+ "close": "chiudi",
+ "results_few": "{{count}} {{speed}}risultati",
+ "results_many": "{{count}} {{speed}}risultati",
+ "resultsAcrossProjects_few": "{{count}} {{speed}}risultati in tutti i progetti",
+ "resultsAcrossProjects_many": "{{count}} {{speed}}risultati in tutti i progetti",
+ "projectsCount_few": "{{count}} progetti",
+ "projectsCount_many": "{{count}} progetti",
+ "upDownKey": "↑↓",
+ "escapeKey": "esc"
+ },
+ "sessionsCount_few": "{{count}} sessioni",
+ "sessionsCount_many": "{{count}} sessioni"
+ },
+ "tasksPanel": {
+ "title": "Task",
+ "searchPlaceholder": "Cerca task...",
+ "pinned": "Fissati",
+ "groupByLabel": "Raggruppa per:",
+ "groupByAria": "Raggruppa per",
+ "groupModes": {
+ "none": "Nessuno",
+ "project": "Progetto",
+ "time": "Tempo"
+ },
+ "showArchived": "Mostra archiviati",
+ "hideArchived": "Nascondi archiviati",
+ "empty": {
+ "noMatchingTasks": "Nessun task corrispondente",
+ "noTasks": "Nessun task trovato"
+ },
+ "teamLabel": "Team: {{team}}",
+ "showMore": "Mostra di più",
+ "showLess": "Mostra di meno",
+ "deleteConfirm": {
+ "title": "Elimina task",
+ "message": "Spostare il task #{{taskId}} nel cestino?",
+ "confirmLabel": "Elimina",
+ "cancelLabel": "Annulla"
+ },
+ "deleteFailed": {
+ "title": "Impossibile eliminare il task",
+ "fallbackMessage": "Si è verificato un errore imprevisto",
+ "confirmLabel": "OK"
+ },
+ "sort": {
+ "byTime": "Per tempo",
+ "byUnread": "Per non letti",
+ "byProject": "Per progetto",
+ "byTeam": "Per team"
+ }
+ },
+ "toolViewer": {
+ "input": "Input",
+ "replaceAll": "(sostituisci tutto)",
+ "noInputRecorded": "Nessun input registrato per questa chiamata di strumento.",
+ "agent": {
+ "action": "azione",
+ "teammate": "membro del team",
+ "team": "team",
+ "runtime": "runtime",
+ "type": "tipo",
+ "startupInstructionsHidden": "Le istruzioni di avvio sono nascoste nell'interfaccia."
+ }
+ },
+ "taskContextMenu": {
+ "unpin": "Sblocca",
+ "pin": "Fissa",
+ "rename": "Rinomina",
+ "markUnread": "Segna come non letto",
+ "unarchive": "Ripristina da archivio",
+ "archive": "Archivia",
+ "deleteTask": "Elimina task"
+ },
+ "updateDialog": {
+ "closeDialog": "Chiudi finestra di dialogo",
+ "updateAvailable": "Aggiornamento disponibile",
+ "updateReady": "Aggiornamento pronto",
+ "noReleaseNotes": "Nessuna nota di rilascio disponibile.",
+ "viewOnGitHub": "Vedi su GitHub",
+ "later": "Più tardi",
+ "restartNow": "Riavvia ora",
+ "download": "Scarica"
+ },
+ "errorBoundary": {
+ "title": "Qualcosa è andato storto",
+ "description": "Si è verificato un errore imprevisto nell'applicazione. Puoi provare a ricaricare la pagina o reimpostare lo stato di errore.",
+ "componentStack": "Stack dei componenti",
+ "tryAgain": "Riprova",
+ "copied": "Copiato",
+ "copyErrorDetails": "Copia dettagli dell'errore",
+ "reportBugOnGitHub": "Segnala bug su GitHub",
+ "reloadApp": "Ricarica app",
+ "diagnosticsNotice": "Le segnalazioni di bug su GitHub e la diagnostica copiata includono il messaggio di errore, le tracce dello stack, la versione dell'app, la scheda attiva, il team selezionato, il contesto del task e i dettagli dell'ambiente."
+ },
+ "runtimeBackendSelector": {
+ "label": "Backend del runtime",
+ "resolved": "Risolto: {{backend}}",
+ "current": "Attuale",
+ "recommended": "Consigliato",
+ "unavailable": "Non disponibile",
+ "cannotSelectYet": "Questo backend non può ancora essere selezionato.",
+ "auto": "Auto",
+ "autoCurrently": "Auto (attuale: {{backend}})",
+ "audience": {
+ "internal": "Interno"
+ },
+ "states": {
+ "locked": "Bloccato",
+ "disabled": "Disabilitato",
+ "authRequired": "Autenticazione richiesta",
+ "runtimeMissing": "Runtime mancante",
+ "degraded": "Degradato",
+ "unavailable": "Non disponibile"
+ }
+ },
+ "providerModelBadges": {
+ "checking": "Controllo",
+ "unavailable": "Non disponibile",
+ "checkFailed": "Controllo non riuscito",
+ "free": "Gratuito",
+ "freeTooltip": "Segnalato dai metadati di OpenCode. Disponibilità e limiti possono cambiare."
+ },
+ "taskFilters": {
+ "status": "Stato",
+ "clearAll": "Cancella tutto",
+ "selectAll": "Seleziona tutto",
+ "team": "Team",
+ "allTeams": "Tutti i team",
+ "searchTeams": "Cerca team...",
+ "noTeamsFound": "Nessun team trovato",
+ "project": "Progetto",
+ "allProjects": "Tutti i progetti",
+ "searchProjects": "Cerca progetti...",
+ "noProjects": "Nessun progetto",
+ "comments": "Commenti",
+ "apply": "Applica",
+ "read": {
+ "all": "Tutti",
+ "unread": "Non letti",
+ "read": "Letti"
+ },
+ "statusOptions": {
+ "todo": "DA FARE",
+ "inProgress": "IN CORSO",
+ "needsFix": "DA CORREGGERE",
+ "done": "FATTO",
+ "review": "REVISIONE",
+ "approved": "APPROVATO"
+ }
+ },
+ "sessionItem": {
+ "totalContext": "Contesto totale: {{tokens}} token",
+ "context": "Contesto: {{tokens}}",
+ "phase": "Fase {{phase}}:",
+ "compactedTo": "(compattato a {{tokens}})"
+ },
+ "notifications": {
+ "row": {
+ "team": "team",
+ "subagent": "sottoagente",
+ "markAsRead": "Segna come letto",
+ "delete": "Elimina",
+ "viewInSession": "Visualizza nella sessione"
+ },
+ "title": "Notifiche",
+ "loading": "Caricamento delle notifiche...",
+ "actions": {
+ "markFilteredAsRead": "Segna i filtrati come letti",
+ "markAllAsRead": "Segna tutti come letti",
+ "markFilteredRead": "Segna filtrati letti",
+ "markAllRead": "Segna tutti letti",
+ "clearFilteredNotifications": "Cancella le notifiche filtrate",
+ "clearAllNotifications": "Cancella tutte le notifiche",
+ "clickToConfirm": "Fai clic per confermare",
+ "clearFiltered": "Cancella filtrate",
+ "clearAll": "Cancella tutte"
+ },
+ "counts": {
+ "unreadInFilter": "{{count}} non letti nel filtro",
+ "unreadInFilter_one": "{{count}} non letto nel filtro",
+ "unreadInFilter_few": "{{count}} non letti nel filtro",
+ "unreadInFilter_many": "{{count}} non letti nel filtro",
+ "unreadInFilter_other": "{{count}} non letti nel filtro",
+ "inFilter": "{{count}} nel filtro",
+ "inFilter_one": "{{count}} nel filtro",
+ "inFilter_few": "{{count}} nel filtro",
+ "inFilter_many": "{{count}} nel filtro",
+ "inFilter_other": "{{count}} nel filtro",
+ "unread": "{{count}} non letti",
+ "unread_one": "{{count}} non letto",
+ "unread_few": "{{count}} non letti",
+ "unread_many": "{{count}} non letti",
+ "unread_other": "{{count}} non letti",
+ "total": "{{count}} totali",
+ "total_one": "{{count}} totale",
+ "total_few": "{{count}} totali",
+ "total_many": "{{count}} totali",
+ "total_other": "{{count}} totali"
+ },
+ "filters": {
+ "other": "Altro"
+ },
+ "empty": {
+ "noMatching": "Nessuna notifica corrispondente",
+ "noNotifications": "Nessuna notifica",
+ "tryDifferentFilter": "Prova un filtro diverso",
+ "allCaughtUp": "Sei in pari con tutto!"
+ }
+ },
+ "updates": {
+ "restartToUpdate": "Riavvia per aggiornare",
+ "updateApp": "Aggiorna app",
+ "downloadedRestartTooltip": "Aggiornamento scaricato, riavvia per applicare",
+ "newVersionAvailable": "Nuova versione disponibile",
+ "updatingApp": "Aggiornamento dell'app",
+ "updateReady": "Aggiornamento pronto",
+ "restartNow": "Riavvia ora"
+ },
+ "layout": {
+ "github": "GitHub",
+ "discord": "Discord",
+ "expandSidebar": "Espandi barra laterale",
+ "collapseSidebarShortcut": "Comprimi barra laterale ({{shortcut}})",
+ "sidebarView": "Vista barra laterale",
+ "resizeSidebar": "Ridimensiona barra laterale",
+ "closeTab": "Chiudi scheda",
+ "openedFromSearch": "Aperto dalla ricerca",
+ "pinnedSession": "Sessione fissata",
+ "jumpToSection": "Vai alla sezione",
+ "newTab": "Nuova scheda",
+ "newTabDashboard": "Nuova scheda (Dashboard)",
+ "refreshSession": "Aggiorna sessione",
+ "refreshSessionWithShortcut": "Aggiorna sessione ({{shortcut}})",
+ "loadingTab": "Caricamento scheda",
+ "menu": {
+ "teams": "Team",
+ "settings": "Impostazioni",
+ "extensions": "Estensioni",
+ "search": "Cerca",
+ "schedules": "Pianificazioni",
+ "docs": "Documentazione",
+ "exportMarkdown": "Esporta come Markdown",
+ "exportJson": "Esporta come JSON",
+ "exportPlainText": "Esporta come testo semplice",
+ "analyzeSession": "Analizza sessione"
+ },
+ "tabMenu": {
+ "closeTabs": "Chiudi {{count}} schede",
+ "closeTabs_one": "Chiudi {{count}} scheda",
+ "closeTabs_few": "Chiudi {{count}} schede",
+ "closeTabs_many": "Chiudi {{count}} schede",
+ "closeTabs_other": "Chiudi {{count}} schede",
+ "closeTab": "Chiudi scheda",
+ "closeOtherTabs": "Chiudi altre schede",
+ "splitRight": "Dividi a destra",
+ "splitLeft": "Dividi a sinistra",
+ "pinToSidebar": "Fissa alla barra laterale",
+ "unpinFromSidebar": "Sblocca dalla barra laterale",
+ "hideFromSidebar": "Nascondi dalla barra laterale",
+ "unhideFromSidebar": "Mostra nella barra laterale",
+ "closeAllTabs": "Chiudi tutte le schede"
+ },
+ "sections": {
+ "team": "Team",
+ "sessions": "Sessioni",
+ "kanban": "Kanban",
+ "claudeLogs": "Log",
+ "messages": "Messaggi"
+ }
+ },
+ "editorFormatting": {
+ "bold": "Grassetto",
+ "italic": "Corsivo",
+ "strike": "Barrato",
+ "code": "Codice"
+ },
+ "diff": {
+ "changed": "Modificato",
+ "noChangesDetected": "Nessuna modifica rilevata"
+ },
+ "codexLogin": {
+ "copyLoginLinkAndCode": "Copia il link di accesso e il codice ChatGPT",
+ "copyLoginLink": "Copia il link di accesso ChatGPT",
+ "copyFailed": "Copia non riuscita",
+ "copyLinkAndCode": "Copia link + codice",
+ "copyLink": "Copia link",
+ "enterCodeOnLoginPage": "Inserisci questo codice nella pagina di accesso ChatGPT"
+ },
+ "window": {
+ "minimize": "Riduci a icona",
+ "maximize": "Ingrandisci",
+ "restore": "Ripristina"
+ },
+ "context": {
+ "local": "Locale",
+ "switchingTo": "Passaggio a {{workspace}}",
+ "loadingWorkspace": "Caricamento dello spazio di lavoro",
+ "switchWorkspace": "Cambia spazio di lavoro"
+ },
+ "repositories": {
+ "noneAvailable": "Nessun repository disponibile",
+ "remove": "Rimuovi repository"
+ },
+ "export": {
+ "session": "Esporta sessione",
+ "sessionTitle": "Esporta sessione"
+ },
+ "brand": {
+ "claude": "Claude"
+ },
+ "sessionReport": {
+ "noSessionData": "Nessun dato di sessione disponibile",
+ "title": "Report della sessione"
+ },
+ "sessionFilters": {
+ "project": {
+ "selectProject": "Seleziona progetto"
+ }
+ },
+ "tasks": {
+ "date": {
+ "updatedPrefix": "agg",
+ "updatedYesterday": "agg ieri",
+ "yesterday": "Ieri"
+ },
+ "reviewState": {
+ "needsFix": "Da correggere"
+ },
+ "unassigned": "non assegnato"
+ }
+}
diff --git a/src/features/localization/renderer/locales/it/dashboard.json b/src/features/localization/renderer/locales/it/dashboard.json
new file mode 100644
index 00000000..54c7d4dc
--- /dev/null
+++ b/src/features/localization/renderer/locales/it/dashboard.json
@@ -0,0 +1,197 @@
+{
+ "cliStatus": {
+ "actions": {
+ "alreadyLoggedIn": "Hai già effettuato l'accesso?",
+ "becomeSponsor": "Diventa sponsor",
+ "cancel": "Annulla",
+ "checkNow": "Controlla ora",
+ "checkUpdates": "Controlla aggiornamenti",
+ "checking": "Controllo in corso...",
+ "connect": "Connetti",
+ "extensions": "Estensioni",
+ "login": "Accedi",
+ "manage": "Gestisci",
+ "manageProviders": "Gestisci provider",
+ "plan": "Piano",
+ "recheck": "Ricontrolla",
+ "recheckProvider": "Ricontrolla {{provider}}",
+ "retry": "Riprova",
+ "updateTo": "Aggiorna alla v{{version}}",
+ "useCode": "Usa il codice"
+ },
+ "atlas": {
+ "alt": "Atlas Cloud",
+ "description": "Atlas Cloud è una piattaforma di inferenza AI full-modal che offre agli sviluppatori un'unica API AI per accedere alla generazione di video, alla generazione di immagini e alle API LLM. Invece di gestire più integrazioni di fornitori, ti connetti una sola volta e ottieni accesso unificato a oltre 300 modelli selezionati in tutte le modalità. Scopri la nuova promozione del piano coding di Atlas Cloud per un accesso alle API più conveniente.",
+ "openCodeProvider": "Provider OpenCode",
+ "plan": "Piano coding Atlas Cloud",
+ "sponsor": "Sponsor"
+ },
+ "errors": {
+ "checkStatusFailed": "Impossibile controllare lo stato della CLI",
+ "installationFailed": "Installazione non riuscita",
+ "refreshFailed": "Impossibile controllare gli aggiornamenti. Verifica la connessione di rete e riprova.",
+ "runtimeUpdatedRefreshFailed": "Runtime aggiornato, ma impossibile aggiornare lo stato del provider."
+ },
+ "hints": {
+ "backgroundStatus": "Lo stato di {{runtime}} verrà controllato in background.",
+ "codexApiKeyFallback": "{{hint}} Il fallback con chiave API è disponibile se cambi modalità di autenticazione.",
+ "codexAutoApiKey": "{{hint}} La modalità Auto continuerà a usare la chiave API finché ChatGPT non viene connesso.",
+ "codexFinishLogin": "Completa l'accesso a ChatGPT nel browser. Inserisci il codice mostrato se richiesto.",
+ "codexNoActiveLogin": "I limiti di utilizzo compaiono solo dopo che Codex CLI rileva un account ChatGPT attivo. Al momento non risulta alcun accesso ChatGPT attivo.",
+ "codexNoActiveManagedSession": "I limiti di utilizzo compaiono solo dopo che Codex CLI rileva un account ChatGPT attivo. Esistono dati locali dell'account Codex, ma al momento non è selezionata alcuna sessione gestita attiva.",
+ "codexReconnectNeeded": "I limiti di utilizzo compaiono solo dopo che Codex aggiorna la sessione ChatGPT attualmente selezionata. Al momento la sessione locale deve essere riconnessa.",
+ "firstCheckSlow": "Il primo controllo può richiedere fino a 30 secondi",
+ "loginRequiredForTeams": "La navigazione di sessioni e progetti funziona senza accesso. L'accesso è necessario solo per eseguire team di agenti.",
+ "troubleshootTitle": "Se sei sicuro di aver effettuato l'accesso, prova questi passaggi:"
+ },
+ "installer": {
+ "checkingLatest": "Verifica dell'ultima versione...",
+ "downloading": "Download di {{runtime}}...",
+ "installing": "Installazione di {{runtime}}...",
+ "success": "{{runtime}} v{{version}} installato correttamente",
+ "verifying": "Verifica del checksum..."
+ },
+ "labels": {
+ "apiKeyRequired": "Chiave API richiesta",
+ "comingSoon": "Prossimamente",
+ "collapseProviderDetails": "Comprimi dettagli provider",
+ "expandProviderDetails": "Espandi dettagli provider",
+ "generateLink": "Genera link",
+ "loadingRateLimits": "Caricamento limiti di frequenza",
+ "loggedOut": "Provider disconnesso",
+ "loginAuthFailed": "Autenticazione non riuscita",
+ "loginAuthUpdated": "Autenticazione aggiornata",
+ "loginComplete": "Accesso completato",
+ "loginFailed": "Accesso non riuscito",
+ "loginTitle": "Accesso",
+ "logoutFailed": "Disconnessione non riuscita",
+ "logoutTitle": "Disconnetti",
+ "notLoggedIn": "Non connesso",
+ "openLogin": "Apri accesso",
+ "providerActionRequired": "Azione del provider richiesta",
+ "resets": "si azzera {{time}}",
+ "runtimeLoginTitle": "Accesso {{runtime}}"
+ },
+ "loading": {
+ "aiProviders": "Controllo dei provider AI...",
+ "claudeCli": "Controllo della Claude CLI..."
+ },
+ "provider": {
+ "authenticated": "Autenticato",
+ "backend": "Backend: {{backend}}",
+ "checkingAuthentication": "Verifica dell'autenticazione...",
+ "checkingProviders": "Controllo dei provider...",
+ "configuredLocalCount": "{{count}} configurati localmente",
+ "configuredLocalCount_few": "{{count}} configurati localmente",
+ "configuredLocalCount_many": "{{count}} configurati localmente",
+ "configuredLocalCount_one": "{{count}} configurato localmente",
+ "configuredLocalCount_other": "{{count}} configurati localmente",
+ "configuredLocalTitle": "Route OpenCode locali importate dalla tua configurazione OpenCode.",
+ "connectedCount": "Provider: {{connected}}/{{denominator}} connessi",
+ "freeModels": "Modelli gratuiti",
+ "freeModelsTitle": "OpenCode include opzioni di modelli gratuiti come Big Pickle quando disponibili nella tua configurazione. Anche OpenRouter tramite OpenCode può esporre modelli gratuiti, ma non tutti i modelli OpenCode/OpenRouter sono gratuiti. Disponibilità e limiti possono cambiare.",
+ "loadingModels": "Caricamento dei modelli...",
+ "modelsUnavailable": "Modelli non disponibili per questa build del runtime",
+ "runtime": "Runtime: {{runtime}}",
+ "verifiedCount": "{{count}} verificati",
+ "verifiedCount_few": "{{count}} verificati",
+ "verifiedCount_many": "{{count}} verificati",
+ "verifiedCount_one": "{{count}} verificato",
+ "verifiedCount_other": "{{count}} verificati",
+ "verifiedTitle": "Route OpenCode con una prova di esecuzione riuscita."
+ },
+ "runtime": {
+ "configuredHealthCheckFailed": "Il {{runtime}} configurato non ha superato il controllo di integrità all'avvio.",
+ "configuredNotFound": "Il {{runtime}} configurato non è stato trovato.",
+ "foundButFailed": "{{runtime}} è stato trovato ma non si è avviato",
+ "healthCheckFailedDescription": "L'app ha trovato il {{runtime}} configurato, ma il controllo di integrità all'avvio non è riuscito. Riparalo o reinstallalo, quindi riprova.",
+ "install": "Installa {{runtime}}",
+ "installRequiredDescription": "{{runtime}} è necessario per il provisioning dei team e la gestione delle sessioni. Installalo per iniziare.",
+ "isRequired": "{{runtime}} è necessario",
+ "reinstall": "Reinstalla {{runtime}}"
+ },
+ "runtimeInstall": {
+ "checking": "Controllo",
+ "codexTitle": "Installa Codex CLI nei dati dell'app",
+ "downloading": "Download",
+ "downloadingPercent": "Download {{percent}}%",
+ "install": "Installa",
+ "installing": "Installazione",
+ "openCodeTitle": "Installa il runtime OpenCode nei dati dell'app",
+ "retryInstall": "Riprova installazione"
+ },
+ "troubleshoot": {
+ "again": "di nuovo",
+ "authStatusCommand": "il comando di stato autenticazione della CLI configurata",
+ "checkLoggedIn": "- verifica se mostra \"Connesso\"",
+ "click": "Fai clic su",
+ "loginCommand": "il comando di accesso del runtime",
+ "logoutCommand": "il comando di disconnessione del runtime",
+ "openTerminal": "Apri il terminale ed esegui:",
+ "reloginPrefix": "Se indica che sei connesso ma l'app non lo rileva, prova:",
+ "sameRuntime": "Assicurati che la CLI nel terminale sia lo stesso runtime usato dall'app",
+ "statusCacheHint": "- a volte lo stato viene memorizzato nella cache per alcuni secondi",
+ "then": "quindi"
+ },
+ "warnings": {
+ "multipleApiKeysMissing": "Uno o più provider sono impostati in modalità chiave API, ma non è configurata alcuna chiave API. Apri Gestisci provider per aggiungere chiavi o cambiare la modalità di connessione.",
+ "multipleApiKeysNeedAttention": "Uno o più provider sono impostati in modalità chiave API e richiedono attenzione. Apri Gestisci provider per controllare le chiavi salvate o cambiare la modalità di connessione.",
+ "notAuthenticated": "{{runtime}} è installato ma non sei autenticato. L'accesso è necessario per il provisioning dei team e le funzionalità AI.",
+ "singleApiKeyMissing": "{{provider}} è impostato in modalità chiave API, ma non è configurata alcuna chiave API. Apri Gestisci provider per aggiungere una chiave o cambiare la modalità di connessione.",
+ "singleApiKeyNeedsAttention": "{{provider}} è impostato in modalità chiave API, ma non è connesso. Apri Gestisci provider per controllare la chiave salvata o cambiare la modalità di connessione."
+ }
+ },
+ "recentProjects": {
+ "selectFolderTitle": "Seleziona una cartella di progetto",
+ "selectFolder": "Seleziona cartella",
+ "failedToLoad": "Impossibile caricare i progetti",
+ "retry": "Riprova",
+ "noProjects": "Nessun progetto trovato",
+ "noMatches": "Nessun risultato per \"{{query}}\"",
+ "noRecentProjects": "Nessun progetto recente trovato",
+ "emptyDescription": "L'attività recente di Claude e Codex apparirà qui.",
+ "loadMore": "Carica altro",
+ "card": {
+ "deleted": "Eliminato",
+ "projectFolderMissing": "La cartella del progetto non esiste più",
+ "taskCounts": {
+ "active": "{{count}} attivi",
+ "active_one": "{{count}} attivo",
+ "active_other": "{{count}} attivi",
+ "active_few": "{{count}} attivi",
+ "active_many": "{{count}} attivi",
+ "pending": "{{count}} in attesa",
+ "pending_one": "{{count}} in attesa",
+ "pending_other": "{{count}} in attesa",
+ "pending_few": "{{count}} in attesa",
+ "pending_many": "{{count}} in attesa",
+ "done": "{{count}} completati",
+ "done_one": "{{count}} completato",
+ "done_other": "{{count}} completati",
+ "done_few": "{{count}} completati",
+ "done_many": "{{count}} completati"
+ }
+ },
+ "title": "Progetti recenti",
+ "searchResults": "Risultati della ricerca",
+ "searchPlaceholder": "Cerca progetti..."
+ },
+ "actions": {
+ "selectTeam": "Seleziona team",
+ "or": "oppure",
+ "clearSearch": "Cancella ricerca"
+ },
+ "windowsAdmin": {
+ "title": "Modalità Amministratore di Windows consigliata",
+ "description": "I controlli del runtime OpenCode possono scadere quando Agent Teams AI non viene eseguito con privilegi elevati. Riavvia l'app con Esegui come amministratore prima di avviare i team OpenCode."
+ },
+ "webPreview": {
+ "title": "Apri l'app desktop per la piena funzionalità",
+ "description": "La versione browser è ancora in fase di sviluppo. Azioni sui progetti, integrazioni e aggiornamenti di stato in tempo reale potrebbero essere limitati qui. Usa l'app desktop per accedere a tutte le funzionalità in modo affidabile."
+ },
+ "updateBanner": {
+ "newVersionAvailable": "Nuova versione disponibile",
+ "restartNow": "Riavvia ora",
+ "viewDetails": "Visualizza dettagli"
+ }
+}
diff --git a/src/features/localization/renderer/locales/it/errors.json b/src/features/localization/renderer/locales/it/errors.json
new file mode 100644
index 00000000..801a0aeb
--- /dev/null
+++ b/src/features/localization/renderer/locales/it/errors.json
@@ -0,0 +1,3 @@
+{
+ "fallback": "Qualcosa è andato storto."
+}
diff --git a/src/features/localization/renderer/locales/it/extensions.json b/src/features/localization/renderer/locales/it/extensions.json
new file mode 100644
index 00000000..ffc72c79
--- /dev/null
+++ b/src/features/localization/renderer/locales/it/extensions.json
@@ -0,0 +1,688 @@
+{
+ "store": {
+ "actions": {
+ "addCustom": "Aggiungi personalizzato",
+ "openDashboard": "Apri dashboard",
+ "refreshCatalog": "Aggiorna catalogo"
+ },
+ "capabilities": {
+ "mcp": "MCP: {{status}}",
+ "plugins": "Plugin: {{status}}",
+ "skills": "Skill: {{status}}"
+ },
+ "desktopOnly": "Disponibile solo nell'app desktop.",
+ "provider": {
+ "checkingStatus": "Verifica dello stato del provider...",
+ "connected": "Connesso",
+ "loading": "Caricamento...",
+ "needsSetup": "Richiede configurazione",
+ "readyToConfigure": "Pronto per la configurazione",
+ "unsupported": "Non supportato"
+ },
+ "runtime": {
+ "checkingAvailabilityDescription": "Le estensioni hanno bisogno del runtime configurato per gestire plugin, server MCP, skill e connessioni ai provider.",
+ "checkingAvailabilityTitle": "Verifica della disponibilità del runtime delle estensioni",
+ "failedToStartDescription": "Le estensioni sono disabilitate finché il runtime non supera il controllo di integrità all'avvio. Apri la dashboard per ripararlo o reinstallarlo.",
+ "failedToStartTitle": "Il runtime configurato è stato trovato ma non si è avviato",
+ "multimodelCapabilitiesDescription": "Il supporto dei provider può variare per sezione. I plugin vengono mostrati solo dove il runtime dichiara esplicitamente il supporto.",
+ "multimodelCapabilitiesTitle": "Funzionalità del runtime multimodello",
+ "needsSignInDescription": "{{runtime}} è stato trovato{{version}}, ma le installazioni dei plugin sono disabilitate finché non accedi dalla dashboard.",
+ "needsSignInTitle": "{{runtime}} richiede l'accesso",
+ "notAvailableDescription": "Le estensioni sono disabilitate finché il runtime non viene installato. Apri la dashboard per installarlo e riprova.",
+ "notAvailableTitle": "Il runtime configurato non è disponibile",
+ "readyDescription": "I plugin possono essere installati da questa pagina{{versionSuffix}}.",
+ "readyTitle": "{{runtime}} è pronto",
+ "requiredForMutations": "Il runtime configurato è necessario per installare o disinstallare estensioni. Installalo o riparalo dalla dashboard."
+ },
+ "sessionsRestartWarning": "Le sessioni in esecuzione non recepiranno le modifiche alle estensioni finché non vengono riavviate.",
+ "tabs": {
+ "apiKeys": {
+ "description": "Chiavi segrete per servizi online. Aggiungile qui in modo che plugin, server e integrazioni possano connettersi e funzionare.",
+ "label": "Chiavi API"
+ },
+ "mcpServers": {
+ "description": "Connessioni a strumenti e app esterni. Permettono al runtime di leggere dati o eseguire azioni oltre questa app.",
+ "label": "Server MCP"
+ },
+ "plugins": {
+ "description": "Piccoli componenti aggiuntivi per il runtime. In modalità multimodello si applicano attualmente alle sessioni Anthropic quando supportati. Un supporto più ampio dei provider è in fase di sviluppo.",
+ "label": "Plugin"
+ },
+ "skills": {
+ "description": "Istruzioni pronte per attività comuni. Aiutano il runtime a gestire i task ripetibili in modo più coerente.",
+ "label": "Skill"
+ }
+ },
+ "title": "Estensioni"
+ },
+ "pluginsPanel": {
+ "activeFilters": "{{count}} attivi",
+ "browseByFit": "Sfoglia per pertinenza",
+ "capabilities": "Funzionalità",
+ "categories": "Categorie",
+ "clearAllFilters": "Cancella tutti i filtri",
+ "clearFilters": "Cancella filtri",
+ "counts": {
+ "capabilities": "{{count}} funzionalità",
+ "categories": "{{count}} categorie",
+ "plugins": "{{count}} plugin",
+ "capabilities_few": "{{count}} funzionalità",
+ "capabilities_many": "{{count}} funzionalità",
+ "capabilities_one": "{{count}} funzionalità",
+ "capabilities_other": "{{count}} funzionalità",
+ "categories_few": "{{count}} categorie",
+ "categories_many": "{{count}} categorie",
+ "categories_one": "{{count}} categoria",
+ "categories_other": "{{count}} categorie",
+ "plugins_few": "{{count}} plugin",
+ "plugins_many": "{{count}} plugin",
+ "plugins_one": "{{count}} plugin",
+ "plugins_other": "{{count}} plugin"
+ },
+ "empty": {
+ "description": "Torna più tardi per nuovi plugin",
+ "filteredDescription": "Prova a modificare la ricerca o i criteri di filtro",
+ "filteredTitle": "Nessun plugin corrisponde ai tuoi filtri",
+ "title": "Nessun plugin disponibile"
+ },
+ "filterDescription": "Restringi il catalogo per categoria, funzionalità o stato di installazione.",
+ "installedOnly": "Solo installati",
+ "providerSupportNotice": "Il supporto dei plugin è attualmente garantito solo per le sessioni Anthropic (Claude). Stiamo lavorando per supportare i plugin su tutti gli agenti.",
+ "resultsUpdateInstantly": "I risultati si aggiornano istantaneamente man mano che affini i filtri.",
+ "searchPlaceholder": "Cerca plugin...",
+ "selectedCount": "{{count}} selezionati",
+ "showing": "Visualizzati {{shown}} di {{total}} plugin",
+ "sort": {
+ "category": "Categoria",
+ "nameAsc": "Nome A-Z",
+ "nameDesc": "Nome Z-A",
+ "popular": "Popolari"
+ },
+ "activeFilters_few": "{{count}} attivi",
+ "activeFilters_many": "{{count}} attivi",
+ "activeFilters_one": "{{count}} attivo",
+ "activeFilters_other": "{{count}} attivi",
+ "selectedCount_few": "{{count}} selezionati",
+ "selectedCount_many": "{{count}} selezionati",
+ "selectedCount_one": "{{count}} selezionato",
+ "selectedCount_other": "{{count}} selezionati"
+ },
+ "customMcp": {
+ "actions": {
+ "add": "Aggiungi",
+ "cancel": "Annulla",
+ "install": "Installa",
+ "installing": "Installazione..."
+ },
+ "description": "Aggiungi un server manualmente senza il catalogo.",
+ "errors": {
+ "installFailed": "Installazione non riuscita",
+ "invalidServerName": "Nome server non valido. Usa caratteri alfanumerici, trattini, trattini bassi, punti.",
+ "npmPackageRequired": "Il nome del pacchetto npm è obbligatorio",
+ "serverNameRequired": "Il nome del server è obbligatorio",
+ "serverUrlRequired": "L'URL del server è obbligatorio"
+ },
+ "fields": {
+ "environmentVariables": "Variabili d'ambiente",
+ "headers": "Header",
+ "npmPackage": "Pacchetto npm",
+ "scope": "Ambito",
+ "serverName": "Nome server",
+ "serverUrl": "URL server",
+ "transport": "Trasporto",
+ "transportType": "Tipo di trasporto",
+ "versionOptional": "Versione (facoltativa)"
+ },
+ "title": "Aggiungi server MCP personalizzato",
+ "transport": {
+ "httpSse": "HTTP / SSE",
+ "stdio": "Stdio (npm)"
+ },
+ "placeholders": {
+ "headerName": "Header-Name",
+ "envVarName": "ENV_VAR_NAME",
+ "serverName": "my-server",
+ "latest": "latest",
+ "value": "valore",
+ "serverUrl": "https://api.example.com/mcp"
+ }
+ },
+ "mcpDetail": {
+ "auth": {
+ "remoteMayNeedHeaders": "I server MCP remoti potrebbero comunque richiedere header personalizzati o chiavi API anche quando il registro non li descrive. Se la connessione non riesce dopo l'installazione, consulta la documentazione del provider.",
+ "required": "Questo server richiede l'autenticazione"
+ },
+ "diagnostics": {
+ "launchTarget": "Destinazione di avvio"
+ },
+ "form": {
+ "autoFilled": "Compilato automaticamente",
+ "environmentVariables": "Variabili d'ambiente",
+ "headers": "Header",
+ "scope": "Ambito",
+ "serverName": "Nome server"
+ },
+ "install": {
+ "httpTransport": "HTTP: {{transport}}",
+ "manualSetupDescription": "Questo server richiede una configurazione manuale. Consulta il repository per le istruzioni di installazione.",
+ "manualSetupRequired": "Configurazione manuale richiesta",
+ "npmPackage": "npm: {{package}}",
+ "manage": "Gestisci installazione",
+ "install": "Installa server"
+ },
+ "links": {
+ "glama": "Glama",
+ "repository": "Repository",
+ "website": "Sito web"
+ },
+ "metadata": {
+ "author": "Autore",
+ "githubStars": "Stelle GitHub",
+ "hosting": "Hosting",
+ "installType": "Tipo di installazione",
+ "license": "Licenza",
+ "published": "Pubblicato",
+ "source": "Origine",
+ "updated": "Aggiornato",
+ "version": "Versione"
+ },
+ "scope": {
+ "local": "Locale",
+ "project": "Progetto"
+ },
+ "tools": {
+ "title": "Strumenti ({{count}})",
+ "title_few": "Strumenti ({{count}})",
+ "title_many": "Strumenti ({{count}})",
+ "title_one": "Strumento ({{count}})",
+ "title_other": "Strumenti ({{count}})"
+ },
+ "placeholders": {
+ "serverName": "my-server"
+ }
+ },
+ "skillEditor": {
+ "actions": {
+ "cancel": "Annulla",
+ "createSkill": "Crea skill",
+ "preparing": "Preparazione...",
+ "reviewAndCreate": "Rivedi e crea",
+ "reviewAndSave": "Rivedi e salva",
+ "saveSkill": "Salva skill"
+ },
+ "advanced": {
+ "customDescription": "Questa skill usa un formato markdown personalizzato, quindi modificala direttamente qui.",
+ "customTitle": "2. Editor SKILL.md",
+ "description": "La maggior parte delle persone può saltare questo passaggio. Aprilo solo se vuoi il controllo diretto sul file markdown grezzo.",
+ "hide": "Nascondi editor avanzato",
+ "resetFromStructuredFields": "Reimposta dai campi strutturati",
+ "show": "Mostra editor avanzato",
+ "title": "4. Editor SKILL.md avanzato"
+ },
+ "basics": {
+ "description": "Assegna a questa skill un nome chiaro, scegli chi può usarla e decidi dove deve risiedere.",
+ "title": "1. Nozioni di base"
+ },
+ "description": {
+ "create": "Descrivi il flusso di lavoro in linguaggio semplice, rivedi i file che verranno creati, quindi salvalo.",
+ "edit": "Aggiorna questa skill, rivedi le modifiche risultanti ai file, quindi salvala."
+ },
+ "extraFiles": {
+ "addedFiles": "File aggiunti:",
+ "assets": "Asset",
+ "assetsDescription": "Aggiungi screenshot o media inclusi solo se aiutano a spiegare il flusso di lavoro.",
+ "description": "Aggiungi documenti, script o asset di supporto solo se questa skill ne ha davvero bisogno.",
+ "lockedForEdits": "La radice e la cartella sono bloccate per le modifiche",
+ "optionalDescription": "Aggiungi file iniziali che verranno inclusi nella revisione e scritti insieme a `SKILL.md`.",
+ "optionalTitle": "File facoltativi",
+ "references": "Riferimenti",
+ "referencesDescription": "Aggiungi documenti, link o esempi di supporto che il runtime può consultare.",
+ "scripts": "Script",
+ "scriptsDescription": "Aggiungi comandi di supporto o note di configurazione. Rivedi attentamente prima di condividere questa skill.",
+ "title": "3. File aggiuntivi"
+ },
+ "fields": {
+ "compatibility": "Compatibilità",
+ "description": "Descrizione",
+ "folderName": "Nome cartella",
+ "folderNameHint": "Lo suggeriamo automaticamente dal nome della skill così la revisione funziona subito.",
+ "invocation": "Come va usata",
+ "license": "Licenza",
+ "name": "Nome skill",
+ "notes": "Note aggiuntive o vincoli",
+ "root": "Dove archiviarla",
+ "scope": "Chi può usarla",
+ "steps": "Passaggi principali da seguire",
+ "whenToUse": "Quando ricorrere a questa skill"
+ },
+ "instructions": {
+ "description": "Queste sezioni generano automaticamente il file della skill, quindi non devi modificare il markdown a meno che tu non lo voglia.",
+ "locked": "I campi strutturati sono bloccati perché sei passato alla modifica manuale di `SKILL.md` qui sotto.",
+ "title": "2. Istruzioni"
+ },
+ "invocation": {
+ "auto": "Può essere usata automaticamente",
+ "manualOnly": "Solo quando lo richiedi"
+ },
+ "placeholders": {
+ "description": "Con cosa aiuta questa skill",
+ "name": "Scrivi un nome conciso per la skill",
+ "notes": "Esempio: Segnala test mancanti, regressioni e supposizioni rischiose.",
+ "steps": "1. Ispeziona i file rilevanti.\n2. Spiega prima il rischio principale.\n3. Suggerisci la correzione più sicura.",
+ "whenToUse": "Esempio: Usala quando il task è una revisione del codice o una richiesta di triage di bug.",
+ "license": "MIT",
+ "compatibility": "claude-code, cursor"
+ },
+ "review": {
+ "creating": "Creazione di una skill",
+ "hint": "Rivedi prima le modifiche ai file, quindi conferma il salvataggio nel passaggio successivo.",
+ "saving": "Salvataggio di questa skill"
+ },
+ "root": {
+ "codexOnly": " - Solo Codex",
+ "shared": " - Condivisa"
+ },
+ "scope": {
+ "project": "Progetto: {{project}}",
+ "projectUnavailable": "Progetto non disponibile",
+ "user": "Utente"
+ },
+ "title": {
+ "create": "Crea skill",
+ "edit": "Modifica skill"
+ }
+ },
+ "skillDetail": {
+ "actions": {
+ "cancel": "Annulla",
+ "delete": "Elimina",
+ "deleteSkill": "Elimina skill",
+ "deleting": "Eliminazione...",
+ "editSkill": "Modifica skill",
+ "openFolder": "Apri cartella",
+ "openSkillFile": "Apri SKILL.md",
+ "retry": "Riprova"
+ },
+ "badges": {
+ "assets": "Asset",
+ "autoUse": "Uso automatico",
+ "hasScripts": "Contiene script",
+ "manualUse": "Uso manuale",
+ "references": "Riferimenti",
+ "storedIn": "Archiviata in {{root}}"
+ },
+ "deleteDialog": {
+ "description": "Eliminare questa skill e spostarla nel Cestino?",
+ "descriptionWithName": "Eliminare \"{{name}}\" e spostarla nel Cestino? Puoi ripristinarla in seguito dal Cestino se necessario.",
+ "title": "Eliminare la skill?"
+ },
+ "descriptionFallback": "Ispeziona i metadati della skill rilevata e le istruzioni grezze.",
+ "errors": {
+ "deleteFailed": "Impossibile eliminare la skill",
+ "loadFailed": "Impossibile caricare questa skill."
+ },
+ "files": {
+ "advancedDetails": "Dettagli avanzati dei file",
+ "assets": "Asset",
+ "references": "Riferimenti",
+ "scripts": "Script",
+ "storedAt": "Archiviata in"
+ },
+ "includes": {
+ "assets": "asset",
+ "instructionsOnly": "Solo le istruzioni della skill",
+ "references": "riferimenti",
+ "scripts": "script"
+ },
+ "invocation": {
+ "auto": "Si esegue automaticamente quando corrisponde al task.",
+ "manualOnly": "Si esegue solo quando lo richiedi esplicitamente."
+ },
+ "issues": {
+ "bundledScripts": "Questa skill include script in bundle",
+ "reviewCarefully": "Rivedi attentamente questa skill prima di usarla"
+ },
+ "loading": "Caricamento dei dettagli della skill...",
+ "scope": {
+ "personal": "Le tue skill personali",
+ "projectOnly": "Solo questo progetto"
+ },
+ "summary": {
+ "howUsed": "Come viene usata",
+ "included": "Cosa è incluso",
+ "whoCanUse": "Chi può usarla"
+ },
+ "titleFallback": "Dettagli della skill"
+ },
+ "skillsPanel": {
+ "actions": {
+ "createSkill": "Crea skill",
+ "import": "Importa"
+ },
+ "badges": {
+ "assets": "Asset",
+ "hasScripts": "Contiene script",
+ "needsAttention": "Richiede attenzione",
+ "references": "Riferimenti",
+ "storedIn": "Archiviata in {{root}}"
+ },
+ "configuredRuntime": "il runtime configurato",
+ "counts": {
+ "codexOnly": "{{count}} solo Codex",
+ "personal": "{{count}} personali",
+ "project": "{{count}} di progetto",
+ "shared": "{{count}} condivise",
+ "total": "{{count}} totali",
+ "codexOnly_few": "{{count}} solo Codex",
+ "codexOnly_many": "{{count}} solo Codex",
+ "codexOnly_one": "{{count}} solo Codex",
+ "codexOnly_other": "{{count}} solo Codex",
+ "personal_few": "{{count}} personali",
+ "personal_many": "{{count}} personali",
+ "personal_one": "{{count}} personale",
+ "personal_other": "{{count}} personali",
+ "project_few": "{{count}} di progetto",
+ "project_many": "{{count}} di progetto",
+ "project_one": "{{count}} di progetto",
+ "project_other": "{{count}} di progetto",
+ "shared_few": "{{count}} condivise",
+ "shared_many": "{{count}} condivise",
+ "shared_one": "{{count}} condivisa",
+ "shared_other": "{{count}} condivise",
+ "total_few": "{{count}} totali",
+ "total_many": "{{count}} totali",
+ "total_one": "{{count}} totale",
+ "total_other": "{{count}} totali"
+ },
+ "empty": {
+ "noMatches": "Nessuna skill corrisponde alla tua ricerca",
+ "noMatchesDescription": "Prova un termine di ricerca diverso o cambia i filtri.",
+ "noSkills": "Ancora nessuna skill",
+ "noSkillsDescription": "Crea la tua prima skill per insegnare un flusso di lavoro ripetibile, oppure importane una che già usi."
+ },
+ "filters": {
+ "all": "Tutte le skill",
+ "codexOnly": "Solo Codex",
+ "hasScripts": "Contiene script",
+ "needsAttention": "Richiede attenzione",
+ "personal": "Personali",
+ "project": "Progetto",
+ "shared": "Condivise"
+ },
+ "hero": {
+ "codexAvailable": "Usa `.codex` quando una skill deve rimanere solo per Codex.",
+ "codexUnavailable": "Le skill `.codex` esistenti restano modificabili qui, ma le nuove skill solo per Codex richiedono il runtime Codex abilitato.",
+ "description": "Le skill sono istruzioni riutilizzabili che aiutano il runtime a gestire lo stesso tipo di task in modo più coerente.",
+ "guidance": "Usa le skill personali per le abitudini che vuoi ovunque. Usa le skill di progetto per i flussi di lavoro che hanno senso solo all'interno di un singolo codebase.",
+ "personalContext": "Al momento stai vedendo solo le tue skill personali.",
+ "projectContext": "Stai vedendo le skill per {{project}} più le tue skill personali.",
+ "title": "Insegna il lavoro ripetibile"
+ },
+ "invocation": {
+ "auto": "Si esegue automaticamente quando è pertinente",
+ "manualOnly": "Si esegue solo quando lo richiedi esplicitamente"
+ },
+ "loading": {
+ "loading": "Caricamento delle skill...",
+ "refreshing": "Aggiornamento delle skill..."
+ },
+ "runtimeAudience": "Le skill condivise in `.claude`, `.cursor` e `.agents` sono disponibili per {{audience}}. Le skill archiviate in `.codex` restano solo per Codex quando il supporto Codex è disponibile.",
+ "scope": {
+ "project": "Questo progetto",
+ "user": "Personali"
+ },
+ "searchPlaceholder": "Cerca per nome della skill o per ciò con cui aiuta...",
+ "sections": {
+ "personal": {
+ "description": "Abitudini e istruzioni che vuoi disponibili ovunque.",
+ "title": "Skill personali"
+ },
+ "project": {
+ "description": "Flussi di lavoro che hanno senso solo per questo codebase.",
+ "title": "Skill di progetto"
+ }
+ },
+ "sort": {
+ "label": "Ordina skill",
+ "name": "Nome",
+ "recent": "Recenti"
+ },
+ "status": {
+ "hasScripts": "Include script, quindi rivedila attentamente",
+ "needsAttention": "Richiede attenzione prima di affidarti ad essa",
+ "ready": "Pronta all'uso"
+ },
+ "success": {
+ "created": "Skill creata correttamente.",
+ "imported": "Skill importata correttamente.",
+ "saved": "Skill salvata correttamente."
+ }
+ },
+ "pluginDetail": {
+ "unknown": "Sconosciuto",
+ "metadata": {
+ "author": "Autore",
+ "category": "Categoria",
+ "source": "Origine",
+ "version": "Versione",
+ "capabilities": "Funzionalità",
+ "installs": "Installazioni"
+ },
+ "scope": {
+ "label": "Ambito:",
+ "options": {
+ "user": "Utente (globale)",
+ "project": "Progetto (condiviso)",
+ "local": "Locale (in gitignore)"
+ }
+ },
+ "links": {
+ "homepage": "Home page",
+ "contact": "Contatto"
+ },
+ "readme": {
+ "loading": "Caricamento README...",
+ "empty": "Nessun README disponibile."
+ }
+ },
+ "skillImport": {
+ "title": "Importa skill",
+ "description": "Scegli una cartella di skill esistente, rivedi cosa verrà copiato, quindi importala in una delle tue posizioni di skill supportate.",
+ "steps": {
+ "chooseFolder": {
+ "title": "1. Scegli una cartella di skill",
+ "description": "Dovrebbe essere una cartella che contiene già un file `SKILL.md`, `Skill.md` o `skill.md`."
+ },
+ "location": {
+ "title": "2. Decidi dove collocarla",
+ "description": "Le skill personali funzionano ovunque. Le skill di progetto compaiono solo per un singolo codebase."
+ }
+ },
+ "fields": {
+ "sourceFolder": "Cartella di origine",
+ "destinationFolderName": "Nome della cartella di destinazione",
+ "audience": "Chi può usarla",
+ "storage": "Dove archiviarla"
+ },
+ "placeholders": {
+ "defaultFolderName": "Per impostazione predefinita usa il nome della cartella di origine"
+ },
+ "actions": {
+ "browse": "Sfoglia",
+ "cancel": "Annulla",
+ "preparing": "Preparazione...",
+ "reviewAndImport": "Rivedi e importa",
+ "importSkill": "Importa skill",
+ "backToImport": "Torna all'importazione"
+ },
+ "scope": {
+ "user": "Utente",
+ "project": "Progetto: {{project}}",
+ "projectUnavailable": "Progetto non disponibile"
+ },
+ "rootSuffix": {
+ "codexOnly": " - Solo Codex",
+ "shared": " - Condivisa"
+ },
+ "reviewHint": "Rivedi prima i file copiati, quindi conferma l'importazione nel passaggio successivo.",
+ "reviewLabel": "Importazione di questa skill",
+ "errors": {
+ "missingSkillFile": "Questa cartella non sembra ancora una skill. Necessita di un file SKILL.md, Skill.md o skill.md.",
+ "symbolicLinks": "Questa cartella contiene collegamenti simbolici. Importa i file reali invece dei collegamenti.",
+ "tooManyFiles": "Questa cartella di skill è troppo grande per essere importata in una volta. Rimuovi i file in eccesso e riprova.",
+ "tooLarge": "Questa cartella di skill è troppo grande per essere importata in sicurezza. Riduci gli asset di grandi dimensioni e riprova.",
+ "invalidFolderName": "Scegli un nome di cartella di destinazione più semplice usando lettere, numeri, punti, trattini o trattini bassi.",
+ "mustBeDirectory": "Scegli una cartella da importare, non un singolo file.",
+ "reviewFailed": "Impossibile rivedere le modifiche dell'importazione",
+ "importFailed": "Impossibile importare la skill"
+ }
+ },
+ "mcpPanel": {
+ "sort": {
+ "nameAsc": "Nome A→Z",
+ "nameDesc": "Nome Z→A",
+ "toolsDesc": "Più strumenti"
+ },
+ "health": {
+ "title": "Stato di integrità MCP",
+ "checkingViaRuntime": "Controllo dei server MCP installati tramite {{runtime}} ...",
+ "lastChecked": "Ultimo controllo {{time}}",
+ "description": "Esegui la diagnostica da questa pagina per verificare la connettività MCP installata.",
+ "checking": "Controllo...",
+ "checkStatus": "Controlla stato"
+ },
+ "diagnostics": {
+ "title": "Diagnostica MCP del runtime",
+ "serversCount": "{{count}} server",
+ "serversCount_one": "{{count}} server",
+ "serversCount_other": "{{count}} server",
+ "waiting": "In attesa dei risultati della diagnostica...",
+ "disableReasons": {
+ "checkingRuntimeStatus": "Verifica dello stato del runtime...",
+ "checkingRuntimeAvailability": "Verifica della disponibilità del runtime...",
+ "runtimeFailedToStart": "Il runtime configurato è stato trovato ma non si è avviato. Apri la dashboard per ripararlo o reinstallarlo.",
+ "runtimeRequired": "Il runtime configurato è necessario. Installalo o riparalo dalla dashboard."
+ },
+ "serversCount_few": "{{count}} server",
+ "serversCount_many": "{{count}} server"
+ },
+ "searchPlaceholder": "Cerca server MCP...",
+ "runtime": {
+ "notAvailable": "{{runtime}} non disponibile",
+ "notInstalled": "{{runtime}} non installato",
+ "requiredDescription": "I controlli di integrità MCP richiedono {{runtime}}. Vai alla dashboard per installarlo o ripararlo."
+ },
+ "empty": {
+ "searchTitle": "Nessun server trovato",
+ "title": "Nessun server MCP disponibile",
+ "searchDescription": "Prova un termine di ricerca diverso",
+ "description": "Torna più tardi per nuovi server"
+ },
+ "loadMore": "Carica altro"
+ },
+ "apiKeys": {
+ "description": "Archivia in modo sicuro le chiavi API per la compilazione automatica durante l'installazione dei server MCP.",
+ "storage": {
+ "osKeychain": "Le chiavi sono crittografate tramite {{backend}} e archiviate con permessi file limitati (solo proprietario).",
+ "localEncryption": "Portachiavi del sistema operativo non disponibile - le chiavi sono crittografate localmente con AES-256. Per una protezione più forte, installa un servizio keyring (gnome-keyring, kwallet)."
+ },
+ "actions": {
+ "add": "Aggiungi chiave API",
+ "addFirst": "Aggiungi la tua prima chiave",
+ "edit": "Modifica",
+ "copied": "Copiato!",
+ "copyEnvVarName": "Copia nome variabile d'ambiente",
+ "confirmDelete": "Fai di nuovo clic per confermare",
+ "delete": "Elimina"
+ },
+ "empty": {
+ "title": "Nessuna chiave API salvata",
+ "description": "Aggiungi chiavi per compilare automaticamente le variabili d'ambiente durante l'installazione dei server MCP."
+ },
+ "form": {
+ "addTitle": "Aggiungi chiave API",
+ "editTitle": "Modifica chiave API",
+ "addDescription": "Archivia una chiave API per la compilazione automatica nelle installazioni dei server MCP.",
+ "editDescription": "Aggiorna i dettagli della chiave. Devi reinserire il valore.",
+ "keychainUnavailable": "Portachiavi del sistema operativo non disponibile - chiavi crittografate localmente con AES-256. Installa gnome-keyring per la protezione a livello di sistema operativo.",
+ "name": "Nome",
+ "namePlaceholder": "es. OpenAI Production",
+ "environmentVariableName": "Nome variabile d'ambiente",
+ "envVarPlaceholder": "es. OPENAI_API_KEY",
+ "value": "Valore",
+ "reenterValue": "Reinserisci il valore della chiave",
+ "valuePlaceholder": "sk-...",
+ "scope": "Ambito",
+ "userScopeLabel": "Utente (globale)",
+ "projectScopeLabel": "Progetto: {{project}}",
+ "projectUnavailable": "Progetto non disponibile",
+ "boundTo": "Associata a {{path}}",
+ "cancel": "Annulla",
+ "saving": "Salvataggio...",
+ "update": "Aggiorna",
+ "save": "Salva",
+ "errors": {
+ "invalidEnvVarFormat": "Usa lettere, cifre, trattini bassi. Deve iniziare con una lettera o un trattino basso.",
+ "nameRequired": "Il nome è obbligatorio",
+ "envVarRequired": "Il nome della variabile d'ambiente è obbligatorio",
+ "invalidEnvVar": "Nome variabile d'ambiente non valido",
+ "valueRequired": "Il valore della chiave è obbligatorio",
+ "projectScopeRequiresProject": "Le chiavi API con ambito di progetto richiedono un progetto attivo",
+ "saveFailed": "Salvataggio non riuscito"
+ }
+ }
+ },
+ "skillReview": {
+ "title": "Rivedi le modifiche della skill",
+ "description": "{{reviewLabel}} mostra prima un'anteprima delle modifiche al filesystem. Nulla viene scritto finché non confermi qui sotto.",
+ "noPreview": "Nessuna anteprima disponibile.",
+ "confirmPromptPrefix": "Rivedi il diff qui sotto, quindi usa",
+ "confirmPromptSuffix": "per applicare queste modifiche.",
+ "noChanges": "Nessuna modifica ai file rilevata finora.",
+ "binaryBadge": "binario",
+ "binaryPreviewHidden": "L'anteprima dei file binari non viene mostrata. Il file verrà copiato così com'è.",
+ "summary": {
+ "fileChanges": "{{count}} modifiche ai file",
+ "fileChanges_one": "{{count}} modifica al file",
+ "fileChanges_other": "{{count}} modifiche ai file",
+ "new": "{{count}} nuovi",
+ "updated": "{{count}} aggiornati",
+ "removed": "{{count}} rimossi",
+ "binary": "{{count}} binari",
+ "fileChanges_few": "{{count}} modifiche ai file",
+ "fileChanges_many": "{{count}} modifiche ai file"
+ }
+ },
+ "mcpCard": {
+ "toolsCount": "{{count}} strumenti",
+ "toolsCount_one": "{{count}} strumento",
+ "toolsCount_other": "{{count}} strumenti",
+ "envCount": "{{count}} variabili d'ambiente",
+ "envCount_one": "{{count}} variabile d'ambiente",
+ "envCount_other": "{{count}} variabili d'ambiente",
+ "auth": "Autenticazione",
+ "byAuthor": "di {{author}}",
+ "hosting": {
+ "remote": "Remoto",
+ "local": "Locale",
+ "both": "Entrambi"
+ },
+ "toolsCount_few": "{{count}} strumenti",
+ "toolsCount_many": "{{count}} strumenti",
+ "envCount_few": "{{count}} variabili d'ambiente",
+ "envCount_many": "{{count}} variabili d'ambiente",
+ "repository": "Repository",
+ "website": "Sito web"
+ },
+ "installButton": {
+ "installing": "Installazione...",
+ "removing": "Rimozione...",
+ "done": "Fatto",
+ "retry": "Riprova",
+ "uninstall": "Disinstalla",
+ "install": "Installa"
+ },
+ "pluginCard": {
+ "official": "Ufficiale"
+ }
+}
diff --git a/src/features/localization/renderer/locales/it/report.json b/src/features/localization/renderer/locales/it/report.json
new file mode 100644
index 00000000..284efa38
--- /dev/null
+++ b/src/features/localization/renderer/locales/it/report.json
@@ -0,0 +1,217 @@
+{
+ "cost": {
+ "breakdownTitle": "Ripartizione dei costi (per 1M di token)",
+ "cacheRead": "Lettura cache",
+ "cacheWrite": "Scrittura cache",
+ "cost": "Costo",
+ "input": "Input",
+ "noCommits": "nessun commit",
+ "noLinesChanged": "nessuna riga modificata",
+ "output": "Output",
+ "parent": "Genitore: {{cost}}",
+ "parentCost": "Costo genitore",
+ "perCommit": "Per commit",
+ "perCommitFormula": "costo totale ÷ {{count}} commit",
+ "perCommitFormula_few": "costo totale ÷ {{count}} commit",
+ "perCommitFormula_many": "costo totale ÷ {{count}} commit",
+ "perCommitFormula_one": "costo totale ÷ {{count}} commit",
+ "perCommitFormula_other": "costo totale ÷ {{count}} commit",
+ "perLineChanged": "Per riga modificata",
+ "perLineFormula": "costo totale ÷ {{count}} riga",
+ "perLineFormula_few": "costo totale ÷ {{count}} righe",
+ "perLineFormula_many": "costo totale ÷ {{count}} righe",
+ "perLineFormula_one": "costo totale ÷ {{count}} riga",
+ "perLineFormula_other": "costo totale ÷ {{count}} righe",
+ "subagent": "Sottoagente: {{cost}}",
+ "subagentCost": "Costo sottoagente",
+ "title": "Analisi dei costi",
+ "total": "Totale"
+ },
+ "insights": {
+ "agent": "agente",
+ "agent_few": "agenti",
+ "agent_many": "agenti",
+ "agent_one": "agente",
+ "agent_other": "agenti",
+ "agentTree": "Albero degli agenti ({{count}} {{unit}})",
+ "background": "(in background)",
+ "bashCommands": "Comandi Bash",
+ "outOfScopeFindings": "Risultati fuori ambito ({{count}})",
+ "questionsAsked": "Domande poste ({{count}})",
+ "repeated": "Ripetuti",
+ "skillsInvoked": "Skill invocate ({{count}})",
+ "taskDispatches": "Invii di task ({{count}})",
+ "tasksCreated": "Task creati ({{count}})",
+ "teamMode": "Modalità team",
+ "teams": "Team: {{teams}}",
+ "title": "Approfondimenti sulla sessione",
+ "total": "Totale",
+ "unique": "Unici",
+ "skillsInvoked_few": "Skill invocate ({{count}})",
+ "skillsInvoked_many": "Skill invocate ({{count}})",
+ "skillsInvoked_one": "Skill invocate ({{count}})",
+ "skillsInvoked_other": "Skill invocate ({{count}})",
+ "taskDispatches_few": "Invii di task ({{count}})",
+ "taskDispatches_many": "Invii di task ({{count}})",
+ "taskDispatches_one": "Invii di task ({{count}})",
+ "taskDispatches_other": "Invii di task ({{count}})",
+ "tasksCreated_few": "Task creati ({{count}})",
+ "tasksCreated_many": "Task creati ({{count}})",
+ "tasksCreated_one": "Task creati ({{count}})",
+ "tasksCreated_other": "Task creati ({{count}})",
+ "questionsAsked_few": "Domande poste ({{count}})",
+ "questionsAsked_many": "Domande poste ({{count}})",
+ "questionsAsked_one": "Domande poste ({{count}})",
+ "questionsAsked_other": "Domande poste ({{count}})",
+ "agentTree_few": "Albero degli agenti ({{count}} {{unit}})",
+ "agentTree_many": "Albero degli agenti ({{count}} {{unit}})",
+ "agentTree_one": "Albero degli agenti ({{count}} {{unit}})",
+ "agentTree_other": "Albero degli agenti ({{count}} {{unit}})",
+ "outOfScopeFindings_few": "Risultati fuori ambito ({{count}})",
+ "outOfScopeFindings_many": "Risultati fuori ambito ({{count}})",
+ "outOfScopeFindings_one": "Risultati fuori ambito ({{count}})",
+ "outOfScopeFindings_other": "Risultati fuori ambito ({{count}})",
+ "keyTakeaways": "Punti chiave"
+ },
+ "quality": {
+ "chars": "caratteri",
+ "corrections": "Correzioni",
+ "failed": "non superati",
+ "fileReadRedundancy": "Ridondanza letture file",
+ "firstMessage": "Primo messaggio",
+ "firstRun": "Prima esecuzione",
+ "frictionRate": "Tasso di attrito",
+ "lastRun": "Ultima esecuzione",
+ "messagesBeforeWork": "Messaggi prima del lavoro",
+ "passed": "superati",
+ "promptQuality": "Qualità del prompt",
+ "readsPerUniqueFile": "Letture/file unico",
+ "snapshot": "snapshot",
+ "snapshot_few": "snapshot",
+ "snapshot_many": "snapshot",
+ "snapshot_one": "snapshot",
+ "snapshot_other": "snapshot",
+ "startupOverhead": "Overhead di avvio",
+ "testProgression": "Progressione dei test",
+ "title": "Segnali di qualità",
+ "tokensBeforeWork": "Token prima del lavoro",
+ "totalReads": "Letture totali",
+ "uniqueFiles": "File unici",
+ "userMessages": "Messaggi utente",
+ "percentOfTotal": "% del totale"
+ },
+ "tokens": {
+ "apiCalls": "Chiamate API",
+ "cacheCreate": "Creazione cache",
+ "cacheEfficiency": "Efficienza cache",
+ "cacheRead": "Lettura cache",
+ "cacheReadPct": "% lettura cache",
+ "coldStart": "Avvio a freddo",
+ "cost": "Costo",
+ "input": "Input",
+ "model": "Modello",
+ "no": "No",
+ "output": "Output",
+ "readWriteRatio": "Rapporto L/S",
+ "title": "Utilizzo dei token",
+ "total": "Totale",
+ "yes": "Sì"
+ },
+ "subagents": {
+ "title": "Sottoagenti",
+ "metrics": {
+ "count": "Conteggio",
+ "totalTokens": "Token totali",
+ "totalDuration": "Durata totale",
+ "totalCost": "Costo totale"
+ },
+ "table": {
+ "description": "Descrizione",
+ "type": "Tipo",
+ "tokens": "Token",
+ "duration": "Durata",
+ "cost": "Costo"
+ }
+ },
+ "overview": {
+ "title": "Panoramica",
+ "yes": "Sì",
+ "no": "No",
+ "metrics": {
+ "duration": "Durata",
+ "messages": "Messaggi",
+ "contextUsage": "Utilizzo del contesto",
+ "compactions": "Compattazioni",
+ "branch": "Branch",
+ "subagents": "Sottoagenti",
+ "project": "Progetto",
+ "sessionId": "ID sessione"
+ }
+ },
+ "timeline": {
+ "title": "Cronologia e attività",
+ "idleAnalysis": "Analisi inattività",
+ "metrics": {
+ "idleGaps": "Intervalli di inattività",
+ "totalIdle": "Inattività totale",
+ "activeTime": "Tempo attivo",
+ "idlePercent": "% inattività"
+ },
+ "modelSwitches": "Cambi di modello ({{count}})",
+ "modelSwitches_one": "Cambi di modello ({{count}})",
+ "modelSwitches_other": "Cambi di modello ({{count}})",
+ "messageNumber": "msg n°{{number}}",
+ "keyEvents": "Eventi chiave",
+ "modelSwitches_few": "Cambi di modello ({{count}})",
+ "modelSwitches_many": "Cambi di modello ({{count}})"
+ },
+ "tools": {
+ "title": "Utilizzo degli strumenti",
+ "summary": "{{formattedCount}} chiamate totali su {{toolCount}} strumenti",
+ "columns": {
+ "tool": "Strumento",
+ "calls": "Chiamate",
+ "errors": "Errori",
+ "successPercent": "% successo",
+ "health": "Stato"
+ }
+ },
+ "git": {
+ "title": "Attività Git",
+ "commits": "Commit",
+ "pushes": "Push",
+ "linesAdded": "Righe aggiunte",
+ "linesRemoved": "Righe rimosse",
+ "branchesCreated": "Branch creati"
+ },
+ "friction": {
+ "title": "Segnali di attrito",
+ "rate": "Tasso di attrito: {{rate}}%",
+ "correctionsCount": "{{count}} correzioni",
+ "correctionsCount_one": "{{count}} correzione",
+ "corrections": "Correzioni",
+ "thrashingSignals": "Segnali di thrashing",
+ "repeatedBashCommands": "Comandi Bash ripetuti",
+ "reworkedFiles": "File rielaborati (3+ modifiche)",
+ "correctionsCount_few": "{{count}} correzioni",
+ "correctionsCount_many": "{{count}} correzioni",
+ "correctionsCount_other": "{{count}} correzioni"
+ },
+ "errors": {
+ "title": "Errori",
+ "permissionDenied": "Autorizzazione negata",
+ "messageIndex": "msg n°{{index}}",
+ "input": "Input",
+ "error": "Errore",
+ "count": "{{count}} errori",
+ "count_one": "{{count}} errore",
+ "permissionDenialCount": "{{count}} autorizzazioni negate",
+ "permissionDenialCount_one": "{{count}} autorizzazione negata",
+ "count_few": "{{count}} errori",
+ "count_many": "{{count}} errori",
+ "count_other": "{{count}} errori",
+ "permissionDenialCount_few": "{{count}} autorizzazioni negate",
+ "permissionDenialCount_many": "{{count}} autorizzazioni negate",
+ "permissionDenialCount_other": "{{count}} autorizzazioni negate"
+ }
+}
diff --git a/src/features/localization/renderer/locales/it/settings.json b/src/features/localization/renderer/locales/it/settings.json
new file mode 100644
index 00000000..215de5bc
--- /dev/null
+++ b/src/features/localization/renderer/locales/it/settings.json
@@ -0,0 +1,994 @@
+{
+ "tabs": {
+ "advanced": {
+ "description": "Opzioni per utenti esperti: esporta/importa configurazione, ripristina impostazioni predefinite e modifica la configurazione grezza.",
+ "label": "Avanzate"
+ },
+ "general": {
+ "description": "Preferenze principali dell'app come tema, lingua, densità di visualizzazione e comportamento all'avvio.",
+ "label": "Generali"
+ },
+ "infoAriaLabel": "Cos'è {{label}}?",
+ "notifications": {
+ "description": "Controlla quando e come ricevi notifiche su attività degli agenti, completamenti dei task ed errori.",
+ "label": "Notifiche"
+ }
+ },
+ "view": {
+ "description": "Gestisci le preferenze dell'app",
+ "loading": "Caricamento delle impostazioni...",
+ "title": "Impostazioni"
+ },
+ "runtimeProvider": {
+ "actions": {
+ "cancel": "Annulla",
+ "test": "Testa"
+ },
+ "defaults": {
+ "allProjects": "Tutti i progetti",
+ "allProjectsHint": "I test usano {{project}}. L'impostazione predefinita si applica a meno che un progetto non abbia un override.",
+ "loadingContexts": "Caricamento dei contesti...",
+ "projectHint": "Il salvataggio sovrascrive solo {{project}}.",
+ "projectOverrideContext": "Contesto di override del progetto",
+ "scopeDescriptionAllProjects": "Impostazione predefinita per ogni progetto che non ha un proprio override OpenCode.",
+ "scopeDescriptionProject": "Sovrascrivi solo il progetto selezionato. I team in esecuzione non vengono modificati.",
+ "selectProjectContext": "Seleziona contesto del progetto",
+ "selectProjectHint": "Seleziona un progetto prima di testare i modelli locali o salvare le impostazioni predefinite.",
+ "selectValidationContext": "Seleziona contesto di convalida",
+ "setAllProjectsDefault": "Imposta predefinito per tutti i progetti",
+ "setProjectDefault": "Imposta predefinito di progetto",
+ "thisProject": "Questo progetto",
+ "title": "Impostazioni predefinite OpenCode",
+ "validationContext": "Contesto di convalida"
+ },
+ "diagnostics": {
+ "copied": "Diagnostica copiata",
+ "copiedShort": "Copiata",
+ "copy": "Copia diagnostica",
+ "hints": "Suggerimenti",
+ "likelyCause": "Causa probabile:",
+ "windowsSymlinkAdminHint": "Windows: esegui Agent Teams AI come amministratore"
+ },
+ "models": {
+ "alreadyDefault": "Questo è già il valore predefinito OpenCode selezionato.",
+ "empty": "Nessun modello trovato.",
+ "emptyFree": "Nessun modello gratuito trovato.",
+ "emptyRecommended": "Nessun modello consigliato trovato.",
+ "emptyRecommendedFree": "Nessun modello gratuito consigliato trovato.",
+ "freeOnly": "Solo gratuiti",
+ "launchableDescription": "Route note dalla configurazione OpenCode, modelli gratuiti integrati e l'impostazione predefinita attuale. Le route locali necessitano di un test riuscito prima di essere pronte per l'avvio dei team.",
+ "launchableTitle": "Route dei modelli OpenCode",
+ "loadingRoutes": "Caricamento delle route dei modelli OpenCode...",
+ "noRoutesMatch": "Nessuna route di modello OpenCode corrisponde a \"{{query}}\".",
+ "noneReported": "Nessuna route di modello OpenCode segnalata finora. Configura una route locale in OpenCode o usa la scheda Provider per ispezionare i provider del catalogo.",
+ "recommendedOnly": "Solo consigliati",
+ "searchPlaceholder": "Cerca modelli",
+ "selectProjectBeforeTesting": "Seleziona un contesto di progetto prima di testare i modelli.",
+ "selectProjectBeforeTestingDefaults": "Seleziona un contesto di progetto prima di testare o salvare le impostazioni predefinite OpenCode.",
+ "testInProgress": "Il test del modello è già in esecuzione.",
+ "useInTeamPicker": "Salva per il selettore di team",
+ "validationContextRequired": "Seleziona un contesto di convalida qui sopra per abilitare Testa e Imposta predefinito. Il salvataggio per il selettore di team memorizza solo la route per i nuovi team.",
+ "actionsUnavailable": "Le azioni sono temporaneamente non disponibili.",
+ "defaultSaveInProgress": "L'impostazione predefinita OpenCode è in fase di salvataggio.",
+ "routeUnavailableAuth": "Questo provider richiede l'autenticazione prima che questo modello possa essere usato.",
+ "routeUnavailableFailed": "Questa route di modello non ha superato l'ultimo test di esecuzione.",
+ "routeUnavailableGeneric": "Questa route di modello non può essere usata al momento.",
+ "routeUnavailableUnknown": "Questo modello è l'impostazione predefinita OpenCode attuale, ma non è ancora disponibile nel catalogo live."
+ },
+ "providers": {
+ "catalog": "Catalogo dei provider OpenCode",
+ "countFallback": "Provider OpenCode",
+ "description": "{{count}}. I provider connessi e consigliati vengono mostrati per primi.",
+ "loadMore": "Carica altri provider",
+ "loading": "Caricamento dei provider OpenCode",
+ "noMatches": "Nessun provider corrisponde a quella ricerca.",
+ "noneReported": "Nessun provider OpenCode segnalato dal runtime gestito.",
+ "recommended": "Consigliati",
+ "refreshCatalog": "Aggiorna catalogo",
+ "searchPlaceholder": "Cerca provider",
+ "description_few": "{{count}}. I provider connessi e consigliati vengono mostrati per primi.",
+ "description_many": "{{count}}. I provider connessi e consigliati vengono mostrati per primi.",
+ "description_one": "{{count}}. I provider connessi e consigliati vengono mostrati per primi.",
+ "description_other": "{{count}}. I provider connessi e consigliati vengono mostrati per primi."
+ },
+ "setup": {
+ "loading": "Caricamento della configurazione del provider..."
+ },
+ "summary": {
+ "defaultModel": "Predefinito OpenCode: {{model}}",
+ "loading": "Caricamento del runtime OpenCode gestito, dei provider connessi e dei modelli predefiniti...",
+ "source": "Origine: {{source}}",
+ "title": "Runtime OpenCode"
+ },
+ "tabs": {
+ "models": "Modelli",
+ "providers": "Provider"
+ },
+ "modelRoutes": {
+ "searchPlaceholder": "Cerca route dei modelli"
+ },
+ "badges": {
+ "usedInTeamPicker": "Salvato per il selettore di team",
+ "free": "gratuito",
+ "local": "locale",
+ "configured": "configurato",
+ "knownRoute": "route nota",
+ "connected": "connesso",
+ "verified": "verificato",
+ "needsTest": "richiede test",
+ "failed": "non riuscito",
+ "unknown": "sconosciuto",
+ "default": "predefinito"
+ },
+ "compatibleEndpoint": {
+ "baseUrlPlaceholder": "http://localhost:1234"
+ }
+ },
+ "general": {
+ "agentLanguage": {
+ "description": "Lingua per la comunicazione degli agenti",
+ "descriptionWithDetected": "Lingua per la comunicazione degli agenti (rilevata: {{detected}})",
+ "emptyMessage": "Nessuna lingua trovata.",
+ "label": "Lingua",
+ "searchPlaceholder": "Cerca lingua...",
+ "selectPlaceholder": "Seleziona lingua...",
+ "title": "Lingua degli agenti"
+ },
+ "appLanguage": {
+ "description": "Lingua per l'interfaccia dell'applicazione.",
+ "label": "Lingua",
+ "title": "Lingua dell'app"
+ },
+ "appearance": {
+ "autoExpandAIGroups": {
+ "description": "Espandi automaticamente ogni turno di risposta quando apri un transcript o ricevi un nuovo messaggio",
+ "label": "Espandi le risposte AI per impostazione predefinita"
+ },
+ "nativeTitleBar": {
+ "description": "Usa il frame della finestra di sistema predefinito invece della barra del titolo personalizzata",
+ "label": "Usa la barra del titolo nativa",
+ "restartConfirm": {
+ "confirmLabel": "Riavvia",
+ "message": "L'app deve essere riavviata per applicare la modifica alla barra del titolo. Riavviare ora?",
+ "title": "Riavvio richiesto"
+ }
+ },
+ "theme": {
+ "description": "Scegli il tema di colori che preferisci",
+ "label": "Tema",
+ "options": {
+ "dark": "Scuro",
+ "light": "Chiaro",
+ "system": "Sistema"
+ }
+ },
+ "title": "Aspetto"
+ },
+ "browserAccess": {
+ "serverMode": {
+ "description": "Avvia un server HTTP per accedere all'interfaccia da un browser o incorporarla in iframe",
+ "label": "Abilita modalità server"
+ },
+ "title": "Accesso dal browser"
+ },
+ "localClaudeRoot": {
+ "actions": {
+ "selectFolder": "Seleziona cartella",
+ "selectFolderManually": "Seleziona cartella manualmente",
+ "useAutoDetect": "Usa rilevamento automatico",
+ "useFolder": "Usa cartella",
+ "usePath": "Usa percorso",
+ "useThisPath": "Usa questo percorso",
+ "useWsl": "Usi Linux/WSL?"
+ },
+ "confirm": {
+ "noProjectsDir": {
+ "message": "Questa cartella non contiene una directory \"projects\". Continuare comunque?",
+ "title": "Nessuna directory projects trovata"
+ },
+ "notClaudeDir": {
+ "message": "Questa cartella si chiama \"{{folderName}}\", non \".claude\". Continuare comunque?",
+ "title": "La cartella selezionata non è .claude"
+ },
+ "noWslPaths": {
+ "message": "Impossibile trovare automaticamente distribuzioni WSL con dati Claude. Selezionare la cartella manualmente?",
+ "title": "Nessun percorso Claude WSL trovato"
+ },
+ "wslNoProjectsDir": {
+ "message": "\"{{path}}\" non contiene una directory \"projects\". Continuare comunque?",
+ "title": "Al percorso WSL manca la directory projects"
+ }
+ },
+ "current": {
+ "autoDetected": "Rilevato automaticamente: {{path}}",
+ "autoDetectedPath": "Uso del percorso rilevato automaticamente",
+ "customPath": "Uso del percorso personalizzato",
+ "label": "Radice locale attuale"
+ },
+ "description": "Scegli quale cartella locale viene trattata come radice dei dati Claude",
+ "errors": {
+ "detectWslFailed": "Impossibile rilevare i percorsi della radice Claude WSL",
+ "loadFailed": "Impossibile caricare le impostazioni della radice Claude locale",
+ "updateFailed": "Impossibile aggiornare la radice Claude"
+ },
+ "title": "Radice Claude locale",
+ "wslModal": {
+ "closeAriaLabel": "Chiudi finestra dei percorsi WSL",
+ "description": "Distribuzioni WSL rilevate e candidati per la radice Claude",
+ "noProjectsDir": "Nessuna directory projects rilevata",
+ "title": "Seleziona radice Claude WSL"
+ }
+ },
+ "privacy": {
+ "telemetry": {
+ "description": "Aiuta a migliorare l'app inviando dati anonimi su crash e prestazioni",
+ "label": "Invia segnalazioni di crash"
+ },
+ "title": "Privacy"
+ },
+ "server": {
+ "runningOn": "In esecuzione su",
+ "standaloneModeDescription": "In esecuzione in modalità standalone. Il server HTTP è sempre attivo. Le notifiche di sistema non sono disponibili - i trigger delle notifiche vengono registrati solo nell'app.",
+ "title": "Server"
+ },
+ "startup": {
+ "launchAtLogin": {
+ "description": "Avvia automaticamente l'app quando accedi",
+ "label": "Avvia all'accesso"
+ },
+ "showDockIcon": {
+ "description": "Mostra l'icona dell'app nel dock (macOS)",
+ "label": "Mostra icona nel dock"
+ },
+ "title": "Avvio"
+ }
+ },
+ "notifications": {
+ "dev": {
+ "descriptionPrefix": "Le notifiche potrebbero non funzionare in modalità di sviluppo. macOS identifica l'app come \"Electron\" (bundle ID",
+ "descriptionSuffix": ") invece del nome dell'app di produzione. Controlla Impostazioni di sistema > Notifiche > Electron per verificare i permessi.",
+ "title": "Modalità sviluppo"
+ },
+ "ignoredRepositories": {
+ "description": "Le notifiche da questi repository verranno ignorate",
+ "empty": "Nessun repository ignorato",
+ "selectPlaceholder": "Seleziona repository da ignorare...",
+ "title": "Repository ignorati"
+ },
+ "settings": {
+ "enabled": {
+ "description": "Mostra notifiche di sistema per errori ed eventi",
+ "label": "Abilita notifiche di sistema"
+ },
+ "sound": {
+ "description": "Riproduci un suono quando appaiono le notifiche",
+ "label": "Riproduci suono"
+ },
+ "subagentErrors": {
+ "description": "Rileva e notifica gli errori nelle sessioni dei sottoagenti",
+ "label": "Includi errori dei sottoagenti"
+ },
+ "title": "Impostazioni delle notifiche"
+ },
+ "snooze": {
+ "clear": "Annulla posticipo",
+ "description": "Sospendi temporaneamente le notifiche",
+ "descriptionWithTime": "Posticipate fino a {{time}}",
+ "label": "Posticipa notifiche",
+ "options": {
+ "15": "15 minuti",
+ "30": "30 minuti",
+ "60": "1 ora",
+ "120": "2 ore",
+ "240": "4 ore",
+ "-1": "Fino a domani"
+ },
+ "selectDuration": "Seleziona durata..."
+ },
+ "taskCompletion": {
+ "description": "Ricevi notifiche native del sistema operativo quando Claude termina i task - suoni, banner e badge su Dock/barra delle applicazioni. Funziona su macOS, Linux e Windows.",
+ "installPlugin": "Installa il plugin claude-notifications-go",
+ "title": "Notifiche di completamento dei task"
+ },
+ "team": {
+ "allTasksCompleted": {
+ "description": "Notifica quando ogni task di un team raggiunge lo stato completato",
+ "label": "Tutti i task completati"
+ },
+ "autoResumeOnRateLimit": {
+ "description": "Quando Claude segnala un orario di reimpostazione, pianifica un sollecito di follow-up per il lead del team dopo la reimpostazione del limite",
+ "label": "Riprendi automaticamente dopo il limite di frequenza"
+ },
+ "clarifications": {
+ "description": "Mostra notifiche native del sistema operativo quando un task richiede il tuo input",
+ "label": "Notifiche di chiarimento dei task"
+ },
+ "crossTeamMessage": {
+ "description": "Notifica quando arriva un messaggio da un altro team",
+ "label": "Notifiche di messaggi tra team"
+ },
+ "leadInbox": {
+ "description": "Notifica quando i membri del team inviano messaggi al lead del team",
+ "label": "Notifiche della posta in arrivo del lead"
+ },
+ "statusChange": {
+ "description": "Mostra notifiche native del sistema operativo quando lo stato di un task cambia",
+ "label": "Notifiche di cambio stato dei task",
+ "onlySolo": {
+ "description": "Notifica solo quando il team non ha membri",
+ "label": "Solo in modalità Solo"
+ },
+ "statuses": {
+ "description": "Quali stati di destinazione attivano una notifica",
+ "label": "Notifica su questi stati",
+ "options": {
+ "approved": "Approvato",
+ "completed": "Completato",
+ "deleted": "Eliminato",
+ "in_progress": "Avviato",
+ "needsFix": "Da correggere",
+ "pending": "In attesa",
+ "review": "Revisione"
+ }
+ }
+ },
+ "taskComments": {
+ "description": "Mostra notifiche native del sistema operativo quando gli agenti commentano i task",
+ "label": "Notifiche di commenti ai task"
+ },
+ "taskCreated": {
+ "description": "Mostra notifiche native del sistema operativo quando viene creato un nuovo task",
+ "label": "Notifiche di task creati"
+ },
+ "teamLaunched": {
+ "description": "Notifica quando un team termina l'avvio ed è pronto",
+ "label": "Notifiche di team avviato"
+ },
+ "title": "Notifiche del team",
+ "toolApproval": {
+ "description": "Notifica quando uno strumento richiede la tua approvazione (Consenti/Nega) mentre l'app non è in primo piano",
+ "label": "Notifiche di approvazione degli strumenti"
+ },
+ "userInbox": {
+ "description": "Notifica quando i membri del team ti inviano messaggi",
+ "label": "Notifiche della posta in arrivo utente"
+ }
+ },
+ "test": {
+ "action": "Invia test",
+ "description": "Invia una notifica di test per verificare la consegna",
+ "failedToSend": "Impossibile inviare la notifica di test",
+ "label": "Notifica di test",
+ "sending": "Invio in corso...",
+ "sent": "Inviata!",
+ "unknownError": "Errore sconosciuto"
+ }
+ },
+ "advanced": {
+ "about": {
+ "appIconAlt": "Icona dell'app",
+ "description": "Assembla team di agenti AI che lavorano autonomamente in parallelo, comunicano tra team e gestiscono i task su una bacheca Kanban - con revisione del codice integrata, monitoraggio dei processi in tempo reale e piena visibilità sugli strumenti.",
+ "standalone": "Standalone",
+ "title": "Informazioni",
+ "version": "Versione {{version}}"
+ },
+ "configuration": {
+ "editConfig": "Modifica configurazione",
+ "exportConfig": "Esporta configurazione",
+ "importConfig": "Importa configurazione",
+ "openInEditor": "Apri nell'editor",
+ "resetToDefaults": "Ripristina impostazioni predefinite",
+ "title": "Configurazione"
+ },
+ "updates": {
+ "available": "v{{version}} disponibile",
+ "check": "Controlla aggiornamenti",
+ "checking": "Controllo in corso...",
+ "ready": "Aggiornamento pronto",
+ "unknownVersion": "sconosciuta",
+ "upToDate": "Aggiornato"
+ },
+ "appName": "Agent Teams AI"
+ },
+ "configEditor": {
+ "errors": {
+ "loadFailed": "Impossibile caricare la configurazione",
+ "saveFailed": "Impossibile salvare la configurazione"
+ },
+ "footer": {
+ "autoSave": "Le modifiche vengono salvate automaticamente dopo la modifica",
+ "toClose": "per chiudere",
+ "escapeKey": "Esc"
+ },
+ "loading": "Caricamento della configurazione...",
+ "status": {
+ "invalidJson": "JSON non valido",
+ "saveFailed": "Salvataggio non riuscito",
+ "saved": "Salvato",
+ "saving": "Salvataggio in corso..."
+ },
+ "title": "Modifica configurazione"
+ },
+ "notificationTriggers": {
+ "add": {
+ "cancel": "Annulla",
+ "submit": "Aggiungi trigger",
+ "title": "Aggiungi trigger personalizzato"
+ },
+ "builtin": {
+ "description": "Trigger predefiniti forniti con l'applicazione. Puoi abilitarli o disabilitarli e personalizzarne i pattern.",
+ "title": "Trigger integrati"
+ },
+ "card": {
+ "builtinBadge": "Integrato",
+ "collapseAriaLabel": "Comprimi",
+ "deleteAriaLabel": "Elimina trigger",
+ "editNameAriaLabel": "Modifica nome",
+ "expandAriaLabel": "Espandi"
+ },
+ "color": {
+ "customHexTitle": "Colore esadecimale personalizzato",
+ "invalidHex": "Esadecimale non valido"
+ },
+ "configuration": {
+ "alertIfGreaterThan": "Avvisa se >",
+ "emptyPatternHint": "Lascia vuoto per corrispondere a tutto il contenuto. Usa la sintassi regex di JavaScript.",
+ "errorStatusDescription": "Si attiva quando l'esecuzione di uno strumento segnala un errore (is_error: true).",
+ "tokensUnit": "token",
+ "matchPatternPlaceholder": "es. error|failed|exception"
+ },
+ "custom": {
+ "description": "Crea i tuoi trigger per ricevere notifiche su pattern specifici o output degli strumenti.",
+ "empty": "Nessun trigger personalizzato configurato finora.",
+ "title": "Trigger personalizzati"
+ },
+ "errors": {
+ "invalidRegexPattern": "Pattern regex non valido"
+ },
+ "fields": {
+ "contentType": "Tipo di contenuto",
+ "matchField": "Campo di corrispondenza",
+ "matchPattern": "Pattern di corrispondenza (Regex)",
+ "scopeToolName": "Ambito / Nome strumento",
+ "scopeToolNameOptional": "Ambito / Nome strumento (facoltativo)",
+ "threshold": "Soglia",
+ "tokenType": "Tipo di token",
+ "triggerNamePlaceholder": "es. Avviso di build non riuscita",
+ "triggerNameRequired": "Nome del trigger *"
+ },
+ "ignorePatterns": {
+ "hint": "Premi Invio per aggiungere. La notifica viene saltata se un pattern corrisponde.",
+ "placeholder": "Aggiungi regex da ignorare...",
+ "removeAriaLabel": "Rimuovi pattern da ignorare",
+ "summary": "Avanzate: Regole di esclusione",
+ "title": "Pattern da ignorare (salta se corrisponde)"
+ },
+ "options": {
+ "contentTypes": {
+ "text": "Output di testo",
+ "thinking": "Ragionamento",
+ "tool_result": "Risultato dello strumento",
+ "tool_use": "Uso dello strumento"
+ },
+ "matchFields": {
+ "args": "Argomenti",
+ "command": "Comando",
+ "content": "Contenuto",
+ "description": "Descrizione",
+ "file_path": "Percorso file",
+ "fullInput": "Input completo (JSON)",
+ "glob": "Filtro glob",
+ "new_string": "Nuova stringa",
+ "old_string": "Vecchia stringa",
+ "path": "Percorso",
+ "pattern": "Pattern",
+ "prompt": "Prompt",
+ "query": "Query",
+ "skill": "Nome skill",
+ "subagent_type": "Tipo di sottoagente",
+ "text": "Contenuto di testo",
+ "thinking": "Contenuto di ragionamento",
+ "url": "URL"
+ },
+ "modes": {
+ "content_match": "Pattern di contenuto",
+ "error_status": "Errore di esecuzione",
+ "token_threshold": "Utilizzo elevato di token"
+ },
+ "tokenTypes": {
+ "input": "Token di input",
+ "output": "Token di output",
+ "total": "Token totali"
+ },
+ "toolNames": {
+ "anyTool": "Qualsiasi strumento"
+ }
+ },
+ "preview": {
+ "defaultTestTriggerName": "Trigger di test",
+ "detectedSuffix": "errori sarebbero stati rilevati",
+ "more": "...e altri {{count}}",
+ "more_few": "...e altri {{count}}",
+ "more_many": "...e altri {{count}}",
+ "more_one": "...e altro {{count}}",
+ "more_other": "...e altri {{count}}",
+ "testTrigger": "Trigger di test",
+ "testing": "Test in corso...",
+ "title": "Anteprima",
+ "truncatedWarning": "La ricerca si è interrotta in anticipo (timeout o limite di conteggio). Le corrispondenze effettive potrebbero essere superiori.",
+ "viewSession": "Visualizza sessione"
+ },
+ "repositoryScope": {
+ "empty": "Nessun repository selezionato - il trigger si applica a tutti i repository",
+ "hint": "Quando vengono selezionati dei repository, questo trigger si attiva solo per gli errori in quei repository.",
+ "placeholder": "Seleziona repository da aggiungere...",
+ "summary": "Avanzate: Ambito dei repository",
+ "title": "Limita ai repository (si applica solo ai repository selezionati)"
+ },
+ "sections": {
+ "configuration": "Configurazione",
+ "dotColor": "Colore del punto",
+ "generalInfo": "Informazioni generali",
+ "triggerCondition": "Condizione del trigger"
+ }
+ },
+ "workspaceProfiles": {
+ "actions": {
+ "addProfile": "Aggiungi profilo",
+ "cancel": "Annulla",
+ "deleteProfile": "Elimina profilo",
+ "editProfile": "Modifica profilo",
+ "save": "Salva"
+ },
+ "authMethods": {
+ "agent": "Agente SSH",
+ "auto": "Auto (da configurazione SSH)",
+ "password": "Password",
+ "privateKey": "Chiave privata"
+ },
+ "deleteConfirm": {
+ "confirmLabel": "Elimina",
+ "message": "Sei sicuro di voler eliminare \"{{name}}\"? Questa operazione non può essere annullata.",
+ "title": "Elimina profilo"
+ },
+ "description": "Salva i profili di connessione SSH per una riconnessione rapida",
+ "empty": {
+ "description": "Aggiungi un profilo SSH per connetterti rapidamente",
+ "title": "Nessun profilo salvato"
+ },
+ "form": {
+ "authentication": "Autenticazione",
+ "host": "Host",
+ "name": "Nome",
+ "passwordPrompt": "Ti verrà richiesta la password al momento della connessione.",
+ "port": "Porta",
+ "privateKeyPath": "Percorso della chiave privata",
+ "username": "Nome utente",
+ "namePlaceholder": "Il mio server",
+ "hostPlaceholder": "hostname o IP",
+ "usernamePlaceholder": "utente"
+ },
+ "loading": "Caricamento dei profili...",
+ "title": "Profili dello spazio di lavoro"
+ },
+ "connection": {
+ "actions": {
+ "connect": "Connetti",
+ "connecting": "Connessione in corso...",
+ "disconnect": "Disconnetti",
+ "testConnection": "Testa connessione",
+ "testing": "Test in corso..."
+ },
+ "currentMode": {
+ "description": "Origine dati per i file di sessione",
+ "label": "Modalità attuale",
+ "local": "Locale ({{path}})"
+ },
+ "description": "Connettiti a una macchina remota per visualizzare le sessioni di Claude Code in esecuzione lì",
+ "form": {
+ "authentication": "Autenticazione",
+ "host": "Host",
+ "password": "Password",
+ "port": "Porta",
+ "privateKeyPath": "Percorso della chiave privata",
+ "username": "Nome utente",
+ "hostPlaceholder": "hostname o alias della configurazione SSH",
+ "usernamePlaceholder": "utente"
+ },
+ "savedProfiles": {
+ "title": "Profili salvati"
+ },
+ "ssh": {
+ "title": "Connessione SSH"
+ },
+ "status": {
+ "connectedTo": "Connesso a {{host}}",
+ "remoteSessions": "Visualizzazione di sessioni remote tramite SSH"
+ },
+ "test": {
+ "failed": "Connessione non riuscita: {{error}}",
+ "success": "Connessione riuscita",
+ "unknownError": "Errore sconosciuto"
+ },
+ "title": "Connessione remota"
+ },
+ "providerRuntime": {
+ "actions": {
+ "cancel": "Annulla",
+ "cancelLogin": "Annulla accesso",
+ "connectChatGpt": "Connetti ChatGPT",
+ "delete": "Elimina",
+ "disable": "Disabilita",
+ "disconnectAccount": "Disconnetti account",
+ "generateLink": "Genera link",
+ "openLogin": "Apri accesso",
+ "reconnectAnthropic": "Riconnetti Anthropic",
+ "refresh": "Aggiorna",
+ "replaceKey": "Sostituisci chiave",
+ "saveEndpoint": "Salva endpoint",
+ "saveKey": "Salva chiave",
+ "saving": "Salvataggio in corso...",
+ "setApiKey": "Imposta chiave API",
+ "updateKey": "Aggiorna chiave",
+ "useCode": "Usa il codice"
+ },
+ "apiKey": {
+ "loadingStoredCredentials": "Caricamento delle credenziali archiviate...",
+ "projectScope": "Progetto",
+ "scope": "Ambito",
+ "storedIn": "Archiviata in {{backend}}",
+ "userScope": "Utente",
+ "storedInApp": "Archiviata nell'app",
+ "providers": {
+ "anthropic": {
+ "name": "Chiave API Anthropic",
+ "title": "Chiave API",
+ "description": "Usa una chiave API Anthropic diretta per l'accesso fatturato tramite API. La tua sessione dell'abbonamento Anthropic resta disponibile quando torni indietro.",
+ "placeholder": "sk-ant-..."
+ },
+ "codex": {
+ "name": "Chiave API Codex",
+ "title": "Chiave API",
+ "description": "Usa una chiave API OpenAI come percorso di autenticazione Codex secondario. Se passi Codex alla modalità chiave API, l'app rifletterà OPENAI_API_KEY in CODEX_API_KEY per gli avvii nativi.",
+ "placeholder": "sk-proj-..."
+ },
+ "gemini": {
+ "name": "Chiave API Gemini",
+ "title": "Accesso API",
+ "description": "Usa `GEMINI_API_KEY` per il backend dell'API Gemini. La CLI SDK e l'ADC non la richiedono.",
+ "placeholder": "AIza..."
+ }
+ }
+ },
+ "codex": {
+ "account": {
+ "appServer": "App-server: {{state}}",
+ "connected": "Connesso",
+ "description": "Gestisci la sessione locale dell'account app-server di Codex che alimenta gli avvii nativi supportati dall'abbonamento.",
+ "loginInProgress": "Accesso in corso",
+ "plan": "Piano: {{plan}}",
+ "reconnectRequired": "Riconnessione richiesta",
+ "title": "Account ChatGPT",
+ "hints": {
+ "autoUsesApiKeyUntilChatgpt": "{{message}} La modalità Auto continuerà a usare la chiave API rilevata finché ChatGPT non viene connesso.",
+ "detectedApiKeyNeedsApiMode": "{{message}} La chiave API rilevata viene usata solo dopo aver passato Codex alla modalità chiave API.",
+ "localArtifactsNoSession": "Codex CLI al momento non segnala alcun account ChatGPT attivo. Esistono dati locali dell'account Codex, ma non è selezionata alcuna sessione gestita attiva. I limiti di utilizzo compaiono qui solo dopo che Codex CLI ne rileva uno.",
+ "noActiveAccount": "Codex CLI al momento non segnala alcun account ChatGPT attivo. I limiti di utilizzo compaiono qui solo dopo che Codex CLI ne rileva uno.",
+ "reconnectBeforeUsage": "Codex ha un account ChatGPT selezionato localmente, ma la sessione attuale deve essere riconnessa prima che i limiti di utilizzo possano essere caricati qui.",
+ "usageLimitsAfterReport": "I limiti di utilizzo compaiono qui dopo che Codex li segnala per l'account ChatGPT connesso."
+ }
+ },
+ "install": {
+ "checking": "Controllo",
+ "downloading": "Download",
+ "installCli": "Installa Codex CLI",
+ "installing": "Installazione",
+ "retryInstall": "Riprova installazione",
+ "title": "Installa Codex CLI nei dati dell'app"
+ },
+ "rateLimits": {
+ "credits": "Crediti",
+ "creditsDescription": "I crediti vengono mostrati separatamente dall'utilizzo dell'abbonamento basato su finestre temporali e potrebbero non essere disponibili per le sessioni ChatGPT supportate da un piano.",
+ "noSecondaryWindow": "Codex non ha restituito una finestra secondaria per questo snapshot dell'account.",
+ "notReported": "Non segnalato",
+ "primaryReset": "Reimpostazione primaria",
+ "primaryUsed": "Primaria usata",
+ "primaryWindow": "Finestra primaria",
+ "remainingLeft": "{{value}} rimanenti",
+ "remainingUnknown": "Rimanenti sconosciuti",
+ "secondaryReset": "Reimpostazione secondaria",
+ "secondaryUsed": "Secondaria usata",
+ "secondaryWindow": "Finestra secondaria",
+ "usedQuotaNote": "Queste percentuali mostrano la quota usata, non la quota rimanente.",
+ "weeklyReset": "Reimpostazione settimanale",
+ "weeklyUsed": "Settimanale usata",
+ "weeklyUsedOneWeek": "Settimanale usata (1 sett.)",
+ "weeklyWindow": "Finestra settimanale",
+ "secondaryFallback": "secondaria",
+ "secondaryWindowNote": " I limiti settimanali vengono mostrati separatamente nella finestra {{window}}.",
+ "usageExplanationGeneric": "Mostra la quota usata, non la quota rimanente.",
+ "usageExplanationWindowOnly": "Mostra la quota usata nella finestra {{window}} attuale, non la quota rimanente.",
+ "usageExplanationWithRemaining": "{{used}} usata - circa {{remaining}} rimanenti nella finestra {{window}} attuale."
+ }
+ },
+ "compatibleEndpoint": {
+ "authToken": "Token di autenticazione",
+ "authTokenMissing": "Il token di autenticazione non è configurato.",
+ "baseUrl": "URL di base",
+ "description": "Usa un endpoint del runtime locale compatibile con Anthropic.",
+ "keepSavedToken": "Lascia vuoto per mantenere il token salvato",
+ "title": "Endpoint locale / compatibile",
+ "tokenStatus": "Token {{status}}",
+ "validation": {
+ "baseUrlRequired": "L'URL di base è obbligatorio",
+ "firstPartyAnthropic": "Usa Auto, Abbonamento o chiave API per Anthropic di prima parte",
+ "httpRequired": "L'URL di base deve usare http:// o https://",
+ "invalidUrl": "URL non valido",
+ "noCredentials": "L'URL di base non deve includere credenziali"
+ },
+ "status": {
+ "endpointDisabledTokenKept": "Endpoint disabilitato. Il token salvato è stato mantenuto.",
+ "endpointSaved": "Endpoint salvato",
+ "endpointSavedTokenMissing": "Endpoint salvato. Il token di autenticazione non è configurato."
+ }
+ },
+ "connection": {
+ "authenticationMethod": "Metodo di autenticazione",
+ "descriptions": {
+ "anthropic": "Scegli come si autenticano le sessioni Anthropic avviate dall'app.",
+ "codex": "Scegli se Codex deve preferire il tuo abbonamento ChatGPT o una chiave API all'avvio del runtime nativo.",
+ "gemini": "Configura l'accesso API facoltativo. La CLI SDK e l'ADC vengono comunque rilevati automaticamente.",
+ "opencode": "L'autenticazione OpenCode e l'inventario dei provider sono gestiti dal runtime OpenCode."
+ },
+ "method": "Metodo di connessione",
+ "mode": "Modalità: {{mode}}",
+ "selected": "Selezionato",
+ "switching": "Cambio in corso...",
+ "title": "Connessione"
+ },
+ "connectionCards": {
+ "apiKey": {
+ "title": "Chiave API"
+ },
+ "anthropic": {
+ "apiKeyDescription": "Usa ANTHROPIC_API_KEY e la fatturazione dell'API Anthropic.",
+ "autoDescription": "Usa le impostazioni predefinite del runtime Anthropic e la migliore credenziale locale disponibile.",
+ "hint": "Auto mantiene Anthropic sulla sua risoluzione predefinita delle credenziali locali.",
+ "subscriptionDescription": "Usa la tua sessione di accesso Anthropic locale e l'accesso tramite abbonamento.",
+ "subscriptionTitle": "Abbonamento Anthropic"
+ },
+ "auto": {
+ "title": "Auto"
+ },
+ "codex": {
+ "apiKeyDescription": "Usa la fatturazione OPENAI_API_KEY e CODEX_API_KEY per gli avvii nativi di Codex.",
+ "autoDescription": "Preferisci il tuo account ChatGPT e l'abbonamento. Usa la modalità chiave API solo se necessario.",
+ "chatgptDescription": "Usa il tuo account ChatGPT connesso e l'abbonamento Codex.",
+ "chatgptTitle": "Account ChatGPT",
+ "hint": "Codex viene sempre eseguito tramite il runtime nativo. Auto preferisce il tuo account ChatGPT prima di ricorrere alle credenziali con chiave API."
+ }
+ },
+ "description": "Gestisci come ogni provider si connette e, quando supportato, quale backend deve usare il runtime multimodello.",
+ "fastMode": {
+ "defaultOff": "Disattivo per impostazione predefinita",
+ "description": "Applica la modalità Fast di Claude Code per impostazione predefinita ai nuovi avvii di team Anthropic quando il modello risolto e il runtime lo consentono.",
+ "disabledHint": "I nuovi avvii Anthropic restano alla velocità normale a meno che un team non abiliti esplicitamente la modalità Fast.",
+ "enabledHint": "I nuovi avvii Anthropic richiederanno la modalità Fast per impostazione predefinita quando il modello risolto la supporta.",
+ "notExposed": "Questo runtime Anthropic non espone la modalità Fast.",
+ "preferFast": "Preferisci Fast",
+ "title": "Modalità Fast predefinita",
+ "unavailableForRuntime": "La modalità Fast non è attualmente disponibile per questo runtime Anthropic."
+ },
+ "alerts": {
+ "anthropicApiKeyMissing": "È selezionata la modalità chiave API, ma non è ancora disponibile alcuna credenziale API Anthropic.",
+ "anthropicStoredKeyAvailable": "È disponibile una chiave API salvata, ma le sessioni Anthropic avviate dall'app la usano solo dopo essere passate alla modalità chiave API.",
+ "anthropicSubscriptionMissing": "È selezionata la modalità abbonamento Anthropic. Accedi con Anthropic per usare questo provider.",
+ "authTokenMissing": "Il token di autenticazione non è configurato. Molti endpoint locali compatibili con Anthropic richiedono un token non vuoto.",
+ "chatgptLoginPending": "In attesa del completamento dell'accesso all'account ChatGPT...",
+ "chatgptLoginStarting": "Avvio dell'accesso ChatGPT...",
+ "codexApiKeyMissing": "È selezionata la modalità chiave API, ma non è ancora disponibile alcuna credenziale OPENAI_API_KEY o CODEX_API_KEY.",
+ "codexLocalArtifactsNoSession": "Codex CLI al momento non ha alcun account ChatGPT attivo. Esistono dati locali dell'account Codex, ma non è selezionata alcuna sessione gestita attiva.",
+ "codexNeedsReconnect": "Codex ha un account ChatGPT selezionato localmente, ma la sessione attuale deve essere riconnessa.",
+ "codexNoChatgptAccount": "Codex CLI al momento non ha alcun account ChatGPT attivo. Connetti ChatGPT per usare il tuo abbonamento.",
+ "codexNoCredential": "Non è ancora disponibile alcun account ChatGPT o chiave API.",
+ "geminiApiUnavailable": "L'API Gemini è attualmente non disponibile. Configura qui `GEMINI_API_KEY` o usa credenziali Google ADC valide.",
+ "withApiKeyFallback": "{{message}} Passa alla modalità chiave API per usare la chiave API rilevata."
+ },
+ "authModeDescriptions": {
+ "anthropic": {
+ "apiKey": "Forza le sessioni Anthropic avviate dall'app a usare una credenziale con chiave API.",
+ "auto": "Usa il comportamento predefinito del runtime. Le chiavi API salvate in questa app vengono usate solo dopo essere passati alla modalità chiave API.",
+ "oauth": "Forza le sessioni Anthropic avviate dall'app a usare la sessione locale dell'abbonamento Anthropic."
+ },
+ "codex": {
+ "apiKey": "Forza gli avvii nativi di Codex a usare la fatturazione OPENAI_API_KEY / CODEX_API_KEY.",
+ "auto": "Preferisci il tuo account ChatGPT quando è disponibile. Ricorri alla modalità chiave API solo quando necessario.",
+ "chatgpt": "Forza gli avvii nativi di Codex a usare il tuo account ChatGPT connesso e l'abbonamento."
+ }
+ },
+ "progress": {
+ "applyingConnectionChanges": "Applicazione delle modifiche di connessione...",
+ "refreshingProviderStatus": "Aggiornamento dello stato del provider...",
+ "savingCompatibleEndpoint": "Salvataggio dell'endpoint compatibile...",
+ "switchingAnthropicSubscription": "Passaggio all'abbonamento Anthropic...",
+ "switchingApiKey": "Passaggio alla chiave API...",
+ "switchingApiKeyMode": "Passaggio alla modalità chiave API...",
+ "switchingAuto": "Passaggio ad Auto...",
+ "switchingChatgpt": "Passaggio alla modalità account ChatGPT..."
+ },
+ "provider": "Provider",
+ "runtime": {
+ "descriptions": {
+ "anthropic": "Anthropic al momento non ha un selettore di backend del runtime separato.",
+ "codex": "Codex ora viene eseguito solo tramite il percorso del runtime nativo.",
+ "gemini": "Scegli quale backend del runtime Gemini deve usare il multimodello.",
+ "opencode": "OpenCode usa il proprio host del runtime gestito. Il desktop al momento espone solo lo stato."
+ },
+ "title": "Runtime",
+ "updating": "Aggiornamento del runtime..."
+ },
+ "runtimeSummary": "Runtime: {{runtime}}",
+ "status": {
+ "configured": "configurato",
+ "enabled": "Abilitato",
+ "notConfigured": "Non configurato",
+ "notSet": "non impostato",
+ "off": "Disattivo",
+ "unknown": "Sconosciuto"
+ },
+ "title": "Impostazioni del provider",
+ "usage": {
+ "apiKey": "Uso della chiave API",
+ "apiKeyRequired": "Chiave API richiesta",
+ "compatibleEndpoint": "Uso di un endpoint compatibile",
+ "notConnected": "Non connesso",
+ "usingMethod": "Uso di {{method}}"
+ },
+ "errors": {
+ "apiKeyDeletedRefreshFailed": "Chiave API eliminata, ma impossibile aggiornare lo stato del provider.",
+ "apiKeySavedRefreshFailed": "Chiave API salvata, ma impossibile aggiornare lo stato del provider.",
+ "connectionUpdatedRefreshFailed": "Connessione aggiornata, ma impossibile aggiornare lo stato del provider.",
+ "deleteApiKey": "Impossibile eliminare la chiave API",
+ "disableEndpoint": "Impossibile disabilitare l'endpoint",
+ "endpointDisabledRefreshFailed": "Endpoint disabilitato, ma impossibile aggiornare lo stato del provider.",
+ "endpointSavedRefreshFailed": "Endpoint salvato, ma impossibile aggiornare lo stato del provider.",
+ "refreshCodexAccount": "Impossibile aggiornare l'account Codex",
+ "saveApiKey": "Impossibile salvare la chiave API",
+ "saveEndpoint": "Impossibile salvare l'endpoint",
+ "updateAnthropicFastMode": "Impossibile aggiornare la modalità Fast di Anthropic",
+ "updateConnection": "Impossibile aggiornare la connessione",
+ "updateRuntimeBackend": "Impossibile aggiornare il backend del runtime",
+ "apiKeyRequired": "La chiave API è obbligatoria"
+ },
+ "connectionUi": {
+ "authMode": {
+ "auto": "Auto",
+ "oauth": "Abbonamento / OAuth",
+ "chatgpt": "Account ChatGPT",
+ "apiKey": "Chiave API",
+ "anthropicSubscription": "Abbonamento Anthropic"
+ },
+ "authMethod": {
+ "apiKey": "Chiave API",
+ "apiKeyHelper": "Helper per chiave API",
+ "oauth": "OAuth",
+ "claudeSubscription": "Abbonamento Claude",
+ "geminiCli": "Gemini CLI",
+ "googleAccount": "Account Google",
+ "serviceAccount": "account di servizio"
+ },
+ "runtime": {
+ "codexNative": "Codex nativo",
+ "currentRuntime": "Runtime attuale",
+ "selectedRuntime": "Runtime selezionato",
+ "summary": "{{prefix}}: {{runtime}}"
+ },
+ "status": {
+ "checking": "Controllo...",
+ "modelsAvailable": "Modelli disponibili",
+ "checked": "Controllato",
+ "providerActivity": "Attività del provider",
+ "notConnected": "Non connesso",
+ "startingChatGptLogin": "Avvio dell'accesso ChatGPT...",
+ "waitingForChatGptLogin": "In attesa dell'accesso all'account ChatGPT...",
+ "chatGptVerificationDegraded": "Account ChatGPT rilevato - la verifica dell'account è attualmente degradata.",
+ "chatGptAccountReady": "Account ChatGPT pronto",
+ "apiKeyReady": "Chiave API pronta",
+ "codexLocalAccountNeedsReconnect": "Codex ha un account ChatGPT selezionato localmente, ma la sessione attuale deve essere riconnessa.",
+ "codexNoActiveManagedSession": "Codex CLI non segnala alcun accesso ChatGPT attivo. Esistono dati locali dell'account Codex, ma non è selezionata alcuna sessione gestita attiva.",
+ "codexNoActiveChatGptLogin": "Codex CLI non segnala alcun accesso ChatGPT attivo",
+ "connectChatGptForSubscription": "Connetti un account ChatGPT per usare il tuo abbonamento Codex.",
+ "codexNativeReady": "Codex nativo pronto",
+ "codexNativeUnavailable": "Codex nativo non disponibile",
+ "unavailableInCurrentRuntime": "Non disponibile nel runtime attuale",
+ "connectedViaApiKey": "Connesso tramite chiave API",
+ "apiKeyConfiguredNotVerified": "Chiave API configurata, ma non ancora verificata",
+ "apiKeyModeMissingCredential": "Modalità chiave API selezionata, ma non è configurata alcuna chiave API",
+ "connectedVia": "Connesso tramite {{method}}",
+ "unableToVerify": "Impossibile verificare"
+ },
+ "mode": {
+ "selectedAuth": "Autenticazione selezionata: {{authMode}}",
+ "preferredAuth": "Autenticazione preferita: {{authMode}}"
+ },
+ "credential": {
+ "apiKeyConfigured": "La chiave API è configurata",
+ "savedApiKeyAvailable": "Chiave API salvata disponibile in Gestisci",
+ "apiKeyAlsoConfigured": "Chiave API configurata anche in Gestisci",
+ "apiKeyConfiguredInManage": "La chiave API è configurata in Gestisci",
+ "apiKeyFallbackInManage": "Chiave API disponibile anche in Gestisci come fallback",
+ "availableAsFallback": "{{summary}} - disponibile come fallback",
+ "savedApiKeyAvailableIfSwitch": "Chiave API salvata disponibile in Gestisci se passi alla modalità chiave API",
+ "availableIfSwitch": "{{summary}} - disponibile se passi alla modalità chiave API",
+ "autoWillUseUntilChatGpt": "{{summary}} - Auto la userà finché ChatGPT non viene connesso"
+ },
+ "actions": {
+ "connect": "Connetti",
+ "connectAnthropic": "Connetti Anthropic",
+ "connectChatGpt": "Connetti ChatGPT",
+ "disconnect": "Disconnetti",
+ "openLogin": "Apri accesso"
+ },
+ "disconnect": {
+ "anthropicTitle": "Disconnettere l'abbonamento Anthropic?",
+ "anthropic": "Questo rimuove la sessione locale dell'abbonamento Anthropic dal runtime della Claude CLI.",
+ "anthropicWithApiKey": "Questo rimuove la sessione locale dell'abbonamento Anthropic dal runtime della Claude CLI. Le chiavi API salvate in Gestisci restano disponibili.",
+ "geminiTitle": "Disconnettere Gemini CLI?",
+ "gemini": "Questo cancella i metadati della sessione locale di Gemini CLI. Le credenziali ADC esterne e le chiavi API salvate non vengono rimosse."
+ }
+ }
+ },
+ "cliRuntime": {
+ "actions": {
+ "checkForUpdates": "Controlla aggiornamenti",
+ "checking": "Controllo in corso...",
+ "extensions": "Estensioni",
+ "installRuntime": "Installa {{runtime}}",
+ "manage": "Gestisci",
+ "recheck": "Ricontrolla",
+ "reinstallRuntime": "Reinstalla {{runtime}}",
+ "retry": "Riprova",
+ "update": "Aggiorna"
+ },
+ "installer": {
+ "checkingLatest": "Verifica dell'ultima versione...",
+ "downloading": "Download in corso...",
+ "failed": "Installazione non riuscita",
+ "installed": "Installato v{{version}}",
+ "installing": "Installazione in corso...",
+ "latest": "ultima",
+ "verifying": "Verifica del checksum..."
+ },
+ "labels": {
+ "multimodel": "Multimodello"
+ },
+ "loading": {
+ "aiProviders": "Controllo dei provider AI...",
+ "claudeCli": "Controllo della Claude CLI..."
+ },
+ "provider": {
+ "backend": "Backend: {{backend}}",
+ "loadingModels": "Caricamento dei modelli...",
+ "modelsUnavailable": "Modelli non disponibili per questa build del runtime",
+ "runtime": "Runtime: {{runtime}}"
+ },
+ "providerTerminal": {
+ "authFailed": "Autenticazione non riuscita",
+ "authUpdated": "Autenticazione aggiornata",
+ "loggedOut": "Provider disconnesso",
+ "login": "Accedi",
+ "logout": "Disconnetti",
+ "logoutFailed": "Disconnessione non riuscita"
+ },
+ "status": {
+ "configuredNotFound": "Il {{runtime}} configurato non è stato trovato.",
+ "foundButFailed": "{{runtime}} è stato trovato ma non si è avviato",
+ "healthCheckFailed": "Il {{runtime}} configurato non ha superato il controllo di integrità all'avvio.",
+ "notInstalled": "{{runtime}} non installato"
+ },
+ "title": "Runtime CLI"
+ },
+ "cliStatus": {
+ "versionUpgrade": "v{{current}} -> v{{latest}}"
+ }
+}
diff --git a/src/features/localization/renderer/locales/it/team.json b/src/features/localization/renderer/locales/it/team.json
new file mode 100644
index 00000000..58bb457d
--- /dev/null
+++ b/src/features/localization/renderer/locales/it/team.json
@@ -0,0 +1,2487 @@
+{
+ "activity": {
+ "actions": {
+ "createTaskFromMessage": "Crea task dal messaggio",
+ "editMessage": "Modifica messaggio",
+ "expandMessage": "Espandi messaggio",
+ "replyToMessage": "Rispondi al messaggio",
+ "restartTeam": "Riavvia team"
+ },
+ "authError": {
+ "description": "Autenticazione non riuscita. Il riavvio del team aggiornerà la sessione e potrebbe risolvere il problema. Se il problema persiste, controlla le tue credenziali API o riprova più tardi."
+ },
+ "automation": {
+ "reviewPickup": "Chiesto a un membro del team di prendere in carico la revisione",
+ "stallNudge": "Chiesto a un membro del team di continuare un task in stallo",
+ "workSyncBody": "Chiesto a un membro del team di sincronizzare il lavoro corrente"
+ },
+ "badges": {
+ "automation": "automazione",
+ "bootstrap": "bootstrap",
+ "command": "comando",
+ "comment": "Commento",
+ "live": "in diretta",
+ "note": "nota",
+ "rateLimited": "Limite di frequenza raggiunto",
+ "restart": "riavvio",
+ "result": "risultato",
+ "session": "sessione",
+ "stallNudge": "sollecito per stallo",
+ "start": "avvio",
+ "workSync": "sincronizzazione lavoro",
+ "agentError": "Errore agente",
+ "apiError": "Errore API"
+ },
+ "bootstrap": {
+ "acknowledged": "Bootstrap confermato",
+ "restarting": "Riavvio del membro del team",
+ "starting": "Avvio del membro del team"
+ },
+ "rawJson": "JSON grezzo",
+ "unread": "Non letto",
+ "thoughts": {
+ "count": "{{count}} pensieri",
+ "count_one": "{{count}} pensiero",
+ "expand": "Espandi pensieri",
+ "showMore": "Mostra di più",
+ "showLess": "Mostra di meno",
+ "count_few": "{{count}} pensieri",
+ "count_many": "{{count}} pensieri",
+ "count_other": "{{count}} pensieri",
+ "toolSummary": "🔧 {{summary}}",
+ "titleForMember": "{{name}} - pensieri"
+ },
+ "timeline": {
+ "loadingMessages": "Caricamento dei messaggi...",
+ "noMessages": "Nessun messaggio",
+ "emptyHint": "Invia un messaggio a un membro per vedere l'attività.",
+ "newSession": "Nuova sessione",
+ "olderCount": "+{{count}} precedenti",
+ "showMore": "Mostra altri {{count}}",
+ "showAll": "Mostra tutto",
+ "olderCount_one": "+{{count}} precedente",
+ "olderCount_few": "+{{count}} precedenti",
+ "olderCount_many": "+{{count}} precedenti",
+ "olderCount_other": "+{{count}} precedenti"
+ },
+ "pendingReplies": {
+ "title": "In attesa di risposte",
+ "openMember": "Apri membro",
+ "messageSentAwaitingReply": "Messaggio inviato, in attesa di risposta",
+ "awaitingReply": "in attesa di risposta",
+ "externalTeam": "team esterno",
+ "crossTeamAwaitingReply": "Messaggio tra team inviato, in attesa di risposta",
+ "user": "utente",
+ "awaitingApproval": "in attesa di approvazione"
+ },
+ "reply": {
+ "replyingTo": "In risposta a",
+ "action": "Rispondi"
+ },
+ "activeTasks": {
+ "inProgress": "In corso",
+ "expandInProgress": "Espandi in corso",
+ "collapseInProgress": "Comprimi in corso",
+ "reviewing": "in revisione",
+ "workingOn": "sta lavorando su"
+ },
+ "expandDialog": {
+ "description": "Vista messaggio espansa"
+ }
+ },
+ "create": {
+ "actions": {
+ "create": "Crea",
+ "creating": "Creazione in corso...",
+ "openExisting": "Apri team esistente",
+ "skipPreflightAndCreate": "Salta il controllo preliminare e crea"
+ },
+ "conflict": {
+ "description": "Eseguire due team nella stessa directory è rischioso - potrebbero entrare in conflitto modificando gli stessi file. Valuta l'uso di una directory diversa o di un worktree git per l'isolamento.",
+ "title": "Un altro team \"{{team}}\" è già in esecuzione per questa directory di lavoro",
+ "workingDirectory": "Directory di lavoro:"
+ },
+ "description": {
+ "copy": "Crea un nuovo team basato su uno esistente.",
+ "create": "Configura il tuo team e scegli come si avvia."
+ },
+ "errors": {
+ "nameExists": "Il nome del team esiste già",
+ "nameLaunching": "Un team con questo nome è attualmente in fase di avvio",
+ "createConfigFailed": "Impossibile creare la configurazione del team",
+ "loadProjectsFailed": "Impossibile caricare i progetti"
+ },
+ "fields": {
+ "color": "Colore (facoltativo)",
+ "description": "Descrizione (facoltativa)",
+ "prompt": "Prompt per il lead del team (facoltativo)",
+ "teamName": "Nome del team"
+ },
+ "launchAfterCreate": {
+ "description": "Avvia il team immediatamente tramite la Claude CLI locale.",
+ "label": "Esegui il comando dopo la creazione"
+ },
+ "localOnly": "Disponibile solo in modalità Electron locale.",
+ "onDisk": "Su disco:",
+ "placeholders": {
+ "description": "Breve descrizione dello scopo del team",
+ "prompt": "Istruzioni per il lead del team durante il provisioning..."
+ },
+ "saved": "Salvato",
+ "solo": {
+ "description": "Verrà avviato solo il lead del team (processo principale) - non verranno generati membri del team. Funziona come una normale sessione di agente nel runtime scelto (Claude Code, Codex, OpenCode, Gemini) ma con accesso alla bacheca dei task per la pianificazione. Risparmia token evitando l'overhead di coordinamento dei membri del team. Puoi aggiungere membri in seguito dalle impostazioni del team.",
+ "label": "Team solo"
+ },
+ "title": {
+ "copy": "Copia team",
+ "create": "Crea team"
+ },
+ "optional": {
+ "launchSettingsTitle": "Impostazioni di avvio facoltative",
+ "launchSettingsDescription": "Prompt, sicurezza e override della CLI si trovano qui quando ti servono.",
+ "teamDetailsTitle": "Dettagli del team facoltativi",
+ "teamDetailsDescription": "Mantieni compatto il flusso predefinito e aprilo solo quando vuoi un contesto aggiuntivo o un colore personalizzato."
+ },
+ "prepare": {
+ "unsupportedPreload": "La versione attuale del preload non supporta team:prepareProvisioning. Riavvia l'app di sviluppo.",
+ "selectWorkingDirectory": "Seleziona una directory di lavoro per convalidare l'ambiente di avvio.",
+ "someProvidersNeedAttention": "Alcuni provider selezionati richiedono attenzione.",
+ "readyWithNotes": "Tutti i provider selezionati sono pronti, con note.",
+ "ready": "Tutti i provider selezionati sono pronti.",
+ "failed": "Impossibile preparare i provider selezionati",
+ "checkingProviders": "Controllo dei provider selezionati...",
+ "preparingEnvironment": "Preparazione dell'ambiente...",
+ "selectedProvidersReadyWithNotes": "Provider selezionati pronti (con note)",
+ "selectedProvidersReady": "Provider selezionati pronti"
+ },
+ "validation": {
+ "nameMustContainLetterOrDigit": "Il nome deve contenere almeno una lettera o una cifra",
+ "nameTooLong": "Il nome è troppo lungo (max 128 caratteri)",
+ "selectWorkingDirectory": "Seleziona la directory di lavoro (cwd)",
+ "memberNameRequired": "Il nome del membro non può essere vuoto",
+ "memberNameInvalid": "Il nome del membro deve iniziare con un carattere alfanumerico, usare solo [a-zA-Z0-9._-], max 128 caratteri",
+ "memberNamesUnique": "I nomi dei membri devono essere univoci",
+ "openCodeLeadModelRequired": "Il lead OpenCode richiede un modello selezionato.",
+ "openCodeTeammateRequired": "Il lead OpenCode richiede almeno un membro del team OpenCode.",
+ "teamLaunching": "Il team è attualmente in fase di avvio",
+ "teamNameExists": "Il nome del team esiste già",
+ "checkFormFields": "Controlla i campi del modulo"
+ }
+ },
+ "editTeam": {
+ "actions": {
+ "cancel": "Annulla",
+ "save": "Salva"
+ },
+ "addMemberLockReason": "Usa la finestra dedicata Aggiungi membro per aggiungere nuovi membri del team mentre il team è attivo.",
+ "description": "Modifica nome, descrizione e colore del team",
+ "errors": {
+ "changesSavedRefreshFailed": "Le modifiche al team sono state salvate, ma impossibile aggiornare la vista più recente: {{message}}",
+ "liveRenameBlocked": "I membri del team esistenti non possono essere rinominati mentre il team è attivo. rinominati: {{names}}",
+ "memberNameEmpty": "Il nome del membro non può essere vuoto",
+ "memberNameInvalid": "Il nome del membro deve iniziare con un carattere alfanumerico, usare solo [a-zA-Z0-9._-], max 128 caratteri",
+ "memberNameNumericSuffix": "Il nome del membro \"{{name}}\" non è consentito (riservato per l'auto-suffisso della Claude CLI). Usa \"{{base}}\" invece.",
+ "memberNameReserved": "Il nome del membro \"{{name}}\" è riservato",
+ "memberNamesUnique": "I nomi dei membri devono essere univoci prima del salvataggio",
+ "newLiveTeammates": "Aggiungi nuovi membri del team dalla finestra dedicata Aggiungi membro mentre il team è attivo. Modifica team supporta solo l'aggiornamento dei membri del team esistenti.",
+ "provisioning": "Le impostazioni del team non possono essere modificate mentre il provisioning è ancora in corso. Attendi il termine dell'avvio, quindi riprova.",
+ "restartFailedMany": "Team salvato, ma impossibile riavviare questi membri del team: {{failures}}",
+ "restartFailedOne": "Team salvato, ma impossibile riavviare questo membro del team: {{failures}}",
+ "saveFailed": "Salvataggio non riuscito",
+ "settingsChanged": "Le impostazioni del team sono cambiate mentre questa finestra era aperta. Riaprila e controlla lo stato più recente prima di salvare.",
+ "settingsSavedMembersAndRefreshFailed": "Le impostazioni del team sono state salvate, ma le modifiche ai membri non sono riuscite: {{message}}. Anche l'aggiornamento non è riuscito: {{refreshError}}",
+ "settingsSavedMembersFailed": "Le impostazioni del team sono state salvate, ma le modifiche ai membri non sono riuscite: {{message}}",
+ "settingsSavedRefreshFailed": "Le impostazioni del team sono state salvate, ma impossibile aggiornare la vista più recente: {{message}}",
+ "teamNameEmpty": "Il nome del team non può essere vuoto",
+ "unsupportedMixedPrimaryMutation": "Le modifiche dal vivo ai membri del team di proprietà primaria nei team OpenCode misti non sono ancora supportate. Ferma il team, modifica l'elenco, quindi riavvialo. Interessati: {{names}}"
+ },
+ "fields": {
+ "colorOptional": "Colore (facoltativo)",
+ "description": "Descrizione",
+ "name": "Nome"
+ },
+ "memberRestartWarning": "Il salvataggio riavvierà questo membro del team per applicare le modifiche a ruolo, flusso di lavoro, isolamento worktree, provider, modello, sforzo o accesso MCP.",
+ "notices": {
+ "liveRenameBlocked": "Il salvataggio dal vivo è bloccato perché membri del team esistenti sono stati rinominati. Annulla quelle modifiche di identità o ferma prima il team.",
+ "newLiveTeammates": "I nuovi membri del team non possono essere aggiunti da Modifica team mentre il team è attivo. Usa invece la finestra Aggiungi membro.",
+ "provisioning": "Il provisioning del team è ancora in corso. La modifica è temporaneamente bloccata fino al termine dell'avvio.",
+ "restartMany": "Il salvataggio riavvierà o rilancerà questi membri del team per applicare le modifiche a ruolo, flusso di lavoro, isolamento worktree, provider, modello, sforzo o accesso MCP: {{names}}.",
+ "restartOne": "Il salvataggio riavvierà o rilancerà questo membro del team per applicare le modifiche a ruolo, flusso di lavoro, isolamento worktree, provider, modello, sforzo o accesso MCP: {{names}}.",
+ "unsupportedMixedPrimaryMutation": "Le modifiche/rimozioni dal vivo per i membri del team di proprietà primaria nei team OpenCode misti richiedono di fermare e rilanciare il team: {{names}}."
+ },
+ "placeholders": {
+ "description": "Descrizione del team (facoltativa)",
+ "teamName": "Nome del team"
+ },
+ "teamLead": {
+ "changeRuntime": "Cambia runtime del lead",
+ "changeRuntimeDescription": "Apri Riavvia team per cambiare provider, modello o sforzo del lead.",
+ "modelLockReason": "Il runtime del lead del team è gestito da Riavvia team.",
+ "readOnlyHint": "Il nome e il ruolo del lead del team restano di sola lettura qui. Apri il pannello del runtime sulla riga del lead per cambiare provider, modello o sforzo.",
+ "role": "Lead del team"
+ },
+ "title": "Modifica team"
+ },
+ "memberDraft": {
+ "actions": {
+ "remove": "Rimuovi membro",
+ "removeAria": "Rimuovi {{name}}",
+ "restore": "Ripristina membro",
+ "restoreAria": "Ripristina {{name}}"
+ },
+ "anthropicContext": {
+ "defaultSetting": "impostazione di contesto predefinita",
+ "description": "Il contesto Anthropic è valido per l'intero team per questo avvio: {{mode}}. Usa la casella Limita contesto del pannello del runtime del lead per modificarlo.",
+ "limitEnabled": "Limite di 200K abilitato"
+ },
+ "mcp": {
+ "buttonInherit": "Eredita MCP",
+ "buttonScopes": "Ambiti MCP",
+ "chooseScopes": "Scegli ambiti",
+ "inheritLead": "Eredita dal lead",
+ "lockedInfo": "Solo MCP di Agent Teams è abilitato per tutti i membri del team. Questo membro del team verrà avviato solo con il server di Agent Teams.",
+ "mode": "Modalità MCP",
+ "scopes": {
+ "local": "locale",
+ "project": "progetto",
+ "user": "utente"
+ },
+ "serverNames": "Nomi dei server",
+ "settingInfo": "MCP di Agent Teams avvia questo membro del team solo con il server di Agent Teams. Le modalità di ambito e allowlist si applicano solo a questo avvio del membro del team.",
+ "strictAllowlist": "Allowlist rigorosa",
+ "tooltip": "{{label}}: Controlla la policy di ereditarietà MCP di questo membro",
+ "agentTeamsMcp": "MCP di Agent Teams"
+ },
+ "model": {
+ "ariaLabel": "Provider {{provider}}, {{model}}",
+ "currentLeadRuntime": "Runtime attuale del lead",
+ "default": "Predefinito",
+ "inheritedTooltip": "Provider, modello e sforzo sono ereditati dal lead mentre la sincronizzazione è abilitata.",
+ "leadSuffix": "{{label}} (lead)",
+ "liveDisabled": "Le modifiche a provider, modello e sforzo sono disabilitate mentre il team è attivo. Riconnetti il team per applicarle in sicurezza.",
+ "lockedActionFallback": "Le modifiche al runtime del lead aprono Riavvia team, dove provider, modello e sforzo possono essere aggiornati.",
+ "restartWholeTeam": "Il salvataggio di quelle modifiche al runtime riavvia l'intero team."
+ },
+ "nameAria": "Nome del membro {{index}}",
+ "nameFallback": "membro {{index}}",
+ "noRole": "Nessun ruolo",
+ "removed": "Rimosso",
+ "workflow": {
+ "addTooltip": "Aggiungi flusso di lavoro del membro del team",
+ "editTooltip": "Modifica flusso di lavoro del membro del team",
+ "label": "Flusso di lavoro (facoltativo)",
+ "placeholder": "Come questo agente dovrebbe comportarsi, interagire con gli altri...",
+ "saved": "Salvato"
+ },
+ "worktree": {
+ "description": "Esegui questo membro del team in un worktree git separato. Applica/rifiuta le modifiche su quel worktree, non sullo spazio di lavoro del lead.",
+ "label": "Worktree"
+ },
+ "addMembers": {
+ "title": "Aggiungi membri",
+ "description": "Aggiungi nuovi membri a {{teamName}}"
+ },
+ "placeholders": {
+ "name": "nome-membro",
+ "mcpServers": "github, sentry"
+ }
+ },
+ "detail": {
+ "actions": {
+ "add": "Aggiungi",
+ "cancel": "Annulla",
+ "delete": "Elimina",
+ "editCode": "Modifica codice",
+ "launch": "Avvia",
+ "remove": "Rimuovi",
+ "stop": "Ferma",
+ "task": "Task",
+ "visualize": "Visualizza"
+ },
+ "deleteTeam": {
+ "description": "Eliminare il team \"{{team}}\"? Questa azione è irreversibile. Tutti i dati e i task del team verranno eliminati.",
+ "title": "Elimina team"
+ },
+ "draft": {
+ "descriptionPrefix": "Questo è un team bozza -",
+ "descriptionSuffix": "è stato configurato con {{count}} {{member}} ma non è ancora stato sottoposto a provisioning dalla CLI. Fai clic su Avvia per selezionare un modello e avviare il team.",
+ "descriptionSuffix_few": "è stato configurato con {{count}} {{member}} ma non è ancora stato sottoposto a provisioning dalla CLI. Fai clic su Avvia per selezionare un modello e avviare il team.",
+ "descriptionSuffix_many": "è stato configurato con {{count}} {{member}} ma non è ancora stato sottoposto a provisioning dalla CLI. Fai clic su Avvia per selezionare un modello e avviare il team.",
+ "descriptionSuffix_one": "è stato configurato con {{count}} {{member}} ma non è ancora stato sottoposto a provisioning dalla CLI. Fai clic su Avvia per selezionare un modello e avviare il team.",
+ "descriptionSuffix_other": "è stato configurato con {{count}} {{member}} ma non è ancora stato sottoposto a provisioning dalla CLI. Fai clic su Avvia per selezionare un modello e avviare il team.",
+ "member": "membri",
+ "member_few": "membri",
+ "member_many": "membri",
+ "member_one": "membro",
+ "member_other": "membri",
+ "title": "Team non ancora avviato"
+ },
+ "invalidTab": "Scheda del team non valida",
+ "kanbanSafeData": "Impossibile caricare completamente la kanban. Visualizzazione dei dati sicuri.",
+ "loadFailed": "Impossibile caricare il team",
+ "loading": "Caricamento del team",
+ "loadingSidebar": "Caricamento della barra laterale del team",
+ "offline": {
+ "offline": "Il team è offline",
+ "partialFailed": "L'ultimo avvio è fallito a metà",
+ "partialMissing": "L'ultimo avvio è fallito a metà - {{missing}}/{{expected}} membri del team non si sono uniti",
+ "reconciling": "L'ultimo avvio è ancora in fase di riconciliazione"
+ },
+ "previous": "Precedente: {{paths}}",
+ "removeMember": {
+ "description": "Rimuovere \"{{member}}\" dal team? I task e i messaggi verranno conservati, ma questo nome non potrà essere riutilizzato.",
+ "title": "Rimuovi membro"
+ },
+ "sections": {
+ "team": "Team"
+ },
+ "solo": "Solo",
+ "status": {
+ "active": "Attivo",
+ "launching": "Avvio in corso...",
+ "running": "In esecuzione"
+ },
+ "telemetry": {
+ "cpu": "CPU",
+ "memory": "Memoria"
+ },
+ "tooltips": {
+ "deleteTeam": "Elimina team",
+ "editTeam": "Modifica team",
+ "editUnavailableProvisioning": "La modifica del team non è disponibile mentre il provisioning è ancora in corso",
+ "openBuiltInEditor": "Apri il progetto nell'editor integrato",
+ "openTeamGraph": "Apri il grafo del team",
+ "stopTeam": "Ferma team"
+ },
+ "waitingForProvisioning": "I dati del team appariranno una volta completato il provisioning",
+ "context": {
+ "title": "Contesto",
+ "loading": "Caricamento...",
+ "noSessionLoaded": "Nessuna sessione caricata",
+ "closePanel": "Chiudi il pannello del contesto di {{team}}",
+ "loadingContext": "Caricamento del contesto...",
+ "openLeadSession": "Apri la sessione del lead del team per visualizzare il contesto."
+ }
+ },
+ "review": {
+ "fileHeader": {
+ "actions": {
+ "accept": "Accetta",
+ "discard": "Scarta",
+ "discardTooltip": "Scarta tutte le modifiche per questo file",
+ "keepMyDraft": "Mantieni la mia bozza",
+ "reject": "Rifiuta",
+ "reloadFromDisk": "Ricarica dal disco",
+ "restore": "Ripristina",
+ "restoreTooltip": "Crea/ripristina questo file su disco dall'anteprima",
+ "saveFile": "Salva file",
+ "saveFileTooltip": "Salva il file su disco"
+ },
+ "badges": {
+ "deleted": "ELIMINATO",
+ "manualReview": "REVISIONE MANUALE",
+ "new": "NUOVO",
+ "worktree": "WORKTREE"
+ },
+ "contentSource": {
+ "disk-current": "Disco attuale",
+ "file-history": "Cronologia file",
+ "git-fallback": "Fallback Git",
+ "ledger-exact": "Ledger del task",
+ "ledger-snapshot": "Snapshot del ledger",
+ "snippet-reconstruction": "Ricostruito",
+ "unavailable": "Contenuto non disponibile"
+ },
+ "contentUnavailable": {
+ "badge": "Contenuto non disponibile",
+ "description": "Il ledger ha registrato i metadati per questa modifica, ma il contenuto testuale completo non è disponibile. Questo di solito indica un contenuto binario, di grandi dimensioni o solo hash.",
+ "safety": "L'accettazione/rifiuto automatico è disabilitato per questo file per evitare scritture su disco non sicure.",
+ "title": "Il contenuto testuale non è disponibile"
+ },
+ "disabled": {
+ "acceptRejectContentUnavailable": "Accetta/Rifiuta è disabilitato perché il contenuto testuale completo non è disponibile.",
+ "acceptRejectMissingOnDisk": "Accetta/Rifiuta è disabilitato mentre il file manca su disco.",
+ "rejectBaselineUnavailable": "Rifiuta è disabilitato perché la baseline originale non è disponibile.",
+ "rejectContentUnavailable": "Rifiuta è disabilitato perché il contenuto testuale completo non è disponibile.",
+ "rejectManualLedgerReview": "Rifiuta è disabilitato perché questa modifica del ledger ha contenuto binario, di grandi dimensioni o non disponibile."
+ },
+ "externalChange": {
+ "changedOnDisk": "Modificato su disco",
+ "deletedOnDisk": "Eliminato su disco",
+ "recreatedOnDisk": "Ricreato su disco"
+ },
+ "missingOnDisk": {
+ "badge": "Mancante su disco",
+ "description": "Possiamo comunque mostrare un'anteprima dai log dell'agente, ma il tuo filesystem non è sincronizzato.",
+ "restorePrefix": "Usa",
+ "restoreSuffix": "per riscrivere il contenuto dell'anteprima su disco.",
+ "restoreUnavailable": "Il contenuto completo del file non è disponibile per il ripristino automatico.",
+ "title": "Il file manca su disco"
+ },
+ "pathChange": {
+ "from": "Da {{path}}",
+ "to": "A {{path}}"
+ },
+ "worktree": {
+ "isolated": "Worktree isolato"
+ }
+ },
+ "toolbar": {
+ "stats": {
+ "pending": "{{count}} in attesa",
+ "pending_one": "{{count}} in attesa",
+ "pending_other": "{{count}} in attesa",
+ "accepted": "{{count}} accettate",
+ "accepted_one": "{{count}} accettata",
+ "accepted_other": "{{count}} accettate",
+ "rejected": "{{count}} rifiutate",
+ "rejected_one": "{{count}} rifiutata",
+ "rejected_other": "{{count}} rifiutate",
+ "acrossFiles": "in {{count}} file",
+ "acrossFiles_one": "in {{count}} file",
+ "acrossFiles_other": "in {{count}} file",
+ "edited": "{{count}} modificate",
+ "edited_one": "{{count}} modificata",
+ "edited_other": "{{count}} modificate",
+ "pending_few": "{{count}} in attesa",
+ "pending_many": "{{count}} in attesa",
+ "accepted_few": "{{count}} accettate",
+ "accepted_many": "{{count}} accettate",
+ "rejected_few": "{{count}} rifiutate",
+ "rejected_many": "{{count}} rifiutate",
+ "acrossFiles_few": "in {{count}} file",
+ "acrossFiles_many": "in {{count}} file",
+ "edited_few": "{{count}} modificate",
+ "edited_many": "{{count}} modificate"
+ },
+ "actions": {
+ "auto": "Auto",
+ "undo": "Annulla",
+ "acceptAll": "Accetta tutto",
+ "rejectAll": "Rifiuta tutto",
+ "applying": "Applicazione in corso...",
+ "applyRejections": "Applica rifiuti"
+ },
+ "tooltips": {
+ "autoOn": "Contrassegna automaticamente i file come visualizzati quando si scorre fino alla fine (ON)",
+ "autoOff": "Contrassegna automaticamente i file come visualizzati quando si scorre fino alla fine (OFF)",
+ "undo": "Annulla l'ultima operazione di revisione (Ctrl+Z)",
+ "acceptAll": "Accetta tutte le modifiche in tutti i file",
+ "rejectAll": "Rifiuta in sicurezza tutte le modifiche rifiutabili in tutti i file",
+ "rejectAllDisabled": "Nessun file in attesa ha una baseline originale sicura da rifiutare.",
+ "applyRejections": "Applica gli hunk rifiutati su disco; le modifiche accettate vengono mantenute così come sono"
+ }
+ },
+ "diffError": {
+ "title": "Impossibile renderizzare la vista diff",
+ "unexpected": "Si è verificato un errore imprevisto durante il rendering del diff.",
+ "actions": {
+ "retry": "Riprova"
+ },
+ "raw": {
+ "show": "Mostra dati diff grezzi",
+ "file": "File: {{file}}",
+ "original": "--- Originale",
+ "modified": "+++ Modificato",
+ "charsTotal": "... ({{count}} caratteri totali)",
+ "charsTotal_one": "... ({{count}} carattere totale)",
+ "charsTotal_other": "... ({{count}} caratteri totali)",
+ "charsTotal_few": "... ({{count}} caratteri totali)",
+ "charsTotal_many": "... ({{count}} caratteri totali)"
+ }
+ },
+ "fileTree": {
+ "viewed": "Visualizzato",
+ "badges": {
+ "new": "nuovo",
+ "deleted": "eliminato"
+ },
+ "collapseFolder": "Comprimi {{name}}",
+ "expandFolder": "Espandi {{name}}",
+ "empty": {
+ "noChangedFiles": "Nessun file modificato",
+ "noMatchingFiles": "Nessun file corrispondente"
+ },
+ "searchPlaceholder": "Cerca file…",
+ "filters": {
+ "unresolved": "Non risolti",
+ "rejected": "Rifiutati",
+ "new": "Nuovi",
+ "clear": "Cancella"
+ }
+ },
+ "diffControls": {
+ "previousChunk": "Blocco precedente",
+ "nextChunk": "Blocco successivo",
+ "rejectChange": "Rifiuta modifica (⌘N)",
+ "acceptChange": "Accetta modifica (⌘Y)",
+ "undo": "Annulla",
+ "keep": "Mantieni",
+ "rejectShortcut": "⌘N",
+ "acceptShortcut": "⌘Y"
+ },
+ "conflict": {
+ "title": "Conflitto rilevato",
+ "description": "Questo file è stato modificato dopo le modifiche dell'agente",
+ "cancel": "Annulla",
+ "saveResolution": "Salva risoluzione",
+ "editManually": "Modifica manualmente",
+ "useOriginal": "Usa originale",
+ "keepCurrent": "Mantieni attuale"
+ },
+ "fullDiffLoading": {
+ "titleOne": "Preparazione del diff completo",
+ "titleMany": "Preparazione di {{count}} diff completi",
+ "subtitleForFile": "Finalizzazione del diff esatto dell'editor per {{file}}.",
+ "subtitleCurrentFile": "Finalizzazione del diff esatto dell'editor per il file attuale.",
+ "subtitleMany": "Risoluzione delle baseline esatte prima/dopo per i file attualmente in caricamento.",
+ "previewsReady": "{{count}} anteprime pronte",
+ "previewsReady_one": "{{count}} anteprima pronta",
+ "editorViewLoading": "Caricamento della vista editor",
+ "filesInProgress": "{{count}} file in corso",
+ "filesInProgress_one": "{{count}} file in corso",
+ "filesReady": "{{ready}}/{{total}} file pronti",
+ "progressDescription": "{{ready}} pronti, {{loading}} ancora in caricamento. I diff di anteprima restano visibili qui sotto mentre le baseline rimanenti vengono risolte.",
+ "singleDescription": "I diff di anteprima restano visibili qui sotto mentre la baseline esatta viene risolta.",
+ "previewsReady_few": "{{count}} anteprime pronte",
+ "previewsReady_many": "{{count}} anteprime pronte",
+ "previewsReady_other": "{{count}} anteprime pronte",
+ "filesInProgress_few": "{{count}} file in corso",
+ "filesInProgress_many": "{{count}} file in corso",
+ "filesInProgress_other": "{{count}} file in corso"
+ },
+ "fileMissingPrefix": "Il file manca su disco. Questo diff potrebbe essere solo un'anteprima dai log dell'agente. Usa",
+ "restore": "Ripristina",
+ "fileMissingSuffix": "per creare il file su disco.",
+ "filePlaceholder": {
+ "loading": "Caricamento",
+ "description": "Preparazione di un diff completo dell'editor per questo file."
+ },
+ "loading": {
+ "diff": "DIFF",
+ "ledgerObjectsProcessed": "{{count}} oggetti del ledger elaborati",
+ "ledgerObjectsProcessed_one": "{{count}} oggetto del ledger elaborato",
+ "ledgerObjectsProcessed_other": "{{count}} oggetti del ledger elaborati",
+ "ledgerObjectsProcessed_few": "{{count}} oggetti del ledger elaborati",
+ "ledgerObjectsProcessed_many": "{{count}} oggetti del ledger elaborati",
+ "phases": {
+ "readingLedger": "Lettura del ledger del task...",
+ "resolvingFiles": "Risoluzione degli stati dei file...",
+ "checkingWorktree": "Controllo del contesto del worktree...",
+ "preparingDiffs": "Preparazione dei diff di revisione..."
+ }
+ },
+ "progress": {
+ "viewed": "{{viewed}}/{{total}} visualizzati"
+ },
+ "scope": {
+ "readMore": "Leggi di più",
+ "tiers": {
+ "exact": {
+ "title": "Ambito del task determinato con precisione",
+ "detail": "Sia il marcatore di inizio che quello di completamento sono stati trovati nel log della sessione. Il diff include solo le modifiche apportate durante questo specifico task - altri task che hanno modificato gli stessi file sono esclusi."
+ },
+ "endEstimated": {
+ "title": "Limite finale stimato",
+ "detail": "È stato trovato solo il marcatore di inizio - il task non ha ancora un marcatore di completamento. Le modifiche mostrate vanno dall'inizio del task alla fine della sessione. Se altri task sono stati eseguiti dopo questo nella stessa sessione, le loro modifiche potrebbero essere incluse."
+ },
+ "startEstimated": {
+ "title": "Limite iniziale stimato",
+ "detail": "È stato trovato solo il marcatore di completamento - l'inizio del lavoro non è stato catturato. Se altri task sono stati eseguiti prima di questo nella stessa sessione, le loro modifiche agli stessi file potrebbero essere incluse."
+ },
+ "allSession": {
+ "title": "Visualizzazione di tutte le modifiche della sessione",
+ "detail": "Nessun marcatore di task trovato nel log della sessione. Impossibile isolare questo task - vengono mostrate tutte le modifiche ai file dell'intera sessione, incluse le modifiche di altri task. Questo può accadere con versioni più vecchie della CLI o flussi di lavoro non standard."
+ }
+ },
+ "ledger": {
+ "exact": {
+ "title": "Modifiche catturate dal ledger del task",
+ "detail": "L'orchestratore ha catturato queste modifiche ai file mentre l'agente lavorava su questo task.",
+ "badge": "Ledger esatto"
+ },
+ "limited": {
+ "title": "Modifiche catturate con revisionabilità limitata",
+ "detail": "L'orchestratore ha catturato queste modifiche ai file per questo task, ma almeno una modifica è stata catturata da uno snapshot o da una fonte di soli metadati. Rivedi i diff di testo esatti dove disponibili; i contenuti binari o non disponibili potrebbero richiedere una revisione manuale.",
+ "mixedBadge": "Revisionabilità mista",
+ "needsReviewBadge": "Richiede revisione"
+ }
+ },
+ "workInterval": {
+ "title": "Ambito definito dall'intervallo di lavoro persistente",
+ "detail": "Il marcatore di inizio del task non era disponibile nel log della sessione, quindi l'ambito del diff è definito dall'intervallo di lavoro del task memorizzato sulla bacheca.",
+ "badge": "Ambito per intervallo"
+ },
+ "confidence": {
+ "high": "Affidabilità alta",
+ "medium": "Affidabilità media",
+ "low": "Affidabilità bassa",
+ "bestEffort": "Best effort"
+ }
+ },
+ "shortcuts": {
+ "title": "Scorciatoie da tastiera",
+ "actions": {
+ "nextChange": "Modifica successiva",
+ "previousChange": "Modifica precedente",
+ "nextFile": "File successivo",
+ "previousFile": "File precedente",
+ "acceptChange": "Accetta modifica",
+ "rejectChange": "Rifiuta modifica",
+ "saveFile": "Salva file",
+ "undo": "Annulla",
+ "redo": "Ripeti",
+ "toggleShortcuts": "Attiva/disattiva scorciatoie",
+ "closeDialog": "Chiudi finestra di dialogo"
+ }
+ },
+ "timeline": {
+ "empty": "Nessun evento di modifica",
+ "titleWithCount": "Cronologia delle modifiche ({{count}})"
+ },
+ "continuousScroll": {
+ "empty": "Nessuna modifica ai file revisionabile"
+ },
+ "empty": {
+ "noSafeDiff": "Nessun diff sicuro disponibile",
+ "noFileChangesRecorded": "Nessuna modifica ai file registrata",
+ "noSafeDiffDescription": "Il ledger del task non ha esposto un diff dei file sicuro per questo task.",
+ "noSafeDiffDiagnosticsDescription": "Il ledger del task non ha esposto un diff dei file sicuro per questo task. La diagnostica qui sotto spiega il motivo.",
+ "noFileEventsYet": "Il ledger del task non ha ancora eventi sui file per questo task.",
+ "noFileEvents": "Il ledger del task non ha eventi sui file per questo task."
+ }
+ },
+ "messages": {
+ "actions": {
+ "bottomSheetActions": "Azioni del foglio inferiore dei messaggi",
+ "collapseAll": "Comprimi tutti i messaggi",
+ "collapseSheet": "Comprimi foglio",
+ "expandAll": "Espandi tutti i messaggi",
+ "expandSheet": "Espandi foglio",
+ "floatComposer": "Compositore mobile",
+ "floatMessagesComposer": "Compositore dei messaggi mobile",
+ "hideSearch": "Nascondi ricerca",
+ "loadOlder": "Carica messaggi precedenti",
+ "markAllRead": "Segna tutti come letti",
+ "messageActions": "Azioni del messaggio",
+ "moveMessagesToBottomSheet": "Sposta i messaggi nel foglio inferiore",
+ "moveMessagesToSidebar": "Sposta i messaggi nella barra laterale",
+ "moveToBottomSheet": "Sposta nel foglio inferiore",
+ "moveToInline": "Sposta in linea",
+ "moveToSidebar": "Sposta nella barra laterale",
+ "panelActions": "Azioni del pannello dei messaggi",
+ "searchMessages": "Cerca messaggi"
+ },
+ "delivery": {
+ "copied": "Copiato",
+ "copyDebugDetails": "Copia dettagli di debug",
+ "details": "Dettagli",
+ "fields": {
+ "acceptanceUnknown": "acceptanceUnknown",
+ "delivered": "delivered",
+ "diagnostics": "diagnostics",
+ "ledgerStatus": "ledgerStatus",
+ "messageId": "messageId",
+ "providerId": "providerId",
+ "queuedBehindMessageId": "queuedBehindMessageId",
+ "reason": "reason",
+ "responsePending": "responsePending",
+ "responseState": "responseState",
+ "statusMessageId": "statusMessageId",
+ "userVisibleMessage": "userVisibleMessage",
+ "userVisibleNextReviewAt": "userVisibleNextReviewAt",
+ "userVisibleReasonCode": "userVisibleReasonCode",
+ "userVisibleState": "userVisibleState",
+ "visibleReplyCorrelation": "visibleReplyCorrelation",
+ "visibleReplyMessageId": "visibleReplyMessageId"
+ }
+ },
+ "panelMode": "Modalità del pannello dei messaggi",
+ "title": "Messaggi",
+ "unread": {
+ "new": "{{count}} nuovi",
+ "unread": "{{count}} non letti",
+ "new_few": "{{count}} nuovi",
+ "new_many": "{{count}} nuovi",
+ "new_one": "{{count}} nuovo",
+ "new_other": "{{count}} nuovi",
+ "unread_few": "{{count}} non letti",
+ "unread_many": "{{count}} non letti",
+ "unread_one": "{{count}} non letto",
+ "unread_other": "{{count}} non letti"
+ },
+ "filter": {
+ "ariaLabel": "Filtra messaggi",
+ "tooltip": "Filtra messaggi",
+ "from": "Da",
+ "to": "A",
+ "noData": "Nessun dato",
+ "showStatusUpdates": "Mostra aggiornamenti di stato (inattivo/arresto)",
+ "actions": {
+ "reset": "Reimposta",
+ "save": "Salva"
+ }
+ },
+ "status": {
+ "title": "Stato"
+ },
+ "actionMode": {
+ "label": "Modalità azione"
+ },
+ "search": {
+ "placeholder": "Cerca..."
+ }
+ },
+ "modelSelector": {
+ "badges": {
+ "configured": "Configurato",
+ "connected": "Connesso",
+ "failed": "Non riuscito",
+ "free": "Gratuito",
+ "local": "Locale",
+ "needsTest": "Richiede test",
+ "verified": "Verificato",
+ "unavailable": "Non disponibile",
+ "issue": "Problema"
+ },
+ "customModelId": "ID modello personalizzato",
+ "label": "Modello (facoltativo)",
+ "multimodelRequired": "Codex e Gemini richiedono la modalità Multimodello.",
+ "openCode": {
+ "allSources": "Tutte le fonti OpenCode",
+ "filterSource": "Filtra {{source}}",
+ "filterSources": "Filtra le fonti OpenCode",
+ "freeOnly": "Solo gratuiti",
+ "freeTooltip": "OpenCode contrassegna questo modello come gratuito.",
+ "loadingModels": "Caricamento dei modelli OpenCode...",
+ "noSourcesFound": "Nessuna fonte trovata.",
+ "recommendedOnly": "Solo consigliati",
+ "searchSources": "Cerca fonti",
+ "sourcesCount": "{{count}} fonti OpenCode",
+ "sourcesCount_few": "{{count}} fonti OpenCode",
+ "sourcesCount_many": "{{count}} fonti OpenCode",
+ "sourcesCount_one": "{{count}} fonte OpenCode",
+ "sourcesCount_other": "{{count}} fonti OpenCode"
+ },
+ "reason": "Motivo: {{reason}}",
+ "runtimeModelsSyncing": "I modelli espliciti vengono caricati dal runtime attuale. Il predefinito resta disponibile mentre l'elenco si sincronizza.",
+ "fastMode": {
+ "codexLabel": "Modalità Fast (2x crediti)",
+ "optionalLabel": "Modalità Fast (facoltativa)",
+ "defaultOff": "Predefinita (Disattiva)",
+ "fast": "Fast",
+ "off": "Disattiva",
+ "defaultFast": "Predefinita (Fast)",
+ "defaultResolvesTo": "Il predefinito si risolve attualmente in {{mode}}.",
+ "runtimeBackedHint": "La modalità Fast è supportata dal runtime e si sblocca solo quando il modello di avvio Anthropic risolto la supporta."
+ },
+ "anthropicExtraUsage": {
+ "pricingDocs": "Leggi la documentazione sui prezzi di Anthropic"
+ },
+ "searchModels": "Cerca modelli",
+ "defaultModel": "Predefinito",
+ "empty": {
+ "noSearchMatches": "Nessun modello corrisponde a questa ricerca.",
+ "recommendedFreeOpenCode": "Nessun modello OpenCode gratuito consigliato è disponibile nell'elenco del runtime attuale.",
+ "freeOpenCode": "Nessun modello OpenCode gratuito è disponibile nell'elenco del runtime attuale.",
+ "recommendedOpenCode": "Nessun modello OpenCode consigliato è disponibile nell'elenco del runtime attuale.",
+ "noModels": "Nessun modello è disponibile nell'elenco del runtime attuale."
+ },
+ "openCodeStatus": {
+ "notReadyTitle": "OpenCode non è pronto per l'avvio del team",
+ "freeModelsAvailableTitle": "I modelli OpenCode gratuiti sono disponibili",
+ "providerNotConnectedTitle": "Il provider OpenCode non è connesso",
+ "readyTitle": "OpenCode è pronto",
+ "readyMessage": "OpenCode ha superato la verifica di prontezza del provider. Selezionalo per usare i modelli OpenCode per questo team.",
+ "useOpenCode": "Usa OpenCode",
+ "badges": {
+ "check": "Controlla",
+ "install": "Installa",
+ "free": "Gratuito",
+ "setup": "Configura"
+ },
+ "summary": {
+ "checking": "Stato OpenCode: controllo del runtime",
+ "status": "Stato OpenCode: {{parts}}"
+ },
+ "summaryParts": {
+ "teamLaunchBlocked": "avvio del team bloccato",
+ "providerOptional": "connessione del provider facoltativa",
+ "providerModelsNeedSetup": "i modelli supportati dal provider necessitano di configurazione",
+ "teamLaunchReady": "avvio del team pronto",
+ "runtimeDetected": "runtime rilevato",
+ "runtimeMissing": "runtime mancante",
+ "freeWithoutAuth": "modelli gratuiti disponibili senza autenticazione",
+ "providerConnected": "provider connesso",
+ "providerNotConnected": "provider non connesso"
+ },
+ "messages": {
+ "checking": "L'app sta ancora controllando il runtime OpenCode. Attendi il termine dello stato del provider, quindi riprova.",
+ "unsupported": "OpenCode non è installato, non è stato trovato, oppure il runtime rilevato non è supportato. Installa o aggiorna OpenCode, quindi aggiorna lo stato del provider. Puoi anche usare il pulsante Installa nella home page.",
+ "freeAvailable": "OpenCode è rilevato. Puoi usare modelli OpenCode gratuiti come Big Pickle senza connettere un provider. Connetti un provider solo quando vuoi modelli supportati dal provider.",
+ "noFreeListed": "OpenCode è rilevato, ma non è ancora elencato alcun modello OpenCode gratuito. Aggiorna lo stato del provider o connetti un provider in OpenCode per i modelli supportati dal provider.",
+ "launchBlocked": "OpenCode è installato e autenticato, ma la prontezza all'avvio di Agent Teams è bloccata.",
+ "ready": "OpenCode è pronto per l'avvio del team."
+ },
+ "loadingRuntime": "Lo stato del runtime OpenCode è ancora in caricamento."
+ },
+ "advisory": {
+ "pingNotConfirmed": "Ping non confermato",
+ "note": "Nota"
+ },
+ "placeholders": {
+ "customModelId": "openai/gpt-oss-20b"
+ },
+ "routeGroups": {
+ "openCodeConfig": "Configurazione OpenCode",
+ "builtinFree": "Gratuiti integrati",
+ "connectedProviders": "Provider connessi",
+ "otherCatalog": "Altro catalogo OpenCode"
+ },
+ "pricing": {
+ "free": "Gratuito",
+ "inputShort": "in {{rate}}",
+ "outputShort": "out {{rate}}",
+ "perMillionSummary": "{{summary}} / 1M",
+ "inputTitle": "Input: {{rate}} per 1M di token",
+ "outputTitle": "Output: {{rate}} per 1M di token",
+ "cacheReadTitle": "Lettura cache: {{rate}} per 1M di token",
+ "cacheWriteTitle": "Scrittura cache: {{rate}} per 1M di token"
+ },
+ "defaultTooltip": {
+ "anthropicCompatibleWithResolved": "Usa il modello predefinito dell'endpoint compatibile con Anthropic.\nAttualmente si risolve in {{model}}.",
+ "anthropicCompatible": "Usa il modello predefinito dell'endpoint compatibile con Anthropic.",
+ "anthropic": "Usa il modello predefinito del team Claude.\nSi risolve in {{longContextModel}} con contesto da 1M, o {{limitedContextModel}} con contesto da 200K quando Limita contesto è abilitato.",
+ "openCodeWithResolved": "Usa il modello predefinito OpenCode.\nAttualmente si risolve in {{model}}.",
+ "openCode": "Usa il modello predefinito del runtime OpenCode.",
+ "runtime": "Usa il valore predefinito del runtime per il provider selezionato."
+ },
+ "multimodelOff": "Multimodello disattivato",
+ "unavailableInRuntime": "Non disponibile nel runtime attuale"
+ },
+ "taskDetail": {
+ "actions": {
+ "cancel": "Annulla",
+ "delete": "Elimina",
+ "markResolved": "Segna come risolto",
+ "save": "Salva"
+ },
+ "attachments": {
+ "commentAttachment": "Allegato del commento",
+ "fromComments": "Dai commenti",
+ "preview": "Anteprima {{filename}}"
+ },
+ "changes": {
+ "badges": {
+ "attention": "attenzione",
+ "noSafeDiff": "nessun diff sicuro"
+ },
+ "empty": {
+ "noFileChangesRecorded": "Nessuna modifica ai file registrata",
+ "noFileChangesRecordedYet": "Nessuna modifica ai file ancora registrata",
+ "noReviewableChangesRecovered": "Nessuna modifica ai file revisionabile recuperata",
+ "noSafeDiffAvailable": "Nessun diff sicuro disponibile"
+ },
+ "loadFailed": "Impossibile caricare il riepilogo delle modifiche del task",
+ "loading": "Caricamento delle modifiche...",
+ "fileCount": "{{count}} file",
+ "fileRowsHidden": "{{count}} righe di file nascoste",
+ "moreDiagnostics": "{{count}} diagnostiche in più",
+ "moreFiles": "{{count}} file in più",
+ "openInEditor": "Apri nell'editor",
+ "openTask": "Apri il task {{subject}}",
+ "refresh": "Aggiorna modifiche",
+ "refreshFailed": "Aggiornamento non riuscito: {{error}}",
+ "refreshing": "Aggiornamento in corso",
+ "refreshingChanges": "Aggiornamento delle modifiche...",
+ "refreshTeamChanges": "Aggiorna le modifiche del team",
+ "refreshShort": "Aggiorna",
+ "reviewDiff": "Rivedi diff",
+ "reviewTaskDiff": "Rivedi il diff del task",
+ "scannedCandidateTasks": "Scansionati {{requested}} di {{eligible}} task candidati",
+ "tasksDeferred": "{{count}} task rinviati in questo passaggio",
+ "title": "Modifiche",
+ "fileCount_few": "{{count}} file",
+ "fileCount_many": "{{count}} file",
+ "fileCount_one": "{{count}} file",
+ "fileCount_other": "{{count}} file",
+ "fileRowsHidden_few": "{{count}} righe di file nascoste",
+ "fileRowsHidden_many": "{{count}} righe di file nascoste",
+ "fileRowsHidden_one": "{{count}} riga di file nascosta",
+ "fileRowsHidden_other": "{{count}} righe di file nascoste",
+ "moreDiagnostics_few": "{{count}} diagnostiche in più",
+ "moreDiagnostics_many": "{{count}} diagnostiche in più",
+ "moreDiagnostics_one": "{{count}} diagnostica in più",
+ "moreDiagnostics_other": "{{count}} diagnostiche in più",
+ "moreFiles_few": "{{count}} file in più",
+ "moreFiles_many": "{{count}} file in più",
+ "moreFiles_one": "{{count}} file in più",
+ "moreFiles_other": "{{count}} file in più",
+ "tasksDeferred_few": "{{count}} task rinviati in questo passaggio",
+ "tasksDeferred_many": "{{count}} task rinviati in questo passaggio",
+ "tasksDeferred_one": "{{count}} task rinviato in questo passaggio",
+ "tasksDeferred_other": "{{count}} task rinviati in questo passaggio"
+ },
+ "clarification": {
+ "awaitingLead": "In attesa di chiarimenti dal lead del team",
+ "awaitingUser": "In attesa di chiarimenti da te"
+ },
+ "description": {
+ "add": "Fai clic per aggiungere una descrizione...",
+ "edit": "Modifica descrizione",
+ "placeholder": "Descrizione del task (supporta markdown)"
+ },
+ "loading": {
+ "fetchingTeamData": "Recupero dei dati del team",
+ "title": "Caricamento del task..."
+ },
+ "logs": {
+ "newArriving": "Nuovi log del task in arrivo"
+ },
+ "notFound": "Task non trovato",
+ "related": {
+ "blockedBy": "Bloccato da",
+ "blocks": "Blocca",
+ "linkedFrom": "Collegato da",
+ "links": "Collegamenti",
+ "title": "Task correlati"
+ },
+ "review": {
+ "reviewer": "Revisore: {{reviewer}}"
+ },
+ "sections": {
+ "attachments": "Allegati",
+ "changes": "Modifiche",
+ "comments": "Commenti",
+ "description": "Descrizione",
+ "taskLogs": "Log del task",
+ "workflowHistory": "Cronologia del flusso di lavoro"
+ },
+ "unassigned": "Non assegnato",
+ "workflow": {
+ "implementationTimeTitle": "Tempo di implementazione dagli intervalli di lavoro persistenti",
+ "inProgressTime": "Tempo in corso {{duration}}"
+ },
+ "comments": {
+ "renderLimit": "Visualizzazione dei {{formattedCount}} commenti più recenti per mantenere reattiva l'interfaccia.",
+ "badges": {
+ "approved": "Approvato",
+ "reviewRequested": "Revisione richiesta"
+ },
+ "unknownTime": "ora sconosciuta",
+ "actions": {
+ "reply": "Rispondi",
+ "replyToComment": "Rispondi al commento",
+ "showMore": "Mostra altri commenti ({{visible}}/{{total}})",
+ "cancelReply": "Annulla risposta",
+ "comment": "Commento"
+ },
+ "attachments": {
+ "previewAlt": "Anteprima dell'allegato",
+ "downloadFailed": "Download non riuscito"
+ },
+ "replyingTo": "In risposta a",
+ "input": {
+ "placeholder": "Aggiungi un commento... (Invio per inviare)",
+ "charsLeft": "{{count}} caratteri rimasti",
+ "charsLeft_one": "{{count}} carattere rimasto",
+ "charsLeft_other": "{{count}} caratteri rimasti",
+ "charsLeft_few": "{{count}} caratteri rimasti",
+ "charsLeft_many": "{{count}} caratteri rimasti"
+ }
+ },
+ "workflowTimeline": {
+ "empty": "Nessuna cronologia del flusso di lavoro registrata",
+ "currentImplementationInterval": "Intervallo di implementazione attuale",
+ "implementationIntervalEnded": "L'intervallo di implementazione è terminato a questa transizione",
+ "runningPrefix": "in esecuzione ",
+ "createdAs": "Creato come",
+ "by": "da",
+ "reassigned": "Riassegnato",
+ "assignedTo": "Assegnato a",
+ "unassignedFrom": "Rimosso da",
+ "ownerChanged": "Proprietario cambiato",
+ "reviewRequested": "Revisione richiesta",
+ "reviewStarted": "Revisione iniziata",
+ "changesRequested": "Modifiche richieste",
+ "approved": "Approvato",
+ "unknownEvent": "Evento sconosciuto"
+ },
+ "reviewStates": {
+ "approved": "Approvato",
+ "needsFix": "Da correggere",
+ "inReview": "In revisione"
+ }
+ },
+ "tasks": {
+ "createTask": {
+ "assignee": "Assegnatario",
+ "assigneeOptional": "Assegnatario (facoltativo)",
+ "blockedByOptional": "Task bloccanti (facoltativo)",
+ "blockedBySummary": "Il task sarà bloccato da: {{tasks}}",
+ "cancel": "Annulla",
+ "create": "Crea",
+ "creating": "Creazione in corso...",
+ "description": "Il task verrà creato nella directory tasks/ del team e apparirà sulla bacheca Kanban.",
+ "descriptionOptional": "Descrizione (facoltativa)",
+ "detailsPlaceholder": "Dettagli del task (supporta markdown)",
+ "hideOptionalFields": "Nascondi campi facoltativi",
+ "offlineNotice": {
+ "after": "- avvia il team per iniziare l'esecuzione.",
+ "before": "Il team è offline. Il task verrà aggiunto a"
+ },
+ "promptOptional": "Prompt per l'assegnatario (facoltativo)",
+ "promptPlaceholder": "Istruzioni personalizzate per il membro del team...",
+ "relatedOptional": "Task correlati (facoltativo)",
+ "relatedSummary": "Correlati: {{tasks}}",
+ "saved": "Salvato",
+ "searchTasks": "Cerca task...",
+ "selectMember": "Seleziona un membro",
+ "selectMemberOptional": "Seleziona membro...",
+ "showOptionalFields": "Mostra campi facoltativi",
+ "startImmediately": "Avvia immediatamente",
+ "startOfflineHint": "Il team è offline. Avvia prima il team per iniziare immediatamente i task.",
+ "subject": "Oggetto",
+ "subjectPlaceholder": "Cosa deve essere fatto?",
+ "title": "Crea task",
+ "todo": "DA FARE"
+ },
+ "list": {
+ "columns": {
+ "blockedBy": "Bloccato da",
+ "blocks": "Blocca",
+ "id": "ID",
+ "owner": "Proprietario",
+ "status": "Stato",
+ "subject": "Oggetto"
+ },
+ "empty": "Nessun task in questo team",
+ "filters": {
+ "allOwners": "Tutti i proprietari",
+ "allStatuses": "Tutti gli stati",
+ "ownerAria": "Filtra i task per proprietario",
+ "statusAria": "Filtra i task per stato"
+ },
+ "showing": "Visualizzati {{shown}} di {{total}}"
+ },
+ "status": {
+ "completed": "completed",
+ "deleted": "deleted",
+ "inProgress": "in_progress",
+ "pending": "pending"
+ },
+ "statusSummary": {
+ "progressAria": "Task {{completed}}/{{total}} completati",
+ "inProgress": "{{count}} in_progress",
+ "inProgress_one": "{{count}} in_progress",
+ "inProgress_other": "{{count}} in_progress",
+ "inProgress_few": "{{count}} in_progress",
+ "inProgress_many": "{{count}} in_progress",
+ "pending": "{{count}} pending",
+ "pending_one": "{{count}} pending",
+ "pending_other": "{{count}} pending",
+ "pending_few": "{{count}} pending",
+ "pending_many": "{{count}} pending",
+ "completed": "{{count}} completed",
+ "completed_one": "{{count}} completed",
+ "completed_other": "{{count}} completed",
+ "completed_few": "{{count}} completed",
+ "completed_many": "{{count}} completed"
+ },
+ "unassigned": "Non assegnato",
+ "teamPrefix": "Team:",
+ "openTask": "Apri task",
+ "deleteConfirm": {
+ "title": "Elimina task",
+ "message": "Spostare il task #{{taskId}} nel cestino?",
+ "confirmLabel": "Elimina",
+ "cancelLabel": "Annulla"
+ }
+ },
+ "editor": {
+ "actions": {
+ "cancel": "Annulla",
+ "closeEditor": "Chiudi editor",
+ "closeTab": "Chiudi scheda",
+ "closeTooltip": "Chiudi editor (Esc)",
+ "discard": "Scarta",
+ "discardAndClose": "Scarta e chiudi",
+ "keep": "Mantieni",
+ "keepMine": "Mantieni le mie",
+ "keyboardShortcuts": "Scorciatoie da tastiera",
+ "overwrite": "Sovrascrivi",
+ "refreshAria": "Aggiorna (F5)",
+ "refreshTooltip": "Aggiorna lo stato git (F5)",
+ "reload": "Ricarica",
+ "retry": "Riprova",
+ "save": "Salva",
+ "saveAllAndClose": "Salva tutto e chiudi"
+ },
+ "ariaLabel": "Editor del progetto",
+ "dialogs": {
+ "conflictDescription": "Il file è stato modificato esternamente da quando lo hai aperto. Sovrascrivere con le tue modifiche?",
+ "conflictTitle": "Conflitto di salvataggio",
+ "unsavedDescription": "Hai modifiche non salvate. Cosa vuoi fare?",
+ "unsavedFileDescription": "Questo file ha modifiche non salvate. Cosa vuoi fare?",
+ "unsavedTitle": "Modifiche non salvate"
+ },
+ "newFile": {
+ "validation": {
+ "nameRequired": "Il nome non può essere vuoto",
+ "invalidName": "Nome non valido",
+ "invalidCharacters": "Il nome contiene caratteri non validi",
+ "nameTooLong": "Il nome è troppo lungo"
+ },
+ "placeholders": {
+ "fileName": "Nome del file...",
+ "folderName": "Nome della cartella..."
+ },
+ "aria": {
+ "newFileName": "Nome del nuovo file",
+ "newFolderName": "Nome della nuova cartella"
+ }
+ },
+ "draftRecovered": "Recuperate le modifiche non salvate da una sessione precedente.",
+ "externalChange": {
+ "changed": "Il file è cambiato su disco.",
+ "deleted": "Il file non esiste più su disco."
+ },
+ "saveFailed": "Salvataggio non riuscito: {{error}}",
+ "sidebar": {
+ "explorer": "Explorer",
+ "hide": "Nascondi barra laterale",
+ "hideWithShortcut": "Nascondi barra laterale ({{shortcut}})",
+ "show": "Mostra barra laterale",
+ "showWithShortcut": "Mostra barra laterale ({{shortcut}})"
+ },
+ "searchInFiles": {
+ "title": "Cerca nei file",
+ "closeSearch": "Chiudi ricerca",
+ "closeSearchShortcut": "Chiudi ricerca (Esc)",
+ "searchPlaceholder": "Cerca...",
+ "matchCase": "Maiuscole/minuscole",
+ "matchCaseToggle": "Aa",
+ "noResults": "Nessun risultato trovato",
+ "resultsSummary": "{{count}} corrispondenze in {{fileCount}} file",
+ "resultsSummary_one": "{{count}} corrispondenza in {{fileCount}} file",
+ "truncated": "(troncato)",
+ "resultsSummary_few": "{{count}} corrispondenze in {{fileCount}} file",
+ "resultsSummary_many": "{{count}} corrispondenze in {{fileCount}} file",
+ "resultsSummary_other": "{{count}} corrispondenze in {{fileCount}} file"
+ },
+ "fileTree": {
+ "failedToLoadFiles": "Impossibile caricare i file: {{error}}",
+ "loading": "Caricamento dei file...",
+ "empty": "Nessun file trovato",
+ "dropForProjectRoot": "Rilascia qui per la radice del progetto",
+ "moveToTrash": "Sposta nel cestino",
+ "moveToTrashConfirm": "Spostare \"{{name}}\" nel cestino?",
+ "cancel": "Annulla"
+ },
+ "goToLine": {
+ "title": "Vai alla riga",
+ "position": "(attuale: {{current}}, totale: {{total}})",
+ "placeholder": "Numero di riga, +offset, -offset o %",
+ "go": "Vai"
+ },
+ "searchPanel": {
+ "previousMatch": "Corrispondenza precedente",
+ "nextMatch": "Corrispondenza successiva",
+ "close": "Chiudi",
+ "replacePlaceholder": "Sostituisci",
+ "replace": "Sostituisci",
+ "replaceNext": "Sostituisci successiva",
+ "all": "Tutte",
+ "replaceAll": "Sostituisci tutto"
+ },
+ "statusBar": {
+ "position": "Rg {{line}}, Col {{col}}",
+ "enableWatcher": "Abilita il monitoraggio dei file",
+ "disableWatcher": "Disabilita il monitoraggio dei file",
+ "watch": "monitora",
+ "watching": "monitoraggio",
+ "watchExternalChanges": "Monitora le modifiche esterne",
+ "disableExternalWatcher": "Disabilita il monitoraggio delle modifiche esterne",
+ "encodingUtf8": "UTF-8",
+ "spaces": "Spazi: {{count}}"
+ },
+ "imagePreview": {
+ "loading": "Caricamento dell'anteprima...",
+ "openFullSize": "Apri anteprima a grandezza naturale",
+ "openSystemViewer": "Apri nel visualizzatore di sistema"
+ },
+ "quickOpen": {
+ "title": "Apertura rapida",
+ "searchPlaceholder": "Cerca file per nome...",
+ "loading": "Caricamento dei file...",
+ "empty": "Nessun file trovato"
+ },
+ "errorBoundary": {
+ "crashed": "L'editor si è bloccato",
+ "unknownError": "Errore sconosciuto"
+ },
+ "binaryPlaceholder": {
+ "file": "File binario ({{size}})"
+ },
+ "unsavedChanges": "Modifiche non salvate",
+ "empty": {
+ "selectFile": "Seleziona un file dall'albero per modificarlo"
+ },
+ "search": {
+ "toggleReplace": "Attiva/disattiva sostituzione",
+ "placeholder": "Cerca"
+ },
+ "shortcuts": {
+ "title": "Scorciatoie da tastiera",
+ "groups": {
+ "fileOperations": "Operazioni sui file",
+ "search": "Ricerca",
+ "navigation": "Navigazione",
+ "editing": "Modifica",
+ "markdown": "Markdown",
+ "general": "Generale"
+ },
+ "actions": {
+ "quickOpen": "Apertura rapida",
+ "save": "Salva",
+ "saveAll": "Salva tutto",
+ "closeTab": "Chiudi scheda",
+ "findInFile": "Trova nel file",
+ "searchInFiles": "Cerca nei file",
+ "goToLine": "Vai alla riga",
+ "nextTab": "Scheda successiva",
+ "previousTab": "Scheda precedente",
+ "cycleTabs": "Scorri le schede",
+ "toggleSidebar": "Attiva/disattiva barra laterale",
+ "undo": "Annulla",
+ "redo": "Ripeti",
+ "selectNextMatch": "Seleziona corrispondenza successiva",
+ "toggleComment": "Attiva/disattiva commento",
+ "splitPreview": "Anteprima divisa",
+ "fullPreview": "Anteprima completa",
+ "closeEditor": "Chiudi editor"
+ }
+ },
+ "toolbar": {
+ "enableWordWrap": "Abilita ritorno a capo automatico",
+ "disableWordWrap": "Disabilita ritorno a capo automatico",
+ "closeSplitPreview": "Chiudi anteprima divisa",
+ "closePreview": "Chiudi anteprima"
+ }
+ },
+ "launch": {
+ "actions": {
+ "createSchedule": "Crea pianificazione",
+ "creating": "Creazione in corso...",
+ "goToDashboard": "Vai alla dashboard",
+ "launchTeam": "Avvia team",
+ "launching": "Avvio in corso...",
+ "relaunchTeam": "Riavvia team",
+ "relaunching": "Riavvio in corso...",
+ "saveChanges": "Salva modifiche",
+ "saving": "Salvataggio in corso..."
+ },
+ "billing": {
+ "prefix": "A partire dal 15 giugno 2026, Anthropic fattura",
+ "readArticle": "Leggi l'articolo di Anthropic",
+ "suffix": "e l'utilizzo dell'Agent SDK dal credito mensile dell'Agent SDK, separato dai limiti interattivi di Claude Code. Il credito si reimposta a ogni ciclo di fatturazione e il credito non utilizzato non viene riportato."
+ },
+ "conflict": {
+ "description": "Eseguire due team nella stessa directory è rischioso - potrebbero entrare in conflitto modificando gli stessi file. Valuta l'uso di una directory diversa o di un worktree git per l'isolamento.",
+ "title": "Un altro team \"{{team}}\" è già in esecuzione per questa directory di lavoro",
+ "workingDirectory": "Directory di lavoro:"
+ },
+ "description": {
+ "createSchedule": "Pianifica l'esecuzione automatica dei task di Claude",
+ "createScheduleForTeam": "Pianifica esecuzioni automatiche per il team \"{{team}}\"",
+ "editSchedule": "Modifica della pianificazione per il team \"{{team}}\"",
+ "launchPrefix": "Avvia il team",
+ "launchSuffix": "tramite la Claude CLI locale.",
+ "relaunchPrefix": "Ferma l'esecuzione corrente di",
+ "relaunchSuffix": "e avvialo di nuovo tramite la Claude CLI locale."
+ },
+ "prepare": {
+ "action": {
+ "launch": "avvio",
+ "relaunch": "riavvio"
+ },
+ "blocked": "L'ambiente runtime non è disponibile - {{action}} è bloccato",
+ "checkingProviders": "Controllo dei provider selezionati...",
+ "failed": "Impossibile preparare i provider selezionati",
+ "preflight": "Controllo preliminare per rilevare gli errori prima di {{action}}",
+ "preparingEnvironment": "Preparazione dell'ambiente...",
+ "ready": "Tutti i provider selezionati sono pronti.",
+ "readyWithNotes": "Tutti i provider selezionati sono pronti, con note.",
+ "unsupportedPreload": "La versione attuale del preload non supporta team:prepareProvisioning. Riavvia l'app di sviluppo.",
+ "selectWorkingDirectory": "Seleziona una directory di lavoro per convalidare l'ambiente di avvio.",
+ "someProvidersNeedAttention": "Alcuni provider selezionati richiedono attenzione."
+ },
+ "prompt": {
+ "label": "Prompt",
+ "oneShotPrefix": "Questo prompt verrà passato a",
+ "oneShotSuffix": "per un'esecuzione one-shot",
+ "saved": "Salvato",
+ "schedulePlaceholder": "Istruzioni per Claude da eseguire secondo la pianificazione...",
+ "teamLeadOptional": "Prompt per il lead del team (facoltativo)",
+ "teamLeadPlaceholder": "Istruzioni per il lead del team..."
+ },
+ "providerChanged": "Provider cambiato da {{from}} a {{to}}. La sessione precedente del lead non verrà ripresa e il lead inizierà con un contesto nuovo in modo che il nuovo runtime venga applicato correttamente.",
+ "relaunchFreshSession": "Il riavvio del team inizia una nuova sessione del lead. Lo stato persistente del team, la bacheca dei task e la configurazione dei membri vengono reidratati nel prompt di avvio.",
+ "relaunchWarning": {
+ "description": "Il salvataggio di queste impostazioni fermerà il processo del team corrente, renderà persistente l'elenco aggiornato e avvierà di nuovo il team con il nuovo runtime.",
+ "title": "Il riavvio riavvierà l'esecuzione corrente del team"
+ },
+ "schedule": {
+ "labelOptional": "Etichetta (facoltativa)",
+ "labelPlaceholder": "es. Revisione del codice quotidiana, Test notturni...",
+ "maxBudgetUsd": "Budget massimo (USD)",
+ "maxTurns": "Turni massimi",
+ "noLimit": "Nessun limite",
+ "noMatches": "Nessun team corrisponde alla tua ricerca.",
+ "noTeams": "Nessun team disponibile. Crea prima un team.",
+ "searchTeams": "Cerca team...",
+ "selectTeam": "Seleziona un team...",
+ "team": "Team",
+ "title": "Pianificazione"
+ },
+ "title": {
+ "createSchedule": "Crea pianificazione",
+ "editSchedule": "Modifica pianificazione",
+ "launch": "Avvia team",
+ "relaunch": "Riavvia team"
+ },
+ "errors": {
+ "loadProjectsFailed": "Impossibile caricare i progetti",
+ "saveScheduleFailed": "Impossibile salvare la pianificazione",
+ "relaunchFailed": "Impossibile riavviare il team",
+ "launchFailed": "Impossibile avviare il team"
+ },
+ "validation": {
+ "openCodeLeadModelRequired": "Il lead OpenCode richiede un modello selezionato.",
+ "openCodeTeammateRequired": "Il lead OpenCode richiede almeno un membro del team OpenCode.",
+ "selectWorkingDirectory": "Seleziona la directory di lavoro (cwd)",
+ "fixMemberNames": "Correggi i nomi dei membri prima dell'avvio",
+ "memberNamesUnique": "I nomi dei membri devono essere univoci prima dell'avvio"
+ },
+ "optionalSettings": {
+ "relaunchTitle": "Impostazioni di riavvio",
+ "title": "Impostazioni di avvio facoltative",
+ "relaunchDescription": "Controlla l'elenco e il runtime del lead prima di riavviare il team.",
+ "description": "Mantieni il flusso di avvio focalizzato sul percorso del progetto ed espandi questo solo quando vuoi un controllo aggiuntivo."
+ }
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Copia team",
+ "createTeam": "Crea team",
+ "deleteForever": "Elimina definitivamente",
+ "deletePermanently": "Elimina in modo permanente",
+ "deleteTeam": "Elimina team",
+ "launching": "Avvio in corso...",
+ "launchTeam": "Avvia team",
+ "relaunchTeam": "Riavvia team",
+ "restore": "Ripristina",
+ "restoreTeam": "Ripristina team",
+ "retry": "Riprova",
+ "stopTeam": "Ferma team",
+ "stopping": "Arresto in corso..."
+ },
+ "electronOnly": {
+ "description": "In modalità browser, l'accesso alle directory locali `~/.claude/teams` non è disponibile.",
+ "title": "I team sono disponibili solo in modalità Electron"
+ },
+ "empty": {
+ "description": "Crea un team qui per iniziare. Apparirà nell'elenco automaticamente.",
+ "localOnly": "La creazione di team è disponibile solo in modalità Electron locale.",
+ "title": "Nessun team trovato"
+ },
+ "filter": {
+ "clearAll": "Cancella tutto",
+ "label": "Filtra team",
+ "projectPriority": "Priorità del progetto",
+ "status": "Stato"
+ },
+ "loadFailed": "Impossibile caricare i team",
+ "loading": "Caricamento dei team...",
+ "localOnly": "Disponibile solo in modalità Electron locale.",
+ "membersCount": "Membri: {{count}}",
+ "membersCount_few": "Membri: {{count}}",
+ "membersCount_many": "Membri: {{count}}",
+ "membersCount_one": "Membro: {{count}}",
+ "membersCount_other": "Membri: {{count}}",
+ "noDescription": "Nessuna descrizione",
+ "noMatches": "Nessun team corrisponde ai filtri attuali",
+ "partial": {
+ "pending": "L'ultimo avvio è ancora in fase di riconciliazione.",
+ "skipped": "L'ultimo avvio ha saltato dei membri del team.",
+ "skippedWithCount": "L'ultimo avvio ha saltato {{count}}/{{expected}} membro del team.",
+ "skippedWithCount_few": "L'ultimo avvio ha saltato {{count}}/{{expected}} membri del team.",
+ "skippedWithCount_many": "L'ultimo avvio ha saltato {{count}}/{{expected}} membri del team.",
+ "skippedWithCount_one": "L'ultimo avvio ha saltato {{count}}/{{expected}} membro del team.",
+ "skippedWithCount_other": "L'ultimo avvio ha saltato {{count}}/{{expected}} membri del team.",
+ "stopped": "L'ultimo avvio si è fermato prima che tutti i membri si unissero.",
+ "stoppedWithCount": "L'ultimo avvio si è fermato prima che {{count}}/{{expected}} membro del team si unisse.",
+ "stoppedWithCount_few": "L'ultimo avvio si è fermato prima che {{count}}/{{expected}} membri del team si unissero.",
+ "stoppedWithCount_many": "L'ultimo avvio si è fermato prima che {{count}}/{{expected}} membri del team si unissero.",
+ "stoppedWithCount_one": "L'ultimo avvio si è fermato prima che {{count}}/{{expected}} membro del team si unisse.",
+ "stoppedWithCount_other": "L'ultimo avvio si è fermato prima che {{count}}/{{expected}} membri del team si unissero."
+ },
+ "searchPlaceholder": "Cerca team...",
+ "sections": {
+ "otherTeams": "Altri team",
+ "projectTeams": "Team per {{project}}",
+ "selectedProject": "progetto selezionato"
+ },
+ "solo": "Solo",
+ "status": {
+ "active": "Attivo",
+ "deleted": "Eliminato",
+ "launching": "Avvio in corso...",
+ "offline": "Offline",
+ "partialFailure": "Avvio non riuscito a metà",
+ "partialPending": "Bootstrap in attesa",
+ "partialSkipped": "Avvio ha saltato un membro",
+ "running": "In esecuzione"
+ },
+ "title": "Seleziona team",
+ "trash": "Cestino ({{count}})",
+ "trash_few": "Cestino ({{count}})",
+ "trash_many": "Cestino ({{count}})",
+ "trash_one": "Cestino ({{count}})",
+ "trash_other": "Cestino ({{count}})",
+ "deleteDraft": {
+ "title": "Elimina bozza",
+ "message": "Eliminare il team bozza \"{{teamName}}\"? Questa operazione non può essere annullata.",
+ "confirmLabel": "Elimina",
+ "cancelLabel": "Annulla"
+ },
+ "moveToTrash": {
+ "title": "Sposta nel cestino",
+ "message": "Spostare il team \"{{teamName}}\" nel cestino? Puoi ripristinarlo in seguito.",
+ "confirmLabel": "Sposta nel cestino",
+ "cancelLabel": "Annulla"
+ },
+ "deleteForever": {
+ "title": "Elimina in modo permanente",
+ "message": "Eliminare definitivamente il team \"{{teamName}}\"? Tutti i dati andranno persi.",
+ "confirmLabel": "Elimina definitivamente",
+ "cancelLabel": "Annulla"
+ }
+ },
+ "messageComposer": {
+ "crossTeam": {
+ "hint": "Suggerimento: I messaggi tra team vanno al lead del team di destinazione. Se vuoi che la risposta torni al lead del tuo team invece che a te, dillo esplicitamente nel messaggio."
+ },
+ "attachments": {
+ "attachFiles": "Allega file (incolla o trascina)",
+ "unavailable": "Gli allegati non sono disponibili",
+ "disabledHint": "Gli allegati ai file sono supportati per il lead del team online e i membri del team OpenCode online. Rimuovi gli allegati o cambia destinatario.",
+ "restrictions": {
+ "crossTeam": "Gli allegati ai file non sono supportati per i messaggi tra team",
+ "teamOffline": "Il team deve essere online per allegare file",
+ "unsupportedRecipient": "I file possono essere inviati al lead del team o ai membri del team OpenCode",
+ "openCodeOffline": "Il team deve essere online per allegare file ai membri del team OpenCode",
+ "sending": "Attendi il termine dell'invio del messaggio corrente prima di aggiungere file",
+ "maximumReached": "Numero massimo di allegati raggiunto",
+ "leadOnly": "I file possono essere inviati solo al lead del team"
+ }
+ },
+ "slash": {
+ "restrictions": {
+ "attachments": "I comandi slash richiedono un lead del team attivo e non possono essere inviati con allegati",
+ "crossTeam": "I comandi slash possono essere eseguiti solo sul lead del team corrente",
+ "notLead": "I comandi slash possono essere inviati solo al lead del team",
+ "leadOffline": "I comandi slash richiedono che il lead del team sia online"
+ }
+ },
+ "status": {
+ "reusedCrossTeamRequest": "Riutilizzata una richiesta tra team recente",
+ "teamOffline": "Team offline"
+ },
+ "revision": {
+ "editing": "Modifica del messaggio precedente",
+ "cancel": "Annulla",
+ "tooltip": "Chiedi all'agente di ignorare il messaggio precedente e ripristinarlo nel compositore."
+ },
+ "input": {
+ "charsLeft": "{{count}} caratteri rimasti",
+ "charsLeft_one": "{{count}} carattere rimasto",
+ "charsLeft_other": "{{count}} caratteri rimasti",
+ "teamLaunchingPlaceholder": "Il team è in fase di avvio... il messaggio verrà messo in coda per la consegna nella posta in arrivo.",
+ "crossTeamPlaceholder": "Messaggio tra team a {{team}}...",
+ "teamFallback": "team",
+ "placeholder": "Scrivi un messaggio... (Invio per inviare, Maiusc+Invio per andare a capo)",
+ "slashTip": "Suggerimento: Puoi usare \"/\" per eseguire qualsiasi comando di Claude.",
+ "charsLeft_few": "{{count}} caratteri rimasti",
+ "charsLeft_many": "{{count}} caratteri rimasti"
+ },
+ "teamSelector": {
+ "thisTeam": "Questo team",
+ "current": "attuale",
+ "online": "online",
+ "offline": "offline",
+ "onlineTitle": "Online",
+ "offlineTitle": "Offline"
+ },
+ "recipient": {
+ "select": "Seleziona...",
+ "searchPlaceholder": "Cerca...",
+ "noResults": "Nessun risultato"
+ },
+ "actions": {
+ "voiceToText": "Da voce a testo",
+ "send": "Invia",
+ "sendingUnavailableLaunching": "Invio non disponibile mentre il team è in fase di avvio"
+ }
+ },
+ "claudeLogs": {
+ "filter": {
+ "ariaLabel": "Filtra log",
+ "tooltip": "Filtra log",
+ "sections": {
+ "stream": "Stream",
+ "content": "Contenuto"
+ },
+ "kinds": {
+ "output": "Output",
+ "thinking": "Ragionamento",
+ "tool": "Chiamate degli strumenti"
+ },
+ "actions": {
+ "reset": "Reimposta",
+ "save": "Salva"
+ },
+ "streams": {
+ "stdout": "stdout",
+ "stderr": "stderr"
+ }
+ },
+ "rawLineCount": "{{formattedCount}} righe grezze",
+ "rawLineCount_one": "{{formattedCount}} riga grezza",
+ "rawLinesCaptured": "{{count}} catturate",
+ "emptyRawLogs": "{{count}}; nessuna è ancora output dell'assistente/strumento.",
+ "noLogsYet": "Ancora nessun log.",
+ "teamNotRunning": "Il team non è in esecuzione.",
+ "searchPlaceholder": "Cerca log...",
+ "clearSearch": "Cancella ricerca",
+ "newCount": "+{{count}} nuovi",
+ "loading": "Caricamento...",
+ "showMore": "Mostra di più",
+ "noLogsCaptured": "Nessun log catturato.",
+ "noMatchingLogs": "Nessun log corrispondente.",
+ "rawLineCount_few": "{{formattedCount}} righe grezze",
+ "rawLineCount_many": "{{formattedCount}} righe grezze",
+ "rawLineCount_other": "{{formattedCount}} righe grezze",
+ "openFullscreen": "Apri i log a schermo intero",
+ "fullscreen": "Schermo intero",
+ "viewingFullscreen": "Visualizzazione in modalità schermo intero",
+ "logsTitle": "Log",
+ "sourceSelect": {
+ "placeholder": "Seleziona la fonte dei log...",
+ "searchPlaceholder": "Cerca fonti dei log...",
+ "emptyMessage": "Nessuna fonte dei log trovata.",
+ "ariaLabel": "Fonte dei log",
+ "leadLabel": "Lead",
+ "selectSourceEmpty": "Seleziona una fonte dei log.",
+ "leadDescription": "Lead del team",
+ "removedLabel": "rimosso",
+ "removedDescription": "Rimosso"
+ }
+ },
+ "agentGraph": {
+ "popover": {
+ "externalTeam": "Team esterno",
+ "process": {
+ "startedBy": "Avviato da:",
+ "at": "Alle:",
+ "openUrl": "Apri URL"
+ },
+ "overflow": {
+ "hiddenTasks": "Task nascosti",
+ "empty": "Nessun task nascosto disponibile."
+ },
+ "member": {
+ "lead": "Lead",
+ "workingOn": "sta lavorando su",
+ "recentTools": "Strumenti recenti",
+ "spawn": {
+ "waitingToStart": "in attesa di avvio",
+ "starting": "avvio in corso",
+ "failed": "non riuscito"
+ },
+ "state": {
+ "active": "attivo",
+ "idle": "inattivo",
+ "offline": "offline",
+ "runningTool": "esecuzione strumento"
+ },
+ "activeTool": {
+ "running": "Esecuzione strumento",
+ "failed": "Strumento non riuscito",
+ "finished": "Strumento terminato"
+ },
+ "actions": {
+ "message": "Messaggio",
+ "profile": "Profilo",
+ "task": "Task"
+ }
+ }
+ },
+ "logPreview": {
+ "logs": "Log",
+ "loading": "Caricamento dei log",
+ "more": "+{{count}} altri",
+ "more_one": "+{{count}} altro",
+ "more_other": "+{{count}} altri",
+ "more_few": "+{{count}} altri",
+ "more_many": "+{{count}} altri",
+ "unsupportedProvider": "Provider non supportato",
+ "openCodeLogsDelayed": "Log OpenCode ritardati",
+ "logsUnavailable": "Log non disponibili",
+ "noRecentLogs": "Nessun log recente",
+ "toolError": "Errore dello strumento",
+ "toolResult": "Risultato dello strumento",
+ "toolUse": "Uso dello strumento",
+ "thinking": "Ragionamento",
+ "error": "Errore",
+ "logEvent": "Evento di log",
+ "noErrorOutput": "Nessun output di errore",
+ "noOutput": "Nessun output",
+ "noInput": "Nessun input"
+ },
+ "blockingEdge": {
+ "title": "Dipendenza bloccante",
+ "blocks": "blocca",
+ "close": "Chiudi",
+ "blockingHiddenTasks": "Task nascosti bloccanti",
+ "blockedHiddenTasks": "Task nascosti bloccati",
+ "links_one": "{{count}} collegamento",
+ "links_other": "{{count}} collegamenti",
+ "hiddenBlockingLinks_one": "{{count}} collegamento bloccante nascosto",
+ "hiddenBlockingLinks_other": "{{count}} collegamenti bloccanti nascosti",
+ "hiddenTaskStack": "Stack di task nascosti",
+ "hiddenTasks_one": "{{count}} task nascosto",
+ "hiddenTasks_other": "{{count}} task nascosti",
+ "task": "Task",
+ "openBlockerStack": "Apri lo stack dei bloccanti",
+ "openBlockedStack": "Apri lo stack dei bloccati",
+ "openBlockerTask": "Apri il task bloccante",
+ "openBlockedTask": "Apri il task bloccato"
+ },
+ "activityHud": {
+ "activity": "Attività",
+ "noRecentActivity": "Nessuna attività recente",
+ "more": "+{{count}} altri",
+ "more_one": "+{{count}} altro",
+ "more_other": "+{{count}} altri",
+ "more_few": "+{{count}} altri",
+ "more_many": "+{{count}} altri"
+ },
+ "provisioning": {
+ "launchDetails": "Dettagli di avvio",
+ "launchDetailsDescription": "Avanzamento dettagliato dell'avvio del team, output dal vivo e log della CLI."
+ }
+ },
+ "projectPath": {
+ "label": "Progetto",
+ "source": {
+ "claude": "Trovato da Claude",
+ "codex": "Trovato da Codex",
+ "mixed": "Trovato da Claude e Codex"
+ },
+ "deleted": {
+ "title": "La cartella del progetto non esiste più",
+ "label": "Eliminato"
+ },
+ "mode": {
+ "projectList": "Dall'elenco dei progetti",
+ "customPath": "Percorso personalizzato"
+ },
+ "loadingProjects": "Caricamento dei progetti...",
+ "selectProject": "Seleziona un progetto...",
+ "searchPlaceholder": "Cerca progetto per nome o percorso",
+ "empty": "Nessun risultato",
+ "selectFromList": "Seleziona un progetto dall'elenco",
+ "noProjects": "Nessun progetto trovato, passa al percorso personalizzato.",
+ "customWorkingDirectory": "Directory di lavoro personalizzata",
+ "browse": "Sfoglia",
+ "createAutomatically": "Se la directory non esiste, verrà creata automaticamente."
+ },
+ "members": {
+ "badges": {
+ "worktree": "worktree"
+ },
+ "runtimeTelemetry": {
+ "title": "Carico del runtime locale",
+ "description": "Solo processi padre e figlio. L'inferenza LLM remota non è inclusa.",
+ "cpu": "CPU",
+ "memory": "Memoria",
+ "summedRss": "RSS sommato",
+ "sharedHost": "Metrica dell'host OpenCode condiviso. Non è esclusiva di questo membro.",
+ "processTreeCapped": "L'albero dei processi è stato limitato per questo campione.",
+ "rssHint": "L'RSS può includere pagine condivise, quindi è meglio interpretarlo come un segnale di carico, non come memoria esclusiva."
+ },
+ "editor": {
+ "title": "Membri",
+ "addMember": "Aggiungi membro",
+ "editAsJson": "Modifica come JSON",
+ "runInSeparateWorktrees": "Esegui i membri del team in worktree separati",
+ "agentTeamsMcpOnly": "Solo MCP di Agent Teams",
+ "removedCount": "Rimossi ({{count}})",
+ "removedModelLockReason": "I membri rimossi vengono conservati per la cronologia di soft delete. Ripristinali per modificare le impostazioni.",
+ "memberNamesUnique": "I nomi dei membri devono essere univoci"
+ },
+ "stats": {
+ "computing": "Calcolo delle statistiche...",
+ "empty": "Nessuna statistica disponibile",
+ "lines": "Righe",
+ "linesInfo": "Approssimativo. Accurato per gli strumenti Edit e Write. Le scritture di file tramite Bash sono stimate dai pattern dei comandi (heredoc, echo, sed) e potrebbero essere sottostimate.",
+ "files": "File",
+ "toolCalls": "Chiamate degli strumenti",
+ "tokens": "Token",
+ "toolUsage": "Utilizzo degli strumenti",
+ "filesTouched": "File modificati ({{count}})",
+ "viewAllChanges": "Visualizza tutte le modifiche",
+ "showLess": "Mostra di meno",
+ "moreFiles": "+{{count}} altri",
+ "footer": "{{count}} sessioni · calcolato {{computedAgo}}",
+ "footer_one": "{{count}} sessione · calcolato {{computedAgo}}",
+ "footer_few": "{{count}} sessioni · calcolato {{computedAgo}}",
+ "footer_many": "{{count}} sessioni · calcolato {{computedAgo}}",
+ "footer_other": "{{count}} sessioni · calcolato {{computedAgo}}"
+ },
+ "logs": {
+ "searching": "Ricerca nei log...",
+ "empty": "Nessun log trovato",
+ "waitingForTaskActivity": "Il task è in corso - in attesa dell'attività della sessione (aggiornamento automatico)...",
+ "noTaskActivity": "Ancora nessuna attività della sessione per questo task",
+ "noMemberActivity": "Questo membro non ha ancora attività della sessione registrata",
+ "leadSessionTooltip": "Log completi della sessione del lead del team - utili per il contesto di orchestrazione globale, non specifici di questo agente",
+ "memberSessionTooltip": "Log completi della sessione persistente del membro del team - utili quando il lavoro viene eseguito in una sessione di membro radice invece che in un file di sottoagente",
+ "startedAt": "avviato {{time}}",
+ "active": "attivo",
+ "showDetails": "Mostra dettagli",
+ "hideDetails": "Nascondi dettagli",
+ "loadingDetails": "Caricamento dei dettagli...",
+ "failedToLoadDetails": "Impossibile caricare i dettagli"
+ },
+ "detail": {
+ "relaunchOpenCode": "Riavvia OpenCode",
+ "restart": "Riavvia",
+ "legacyLogsFallback": "Fallback dei log legacy",
+ "copyDiagnostics": "Copia diagnostica",
+ "pid": "PID {{pid}}",
+ "removedAt": "Rimosso il {{date}}",
+ "failedToRestartMember": "Impossibile riavviare il membro",
+ "sendMessage": "Invia messaggio",
+ "assignTask": "Assegna task",
+ "remove": "Rimuovi"
+ },
+ "list": {
+ "loading": "Caricamento dei membri del team",
+ "unavailable": "Elenco dei membri non disponibile",
+ "unavailableDescription": "{{count}} membri del team sono noti dai metadati del team, ma i dettagli dell'elenco mancano.",
+ "unavailableDescription_one": "{{count}} membro del team è noto dai metadati del team, ma i dettagli dell'elenco mancano.",
+ "soloLeadOnly": "Team solo - solo lead",
+ "removedCount": "Rimossi ({{count}})",
+ "unavailableDescription_few": "{{count}} membri del team sono noti dai metadati del team, ma i dettagli dell'elenco mancano.",
+ "unavailableDescription_many": "{{count}} membri del team sono noti dai metadati del team, ma i dettagli dell'elenco mancano.",
+ "unavailableDescription_other": "{{count}} membri del team sono noti dai metadati del team, ma i dettagli dell'elenco mancano."
+ },
+ "executionLog": {
+ "empty": "Nulla da visualizzare",
+ "emptyUserMessage": "{{time}} - (vuoto)",
+ "agentInstructions": "Istruzioni dell'agente",
+ "memberTurn": "Turno di {{member}}",
+ "agentTurn": "Turno dell'agente",
+ "turn": "turno"
+ },
+ "recentMessages": {
+ "latest": "Ultimi messaggi",
+ "latestForMember": "Ultimi messaggi - {{member}}",
+ "loadMore": "Carica altro",
+ "expand": "Espandi",
+ "collapse": "Comprimi"
+ },
+ "leadModel": {
+ "defaultModel": "Predefinito",
+ "providerModelAria": "Provider {{provider}}, {{model}}",
+ "leadShort": "lead",
+ "teamLead": "Lead del team",
+ "syncWithTeammates": "Sincronizza il modello con i membri del team",
+ "anthropicTeamWide": "Anthropic per l'intero team",
+ "runtimeInheritance": "Il runtime del lead si applica ai membri del team a meno che non impostino il proprio provider o modello.",
+ "anthropicContextLimit": "Il limite di contesto di 200K è valido per l'intero team per i runtime Anthropic in questo avvio, inclusi i membri del team Anthropic personalizzati."
+ },
+ "runtimeLogs": {
+ "autoRefresh": "Aggiornamento automatico",
+ "wrapLines": "Manda a capo le righe",
+ "loadingTail": "Caricamento della coda del log di processo...",
+ "empty": "Nessun file di log di processo ancora catturato per questo membro.",
+ "copy": "Copia",
+ "fileEmpty": "Il file di log di processo è vuoto.",
+ "showingLast": "Visualizzazione degli ultimi {{bytes}}.",
+ "showing": "Visualizzazione di {{bytes}}."
+ },
+ "tasks": {
+ "empty": "Nessun task assegnato a questo membro"
+ },
+ "messages": {
+ "loadOlder": "Carica messaggi precedenti",
+ "filters": {
+ "all": "Tutti",
+ "messages": "Messaggi",
+ "comments": "Commenti"
+ },
+ "empty": {
+ "loading": "Caricamento dell'attività...",
+ "noComments": "Nessun commento per questo membro",
+ "noLoadedMessages": "Ancora nessun messaggio caricato per questo membro",
+ "noMessages": "Nessun messaggio con questo membro",
+ "noLoadedActivity": "Ancora nessuna attività caricata per questo membro",
+ "noActivity": "Nessuna attività con questo membro"
+ }
+ },
+ "actions": {
+ "openProfile": "Apri profilo",
+ "editRole": "Modifica ruolo",
+ "sendMessage": "Invia messaggio",
+ "assignTask": "Assegna task"
+ },
+ "roleSelect": {
+ "customRolePlaceholder": "Inserisci un ruolo personalizzato..."
+ }
+ },
+ "schedule": {
+ "count": "{{count}} pianificazioni",
+ "count_one": "{{count}} pianificazione",
+ "count_other": "{{count}} pianificazioni",
+ "nextRun": "Successiva: {{next}}",
+ "actions": {
+ "runNow": "Esegui ora",
+ "edit": "Modifica",
+ "pause": "Sospendi",
+ "resume": "Riprendi",
+ "delete": "Elimina",
+ "addSchedule": "Aggiungi pianificazione"
+ },
+ "runHistory": {
+ "loading": "Caricamento della cronologia di esecuzione...",
+ "empty": "Ancora nessuna esecuzione"
+ },
+ "count_few": "{{count}} pianificazioni",
+ "count_many": "{{count}} pianificazioni",
+ "runLog": {
+ "title": "Log di esecuzione",
+ "exitCode": "uscita {{code}}",
+ "retryCount": "tentativo {{count}}/{{max}}",
+ "stillRunning": "Il task è ancora in esecuzione...",
+ "loadingLogs": "Caricamento dei log...",
+ "errors": "Errori",
+ "close": "Chiudi"
+ },
+ "cron": {
+ "expression": "Espressione cron",
+ "highFrequencyWarning": "Pianificazione ad alta frequenza (intervallo inferiore a 5 min)",
+ "nextRuns": "Prossime esecuzioni:",
+ "timezone": "Fuso orario",
+ "selectTimezone": "Seleziona fuso orario",
+ "warmUpTime": "Tempo di riscaldamento",
+ "warmUpDescription": "Prepara i provider selezionati prima dell'esecuzione pianificata",
+ "errors": {
+ "enterExpression": "Inserisci un'espressione cron",
+ "invalidExpression": "Espressione cron non valida"
+ },
+ "presets": {
+ "everyHour": "Ogni ora",
+ "everySixHours": "Ogni 6 ore",
+ "dailyAtNine": "Ogni giorno alle 9:00",
+ "weekdaysAtNine": "Nei giorni feriali alle 9:00",
+ "mondayAtNine": "Lunedì alle 9:00",
+ "everyThirtyMinutes": "Ogni 30 min"
+ },
+ "warmUpOptions": {
+ "none": "Nessun riscaldamento",
+ "fiveMinutes": "5 min",
+ "tenMinutes": "10 min",
+ "fifteenMinutes": "15 min",
+ "thirtyMinutes": "30 min"
+ }
+ },
+ "empty": {
+ "title": "Ancora nessuna pianificazione",
+ "description": "Crea una pianificazione per eseguire automaticamente i task di Claude secondo una pianificazione cron."
+ },
+ "title": "Pianificazioni",
+ "status": {
+ "active": "Attiva",
+ "paused": "Sospesa",
+ "disabled": "Disabilitata"
+ },
+ "runStatus": {
+ "pending": "In attesa",
+ "warmingUp": "In riscaldamento",
+ "warm": "Caldo",
+ "running": "In esecuzione",
+ "completed": "Completata",
+ "failed": "Non riuscita",
+ "interrupted": "Interrotta",
+ "cancelled": "Annullata"
+ }
+ },
+ "openCodeContextConfigHint": {
+ "summary": "I modelli locali OpenCode possono usare un budget di contesto OpenCode invece di limiti solo sul prompt.",
+ "description": "Aggiungi limiti corrispondenti alla configurazione OpenCode per il provider e il modello usati da questo membro del team. Questo aiuta OpenCode a compattare e potare prima che i modelli locali saturino la loro finestra di contesto.",
+ "replacePrefix": "Sostituisci",
+ "and": "e",
+ "replaceSuffix": "con gli ID di provider e modello della tua configurazione OpenCode. Le istruzioni del prompt come",
+ "promptInstructionsSuffix": "sono più deboli perché la richiesta viene assemblata prima che il modello le legga.",
+ "providerLimits": "Limiti del provider",
+ "compactionConfig": "Configurazione di compattazione"
+ },
+ "sessions": {
+ "noProjectPath": "Nessun percorso di progetto collegato",
+ "provisioningHint": "Le sessioni appariranno dopo il provisioning del team",
+ "projectNotFound": "Progetto non trovato",
+ "loading": "Caricamento delle sessioni...",
+ "empty": "Nessuna sessione trovata",
+ "showAllSessions": "Mostra per tutte le sessioni",
+ "lead": "lead",
+ "removeFilter": "Rimuovi filtro",
+ "filterBySession": "Filtra per questa sessione",
+ "openSession": "Apri sessione",
+ "title": "Sessioni"
+ },
+ "provisioning": {
+ "pid": "PID {{pid}}",
+ "cancel": "Annulla",
+ "moreWarningsHidden": "{{count}} altri avvisi nascosti",
+ "diagnostics": "Diagnostica",
+ "liveOutput": "Output dal vivo",
+ "diagnosticsCopied": "Diagnostica copiata",
+ "copyDiagnostics": "Copia diagnostica",
+ "copied": "Copiato",
+ "noOutput": "Nessun output ancora catturato.",
+ "cliLogs": "Log della CLI",
+ "steps": {
+ "starting": "Avvio",
+ "configuring": "Configurazione del team",
+ "assembling": "Membri in arrivo",
+ "finalizing": "Finalizzazione"
+ },
+ "providerStatus": {
+ "status": {
+ "checking": "controllo...",
+ "ready": "OK",
+ "notes": "OK (note)",
+ "failed": "ERR",
+ "pending": "in attesa"
+ },
+ "detailSummary": {
+ "cliBinaryMissing": "Binario della CLI mancante",
+ "openCodeRuntimeMissing": "Runtime OpenCode mancante",
+ "openCodeWindowsAccessBlocked": "Accesso Windows a OpenCode bloccato",
+ "openCodeNoOutput": "Il controllo del runtime OpenCode non ha restituito alcun output",
+ "openCodeMcpUnreachable": "MCP dell'app OpenCode irraggiungibile",
+ "workingDirectoryMissing": "Directory di lavoro mancante",
+ "cliBinaryCouldNotStart": "Impossibile avviare il binario della CLI",
+ "cliPreflightIncomplete": "Il controllo preliminare della CLI non è stato completato",
+ "authenticationRequired": "Autenticazione richiesta",
+ "runtimeProviderNotConfigured": "Il provider del runtime non è configurato",
+ "cliPreflightFailed": "Controllo preliminare della CLI non riuscito",
+ "selectedModelCompatible": "Modello selezionato compatibile",
+ "selectedModelCompatibilityPending": "Compatibilità del modello selezionato in sospeso",
+ "selectedModelAvailable": "Modello selezionato disponibile",
+ "selectedModelVerified": "Modello selezionato verificato",
+ "selectedModelUnavailable": "Modello selezionato non disponibile",
+ "selectedModelTimedOut": "Verifica del modello selezionato scaduta",
+ "selectedModelCheckFailed": "Controllo del modello selezionato non riuscito",
+ "selectedModelDeferred": "Verifica del modello selezionato rinviata",
+ "selectedModelPingNotConfirmed": "Ping del modello selezionato non confermato",
+ "readyWithNotes": "Pronto con note",
+ "needsAttention": "Richiede attenzione"
+ },
+ "modelChecksSummary": "Controlli del modello selezionato - {{details}}",
+ "modelParts": {
+ "unavailable": "{{count}} modello non disponibile",
+ "unavailable_one": "{{count}} modello non disponibile",
+ "unavailable_other": "{{count}} modelli non disponibili",
+ "checkFailed": "{{count}} controllo del modello non riuscito",
+ "checkFailed_one": "{{count}} controllo del modello non riuscito",
+ "checkFailed_other": "{{count}} controlli dei modelli non riusciti",
+ "timedOut": "{{count}} modello scaduto",
+ "timedOut_one": "{{count}} modello scaduto",
+ "timedOut_other": "{{count}} modelli scaduti",
+ "deferred": "{{count}} verifica rinviata",
+ "deferred_one": "{{count}} verifica rinviata",
+ "deferred_other": "{{count}} verifiche rinviate",
+ "pingNotConfirmed": "{{count}} ping non confermato",
+ "pingNotConfirmed_one": "{{count}} ping non confermato",
+ "pingNotConfirmed_other": "{{count}} ping non confermati",
+ "compatibilityPending": "{{count}} compatibile, verifica approfondita in sospeso",
+ "compatibilityPending_one": "{{count}} compatibile, verifica approfondita in sospeso",
+ "compatibilityPending_other": "{{count}} compatibili, verifica approfondita in sospeso",
+ "compatible": "{{count}} compatibile",
+ "compatible_one": "{{count}} compatibile",
+ "compatible_other": "{{count}} compatibili",
+ "checking": "{{count}} in controllo",
+ "checking_one": "{{count}} in controllo",
+ "checking_other": "{{count}} in controllo",
+ "available": "{{count}} disponibile",
+ "available_one": "{{count}} disponibile",
+ "available_other": "{{count}} disponibili",
+ "verified": "{{count}} verificato",
+ "verified_one": "{{count}} verificato",
+ "verified_other": "{{count}} verificati",
+ "unavailable_few": "{{count}} modelli non disponibili",
+ "unavailable_many": "{{count}} modelli non disponibili",
+ "checkFailed_few": "{{count}} controlli dei modelli non riusciti",
+ "checkFailed_many": "{{count}} controlli dei modelli non riusciti",
+ "timedOut_few": "{{count}} modelli scaduti",
+ "timedOut_many": "{{count}} modelli scaduti",
+ "deferred_few": "{{count}} verifiche rinviate",
+ "deferred_many": "{{count}} verifiche rinviate",
+ "pingNotConfirmed_few": "{{count}} ping non confermati",
+ "pingNotConfirmed_many": "{{count}} ping non confermati",
+ "compatibilityPending_few": "{{count}} compatibili, verifica approfondita in sospeso",
+ "compatibilityPending_many": "{{count}} compatibili, verifica approfondita in sospeso",
+ "compatible_few": "{{count}} compatibili",
+ "compatible_many": "{{count}} compatibili",
+ "checking_few": "{{count}} in controllo",
+ "checking_many": "{{count}} in controllo",
+ "available_few": "{{count}} disponibili",
+ "available_many": "{{count}} disponibili",
+ "verified_few": "{{count}} verificati",
+ "verified_many": "{{count}} verificati"
+ },
+ "openProviderSettings": "Apri le impostazioni di {{provider}}",
+ "copied": "Copiato",
+ "copyDiagnostics": "Copia diagnostica",
+ "deepVerificationPending": "La verifica approfondita è ancora in esecuzione. I modelli OpenCode gratuiti possono richiedere circa 20 secondi.",
+ "progress": {
+ "checkingSelectedProviders": "Controllo dei provider selezionati in parallelo...",
+ "checkingProvider": "Controllo del provider {{provider}}...",
+ "checkingProviders": "Controllo dei provider {{providers}}..."
+ },
+ "failureHints": {
+ "openCodeAccessDenied": "Correggi i permessi della cartella o sposta il progetto in una cartella scrivibile dall'utente. L'esecuzione come amministratore è solo una soluzione temporanea.",
+ "openCodeBridgeNoOutput": "Riavvia l'app e il runtime OpenCode, quindi riprova. Se si ripete, copia la diagnostica.",
+ "workingDirectoryMissing": "Scegli una directory di lavoro esistente, quindi riapri questa finestra.",
+ "authenticationRequired": "Autentica il provider richiesto nella Claude CLI, quindi riapri questa finestra.",
+ "runtimeProviderNotConfigured": "Configura il runtime del provider selezionato, quindi riapri questa finestra.",
+ "openCodeRuntimeMissing": "Installa o riprova il runtime OpenCode dalla scheda di stato del provider, quindi riapri questa finestra.",
+ "openCodeAppMcpUnreachable": "Riprova l'avvio per aggiornare il bridge MCP dell'app OpenCode. Se si ripete, riavvia l'app e il runtime OpenCode.",
+ "cliBinaryMissing": "Assicurati che il binario della Claude CLI locale esista e possa essere avviato, quindi riapri questa finestra.",
+ "default": "Risolvi il problema qui sopra, quindi riapri questa finestra.",
+ "openCodeNodeModulesSymlinkPermission": "Esegui Agent Teams AI come amministratore, quindi riprova l'avvio."
+ }
+ },
+ "presentation": {
+ "awaitingPermission": "{{count}} membro del team in attesa di approvazione dei permessi",
+ "nameListWithMore": "{{names}}, +{{count}} altri",
+ "waitingForOpenCode": "In attesa di OpenCode: {{names}}",
+ "bootstrapStalled": "Bootstrap in stallo: {{names}}",
+ "bootstrapStalledWithOpenCodeWait": "{{stalled}}; In attesa di OpenCode: {{names}}",
+ "namedPendingDiagnostic": "{{label}}: {{names}}",
+ "countPendingDiagnostic": "{{count}} {{label}}",
+ "pendingLabels": {
+ "bootstrapStalled": "Bootstrap in stallo",
+ "shellOnly": "Solo shell",
+ "waitingForBootstrap": "In attesa del bootstrap",
+ "bootstrapUnconfirmed": "Bootstrap non confermato",
+ "awaitingPermission": "In attesa di permesso",
+ "waitingForRuntime": "In attesa del runtime",
+ "shellOnlyLower": "solo shell",
+ "waitingForBootstrapLower": "in attesa del bootstrap",
+ "bootstrapUnconfirmedLower": "bootstrap non confermato",
+ "awaitingPermissionLower": "in attesa di permesso",
+ "waitingForRuntimeLower": "in attesa del runtime"
+ },
+ "failed": {
+ "memberFailedToStart": "{{name}} non si è avviato",
+ "teammatesFailedToStart": "{{count}} membri del team non si sono avviati",
+ "teammatesFailedRatio": "{{count}}/{{total}} membri del team non si sono avviati"
+ },
+ "skipped": {
+ "memberSkipped": "{{name}} saltato per questo avvio",
+ "memberSkippedWithReason": "{{name}} saltato per questo avvio - {{reason}}",
+ "memberSkippedCompact": "{{name}} saltato",
+ "teammatesSkipped": "{{count}} membri del team saltati",
+ "teammatesSkippedList": "Membri del team saltati: {{list}}",
+ "teammatesSkippedRatio": "{{count}}/{{total}} membri del team saltati per questo avvio"
+ },
+ "joining": {
+ "teammatesStillJoining": "{{count}} membri del team si stanno ancora unendo",
+ "teammatesStillJoining_one": "{{count}} membro del team si sta ancora unendo",
+ "teammatesStillJoining_few": "{{count}} membri del team si stanno ancora unendo",
+ "teammatesStillJoining_many": "{{count}} membri del team si stanno ancora unendo",
+ "teammatesStillJoining_other": "{{count}} membri del team si stanno ancora unendo",
+ "teammatesConfirmedRatio": "{{count}}/{{total}} membri del team confermati"
+ },
+ "ready": {
+ "leadOnline": "Lead online",
+ "allTeammatesJoined": "Tutti i {{count}} membri del team si sono uniti",
+ "teamProvisionedLeadOnline": "Team sottoposto a provisioning - lead online",
+ "teamProvisionedAllJoined": "Team sottoposto a provisioning - tutti i {{count}} membri del team si sono uniti",
+ "teamProvisionedStillJoining": "Team sottoposto a provisioning - i membri del team si stanno ancora unendo",
+ "launchFinishedWithErrors": "Avvio terminato con errori - {{count}}/{{total}} membri del team non si sono avviati",
+ "launchContinuedSkipped": "Avvio proseguito - {{count}}/{{total}} membri del team saltati",
+ "teamLaunchedLeadOnline": "Team avviato - lead online",
+ "teamLaunchedAllJoined": "Team avviato - tutti i {{count}} membri del team si sono uniti"
+ },
+ "panel": {
+ "launchFailed": "Avvio non riuscito",
+ "launchDetails": "Dettagli di avvio",
+ "launchFinishedWithErrors": "Avvio terminato con errori",
+ "launchContinuedSkipped": "Avvio proseguito con membri del team saltati",
+ "coreTeamReady": "Team principale pronto",
+ "finishingLaunch": "Completamento dell'avvio",
+ "teamLaunched": "Team avviato",
+ "launchingTeam": "Avvio del team"
+ }
+ }
+ },
+ "liveRuntimeStatus": {
+ "title": "Stato del runtime dal vivo",
+ "description": "Heartbeat e stato di avvio di sola visualizzazione. I controlli del processo restano qui sotto.",
+ "source": "fonte: {{source}}",
+ "lane": "lane {{lane}}",
+ "diagnosticOnly": "Solo diagnostica",
+ "updated": "aggiornato {{value}}",
+ "states": {
+ "running": "In esecuzione",
+ "starting": "Avvio in corso",
+ "waiting": "In attesa",
+ "degraded": "Richiede attenzione",
+ "stopped": "Fermato",
+ "unknown": "Sconosciuto"
+ }
+ },
+ "taskLogs": {
+ "exact": {
+ "title": "Log esatti del task",
+ "loading": "Caricamento dei log esatti del task...",
+ "description": "Porzioni esatte del transcript renderizzate con gli stessi componenti del log di esecuzione usati nei Log.",
+ "emptyTitle": "Ancora nessun log esatto del task",
+ "emptyDescription": "I pacchetti di transcript esatti appariranno qui quando saranno disponibili metadati espliciti del transcript collegati al task.",
+ "summaryOnly": "solo riepilogo"
+ },
+ "executionSessions": {
+ "title": "Sessioni di esecuzione",
+ "online": "Online",
+ "updating": "Aggiornamento...",
+ "description": "Navigazione e anteprime del transcript legacy incentrate sulla sessione."
+ },
+ "stream": {
+ "title": "Stream del log del task"
+ }
+ },
+ "kanban": {
+ "taskCard": {
+ "cancelTask": "Annulla il task {{taskId}}",
+ "cancel": "Annulla",
+ "moveBackToTodoConfirm": "Riportare questo task in DA FARE e avvisare il team?",
+ "confirm": "Conferma",
+ "keep": "Mantieni",
+ "changesNeedAttention": "Le modifiche richiedono attenzione",
+ "changes": "Modifiche",
+ "deleteTask": "Elimina task",
+ "taskLogsActive": "Log del task attivi",
+ "newTaskLogsArriving": "Nuovi log del task in arrivo",
+ "awaitingUser": "In attesa dell'utente",
+ "awaitingLead": "In attesa del lead",
+ "blockedBy": "Bloccato da",
+ "blocks": "Blocca",
+ "start": "Avvia",
+ "complete": "Completa",
+ "approve": "Approva",
+ "requestReview": "Richiedi revisione",
+ "manualReview": "Revisione manuale",
+ "requestChanges": "Richiedi modifiche"
+ },
+ "filter": {
+ "title": "Filtra task",
+ "session": "Sessione",
+ "allSessions": "Tutte le sessioni",
+ "teammate": "Membro del team",
+ "unassigned": "(non assegnato)",
+ "column": "Colonna",
+ "clearAll": "Cancella tutto"
+ },
+ "board": {
+ "addTask": "Aggiungi task",
+ "noTasks": "Nessun task",
+ "showMore": "Mostra altri {{count}}",
+ "hiddenCount": "{{count}} nascosti",
+ "trash": "Cestino",
+ "gridView": "Vista griglia",
+ "columnsView": "Vista colonne"
+ },
+ "trash": {
+ "title": "Cestino",
+ "empty": "Nessun task eliminato",
+ "subject": "Oggetto",
+ "owner": "Proprietario",
+ "deleted": "Eliminato",
+ "unassigned": "Non assegnato",
+ "restoreTask": "Ripristina task",
+ "restore": "Ripristina",
+ "close": "Chiudi"
+ },
+ "sort": {
+ "title": "Ordina task",
+ "sortBy": "Ordina per",
+ "reset": "Reimposta",
+ "options": {
+ "updatedAt": {
+ "label": "Ultimo aggiornamento",
+ "description": "Aggiornati di recente per primi"
+ },
+ "createdAt": {
+ "label": "Creato",
+ "description": "Più recenti per primi"
+ },
+ "owner": {
+ "label": "Proprietario",
+ "description": "In ordine alfabetico per assegnatario"
+ },
+ "manual": {
+ "label": "Manuale",
+ "description": "Ordine drag-and-drop"
+ }
+ }
+ },
+ "search": {
+ "clearSearch": "Cancella ricerca",
+ "tasks": "Task",
+ "createdAgo": "creato {{time}}",
+ "updatedAgo": "aggiornato {{time}}",
+ "placeholder": "Cerca task... (#id o testo)"
+ },
+ "grid": {
+ "addTask": "Aggiungi task",
+ "noTasks": "Nessun task"
+ },
+ "title": "Kanban",
+ "columns": {
+ "todo": "DA FARE",
+ "inProgress": "IN CORSO",
+ "review": "REVISIONE",
+ "done": "FATTO",
+ "approved": "APPROVATO"
+ }
+ },
+ "worktreeGitReadiness": {
+ "checking": "Controllo dello stato del repository Git per i worktree dei membri del team...",
+ "ready": "I worktree Git sono pronti.",
+ "readyOnBranch": "I worktree Git sono pronti sul branch {{branch}}.",
+ "needsSetup": "L'isolamento worktree richiede la configurazione di Git",
+ "initialCommitNotice": "L'azione di commit iniziale aggiunge in stage ed esegue il commit di tutti i file attuali con il messaggio",
+ "initializeRepository": "Inizializza repository Git",
+ "createInitialCommit": "Crea commit iniziale",
+ "initialCommitMessage": "chore: initial commit"
+ },
+ "toolApproval": {
+ "settings": "Impostazioni",
+ "autoAllowAllTools": "Consenti automaticamente tutti gli strumenti",
+ "autoAllowFileEdits": "Consenti automaticamente le modifiche ai file (Edit, Write, NotebookEdit)",
+ "autoAllowSafeCommands": "Consenti automaticamente i comandi sicuri (git, pnpm, npm, ls...)",
+ "onTimeout": "Al timeout:",
+ "after": "dopo",
+ "secondsShort": "sec",
+ "timeoutActions": {
+ "wait": "Attendi all'infinito",
+ "allow": "Consenti",
+ "deny": "Nega"
+ },
+ "submit": "Invia",
+ "allow": "Consenti",
+ "deny": "Nega",
+ "allowAll": "Consenti tutto",
+ "pendingCount": "{{count}} in attesa",
+ "autoActionIn": "Auto-{{action}} tra {{time}}",
+ "diff": {
+ "previewChanges": "Anteprima delle modifiche",
+ "readingFile": "Lettura del file...",
+ "binaryFile": "File binario - impossibile visualizzare l'anteprima",
+ "truncated": "File troncato a 2MB - il diff potrebbe essere incompleto",
+ "newFile": "Nuovo file"
+ }
+ },
+ "memberWorkSync": {
+ "details": {
+ "title": "Sincronizzazione del lavoro del membro",
+ "actionableItems": "Elementi su cui agire",
+ "fingerprint": "Fingerprint",
+ "report": "Report",
+ "none": "nessuno",
+ "shadowWouldNudge": "Lo shadow solleciterebbe",
+ "yes": "sì",
+ "no": "no",
+ "moreActionableItems": "{{count}} altri elementi su cui agire",
+ "diagnostics": "Diagnostica: {{diagnostics}}"
+ },
+ "title": "Sincronizzazione del lavoro del membro",
+ "loadingDiagnostics": "Caricamento della diagnostica di sincronizzazione del lavoro del membro.",
+ "diagnosticsUnavailable": "La diagnostica di sincronizzazione del lavoro del membro non è disponibile."
+ },
+ "advancedCli": {
+ "title": "Avanzate",
+ "useWorktree": "Usa worktree",
+ "recent": "Recenti",
+ "commandPreview": "Anteprima del comando",
+ "customArguments": "Argomenti personalizzati",
+ "validate": "Convalida",
+ "validation": {
+ "allFlagsValid": "Tutti i flag sono validi",
+ "unknownFlags": "Sconosciuti: {{flags}}",
+ "protectedFlags": "Protetti: {{flags}}",
+ "failed": "Convalida non riuscita"
+ },
+ "placeholders": {
+ "worktreeName": "worktree-name"
+ }
+ },
+ "processes": {
+ "ago": "{{time}} fa",
+ "stoppedAgo": "fermato {{time}} fa",
+ "running": "In esecuzione",
+ "stopped": "Fermato",
+ "stopProcess": "Ferma processo (SIGTERM)",
+ "kill": "Termina",
+ "openInBrowser": "Apri nel browser",
+ "open": "Apri",
+ "pid": "PID{{pid}}",
+ "title": "Processi CLI"
+ },
+ "taskActivity": {
+ "loadingDetails": "Caricamento dei dettagli dell'attività...",
+ "contextUnavailable": "Il contesto dettagliato del transcript non è più disponibile per questa attività.",
+ "loading": "Caricamento dell'attività del task...",
+ "lowSignalOnly": "Ancora nessuna attività chiave del task trovata. I dettagli di esecuzione di basso livello sono disponibili qui sotto nello Stream del log del task.",
+ "empty": "Ancora nessuna attività esplicita del task trovata nei transcript disponibili. I log di sessione più vecchi o euristici potrebbero essere ancora disponibili qui sotto nelle Sessioni di esecuzione.",
+ "title": "Attività del task",
+ "description": "Attività chiave esplicita del runtime collegata a questo task dai metadati del transcript."
+ },
+ "sendMessage": {
+ "title": "Invia messaggio",
+ "description": "Invia un messaggio diretto a un membro del team.",
+ "recipientLabel": "Destinatario",
+ "selectMemberPlaceholder": "Seleziona membro...",
+ "messageLabel": "Messaggio",
+ "placeholder": "Scrivi il tuo messaggio... (Invio per inviare)",
+ "send": "Invia",
+ "sending": "Invio in corso...",
+ "charsLeft": "{{count}} caratteri rimasti",
+ "saved": "Salvato",
+ "attachments": {
+ "teamOnlineRequired": "Il team deve essere online per allegare file",
+ "recipientUnsupported": "I file possono essere inviati al lead del team o ai membri del team OpenCode",
+ "openCodeOnlineRequired": "Il team deve essere online per allegare file ai membri del team OpenCode",
+ "disabledHint": "Gli allegati ai file sono supportati per il lead del team online e i membri del team OpenCode online. Rimuovi gli allegati o cambia destinatario.",
+ "attachFiles": "Allega file (incolla o trascina)",
+ "unavailable": "Gli allegati non sono disponibili"
+ },
+ "quote": {
+ "remove": "Rimuovi citazione",
+ "replyingTo": "In risposta a"
+ }
+ },
+ "taskComments": {
+ "cancelReply": "Annulla risposta",
+ "replyingTo": "In risposta a",
+ "placeholder": "Aggiungi un commento... (Invio per inviare)",
+ "attachFile": "Allega file (o incolla)",
+ "voiceToText": "Da voce a testo",
+ "comment": "Commento",
+ "charsLeft": "{{count}} caratteri rimasti",
+ "saved": "Salvato",
+ "awaitingReplyFrom": "In attesa di risposta da",
+ "or": "oppure"
+ },
+ "taskAttachments": {
+ "dropImageHere": "Rilascia l'immagine qui",
+ "attachImage": "Allega immagine",
+ "pasteOrDragDrop": "o incolla / trascina",
+ "fromOriginalMessage": "Dal messaggio originale",
+ "dropFilesHere": "Rilascia i file qui",
+ "loading": "Caricamento degli allegati..."
+ },
+ "permissions": {
+ "autoApproveAllTools": "Approva automaticamente tutti gli strumenti",
+ "autonomousModeDescription": "Modalità autonoma: gli strumenti del team vengono eseguiti senza conferma. Sii cauto con il codice non attendibile.",
+ "manualModeDescription": "Modalità manuale: approverai o negherai ogni chiamata di strumento in tempo reale."
+ },
+ "memberLogStream": {
+ "tabs": {
+ "execution": "Esecuzione",
+ "process": "Processo"
+ },
+ "filters": {
+ "all": "Tutti"
+ },
+ "logs": {
+ "title": "Log",
+ "loading": "Caricamento dello stream dei log del membro...",
+ "emptyTitle": "Ancora nessuna voce dello stream dei log trovata per questo membro.",
+ "emptyDescription": "I log del transcript o del runtime con ambito al membro appariranno qui quando disponibili."
+ }
+ },
+ "reviewDialog": {
+ "placeholder": "Descrivi cosa deve cambiare... (Invio per inviare)",
+ "submit": "Invia",
+ "charsLeft": "{{count}} caratteri rimasti",
+ "saved": "Salvato",
+ "title": "Richiedi modifiche"
+ },
+ "dialogs": {
+ "actions": {
+ "openDashboard": "Apri dashboard",
+ "openTeam": "Apri team",
+ "cancel": "Annulla"
+ },
+ "membersJson": {
+ "hide": "Nascondi JSON"
+ },
+ "optional": {
+ "badge": "Facoltativo"
+ }
+ },
+ "runningTeams": {
+ "title": "Team in esecuzione",
+ "status": {
+ "active": "Attivo",
+ "provisioning": "Avvio in corso",
+ "idle": "In esecuzione"
+ },
+ "noProject": "Nessun progetto"
+ },
+ "layout": {
+ "maxPanesReached": "Numero massimo di {{count}} riquadri raggiunto"
+ },
+ "codexReconnect": {
+ "description": "La tua sessione Codex sembra obsoleta. Riconnettiti per continuare.",
+ "useCode": "Usa il codice",
+ "generating": "Generazione in corso...",
+ "openLogin": "Apri accesso",
+ "generateLink": "Genera link"
+ },
+ "effortLevel": {
+ "label": "Livello di sforzo (facoltativo)",
+ "maxDescription": "Max offre al modello il massimo tempo di ragionamento per i task difficili."
+ },
+ "contextLimit": {
+ "limitTo200k": "Limita il contesto a 200K token",
+ "always200k": "(sempre 200K per questo modello)",
+ "tooltipContent": "Mantiene gli avvii entro una finestra di contesto da 200K token quando supportato.",
+ "tooltipTitle": "Limite di contesto"
+ },
+ "roleSelect": {
+ "noRole": "Nessun ruolo",
+ "customRole": "Ruolo personalizzato...",
+ "searchPlaceholder": "Cerca ruoli...",
+ "empty": "Nessun ruolo trovato.",
+ "reservedRole": "Questo ruolo è riservato",
+ "emptyCustomRole": "Il ruolo non può essere vuoto"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ja/common.json b/src/features/localization/renderer/locales/ja/common.json
index bcda1c8e..9d416fd4 100644
--- a/src/features/localization/renderer/locales/ja/common.json
+++ b/src/features/localization/renderer/locales/ja/common.json
@@ -62,21 +62,36 @@
"locales": {
"emptyMessage": "言語が見つかりません。",
"names": {
- "en": "英語",
- "ru": "ロシア語",
- "zh": "中国語",
- "ja": "日本語",
- "ko": "韓国語",
- "es": "スペイン語",
- "hi": "ヒンディー語",
- "pt": "ポルトガル語",
- "fr": "フランス語",
"ar": "アラビア語",
"bn": "ベンガル語",
- "ur": "ウルドゥー語",
- "id": "インドネシア語",
"de": "ドイツ語",
- "system": "システム"
+ "en": "英語",
+ "es": "スペイン語",
+ "fa": "ペルシア語",
+ "fil": "フィリピン語",
+ "fr": "フランス語",
+ "hi": "ヒンディー語",
+ "id": "インドネシア語",
+ "it": "イタリア語",
+ "ja": "日本語",
+ "ko": "韓国語",
+ "mr": "マラーティー語",
+ "ms": "マレー語",
+ "nl": "オランダ語",
+ "pl": "ポーランド語",
+ "pt": "ポルトガル語",
+ "ro": "ルーマニア語",
+ "ru": "ロシア語",
+ "sw": "スワヒリ語",
+ "system": "システム",
+ "ta": "タミル語",
+ "te": "テルグ語",
+ "th": "タイ語",
+ "tr": "トルコ語",
+ "uk": "ウクライナ語",
+ "ur": "ウルドゥー語",
+ "vi": "ベトナム語",
+ "zh": "中国語"
},
"searchPlaceholder": "言語を検索...",
"selectPlaceholder": "アプリの言語を選択...",
diff --git a/src/features/localization/renderer/locales/ja/settings.json b/src/features/localization/renderer/locales/ja/settings.json
index 3a03bee1..bd289d71 100644
--- a/src/features/localization/renderer/locales/ja/settings.json
+++ b/src/features/localization/renderer/locales/ja/settings.json
@@ -68,12 +68,12 @@
"useInTeamPicker": "チームピッカーでの使用",
"testInProgress": "モデルテストはすでに実行中です。",
"validationContextRequired": "Test と Set default を有効にするには、上で validation context を選択してください。team picker への保存は新しいチーム用の route だけを保存します。",
+ "actionsUnavailable": "操作は一時的に利用できません。",
"defaultSaveInProgress": "OpenCode default を保存しています。",
"routeUnavailableAuth": "この provider は、このモデルを使用する前に認証が必要です。",
"routeUnavailableFailed": "この model route は前回の execution test に失敗しました。",
- "routeUnavailableUnknown": "このモデルは現在の OpenCode default ですが、まだ live catalog では利用できません。",
- "actionsUnavailable": "操作は一時的に利用できません。",
- "routeUnavailableGeneric": "この model route は現在使用できません。"
+ "routeUnavailableGeneric": "この model route は現在使用できません。",
+ "routeUnavailableUnknown": "このモデルは現在の OpenCode default ですが、まだ live catalog では利用できません。"
},
"providers": {
"catalog": "OpenCode プロバイダーカタログ",
diff --git a/src/features/localization/renderer/locales/ja/team.json b/src/features/localization/renderer/locales/ja/team.json
index 00f6151a..d4fbfa12 100644
--- a/src/features/localization/renderer/locales/ja/team.json
+++ b/src/features/localization/renderer/locales/ja/team.json
@@ -1496,7 +1496,7 @@
},
"status": {
"reusedCrossTeamRequest": "最近のクロスチームリクエストを再利用",
- "teamOffline": "オフラインチーム"
+ "teamOffline": "オフライン"
},
"revision": {
"editing": "前のメッセージを編集中",
diff --git a/src/features/localization/renderer/locales/ko/common.json b/src/features/localization/renderer/locales/ko/common.json
index b8824c6b..2f85ab6b 100644
--- a/src/features/localization/renderer/locales/ko/common.json
+++ b/src/features/localization/renderer/locales/ko/common.json
@@ -62,21 +62,36 @@
"locales": {
"emptyMessage": "언어를 찾을 수 없습니다.",
"names": {
- "en": "영어",
- "ru": "러시아어",
- "zh": "중국어",
- "ja": "일본어",
- "ko": "한국어",
- "es": "스페인어",
- "hi": "힌디어",
- "pt": "포르투갈어",
- "fr": "프랑스어",
"ar": "아랍어",
"bn": "벵골어",
- "ur": "우르두어",
- "id": "인도네시아어",
"de": "독일어",
- "system": "시스템"
+ "en": "영어",
+ "es": "스페인어",
+ "fa": "페르시아어",
+ "fil": "필리핀어",
+ "fr": "프랑스어",
+ "hi": "힌디어",
+ "id": "인도네시아어",
+ "it": "이탈리아어",
+ "ja": "일본어",
+ "ko": "한국어",
+ "mr": "마라티어",
+ "ms": "말레이어",
+ "nl": "네덜란드어",
+ "pl": "폴란드어",
+ "pt": "포르투갈어",
+ "ro": "루마니아어",
+ "ru": "러시아어",
+ "sw": "스와힐리어",
+ "system": "시스템",
+ "ta": "타밀어",
+ "te": "텔루구어",
+ "th": "태국어",
+ "tr": "터키어",
+ "uk": "우크라이나어",
+ "ur": "우르두어",
+ "vi": "베트남어",
+ "zh": "중국어"
},
"searchPlaceholder": "언어 검색...",
"selectPlaceholder": "앱 언어 선택...",
diff --git a/src/features/localization/renderer/locales/ko/settings.json b/src/features/localization/renderer/locales/ko/settings.json
index 3d5ccb05..e5d72dfb 100644
--- a/src/features/localization/renderer/locales/ko/settings.json
+++ b/src/features/localization/renderer/locales/ko/settings.json
@@ -68,12 +68,12 @@
"useInTeamPicker": "팀 피커에서 사용",
"testInProgress": "모델 테스트가 이미 실행 중입니다.",
"validationContextRequired": "Test와 Set default를 활성화하려면 위에서 validation context를 선택하세요. team picker 저장은 새 팀용 route만 저장합니다.",
+ "actionsUnavailable": "작업을 일시적으로 사용할 수 없습니다.",
"defaultSaveInProgress": "OpenCode default를 저장하는 중입니다.",
"routeUnavailableAuth": "이 provider는 이 모델을 사용하기 전에 인증이 필요합니다.",
"routeUnavailableFailed": "이 model route는 마지막 execution test에 실패했습니다.",
- "routeUnavailableUnknown": "이 모델은 현재 OpenCode default이지만 아직 live catalog에서 사용할 수 없습니다.",
- "actionsUnavailable": "작업을 일시적으로 사용할 수 없습니다.",
- "routeUnavailableGeneric": "이 model route는 지금 사용할 수 없습니다."
+ "routeUnavailableGeneric": "이 model route는 지금 사용할 수 없습니다.",
+ "routeUnavailableUnknown": "이 모델은 현재 OpenCode default이지만 아직 live catalog에서 사용할 수 없습니다."
},
"providers": {
"catalog": "OpenCode 공급자 카탈로그",
diff --git a/src/features/localization/renderer/locales/ko/team.json b/src/features/localization/renderer/locales/ko/team.json
index 513c8568..d7deafe2 100644
--- a/src/features/localization/renderer/locales/ko/team.json
+++ b/src/features/localization/renderer/locales/ko/team.json
@@ -1496,7 +1496,7 @@
},
"status": {
"reusedCrossTeamRequest": "최근 Cross-team 요청 사용",
- "teamOffline": "팀 오프라인"
+ "teamOffline": "오프라인"
},
"revision": {
"editing": "이전 메시지 편집 중",
diff --git a/src/features/localization/renderer/locales/mr/common.json b/src/features/localization/renderer/locales/mr/common.json
new file mode 100644
index 00000000..c960ae87
--- /dev/null
+++ b/src/features/localization/renderer/locales/mr/common.json
@@ -0,0 +1,927 @@
+{
+ "actions": {
+ "cancel": "रद्द करा",
+ "close": "बंद करा",
+ "copied": "कॉपी केले",
+ "copyUrl": "URL कॉपी करा",
+ "open": "उघडा",
+ "reveal": "दाखवा",
+ "retry": "पुन्हा प्रयत्न करा",
+ "save": "जतन करा",
+ "showLess": "कमी दाखवा",
+ "showMore": "अधिक दाखवा",
+ "refresh": "रिफ्रेश करा",
+ "reset": "रीसेट करा",
+ "copyToClipboard": "क्लिपबोर्डवर कॉपी करा",
+ "moreActions": "अधिक कृती",
+ "closeDialog": "डायलॉग बंद करा",
+ "goToDashboard": "डॅशबोर्डवर जा",
+ "or": "किंवा",
+ "hide": "लपवा",
+ "resetSelection": "निवड रीसेट करा"
+ },
+ "code": {
+ "line": "ओळ {{line}}",
+ "lines": "ओळी {{from}}-{{to}}",
+ "moreLines": "({{count}} अधिक ओळी...)",
+ "moreLines_few": "({{count}} अधिक ओळी...)",
+ "moreLines_many": "({{count}} अधिक ओळी...)",
+ "moreLines_one": "({{count}} अधिक ओळ...)",
+ "moreLines_other": "({{count}} अधिक ओळी...)",
+ "code": "कोड",
+ "preview": "पूर्वावलोकन",
+ "markdownPreview": "Markdown पूर्वावलोकन",
+ "linesParenthesized": "(ओळी {{from}}-{{to}})",
+ "mermaidSyntaxError": "Mermaid सिंटॅक्स त्रुटी"
+ },
+ "contextBadge": {
+ "badge": "संदर्भ",
+ "breakdown": {
+ "text": "मजकूर",
+ "thinking": "विचार"
+ },
+ "detailsAria": "संदर्भ इंजेक्शन तपशील",
+ "sectionSummary": "{{title}} ({{count}}) ~{{tokens}} टोकन्स",
+ "sections": {
+ "claudeMdFiles": "CLAUDE.md फाइल्स",
+ "mentionedFiles": "उल्लेखित फाइल्स",
+ "taskCoordination": "टास्क समन्वय",
+ "thinkingText": "विचार + मजकूर",
+ "toolOutputs": "टूल आउटपुट्स",
+ "userMessages": "वापरकर्ता संदेश"
+ },
+ "title": "या वळणात इंजेक्ट केलेला नवीन संदर्भ",
+ "tokenCount": "~{{tokens}} टोकन्स",
+ "totalNewTokens": "एकूण नवीन टोकन्स",
+ "turn": "वळण {{turn}}",
+ "sectionSummary_few": "{{title}} ({{count}}) ~{{tokens}} टोकन्स",
+ "sectionSummary_many": "{{title}} ({{count}}) ~{{tokens}} टोकन्स",
+ "sectionSummary_one": "{{title}} ({{count}}) ~{{tokens}} टोकन्स",
+ "sectionSummary_other": "{{title}} ({{count}}) ~{{tokens}} टोकन्स"
+ },
+ "locales": {
+ "emptyMessage": "कोणतीही भाषा सापडली नाही.",
+ "names": {
+ "ar": "अरबी",
+ "bn": "बंगाली",
+ "de": "जर्मन",
+ "en": "इंग्रजी",
+ "es": "स्पॅनिश",
+ "fa": "पर्शियन",
+ "fil": "फिलिपिनो",
+ "fr": "फ्रेंच",
+ "hi": "हिंदी",
+ "id": "इंडोनेशियन",
+ "it": "इटालियन",
+ "ja": "जपानी",
+ "ko": "कोरियन",
+ "mr": "मराठी",
+ "ms": "मलय",
+ "nl": "डच",
+ "pl": "पोलिश",
+ "pt": "पोर्तुगीज",
+ "ro": "रोमानियन",
+ "ru": "रशियन",
+ "sw": "स्वाहिली",
+ "system": "सिस्टम",
+ "ta": "तमिळ",
+ "te": "तेलुगू",
+ "th": "थाई",
+ "tr": "तुर्की",
+ "uk": "युक्रेनियन",
+ "ur": "उर्दू",
+ "vi": "व्हिएतनामी",
+ "zh": "चीनी"
+ },
+ "searchPlaceholder": "भाषा शोधा...",
+ "selectPlaceholder": "अॅप भाषा निवडा...",
+ "systemWithResolved": "सिस्टम - {{locale}}"
+ },
+ "members": {
+ "emptyMessage": "कोणतेही सदस्य सापडले नाहीत.",
+ "searchPlaceholder": "सदस्य शोधा...",
+ "unassigned": "नियुक्त नाही",
+ "teammateFallback": "सहकारी"
+ },
+ "providerRuntime": {
+ "codex": {
+ "install": {
+ "checking": "तपासत आहे",
+ "downloading": "डाउनलोड करत आहे",
+ "installCli": "Codex CLI इन्स्टॉल करा",
+ "installing": "इन्स्टॉल करत आहे",
+ "retryInstall": "इन्स्टॉल पुन्हा करा"
+ }
+ }
+ },
+ "search": {
+ "noMatchingSuggestions": "जुळणारी कोणतीही सूचना नाही",
+ "searching": "शोधत आहे...",
+ "searchingFiles": "फाइल्स शोधत आहे...",
+ "findInConversation": "संभाषणात शोधा...",
+ "resultCount": "{{total}} पैकी {{current}}",
+ "resultCountCapped": "{{total}}+ पैकी {{current}}",
+ "noResults": "कोणतेही परिणाम नाहीत",
+ "previousResultShortcut": "मागील परिणाम (Shift+Enter)",
+ "nextResultShortcut": "पुढील परिणाम (Enter)",
+ "closeShortcut": "बंद करा (Esc)",
+ "nothingFound": "काहीही सापडले नाही",
+ "placeholder": "शोधा..."
+ },
+ "schedules": {
+ "actions": {
+ "addSchedule": "वेळापत्रक जोडा",
+ "clearFilters": "फिल्टर्स साफ करा",
+ "createSchedule": "वेळापत्रक तयार करा",
+ "delete": "हटवा",
+ "edit": "संपादित करा",
+ "pause": "थांबवा",
+ "resume": "पुन्हा सुरू करा",
+ "runNow": "आता चालवा"
+ },
+ "empty": {
+ "description": "cron अभिव्यक्तींसह Claude टास्क अंमलबजावणी स्वयंचलित करण्यासाठी कोणत्याही टीमवर वेळापत्रक तयार करा. सर्व टीम्सची वेळापत्रके येथे दिसतील.",
+ "noMatches": "सध्याच्या फिल्टर्सशी कोणतेही वेळापत्रक जुळत नाही",
+ "title": "कोणतेही नियोजित टास्क नाहीत"
+ },
+ "filters": {
+ "allTeams": "सर्व टीम्स"
+ },
+ "item": {
+ "loadingRunHistory": "रन इतिहास लोड होत आहे...",
+ "nextRun": "पुढील: {{value}}",
+ "noRunsYet": "अद्याप कोणताही रन नाही"
+ },
+ "loading": "वेळापत्रके लोड होत आहेत...",
+ "searchPlaceholder": "वेळापत्रके शोधा...",
+ "status": {
+ "active": "सक्रिय",
+ "all": "सर्व",
+ "disabled": "अक्षम",
+ "paused": "थांबवले"
+ },
+ "title": "वेळापत्रके"
+ },
+ "sessions": {
+ "actions": {
+ "hide": "लपवा",
+ "pin": "पिन करा",
+ "unhide": "दाखवा"
+ },
+ "empty": {
+ "noMatchingSessions": "जुळणारी कोणतीही सत्रे नाहीत",
+ "noMatchingSessionsDescription": "या प्रकल्पात अद्याप जुळणारी कोणतीही सत्रे नाहीत.",
+ "noMatchingSessionsFiltered": "दुसरी क्वेरी वापरून पाहा किंवा प्रोव्हायडर फिल्टर रीसेट करा.",
+ "noSessions": "कोणतीही सत्रे सापडली नाहीत",
+ "noSessionsDescription": "या प्रकल्पात अद्याप कोणतीही सत्रे नाहीत",
+ "selectProject": "सत्रे पाहण्यासाठी एक प्रकल्प निवडा"
+ },
+ "errors": {
+ "loading": "सत्रे लोड करताना त्रुटी"
+ },
+ "loadedMatchingMore": "आतापर्यंत {{count}} जुळणारी सत्रे लोड झाली - अधिक लोड करण्यासाठी खाली स्क्रोल करा.",
+ "loadingMore": "अधिक सत्रे लोड होत आहेत...",
+ "pinned": "पिन केले",
+ "scrollToLoadMore": "अधिक लोड करण्यासाठी स्क्रोल करा",
+ "search": {
+ "clear": "सत्र शोध साफ करा",
+ "placeholder": "सत्रे शोधा..."
+ },
+ "selection": {
+ "cancel": "निवड रद्द करा",
+ "exitMode": "निवड मोडमधून बाहेर पडा",
+ "hideSelected": "निवडलेली सत्रे लपवा",
+ "pinSelected": "निवडलेली सत्रे पिन करा",
+ "selectSessions": "सत्रे निवडा",
+ "selected": "{{count}} निवडले",
+ "unhideSelected": "निवडलेली सत्रे दाखवा",
+ "selected_few": "{{count}} निवडले",
+ "selected_many": "{{count}} निवडले",
+ "selected_one": "{{count}} निवडले",
+ "selected_other": "{{count}} निवडले"
+ },
+ "sort": {
+ "byContext": "संदर्भानुसार",
+ "byContextTooltip": "संदर्भ वापरानुसार क्रमवारी लावा",
+ "byRecentTooltip": "अलीकडीलनुसार क्रमवारी लावा",
+ "contextLoadedOnly": "संदर्भ क्रमवारी फक्त लोड केलेल्या सत्रांना क्रमवारी देते."
+ },
+ "title": "सत्रे",
+ "visibility": {
+ "hideHidden": "लपवलेली सत्रे लपवा",
+ "showHidden": "लपवलेली सत्रे दाखवा"
+ },
+ "worktree": {
+ "switch": "Worktree बदला"
+ },
+ "loadedMatchingMore_few": "आतापर्यंत {{count}} जुळणारी सत्रे लोड झाली - अधिक लोड करण्यासाठी खाली स्क्रोल करा.",
+ "loadedMatchingMore_many": "आतापर्यंत {{count}} जुळणारी सत्रे लोड झाली - अधिक लोड करण्यासाठी खाली स्क्रोल करा.",
+ "loadedMatchingMore_one": "आतापर्यंत {{count}} जुळणारे सत्र लोड झाले - अधिक लोड करण्यासाठी खाली स्क्रोल करा.",
+ "loadedMatchingMore_other": "आतापर्यंत {{count}} जुळणारी सत्रे लोड झाली - अधिक लोड करण्यासाठी खाली स्क्रोल करा.",
+ "failedToLoad": "सत्र लोड करणे अयशस्वी",
+ "loading": "सत्र लोड होत आहे...",
+ "filter": {
+ "title": "सत्रे फिल्टर करा"
+ },
+ "count": "{{count}} सत्रे",
+ "count_one": "{{count}} सत्र",
+ "count_other": "{{count}} सत्रे",
+ "count_few": "{{count}} सत्रे",
+ "count_many": "{{count}} सत्रे",
+ "inProgress": "सत्र प्रगतीपथावर आहे..."
+ },
+ "states": {
+ "loading": "लोड होत आहे...",
+ "offline": "ऑफलाइन",
+ "online": "ऑनलाइन",
+ "unknown": "अज्ञात",
+ "error": "त्रुटी"
+ },
+ "markdown": {
+ "imageFallback": "[इमेज: {{label}}]",
+ "largeContentNotice": "मजकूर खूप मोठा आहे ({{count}} अक्षरे). UI प्रतिसादक्षम ठेवण्यासाठी कच्चे पूर्वावलोकन दाखवत आहे.",
+ "largeContentTitle": "UI गोठू नये म्हणून मोठा मजकूर कच्चा दाखवला जातो",
+ "raw": "कच्चा",
+ "rawPreview": "कच्चे पूर्वावलोकन",
+ "renderMarkdown": "markdown रेंडर करा",
+ "showAll": "सर्व दाखवा",
+ "showMore": "अधिक दाखवा",
+ "showRaw": "कच्चा दाखवा",
+ "showingChars": "{{total}} पैकी {{shown}} अक्षरे दाखवत आहे",
+ "largeContentNotice_few": "मजकूर खूप मोठा आहे ({{count}} अक्षरे). UI प्रतिसादक्षम ठेवण्यासाठी कच्चे पूर्वावलोकन दाखवत आहे.",
+ "largeContentNotice_many": "मजकूर खूप मोठा आहे ({{count}} अक्षरे). UI प्रतिसादक्षम ठेवण्यासाठी कच्चे पूर्वावलोकन दाखवत आहे.",
+ "largeContentNotice_one": "मजकूर खूप मोठा आहे ({{count}} अक्षर). UI प्रतिसादक्षम ठेवण्यासाठी कच्चे पूर्वावलोकन दाखवत आहे.",
+ "largeContentNotice_other": "मजकूर खूप मोठा आहे ({{count}} अक्षरे). UI प्रतिसादक्षम ठेवण्यासाठी कच्चे पूर्वावलोकन दाखवत आहे."
+ },
+ "terminal": {
+ "checkOutputForDetails": "तपशीलांसाठी वरील टर्मिनल आउटपुट तपासा",
+ "closingInSeconds": "{{count}}से मध्ये बंद होत आहे...",
+ "closingInSeconds_few": "{{count}}से मध्ये बंद होत आहे...",
+ "closingInSeconds_many": "{{count}}से मध्ये बंद होत आहे...",
+ "closingInSeconds_one": "{{count}}से मध्ये बंद होत आहे...",
+ "closingInSeconds_other": "{{count}}से मध्ये बंद होत आहे...",
+ "completedSuccessfully": "यशस्वीरित्या पूर्ण झाले",
+ "exitCode": "(एक्झिट कोड {{code}})",
+ "processFailed": "प्रोसेस अयशस्वी",
+ "title": "टर्मिनल"
+ },
+ "tokens": {
+ "accumulatedWithoutDuplication": "संपूर्ण सत्रात डुप्लिकेशनशिवाय जमा झाले",
+ "cacheRead": "कॅश रीड",
+ "cacheWrite": "कॅश राइट",
+ "costUsd": "खर्च (USD)",
+ "inputTokens": "इनपुट टोकन्स",
+ "model": "मॉडेल",
+ "outputTokens": "आउटपुट टोकन्स",
+ "phase": "टप्पा {{phase}}/{{total}}",
+ "promptInputShare": "प्रॉम्प्ट इनपुटच्या {{percent}}%",
+ "taskCoordination": "टास्क समन्वय",
+ "thinkingText": "विचार + मजकूर",
+ "toolOutputs": "टूल आउटपुट्स",
+ "total": "एकूण",
+ "userMessages": "वापरकर्ता संदेश",
+ "visibleContext": "दृश्यमान संदर्भ",
+ "includesClaudeMd": "CLAUDE.md ×{{count}} समावेश",
+ "claudeMd": "CLAUDE.md",
+ "mentionedFiles": "@files",
+ "percentValue": "({{percent}}%)",
+ "approxTokens": "~{{tokens}} टोकन्स",
+ "approxTokensParenthesized": "(~{{tokens}})"
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "टीम कॉपी करा",
+ "createTeam": "टीम तयार करा",
+ "deleteForever": "कायमचे हटवा",
+ "deletePermanently": "कायमस्वरूपी हटवा",
+ "deleteTeam": "टीम हटवा",
+ "launching": "सुरू करत आहे...",
+ "launchTeam": "टीम सुरू करा",
+ "relaunchTeam": "टीम पुन्हा सुरू करा",
+ "restore": "पुनर्संचयित करा",
+ "restoreTeam": "टीम पुनर्संचयित करा",
+ "retry": "पुन्हा प्रयत्न करा",
+ "stopTeam": "टीम थांबवा",
+ "stopping": "थांबवत आहे..."
+ },
+ "status": {
+ "active": "सक्रिय",
+ "deleted": "हटवले",
+ "launching": "सुरू करत आहे...",
+ "offline": "ऑफलाइन",
+ "partialFailure": "सुरू होणे मध्येच अयशस्वी",
+ "partialPending": "बूटस्ट्रॅप प्रलंबित",
+ "partialSkipped": "सुरू होताना सदस्य वगळला",
+ "running": "चालू आहे"
+ },
+ "partial": {
+ "pending": "शेवटचे सुरू होणे अजूनही समन्वयित होत आहे.",
+ "skipped": "शेवटच्या सुरू होण्याने सहकारी वगळले आहेत.",
+ "skippedWithCount": "शेवटच्या सुरू होण्याने {{count}}/{{expected}} सहकारी वगळला.",
+ "skippedWithCount_few": "शेवटच्या सुरू होण्याने {{count}}/{{expected}} सहकारी वगळले.",
+ "skippedWithCount_many": "शेवटच्या सुरू होण्याने {{count}}/{{expected}} सहकारी वगळले.",
+ "skippedWithCount_one": "शेवटच्या सुरू होण्याने {{count}}/{{expected}} सहकारी वगळला.",
+ "skippedWithCount_other": "शेवटच्या सुरू होण्याने {{count}}/{{expected}} सहकारी वगळले.",
+ "stopped": "सर्व सहकारी सामील होण्यापूर्वी शेवटचे सुरू होणे थांबले.",
+ "stoppedWithCount": "{{count}}/{{expected}} सहकारी सामील होण्यापूर्वी शेवटचे सुरू होणे थांबले.",
+ "stoppedWithCount_few": "{{count}}/{{expected}} सहकारी सामील होण्यापूर्वी शेवटचे सुरू होणे थांबले.",
+ "stoppedWithCount_many": "{{count}}/{{expected}} सहकारी सामील होण्यापूर्वी शेवटचे सुरू होणे थांबले.",
+ "stoppedWithCount_one": "{{count}}/{{expected}} सहकारी सामील होण्यापूर्वी शेवटचे सुरू होणे थांबले.",
+ "stoppedWithCount_other": "{{count}}/{{expected}} सहकारी सामील होण्यापूर्वी शेवटचे सुरू होणे थांबले."
+ },
+ "noDescription": "कोणतेही वर्णन नाही",
+ "solo": "एकल",
+ "membersCount": "सदस्य: {{count}}",
+ "membersCount_few": "सदस्य: {{count}}",
+ "membersCount_many": "सदस्य: {{count}}",
+ "membersCount_one": "सदस्य: {{count}}",
+ "membersCount_other": "सदस्य: {{count}}",
+ "all": "सर्व",
+ "moreCount": "+{{count}} अधिक",
+ "moreCount_one": "+{{count}} अधिक",
+ "moreCount_other": "+{{count}} अधिक",
+ "moreCount_few": "+{{count}} अधिक",
+ "moreCount_many": "+{{count}} अधिक"
+ },
+ "runtimeProvider": {
+ "defaults": {
+ "scopeDescriptionAllProjects": "स्वतःचे OpenCode ओव्हरराइड नसलेल्या प्रत्येक प्रकल्पासाठी डीफॉल्ट.",
+ "scopeDescriptionProject": "फक्त निवडलेला प्रकल्प ओव्हरराइड करा. चालू असलेल्या टीम्स बदलल्या जात नाहीत.",
+ "setAllProjectsDefault": "सर्व-प्रकल्प डीफॉल्ट सेट करा",
+ "setProjectDefault": "प्रकल्प डीफॉल्ट सेट करा",
+ "validationContext": "पडताळणी संदर्भ",
+ "projectOverrideContext": "प्रकल्प ओव्हरराइड संदर्भ",
+ "selectProjectHint": "स्थानिक मॉडेल्स तपासण्यापूर्वी किंवा डीफॉल्ट जतन करण्यापूर्वी एक प्रकल्प निवडा.",
+ "allProjectsHint": "चाचण्या {{project}} वापरतात. प्रकल्पात ओव्हरराइड नसल्यास डीफॉल्ट लागू होतो.",
+ "projectHint": "जतन केल्याने फक्त {{project}} ओव्हरराइड होतो."
+ }
+ },
+ "sessionContext": {
+ "header": {
+ "title": "संदर्भ",
+ "closePanel": "पॅनेल बंद करा",
+ "phase": "टप्पा:",
+ "current": "सध्याचे",
+ "view": "दृश्य:",
+ "category": "वर्ग",
+ "bySize": "आकारानुसार"
+ },
+ "metrics": {
+ "unavailable": "उपलब्ध नाही",
+ "contextUsed": "वापरलेला संदर्भ",
+ "promptInput": "प्रॉम्प्ट इनपुट",
+ "visibleContext": "दृश्यमान संदर्भ",
+ "ofContext": "संदर्भापैकी",
+ "ofPrompt": "प्रॉम्प्टपैकी",
+ "codexTelemetryUnavailable": "Codex प्रॉम्प्ट-साइड वापर सध्याच्या रनटाइम टेलीमेट्रीद्वारे अद्याप उघड केला जात नाही, त्यामुळे खोटे शून्य दाखवण्याऐवजी प्रॉम्प्ट इनपुट आणि वापरलेला संदर्भ उपलब्ध नाही असे राहतात.",
+ "sessionCost": "सत्र खर्च:",
+ "parentPlus": "पालक +",
+ "subagents": "सबएजंट्स",
+ "details": "तपशील"
+ },
+ "help": {
+ "contextUsed": {
+ "title": "वापरलेला संदर्भ",
+ "description": "सध्या मॉडेलची संदर्भ विंडो व्यापणारे प्रॉम्प्ट इनपुट अधिक आउटपुट टोकन्स."
+ },
+ "promptInput": {
+ "title": "प्रॉम्प्ट इनपुट",
+ "description": "जनरेशनपूर्वी मॉडेलला पाठवलेले टोकन्स. Claude साठी यात `input_tokens + cache_creation_input_tokens + cache_read_input_tokens` समाविष्ट आहे."
+ },
+ "visibleContext": {
+ "title": "दृश्यमान संदर्भ",
+ "description": "प्रॉम्प्ट इनपुटचा तपासण्यायोग्य उपसंच: फाइल्स, CLAUDE.md, टूल आउटपुट्स, वापरकर्ता संदेश आणि तत्सम इंजेक्शन्स जे तुम्ही थेट ऑप्टिमाइझ करू शकता."
+ },
+ "availability": {
+ "title": "उपलब्धता",
+ "description": "एखादा प्रोव्हायडर रनटाइम अद्याप प्रॉम्प्ट-साइड वापर उघड करत नसल्यास, पॅनेल मेट्रिक्स शून्य असल्याचे भासवण्याऐवजी उपलब्ध नाही असे दाखवते."
+ }
+ },
+ "items": {
+ "turn": "@वळण {{turn}}",
+ "tokensApprox": "~{{tokens}} टोकन्स",
+ "toolsCount": "{{count}} टूल्स",
+ "toolsCount_one": "{{count}} टूल",
+ "toolsCount_other": "{{count}} टूल्स",
+ "toolsCount_few": "{{count}} टूल्स",
+ "toolsCount_many": "{{count}} टूल्स",
+ "itemsCount": "{{count}} आयटम्स",
+ "itemsCount_one": "{{count}} आयटम",
+ "itemsCount_other": "{{count}} आयटम्स",
+ "itemsCount_few": "{{count}} आयटम्स",
+ "itemsCount_many": "{{count}} आयटम्स",
+ "missing": "गहाळ",
+ "thinking": "विचार",
+ "text": "मजकूर"
+ },
+ "empty": "या सत्रात कोणतेही संदर्भ इंजेक्शन्स आढळले नाहीत",
+ "view": {
+ "grouped": "गटबद्ध",
+ "flat": "सपाट"
+ },
+ "claudeMdFiles": "CLAUDE.md फाइल्स",
+ "mentionedFiles": "उल्लेखित फाइल्स"
+ },
+ "chat": {
+ "subagent": {
+ "fallbackName": "सबएजंट",
+ "shutdownConfirmed": "शटडाउन पुष्टी झाली",
+ "summary": {
+ "tools": "{{count}} टूल्स",
+ "tools_one": "{{count}} टूल",
+ "tools_other": "{{count}} टूल्स",
+ "tools_few": "{{count}} टूल्स",
+ "tools_many": "{{count}} टूल्स"
+ },
+ "meta": {
+ "type": "प्रकार",
+ "duration": "कालावधी",
+ "model": "मॉडेल",
+ "id": "ID"
+ },
+ "metrics": {
+ "contextWindow": "संदर्भ विंडो",
+ "contextUsage": "संदर्भ वापर",
+ "mainContext": "मुख्य संदर्भ",
+ "totalOutput": "एकूण आउटपुट",
+ "turns": "({{count}} वळणे)",
+ "turns_one": "({{count}} वळण)",
+ "turns_other": "({{count}} वळणे)",
+ "subagentContext": "सबएजंट संदर्भ",
+ "phase": "टप्पा {{phase}}",
+ "turns_few": "({{count}} वळणे)",
+ "turns_many": "({{count}} वळणे)"
+ },
+ "trace": {
+ "title": "अंमलबजावणी ट्रेस"
+ }
+ },
+ "user": {
+ "you": "तुम्ही",
+ "showMore": "अधिक दाखवा",
+ "showLess": "कमी दाखवा",
+ "backgroundTask": "पार्श्वभूमी टास्क",
+ "exitCode": "एक्झिट {{code}}",
+ "imagesAttached": "{{count}} इमेजेस संलग्न",
+ "imagesAttached_one": "{{count}} इमेज संलग्न",
+ "imagesAttached_few": "{{count}} इमेजेस संलग्न",
+ "imagesAttached_many": "{{count}} इमेजेस संलग्न",
+ "imagesAttached_other": "{{count}} इमेजेस संलग्न"
+ },
+ "compact": {
+ "toggle": "कॉम्पॅक्ट केलेला मजकूर टॉगल करा",
+ "contextCompacted": "संदर्भ कॉम्पॅक्ट केला",
+ "freedTokens": "({{tokens}} मोकळे केले)",
+ "phase": "टप्पा {{phase}}",
+ "conversationCompacted": "संभाषण कॉम्पॅक्ट केले",
+ "summary": "संदर्भ वाचवण्यासाठी मागील संदेश सारांशित केले गेले. संपूर्ण संभाषण इतिहास सत्र फाइलमध्ये जतन केला आहे.",
+ "compacted": "कॉम्पॅक्ट केले"
+ },
+ "executionTrace": {
+ "empty": "कोणतेही अंमलबजावणी आयटम्स नाहीत",
+ "nested": "नेस्टेड: {{name}}",
+ "input": "इनपुट"
+ },
+ "items": {
+ "empty": "दाखवण्यासाठी कोणतेही आयटम्स नाहीत"
+ },
+ "tools": {
+ "teammateSpawned": "सहकारी तयार केला",
+ "shutdownRequested": "शटडाउन विनंती केली ->",
+ "noResultReceived": "कोणताही परिणाम मिळाला नाही",
+ "duration": "कालावधी: {{duration}}",
+ "result": "परिणाम",
+ "write": {
+ "createdFile": "फाइल तयार केली",
+ "wroteToFile": "फाइलमध्ये लिहिले"
+ },
+ "skill": {
+ "instructions": "कौशल्य सूचना",
+ "unknown": "अज्ञात कौशल्य"
+ }
+ },
+ "lastOutput": {
+ "requestInterrupted": "वापरकर्त्याने विनंती व्यत्यय आणली",
+ "planReadyForApproval": "योजना मंजुरीसाठी तयार"
+ },
+ "empty": {
+ "icon": "💬",
+ "title": "कोणताही संभाषण इतिहास नाही",
+ "description": "या सत्रात अद्याप कोणतेही संदेश नाहीत."
+ },
+ "context": {
+ "remainingPercent": "({{percent}}% शिल्लक)",
+ "count": "संदर्भ ({{count}})",
+ "count_one": "संदर्भ ({{count}})",
+ "count_other": "संदर्भ ({{count}})",
+ "count_few": "संदर्भ ({{count}})",
+ "count_many": "संदर्भ ({{count}})"
+ },
+ "scrollToBottom": "तळाशी स्क्रोल करा",
+ "bottom": "तळ",
+ "teammateMessage": {
+ "message": "संदेश",
+ "resent": "पुन्हा पाठवले",
+ "fallback": "सहकारी संदेश"
+ },
+ "system": {
+ "label": "सिस्टम"
+ }
+ },
+ "tmuxInstaller": {
+ "summaryTitle": "tmux इन्स्टॉल केलेले नाही",
+ "detectedOs": "आढळलेले OS: {{os}}",
+ "runtimePath": "रनटाइम पथ: {{path}}",
+ "phase": "टप्पा: {{phase}}",
+ "actions": {
+ "cancel": "रद्द करा",
+ "manualGuide": "मॅन्युअल मार्गदर्शक",
+ "hideSetupSteps": "सेटअप टप्पे लपवा",
+ "showSetupSteps": "सेटअप टप्पे दाखवा ({{count}})",
+ "showSetupSteps_one": "सेटअप टप्पा दाखवा ({{count}})",
+ "showSetupSteps_other": "सेटअप टप्पे दाखवा ({{count}})",
+ "recheck": "पुन्हा तपासा",
+ "showSetupSteps_few": "सेटअप टप्पे दाखवा ({{count}})",
+ "showSetupSteps_many": "सेटअप टप्पे दाखवा ({{count}})"
+ },
+ "installerProgress": "इन्स्टॉलर प्रगती",
+ "input": {
+ "placeholder": "इन्स्टॉलरला इनपुट पाठवा",
+ "send": "इनपुट पाठवा",
+ "passwordNotice": "पासवर्ड इनपुट थेट इन्स्टॉलर टर्मिनलला पाठवला जातो आणि लॉग आउटपुटमध्ये जोडला जात नाही."
+ },
+ "details": {
+ "show": "तपशील दाखवा",
+ "hide": "तपशील लपवा"
+ }
+ },
+ "commandPalette": {
+ "noRecentActivity": "अलीकडील कोणताही क्रियाकलाप नाही",
+ "sessionsCount": "{{count}} सत्रे",
+ "sessionsCount_one": "{{count}} सत्र",
+ "sessionsCount_other": "{{count}} सत्रे",
+ "mode": {
+ "searchProjects": "प्रकल्प शोधा",
+ "searchAcrossProjects": "सर्व प्रकल्पांमध्ये शोधा",
+ "searchInProject": "प्रकल्पात शोधा"
+ },
+ "currentProject": "सध्याचा प्रकल्प",
+ "global": "जागतिक",
+ "placeholders": {
+ "projects": "प्रकल्प शोधा...",
+ "conversations": "संभाषणे शोधा..."
+ },
+ "empty": {
+ "noProjectsForQuery": "\"{{query}}\" साठी कोणतेही प्रकल्प सापडले नाहीत",
+ "noProjects": "कोणतेही प्रकल्प सापडले नाहीत",
+ "minChars": "शोधण्यासाठी किमान 2 अक्षरे टाका",
+ "noFastResults": "\"{{query}}\" साठी अलीकडील सत्रांमध्ये जलद परिणाम नाहीत",
+ "noResults": "\"{{query}}\" साठी कोणतेही परिणाम सापडले नाहीत"
+ },
+ "footer": {
+ "projectsCount": "{{count}} प्रकल्प",
+ "projectsCount_one": "{{count}} प्रकल्प",
+ "projectsCount_other": "{{count}} प्रकल्प",
+ "results": "{{count}} {{speed}}परिणाम",
+ "results_one": "{{count}} {{speed}}परिणाम",
+ "results_other": "{{count}} {{speed}}परिणाम",
+ "resultsAcrossProjects": "सर्व प्रकल्पांमध्ये {{count}} {{speed}}परिणाम",
+ "resultsAcrossProjects_one": "सर्व प्रकल्पांमध्ये {{count}} {{speed}}परिणाम",
+ "resultsAcrossProjects_other": "सर्व प्रकल्पांमध्ये {{count}} {{speed}}परिणाम",
+ "fastPrefix": "जलद ",
+ "typeToSearch": "शोधण्यासाठी टाइप करा",
+ "navigate": "नेव्हिगेट करा",
+ "select": "निवडा",
+ "open": "उघडा",
+ "global": "जागतिक",
+ "close": "बंद करा",
+ "results_few": "{{count}} {{speed}}परिणाम",
+ "results_many": "{{count}} {{speed}}परिणाम",
+ "resultsAcrossProjects_few": "सर्व प्रकल्पांमध्ये {{count}} {{speed}}परिणाम",
+ "resultsAcrossProjects_many": "सर्व प्रकल्पांमध्ये {{count}} {{speed}}परिणाम",
+ "projectsCount_few": "{{count}} प्रकल्प",
+ "projectsCount_many": "{{count}} प्रकल्प",
+ "upDownKey": "↑↓",
+ "escapeKey": "esc"
+ },
+ "sessionsCount_few": "{{count}} सत्रे",
+ "sessionsCount_many": "{{count}} सत्रे"
+ },
+ "tasksPanel": {
+ "title": "टास्क",
+ "searchPlaceholder": "टास्क शोधा...",
+ "pinned": "पिन केले",
+ "groupByLabel": "यानुसार गटबद्ध करा:",
+ "groupByAria": "यानुसार गटबद्ध करा",
+ "groupModes": {
+ "none": "काहीही नाही",
+ "project": "प्रकल्प",
+ "time": "वेळ"
+ },
+ "showArchived": "संग्रहित दाखवा",
+ "hideArchived": "संग्रहित लपवा",
+ "empty": {
+ "noMatchingTasks": "जुळणारी कोणतीही टास्क नाहीत",
+ "noTasks": "कोणतीही टास्क सापडली नाहीत"
+ },
+ "teamLabel": "टीम: {{team}}",
+ "showMore": "अधिक दाखवा",
+ "showLess": "कमी दाखवा",
+ "deleteConfirm": {
+ "title": "टास्क हटवा",
+ "message": "टास्क #{{taskId}} कचऱ्यात हलवायचे?",
+ "confirmLabel": "हटवा",
+ "cancelLabel": "रद्द करा"
+ },
+ "deleteFailed": {
+ "title": "टास्क हटवणे अयशस्वी",
+ "fallbackMessage": "एक अनपेक्षित त्रुटी आली",
+ "confirmLabel": "ठीक आहे"
+ },
+ "sort": {
+ "byTime": "वेळेनुसार",
+ "byUnread": "न वाचलेल्यानुसार",
+ "byProject": "प्रकल्पानुसार",
+ "byTeam": "टीमनुसार"
+ }
+ },
+ "toolViewer": {
+ "input": "इनपुट",
+ "replaceAll": "(सर्व बदला)",
+ "noInputRecorded": "या टूल कॉलसाठी कोणतेही इनपुट नोंदवले गेले नाही.",
+ "agent": {
+ "action": "कृती",
+ "teammate": "सहकारी",
+ "team": "टीम",
+ "runtime": "रनटाइम",
+ "type": "प्रकार",
+ "startupInstructionsHidden": "स्टार्टअप सूचना UI मध्ये लपवल्या आहेत."
+ }
+ },
+ "taskContextMenu": {
+ "unpin": "अनपिन करा",
+ "pin": "पिन करा",
+ "rename": "नाव बदला",
+ "markUnread": "न वाचलेले म्हणून चिन्हांकित करा",
+ "unarchive": "संग्रहातून काढा",
+ "archive": "संग्रहित करा",
+ "deleteTask": "टास्क हटवा"
+ },
+ "updateDialog": {
+ "closeDialog": "डायलॉग बंद करा",
+ "updateAvailable": "अपडेट उपलब्ध",
+ "updateReady": "अपडेट तयार",
+ "noReleaseNotes": "कोणत्याही रिलीज नोट्स उपलब्ध नाहीत.",
+ "viewOnGitHub": "GitHub वर पाहा",
+ "later": "नंतर",
+ "restartNow": "आता रीस्टार्ट करा",
+ "download": "डाउनलोड"
+ },
+ "errorBoundary": {
+ "title": "काहीतरी चूक झाली",
+ "description": "अॅप्लिकेशनमध्ये एक अनपेक्षित त्रुटी आली. तुम्ही पृष्ठ पुन्हा लोड करण्याचा किंवा त्रुटी स्थिती रीसेट करण्याचा प्रयत्न करू शकता.",
+ "componentStack": "कंपोनंट स्टॅक",
+ "tryAgain": "पुन्हा प्रयत्न करा",
+ "copied": "कॉपी केले",
+ "copyErrorDetails": "त्रुटी तपशील कॉपी करा",
+ "reportBugOnGitHub": "GitHub वर बग नोंदवा",
+ "reloadApp": "अॅप पुन्हा लोड करा",
+ "diagnosticsNotice": "GitHub बग अहवाल आणि कॉपी केलेल्या डायग्नॉस्टिक्समध्ये त्रुटी संदेश, स्टॅक ट्रेसेस, अॅप आवृत्ती, सक्रिय टॅब, निवडलेली टीम, टास्क संदर्भ आणि एन्व्हायर्न्मेंट तपशील समाविष्ट आहेत."
+ },
+ "runtimeBackendSelector": {
+ "label": "रनटाइम बॅकएंड",
+ "resolved": "निराकरण केले: {{backend}}",
+ "current": "सध्याचे",
+ "recommended": "शिफारस केलेले",
+ "unavailable": "उपलब्ध नाही",
+ "cannotSelectYet": "हा बॅकएंड अद्याप निवडता येत नाही.",
+ "auto": "ऑटो",
+ "autoCurrently": "ऑटो (सध्या: {{backend}})",
+ "audience": {
+ "internal": "अंतर्गत"
+ },
+ "states": {
+ "locked": "लॉक केले",
+ "disabled": "अक्षम",
+ "authRequired": "ऑथ आवश्यक",
+ "runtimeMissing": "रनटाइम गहाळ",
+ "degraded": "खालावलेले",
+ "unavailable": "उपलब्ध नाही"
+ }
+ },
+ "providerModelBadges": {
+ "checking": "तपासत आहे",
+ "unavailable": "उपलब्ध नाही",
+ "checkFailed": "तपासणी अयशस्वी",
+ "free": "मोफत",
+ "freeTooltip": "OpenCode मेटाडेटाद्वारे नोंदवले. उपलब्धता आणि मर्यादा बदलू शकतात."
+ },
+ "taskFilters": {
+ "status": "स्थिती",
+ "clearAll": "सर्व साफ करा",
+ "selectAll": "सर्व निवडा",
+ "team": "टीम",
+ "allTeams": "सर्व टीम्स",
+ "searchTeams": "टीम्स शोधा...",
+ "noTeamsFound": "कोणत्याही टीम्स सापडल्या नाहीत",
+ "project": "प्रकल्प",
+ "allProjects": "सर्व प्रकल्प",
+ "searchProjects": "प्रकल्प शोधा...",
+ "noProjects": "कोणतेही प्रकल्प नाहीत",
+ "comments": "टिप्पण्या",
+ "apply": "लागू करा",
+ "read": {
+ "all": "सर्व",
+ "unread": "न वाचलेले",
+ "read": "वाचलेले"
+ },
+ "statusOptions": {
+ "todo": "करायचे आहे",
+ "inProgress": "प्रगतीपथावर",
+ "needsFix": "दुरुस्ती आवश्यक",
+ "done": "पूर्ण",
+ "review": "पुनरावलोकन",
+ "approved": "मंजूर"
+ }
+ },
+ "sessionItem": {
+ "totalContext": "एकूण संदर्भ: {{tokens}} टोकन्स",
+ "context": "संदर्भ: {{tokens}}",
+ "phase": "टप्पा {{phase}}:",
+ "compactedTo": "({{tokens}} पर्यंत कॉम्पॅक्ट केले)"
+ },
+ "notifications": {
+ "row": {
+ "team": "टीम",
+ "subagent": "सबएजंट",
+ "markAsRead": "वाचलेले म्हणून चिन्हांकित करा",
+ "delete": "हटवा",
+ "viewInSession": "सत्रात पाहा"
+ },
+ "title": "सूचना",
+ "loading": "सूचना लोड होत आहेत...",
+ "actions": {
+ "markFilteredAsRead": "फिल्टर केलेले वाचलेले म्हणून चिन्हांकित करा",
+ "markAllAsRead": "सर्व वाचलेले म्हणून चिन्हांकित करा",
+ "markFilteredRead": "फिल्टर केलेले वाचलेले",
+ "markAllRead": "सर्व वाचलेले",
+ "clearFilteredNotifications": "फिल्टर केलेल्या सूचना साफ करा",
+ "clearAllNotifications": "सर्व सूचना साफ करा",
+ "clickToConfirm": "पुष्टी करण्यासाठी क्लिक करा",
+ "clearFiltered": "फिल्टर केलेले साफ करा",
+ "clearAll": "सर्व साफ करा"
+ },
+ "counts": {
+ "unreadInFilter": "फिल्टरमध्ये {{count}} न वाचलेले",
+ "unreadInFilter_one": "फिल्टरमध्ये {{count}} न वाचलेले",
+ "unreadInFilter_few": "फिल्टरमध्ये {{count}} न वाचलेले",
+ "unreadInFilter_many": "फिल्टरमध्ये {{count}} न वाचलेले",
+ "unreadInFilter_other": "फिल्टरमध्ये {{count}} न वाचलेले",
+ "inFilter": "फिल्टरमध्ये {{count}}",
+ "inFilter_one": "फिल्टरमध्ये {{count}}",
+ "inFilter_few": "फिल्टरमध्ये {{count}}",
+ "inFilter_many": "फिल्टरमध्ये {{count}}",
+ "inFilter_other": "फिल्टरमध्ये {{count}}",
+ "unread": "{{count}} न वाचलेले",
+ "unread_one": "{{count}} न वाचलेले",
+ "unread_few": "{{count}} न वाचलेले",
+ "unread_many": "{{count}} न वाचलेले",
+ "unread_other": "{{count}} न वाचलेले",
+ "total": "एकूण {{count}}",
+ "total_one": "एकूण {{count}}",
+ "total_few": "एकूण {{count}}",
+ "total_many": "एकूण {{count}}",
+ "total_other": "एकूण {{count}}"
+ },
+ "filters": {
+ "other": "इतर"
+ },
+ "empty": {
+ "noMatching": "जुळणाऱ्या कोणत्याही सूचना नाहीत",
+ "noNotifications": "कोणत्याही सूचना नाहीत",
+ "tryDifferentFilter": "वेगळा फिल्टर वापरून पाहा",
+ "allCaughtUp": "तुम्ही सर्व काही पाहिले आहे!"
+ }
+ },
+ "updates": {
+ "restartToUpdate": "अपडेट करण्यासाठी रीस्टार्ट करा",
+ "updateApp": "अॅप अपडेट करा",
+ "downloadedRestartTooltip": "अपडेट डाउनलोड झाले, लागू करण्यासाठी रीस्टार्ट करा",
+ "newVersionAvailable": "नवीन आवृत्ती उपलब्ध",
+ "updatingApp": "अॅप अपडेट करत आहे",
+ "updateReady": "अपडेट तयार",
+ "restartNow": "आता रीस्टार्ट करा"
+ },
+ "layout": {
+ "github": "GitHub",
+ "discord": "Discord",
+ "expandSidebar": "साइडबार विस्तृत करा",
+ "collapseSidebarShortcut": "साइडबार संकुचित करा ({{shortcut}})",
+ "sidebarView": "साइडबार दृश्य",
+ "resizeSidebar": "साइडबार आकार बदला",
+ "closeTab": "टॅब बंद करा",
+ "openedFromSearch": "शोधातून उघडले",
+ "pinnedSession": "पिन केलेले सत्र",
+ "jumpToSection": "विभागावर जा",
+ "newTab": "नवीन टॅब",
+ "newTabDashboard": "नवीन टॅब (डॅशबोर्ड)",
+ "refreshSession": "सत्र रिफ्रेश करा",
+ "refreshSessionWithShortcut": "सत्र रिफ्रेश करा ({{shortcut}})",
+ "loadingTab": "टॅब लोड होत आहे",
+ "menu": {
+ "teams": "टीम्स",
+ "settings": "सेटिंग्ज",
+ "extensions": "एक्सटेन्शन्स",
+ "search": "शोध",
+ "schedules": "वेळापत्रके",
+ "docs": "दस्तऐवज",
+ "exportMarkdown": "Markdown म्हणून एक्सपोर्ट करा",
+ "exportJson": "JSON म्हणून एक्सपोर्ट करा",
+ "exportPlainText": "साध्या मजकुरात एक्सपोर्ट करा",
+ "analyzeSession": "सत्राचे विश्लेषण करा"
+ },
+ "tabMenu": {
+ "closeTabs": "{{count}} टॅब्स बंद करा",
+ "closeTabs_one": "{{count}} टॅब बंद करा",
+ "closeTabs_few": "{{count}} टॅब्स बंद करा",
+ "closeTabs_many": "{{count}} टॅब्स बंद करा",
+ "closeTabs_other": "{{count}} टॅब्स बंद करा",
+ "closeTab": "टॅब बंद करा",
+ "closeOtherTabs": "इतर टॅब्स बंद करा",
+ "splitRight": "उजवीकडे विभाजित करा",
+ "splitLeft": "डावीकडे विभाजित करा",
+ "pinToSidebar": "साइडबारवर पिन करा",
+ "unpinFromSidebar": "साइडबारवरून अनपिन करा",
+ "hideFromSidebar": "साइडबारमधून लपवा",
+ "unhideFromSidebar": "साइडबारमध्ये दाखवा",
+ "closeAllTabs": "सर्व टॅब्स बंद करा"
+ },
+ "sections": {
+ "team": "टीम",
+ "sessions": "सत्रे",
+ "kanban": "Kanban",
+ "claudeLogs": "लॉग्स",
+ "messages": "संदेश"
+ }
+ },
+ "editorFormatting": {
+ "bold": "ठळक",
+ "italic": "तिरकस",
+ "strike": "स्ट्राइक",
+ "code": "कोड"
+ },
+ "diff": {
+ "changed": "बदलले",
+ "noChangesDetected": "कोणतेही बदल आढळले नाहीत"
+ },
+ "codexLogin": {
+ "copyLoginLinkAndCode": "ChatGPT लॉगिन लिंक आणि कोड कॉपी करा",
+ "copyLoginLink": "ChatGPT लॉगिन लिंक कॉपी करा",
+ "copyFailed": "कॉपी अयशस्वी",
+ "copyLinkAndCode": "लिंक + कोड कॉपी करा",
+ "copyLink": "लिंक कॉपी करा",
+ "enterCodeOnLoginPage": "हा कोड ChatGPT लॉगिन पृष्ठावर टाका"
+ },
+ "window": {
+ "minimize": "लहान करा",
+ "maximize": "मोठे करा",
+ "restore": "पुनर्संचयित करा"
+ },
+ "context": {
+ "local": "स्थानिक",
+ "switchingTo": "{{workspace}} वर बदलत आहे",
+ "loadingWorkspace": "वर्कस्पेस लोड होत आहे",
+ "switchWorkspace": "वर्कस्पेस बदला"
+ },
+ "repositories": {
+ "noneAvailable": "कोणतेही रिपॉझिटरीज उपलब्ध नाहीत",
+ "remove": "रिपॉझिटरी काढा"
+ },
+ "export": {
+ "session": "सत्र एक्सपोर्ट करा",
+ "sessionTitle": "सत्र एक्सपोर्ट करा"
+ },
+ "brand": {
+ "claude": "Claude"
+ },
+ "sessionReport": {
+ "noSessionData": "कोणताही सत्र डेटा उपलब्ध नाही",
+ "title": "सत्र अहवाल"
+ },
+ "sessionFilters": {
+ "project": {
+ "selectProject": "प्रकल्प निवडा"
+ }
+ },
+ "tasks": {
+ "date": {
+ "updatedPrefix": "अपडेट",
+ "updatedYesterday": "काल अपडेट",
+ "yesterday": "काल"
+ },
+ "reviewState": {
+ "needsFix": "दुरुस्ती आवश्यक"
+ },
+ "unassigned": "नियुक्त नाही"
+ }
+}
diff --git a/src/features/localization/renderer/locales/mr/dashboard.json b/src/features/localization/renderer/locales/mr/dashboard.json
new file mode 100644
index 00000000..67efd717
--- /dev/null
+++ b/src/features/localization/renderer/locales/mr/dashboard.json
@@ -0,0 +1,197 @@
+{
+ "cliStatus": {
+ "actions": {
+ "alreadyLoggedIn": "आधीच लॉग इन आहात?",
+ "becomeSponsor": "प्रायोजक व्हा",
+ "cancel": "रद्द करा",
+ "checkNow": "आता तपासा",
+ "checkUpdates": "अपडेट्स तपासा",
+ "checking": "तपासत आहे...",
+ "connect": "कनेक्ट करा",
+ "extensions": "एक्सटेन्शन्स",
+ "login": "लॉग इन",
+ "manage": "व्यवस्थापित करा",
+ "manageProviders": "प्रोव्हायडर्स व्यवस्थापित करा",
+ "plan": "प्लॅन",
+ "recheck": "पुन्हा तपासा",
+ "recheckProvider": "{{provider}} पुन्हा तपासा",
+ "retry": "पुन्हा प्रयत्न करा",
+ "updateTo": "v{{version}} वर अपडेट करा",
+ "useCode": "कोड वापरा"
+ },
+ "atlas": {
+ "alt": "Atlas Cloud",
+ "description": "Atlas Cloud हे एक फुल-मोडल AI इन्फरन्स प्लॅटफॉर्म आहे जे डेव्हलपर्सना व्हिडिओ जनरेशन, इमेज जनरेशन आणि LLM API वापरण्यासाठी एकच AI API देते. अनेक व्हेंडर इंटिग्रेशन्स व्यवस्थापित करण्याऐवजी, तुम्ही एकदाच कनेक्ट करता आणि सर्व मोडॅलिटीजमधील 300+ क्युरेटेड मॉडेल्सवर एकत्रित प्रवेश मिळवता. अधिक बजेट-अनुकूल API प्रवेशासाठी Atlas Cloud च्या नवीन कोडिंग प्लॅन प्रमोशनला भेट द्या.",
+ "openCodeProvider": "OpenCode प्रोव्हायडर",
+ "plan": "Atlas Cloud कोडिंग प्लॅन",
+ "sponsor": "प्रायोजक"
+ },
+ "errors": {
+ "checkStatusFailed": "CLI स्थिती तपासणे अयशस्वी",
+ "installationFailed": "इन्स्टॉलेशन अयशस्वी",
+ "refreshFailed": "अपडेट्स तपासणे अयशस्वी. तुमचे नेटवर्क कनेक्शन तपासा आणि पुन्हा प्रयत्न करा.",
+ "runtimeUpdatedRefreshFailed": "रनटाइम अपडेट झाले, पण प्रोव्हायडर स्थिती रिफ्रेश करणे अयशस्वी."
+ },
+ "hints": {
+ "backgroundStatus": "{{runtime}} स्थिती पार्श्वभूमीत तपासली जाईल.",
+ "codexApiKeyFallback": "{{hint}} तुम्ही ऑथ मोड बदलल्यास API की फॉलबॅक उपलब्ध आहे.",
+ "codexAutoApiKey": "{{hint}} ChatGPT कनेक्ट होईपर्यंत ऑटो API की वापरत राहील.",
+ "codexFinishLogin": "ब्राउझरमध्ये ChatGPT लॉगिन पूर्ण करा. विचारल्यास दाखवलेला कोड टाका.",
+ "codexNoActiveLogin": "वापर मर्यादा Codex CLI ला सक्रिय ChatGPT खाते दिसल्यानंतरच दिसतात. आत्ता ते कोणतेही सक्रिय ChatGPT लॉगिन नसल्याचे दाखवत आहे.",
+ "codexNoActiveManagedSession": "वापर मर्यादा Codex CLI ला सक्रिय ChatGPT खाते दिसल्यानंतरच दिसतात. स्थानिक Codex खाते डेटा अस्तित्वात आहे, पण आत्ता कोणतेही सक्रिय व्यवस्थापित सत्र निवडलेले नाही.",
+ "codexReconnectNeeded": "वापर मर्यादा Codex सध्या निवडलेले ChatGPT सत्र रिफ्रेश केल्यानंतरच दिसतात. आत्ता स्थानिक सत्राला पुन्हा कनेक्ट करण्याची गरज आहे.",
+ "firstCheckSlow": "पहिल्या तपासणीला 30 सेकंदांपर्यंत वेळ लागू शकतो",
+ "loginRequiredForTeams": "सत्रे आणि प्रकल्प ब्राउझ करणे लॉगिनशिवाय चालते. लॉगिन फक्त एजंट टीम्स चालवण्यासाठी आवश्यक आहे.",
+ "troubleshootTitle": "तुम्ही लॉग इन आहात याची खात्री असल्यास, हे टप्पे करून पाहा:"
+ },
+ "installer": {
+ "checkingLatest": "नवीनतम आवृत्ती तपासत आहे...",
+ "downloading": "{{runtime}} डाउनलोड करत आहे...",
+ "installing": "{{runtime}} इन्स्टॉल करत आहे...",
+ "success": "{{runtime}} v{{version}} यशस्वीरित्या इन्स्टॉल झाले",
+ "verifying": "चेकसम पडताळत आहे..."
+ },
+ "labels": {
+ "apiKeyRequired": "API की आवश्यक",
+ "comingSoon": "लवकरच येत आहे",
+ "collapseProviderDetails": "प्रोव्हायडर तपशील संकुचित करा",
+ "expandProviderDetails": "प्रोव्हायडर तपशील विस्तृत करा",
+ "generateLink": "लिंक तयार करा",
+ "loadingRateLimits": "दर मर्यादा लोड होत आहेत",
+ "loggedOut": "प्रोव्हायडर लॉग आउट झाला",
+ "loginAuthFailed": "प्रमाणीकरण अयशस्वी",
+ "loginAuthUpdated": "प्रमाणीकरण अपडेट झाले",
+ "loginComplete": "लॉगिन पूर्ण",
+ "loginFailed": "लॉगिन अयशस्वी",
+ "loginTitle": "लॉग इन",
+ "logoutFailed": "लॉग आउट अयशस्वी",
+ "logoutTitle": "लॉग आउट",
+ "notLoggedIn": "लॉग इन नाही",
+ "openLogin": "लॉगिन उघडा",
+ "providerActionRequired": "प्रोव्हायडर कृती आवश्यक",
+ "resets": "{{time}} रीसेट होते",
+ "runtimeLoginTitle": "{{runtime}} लॉगिन"
+ },
+ "loading": {
+ "aiProviders": "AI प्रोव्हायडर्स तपासत आहे...",
+ "claudeCli": "Claude CLI तपासत आहे..."
+ },
+ "provider": {
+ "authenticated": "प्रमाणित",
+ "backend": "बॅकएंड: {{backend}}",
+ "checkingAuthentication": "प्रमाणीकरण तपासत आहे...",
+ "checkingProviders": "प्रोव्हायडर्स तपासत आहे...",
+ "configuredLocalCount": "{{count}} स्थानिक कॉन्फिगर केले",
+ "configuredLocalCount_few": "{{count}} स्थानिक कॉन्फिगर केले",
+ "configuredLocalCount_many": "{{count}} स्थानिक कॉन्फिगर केले",
+ "configuredLocalCount_one": "{{count}} स्थानिक कॉन्फिगर केले",
+ "configuredLocalCount_other": "{{count}} स्थानिक कॉन्फिगर केले",
+ "configuredLocalTitle": "तुमच्या OpenCode कॉन्फिगमधून आयात केलेले स्थानिक OpenCode रूट्स.",
+ "connectedCount": "प्रोव्हायडर्स: {{connected}}/{{denominator}} कनेक्ट केले",
+ "freeModels": "मोफत मॉडेल्स",
+ "freeModelsTitle": "तुमच्या सेटअपमध्ये उपलब्ध असल्यास OpenCode मध्ये Big Pickle सारखे मोफत मॉडेल पर्याय समाविष्ट आहेत. OpenCode द्वारे OpenRouter देखील मोफत मॉडेल्स दाखवू शकते, पण प्रत्येक OpenCode/OpenRouter मॉडेल मोफत नाही. उपलब्धता आणि मर्यादा बदलू शकतात.",
+ "loadingModels": "मॉडेल्स लोड होत आहेत...",
+ "modelsUnavailable": "या रनटाइम बिल्डसाठी मॉडेल्स उपलब्ध नाहीत",
+ "runtime": "रनटाइम: {{runtime}}",
+ "verifiedCount": "{{count}} पडताळले",
+ "verifiedCount_few": "{{count}} पडताळले",
+ "verifiedCount_many": "{{count}} पडताळले",
+ "verifiedCount_one": "{{count}} पडताळले",
+ "verifiedCount_other": "{{count}} पडताळले",
+ "verifiedTitle": "यशस्वी अंमलबजावणी पुराव्यासह OpenCode रूट्स."
+ },
+ "runtime": {
+ "configuredHealthCheckFailed": "कॉन्फिगर केलेल्या {{runtime}} ची स्टार्टअप हेल्थ चेक अयशस्वी झाली.",
+ "configuredNotFound": "कॉन्फिगर केलेले {{runtime}} सापडले नाही.",
+ "foundButFailed": "{{runtime}} सापडले पण सुरू होण्यात अयशस्वी",
+ "healthCheckFailedDescription": "अॅपला कॉन्फिगर केलेले {{runtime}} सापडले, पण त्याची स्टार्टअप हेल्थ चेक अयशस्वी झाली. ते दुरुस्त करा किंवा पुन्हा इन्स्टॉल करा, मग पुन्हा प्रयत्न करा.",
+ "install": "{{runtime}} इन्स्टॉल करा",
+ "installRequiredDescription": "टीम प्रोव्हिजनिंग आणि सत्र व्यवस्थापनासाठी {{runtime}} आवश्यक आहे. सुरू करण्यासाठी ते इन्स्टॉल करा.",
+ "isRequired": "{{runtime}} आवश्यक आहे",
+ "reinstall": "{{runtime}} पुन्हा इन्स्टॉल करा"
+ },
+ "runtimeInstall": {
+ "checking": "तपासत आहे",
+ "codexTitle": "अॅप डेटामध्ये Codex CLI इन्स्टॉल करा",
+ "downloading": "डाउनलोड करत आहे",
+ "downloadingPercent": "{{percent}}% डाउनलोड करत आहे",
+ "install": "इन्स्टॉल करा",
+ "installing": "इन्स्टॉल करत आहे",
+ "openCodeTitle": "अॅप डेटामध्ये OpenCode रनटाइम इन्स्टॉल करा",
+ "retryInstall": "इन्स्टॉल पुन्हा करा"
+ },
+ "troubleshoot": {
+ "again": "पुन्हा",
+ "authStatusCommand": "तुमची कॉन्फिगर केलेली CLI ऑथ स्थिती कमांड",
+ "checkLoggedIn": "- ते \"Logged in\" दाखवते का ते तपासा",
+ "click": "क्लिक करा",
+ "loginCommand": "रनटाइम लॉगिन कमांड",
+ "logoutCommand": "रनटाइम लॉगआउट कमांड",
+ "openTerminal": "तुमचे टर्मिनल उघडा आणि चालवा:",
+ "reloginPrefix": "ते लॉग इन असल्याचे सांगते पण अॅपला दिसत नसल्यास, हे करून पाहा:",
+ "sameRuntime": "तुमच्या टर्मिनलमधील CLI अॅप वापरत असलेलाच रनटाइम असल्याची खात्री करा",
+ "statusCacheHint": "- कधीकधी स्थिती काही सेकंदांसाठी कॅश केली जाते",
+ "then": "मग"
+ },
+ "warnings": {
+ "multipleApiKeysMissing": "एक किंवा अधिक प्रोव्हायडर्स API की मोडवर सेट केले आहेत, पण कोणतीही API की कॉन्फिगर केलेली नाही. की जोडण्यासाठी किंवा कनेक्शन मोड बदलण्यासाठी प्रोव्हायडर्स व्यवस्थापित करा उघडा.",
+ "multipleApiKeysNeedAttention": "एक किंवा अधिक प्रोव्हायडर्स API की मोडवर सेट केले आहेत आणि त्यांना लक्ष देण्याची गरज आहे. जतन केलेल्या की तपासण्यासाठी किंवा कनेक्शन मोड बदलण्यासाठी प्रोव्हायडर्स व्यवस्थापित करा उघडा.",
+ "notAuthenticated": "{{runtime}} इन्स्टॉल केले आहे पण तुम्ही प्रमाणित नाही. टीम प्रोव्हिजनिंग आणि AI वैशिष्ट्यांसाठी लॉगिन आवश्यक आहे.",
+ "singleApiKeyMissing": "{{provider}} API की मोडवर सेट केले आहे, पण कोणतीही API की कॉन्फिगर केलेली नाही. की जोडण्यासाठी किंवा कनेक्शन मोड बदलण्यासाठी प्रोव्हायडर्स व्यवस्थापित करा उघडा.",
+ "singleApiKeyNeedsAttention": "{{provider}} API की मोडवर सेट केले आहे, पण ते कनेक्ट केलेले नाही. जतन केलेली की तपासण्यासाठी किंवा कनेक्शन मोड बदलण्यासाठी प्रोव्हायडर्स व्यवस्थापित करा उघडा."
+ }
+ },
+ "recentProjects": {
+ "selectFolderTitle": "प्रकल्प फोल्डर निवडा",
+ "selectFolder": "फोल्डर निवडा",
+ "failedToLoad": "प्रकल्प लोड करणे अयशस्वी",
+ "retry": "पुन्हा प्रयत्न करा",
+ "noProjects": "कोणतेही प्रकल्प सापडले नाहीत",
+ "noMatches": "\"{{query}}\" साठी कोणतीही जुळणी नाही",
+ "noRecentProjects": "अलीकडील कोणतेही प्रकल्प सापडले नाहीत",
+ "emptyDescription": "अलीकडील Claude आणि Codex क्रियाकलाप येथे दिसतील.",
+ "loadMore": "अधिक लोड करा",
+ "card": {
+ "deleted": "हटवले",
+ "projectFolderMissing": "प्रकल्प फोल्डर आता अस्तित्वात नाही",
+ "taskCounts": {
+ "active": "{{count}} सक्रिय",
+ "active_one": "{{count}} सक्रिय",
+ "active_other": "{{count}} सक्रिय",
+ "active_few": "{{count}} सक्रिय",
+ "active_many": "{{count}} सक्रिय",
+ "pending": "{{count}} प्रलंबित",
+ "pending_one": "{{count}} प्रलंबित",
+ "pending_other": "{{count}} प्रलंबित",
+ "pending_few": "{{count}} प्रलंबित",
+ "pending_many": "{{count}} प्रलंबित",
+ "done": "{{count}} पूर्ण",
+ "done_one": "{{count}} पूर्ण",
+ "done_other": "{{count}} पूर्ण",
+ "done_few": "{{count}} पूर्ण",
+ "done_many": "{{count}} पूर्ण"
+ }
+ },
+ "title": "अलीकडील प्रकल्प",
+ "searchResults": "शोध परिणाम",
+ "searchPlaceholder": "प्रकल्प शोधा..."
+ },
+ "actions": {
+ "selectTeam": "टीम निवडा",
+ "or": "किंवा",
+ "clearSearch": "शोध साफ करा"
+ },
+ "windowsAdmin": {
+ "title": "Windows प्रशासक मोड शिफारस केला आहे",
+ "description": "Agent Teams AI ला विशेषाधिकार नसल्यास OpenCode रनटाइम तपासण्या टाइम आउट होऊ शकतात. OpenCode टीम्स सुरू करण्यापूर्वी प्रशासक म्हणून चालवा वापरून अॅप रीस्टार्ट करा."
+ },
+ "webPreview": {
+ "title": "संपूर्ण कार्यक्षमतेसाठी डेस्कटॉप अॅप उघडा",
+ "description": "ब्राउझर आवृत्ती अजूनही विकासात आहे. प्रकल्प कृती, इंटिग्रेशन्स आणि लाइव्ह स्थिती अपडेट्स येथे मर्यादित असू शकतात. सर्व वैशिष्ट्ये विश्वसनीयरित्या वापरण्यासाठी डेस्कटॉप अॅप वापरा."
+ },
+ "updateBanner": {
+ "newVersionAvailable": "नवीन आवृत्ती उपलब्ध",
+ "restartNow": "आता रीस्टार्ट करा",
+ "viewDetails": "तपशील पाहा"
+ }
+}
diff --git a/src/features/localization/renderer/locales/mr/errors.json b/src/features/localization/renderer/locales/mr/errors.json
new file mode 100644
index 00000000..7d93f887
--- /dev/null
+++ b/src/features/localization/renderer/locales/mr/errors.json
@@ -0,0 +1,3 @@
+{
+ "fallback": "काहीतरी चूक झाली."
+}
diff --git a/src/features/localization/renderer/locales/mr/extensions.json b/src/features/localization/renderer/locales/mr/extensions.json
new file mode 100644
index 00000000..9bc4afe5
--- /dev/null
+++ b/src/features/localization/renderer/locales/mr/extensions.json
@@ -0,0 +1,688 @@
+{
+ "store": {
+ "actions": {
+ "addCustom": "कस्टम जोडा",
+ "openDashboard": "डॅशबोर्ड उघडा",
+ "refreshCatalog": "कॅटलॉग रिफ्रेश करा"
+ },
+ "capabilities": {
+ "mcp": "MCP: {{status}}",
+ "plugins": "Plugins: {{status}}",
+ "skills": "Skills: {{status}}"
+ },
+ "desktopOnly": "फक्त डेस्कटॉप अॅपमध्ये उपलब्ध.",
+ "provider": {
+ "checkingStatus": "प्रोव्हायडर स्थिती तपासत आहे...",
+ "connected": "कनेक्ट केले",
+ "loading": "लोड होत आहे...",
+ "needsSetup": "सेटअप आवश्यक",
+ "readyToConfigure": "कॉन्फिगर करण्यास तयार",
+ "unsupported": "असमर्थित"
+ },
+ "runtime": {
+ "checkingAvailabilityDescription": "प्लगइन्स, MCP सर्व्हर्स, कौशल्ये आणि प्रोव्हायडर कनेक्शन्स व्यवस्थापित करण्यासाठी एक्सटेन्शन्सना कॉन्फिगर केलेल्या रनटाइमची गरज आहे.",
+ "checkingAvailabilityTitle": "एक्सटेन्शन्स रनटाइम उपलब्धता तपासत आहे",
+ "failedToStartDescription": "रनटाइम त्याची स्टार्टअप हेल्थ चेक उत्तीर्ण होईपर्यंत एक्सटेन्शन्स अक्षम आहेत. ते दुरुस्त किंवा पुन्हा इन्स्टॉल करण्यासाठी डॅशबोर्ड उघडा.",
+ "failedToStartTitle": "कॉन्फिगर केलेला रनटाइम सापडला पण सुरू होण्यात अयशस्वी",
+ "multimodelCapabilitiesDescription": "प्रोव्हायडर समर्थन विभागानुसार भिन्न असू शकते. रनटाइम स्पष्टपणे समर्थन घोषित करतो तेथेच प्लगइन्स दाखवले जातात.",
+ "multimodelCapabilitiesTitle": "मल्टीमॉडेल रनटाइम क्षमता",
+ "needsSignInDescription": "{{runtime}} सापडले{{version}}, पण तुम्ही डॅशबोर्डवरून साइन इन करेपर्यंत प्लगइन इन्स्टॉल्स अक्षम आहेत.",
+ "needsSignInTitle": "{{runtime}} ला साइन-इनची गरज आहे",
+ "notAvailableDescription": "रनटाइम इन्स्टॉल होईपर्यंत एक्सटेन्शन्स अक्षम आहेत. ते इन्स्टॉल करण्यासाठी डॅशबोर्ड उघडा आणि पुन्हा प्रयत्न करा.",
+ "notAvailableTitle": "कॉन्फिगर केलेला रनटाइम उपलब्ध नाही",
+ "readyDescription": "या पृष्ठावरून प्लगइन्स इन्स्टॉल करता येतात{{versionSuffix}}.",
+ "readyTitle": "{{runtime}} तयार आहे",
+ "requiredForMutations": "एक्सटेन्शन्स इन्स्टॉल किंवा अनइन्स्टॉल करण्यासाठी कॉन्फिगर केलेला रनटाइम आवश्यक आहे. ते डॅशबोर्डवरून इन्स्टॉल किंवा दुरुस्त करा."
+ },
+ "sessionsRestartWarning": "चालू असलेली सत्रे रीस्टार्ट होईपर्यंत एक्सटेन्शन बदल घेणार नाहीत.",
+ "tabs": {
+ "apiKeys": {
+ "description": "ऑनलाइन सेवांसाठी सीक्रेट की. प्लगइन्स, सर्व्हर्स आणि इंटिग्रेशन्स कनेक्ट होऊन काम करू शकतील म्हणून त्या येथे जोडा.",
+ "label": "API की"
+ },
+ "mcpServers": {
+ "description": "बाह्य टूल्स आणि अॅप्सशी कनेक्शन्स. ते रनटाइमला या अॅपच्या पलीकडे डेटा वाचण्यास किंवा कृती करण्यास परवानगी देतात.",
+ "label": "MCP सर्व्हर्स"
+ },
+ "plugins": {
+ "description": "रनटाइमसाठी लहान अॅड-ऑन्स. मल्टीमॉडेल मोडमध्ये ते सध्या समर्थित असताना Anthropic सत्रांना लागू होतात. व्यापक प्रोव्हायडर समर्थन विकासात आहे.",
+ "label": "Plugins"
+ },
+ "skills": {
+ "description": "सामान्य कामांसाठी तयार सूचना. ते रनटाइमला पुनरावृत्त टास्क अधिक सातत्याने हाताळण्यास मदत करतात.",
+ "label": "Skills"
+ }
+ },
+ "title": "एक्सटेन्शन्स"
+ },
+ "pluginsPanel": {
+ "activeFilters": "{{count}} सक्रिय",
+ "browseByFit": "योग्यतेनुसार ब्राउझ करा",
+ "capabilities": "क्षमता",
+ "categories": "वर्ग",
+ "clearAllFilters": "सर्व फिल्टर्स साफ करा",
+ "clearFilters": "फिल्टर्स साफ करा",
+ "counts": {
+ "capabilities": "{{count}} क्षमता",
+ "categories": "{{count}} वर्ग",
+ "plugins": "{{count}} प्लगइन्स",
+ "capabilities_few": "{{count}} क्षमता",
+ "capabilities_many": "{{count}} क्षमता",
+ "capabilities_one": "{{count}} क्षमता",
+ "capabilities_other": "{{count}} क्षमता",
+ "categories_few": "{{count}} वर्ग",
+ "categories_many": "{{count}} वर्ग",
+ "categories_one": "{{count}} वर्ग",
+ "categories_other": "{{count}} वर्ग",
+ "plugins_few": "{{count}} प्लगइन्स",
+ "plugins_many": "{{count}} प्लगइन्स",
+ "plugins_one": "{{count}} प्लगइन",
+ "plugins_other": "{{count}} प्लगइन्स"
+ },
+ "empty": {
+ "description": "नवीन प्लगइन्ससाठी नंतर पुन्हा तपासा",
+ "filteredDescription": "तुमचा शोध किंवा फिल्टर निकष समायोजित करून पाहा",
+ "filteredTitle": "तुमच्या फिल्टर्सशी कोणतेही प्लगइन्स जुळत नाहीत",
+ "title": "कोणतेही प्लगइन्स उपलब्ध नाहीत"
+ },
+ "filterDescription": "वर्ग, क्षमता किंवा इन्स्टॉल केलेल्या स्थितीनुसार कॅटलॉग संकुचित करा.",
+ "installedOnly": "फक्त इन्स्टॉल केलेले",
+ "providerSupportNotice": "प्लगइन समर्थन सध्या फक्त Anthropic (Claude) सत्रांसाठी हमी दिलेले आहे. आम्ही सर्व एजंट्सवर प्लगइन्सना समर्थन देण्यासाठी काम करत आहोत.",
+ "resultsUpdateInstantly": "तुम्ही फिल्टर्स परिष्कृत करताच परिणाम त्वरित अपडेट होतात.",
+ "searchPlaceholder": "प्लगइन्स शोधा...",
+ "selectedCount": "{{count}} निवडले",
+ "showing": "{{total}} पैकी {{shown}} प्लगइन्स दाखवत आहे",
+ "sort": {
+ "category": "वर्ग",
+ "nameAsc": "नाव अ-ज्ञ",
+ "nameDesc": "नाव ज्ञ-अ",
+ "popular": "लोकप्रिय"
+ },
+ "activeFilters_few": "{{count}} सक्रिय",
+ "activeFilters_many": "{{count}} सक्रिय",
+ "activeFilters_one": "{{count}} सक्रिय",
+ "activeFilters_other": "{{count}} सक्रिय",
+ "selectedCount_few": "{{count}} निवडले",
+ "selectedCount_many": "{{count}} निवडले",
+ "selectedCount_one": "{{count}} निवडले",
+ "selectedCount_other": "{{count}} निवडले"
+ },
+ "customMcp": {
+ "actions": {
+ "add": "जोडा",
+ "cancel": "रद्द करा",
+ "install": "इन्स्टॉल करा",
+ "installing": "इन्स्टॉल करत आहे..."
+ },
+ "description": "कॅटलॉगशिवाय मॅन्युअली सर्व्हर जोडा.",
+ "errors": {
+ "installFailed": "इन्स्टॉल अयशस्वी",
+ "invalidServerName": "अवैध सर्व्हर नाव. अल्फान्यूमेरिक अक्षरे, डॅशेस, अंडरस्कोअर्स, डॉट्स वापरा.",
+ "npmPackageRequired": "npm पॅकेज नाव आवश्यक आहे",
+ "serverNameRequired": "सर्व्हर नाव आवश्यक आहे",
+ "serverUrlRequired": "सर्व्हर URL आवश्यक आहे"
+ },
+ "fields": {
+ "environmentVariables": "एन्व्हायर्न्मेंट व्हेरिएबल्स",
+ "headers": "हेडर्स",
+ "npmPackage": "npm पॅकेज",
+ "scope": "व्याप्ती",
+ "serverName": "सर्व्हर नाव",
+ "serverUrl": "सर्व्हर URL",
+ "transport": "ट्रान्सपोर्ट",
+ "transportType": "ट्रान्सपोर्ट प्रकार",
+ "versionOptional": "आवृत्ती (ऐच्छिक)"
+ },
+ "title": "कस्टम MCP सर्व्हर जोडा",
+ "transport": {
+ "httpSse": "HTTP / SSE",
+ "stdio": "Stdio (npm)"
+ },
+ "placeholders": {
+ "headerName": "Header-Name",
+ "envVarName": "ENV_VAR_NAME",
+ "serverName": "my-server",
+ "latest": "latest",
+ "value": "value",
+ "serverUrl": "https://api.example.com/mcp"
+ }
+ },
+ "mcpDetail": {
+ "auth": {
+ "remoteMayNeedHeaders": "रजिस्ट्री त्यांचे वर्णन करत नसतानाही रिमोट MCP सर्व्हर्सना कस्टम हेडर्स किंवा API की आवश्यक असू शकतात. इन्स्टॉलनंतर कनेक्शन अयशस्वी झाल्यास, प्रोव्हायडर दस्तऐवज तपासा.",
+ "required": "या सर्व्हरला प्रमाणीकरण आवश्यक आहे"
+ },
+ "diagnostics": {
+ "launchTarget": "लॉन्च लक्ष्य"
+ },
+ "form": {
+ "autoFilled": "ऑटो-भरले",
+ "environmentVariables": "एन्व्हायर्न्मेंट व्हेरिएबल्स",
+ "headers": "हेडर्स",
+ "scope": "व्याप्ती",
+ "serverName": "सर्व्हर नाव"
+ },
+ "install": {
+ "httpTransport": "HTTP: {{transport}}",
+ "manualSetupDescription": "या सर्व्हरला मॅन्युअल सेटअप आवश्यक आहे. इन्स्टॉलेशन सूचनांसाठी रिपॉझिटरी तपासा.",
+ "manualSetupRequired": "मॅन्युअल सेटअप आवश्यक",
+ "npmPackage": "npm: {{package}}",
+ "manage": "इन्स्टॉलेशन व्यवस्थापित करा",
+ "install": "सर्व्हर इन्स्टॉल करा"
+ },
+ "links": {
+ "glama": "Glama",
+ "repository": "रिपॉझिटरी",
+ "website": "वेबसाइट"
+ },
+ "metadata": {
+ "author": "लेखक",
+ "githubStars": "GitHub स्टार्स",
+ "hosting": "होस्टिंग",
+ "installType": "इन्स्टॉल प्रकार",
+ "license": "परवाना",
+ "published": "प्रकाशित",
+ "source": "स्रोत",
+ "updated": "अपडेट केले",
+ "version": "आवृत्ती"
+ },
+ "scope": {
+ "local": "स्थानिक",
+ "project": "प्रकल्प"
+ },
+ "tools": {
+ "title": "टूल्स ({{count}})",
+ "title_few": "टूल्स ({{count}})",
+ "title_many": "टूल्स ({{count}})",
+ "title_one": "टूल ({{count}})",
+ "title_other": "टूल्स ({{count}})"
+ },
+ "placeholders": {
+ "serverName": "my-server"
+ }
+ },
+ "skillEditor": {
+ "actions": {
+ "cancel": "रद्द करा",
+ "createSkill": "कौशल्य तयार करा",
+ "preparing": "तयारी करत आहे...",
+ "reviewAndCreate": "पुनरावलोकन करा आणि तयार करा",
+ "reviewAndSave": "पुनरावलोकन करा आणि जतन करा",
+ "saveSkill": "कौशल्य जतन करा"
+ },
+ "advanced": {
+ "customDescription": "हे कौशल्य कस्टम markdown स्वरूप वापरते, म्हणून ते येथे थेट संपादित करा.",
+ "customTitle": "2. SKILL.md एडिटर",
+ "description": "बहुतेक लोक हे वगळू शकतात. तुम्हाला कच्च्या markdown फाइलवर थेट नियंत्रण हवे असेल तरच ते उघडा.",
+ "hide": "प्रगत एडिटर लपवा",
+ "resetFromStructuredFields": "संरचित फील्ड्समधून रीसेट करा",
+ "show": "प्रगत एडिटर दाखवा",
+ "title": "4. प्रगत SKILL.md एडिटर"
+ },
+ "basics": {
+ "description": "या कौशल्याला स्पष्ट नाव द्या, कोण ते वापरू शकतो ते निवडा आणि ते कुठे राहावे ते ठरवा.",
+ "title": "1. मूलभूत गोष्टी"
+ },
+ "description": {
+ "create": "वर्कफ्लोचे साध्या भाषेत वर्णन करा, तयार होणाऱ्या फाइल्सचे पुनरावलोकन करा, मग ते जतन करा.",
+ "edit": "हे कौशल्य अपडेट करा, परिणामी फाइल बदलांचे पुनरावलोकन करा, मग ते जतन करा."
+ },
+ "extraFiles": {
+ "addedFiles": "जोडलेल्या फाइल्स:",
+ "assets": "अॅसेट्स",
+ "assetsDescription": "स्क्रीनशॉट्स किंवा बंडल केलेले मीडिया फक्त वर्कफ्लो स्पष्ट करण्यास मदत करत असल्यासच जोडा.",
+ "description": "हे कौशल्य खरोखर गरजेचे असल्यासच सहाय्यक दस्तऐवज, स्क्रिप्ट्स किंवा अॅसेट्स जोडा.",
+ "lockedForEdits": "रूट आणि फोल्डर संपादनांसाठी लॉक केले आहेत",
+ "optionalDescription": "स्टार्टर फाइल्स जोडा ज्या पुनरावलोकनात समाविष्ट होतील आणि `SKILL.md` सोबत लिहिल्या जातील.",
+ "optionalTitle": "ऐच्छिक फाइल्स",
+ "references": "संदर्भ",
+ "referencesDescription": "रनटाइम पाहू शकेल असे सहाय्यक दस्तऐवज, लिंक्स किंवा उदाहरणे जोडा.",
+ "scripts": "स्क्रिप्ट्स",
+ "scriptsDescription": "हेल्पर कमांड्स किंवा सेटअप नोट्स जोडा. हे कौशल्य शेअर करण्यापूर्वी काळजीपूर्वक पुनरावलोकन करा.",
+ "title": "3. अतिरिक्त फाइल्स"
+ },
+ "fields": {
+ "compatibility": "सुसंगतता",
+ "description": "वर्णन",
+ "folderName": "फोल्डर नाव",
+ "folderNameHint": "पुनरावलोकन लगेच चालावे म्हणून आम्ही कौशल्याच्या नावावरून हे स्वयंचलितपणे सुचवतो.",
+ "invocation": "ते कसे वापरले जावे",
+ "license": "परवाना",
+ "name": "कौशल्य नाव",
+ "notes": "अतिरिक्त नोट्स किंवा गार्डरेल्स",
+ "root": "ते कुठे संग्रहित करायचे",
+ "scope": "कोण ते वापरू शकतो",
+ "steps": "अनुसरण करण्याचे मुख्य टप्पे",
+ "whenToUse": "हे केव्हा वापरायचे"
+ },
+ "instructions": {
+ "description": "हे विभाग तुमच्यासाठी कौशल्य फाइल तयार करतात, म्हणून तुम्हाला हवे असल्याशिवाय markdown संपादित करण्याची गरज नाही.",
+ "locked": "तुम्ही खाली मॅन्युअल `SKILL.md` संपादनावर स्विच केल्यामुळे संरचित फील्ड्स लॉक केले आहेत.",
+ "title": "2. सूचना"
+ },
+ "invocation": {
+ "auto": "स्वयंचलितपणे वापरले जाऊ शकते",
+ "manualOnly": "फक्त तुम्ही विचारल्यावरच"
+ },
+ "placeholders": {
+ "description": "हे कौशल्य कशात मदत करते",
+ "name": "संक्षिप्त कौशल्य नाव लिहा",
+ "notes": "उदाहरण: गहाळ चाचण्या, रिग्रेशन्स आणि जोखमीच्या गृहीतकांकडे लक्ष वेधा.",
+ "steps": "1. संबंधित फाइल्स तपासा.\n2. प्रथम मुख्य जोखीम स्पष्ट करा.\n3. सर्वात सुरक्षित दुरुस्ती सुचवा.",
+ "whenToUse": "उदाहरण: कार्य कोड पुनरावलोकन किंवा बग ट्रायाज विनंती असताना हे वापरा.",
+ "license": "MIT",
+ "compatibility": "claude-code, cursor"
+ },
+ "review": {
+ "creating": "एक कौशल्य तयार करत आहे",
+ "hint": "प्रथम फाइल बदलांचे पुनरावलोकन करा, मग पुढील टप्प्यात जतन करण्याची पुष्टी करा.",
+ "saving": "हे कौशल्य जतन करत आहे"
+ },
+ "root": {
+ "codexOnly": " - फक्त Codex",
+ "shared": " - शेअर केलेले"
+ },
+ "scope": {
+ "project": "प्रकल्प: {{project}}",
+ "projectUnavailable": "प्रकल्प उपलब्ध नाही",
+ "user": "वापरकर्ता"
+ },
+ "title": {
+ "create": "कौशल्य तयार करा",
+ "edit": "कौशल्य संपादित करा"
+ }
+ },
+ "skillDetail": {
+ "actions": {
+ "cancel": "रद्द करा",
+ "delete": "हटवा",
+ "deleteSkill": "कौशल्य हटवा",
+ "deleting": "हटवत आहे...",
+ "editSkill": "कौशल्य संपादित करा",
+ "openFolder": "फोल्डर उघडा",
+ "openSkillFile": "SKILL.md उघडा",
+ "retry": "पुन्हा प्रयत्न करा"
+ },
+ "badges": {
+ "assets": "अॅसेट्स",
+ "autoUse": "स्वयं वापर",
+ "hasScripts": "स्क्रिप्ट्स आहेत",
+ "manualUse": "मॅन्युअल वापर",
+ "references": "संदर्भ",
+ "storedIn": "{{root}} मध्ये संग्रहित"
+ },
+ "deleteDialog": {
+ "description": "हे कौशल्य हटवायचे आणि कचऱ्यात हलवायचे?",
+ "descriptionWithName": "\"{{name}}\" हटवायचे आणि कचऱ्यात हलवायचे? गरज असल्यास तुम्ही ते नंतर कचऱ्यातून पुनर्संचयित करू शकता.",
+ "title": "कौशल्य हटवायचे?"
+ },
+ "descriptionFallback": "आढळलेला कौशल्य मेटाडेटा आणि कच्च्या सूचना तपासा.",
+ "errors": {
+ "deleteFailed": "कौशल्य हटवणे अयशस्वी",
+ "loadFailed": "हे कौशल्य लोड करण्यास असमर्थ."
+ },
+ "files": {
+ "advancedDetails": "प्रगत फाइल तपशील",
+ "assets": "अॅसेट्स",
+ "references": "संदर्भ",
+ "scripts": "स्क्रिप्ट्स",
+ "storedAt": "येथे संग्रहित"
+ },
+ "includes": {
+ "assets": "अॅसेट्स",
+ "instructionsOnly": "फक्त कौशल्य सूचना",
+ "references": "संदर्भ",
+ "scripts": "स्क्रिप्ट्स"
+ },
+ "invocation": {
+ "auto": "कार्याशी जुळल्यावर स्वयंचलितपणे चालते.",
+ "manualOnly": "तुम्ही स्पष्टपणे विचारल्यावरच चालते."
+ },
+ "issues": {
+ "bundledScripts": "या कौशल्यात बंडल केलेल्या स्क्रिप्ट्स समाविष्ट आहेत",
+ "reviewCarefully": "हे कौशल्य वापरण्यापूर्वी काळजीपूर्वक पुनरावलोकन करा"
+ },
+ "loading": "कौशल्य तपशील लोड होत आहेत...",
+ "scope": {
+ "personal": "तुमची वैयक्तिक कौशल्ये",
+ "projectOnly": "फक्त हा प्रकल्प"
+ },
+ "summary": {
+ "howUsed": "ते कसे वापरले जाते",
+ "included": "त्यासोबत काय येते",
+ "whoCanUse": "कोण ते वापरू शकतो"
+ },
+ "titleFallback": "कौशल्य तपशील"
+ },
+ "skillsPanel": {
+ "actions": {
+ "createSkill": "कौशल्य तयार करा",
+ "import": "इंपोर्ट करा"
+ },
+ "badges": {
+ "assets": "अॅसेट्स",
+ "hasScripts": "स्क्रिप्ट्स आहेत",
+ "needsAttention": "लक्ष आवश्यक",
+ "references": "संदर्भ",
+ "storedIn": "{{root}} मध्ये संग्रहित"
+ },
+ "configuredRuntime": "कॉन्फिगर केलेला रनटाइम",
+ "counts": {
+ "codexOnly": "{{count}} फक्त Codex",
+ "personal": "{{count}} वैयक्तिक",
+ "project": "{{count}} प्रकल्प",
+ "shared": "{{count}} शेअर केलेले",
+ "total": "एकूण {{count}}",
+ "codexOnly_few": "{{count}} फक्त Codex",
+ "codexOnly_many": "{{count}} फक्त Codex",
+ "codexOnly_one": "{{count}} फक्त Codex",
+ "codexOnly_other": "{{count}} फक्त Codex",
+ "personal_few": "{{count}} वैयक्तिक",
+ "personal_many": "{{count}} वैयक्तिक",
+ "personal_one": "{{count}} वैयक्तिक",
+ "personal_other": "{{count}} वैयक्तिक",
+ "project_few": "{{count}} प्रकल्प",
+ "project_many": "{{count}} प्रकल्प",
+ "project_one": "{{count}} प्रकल्प",
+ "project_other": "{{count}} प्रकल्प",
+ "shared_few": "{{count}} शेअर केलेले",
+ "shared_many": "{{count}} शेअर केलेले",
+ "shared_one": "{{count}} शेअर केलेले",
+ "shared_other": "{{count}} शेअर केलेले",
+ "total_few": "एकूण {{count}}",
+ "total_many": "एकूण {{count}}",
+ "total_one": "एकूण {{count}}",
+ "total_other": "एकूण {{count}}"
+ },
+ "empty": {
+ "noMatches": "तुमच्या शोधाशी कोणतीही कौशल्ये जुळत नाहीत",
+ "noMatchesDescription": "वेगळा शोध शब्द वापरून पाहा किंवा फिल्टर्स बदला.",
+ "noSkills": "अद्याप कोणतीही कौशल्ये नाहीत",
+ "noSkillsDescription": "पुनरावृत्त वर्कफ्लो शिकवण्यासाठी तुमचे पहिले कौशल्य तयार करा, किंवा तुम्ही आधीच वापरत असलेले एक इंपोर्ट करा."
+ },
+ "filters": {
+ "all": "सर्व कौशल्ये",
+ "codexOnly": "फक्त Codex",
+ "hasScripts": "स्क्रिप्ट्स आहेत",
+ "needsAttention": "लक्ष आवश्यक",
+ "personal": "वैयक्तिक",
+ "project": "प्रकल्प",
+ "shared": "शेअर केलेले"
+ },
+ "hero": {
+ "codexAvailable": "कौशल्य फक्त Codex साठीच राहावे तेव्हा `.codex` वापरा.",
+ "codexUnavailable": "विद्यमान `.codex` कौशल्ये येथे संपादनयोग्य राहतात, पण नवीन फक्त-Codex कौशल्यांसाठी Codex रनटाइम सक्षम असणे आवश्यक आहे.",
+ "description": "कौशल्ये ही पुनर्वापरयोग्य सूचना आहेत जी रनटाइमला समान प्रकारची कार्ये अधिक सातत्याने हाताळण्यास मदत करतात.",
+ "guidance": "तुम्हाला सर्वत्र हव्या असलेल्या सवयींसाठी वैयक्तिक कौशल्ये वापरा. फक्त एका कोडबेसमध्ये अर्थपूर्ण असलेल्या वर्कफ्लोसाठी प्रकल्प कौशल्ये वापरा.",
+ "personalContext": "तुम्हाला आत्ता फक्त तुमची वैयक्तिक कौशल्ये दिसत आहेत.",
+ "projectContext": "तुम्हाला {{project}} साठीची कौशल्ये आणि तुमची वैयक्तिक कौशल्ये दिसत आहेत.",
+ "title": "पुनरावृत्त काम शिकवा"
+ },
+ "invocation": {
+ "auto": "योग्य असल्यावर स्वयंचलितपणे चालते",
+ "manualOnly": "तुम्ही स्पष्टपणे विचारल्यावरच चालते"
+ },
+ "loading": {
+ "loading": "कौशल्ये लोड होत आहेत...",
+ "refreshing": "कौशल्ये रिफ्रेश करत आहे..."
+ },
+ "runtimeAudience": "`.claude`, `.cursor` आणि `.agents` मधील शेअर केलेली कौशल्ये {{audience}} ला उपलब्ध आहेत. `.codex` मध्ये संग्रहित कौशल्ये Codex समर्थन उपलब्ध असताना फक्त-Codex राहतात.",
+ "scope": {
+ "project": "हा प्रकल्प",
+ "user": "वैयक्तिक"
+ },
+ "searchPlaceholder": "कौशल्याच्या नावाने किंवा ते कशात मदत करते त्यानुसार शोधा...",
+ "sections": {
+ "personal": {
+ "description": "तुम्हाला सर्वत्र उपलब्ध हव्या असलेल्या सवयी आणि सूचना.",
+ "title": "वैयक्तिक कौशल्ये"
+ },
+ "project": {
+ "description": "फक्त या कोडबेससाठी अर्थपूर्ण असलेले वर्कफ्लो.",
+ "title": "प्रकल्प कौशल्ये"
+ }
+ },
+ "sort": {
+ "label": "कौशल्ये क्रमवारी लावा",
+ "name": "नाव",
+ "recent": "अलीकडील"
+ },
+ "status": {
+ "hasScripts": "स्क्रिप्ट्स समाविष्ट आहेत, म्हणून काळजीपूर्वक पुनरावलोकन करा",
+ "needsAttention": "तुम्ही त्यावर अवलंबून राहण्यापूर्वी लक्ष आवश्यक",
+ "ready": "वापरण्यास तयार"
+ },
+ "success": {
+ "created": "कौशल्य यशस्वीरित्या तयार झाले.",
+ "imported": "कौशल्य यशस्वीरित्या इंपोर्ट झाले.",
+ "saved": "कौशल्य यशस्वीरित्या जतन झाले."
+ }
+ },
+ "pluginDetail": {
+ "unknown": "अज्ञात",
+ "metadata": {
+ "author": "लेखक",
+ "category": "वर्ग",
+ "source": "स्रोत",
+ "version": "आवृत्ती",
+ "capabilities": "क्षमता",
+ "installs": "इन्स्टॉल्स"
+ },
+ "scope": {
+ "label": "व्याप्ती:",
+ "options": {
+ "user": "वापरकर्ता (जागतिक)",
+ "project": "प्रकल्प (शेअर केलेले)",
+ "local": "स्थानिक (gitignored)"
+ }
+ },
+ "links": {
+ "homepage": "मुख्यपृष्ठ",
+ "contact": "संपर्क"
+ },
+ "readme": {
+ "loading": "README लोड होत आहे...",
+ "empty": "कोणतेही README उपलब्ध नाही."
+ }
+ },
+ "skillImport": {
+ "title": "कौशल्य इंपोर्ट करा",
+ "description": "विद्यमान कौशल्य फोल्डर निवडा, काय कॉपी होईल त्याचे पुनरावलोकन करा, मग ते तुमच्या समर्थित कौशल्य स्थानांपैकी एकात इंपोर्ट करा.",
+ "steps": {
+ "chooseFolder": {
+ "title": "1. कौशल्य फोल्डर निवडा",
+ "description": "हे असे फोल्डर असावे ज्यात आधीच `SKILL.md`, `Skill.md` किंवा `skill.md` फाइल आहे."
+ },
+ "location": {
+ "title": "2. ते कुठे राहावे ते ठरवा",
+ "description": "वैयक्तिक कौशल्ये सर्वत्र चालतात. प्रकल्प कौशल्ये फक्त एका कोडबेससाठी दिसतात."
+ }
+ },
+ "fields": {
+ "sourceFolder": "स्रोत फोल्डर",
+ "destinationFolderName": "गंतव्य फोल्डर नाव",
+ "audience": "कोण ते वापरू शकतो",
+ "storage": "ते कुठे संग्रहित करायचे"
+ },
+ "placeholders": {
+ "defaultFolderName": "डीफॉल्टनुसार स्रोत फोल्डर नाव"
+ },
+ "actions": {
+ "browse": "ब्राउझ करा",
+ "cancel": "रद्द करा",
+ "preparing": "तयारी करत आहे...",
+ "reviewAndImport": "पुनरावलोकन करा आणि इंपोर्ट करा",
+ "importSkill": "कौशल्य इंपोर्ट करा",
+ "backToImport": "इंपोर्टकडे परत"
+ },
+ "scope": {
+ "user": "वापरकर्ता",
+ "project": "प्रकल्प: {{project}}",
+ "projectUnavailable": "प्रकल्प उपलब्ध नाही"
+ },
+ "rootSuffix": {
+ "codexOnly": " - फक्त Codex",
+ "shared": " - शेअर केलेले"
+ },
+ "reviewHint": "प्रथम कॉपी केलेल्या फाइल्सचे पुनरावलोकन करा, मग पुढील टप्प्यात इंपोर्टची पुष्टी करा.",
+ "reviewLabel": "हे कौशल्य इंपोर्ट करत आहे",
+ "errors": {
+ "missingSkillFile": "हे फोल्डर अद्याप कौशल्यासारखे दिसत नाही. त्याला SKILL.md, Skill.md किंवा skill.md फाइलची गरज आहे.",
+ "symbolicLinks": "या फोल्डरमध्ये सिम्बॉलिक लिंक्स आहेत. लिंक्सऐवजी खऱ्या फाइल्स इंपोर्ट करा.",
+ "tooManyFiles": "हे कौशल्य फोल्डर एकाच वेळी इंपोर्ट करण्यास खूप मोठे आहे. अतिरिक्त फाइल्स काढा आणि पुन्हा प्रयत्न करा.",
+ "tooLarge": "हे कौशल्य फोल्डर सुरक्षितपणे इंपोर्ट करण्यास खूप मोठे आहे. मोठ्या अॅसेट्स कमी करा आणि पुन्हा प्रयत्न करा.",
+ "invalidFolderName": "अक्षरे, अंक, डॉट्स, डॅशेस किंवा अंडरस्कोअर्स वापरून सोपे गंतव्य फोल्डर नाव निवडा.",
+ "mustBeDirectory": "इंपोर्ट करण्यासाठी एकल फाइल नव्हे तर फोल्डर निवडा.",
+ "reviewFailed": "इंपोर्ट बदलांचे पुनरावलोकन करणे अयशस्वी",
+ "importFailed": "कौशल्य इंपोर्ट करणे अयशस्वी"
+ }
+ },
+ "mcpPanel": {
+ "sort": {
+ "nameAsc": "नाव अ→ज्ञ",
+ "nameDesc": "नाव ज्ञ→अ",
+ "toolsDesc": "सर्वाधिक टूल्स"
+ },
+ "health": {
+ "title": "MCP आरोग्य स्थिती",
+ "checkingViaRuntime": "{{runtime}} द्वारे इन्स्टॉल केलेले MCP सर्व्हर्स तपासत आहे ...",
+ "lastChecked": "शेवटचे तपासले {{time}}",
+ "description": "इन्स्टॉल केलेली MCP कनेक्टिव्हिटी पडताळण्यासाठी या पृष्ठावरून डायग्नॉस्टिक्स चालवा.",
+ "checking": "तपासत आहे...",
+ "checkStatus": "स्थिती तपासा"
+ },
+ "diagnostics": {
+ "title": "रनटाइम MCP डायग्नॉस्टिक्स",
+ "serversCount": "{{count}} सर्व्हर्स",
+ "serversCount_one": "{{count}} सर्व्हर",
+ "serversCount_other": "{{count}} सर्व्हर्स",
+ "waiting": "डायग्नॉस्टिक्स परिणामांची वाट पाहत आहे...",
+ "disableReasons": {
+ "checkingRuntimeStatus": "रनटाइम स्थिती तपासत आहे...",
+ "checkingRuntimeAvailability": "रनटाइम उपलब्धता तपासत आहे...",
+ "runtimeFailedToStart": "कॉन्फिगर केलेला रनटाइम सापडला पण सुरू होण्यात अयशस्वी. ते दुरुस्त किंवा पुन्हा इन्स्टॉल करण्यासाठी डॅशबोर्ड उघडा.",
+ "runtimeRequired": "कॉन्फिगर केलेला रनटाइम आवश्यक आहे. ते डॅशबोर्डवरून इन्स्टॉल किंवा दुरुस्त करा."
+ },
+ "serversCount_few": "{{count}} सर्व्हर्स",
+ "serversCount_many": "{{count}} सर्व्हर्स"
+ },
+ "searchPlaceholder": "MCP सर्व्हर्स शोधा...",
+ "runtime": {
+ "notAvailable": "{{runtime}} उपलब्ध नाही",
+ "notInstalled": "{{runtime}} इन्स्टॉल केलेले नाही",
+ "requiredDescription": "MCP आरोग्य तपासण्यांना {{runtime}} आवश्यक आहे. ते इन्स्टॉल किंवा दुरुस्त करण्यासाठी डॅशबोर्डवर जा."
+ },
+ "empty": {
+ "searchTitle": "कोणतेही सर्व्हर्स सापडले नाहीत",
+ "title": "कोणतेही MCP सर्व्हर्स उपलब्ध नाहीत",
+ "searchDescription": "वेगळा शोध शब्द वापरून पाहा",
+ "description": "नवीन सर्व्हर्ससाठी नंतर पुन्हा तपासा"
+ },
+ "loadMore": "अधिक लोड करा"
+ },
+ "apiKeys": {
+ "description": "MCP सर्व्हर्स इन्स्टॉल करताना ऑटो-भरण्यासाठी API की सुरक्षितपणे संग्रहित करा.",
+ "storage": {
+ "osKeychain": "की {{backend}} द्वारे एन्क्रिप्ट केल्या जातात आणि निर्बंधित फाइल परवानग्यांसह (फक्त-मालक) संग्रहित केल्या जातात.",
+ "localEncryption": "OS किचेन उपलब्ध नाही - की स्थानिकरित्या AES-256 ने एन्क्रिप्ट केल्या जातात. अधिक संरक्षणासाठी, एक keyring सेवा (gnome-keyring, kwallet) इन्स्टॉल करा."
+ },
+ "actions": {
+ "add": "API की जोडा",
+ "addFirst": "तुमची पहिली की जोडा",
+ "edit": "संपादित करा",
+ "copied": "कॉपी केले!",
+ "copyEnvVarName": "env var नाव कॉपी करा",
+ "confirmDelete": "पुष्टी करण्यासाठी पुन्हा क्लिक करा",
+ "delete": "हटवा"
+ },
+ "empty": {
+ "title": "कोणत्याही API की जतन केल्या नाहीत",
+ "description": "MCP सर्व्हर्स इन्स्टॉल करताना एन्व्हायर्न्मेंट व्हेरिएबल्स ऑटो-भरण्यासाठी की जोडा."
+ },
+ "form": {
+ "addTitle": "API की जोडा",
+ "editTitle": "API की संपादित करा",
+ "addDescription": "MCP सर्व्हर इन्स्टॉलेशन्समध्ये ऑटो-भरण्यासाठी API की संग्रहित करा.",
+ "editDescription": "की तपशील अपडेट करा. तुम्हाला मूल्य पुन्हा टाकावे लागेल.",
+ "keychainUnavailable": "OS किचेन उपलब्ध नाही - की स्थानिकरित्या AES-256 ने एन्क्रिप्ट केल्या. OS-स्तरीय संरक्षणासाठी gnome-keyring इन्स्टॉल करा.",
+ "name": "नाव",
+ "namePlaceholder": "उदा. OpenAI Production",
+ "environmentVariableName": "एन्व्हायर्न्मेंट व्हेरिएबल नाव",
+ "envVarPlaceholder": "उदा. OPENAI_API_KEY",
+ "value": "मूल्य",
+ "reenterValue": "की मूल्य पुन्हा टाका",
+ "valuePlaceholder": "sk-...",
+ "scope": "व्याप्ती",
+ "userScopeLabel": "वापरकर्ता (जागतिक)",
+ "projectScopeLabel": "प्रकल्प: {{project}}",
+ "projectUnavailable": "प्रकल्प उपलब्ध नाही",
+ "boundTo": "{{path}} शी बांधलेले",
+ "cancel": "रद्द करा",
+ "saving": "जतन करत आहे...",
+ "update": "अपडेट करा",
+ "save": "जतन करा",
+ "errors": {
+ "invalidEnvVarFormat": "अक्षरे, अंक, अंडरस्कोअर्स वापरा. अक्षर किंवा अंडरस्कोअरने सुरू झाले पाहिजे.",
+ "nameRequired": "नाव आवश्यक आहे",
+ "envVarRequired": "एन्व्हायर्न्मेंट व्हेरिएबल नाव आवश्यक आहे",
+ "invalidEnvVar": "अवैध एन्व्हायर्न्मेंट व्हेरिएबल नाव",
+ "valueRequired": "की मूल्य आवश्यक आहे",
+ "projectScopeRequiresProject": "प्रकल्प-व्याप्तीच्या API की ना एक सक्रिय प्रकल्प आवश्यक आहे",
+ "saveFailed": "जतन करणे अयशस्वी"
+ }
+ }
+ },
+ "skillReview": {
+ "title": "कौशल्य बदलांचे पुनरावलोकन करा",
+ "description": "{{reviewLabel}} प्रथम फाइलसिस्टम बदलांचे पूर्वावलोकन करते. तुम्ही खाली पुष्टी करेपर्यंत काहीही लिहिले जात नाही.",
+ "noPreview": "कोणतेही पूर्वावलोकन उपलब्ध नाही.",
+ "confirmPromptPrefix": "खाली diff चे पुनरावलोकन करा, मग वापरा",
+ "confirmPromptSuffix": "हे बदल लागू करण्यासाठी.",
+ "noChanges": "अद्याप कोणतेही फाइल बदल आढळले नाहीत.",
+ "binaryBadge": "बायनरी",
+ "binaryPreviewHidden": "बायनरी फाइल पूर्वावलोकन दाखवले जात नाही. फाइल जशीच्या तशी कॉपी केली जाईल.",
+ "summary": {
+ "fileChanges": "{{count}} फाइल बदल",
+ "fileChanges_one": "{{count}} फाइल बदल",
+ "fileChanges_other": "{{count}} फाइल बदल",
+ "new": "{{count}} नवीन",
+ "updated": "{{count}} अपडेट केले",
+ "removed": "{{count}} काढले",
+ "binary": "{{count}} बायनरी",
+ "fileChanges_few": "{{count}} फाइल बदल",
+ "fileChanges_many": "{{count}} फाइल बदल"
+ }
+ },
+ "mcpCard": {
+ "toolsCount": "{{count}} टूल्स",
+ "toolsCount_one": "{{count}} टूल",
+ "toolsCount_other": "{{count}} टूल्स",
+ "envCount": "{{count}} envs",
+ "envCount_one": "{{count}} env",
+ "envCount_other": "{{count}} envs",
+ "auth": "ऑथ",
+ "byAuthor": "{{author}} द्वारे",
+ "hosting": {
+ "remote": "रिमोट",
+ "local": "स्थानिक",
+ "both": "दोन्ही"
+ },
+ "toolsCount_few": "{{count}} टूल्स",
+ "toolsCount_many": "{{count}} टूल्स",
+ "envCount_few": "{{count}} envs",
+ "envCount_many": "{{count}} envs",
+ "repository": "रिपॉझिटरी",
+ "website": "वेबसाइट"
+ },
+ "installButton": {
+ "installing": "इन्स्टॉल करत आहे...",
+ "removing": "काढत आहे...",
+ "done": "पूर्ण",
+ "retry": "पुन्हा प्रयत्न करा",
+ "uninstall": "अनइन्स्टॉल करा",
+ "install": "इन्स्टॉल करा"
+ },
+ "pluginCard": {
+ "official": "अधिकृत"
+ }
+}
diff --git a/src/features/localization/renderer/locales/mr/report.json b/src/features/localization/renderer/locales/mr/report.json
new file mode 100644
index 00000000..e5de10d6
--- /dev/null
+++ b/src/features/localization/renderer/locales/mr/report.json
@@ -0,0 +1,217 @@
+{
+ "cost": {
+ "breakdownTitle": "खर्च विभागणी (प्रति 1M टोकन्स)",
+ "cacheRead": "कॅश रीड",
+ "cacheWrite": "कॅश राइट",
+ "cost": "खर्च",
+ "input": "इनपुट",
+ "noCommits": "कोणतेही कमिट्स नाहीत",
+ "noLinesChanged": "कोणत्याही ओळी बदलल्या नाहीत",
+ "output": "आउटपुट",
+ "parent": "पालक: {{cost}}",
+ "parentCost": "पालक खर्च",
+ "perCommit": "प्रति कमिट",
+ "perCommitFormula": "एकूण खर्च ÷ {{count}} कमिट",
+ "perCommitFormula_few": "एकूण खर्च ÷ {{count}} कमिट्स",
+ "perCommitFormula_many": "एकूण खर्च ÷ {{count}} कमिट्स",
+ "perCommitFormula_one": "एकूण खर्च ÷ {{count}} कमिट",
+ "perCommitFormula_other": "एकूण खर्च ÷ {{count}} कमिट्स",
+ "perLineChanged": "प्रति बदललेली ओळ",
+ "perLineFormula": "एकूण खर्च ÷ {{count}} ओळ",
+ "perLineFormula_few": "एकूण खर्च ÷ {{count}} ओळी",
+ "perLineFormula_many": "एकूण खर्च ÷ {{count}} ओळी",
+ "perLineFormula_one": "एकूण खर्च ÷ {{count}} ओळ",
+ "perLineFormula_other": "एकूण खर्च ÷ {{count}} ओळी",
+ "subagent": "सबएजंट: {{cost}}",
+ "subagentCost": "सबएजंट खर्च",
+ "title": "खर्च विश्लेषण",
+ "total": "एकूण"
+ },
+ "insights": {
+ "agent": "एजंट",
+ "agent_few": "एजंट्स",
+ "agent_many": "एजंट्स",
+ "agent_one": "एजंट",
+ "agent_other": "एजंट्स",
+ "agentTree": "एजंट ट्री ({{count}} {{unit}})",
+ "background": "(पार्श्वभूमी)",
+ "bashCommands": "Bash कमांड्स",
+ "outOfScopeFindings": "व्याप्तीबाहेरील निष्कर्ष ({{count}})",
+ "questionsAsked": "विचारलेले प्रश्न ({{count}})",
+ "repeated": "पुनरावृत्त",
+ "skillsInvoked": "वापरलेली कौशल्ये ({{count}})",
+ "taskDispatches": "टास्क डिस्पॅचेस ({{count}})",
+ "tasksCreated": "तयार केलेली टास्क ({{count}})",
+ "teamMode": "टीम मोड",
+ "teams": "टीम्स: {{teams}}",
+ "title": "सत्र अंतर्दृष्टी",
+ "total": "एकूण",
+ "unique": "अद्वितीय",
+ "skillsInvoked_few": "वापरलेली कौशल्ये ({{count}})",
+ "skillsInvoked_many": "वापरलेली कौशल्ये ({{count}})",
+ "skillsInvoked_one": "वापरलेले कौशल्य ({{count}})",
+ "skillsInvoked_other": "वापरलेली कौशल्ये ({{count}})",
+ "taskDispatches_few": "टास्क डिस्पॅचेस ({{count}})",
+ "taskDispatches_many": "टास्क डिस्पॅचेस ({{count}})",
+ "taskDispatches_one": "टास्क डिस्पॅच ({{count}})",
+ "taskDispatches_other": "टास्क डिस्पॅचेस ({{count}})",
+ "tasksCreated_few": "तयार केलेली टास्क ({{count}})",
+ "tasksCreated_many": "तयार केलेली टास्क ({{count}})",
+ "tasksCreated_one": "तयार केलेले टास्क ({{count}})",
+ "tasksCreated_other": "तयार केलेली टास्क ({{count}})",
+ "questionsAsked_few": "विचारलेले प्रश्न ({{count}})",
+ "questionsAsked_many": "विचारलेले प्रश्न ({{count}})",
+ "questionsAsked_one": "विचारलेला प्रश्न ({{count}})",
+ "questionsAsked_other": "विचारलेले प्रश्न ({{count}})",
+ "agentTree_few": "एजंट ट्री ({{count}} {{unit}})",
+ "agentTree_many": "एजंट ट्री ({{count}} {{unit}})",
+ "agentTree_one": "एजंट ट्री ({{count}} {{unit}})",
+ "agentTree_other": "एजंट ट्री ({{count}} {{unit}})",
+ "outOfScopeFindings_few": "व्याप्तीबाहेरील निष्कर्ष ({{count}})",
+ "outOfScopeFindings_many": "व्याप्तीबाहेरील निष्कर्ष ({{count}})",
+ "outOfScopeFindings_one": "व्याप्तीबाहेरील निष्कर्ष ({{count}})",
+ "outOfScopeFindings_other": "व्याप्तीबाहेरील निष्कर्ष ({{count}})",
+ "keyTakeaways": "मुख्य मुद्दे"
+ },
+ "quality": {
+ "chars": "अक्षरे",
+ "corrections": "सुधारणा",
+ "failed": "अयशस्वी",
+ "fileReadRedundancy": "फाइल रीड पुनरावृत्ती",
+ "firstMessage": "पहिला संदेश",
+ "firstRun": "पहिला रन",
+ "frictionRate": "घर्षण दर",
+ "lastRun": "शेवटचा रन",
+ "messagesBeforeWork": "कामापूर्वीचे संदेश",
+ "passed": "उत्तीर्ण",
+ "promptQuality": "प्रॉम्प्ट गुणवत्ता",
+ "readsPerUniqueFile": "रीड्स/अद्वितीय फाइल",
+ "snapshot": "स्नॅपशॉट",
+ "snapshot_few": "स्नॅपशॉट्स",
+ "snapshot_many": "स्नॅपशॉट्स",
+ "snapshot_one": "स्नॅपशॉट",
+ "snapshot_other": "स्नॅपशॉट्स",
+ "startupOverhead": "स्टार्टअप ओव्हरहेड",
+ "testProgression": "चाचणी प्रगती",
+ "title": "गुणवत्ता संकेत",
+ "tokensBeforeWork": "कामापूर्वीचे टोकन्स",
+ "totalReads": "एकूण रीड्स",
+ "uniqueFiles": "अद्वितीय फाइल्स",
+ "userMessages": "वापरकर्ता संदेश",
+ "percentOfTotal": "एकूणाची %"
+ },
+ "tokens": {
+ "apiCalls": "API कॉल्स",
+ "cacheCreate": "कॅश तयार करा",
+ "cacheEfficiency": "कॅश कार्यक्षमता",
+ "cacheRead": "कॅश रीड",
+ "cacheReadPct": "कॅश रीड %",
+ "coldStart": "कोल्ड स्टार्ट",
+ "cost": "खर्च",
+ "input": "इनपुट",
+ "model": "मॉडेल",
+ "no": "नाही",
+ "output": "आउटपुट",
+ "readWriteRatio": "R/W गुणोत्तर",
+ "title": "टोकन वापर",
+ "total": "एकूण",
+ "yes": "होय"
+ },
+ "subagents": {
+ "title": "सबएजंट्स",
+ "metrics": {
+ "count": "संख्या",
+ "totalTokens": "एकूण टोकन्स",
+ "totalDuration": "एकूण कालावधी",
+ "totalCost": "एकूण खर्च"
+ },
+ "table": {
+ "description": "वर्णन",
+ "type": "प्रकार",
+ "tokens": "टोकन्स",
+ "duration": "कालावधी",
+ "cost": "खर्च"
+ }
+ },
+ "overview": {
+ "title": "विहंगावलोकन",
+ "yes": "होय",
+ "no": "नाही",
+ "metrics": {
+ "duration": "कालावधी",
+ "messages": "संदेश",
+ "contextUsage": "संदर्भ वापर",
+ "compactions": "कॉम्पॅक्शन्स",
+ "branch": "शाखा",
+ "subagents": "सबएजंट्स",
+ "project": "प्रकल्प",
+ "sessionId": "सत्र ID"
+ }
+ },
+ "timeline": {
+ "title": "टाइमलाइन आणि क्रियाकलाप",
+ "idleAnalysis": "निष्क्रिय विश्लेषण",
+ "metrics": {
+ "idleGaps": "निष्क्रिय अंतर",
+ "totalIdle": "एकूण निष्क्रिय",
+ "activeTime": "सक्रिय वेळ",
+ "idlePercent": "निष्क्रिय %"
+ },
+ "modelSwitches": "मॉडेल स्विचेस ({{count}})",
+ "modelSwitches_one": "मॉडेल स्विच ({{count}})",
+ "modelSwitches_other": "मॉडेल स्विचेस ({{count}})",
+ "messageNumber": "संदेश #{{number}}",
+ "keyEvents": "मुख्य घटना",
+ "modelSwitches_few": "मॉडेल स्विचेस ({{count}})",
+ "modelSwitches_many": "मॉडेल स्विचेस ({{count}})"
+ },
+ "tools": {
+ "title": "टूल वापर",
+ "summary": "{{toolCount}} टूल्समध्ये {{formattedCount}} एकूण कॉल्स",
+ "columns": {
+ "tool": "टूल",
+ "calls": "कॉल्स",
+ "errors": "त्रुटी",
+ "successPercent": "यश %",
+ "health": "आरोग्य"
+ }
+ },
+ "git": {
+ "title": "Git क्रियाकलाप",
+ "commits": "कमिट्स",
+ "pushes": "पुशेस",
+ "linesAdded": "जोडलेल्या ओळी",
+ "linesRemoved": "काढलेल्या ओळी",
+ "branchesCreated": "तयार केलेल्या शाखा"
+ },
+ "friction": {
+ "title": "घर्षण संकेत",
+ "rate": "घर्षण दर: {{rate}}%",
+ "correctionsCount": "{{count}} सुधारणा",
+ "correctionsCount_one": "{{count}} सुधारणा",
+ "corrections": "सुधारणा",
+ "thrashingSignals": "थ्रॅशिंग संकेत",
+ "repeatedBashCommands": "पुनरावृत्त Bash कमांड्स",
+ "reworkedFiles": "पुन्हा केलेल्या फाइल्स (3+ संपादने)",
+ "correctionsCount_few": "{{count}} सुधारणा",
+ "correctionsCount_many": "{{count}} सुधारणा",
+ "correctionsCount_other": "{{count}} सुधारणा"
+ },
+ "errors": {
+ "title": "त्रुटी",
+ "permissionDenied": "परवानगी नाकारली",
+ "messageIndex": "संदेश #{{index}}",
+ "input": "इनपुट",
+ "error": "त्रुटी",
+ "count": "{{count}} त्रुटी",
+ "count_one": "{{count}} त्रुटी",
+ "permissionDenialCount": "{{count}} परवानगी नाकारल्या",
+ "permissionDenialCount_one": "{{count}} परवानगी नाकारली",
+ "count_few": "{{count}} त्रुटी",
+ "count_many": "{{count}} त्रुटी",
+ "count_other": "{{count}} त्रुटी",
+ "permissionDenialCount_few": "{{count}} परवानगी नाकारल्या",
+ "permissionDenialCount_many": "{{count}} परवानगी नाकारल्या",
+ "permissionDenialCount_other": "{{count}} परवानगी नाकारल्या"
+ }
+}
diff --git a/src/features/localization/renderer/locales/mr/settings.json b/src/features/localization/renderer/locales/mr/settings.json
new file mode 100644
index 00000000..0e9e95f8
--- /dev/null
+++ b/src/features/localization/renderer/locales/mr/settings.json
@@ -0,0 +1,994 @@
+{
+ "tabs": {
+ "advanced": {
+ "description": "पॉवर-यूजर पर्याय: कॉन्फिग एक्सपोर्ट/इंपोर्ट, डीफॉल्ट रीसेट आणि कच्चे कॉन्फिगरेशन संपादन.",
+ "label": "प्रगत"
+ },
+ "general": {
+ "description": "थीम, भाषा, डिस्प्ले घनता आणि स्टार्टअप वर्तन यांसारख्या मुख्य अॅप प्राधान्ये.",
+ "label": "सामान्य"
+ },
+ "infoAriaLabel": "{{label}} म्हणजे काय?",
+ "notifications": {
+ "description": "एजंट क्रियाकलाप, टास्क पूर्तता आणि त्रुटींबद्दल तुम्हाला केव्हा आणि कसे सूचित केले जाते ते नियंत्रित करा.",
+ "label": "सूचना"
+ }
+ },
+ "view": {
+ "description": "तुमची अॅप प्राधान्ये व्यवस्थापित करा",
+ "loading": "सेटिंग्ज लोड होत आहेत...",
+ "title": "सेटिंग्ज"
+ },
+ "runtimeProvider": {
+ "actions": {
+ "cancel": "रद्द करा",
+ "test": "चाचणी करा"
+ },
+ "defaults": {
+ "allProjects": "सर्व प्रकल्प",
+ "allProjectsHint": "चाचण्या {{project}} वापरतात. प्रकल्पात ओव्हरराइड नसल्यास डीफॉल्ट लागू होतो.",
+ "loadingContexts": "संदर्भ लोड होत आहेत...",
+ "projectHint": "जतन केल्याने फक्त {{project}} ओव्हरराइड होतो.",
+ "projectOverrideContext": "प्रकल्प ओव्हरराइड संदर्भ",
+ "scopeDescriptionAllProjects": "स्वतःचे OpenCode ओव्हरराइड नसलेल्या प्रत्येक प्रकल्पासाठी डीफॉल्ट.",
+ "scopeDescriptionProject": "फक्त निवडलेला प्रकल्प ओव्हरराइड करा. चालू असलेल्या टीम्स बदलल्या जात नाहीत.",
+ "selectProjectContext": "प्रकल्प संदर्भ निवडा",
+ "selectProjectHint": "स्थानिक मॉडेल्स तपासण्यापूर्वी किंवा डीफॉल्ट जतन करण्यापूर्वी एक प्रकल्प निवडा.",
+ "selectValidationContext": "पडताळणी संदर्भ निवडा",
+ "setAllProjectsDefault": "सर्व-प्रकल्प डीफॉल्ट सेट करा",
+ "setProjectDefault": "प्रकल्प डीफॉल्ट सेट करा",
+ "thisProject": "हा प्रकल्प",
+ "title": "OpenCode डीफॉल्ट्स",
+ "validationContext": "पडताळणी संदर्भ"
+ },
+ "diagnostics": {
+ "copied": "डायग्नॉस्टिक्स कॉपी केले",
+ "copiedShort": "कॉपी केले",
+ "copy": "डायग्नॉस्टिक्स कॉपी करा",
+ "hints": "इशारे",
+ "likelyCause": "संभाव्य कारण:",
+ "windowsSymlinkAdminHint": "Windows: Agent Teams AI प्रशासक म्हणून चालवा"
+ },
+ "models": {
+ "alreadyDefault": "हे आधीच निवडलेले OpenCode डीफॉल्ट आहे.",
+ "empty": "कोणतीही मॉडेल्स सापडली नाहीत.",
+ "emptyFree": "कोणतीही मोफत मॉडेल्स सापडली नाहीत.",
+ "emptyRecommended": "कोणतीही शिफारस केलेली मॉडेल्स सापडली नाहीत.",
+ "emptyRecommendedFree": "कोणतीही शिफारस केलेली मोफत मॉडेल्स सापडली नाहीत.",
+ "freeOnly": "फक्त मोफत",
+ "launchableDescription": "OpenCode कॉन्फिगमधील ज्ञात रूट्स, मोफत अंगभूत मॉडेल्स आणि सध्याचे डीफॉल्ट. टीम लॉन्चसाठी तयार होण्यापूर्वी स्थानिक रूट्सना यशस्वी चाचणीची आवश्यकता असते.",
+ "launchableTitle": "OpenCode मॉडेल रूट्स",
+ "loadingRoutes": "OpenCode मॉडेल रूट्स लोड होत आहेत...",
+ "noRoutesMatch": "\"{{query}}\" शी कोणतेही OpenCode मॉडेल रूट्स जुळत नाहीत.",
+ "noneReported": "अद्याप कोणतेही OpenCode मॉडेल रूट्स नोंदवले गेले नाहीत. OpenCode मध्ये स्थानिक रूट कॉन्फिगर करा किंवा कॅटलॉग प्रोव्हायडर्स तपासण्यासाठी प्रोव्हायडर्स टॅब वापरा.",
+ "recommendedOnly": "फक्त शिफारस केलेले",
+ "searchPlaceholder": "मॉडेल्स शोधा",
+ "selectProjectBeforeTesting": "मॉडेल्स तपासण्यापूर्वी एक प्रकल्प संदर्भ निवडा.",
+ "selectProjectBeforeTestingDefaults": "OpenCode डीफॉल्ट्स तपासण्यापूर्वी किंवा जतन करण्यापूर्वी एक प्रकल्प संदर्भ निवडा.",
+ "testInProgress": "मॉडेल चाचणी आधीच चालू आहे.",
+ "useInTeamPicker": "टीम पिकरसाठी जतन करा",
+ "validationContextRequired": "चाचणी आणि डीफॉल्ट सेट सक्षम करण्यासाठी वरील पडताळणी संदर्भ निवडा. टीम पिकरसाठी जतन केल्याने फक्त नवीन टीम्ससाठी रूट संग्रहित होतो.",
+ "actionsUnavailable": "कृती तात्पुरत्या उपलब्ध नाहीत.",
+ "defaultSaveInProgress": "OpenCode डीफॉल्ट जतन होत आहे.",
+ "routeUnavailableAuth": "हे मॉडेल वापरण्यापूर्वी या प्रोव्हायडरला प्रमाणीकरण आवश्यक आहे.",
+ "routeUnavailableFailed": "या मॉडेल रूटची शेवटची अंमलबजावणी चाचणी अयशस्वी झाली.",
+ "routeUnavailableGeneric": "हा मॉडेल रूट आत्ता वापरता येत नाही.",
+ "routeUnavailableUnknown": "हे मॉडेल सध्याचे OpenCode डीफॉल्ट आहे, पण ते अद्याप लाइव्ह कॅटलॉगमध्ये उपलब्ध नाही."
+ },
+ "providers": {
+ "catalog": "OpenCode प्रोव्हायडर कॅटलॉग",
+ "countFallback": "OpenCode प्रोव्हायडर्स",
+ "description": "{{count}}. कनेक्ट केलेले आणि शिफारस केलेले प्रोव्हायडर्स प्रथम दाखवले जातात.",
+ "loadMore": "अधिक प्रोव्हायडर्स लोड करा",
+ "loading": "OpenCode प्रोव्हायडर्स लोड होत आहेत",
+ "noMatches": "त्या शोधाशी कोणतेही प्रोव्हायडर्स जुळत नाहीत.",
+ "noneReported": "व्यवस्थापित रनटाइमने कोणतेही OpenCode प्रोव्हायडर्स नोंदवले नाहीत.",
+ "recommended": "शिफारस केलेले",
+ "refreshCatalog": "कॅटलॉग रिफ्रेश करा",
+ "searchPlaceholder": "प्रोव्हायडर्स शोधा",
+ "description_few": "{{count}}. कनेक्ट केलेले आणि शिफारस केलेले प्रोव्हायडर्स प्रथम दाखवले जातात.",
+ "description_many": "{{count}}. कनेक्ट केलेले आणि शिफारस केलेले प्रोव्हायडर्स प्रथम दाखवले जातात.",
+ "description_one": "{{count}}. कनेक्ट केलेले आणि शिफारस केलेले प्रोव्हायडर्स प्रथम दाखवले जातात.",
+ "description_other": "{{count}}. कनेक्ट केलेले आणि शिफारस केलेले प्रोव्हायडर्स प्रथम दाखवले जातात."
+ },
+ "setup": {
+ "loading": "प्रोव्हायडर सेटअप लोड होत आहे..."
+ },
+ "summary": {
+ "defaultModel": "OpenCode डीफॉल्ट: {{model}}",
+ "loading": "व्यवस्थापित OpenCode रनटाइम, कनेक्ट केलेले प्रोव्हायडर्स आणि मॉडेल डीफॉल्ट्स लोड होत आहेत...",
+ "source": "स्रोत: {{source}}",
+ "title": "OpenCode रनटाइम"
+ },
+ "tabs": {
+ "models": "मॉडेल्स",
+ "providers": "प्रोव्हायडर्स"
+ },
+ "modelRoutes": {
+ "searchPlaceholder": "मॉडेल रूट्स शोधा"
+ },
+ "badges": {
+ "usedInTeamPicker": "टीम पिकरसाठी जतन केले",
+ "free": "मोफत",
+ "local": "स्थानिक",
+ "configured": "कॉन्फिगर केले",
+ "knownRoute": "ज्ञात रूट",
+ "connected": "कनेक्ट केले",
+ "verified": "पडताळले",
+ "needsTest": "चाचणी आवश्यक",
+ "failed": "अयशस्वी",
+ "unknown": "अज्ञात",
+ "default": "डीफॉल्ट"
+ },
+ "compatibleEndpoint": {
+ "baseUrlPlaceholder": "http://localhost:1234"
+ }
+ },
+ "general": {
+ "agentLanguage": {
+ "description": "एजंट संवादासाठी भाषा",
+ "descriptionWithDetected": "एजंट संवादासाठी भाषा (आढळले: {{detected}})",
+ "emptyMessage": "कोणतीही भाषा सापडली नाही.",
+ "label": "भाषा",
+ "searchPlaceholder": "भाषा शोधा...",
+ "selectPlaceholder": "भाषा निवडा...",
+ "title": "एजंट भाषा"
+ },
+ "appLanguage": {
+ "description": "अॅप्लिकेशन इंटरफेससाठी भाषा.",
+ "label": "भाषा",
+ "title": "अॅप भाषा"
+ },
+ "appearance": {
+ "autoExpandAIGroups": {
+ "description": "ट्रान्स्क्रिप्ट उघडताना किंवा नवीन संदेश मिळताना प्रत्येक प्रतिसाद वळण स्वयंचलितपणे विस्तृत करा",
+ "label": "डीफॉल्टनुसार AI प्रतिसाद विस्तृत करा"
+ },
+ "nativeTitleBar": {
+ "description": "कस्टम टायटल बारऐवजी डीफॉल्ट सिस्टम विंडो फ्रेम वापरा",
+ "label": "नेटिव्ह टायटल बार वापरा",
+ "restartConfirm": {
+ "confirmLabel": "रीस्टार्ट करा",
+ "message": "टायटल बार बदल लागू करण्यासाठी अॅप रीस्टार्ट करणे आवश्यक आहे. आता रीस्टार्ट करायचे?",
+ "title": "रीस्टार्ट आवश्यक"
+ }
+ },
+ "theme": {
+ "description": "तुमची पसंतीची रंग थीम निवडा",
+ "label": "थीम",
+ "options": {
+ "dark": "गडद",
+ "light": "उजळ",
+ "system": "सिस्टम"
+ }
+ },
+ "title": "स्वरूप"
+ },
+ "browserAccess": {
+ "serverMode": {
+ "description": "ब्राउझरमधून UI ला प्रवेश करण्यासाठी किंवा iframes मध्ये एम्बेड करण्यासाठी HTTP सर्व्हर सुरू करा",
+ "label": "सर्व्हर मोड सक्षम करा"
+ },
+ "title": "ब्राउझर प्रवेश"
+ },
+ "localClaudeRoot": {
+ "actions": {
+ "selectFolder": "फोल्डर निवडा",
+ "selectFolderManually": "फोल्डर मॅन्युअली निवडा",
+ "useAutoDetect": "ऑटो-डिटेक्ट वापरा",
+ "useFolder": "फोल्डर वापरा",
+ "usePath": "पथ वापरा",
+ "useThisPath": "हा पथ वापरा",
+ "useWsl": "Linux/WSL वापरत आहात?"
+ },
+ "confirm": {
+ "noProjectsDir": {
+ "message": "या फोल्डरमध्ये \"projects\" डिरेक्टरी नाही. तरीही सुरू ठेवायचे?",
+ "title": "कोणतीही projects डिरेक्टरी सापडली नाही"
+ },
+ "notClaudeDir": {
+ "message": "या फोल्डरचे नाव \"{{folderName}}\" आहे, \".claude\" नाही. तरीही सुरू ठेवायचे?",
+ "title": "निवडलेले फोल्डर .claude नाही"
+ },
+ "noWslPaths": {
+ "message": "Claude डेटासह WSL distros स्वयंचलितपणे सापडले नाहीत. फोल्डर मॅन्युअली निवडायचे?",
+ "title": "कोणतेही WSL Claude पथ सापडले नाहीत"
+ },
+ "wslNoProjectsDir": {
+ "message": "\"{{path}}\" मध्ये \"projects\" डिरेक्टरी नाही. तरीही सुरू ठेवायचे?",
+ "title": "WSL पथात projects डिरेक्टरी गहाळ"
+ }
+ },
+ "current": {
+ "autoDetected": "ऑटो-डिटेक्ट केले: {{path}}",
+ "autoDetectedPath": "ऑटो-डिटेक्ट केलेला पथ वापरत आहे",
+ "customPath": "कस्टम पथ वापरत आहे",
+ "label": "सध्याचे स्थानिक रूट"
+ },
+ "description": "कोणते स्थानिक फोल्डर तुमचे Claude डेटा रूट मानले जाते ते निवडा",
+ "errors": {
+ "detectWslFailed": "WSL Claude रूट पथ शोधणे अयशस्वी",
+ "loadFailed": "स्थानिक Claude रूट सेटिंग्ज लोड करणे अयशस्वी",
+ "updateFailed": "Claude रूट अपडेट करणे अयशस्वी"
+ },
+ "title": "स्थानिक Claude रूट",
+ "wslModal": {
+ "closeAriaLabel": "WSL पथ मोडल बंद करा",
+ "description": "आढळलेली WSL वितरणे आणि Claude रूट उमेदवार",
+ "noProjectsDir": "कोणतीही projects डिरेक्टरी आढळली नाही",
+ "title": "WSL Claude रूट निवडा"
+ }
+ },
+ "privacy": {
+ "telemetry": {
+ "description": "अनामिक क्रॅश आणि कार्यप्रदर्शन डेटा पाठवून अॅप सुधारण्यास मदत करा",
+ "label": "क्रॅश अहवाल पाठवा"
+ },
+ "title": "गोपनीयता"
+ },
+ "server": {
+ "runningOn": "यावर चालू आहे",
+ "standaloneModeDescription": "स्टँडअलोन मोडमध्ये चालू आहे. HTTP सर्व्हर नेहमी सक्रिय असतो. सिस्टम सूचना उपलब्ध नाहीत - सूचना ट्रिगर्स फक्त अॅपमध्येच लॉग केले जातात.",
+ "title": "सर्व्हर"
+ },
+ "startup": {
+ "launchAtLogin": {
+ "description": "तुम्ही लॉग इन करता तेव्हा अॅप स्वयंचलितपणे सुरू करा",
+ "label": "लॉगिनवर सुरू करा"
+ },
+ "showDockIcon": {
+ "description": "डॉकमध्ये अॅप आयकॉन दाखवा (macOS)",
+ "label": "डॉक आयकॉन दाखवा"
+ },
+ "title": "स्टार्टअप"
+ }
+ },
+ "notifications": {
+ "dev": {
+ "descriptionPrefix": "डेव्हलपमेंट मोडमध्ये सूचना कदाचित काम करणार नाहीत. macOS अॅपला उत्पादन अॅप नावाऐवजी \"Electron\" (bundle ID",
+ "descriptionSuffix": ") म्हणून ओळखते. परवानग्या पडताळण्यासाठी System Settings > Notifications > Electron तपासा.",
+ "title": "डेव्ह मोड"
+ },
+ "ignoredRepositories": {
+ "description": "या रिपॉझिटरीजमधील सूचनांकडे दुर्लक्ष केले जाईल",
+ "empty": "कोणत्याही रिपॉझिटरीकडे दुर्लक्ष केले नाही",
+ "selectPlaceholder": "दुर्लक्ष करण्यासाठी रिपॉझिटरी निवडा...",
+ "title": "दुर्लक्षित रिपॉझिटरीज"
+ },
+ "settings": {
+ "enabled": {
+ "description": "त्रुटी आणि घटनांसाठी सिस्टम सूचना दाखवा",
+ "label": "सिस्टम सूचना सक्षम करा"
+ },
+ "sound": {
+ "description": "सूचना दिसताना आवाज वाजवा",
+ "label": "आवाज वाजवा"
+ },
+ "subagentErrors": {
+ "description": "सबएजंट सत्रांमधील त्रुटी शोधा आणि त्याबद्दल सूचित करा",
+ "label": "सबएजंट त्रुटी समाविष्ट करा"
+ },
+ "title": "सूचना सेटिंग्ज"
+ },
+ "snooze": {
+ "clear": "स्नूझ साफ करा",
+ "description": "तात्पुरते सूचना थांबवा",
+ "descriptionWithTime": "{{time}} पर्यंत स्नूझ केले",
+ "label": "सूचना स्नूझ करा",
+ "options": {
+ "15": "15 मिनिटे",
+ "30": "30 मिनिटे",
+ "60": "1 तास",
+ "120": "2 तास",
+ "240": "4 तास",
+ "-1": "उद्यापर्यंत"
+ },
+ "selectDuration": "कालावधी निवडा..."
+ },
+ "taskCompletion": {
+ "description": "Claude टास्क पूर्ण करते तेव्हा नेटिव्ह OS सूचना मिळवा - आवाज, बॅनर्स आणि Dock/taskbar बॅजेस. macOS, Linux आणि Windows वर काम करते.",
+ "installPlugin": "claude-notifications-go प्लगइन इन्स्टॉल करा",
+ "title": "टास्क पूर्तता सूचना"
+ },
+ "team": {
+ "allTasksCompleted": {
+ "description": "टीममधील प्रत्येक टास्क पूर्ण स्थितीला पोहोचल्यावर सूचित करा",
+ "label": "सर्व टास्क पूर्ण"
+ },
+ "autoResumeOnRateLimit": {
+ "description": "Claude रीसेट वेळ नोंदवते तेव्हा, मर्यादा रीसेट झाल्यानंतर टीम लीडसाठी फॉलो-अप सूचना नियोजित करा",
+ "label": "दर मर्यादेनंतर स्वयं-पुनरारंभ"
+ },
+ "clarifications": {
+ "description": "टास्कला तुमच्या इनपुटची गरज असताना नेटिव्ह OS सूचना दाखवा",
+ "label": "टास्क स्पष्टीकरण सूचना"
+ },
+ "crossTeamMessage": {
+ "description": "दुसऱ्या टीमकडून संदेश आल्यावर सूचित करा",
+ "label": "क्रॉस-टीम संदेश सूचना"
+ },
+ "leadInbox": {
+ "description": "सहकारी टीम लीडला संदेश पाठवतात तेव्हा सूचित करा",
+ "label": "लीड इनबॉक्स सूचना"
+ },
+ "statusChange": {
+ "description": "टास्कची स्थिती बदलते तेव्हा नेटिव्ह OS सूचना दाखवा",
+ "label": "टास्क स्थिती बदल सूचना",
+ "onlySolo": {
+ "description": "टीममध्ये कोणतेही सहकारी नसतानाच सूचित करा",
+ "label": "फक्त एकल मोडमध्ये"
+ },
+ "statuses": {
+ "description": "कोणत्या लक्ष्य स्थिती सूचना ट्रिगर करतात",
+ "label": "या स्थितींवर सूचित करा",
+ "options": {
+ "approved": "मंजूर",
+ "completed": "पूर्ण",
+ "deleted": "हटवले",
+ "in_progress": "सुरू केले",
+ "needsFix": "दुरुस्ती आवश्यक",
+ "pending": "प्रलंबित",
+ "review": "पुनरावलोकन"
+ }
+ }
+ },
+ "taskComments": {
+ "description": "एजंट्स टास्कवर टिप्पणी करतात तेव्हा नेटिव्ह OS सूचना दाखवा",
+ "label": "टास्क टिप्पणी सूचना"
+ },
+ "taskCreated": {
+ "description": "नवीन टास्क तयार होते तेव्हा नेटिव्ह OS सूचना दाखवा",
+ "label": "टास्क तयार सूचना"
+ },
+ "teamLaunched": {
+ "description": "टीम सुरू होणे पूर्ण करते आणि तयार होते तेव्हा सूचित करा",
+ "label": "टीम सुरू सूचना"
+ },
+ "title": "टीम सूचना",
+ "toolApproval": {
+ "description": "अॅप फोकसमध्ये नसताना एखाद्या टूलला तुमच्या मंजुरीची (अनुमती द्या/नाकारा) गरज असताना सूचित करा",
+ "label": "टूल मंजुरी सूचना"
+ },
+ "userInbox": {
+ "description": "सहकारी तुम्हाला संदेश पाठवतात तेव्हा सूचित करा",
+ "label": "वापरकर्ता इनबॉक्स सूचना"
+ }
+ },
+ "test": {
+ "action": "चाचणी पाठवा",
+ "description": "वितरण पडताळण्यासाठी चाचणी सूचना पाठवा",
+ "failedToSend": "चाचणी सूचना पाठवणे अयशस्वी",
+ "label": "चाचणी सूचना",
+ "sending": "पाठवत आहे...",
+ "sent": "पाठवले!",
+ "unknownError": "अज्ञात त्रुटी"
+ }
+ },
+ "advanced": {
+ "about": {
+ "appIconAlt": "अॅप आयकॉन",
+ "description": "AI एजंट टीम्स तयार करा जे समांतरपणे स्वायत्तपणे काम करतात, टीम्समध्ये संवाद साधतात आणि kanban बोर्डवर टास्क व्यवस्थापित करतात - अंगभूत कोड पुनरावलोकन, लाइव्ह प्रोसेस मॉनिटरिंग आणि पूर्ण टूल दृश्यमानतेसह.",
+ "standalone": "स्टँडअलोन",
+ "title": "बद्दल",
+ "version": "आवृत्ती {{version}}"
+ },
+ "configuration": {
+ "editConfig": "कॉन्फिग संपादित करा",
+ "exportConfig": "कॉन्फिग एक्सपोर्ट करा",
+ "importConfig": "कॉन्फिग इंपोर्ट करा",
+ "openInEditor": "एडिटरमध्ये उघडा",
+ "resetToDefaults": "डीफॉल्टवर रीसेट करा",
+ "title": "कॉन्फिगरेशन"
+ },
+ "updates": {
+ "available": "v{{version}} उपलब्ध",
+ "check": "अपडेट्स तपासा",
+ "checking": "तपासत आहे...",
+ "ready": "अपडेट तयार",
+ "unknownVersion": "अज्ञात",
+ "upToDate": "अद्ययावत"
+ },
+ "appName": "Agent Teams AI"
+ },
+ "configEditor": {
+ "errors": {
+ "loadFailed": "कॉन्फिग लोड करणे अयशस्वी",
+ "saveFailed": "कॉन्फिग जतन करणे अयशस्वी"
+ },
+ "footer": {
+ "autoSave": "संपादनानंतर बदल स्वयंचलितपणे जतन होतात",
+ "toClose": "बंद करण्यासाठी",
+ "escapeKey": "Esc"
+ },
+ "loading": "कॉन्फिग लोड होत आहे...",
+ "status": {
+ "invalidJson": "अवैध JSON",
+ "saveFailed": "जतन अयशस्वी",
+ "saved": "जतन केले",
+ "saving": "जतन करत आहे..."
+ },
+ "title": "कॉन्फिगरेशन संपादित करा"
+ },
+ "notificationTriggers": {
+ "add": {
+ "cancel": "रद्द करा",
+ "submit": "ट्रिगर जोडा",
+ "title": "कस्टम ट्रिगर जोडा"
+ },
+ "builtin": {
+ "description": "अॅप्लिकेशनसोबत येणारे डीफॉल्ट ट्रिगर्स. तुम्ही ते सक्षम किंवा अक्षम करू शकता आणि त्यांचे पॅटर्न सानुकूलित करू शकता.",
+ "title": "अंगभूत ट्रिगर्स"
+ },
+ "card": {
+ "builtinBadge": "अंगभूत",
+ "collapseAriaLabel": "संकुचित करा",
+ "deleteAriaLabel": "ट्रिगर हटवा",
+ "editNameAriaLabel": "नाव संपादित करा",
+ "expandAriaLabel": "विस्तृत करा"
+ },
+ "color": {
+ "customHexTitle": "कस्टम hex रंग",
+ "invalidHex": "अवैध hex"
+ },
+ "configuration": {
+ "alertIfGreaterThan": "यापेक्षा जास्त असल्यास सूचित करा >",
+ "emptyPatternHint": "सर्व मजकूर जुळवण्यासाठी रिकामे ठेवा. JavaScript regex सिंटॅक्स वापरते.",
+ "errorStatusDescription": "टूल अंमलबजावणी त्रुटी नोंदवते तेव्हा ट्रिगर होते (is_error: true).",
+ "tokensUnit": "टोकन्स",
+ "matchPatternPlaceholder": "उदा., error|failed|exception"
+ },
+ "custom": {
+ "description": "विशिष्ट पॅटर्न किंवा टूल आउटपुट्ससाठी सूचित होण्यासाठी तुमचे स्वतःचे ट्रिगर्स तयार करा.",
+ "empty": "अद्याप कोणतेही कस्टम ट्रिगर्स कॉन्फिगर केलेले नाहीत.",
+ "title": "कस्टम ट्रिगर्स"
+ },
+ "errors": {
+ "invalidRegexPattern": "अवैध regex पॅटर्न"
+ },
+ "fields": {
+ "contentType": "मजकूर प्रकार",
+ "matchField": "जुळणी फील्ड",
+ "matchPattern": "जुळणी पॅटर्न (Regex)",
+ "scopeToolName": "व्याप्ती / टूल नाव",
+ "scopeToolNameOptional": "व्याप्ती / टूल नाव (ऐच्छिक)",
+ "threshold": "उंबरठा",
+ "tokenType": "टोकन प्रकार",
+ "triggerNamePlaceholder": "उदा., Build Failure Alert",
+ "triggerNameRequired": "ट्रिगर नाव *"
+ },
+ "ignorePatterns": {
+ "hint": "जोडण्यासाठी Enter दाबा. कोणताही पॅटर्न जुळल्यास सूचना वगळली जाते.",
+ "placeholder": "दुर्लक्ष regex जोडा...",
+ "removeAriaLabel": "दुर्लक्ष पॅटर्न काढा",
+ "summary": "प्रगत: अपवर्जन नियम",
+ "title": "दुर्लक्ष पॅटर्न (जुळल्यास वगळा)"
+ },
+ "options": {
+ "contentTypes": {
+ "text": "मजकूर आउटपुट",
+ "thinking": "विचार",
+ "tool_result": "टूल परिणाम",
+ "tool_use": "टूल वापर"
+ },
+ "matchFields": {
+ "args": "आर्ग्युमेंट्स",
+ "command": "कमांड",
+ "content": "मजकूर",
+ "description": "वर्णन",
+ "file_path": "फाइल पथ",
+ "fullInput": "पूर्ण इनपुट (JSON)",
+ "glob": "Glob फिल्टर",
+ "new_string": "नवीन स्ट्रिंग",
+ "old_string": "जुनी स्ट्रिंग",
+ "path": "पथ",
+ "pattern": "पॅटर्न",
+ "prompt": "प्रॉम्प्ट",
+ "query": "क्वेरी",
+ "skill": "कौशल्य नाव",
+ "subagent_type": "सबएजंट प्रकार",
+ "text": "मजकूर सामग्री",
+ "thinking": "विचार सामग्री",
+ "url": "URL"
+ },
+ "modes": {
+ "content_match": "मजकूर पॅटर्न",
+ "error_status": "अंमलबजावणी त्रुटी",
+ "token_threshold": "उच्च टोकन वापर"
+ },
+ "tokenTypes": {
+ "input": "इनपुट टोकन्स",
+ "output": "आउटपुट टोकन्स",
+ "total": "एकूण टोकन्स"
+ },
+ "toolNames": {
+ "anyTool": "कोणतेही टूल"
+ }
+ },
+ "preview": {
+ "defaultTestTriggerName": "चाचणी ट्रिगर",
+ "detectedSuffix": "त्रुटी आढळल्या असत्या",
+ "more": "...आणि {{count}} अधिक",
+ "more_few": "...आणि {{count}} अधिक",
+ "more_many": "...आणि {{count}} अधिक",
+ "more_one": "...आणि {{count}} अधिक",
+ "more_other": "...आणि {{count}} अधिक",
+ "testTrigger": "चाचणी ट्रिगर",
+ "testing": "चाचणी करत आहे...",
+ "title": "पूर्वावलोकन",
+ "truncatedWarning": "शोध लवकर थांबला (टाइमआउट किंवा संख्या मर्यादा). प्रत्यक्ष जुळण्या अधिक असू शकतात.",
+ "viewSession": "सत्र पाहा"
+ },
+ "repositoryScope": {
+ "empty": "कोणतीही रिपॉझिटरी निवडली नाही - ट्रिगर सर्व रिपॉझिटरीजना लागू होतो",
+ "hint": "रिपॉझिटरीज निवडल्या असल्यास, हा ट्रिगर फक्त त्या रिपॉझिटरीजमधील त्रुटींसाठीच सुरू होतो.",
+ "placeholder": "जोडण्यासाठी रिपॉझिटरी निवडा...",
+ "summary": "प्रगत: रिपॉझिटरी व्याप्ती",
+ "title": "रिपॉझिटरीजपर्यंत मर्यादित करा (फक्त निवडलेल्या रिपॉझिटरीजना लागू)"
+ },
+ "sections": {
+ "configuration": "कॉन्फिगरेशन",
+ "dotColor": "डॉट रंग",
+ "generalInfo": "सामान्य माहिती",
+ "triggerCondition": "ट्रिगर अट"
+ }
+ },
+ "workspaceProfiles": {
+ "actions": {
+ "addProfile": "प्रोफाइल जोडा",
+ "cancel": "रद्द करा",
+ "deleteProfile": "प्रोफाइल हटवा",
+ "editProfile": "प्रोफाइल संपादित करा",
+ "save": "जतन करा"
+ },
+ "authMethods": {
+ "agent": "SSH एजंट",
+ "auto": "ऑटो (SSH Config मधून)",
+ "password": "पासवर्ड",
+ "privateKey": "खाजगी की"
+ },
+ "deleteConfirm": {
+ "confirmLabel": "हटवा",
+ "message": "तुम्हाला खात्री आहे की तुम्हाला \"{{name}}\" हटवायचे आहे? हे पूर्ववत करता येणार नाही.",
+ "title": "प्रोफाइल हटवा"
+ },
+ "description": "जलद पुन्हा कनेक्शनसाठी SSH कनेक्शन प्रोफाइल जतन करा",
+ "empty": {
+ "description": "जलद कनेक्ट करण्यासाठी SSH प्रोफाइल जोडा",
+ "title": "कोणतीही जतन केलेली प्रोफाइल नाहीत"
+ },
+ "form": {
+ "authentication": "प्रमाणीकरण",
+ "host": "होस्ट",
+ "name": "नाव",
+ "passwordPrompt": "कनेक्ट करताना तुम्हाला पासवर्डसाठी विचारले जाईल.",
+ "port": "पोर्ट",
+ "privateKeyPath": "खाजगी की पथ",
+ "username": "वापरकर्तानाव",
+ "namePlaceholder": "माझा सर्व्हर",
+ "hostPlaceholder": "hostname किंवा IP",
+ "usernamePlaceholder": "user"
+ },
+ "loading": "प्रोफाइल लोड होत आहेत...",
+ "title": "वर्कस्पेस प्रोफाइल"
+ },
+ "connection": {
+ "actions": {
+ "connect": "कनेक्ट करा",
+ "connecting": "कनेक्ट करत आहे...",
+ "disconnect": "डिस्कनेक्ट करा",
+ "testConnection": "कनेक्शन चाचणी करा",
+ "testing": "चाचणी करत आहे..."
+ },
+ "currentMode": {
+ "description": "सत्र फाइल्ससाठी डेटा स्रोत",
+ "label": "सध्याचा मोड",
+ "local": "स्थानिक ({{path}})"
+ },
+ "description": "तेथे चालू असलेली Claude Code सत्रे पाहण्यासाठी रिमोट मशीनला कनेक्ट करा",
+ "form": {
+ "authentication": "प्रमाणीकरण",
+ "host": "होस्ट",
+ "password": "पासवर्ड",
+ "port": "पोर्ट",
+ "privateKeyPath": "खाजगी की पथ",
+ "username": "वापरकर्तानाव",
+ "hostPlaceholder": "hostname किंवा SSH config उपनाम",
+ "usernamePlaceholder": "user"
+ },
+ "savedProfiles": {
+ "title": "जतन केलेली प्रोफाइल"
+ },
+ "ssh": {
+ "title": "SSH कनेक्शन"
+ },
+ "status": {
+ "connectedTo": "{{host}} शी कनेक्ट केले",
+ "remoteSessions": "SSH द्वारे रिमोट सत्रे पाहत आहे"
+ },
+ "test": {
+ "failed": "कनेक्शन अयशस्वी: {{error}}",
+ "success": "कनेक्शन यशस्वी",
+ "unknownError": "अज्ञात त्रुटी"
+ },
+ "title": "रिमोट कनेक्शन"
+ },
+ "providerRuntime": {
+ "actions": {
+ "cancel": "रद्द करा",
+ "cancelLogin": "लॉगिन रद्द करा",
+ "connectChatGpt": "ChatGPT कनेक्ट करा",
+ "delete": "हटवा",
+ "disable": "अक्षम करा",
+ "disconnectAccount": "खाते डिस्कनेक्ट करा",
+ "generateLink": "लिंक तयार करा",
+ "openLogin": "लॉगिन उघडा",
+ "reconnectAnthropic": "Anthropic पुन्हा कनेक्ट करा",
+ "refresh": "रिफ्रेश करा",
+ "replaceKey": "की बदला",
+ "saveEndpoint": "एंडपॉइंट जतन करा",
+ "saveKey": "की जतन करा",
+ "saving": "जतन करत आहे...",
+ "setApiKey": "API की सेट करा",
+ "updateKey": "की अपडेट करा",
+ "useCode": "कोड वापरा"
+ },
+ "apiKey": {
+ "loadingStoredCredentials": "संग्रहित क्रेडेन्शियल्स लोड होत आहेत...",
+ "projectScope": "प्रकल्प",
+ "scope": "व्याप्ती",
+ "storedIn": "{{backend}} मध्ये संग्रहित",
+ "userScope": "वापरकर्ता",
+ "storedInApp": "अॅपमध्ये संग्रहित",
+ "providers": {
+ "anthropic": {
+ "name": "Anthropic API की",
+ "title": "API की",
+ "description": "API-बिल केलेल्या प्रवेशासाठी थेट Anthropic API की वापरा. तुम्ही परत स्विच केल्यावर तुमचे Anthropic सबस्क्रिप्शन सत्र उपलब्ध राहते.",
+ "placeholder": "sk-ant-..."
+ },
+ "codex": {
+ "name": "Codex API की",
+ "title": "API की",
+ "description": "दुय्यम Codex ऑथ पथ म्हणून OpenAI API की वापरा. तुम्ही Codex API की मोडवर स्विच केल्यास, अॅप नेटिव्ह लॉन्चसाठी OPENAI_API_KEY ला CODEX_API_KEY मध्ये मिरर करेल.",
+ "placeholder": "sk-proj-..."
+ },
+ "gemini": {
+ "name": "Gemini API की",
+ "title": "API प्रवेश",
+ "description": "Gemini API बॅकएंडसाठी `GEMINI_API_KEY` वापरा. CLI SDK आणि ADC ला त्याची गरज नाही.",
+ "placeholder": "AIza..."
+ }
+ }
+ },
+ "codex": {
+ "account": {
+ "appServer": "App-server: {{state}}",
+ "connected": "कनेक्ट केले",
+ "description": "सबस्क्रिप्शन-समर्थित नेटिव्ह लॉन्चना सक्षम करणारे स्थानिक Codex app-server खाते सत्र व्यवस्थापित करा.",
+ "loginInProgress": "लॉगिन सुरू आहे",
+ "plan": "प्लॅन: {{plan}}",
+ "reconnectRequired": "पुन्हा कनेक्शन आवश्यक",
+ "title": "ChatGPT खाते",
+ "hints": {
+ "autoUsesApiKeyUntilChatgpt": "{{message}} ChatGPT कनेक्ट होईपर्यंत ऑटो आढळलेली API की वापरत राहील.",
+ "detectedApiKeyNeedsApiMode": "{{message}} आढळलेली API की तुम्ही Codex API की मोडवर स्विच केल्यानंतरच वापरली जाते.",
+ "localArtifactsNoSession": "Codex CLI सध्या कोणतेही सक्रिय ChatGPT खाते नसल्याचे नोंदवते. स्थानिक Codex खाते डेटा अस्तित्वात आहे, पण कोणतेही सक्रिय व्यवस्थापित सत्र निवडलेले नाही. Codex CLI ला एखादे दिसल्यानंतरच वापर मर्यादा येथे दिसतात.",
+ "noActiveAccount": "Codex CLI सध्या कोणतेही सक्रिय ChatGPT खाते नसल्याचे नोंदवते. Codex CLI ला एखादे दिसल्यानंतरच वापर मर्यादा येथे दिसतात.",
+ "reconnectBeforeUsage": "Codex कडे स्थानिकरित्या निवडलेले ChatGPT खाते आहे, पण येथे वापर मर्यादा लोड होण्यापूर्वी सध्याच्या सत्राला पुन्हा कनेक्ट करण्याची गरज आहे.",
+ "usageLimitsAfterReport": "कनेक्ट केलेल्या ChatGPT खात्यासाठी Codex त्या नोंदवल्यानंतर वापर मर्यादा येथे दिसतात."
+ }
+ },
+ "install": {
+ "checking": "तपासत आहे",
+ "downloading": "डाउनलोड करत आहे",
+ "installCli": "Codex CLI इन्स्टॉल करा",
+ "installing": "इन्स्टॉल करत आहे",
+ "retryInstall": "इन्स्टॉल पुन्हा करा",
+ "title": "अॅप डेटामध्ये Codex CLI इन्स्टॉल करा"
+ },
+ "rateLimits": {
+ "credits": "क्रेडिट्स",
+ "creditsDescription": "क्रेडिट्स विंडो-आधारित सबस्क्रिप्शन वापरापासून वेगळे दाखवले जातात आणि प्लॅन-समर्थित ChatGPT सत्रांसाठी उपलब्ध नसू शकतात.",
+ "noSecondaryWindow": "या खाते स्नॅपशॉटसाठी Codex ने दुय्यम विंडो परत केली नाही.",
+ "notReported": "नोंदवले नाही",
+ "primaryReset": "प्राथमिक रीसेट",
+ "primaryUsed": "प्राथमिक वापरले",
+ "primaryWindow": "प्राथमिक विंडो",
+ "remainingLeft": "{{value}} शिल्लक",
+ "remainingUnknown": "शिल्लक अज्ञात",
+ "secondaryReset": "दुय्यम रीसेट",
+ "secondaryUsed": "दुय्यम वापरले",
+ "secondaryWindow": "दुय्यम विंडो",
+ "usedQuotaNote": "ही टक्केवारी वापरलेला कोटा दाखवते, शिल्लक कोटा नाही.",
+ "weeklyReset": "साप्ताहिक रीसेट",
+ "weeklyUsed": "साप्ताहिक वापरले",
+ "weeklyUsedOneWeek": "साप्ताहिक वापरले (1आ)",
+ "weeklyWindow": "साप्ताहिक विंडो",
+ "secondaryFallback": "दुय्यम",
+ "secondaryWindowNote": " साप्ताहिक मर्यादा {{window}} विंडोमध्ये वेगळ्या दाखवल्या जातात.",
+ "usageExplanationGeneric": "वापरलेला कोटा दाखवते, शिल्लक कोटा नाही.",
+ "usageExplanationWindowOnly": "सध्याच्या {{window}} विंडोमध्ये वापरलेला कोटा दाखवते, शिल्लक कोटा नाही.",
+ "usageExplanationWithRemaining": "{{used}} वापरले - सध्याच्या {{window}} विंडोमध्ये सुमारे {{remaining}} शिल्लक."
+ }
+ },
+ "compatibleEndpoint": {
+ "authToken": "ऑथ टोकन",
+ "authTokenMissing": "ऑथ टोकन कॉन्फिगर केलेले नाही.",
+ "baseUrl": "बेस URL",
+ "description": "Anthropic-सुसंगत स्थानिक रनटाइम एंडपॉइंट वापरा.",
+ "keepSavedToken": "जतन केलेले टोकन ठेवण्यासाठी रिकामे ठेवा",
+ "title": "स्थानिक / सुसंगत एंडपॉइंट",
+ "tokenStatus": "टोकन {{status}}",
+ "validation": {
+ "baseUrlRequired": "बेस URL आवश्यक आहे",
+ "firstPartyAnthropic": "फर्स्ट-पार्टी Anthropic साठी ऑटो, सबस्क्रिप्शन किंवा API की वापरा",
+ "httpRequired": "बेस URL ने http:// किंवा https:// वापरणे आवश्यक आहे",
+ "invalidUrl": "अवैध URL",
+ "noCredentials": "बेस URL मध्ये क्रेडेन्शियल्स समाविष्ट नसावेत"
+ },
+ "status": {
+ "endpointDisabledTokenKept": "एंडपॉइंट अक्षम केले. जतन केलेले टोकन ठेवले गेले.",
+ "endpointSaved": "एंडपॉइंट जतन केले",
+ "endpointSavedTokenMissing": "एंडपॉइंट जतन केले. ऑथ टोकन कॉन्फिगर केलेले नाही."
+ }
+ },
+ "connection": {
+ "authenticationMethod": "प्रमाणीकरण पद्धत",
+ "descriptions": {
+ "anthropic": "अॅप-लॉन्च केलेली Anthropic सत्रे कशी प्रमाणित होतात ते निवडा.",
+ "codex": "नेटिव्ह रनटाइम सुरू होताना Codex ने तुमच्या ChatGPT सबस्क्रिप्शनला किंवा API कीला प्राधान्य द्यायचे का ते निवडा.",
+ "gemini": "ऐच्छिक API प्रवेश कॉन्फिगर करा. CLI SDK आणि ADC अद्याप स्वयंचलितपणे शोधले जातात.",
+ "opencode": "OpenCode प्रमाणीकरण आणि प्रोव्हायडर सूची OpenCode रनटाइमद्वारे व्यवस्थापित केली जाते."
+ },
+ "method": "कनेक्शन पद्धत",
+ "mode": "मोड: {{mode}}",
+ "selected": "निवडले",
+ "switching": "बदलत आहे...",
+ "title": "कनेक्शन"
+ },
+ "connectionCards": {
+ "apiKey": {
+ "title": "API की"
+ },
+ "anthropic": {
+ "apiKeyDescription": "ANTHROPIC_API_KEY आणि Anthropic API बिलिंग वापरा.",
+ "autoDescription": "Anthropic रनटाइम डीफॉल्ट्स आणि उपलब्ध सर्वोत्तम स्थानिक क्रेडेन्शियल वापरा.",
+ "hint": "ऑटो Anthropic ला त्याच्या डीफॉल्ट स्थानिक क्रेडेन्शियल निराकरणावर ठेवते.",
+ "subscriptionDescription": "तुमचे स्थानिक Anthropic साइन-इन सत्र आणि सबस्क्रिप्शन प्रवेश वापरा.",
+ "subscriptionTitle": "Anthropic सबस्क्रिप्शन"
+ },
+ "auto": {
+ "title": "ऑटो"
+ },
+ "codex": {
+ "apiKeyDescription": "नेटिव्ह Codex लॉन्चसाठी OPENAI_API_KEY आणि CODEX_API_KEY बिलिंग वापरा.",
+ "autoDescription": "तुमच्या ChatGPT खात्याला आणि सबस्क्रिप्शनला प्राधान्य द्या. गरज असेल तरच API की मोड वापरा.",
+ "chatgptDescription": "तुमचे कनेक्ट केलेले ChatGPT खाते आणि Codex सबस्क्रिप्शन वापरा.",
+ "chatgptTitle": "ChatGPT खाते",
+ "hint": "Codex नेहमी नेटिव्ह रनटाइमद्वारे चालते. API-की क्रेडेन्शियल्सकडे परत जाण्यापूर्वी ऑटो तुमच्या ChatGPT खात्याला प्राधान्य देते."
+ }
+ },
+ "description": "प्रत्येक प्रोव्हायडर कसा कनेक्ट होतो आणि, समर्थित असल्यास, मल्टीमॉडेल रनटाइमने कोणता बॅकएंड वापरावा ते व्यवस्थापित करा.",
+ "fastMode": {
+ "defaultOff": "डीफॉल्ट बंद",
+ "description": "निराकरण केलेले मॉडेल आणि रनटाइम अनुमती देत असताना नवीन Anthropic टीम लॉन्चसाठी डीफॉल्टनुसार Claude Code फास्ट मोड लागू करा.",
+ "disabledHint": "एखादी टीम स्पष्टपणे फास्ट मोड सक्षम करत नाही तोपर्यंत नवीन Anthropic लॉन्च सामान्य वेगावर राहतात.",
+ "enabledHint": "निराकरण केलेले मॉडेल समर्थन देत असताना नवीन Anthropic लॉन्च डीफॉल्टनुसार फास्ट मोडची विनंती करतील.",
+ "notExposed": "हा Anthropic रनटाइम फास्ट मोड उघड करत नाही.",
+ "preferFast": "फास्टला प्राधान्य द्या",
+ "title": "फास्ट मोड डीफॉल्ट",
+ "unavailableForRuntime": "या Anthropic रनटाइमसाठी फास्ट मोड सध्या उपलब्ध नाही."
+ },
+ "alerts": {
+ "anthropicApiKeyMissing": "API की मोड निवडला आहे, पण अद्याप कोणतेही Anthropic API क्रेडेन्शियल उपलब्ध नाही.",
+ "anthropicStoredKeyAvailable": "जतन केलेली API की उपलब्ध आहे, पण तुम्ही API की मोडवर स्विच केल्यानंतरच अॅप-लॉन्च केलेली Anthropic सत्रे ती वापरतात.",
+ "anthropicSubscriptionMissing": "Anthropic सबस्क्रिप्शन मोड निवडला आहे. हा प्रोव्हायडर वापरण्यासाठी Anthropic सह साइन इन करा.",
+ "authTokenMissing": "ऑथ टोकन कॉन्फिगर केलेले नाही. अनेक स्थानिक Anthropic-सुसंगत एंडपॉइंट्सना रिकामे नसलेले टोकन आवश्यक असते.",
+ "chatgptLoginPending": "ChatGPT खाते लॉगिन पूर्ण होण्याची वाट पाहत आहे...",
+ "chatgptLoginStarting": "ChatGPT लॉगिन सुरू करत आहे...",
+ "codexApiKeyMissing": "API की मोड निवडला आहे, पण अद्याप कोणतेही OPENAI_API_KEY किंवा CODEX_API_KEY क्रेडेन्शियल उपलब्ध नाही.",
+ "codexLocalArtifactsNoSession": "Codex CLI कडे सध्या कोणतेही सक्रिय ChatGPT खाते नाही. स्थानिक Codex खाते डेटा अस्तित्वात आहे, पण कोणतेही सक्रिय व्यवस्थापित सत्र निवडलेले नाही.",
+ "codexNeedsReconnect": "Codex कडे स्थानिकरित्या निवडलेले ChatGPT खाते आहे, पण सध्याच्या सत्राला पुन्हा कनेक्ट करण्याची गरज आहे.",
+ "codexNoChatgptAccount": "Codex CLI कडे सध्या कोणतेही सक्रिय ChatGPT खाते नाही. तुमचे सबस्क्रिप्शन वापरण्यासाठी ChatGPT कनेक्ट करा.",
+ "codexNoCredential": "अद्याप कोणतेही ChatGPT खाते किंवा API की उपलब्ध नाही.",
+ "geminiApiUnavailable": "Gemini API सध्या उपलब्ध नाही. येथे `GEMINI_API_KEY` कॉन्फिगर करा किंवा वैध Google ADC क्रेडेन्शियल्स वापरा.",
+ "withApiKeyFallback": "{{message}} आढळलेली API की वापरण्यासाठी API की मोडवर स्विच करा."
+ },
+ "authModeDescriptions": {
+ "anthropic": {
+ "apiKey": "अॅप-लॉन्च केलेली Anthropic सत्रे API की क्रेडेन्शियल वापरण्यास भाग पाडा.",
+ "auto": "रनटाइम डीफॉल्ट वर्तन वापरा. या अॅपमधील जतन केलेल्या API की तुम्ही API की मोडवर स्विच केल्यानंतरच वापरल्या जातात.",
+ "oauth": "अॅप-लॉन्च केलेली Anthropic सत्रे स्थानिक Anthropic सबस्क्रिप्शन सत्र वापरण्यास भाग पाडा."
+ },
+ "codex": {
+ "apiKey": "नेटिव्ह Codex लॉन्च OPENAI_API_KEY / CODEX_API_KEY बिलिंग वापरण्यास भाग पाडा.",
+ "auto": "तुमचे ChatGPT खाते उपलब्ध असताना त्याला प्राधान्य द्या. गरज असेल तेव्हाच API की मोडकडे परत जा.",
+ "chatgpt": "नेटिव्ह Codex लॉन्च तुमचे कनेक्ट केलेले ChatGPT खाते आणि सबस्क्रिप्शन वापरण्यास भाग पाडा."
+ }
+ },
+ "progress": {
+ "applyingConnectionChanges": "कनेक्शन बदल लागू करत आहे...",
+ "refreshingProviderStatus": "प्रोव्हायडर स्थिती रिफ्रेश करत आहे...",
+ "savingCompatibleEndpoint": "सुसंगत एंडपॉइंट जतन करत आहे...",
+ "switchingAnthropicSubscription": "Anthropic सबस्क्रिप्शनवर बदलत आहे...",
+ "switchingApiKey": "API कीवर बदलत आहे...",
+ "switchingApiKeyMode": "API की मोडवर बदलत आहे...",
+ "switchingAuto": "ऑटोवर बदलत आहे...",
+ "switchingChatgpt": "ChatGPT खाते मोडवर बदलत आहे..."
+ },
+ "provider": "प्रोव्हायडर",
+ "runtime": {
+ "descriptions": {
+ "anthropic": "Anthropic कडे सध्या वेगळा रनटाइम बॅकएंड निवडक नाही.",
+ "codex": "Codex आता फक्त नेटिव्ह रनटाइम पथाद्वारे चालते.",
+ "gemini": "मल्टीमॉडेलने कोणता Gemini रनटाइम बॅकएंड वापरावा ते निवडा.",
+ "opencode": "OpenCode स्वतःचा व्यवस्थापित रनटाइम होस्ट वापरते. डेस्कटॉप सध्या फक्त स्थिती उघड करते."
+ },
+ "title": "रनटाइम",
+ "updating": "रनटाइम अपडेट करत आहे..."
+ },
+ "runtimeSummary": "रनटाइम: {{runtime}}",
+ "status": {
+ "configured": "कॉन्फिगर केले",
+ "enabled": "सक्षम",
+ "notConfigured": "कॉन्फिगर केलेले नाही",
+ "notSet": "सेट केलेले नाही",
+ "off": "बंद",
+ "unknown": "अज्ञात"
+ },
+ "title": "प्रोव्हायडर सेटिंग्ज",
+ "usage": {
+ "apiKey": "API की वापरत आहे",
+ "apiKeyRequired": "API की आवश्यक",
+ "compatibleEndpoint": "सुसंगत एंडपॉइंट वापरत आहे",
+ "notConnected": "कनेक्ट केलेले नाही",
+ "usingMethod": "{{method}} वापरत आहे"
+ },
+ "errors": {
+ "apiKeyDeletedRefreshFailed": "API की हटवली, पण प्रोव्हायडर स्थिती रिफ्रेश करणे अयशस्वी.",
+ "apiKeySavedRefreshFailed": "API की जतन केली, पण प्रोव्हायडर स्थिती रिफ्रेश करणे अयशस्वी.",
+ "connectionUpdatedRefreshFailed": "कनेक्शन अपडेट केले, पण प्रोव्हायडर स्थिती रिफ्रेश करणे अयशस्वी.",
+ "deleteApiKey": "API की हटवणे अयशस्वी",
+ "disableEndpoint": "एंडपॉइंट अक्षम करणे अयशस्वी",
+ "endpointDisabledRefreshFailed": "एंडपॉइंट अक्षम केले, पण प्रोव्हायडर स्थिती रिफ्रेश करणे अयशस्वी.",
+ "endpointSavedRefreshFailed": "एंडपॉइंट जतन केले, पण प्रोव्हायडर स्थिती रिफ्रेश करणे अयशस्वी.",
+ "refreshCodexAccount": "Codex खाते रिफ्रेश करणे अयशस्वी",
+ "saveApiKey": "API की जतन करणे अयशस्वी",
+ "saveEndpoint": "एंडपॉइंट जतन करणे अयशस्वी",
+ "updateAnthropicFastMode": "Anthropic फास्ट मोड अपडेट करणे अयशस्वी",
+ "updateConnection": "कनेक्शन अपडेट करणे अयशस्वी",
+ "updateRuntimeBackend": "रनटाइम बॅकएंड अपडेट करणे अयशस्वी",
+ "apiKeyRequired": "API की आवश्यक आहे"
+ },
+ "connectionUi": {
+ "authMode": {
+ "auto": "ऑटो",
+ "oauth": "सबस्क्रिप्शन / OAuth",
+ "chatgpt": "ChatGPT खाते",
+ "apiKey": "API की",
+ "anthropicSubscription": "Anthropic सबस्क्रिप्शन"
+ },
+ "authMethod": {
+ "apiKey": "API की",
+ "apiKeyHelper": "API की हेल्पर",
+ "oauth": "OAuth",
+ "claudeSubscription": "Claude सबस्क्रिप्शन",
+ "geminiCli": "Gemini CLI",
+ "googleAccount": "Google खाते",
+ "serviceAccount": "सेवा खाते"
+ },
+ "runtime": {
+ "codexNative": "Codex नेटिव्ह",
+ "currentRuntime": "सध्याचा रनटाइम",
+ "selectedRuntime": "निवडलेला रनटाइम",
+ "summary": "{{prefix}}: {{runtime}}"
+ },
+ "status": {
+ "checking": "तपासत आहे...",
+ "modelsAvailable": "मॉडेल्स उपलब्ध",
+ "checked": "तपासले",
+ "providerActivity": "प्रोव्हायडर क्रियाकलाप",
+ "notConnected": "कनेक्ट केलेले नाही",
+ "startingChatGptLogin": "ChatGPT लॉगिन सुरू करत आहे...",
+ "waitingForChatGptLogin": "ChatGPT खाते लॉगिनची वाट पाहत आहे...",
+ "chatGptVerificationDegraded": "ChatGPT खाते आढळले - खाते पडताळणी सध्या खालावलेली आहे.",
+ "chatGptAccountReady": "ChatGPT खाते तयार",
+ "apiKeyReady": "API की तयार",
+ "codexLocalAccountNeedsReconnect": "Codex कडे स्थानिकरित्या निवडलेले ChatGPT खाते आहे, पण सध्याच्या सत्राला पुन्हा कनेक्ट करण्याची गरज आहे.",
+ "codexNoActiveManagedSession": "Codex CLI कोणतेही सक्रिय ChatGPT लॉगिन नसल्याचे नोंदवते. स्थानिक Codex खाते डेटा अस्तित्वात आहे, पण कोणतेही सक्रिय व्यवस्थापित सत्र निवडलेले नाही.",
+ "codexNoActiveChatGptLogin": "Codex CLI कोणतेही सक्रिय ChatGPT लॉगिन नसल्याचे नोंदवते",
+ "connectChatGptForSubscription": "तुमचे Codex सबस्क्रिप्शन वापरण्यासाठी ChatGPT खाते कनेक्ट करा.",
+ "codexNativeReady": "Codex नेटिव्ह तयार",
+ "codexNativeUnavailable": "Codex नेटिव्ह उपलब्ध नाही",
+ "unavailableInCurrentRuntime": "सध्याच्या रनटाइममध्ये उपलब्ध नाही",
+ "connectedViaApiKey": "API की द्वारे कनेक्ट केले",
+ "apiKeyConfiguredNotVerified": "API की कॉन्फिगर केली, पण अद्याप पडताळली नाही",
+ "apiKeyModeMissingCredential": "API की मोड निवडला, पण कोणतीही API की कॉन्फिगर केलेली नाही",
+ "connectedVia": "{{method}} द्वारे कनेक्ट केले",
+ "unableToVerify": "पडताळण्यास असमर्थ"
+ },
+ "mode": {
+ "selectedAuth": "निवडलेले ऑथ: {{authMode}}",
+ "preferredAuth": "पसंतीचे ऑथ: {{authMode}}"
+ },
+ "credential": {
+ "apiKeyConfigured": "API की कॉन्फिगर केली आहे",
+ "savedApiKeyAvailable": "जतन केलेली API की व्यवस्थापित मध्ये उपलब्ध",
+ "apiKeyAlsoConfigured": "API की देखील व्यवस्थापित मध्ये कॉन्फिगर केली आहे",
+ "apiKeyConfiguredInManage": "API की व्यवस्थापित मध्ये कॉन्फिगर केली आहे",
+ "apiKeyFallbackInManage": "API की फॉलबॅक म्हणून देखील व्यवस्थापित मध्ये उपलब्ध",
+ "availableAsFallback": "{{summary}} - फॉलबॅक म्हणून उपलब्ध",
+ "savedApiKeyAvailableIfSwitch": "तुम्ही API की मोडवर स्विच केल्यास जतन केलेली API की व्यवस्थापित मध्ये उपलब्ध",
+ "availableIfSwitch": "{{summary}} - तुम्ही API की मोडवर स्विच केल्यास उपलब्ध",
+ "autoWillUseUntilChatGpt": "{{summary}} - ChatGPT कनेक्ट होईपर्यंत ऑटो हे वापरेल"
+ },
+ "actions": {
+ "connect": "कनेक्ट करा",
+ "connectAnthropic": "Anthropic कनेक्ट करा",
+ "connectChatGpt": "ChatGPT कनेक्ट करा",
+ "disconnect": "डिस्कनेक्ट करा",
+ "openLogin": "लॉगिन उघडा"
+ },
+ "disconnect": {
+ "anthropicTitle": "Anthropic सबस्क्रिप्शन डिस्कनेक्ट करायचे?",
+ "anthropic": "हे Claude CLI रनटाइममधून स्थानिक Anthropic सबस्क्रिप्शन सत्र काढून टाकते.",
+ "anthropicWithApiKey": "हे Claude CLI रनटाइममधून स्थानिक Anthropic सबस्क्रिप्शन सत्र काढून टाकते. व्यवस्थापित मधील जतन केलेल्या API की उपलब्ध राहतात.",
+ "geminiTitle": "Gemini CLI डिस्कनेक्ट करायचे?",
+ "gemini": "हे स्थानिक Gemini CLI सत्र मेटाडेटा साफ करते. बाह्य ADC क्रेडेन्शियल्स आणि जतन केलेल्या API की काढल्या जात नाहीत."
+ }
+ }
+ },
+ "cliRuntime": {
+ "actions": {
+ "checkForUpdates": "अपडेट्स तपासा",
+ "checking": "तपासत आहे...",
+ "extensions": "एक्सटेन्शन्स",
+ "installRuntime": "{{runtime}} इन्स्टॉल करा",
+ "manage": "व्यवस्थापित करा",
+ "recheck": "पुन्हा तपासा",
+ "reinstallRuntime": "{{runtime}} पुन्हा इन्स्टॉल करा",
+ "retry": "पुन्हा प्रयत्न करा",
+ "update": "अपडेट करा"
+ },
+ "installer": {
+ "checkingLatest": "नवीनतम आवृत्ती तपासत आहे...",
+ "downloading": "डाउनलोड करत आहे...",
+ "failed": "इन्स्टॉलेशन अयशस्वी",
+ "installed": "v{{version}} इन्स्टॉल केले",
+ "installing": "इन्स्टॉल करत आहे...",
+ "latest": "नवीनतम",
+ "verifying": "चेकसम पडताळत आहे..."
+ },
+ "labels": {
+ "multimodel": "मल्टीमॉडेल"
+ },
+ "loading": {
+ "aiProviders": "AI प्रोव्हायडर्स तपासत आहे...",
+ "claudeCli": "Claude CLI तपासत आहे..."
+ },
+ "provider": {
+ "backend": "बॅकएंड: {{backend}}",
+ "loadingModels": "मॉडेल्स लोड होत आहेत...",
+ "modelsUnavailable": "या रनटाइम बिल्डसाठी मॉडेल्स उपलब्ध नाहीत",
+ "runtime": "रनटाइम: {{runtime}}"
+ },
+ "providerTerminal": {
+ "authFailed": "प्रमाणीकरण अयशस्वी",
+ "authUpdated": "प्रमाणीकरण अपडेट झाले",
+ "loggedOut": "प्रोव्हायडर लॉग आउट झाला",
+ "login": "लॉग इन",
+ "logout": "लॉग आउट",
+ "logoutFailed": "लॉग आउट अयशस्वी"
+ },
+ "status": {
+ "configuredNotFound": "कॉन्फिगर केलेले {{runtime}} सापडले नाही.",
+ "foundButFailed": "{{runtime}} सापडले पण सुरू होण्यात अयशस्वी",
+ "healthCheckFailed": "कॉन्फिगर केलेल्या {{runtime}} ची स्टार्टअप हेल्थ चेक अयशस्वी झाली.",
+ "notInstalled": "{{runtime}} इन्स्टॉल केलेले नाही"
+ },
+ "title": "CLI रनटाइम"
+ },
+ "cliStatus": {
+ "versionUpgrade": "v{{current}} -> v{{latest}}"
+ }
+}
diff --git a/src/features/localization/renderer/locales/mr/team.json b/src/features/localization/renderer/locales/mr/team.json
new file mode 100644
index 00000000..dfc2b66f
--- /dev/null
+++ b/src/features/localization/renderer/locales/mr/team.json
@@ -0,0 +1,2487 @@
+{
+ "activity": {
+ "actions": {
+ "createTaskFromMessage": "संदेशातून टास्क तयार करा",
+ "editMessage": "संदेश संपादित करा",
+ "expandMessage": "संदेश विस्तृत करा",
+ "replyToMessage": "संदेशाला उत्तर द्या",
+ "restartTeam": "टीम रीस्टार्ट करा"
+ },
+ "authError": {
+ "description": "प्रमाणीकरण अयशस्वी. टीम रीस्टार्ट केल्याने सत्र रिफ्रेश होईल आणि ही समस्या सुटू शकते. समस्या कायम राहिल्यास, तुमचे API क्रेडेन्शियल्स तपासा किंवा नंतर पुन्हा प्रयत्न करा."
+ },
+ "automation": {
+ "reviewPickup": "सहकाऱ्याला पुनरावलोकन हाती घेण्यास सांगितले",
+ "stallNudge": "सहकाऱ्याला थांबलेले टास्क सुरू ठेवण्यास सांगितले",
+ "workSyncBody": "सहकाऱ्याला सध्याचे काम सिंक करण्यास सांगितले"
+ },
+ "badges": {
+ "automation": "ऑटोमेशन",
+ "bootstrap": "बूटस्ट्रॅप",
+ "command": "कमांड",
+ "comment": "टिप्पणी",
+ "live": "लाइव्ह",
+ "note": "नोट",
+ "rateLimited": "दर मर्यादित",
+ "restart": "रीस्टार्ट",
+ "result": "परिणाम",
+ "session": "सत्र",
+ "stallNudge": "स्टॉल नज",
+ "start": "सुरू",
+ "workSync": "वर्क सिंक",
+ "agentError": "एजंट त्रुटी",
+ "apiError": "API त्रुटी"
+ },
+ "bootstrap": {
+ "acknowledged": "बूटस्ट्रॅप स्वीकारले",
+ "restarting": "सहकारी रीस्टार्ट करत आहे",
+ "starting": "सहकारी सुरू करत आहे"
+ },
+ "rawJson": "कच्चा JSON",
+ "unread": "न वाचलेले",
+ "thoughts": {
+ "count": "{{count}} विचार",
+ "count_one": "{{count}} विचार",
+ "expand": "विचार विस्तृत करा",
+ "showMore": "अधिक दाखवा",
+ "showLess": "कमी दाखवा",
+ "count_few": "{{count}} विचार",
+ "count_many": "{{count}} विचार",
+ "count_other": "{{count}} विचार",
+ "toolSummary": "🔧 {{summary}}",
+ "titleForMember": "{{name}} - विचार"
+ },
+ "timeline": {
+ "loadingMessages": "संदेश लोड होत आहेत...",
+ "noMessages": "कोणतेही संदेश नाहीत",
+ "emptyHint": "क्रियाकलाप पाहण्यासाठी एखाद्या सदस्याला संदेश पाठवा.",
+ "newSession": "नवीन सत्र",
+ "olderCount": "+{{count}} जुने",
+ "showMore": "आणखी {{count}} दाखवा",
+ "showAll": "सर्व दाखवा",
+ "olderCount_one": "+{{count}} जुने",
+ "olderCount_few": "+{{count}} जुने",
+ "olderCount_many": "+{{count}} जुने",
+ "olderCount_other": "+{{count}} जुने"
+ },
+ "pendingReplies": {
+ "title": "उत्तरांची वाट पाहत आहे",
+ "openMember": "सदस्य उघडा",
+ "messageSentAwaitingReply": "संदेश पाठवला, उत्तराची वाट पाहत आहे",
+ "awaitingReply": "उत्तराची वाट पाहत आहे",
+ "externalTeam": "बाह्य टीम",
+ "crossTeamAwaitingReply": "क्रॉस-टीम संदेश पाठवला, उत्तराची वाट पाहत आहे",
+ "user": "वापरकर्ता",
+ "awaitingApproval": "मंजुरीची वाट पाहत आहे"
+ },
+ "reply": {
+ "replyingTo": "यांना उत्तर देत आहे",
+ "action": "उत्तर द्या"
+ },
+ "activeTasks": {
+ "inProgress": "प्रगतीपथावर",
+ "expandInProgress": "प्रगतीपथावरील विस्तृत करा",
+ "collapseInProgress": "प्रगतीपथावरील संकुचित करा",
+ "reviewing": "पुनरावलोकन करत आहे",
+ "workingOn": "यावर काम करत आहे"
+ },
+ "expandDialog": {
+ "description": "विस्तृत संदेश दृश्य"
+ }
+ },
+ "create": {
+ "actions": {
+ "create": "तयार करा",
+ "creating": "तयार करत आहे...",
+ "openExisting": "विद्यमान टीम उघडा",
+ "skipPreflightAndCreate": "प्रीफ्लाइट वगळा आणि तयार करा"
+ },
+ "conflict": {
+ "description": "एकाच डिरेक्टरीमध्ये दोन टीम्स चालवणे जोखमीचे आहे - त्या समान फाइल्स संपादित करताना संघर्ष करू शकतात. पृथक्करणासाठी वेगळी डिरेक्टरी किंवा git worktree वापरण्याचा विचार करा.",
+ "title": "या वर्किंग डिरेक्टरीसाठी आधीच दुसरी टीम \"{{team}}\" चालू आहे",
+ "workingDirectory": "वर्किंग डिरेक्टरी:"
+ },
+ "description": {
+ "copy": "विद्यमान टीमवर आधारित नवीन टीम तयार करा.",
+ "create": "तुमची टीम सेट करा आणि ती कशी सुरू होते ते निवडा."
+ },
+ "errors": {
+ "nameExists": "टीम नाव आधीच अस्तित्वात आहे",
+ "nameLaunching": "या नावाची टीम सध्या सुरू होत आहे",
+ "createConfigFailed": "टीम कॉन्फिग तयार करणे अयशस्वी",
+ "loadProjectsFailed": "प्रकल्प लोड करणे अयशस्वी"
+ },
+ "fields": {
+ "color": "रंग (ऐच्छिक)",
+ "description": "वर्णन (ऐच्छिक)",
+ "prompt": "टीम लीडसाठी प्रॉम्प्ट (ऐच्छिक)",
+ "teamName": "टीम नाव"
+ },
+ "launchAfterCreate": {
+ "description": "स्थानिक Claude CLI द्वारे टीम लगेच सुरू करा.",
+ "label": "तयार केल्यानंतर कमांड चालवा"
+ },
+ "localOnly": "फक्त स्थानिक Electron मोडमध्ये उपलब्ध.",
+ "onDisk": "डिस्कवर:",
+ "placeholders": {
+ "description": "टीमच्या उद्देशाचे संक्षिप्त वर्णन",
+ "prompt": "प्रोव्हिजनिंग दरम्यान टीम लीडसाठी सूचना..."
+ },
+ "saved": "जतन केले",
+ "solo": {
+ "description": "फक्त टीम लीड (मुख्य प्रक्रिया) सुरू होईल - कोणतेही सहकारी तयार केले जाणार नाहीत. तुमच्या निवडलेल्या रनटाइममध्ये (Claude Code, Codex, OpenCode, Gemini) नियमित एजंट सत्रासारखे काम करते, पण नियोजनासाठी टास्क बोर्डच्या प्रवेशासह. सहकारी समन्वय ओव्हरहेड टाळून टोकन्स वाचवते. तुम्ही टीम सेटिंग्जमधून नंतर सदस्य जोडू शकता.",
+ "label": "एकल टीम"
+ },
+ "title": {
+ "copy": "टीम कॉपी करा",
+ "create": "टीम तयार करा"
+ },
+ "optional": {
+ "launchSettingsTitle": "ऐच्छिक लॉन्च सेटिंग्ज",
+ "launchSettingsDescription": "तुम्हाला गरज असेल तेव्हा प्रॉम्प्ट, सुरक्षा आणि CLI ओव्हरराइड्स येथे राहतात.",
+ "teamDetailsTitle": "ऐच्छिक टीम तपशील",
+ "teamDetailsDescription": "डीफॉल्ट फ्लो संक्षिप्त ठेवा आणि तुम्हाला अतिरिक्त संदर्भ किंवा कस्टम रंग हवा असेल तेव्हाच हे उघडा."
+ },
+ "prepare": {
+ "unsupportedPreload": "सध्याची preload आवृत्ती team:prepareProvisioning ला समर्थन देत नाही. dev अॅप रीस्टार्ट करा.",
+ "selectWorkingDirectory": "लॉन्च एन्व्हायर्न्मेंट पडताळण्यासाठी एक वर्किंग डिरेक्टरी निवडा.",
+ "someProvidersNeedAttention": "काही निवडलेल्या प्रोव्हायडर्सना लक्ष देण्याची गरज आहे.",
+ "readyWithNotes": "सर्व निवडलेले प्रोव्हायडर्स तयार आहेत, नोट्ससह.",
+ "ready": "सर्व निवडलेले प्रोव्हायडर्स तयार आहेत.",
+ "failed": "निवडलेले प्रोव्हायडर्स तयार करणे अयशस्वी",
+ "checkingProviders": "निवडलेले प्रोव्हायडर्स तपासत आहे...",
+ "preparingEnvironment": "एन्व्हायर्न्मेंट तयार करत आहे...",
+ "selectedProvidersReadyWithNotes": "निवडलेले प्रोव्हायडर्स तयार (नोट्ससह)",
+ "selectedProvidersReady": "निवडलेले प्रोव्हायडर्स तयार"
+ },
+ "validation": {
+ "nameMustContainLetterOrDigit": "नावात किमान एक अक्षर किंवा अंक असणे आवश्यक आहे",
+ "nameTooLong": "नाव खूप लांब आहे (कमाल 128 अक्षरे)",
+ "selectWorkingDirectory": "वर्किंग डिरेक्टरी निवडा (cwd)",
+ "memberNameRequired": "सदस्य नाव रिकामे असू शकत नाही",
+ "memberNameInvalid": "सदस्य नाव अल्फान्यूमेरिकने सुरू झाले पाहिजे, फक्त [a-zA-Z0-9._-] वापरा, कमाल 128 अक्षरे",
+ "memberNamesUnique": "सदस्य नावे अद्वितीय असणे आवश्यक आहे",
+ "openCodeLeadModelRequired": "OpenCode लीडला निवडलेले मॉडेल आवश्यक आहे.",
+ "openCodeTeammateRequired": "OpenCode लीडला किमान एक OpenCode सहकारी आवश्यक आहे.",
+ "teamLaunching": "टीम सध्या सुरू होत आहे",
+ "teamNameExists": "टीम नाव आधीच अस्तित्वात आहे",
+ "checkFormFields": "फॉर्म फील्ड्स तपासा"
+ }
+ },
+ "editTeam": {
+ "actions": {
+ "cancel": "रद्द करा",
+ "save": "जतन करा"
+ },
+ "addMemberLockReason": "टीम लाइव्ह असताना नवीन सहकारी जोडण्यासाठी समर्पित सदस्य जोडा डायलॉग वापरा.",
+ "description": "टीम नाव, वर्णन आणि रंग बदला",
+ "errors": {
+ "changesSavedRefreshFailed": "टीम बदल जतन केले गेले, पण नवीनतम दृश्य रिफ्रेश करणे अयशस्वी: {{message}}",
+ "liveRenameBlocked": "टीम लाइव्ह असताना विद्यमान सहकाऱ्यांचे नाव बदलता येत नाही. नाव बदललेले: {{names}}",
+ "memberNameEmpty": "सदस्य नाव रिकामे असू शकत नाही",
+ "memberNameInvalid": "सदस्य नाव अल्फान्यूमेरिकने सुरू झाले पाहिजे, फक्त [a-zA-Z0-9._-] वापरा, कमाल 128 अक्षरे",
+ "memberNameNumericSuffix": "सदस्य नाव \"{{name}}\" अनुमत नाही (Claude CLI ऑटो-सफिक्ससाठी राखीव). त्याऐवजी \"{{base}}\" वापरा.",
+ "memberNameReserved": "सदस्य नाव \"{{name}}\" राखीव आहे",
+ "memberNamesUnique": "जतन करण्यापूर्वी सदस्य नावे अद्वितीय असणे आवश्यक आहे",
+ "newLiveTeammates": "टीम लाइव्ह असताना समर्पित सदस्य जोडा डायलॉगमधून नवीन सहकारी जोडा. टीम संपादित करा फक्त विद्यमान सहकारी अपडेट करण्यास समर्थन देते.",
+ "provisioning": "प्रोव्हिजनिंग अद्याप सुरू असताना टीम सेटिंग्ज संपादित करता येत नाहीत. लॉन्च पूर्ण होण्याची वाट पाहा, मग पुन्हा प्रयत्न करा.",
+ "restartFailedMany": "टीम जतन केली, पण या सहकाऱ्यांना रीस्टार्ट करणे अयशस्वी: {{failures}}",
+ "restartFailedOne": "टीम जतन केली, पण या सहकाऱ्याला रीस्टार्ट करणे अयशस्वी: {{failures}}",
+ "saveFailed": "जतन करणे अयशस्वी",
+ "settingsChanged": "हा डायलॉग उघडा असताना टीम सेटिंग्ज बदलल्या. ते पुन्हा उघडा आणि जतन करण्यापूर्वी नवीनतम स्थिती तपासा.",
+ "settingsSavedMembersAndRefreshFailed": "टीम सेटिंग्ज जतन केल्या, पण सदस्य बदल अयशस्वी: {{message}}. रिफ्रेश देखील अयशस्वी: {{refreshError}}",
+ "settingsSavedMembersFailed": "टीम सेटिंग्ज जतन केल्या, पण सदस्य बदल अयशस्वी: {{message}}",
+ "settingsSavedRefreshFailed": "टीम सेटिंग्ज जतन केल्या, पण नवीनतम दृश्य रिफ्रेश करणे अयशस्वी: {{message}}",
+ "teamNameEmpty": "टीम नाव रिकामे असू शकत नाही",
+ "unsupportedMixedPrimaryMutation": "मिश्र OpenCode टीम्समधील प्राथमिक-मालकीच्या सहकाऱ्यांचे लाइव्ह संपादन अद्याप समर्थित नाही. टीम थांबवा, रोस्टर संपादित करा, मग पुन्हा सुरू करा. प्रभावित: {{names}}"
+ },
+ "fields": {
+ "colorOptional": "रंग (ऐच्छिक)",
+ "description": "वर्णन",
+ "name": "नाव"
+ },
+ "memberRestartWarning": "जतन केल्याने भूमिका, वर्कफ्लो, worktree पृथक्करण, प्रोव्हायडर, मॉडेल, प्रयत्न किंवा MCP प्रवेश बदल लागू करण्यासाठी या सहकाऱ्याला रीस्टार्ट केले जाईल.",
+ "notices": {
+ "liveRenameBlocked": "विद्यमान सहकाऱ्यांचे नाव बदलल्यामुळे लाइव्ह जतन अवरोधित आहे. ते ओळख बदल मागे घ्या किंवा प्रथम टीम थांबवा.",
+ "newLiveTeammates": "टीम लाइव्ह असताना टीम संपादित करा मधून नवीन सहकारी जोडता येत नाहीत. त्याऐवजी सदस्य जोडा डायलॉग वापरा.",
+ "provisioning": "टीम प्रोव्हिजनिंग अद्याप सुरू आहे. लॉन्च पूर्ण होईपर्यंत संपादन तात्पुरते लॉक केले आहे.",
+ "restartMany": "जतन केल्याने भूमिका, वर्कफ्लो, worktree पृथक्करण, प्रोव्हायडर, मॉडेल, प्रयत्न किंवा MCP प्रवेश बदल लागू करण्यासाठी या सहकाऱ्यांना रीस्टार्ट किंवा पुन्हा सुरू केले जाईल: {{names}}.",
+ "restartOne": "जतन केल्याने भूमिका, वर्कफ्लो, worktree पृथक्करण, प्रोव्हायडर, मॉडेल, प्रयत्न किंवा MCP प्रवेश बदल लागू करण्यासाठी या सहकाऱ्याला रीस्टार्ट किंवा पुन्हा सुरू केले जाईल: {{names}}.",
+ "unsupportedMixedPrimaryMutation": "मिश्र OpenCode टीम्समधील प्राथमिक-मालकीच्या सहकाऱ्यांचे लाइव्ह संपादन/काढून टाकणे यासाठी टीम थांबवून पुन्हा सुरू करणे आवश्यक आहे: {{names}}."
+ },
+ "placeholders": {
+ "description": "टीम वर्णन (ऐच्छिक)",
+ "teamName": "टीम नाव"
+ },
+ "teamLead": {
+ "changeRuntime": "लीड रनटाइम बदला",
+ "changeRuntimeDescription": "लीड प्रोव्हायडर, मॉडेल किंवा प्रयत्न बदलण्यासाठी टीम पुन्हा सुरू करा उघडा.",
+ "modelLockReason": "टीम लीड रनटाइम टीम पुन्हा सुरू करा मधून व्यवस्थापित केला जातो.",
+ "readOnlyHint": "टीम लीडचे नाव आणि भूमिका येथे फक्त-वाचनीय राहतात. प्रोव्हायडर, मॉडेल किंवा प्रयत्न बदलण्यासाठी लीड पंक्तीवरील रनटाइम पॅनेल उघडा.",
+ "role": "टीम लीड"
+ },
+ "title": "टीम संपादित करा"
+ },
+ "memberDraft": {
+ "actions": {
+ "remove": "सदस्य काढा",
+ "removeAria": "{{name}} काढा",
+ "restore": "सदस्य पुनर्संचयित करा",
+ "restoreAria": "{{name}} पुनर्संचयित करा"
+ },
+ "anthropicContext": {
+ "defaultSetting": "डीफॉल्ट संदर्भ सेटिंग",
+ "description": "या लॉन्चसाठी Anthropic संदर्भ टीम-व्यापी आहे: {{mode}}. ते बदलण्यासाठी लीड रनटाइम पॅनेलचा संदर्भ मर्यादित करा चेकबॉक्स वापरा.",
+ "limitEnabled": "200K मर्यादा सक्षम"
+ },
+ "mcp": {
+ "buttonInherit": "MCP वारसा",
+ "buttonScopes": "MCP व्याप्ती",
+ "chooseScopes": "व्याप्ती निवडा",
+ "inheritLead": "लीडकडून वारसा",
+ "lockedInfo": "सर्व सहकाऱ्यांसाठी फक्त Agent Teams MCP सक्षम आहे. हा सहकारी फक्त Agent Teams सर्व्हरसह सुरू होईल.",
+ "mode": "MCP मोड",
+ "scopes": {
+ "local": "स्थानिक",
+ "project": "प्रकल्प",
+ "user": "वापरकर्ता"
+ },
+ "serverNames": "सर्व्हर नावे",
+ "settingInfo": "Agent Teams MCP या सहकाऱ्याला फक्त Agent Teams सर्व्हरसह सुरू करते. व्याप्ती आणि allowlist मोड फक्त या सहकारी लॉन्चलाच लागू होतात.",
+ "strictAllowlist": "कठोर allowlist",
+ "tooltip": "{{label}}: या सदस्याचे MCP वारसा धोरण नियंत्रित करा",
+ "agentTeamsMcp": "Agent Teams MCP"
+ },
+ "model": {
+ "ariaLabel": "{{provider}} प्रोव्हायडर, {{model}}",
+ "currentLeadRuntime": "सध्याचा लीड रनटाइम",
+ "default": "डीफॉल्ट",
+ "inheritedTooltip": "सिंक सक्षम असताना प्रोव्हायडर, मॉडेल आणि प्रयत्न लीडकडून वारशाने मिळतात.",
+ "leadSuffix": "{{label}} (लीड)",
+ "liveDisabled": "टीम लाइव्ह असताना प्रोव्हायडर, मॉडेल आणि प्रयत्न बदल अक्षम आहेत. ते सुरक्षितपणे लागू करण्यासाठी टीम पुन्हा कनेक्ट करा.",
+ "lockedActionFallback": "लीड रनटाइम बदल टीम पुन्हा सुरू करा उघडतात, जिथे प्रोव्हायडर, मॉडेल आणि प्रयत्न अपडेट करता येतात.",
+ "restartWholeTeam": "ते रनटाइम बदल जतन केल्याने संपूर्ण टीम रीस्टार्ट होते."
+ },
+ "nameAria": "सदस्य {{index}} नाव",
+ "nameFallback": "सदस्य {{index}}",
+ "noRole": "कोणतीही भूमिका नाही",
+ "removed": "काढले",
+ "workflow": {
+ "addTooltip": "सहकारी वर्कफ्लो जोडा",
+ "editTooltip": "सहकारी वर्कफ्लो संपादित करा",
+ "label": "वर्कफ्लो (ऐच्छिक)",
+ "placeholder": "हा एजंट कसा वागावा, इतरांशी कसा संवाद साधावा...",
+ "saved": "जतन केले"
+ },
+ "worktree": {
+ "description": "हा सहकारी वेगळ्या git worktree मध्ये चालवा. बदल लागू करा/नाकारा त्या worktree ला लक्ष्य करते, लीड वर्कस्पेसला नाही.",
+ "label": "Worktree"
+ },
+ "addMembers": {
+ "title": "सदस्य जोडा",
+ "description": "{{teamName}} मध्ये नवीन सदस्य जोडा"
+ },
+ "placeholders": {
+ "name": "member-name",
+ "mcpServers": "github, sentry"
+ }
+ },
+ "detail": {
+ "actions": {
+ "add": "जोडा",
+ "cancel": "रद्द करा",
+ "delete": "हटवा",
+ "editCode": "कोड संपादित करा",
+ "launch": "सुरू करा",
+ "remove": "काढा",
+ "stop": "थांबवा",
+ "task": "टास्क",
+ "visualize": "व्हिज्युअलाइझ करा"
+ },
+ "deleteTeam": {
+ "description": "टीम \"{{team}}\" हटवायची? ही क्रिया अपरिवर्तनीय आहे. सर्व टीम डेटा आणि टास्क हटवली जातील.",
+ "title": "टीम हटवा"
+ },
+ "draft": {
+ "descriptionPrefix": "ही एक मसुदा टीम आहे -",
+ "descriptionSuffix": "{{count}} {{member}} सह कॉन्फिगर केले आहे पण अद्याप CLI ने प्रोव्हिजन केलेले नाही. मॉडेल निवडण्यासाठी आणि टीम सुरू करण्यासाठी सुरू करा क्लिक करा.",
+ "descriptionSuffix_few": "{{count}} {{member}} सह कॉन्फिगर केले आहे पण अद्याप CLI ने प्रोव्हिजन केलेले नाही. मॉडेल निवडण्यासाठी आणि टीम सुरू करण्यासाठी सुरू करा क्लिक करा.",
+ "descriptionSuffix_many": "{{count}} {{member}} सह कॉन्फिगर केले आहे पण अद्याप CLI ने प्रोव्हिजन केलेले नाही. मॉडेल निवडण्यासाठी आणि टीम सुरू करण्यासाठी सुरू करा क्लिक करा.",
+ "descriptionSuffix_one": "{{count}} {{member}} सह कॉन्फिगर केले आहे पण अद्याप CLI ने प्रोव्हिजन केलेले नाही. मॉडेल निवडण्यासाठी आणि टीम सुरू करण्यासाठी सुरू करा क्लिक करा.",
+ "descriptionSuffix_other": "{{count}} {{member}} सह कॉन्फिगर केले आहे पण अद्याप CLI ने प्रोव्हिजन केलेले नाही. मॉडेल निवडण्यासाठी आणि टीम सुरू करण्यासाठी सुरू करा क्लिक करा.",
+ "member": "सदस्य",
+ "member_few": "सदस्य",
+ "member_many": "सदस्य",
+ "member_one": "सदस्य",
+ "member_other": "सदस्य",
+ "title": "टीम अद्याप सुरू झाली नाही"
+ },
+ "invalidTab": "अवैध टीम टॅब",
+ "kanbanSafeData": "kanban पूर्णपणे लोड करणे अयशस्वी. सुरक्षित डेटा दाखवत आहे.",
+ "loadFailed": "टीम लोड करणे अयशस्वी",
+ "loading": "टीम लोड होत आहे",
+ "loadingSidebar": "टीम साइडबार लोड होत आहे",
+ "offline": {
+ "offline": "टीम ऑफलाइन आहे",
+ "partialFailed": "शेवटचे सुरू होणे मध्येच अयशस्वी",
+ "partialMissing": "शेवटचे सुरू होणे मध्येच अयशस्वी - {{missing}}/{{expected}} सहकारी सामील झाले नाहीत",
+ "reconciling": "शेवटचे सुरू होणे अजूनही समन्वयित होत आहे"
+ },
+ "previous": "मागील: {{paths}}",
+ "removeMember": {
+ "description": "टीममधून \"{{member}}\" काढायचे? टास्क आणि संदेश जतन केले जातील, पण हे नाव पुन्हा वापरता येणार नाही.",
+ "title": "सदस्य काढा"
+ },
+ "sections": {
+ "team": "टीम"
+ },
+ "solo": "एकल",
+ "status": {
+ "active": "सक्रिय",
+ "launching": "सुरू करत आहे...",
+ "running": "चालू आहे"
+ },
+ "telemetry": {
+ "cpu": "CPU",
+ "memory": "मेमरी"
+ },
+ "tooltips": {
+ "deleteTeam": "टीम हटवा",
+ "editTeam": "टीम संपादित करा",
+ "editUnavailableProvisioning": "प्रोव्हिजनिंग अद्याप सुरू असताना टीम संपादित करा उपलब्ध नाही",
+ "openBuiltInEditor": "प्रकल्प अंगभूत एडिटरमध्ये उघडा",
+ "openTeamGraph": "टीम ग्राफ उघडा",
+ "stopTeam": "टीम थांबवा"
+ },
+ "waitingForProvisioning": "प्रोव्हिजनिंग पूर्ण झाल्यावर टीम डेटा दिसेल",
+ "context": {
+ "title": "संदर्भ",
+ "loading": "लोड होत आहे...",
+ "noSessionLoaded": "कोणतेही सत्र लोड केले नाही",
+ "closePanel": "{{team}} संदर्भ पॅनेल बंद करा",
+ "loadingContext": "संदर्भ लोड होत आहे...",
+ "openLeadSession": "संदर्भ पाहण्यासाठी टीम लीड सत्र उघडा."
+ }
+ },
+ "review": {
+ "fileHeader": {
+ "actions": {
+ "accept": "स्वीकारा",
+ "discard": "टाकून द्या",
+ "discardTooltip": "या फाइलसाठी सर्व संपादने टाकून द्या",
+ "keepMyDraft": "माझा मसुदा ठेवा",
+ "reject": "नाकारा",
+ "reloadFromDisk": "डिस्कवरून पुन्हा लोड करा",
+ "restore": "पुनर्संचयित करा",
+ "restoreTooltip": "पूर्वावलोकनातून ही फाइल डिस्कवर तयार/पुनर्संचयित करा",
+ "saveFile": "फाइल जतन करा",
+ "saveFileTooltip": "फाइल डिस्कवर जतन करा"
+ },
+ "badges": {
+ "deleted": "हटवले",
+ "manualReview": "मॅन्युअल पुनरावलोकन",
+ "new": "नवीन",
+ "worktree": "WORKTREE"
+ },
+ "contentSource": {
+ "disk-current": "सध्याचा डिस्क",
+ "file-history": "फाइल इतिहास",
+ "git-fallback": "Git फॉलबॅक",
+ "ledger-exact": "टास्क लेजर",
+ "ledger-snapshot": "लेजर स्नॅपशॉट",
+ "snippet-reconstruction": "पुनर्रचित",
+ "unavailable": "मजकूर उपलब्ध नाही"
+ },
+ "contentUnavailable": {
+ "badge": "मजकूर उपलब्ध नाही",
+ "description": "लेजरने या बदलासाठी मेटाडेटा नोंदवला, पण पूर्ण मजकूर सामग्री उपलब्ध नाही. याचा अर्थ सहसा बायनरी, मोठी किंवा फक्त-हॅश सामग्री असा होतो.",
+ "safety": "असुरक्षित डिस्क लेखन टाळण्यासाठी या फाइलसाठी स्वयंचलित स्वीकार/नकार अक्षम आहे.",
+ "title": "मजकूर सामग्री उपलब्ध नाही"
+ },
+ "disabled": {
+ "acceptRejectContentUnavailable": "पूर्ण मजकूर सामग्री उपलब्ध नसल्यामुळे स्वीकार/नकार अक्षम आहे.",
+ "acceptRejectMissingOnDisk": "फाइल डिस्कवर गहाळ असताना स्वीकार/नकार अक्षम आहे.",
+ "rejectBaselineUnavailable": "मूळ बेसलाइन उपलब्ध नसल्यामुळे नकार अक्षम आहे.",
+ "rejectContentUnavailable": "पूर्ण मजकूर सामग्री उपलब्ध नसल्यामुळे नकार अक्षम आहे.",
+ "rejectManualLedgerReview": "या लेजर बदलात बायनरी, मोठी किंवा अनुपलब्ध सामग्री असल्यामुळे नकार अक्षम आहे."
+ },
+ "externalChange": {
+ "changedOnDisk": "डिस्कवर बदलले",
+ "deletedOnDisk": "डिस्कवर हटवले",
+ "recreatedOnDisk": "डिस्कवर पुन्हा तयार केले"
+ },
+ "missingOnDisk": {
+ "badge": "डिस्कवर गहाळ",
+ "description": "आम्ही अद्याप एजंट लॉग्समधून पूर्वावलोकन दाखवू शकतो, पण तुमची फाइलसिस्टम सिंकमध्ये नाही.",
+ "restorePrefix": "वापरा",
+ "restoreSuffix": "पूर्वावलोकन सामग्री डिस्कवर परत लिहिण्यासाठी.",
+ "restoreUnavailable": "स्वयंचलितपणे पुनर्संचयित करण्यासाठी पूर्ण फाइल सामग्री उपलब्ध नाही.",
+ "title": "फाइल डिस्कवर गहाळ आहे"
+ },
+ "pathChange": {
+ "from": "{{path}} पासून",
+ "to": "{{path}} पर्यंत"
+ },
+ "worktree": {
+ "isolated": "पृथक worktree"
+ }
+ },
+ "toolbar": {
+ "stats": {
+ "pending": "{{count}} प्रलंबित",
+ "pending_one": "{{count}} प्रलंबित",
+ "pending_other": "{{count}} प्रलंबित",
+ "accepted": "{{count}} स्वीकारले",
+ "accepted_one": "{{count}} स्वीकारले",
+ "accepted_other": "{{count}} स्वीकारले",
+ "rejected": "{{count}} नाकारले",
+ "rejected_one": "{{count}} नाकारले",
+ "rejected_other": "{{count}} नाकारले",
+ "acrossFiles": "{{count}} फाइल्समध्ये",
+ "acrossFiles_one": "{{count}} फाइलमध्ये",
+ "acrossFiles_other": "{{count}} फाइल्समध्ये",
+ "edited": "{{count}} संपादित",
+ "edited_one": "{{count}} संपादित",
+ "edited_other": "{{count}} संपादित",
+ "pending_few": "{{count}} प्रलंबित",
+ "pending_many": "{{count}} प्रलंबित",
+ "accepted_few": "{{count}} स्वीकारले",
+ "accepted_many": "{{count}} स्वीकारले",
+ "rejected_few": "{{count}} नाकारले",
+ "rejected_many": "{{count}} नाकारले",
+ "acrossFiles_few": "{{count}} फाइल्समध्ये",
+ "acrossFiles_many": "{{count}} फाइल्समध्ये",
+ "edited_few": "{{count}} संपादित",
+ "edited_many": "{{count}} संपादित"
+ },
+ "actions": {
+ "auto": "ऑटो",
+ "undo": "पूर्ववत करा",
+ "acceptAll": "सर्व स्वीकारा",
+ "rejectAll": "सर्व नाकारा",
+ "applying": "लागू करत आहे...",
+ "applyRejections": "नकार लागू करा"
+ },
+ "tooltips": {
+ "autoOn": "शेवटपर्यंत स्क्रोल केल्यावर फाइल्स पाहिलेल्या म्हणून ऑटो-चिन्हांकित करा (चालू)",
+ "autoOff": "शेवटपर्यंत स्क्रोल केल्यावर फाइल्स पाहिलेल्या म्हणून ऑटो-चिन्हांकित करा (बंद)",
+ "undo": "शेवटचे पुनरावलोकन ऑपरेशन पूर्ववत करा (Ctrl+Z)",
+ "acceptAll": "सर्व फाइल्समधील सर्व बदल स्वीकारा",
+ "rejectAll": "सर्व फाइल्समधील सर्व सुरक्षितपणे नाकारता येणारे बदल नाकारा",
+ "rejectAllDisabled": "कोणत्याही प्रलंबित फाइलला नाकारण्यासाठी सुरक्षित मूळ बेसलाइन नाही.",
+ "applyRejections": "नाकारलेले हंक्स डिस्कवर लागू करा; स्वीकारलेले बदल जसेच्या तसे ठेवले जातात"
+ }
+ },
+ "diffError": {
+ "title": "diff दृश्य रेंडर करणे अयशस्वी",
+ "unexpected": "diff रेंडर करताना एक अनपेक्षित त्रुटी आली.",
+ "actions": {
+ "retry": "पुन्हा प्रयत्न करा"
+ },
+ "raw": {
+ "show": "कच्चा diff डेटा दाखवा",
+ "file": "फाइल: {{file}}",
+ "original": "--- मूळ",
+ "modified": "+++ सुधारित",
+ "charsTotal": "... (एकूण {{count}} अक्षरे)",
+ "charsTotal_one": "... (एकूण {{count}} अक्षर)",
+ "charsTotal_other": "... (एकूण {{count}} अक्षरे)",
+ "charsTotal_few": "... (एकूण {{count}} अक्षरे)",
+ "charsTotal_many": "... (एकूण {{count}} अक्षरे)"
+ }
+ },
+ "fileTree": {
+ "viewed": "पाहिले",
+ "badges": {
+ "new": "नवीन",
+ "deleted": "हटवले"
+ },
+ "collapseFolder": "{{name}} संकुचित करा",
+ "expandFolder": "{{name}} विस्तृत करा",
+ "empty": {
+ "noChangedFiles": "कोणत्याही बदललेल्या फाइल्स नाहीत",
+ "noMatchingFiles": "जुळणाऱ्या कोणत्याही फाइल्स नाहीत"
+ },
+ "searchPlaceholder": "फाइल्स शोधा…",
+ "filters": {
+ "unresolved": "निराकरण न झालेले",
+ "rejected": "नाकारलेले",
+ "new": "नवीन",
+ "clear": "साफ करा"
+ }
+ },
+ "diffControls": {
+ "previousChunk": "मागील चंक",
+ "nextChunk": "पुढील चंक",
+ "rejectChange": "बदल नाकारा (⌘N)",
+ "acceptChange": "बदल स्वीकारा (⌘Y)",
+ "undo": "पूर्ववत करा",
+ "keep": "ठेवा",
+ "rejectShortcut": "⌘N",
+ "acceptShortcut": "⌘Y"
+ },
+ "conflict": {
+ "title": "संघर्ष आढळला",
+ "description": "एजंटच्या बदलांनंतर ही फाइल सुधारित केली गेली आहे",
+ "cancel": "रद्द करा",
+ "saveResolution": "निराकरण जतन करा",
+ "editManually": "मॅन्युअली संपादित करा",
+ "useOriginal": "मूळ वापरा",
+ "keepCurrent": "सध्याचे ठेवा"
+ },
+ "fullDiffLoading": {
+ "titleOne": "पूर्ण Diff तयार करत आहे",
+ "titleMany": "{{count}} पूर्ण Diffs तयार करत आहे",
+ "subtitleForFile": "{{file}} साठी अचूक एडिटर diff अंतिम करत आहे.",
+ "subtitleCurrentFile": "सध्याच्या फाइलसाठी अचूक एडिटर diff अंतिम करत आहे.",
+ "subtitleMany": "सध्या लोड होत असलेल्या फाइल्ससाठी अचूक आधी/नंतर बेसलाइन्स निराकरण करत आहे.",
+ "previewsReady": "{{count}} पूर्वावलोकने तयार",
+ "previewsReady_one": "{{count}} पूर्वावलोकन तयार",
+ "editorViewLoading": "एडिटर दृश्य लोड होत आहे",
+ "filesInProgress": "{{count}} फाइल्स प्रगतीपथावर",
+ "filesInProgress_one": "{{count}} फाइल प्रगतीपथावर",
+ "filesReady": "{{ready}}/{{total}} फाइल्स तयार",
+ "progressDescription": "{{ready}} तयार, {{loading}} अजूनही लोड होत आहेत. उर्वरित बेसलाइन्स निराकरण होत असताना पूर्वावलोकन diffs खाली दृश्यमान राहतात.",
+ "singleDescription": "अचूक बेसलाइन निराकरण होत असताना पूर्वावलोकन diffs खाली दृश्यमान राहतात.",
+ "previewsReady_few": "{{count}} पूर्वावलोकने तयार",
+ "previewsReady_many": "{{count}} पूर्वावलोकने तयार",
+ "previewsReady_other": "{{count}} पूर्वावलोकने तयार",
+ "filesInProgress_few": "{{count}} फाइल्स प्रगतीपथावर",
+ "filesInProgress_many": "{{count}} फाइल्स प्रगतीपथावर",
+ "filesInProgress_other": "{{count}} फाइल्स प्रगतीपथावर"
+ },
+ "fileMissingPrefix": "फाइल डिस्कवर गहाळ आहे. हा diff फक्त एजंट लॉग्समधील पूर्वावलोकन असू शकतो. वापरा",
+ "restore": "पुनर्संचयित करा",
+ "fileMissingSuffix": "फाइल डिस्कवर तयार करण्यासाठी.",
+ "filePlaceholder": {
+ "loading": "लोड होत आहे",
+ "description": "या फाइलसाठी पूर्ण एडिटर diff तयार करत आहे."
+ },
+ "loading": {
+ "diff": "DIFF",
+ "ledgerObjectsProcessed": "{{count}} लेजर ऑब्जेक्ट्स प्रक्रिया केले",
+ "ledgerObjectsProcessed_one": "{{count}} लेजर ऑब्जेक्ट प्रक्रिया केले",
+ "ledgerObjectsProcessed_other": "{{count}} लेजर ऑब्जेक्ट्स प्रक्रिया केले",
+ "ledgerObjectsProcessed_few": "{{count}} लेजर ऑब्जेक्ट्स प्रक्रिया केले",
+ "ledgerObjectsProcessed_many": "{{count}} लेजर ऑब्जेक्ट्स प्रक्रिया केले",
+ "phases": {
+ "readingLedger": "टास्क लेजर वाचत आहे...",
+ "resolvingFiles": "फाइल स्थिती निराकरण करत आहे...",
+ "checkingWorktree": "worktree संदर्भ तपासत आहे...",
+ "preparingDiffs": "पुनरावलोकन diffs तयार करत आहे..."
+ }
+ },
+ "progress": {
+ "viewed": "{{viewed}}/{{total}} पाहिले"
+ },
+ "scope": {
+ "readMore": "अधिक वाचा",
+ "tiers": {
+ "exact": {
+ "title": "टास्क व्याप्ती अचूकपणे निश्चित केली",
+ "detail": "सत्र लॉगमध्ये सुरुवात आणि पूर्तता दोन्ही मार्कर सापडले. diff मध्ये फक्त या विशिष्ट टास्क दरम्यान केलेले बदल समाविष्ट आहेत - समान फाइल्स सुधारित केलेली इतर टास्क वगळली आहेत."
+ },
+ "endEstimated": {
+ "title": "शेवटची सीमा अंदाजित",
+ "detail": "फक्त सुरुवातीचा मार्कर सापडला - टास्कला अद्याप पूर्तता मार्कर नाही. टास्क सुरुवातीपासून सत्र शेवटपर्यंतचे बदल दाखवले आहेत. याच सत्रात या नंतर इतर टास्क चालल्या असल्यास, त्यांचे बदल देखील समाविष्ट असू शकतात."
+ },
+ "startEstimated": {
+ "title": "सुरुवातीची सीमा अंदाजित",
+ "detail": "फक्त पूर्तता मार्कर सापडला - कामाची सुरुवात कॅप्चर झाली नाही. याच सत्रात या आधी इतर टास्क चालल्या असल्यास, समान फाइल्समधील त्यांचे बदल देखील समाविष्ट असू शकतात."
+ },
+ "allSession": {
+ "title": "सर्व सत्र बदल दाखवत आहे",
+ "detail": "सत्र लॉगमध्ये कोणतेही टास्क मार्कर सापडले नाहीत. या टास्कला वेगळे करता येत नाही - संपूर्ण सत्रातील सर्व फाइल बदल, इतर टास्कमधील बदलांसह, दाखवले आहेत. हे जुन्या CLI आवृत्त्या किंवा गैर-मानक वर्कफ्लोसह घडू शकते."
+ }
+ },
+ "ledger": {
+ "exact": {
+ "title": "टास्क लेजरने कॅप्चर केलेले बदल",
+ "detail": "एजंट या टास्कवर काम करत असताना ऑर्केस्ट्रेटरने हे फाइल बदल कॅप्चर केले.",
+ "badge": "लेजर अचूक"
+ },
+ "limited": {
+ "title": "मर्यादित पुनरावलोकनक्षमतेसह कॅप्चर केलेले बदल",
+ "detail": "ऑर्केस्ट्रेटरने या टास्कसाठी हे फाइल बदल कॅप्चर केले, पण किमान एक बदल स्नॅपशॉट किंवा फक्त-मेटाडेटा स्रोतावरून कॅप्चर केला गेला. उपलब्ध तिथे अचूक मजकूर diffs पुनरावलोकन करा; बायनरी किंवा अनुपलब्ध सामग्रीला मॅन्युअल पुनरावलोकन आवश्यक असू शकते.",
+ "mixedBadge": "मिश्र पुनरावलोकनक्षमता",
+ "needsReviewBadge": "पुनरावलोकन आवश्यक"
+ }
+ },
+ "workInterval": {
+ "title": "जतन केलेल्या कार्य अंतरानुसार व्याप्ती",
+ "detail": "सत्र लॉगमध्ये टास्क सुरुवात मार्कर उपलब्ध नव्हता, म्हणून diff ची व्याप्ती बोर्डवर संग्रहित टास्क कार्य अंतरानुसार आहे.",
+ "badge": "अंतरानुसार व्याप्ती"
+ },
+ "confidence": {
+ "high": "उच्च विश्वास",
+ "medium": "मध्यम विश्वास",
+ "low": "कमी विश्वास",
+ "bestEffort": "सर्वोत्तम प्रयत्न"
+ }
+ },
+ "shortcuts": {
+ "title": "कीबोर्ड शॉर्टकट्स",
+ "actions": {
+ "nextChange": "पुढील बदल",
+ "previousChange": "मागील बदल",
+ "nextFile": "पुढील फाइल",
+ "previousFile": "मागील फाइल",
+ "acceptChange": "बदल स्वीकारा",
+ "rejectChange": "बदल नाकारा",
+ "saveFile": "फाइल जतन करा",
+ "undo": "पूर्ववत करा",
+ "redo": "पुन्हा करा",
+ "toggleShortcuts": "शॉर्टकट्स टॉगल करा",
+ "closeDialog": "डायलॉग बंद करा"
+ }
+ },
+ "timeline": {
+ "empty": "कोणत्याही संपादन घटना नाहीत",
+ "titleWithCount": "संपादन टाइमलाइन ({{count}})"
+ },
+ "continuousScroll": {
+ "empty": "कोणतेही पुनरावलोकनयोग्य फाइल बदल नाहीत"
+ },
+ "empty": {
+ "noSafeDiff": "कोणताही सुरक्षित diff उपलब्ध नाही",
+ "noFileChangesRecorded": "कोणतेही फाइल बदल नोंदवले नाहीत",
+ "noSafeDiffDescription": "टास्क लेजरने या टास्कसाठी सुरक्षित फाइल diff उघड केला नाही.",
+ "noSafeDiffDiagnosticsDescription": "टास्क लेजरने या टास्कसाठी सुरक्षित फाइल diff उघड केला नाही. खालील डायग्नॉस्टिक्स का ते स्पष्ट करतात.",
+ "noFileEventsYet": "टास्क लेजरमध्ये अद्याप या टास्कसाठी कोणत्याही फाइल घटना नाहीत.",
+ "noFileEvents": "टास्क लेजरमध्ये या टास्कसाठी कोणत्याही फाइल घटना नाहीत."
+ }
+ },
+ "messages": {
+ "actions": {
+ "bottomSheetActions": "संदेश तळ शीट कृती",
+ "collapseAll": "सर्व संदेश संकुचित करा",
+ "collapseSheet": "शीट संकुचित करा",
+ "expandAll": "सर्व संदेश विस्तृत करा",
+ "expandSheet": "शीट विस्तृत करा",
+ "floatComposer": "कंपोझर फ्लोट करा",
+ "floatMessagesComposer": "संदेश कंपोझर फ्लोट करा",
+ "hideSearch": "शोध लपवा",
+ "loadOlder": "जुने संदेश लोड करा",
+ "markAllRead": "सर्व वाचलेले म्हणून चिन्हांकित करा",
+ "messageActions": "संदेश कृती",
+ "moveMessagesToBottomSheet": "संदेश तळ शीटवर हलवा",
+ "moveMessagesToSidebar": "संदेश साइडबारवर हलवा",
+ "moveToBottomSheet": "तळ शीटवर हलवा",
+ "moveToInline": "इनलाइनमध्ये हलवा",
+ "moveToSidebar": "साइडबारवर हलवा",
+ "panelActions": "संदेश पॅनेल कृती",
+ "searchMessages": "संदेश शोधा"
+ },
+ "delivery": {
+ "copied": "कॉपी केले",
+ "copyDebugDetails": "डीबग तपशील कॉपी करा",
+ "details": "तपशील",
+ "fields": {
+ "acceptanceUnknown": "acceptanceUnknown",
+ "delivered": "delivered",
+ "diagnostics": "diagnostics",
+ "ledgerStatus": "ledgerStatus",
+ "messageId": "messageId",
+ "providerId": "providerId",
+ "queuedBehindMessageId": "queuedBehindMessageId",
+ "reason": "reason",
+ "responsePending": "responsePending",
+ "responseState": "responseState",
+ "statusMessageId": "statusMessageId",
+ "userVisibleMessage": "userVisibleMessage",
+ "userVisibleNextReviewAt": "userVisibleNextReviewAt",
+ "userVisibleReasonCode": "userVisibleReasonCode",
+ "userVisibleState": "userVisibleState",
+ "visibleReplyCorrelation": "visibleReplyCorrelation",
+ "visibleReplyMessageId": "visibleReplyMessageId"
+ }
+ },
+ "panelMode": "संदेश पॅनेल मोड",
+ "title": "संदेश",
+ "unread": {
+ "new": "{{count}} नवीन",
+ "unread": "{{count}} न वाचलेले",
+ "new_few": "{{count}} नवीन",
+ "new_many": "{{count}} नवीन",
+ "new_one": "{{count}} नवीन",
+ "new_other": "{{count}} नवीन",
+ "unread_few": "{{count}} न वाचलेले",
+ "unread_many": "{{count}} न वाचलेले",
+ "unread_one": "{{count}} न वाचलेले",
+ "unread_other": "{{count}} न वाचलेले"
+ },
+ "filter": {
+ "ariaLabel": "संदेश फिल्टर करा",
+ "tooltip": "संदेश फिल्टर करा",
+ "from": "कडून",
+ "to": "कडे",
+ "noData": "कोणताही डेटा नाही",
+ "showStatusUpdates": "स्थिती अपडेट्स दाखवा (निष्क्रिय/शटडाउन)",
+ "actions": {
+ "reset": "रीसेट करा",
+ "save": "जतन करा"
+ }
+ },
+ "status": {
+ "title": "स्थिती"
+ },
+ "actionMode": {
+ "label": "कृती मोड"
+ },
+ "search": {
+ "placeholder": "शोधा..."
+ }
+ },
+ "modelSelector": {
+ "badges": {
+ "configured": "कॉन्फिगर केले",
+ "connected": "कनेक्ट केले",
+ "failed": "अयशस्वी",
+ "free": "मोफत",
+ "local": "स्थानिक",
+ "needsTest": "चाचणी आवश्यक",
+ "verified": "पडताळले",
+ "unavailable": "उपलब्ध नाही",
+ "issue": "समस्या"
+ },
+ "customModelId": "कस्टम मॉडेल id",
+ "label": "मॉडेल (ऐच्छिक)",
+ "multimodelRequired": "Codex आणि Gemini ला मल्टीमॉडेल मोड आवश्यक आहे.",
+ "openCode": {
+ "allSources": "सर्व OpenCode स्रोत",
+ "filterSource": "{{source}} फिल्टर करा",
+ "filterSources": "OpenCode स्रोत फिल्टर करा",
+ "freeOnly": "फक्त मोफत",
+ "freeTooltip": "OpenCode हे मॉडेल मोफत म्हणून चिन्हांकित करते.",
+ "loadingModels": "OpenCode मॉडेल्स लोड होत आहेत...",
+ "noSourcesFound": "कोणतेही स्रोत सापडले नाहीत.",
+ "recommendedOnly": "फक्त शिफारस केलेले",
+ "searchSources": "स्रोत शोधा",
+ "sourcesCount": "{{count}} OpenCode स्रोत",
+ "sourcesCount_few": "{{count}} OpenCode स्रोत",
+ "sourcesCount_many": "{{count}} OpenCode स्रोत",
+ "sourcesCount_one": "{{count}} OpenCode स्रोत",
+ "sourcesCount_other": "{{count}} OpenCode स्रोत"
+ },
+ "reason": "कारण: {{reason}}",
+ "runtimeModelsSyncing": "स्पष्ट मॉडेल्स सध्याच्या रनटाइममधून लोड होतात. यादी सिंक होत असताना डीफॉल्ट उपलब्ध राहते.",
+ "fastMode": {
+ "codexLabel": "फास्ट मोड (2x क्रेडिट्स)",
+ "optionalLabel": "फास्ट मोड (ऐच्छिक)",
+ "defaultOff": "डीफॉल्ट (बंद)",
+ "fast": "फास्ट",
+ "off": "बंद",
+ "defaultFast": "डीफॉल्ट (फास्ट)",
+ "defaultResolvesTo": "डीफॉल्ट सध्या {{mode}} वर निराकरण होते.",
+ "runtimeBackedHint": "फास्ट मोड रनटाइम-समर्थित आहे आणि निराकरण केलेले Anthropic लॉन्च मॉडेल त्याला समर्थन देते तेव्हाच अनलॉक होतो."
+ },
+ "anthropicExtraUsage": {
+ "pricingDocs": "Anthropic किंमत दस्तऐवज वाचा"
+ },
+ "searchModels": "मॉडेल्स शोधा",
+ "defaultModel": "डीफॉल्ट",
+ "empty": {
+ "noSearchMatches": "या शोधाशी कोणतीही मॉडेल्स जुळत नाहीत.",
+ "recommendedFreeOpenCode": "सध्याच्या रनटाइम यादीत कोणतीही शिफारस केलेली मोफत OpenCode मॉडेल्स उपलब्ध नाहीत.",
+ "freeOpenCode": "सध्याच्या रनटाइम यादीत कोणतीही मोफत OpenCode मॉडेल्स उपलब्ध नाहीत.",
+ "recommendedOpenCode": "सध्याच्या रनटाइम यादीत कोणतीही शिफारस केलेली OpenCode मॉडेल्स उपलब्ध नाहीत.",
+ "noModels": "सध्याच्या रनटाइम यादीत कोणतीही मॉडेल्स उपलब्ध नाहीत."
+ },
+ "openCodeStatus": {
+ "notReadyTitle": "OpenCode टीम लॉन्चसाठी तयार नाही",
+ "freeModelsAvailableTitle": "OpenCode मोफत मॉडेल्स उपलब्ध आहेत",
+ "providerNotConnectedTitle": "OpenCode प्रोव्हायडर कनेक्ट केलेला नाही",
+ "readyTitle": "OpenCode तयार आहे",
+ "readyMessage": "OpenCode ने प्रोव्हायडर तयारी उत्तीर्ण केली. या टीमसाठी OpenCode मॉडेल्स वापरण्यासाठी ते निवडा.",
+ "useOpenCode": "OpenCode वापरा",
+ "badges": {
+ "check": "तपासा",
+ "install": "इन्स्टॉल करा",
+ "free": "मोफत",
+ "setup": "सेटअप"
+ },
+ "summary": {
+ "checking": "OpenCode स्थिती: रनटाइम तपासत आहे",
+ "status": "OpenCode स्थिती: {{parts}}"
+ },
+ "summaryParts": {
+ "teamLaunchBlocked": "टीम लॉन्च अवरोधित",
+ "providerOptional": "प्रोव्हायडर कनेक्शन ऐच्छिक",
+ "providerModelsNeedSetup": "प्रोव्हायडर-समर्थित मॉडेल्सना सेटअप आवश्यक",
+ "teamLaunchReady": "टीम लॉन्च तयार",
+ "runtimeDetected": "रनटाइम आढळला",
+ "runtimeMissing": "रनटाइम गहाळ",
+ "freeWithoutAuth": "ऑथशिवाय मोफत मॉडेल्स उपलब्ध",
+ "providerConnected": "प्रोव्हायडर कनेक्ट केला",
+ "providerNotConnected": "प्रोव्हायडर कनेक्ट केलेला नाही"
+ },
+ "messages": {
+ "checking": "अॅप अद्याप OpenCode रनटाइम तपासत आहे. प्रोव्हायडर स्थिती पूर्ण होण्याची वाट पाहा, मग पुन्हा प्रयत्न करा.",
+ "unsupported": "OpenCode इन्स्टॉल केलेले नाही, सापडले नाही, किंवा आढळलेला रनटाइम समर्थित नाही. OpenCode इन्स्टॉल किंवा अपडेट करा, मग प्रोव्हायडर स्थिती रिफ्रेश करा. तुम्ही मुख्यपृष्ठावरील इन्स्टॉल बटण देखील वापरू शकता.",
+ "freeAvailable": "OpenCode आढळले. तुम्ही प्रोव्हायडर कनेक्ट न करता Big Pickle सारखी मोफत OpenCode मॉडेल्स वापरू शकता. प्रोव्हायडर-समर्थित मॉडेल्स हवी असताना फक्त प्रोव्हायडर कनेक्ट करा.",
+ "noFreeListed": "OpenCode आढळले, पण अद्याप कोणतेही मोफत OpenCode मॉडेल सूचीबद्ध नाही. प्रोव्हायडर स्थिती रिफ्रेश करा, किंवा प्रोव्हायडर-समर्थित मॉडेल्ससाठी OpenCode मध्ये प्रोव्हायडर कनेक्ट करा.",
+ "launchBlocked": "OpenCode इन्स्टॉल आणि प्रमाणित आहे, पण Agent Teams लॉन्च तयारी अवरोधित आहे.",
+ "ready": "OpenCode टीम लॉन्चसाठी तयार आहे."
+ },
+ "loadingRuntime": "OpenCode रनटाइम स्थिती अद्याप लोड होत आहे."
+ },
+ "advisory": {
+ "pingNotConfirmed": "Ping पुष्टी झाली नाही",
+ "note": "नोट"
+ },
+ "placeholders": {
+ "customModelId": "openai/gpt-oss-20b"
+ },
+ "routeGroups": {
+ "openCodeConfig": "OpenCode कॉन्फिग",
+ "builtinFree": "मोफत अंगभूत",
+ "connectedProviders": "कनेक्ट केलेले प्रोव्हायडर्स",
+ "otherCatalog": "इतर OpenCode कॅटलॉग"
+ },
+ "pricing": {
+ "free": "मोफत",
+ "inputShort": "इन {{rate}}",
+ "outputShort": "आउट {{rate}}",
+ "perMillionSummary": "{{summary}} / 1M",
+ "inputTitle": "इनपुट: {{rate}} प्रति 1M टोकन्स",
+ "outputTitle": "आउटपुट: {{rate}} प्रति 1M टोकन्स",
+ "cacheReadTitle": "कॅश रीड: {{rate}} प्रति 1M टोकन्स",
+ "cacheWriteTitle": "कॅश राइट: {{rate}} प्रति 1M टोकन्स"
+ },
+ "defaultTooltip": {
+ "anthropicCompatibleWithResolved": "Anthropic-सुसंगत एंडपॉइंट डीफॉल्ट मॉडेल वापरते.\nसध्या {{model}} वर निराकरण होते.",
+ "anthropicCompatible": "Anthropic-सुसंगत एंडपॉइंट डीफॉल्ट मॉडेल वापरते.",
+ "anthropic": "Claude टीम डीफॉल्ट मॉडेल वापरते.\n1M संदर्भासह {{longContextModel}} वर, किंवा संदर्भ मर्यादित करा सक्षम असताना 200K संदर्भासह {{limitedContextModel}} वर निराकरण होते.",
+ "openCodeWithResolved": "OpenCode डीफॉल्ट मॉडेल वापरते.\nसध्या {{model}} वर निराकरण होते.",
+ "openCode": "OpenCode रनटाइम डीफॉल्ट मॉडेल वापरते.",
+ "runtime": "निवडलेल्या प्रोव्हायडरसाठी रनटाइम डीफॉल्ट वापरते."
+ },
+ "multimodelOff": "मल्टीमॉडेल बंद",
+ "unavailableInRuntime": "सध्याच्या रनटाइममध्ये उपलब्ध नाही"
+ },
+ "taskDetail": {
+ "actions": {
+ "cancel": "रद्द करा",
+ "delete": "हटवा",
+ "markResolved": "निराकरण झाले म्हणून चिन्हांकित करा",
+ "save": "जतन करा"
+ },
+ "attachments": {
+ "commentAttachment": "टिप्पणी संलग्नक",
+ "fromComments": "टिप्पण्यांमधून",
+ "preview": "{{filename}} पूर्वावलोकन"
+ },
+ "changes": {
+ "badges": {
+ "attention": "लक्ष",
+ "noSafeDiff": "कोणताही सुरक्षित diff नाही"
+ },
+ "empty": {
+ "noFileChangesRecorded": "कोणतेही फाइल बदल नोंदवले नाहीत",
+ "noFileChangesRecordedYet": "अद्याप कोणतेही फाइल बदल नोंदवले नाहीत",
+ "noReviewableChangesRecovered": "कोणतेही पुनरावलोकनयोग्य फाइल बदल पुनर्प्राप्त झाले नाहीत",
+ "noSafeDiffAvailable": "कोणताही सुरक्षित diff उपलब्ध नाही"
+ },
+ "loadFailed": "टास्क बदल सारांश लोड करणे अयशस्वी",
+ "loading": "बदल लोड होत आहेत...",
+ "fileCount": "{{count}} फाइल्स",
+ "fileRowsHidden": "{{count}} फाइल पंक्ती लपवल्या",
+ "moreDiagnostics": "{{count}} अधिक डायग्नॉस्टिक्स",
+ "moreFiles": "{{count}} अधिक फाइल्स",
+ "openInEditor": "एडिटरमध्ये उघडा",
+ "openTask": "टास्क {{subject}} उघडा",
+ "refresh": "बदल रिफ्रेश करा",
+ "refreshFailed": "रिफ्रेश अयशस्वी: {{error}}",
+ "refreshing": "रिफ्रेश करत आहे",
+ "refreshingChanges": "बदल रिफ्रेश करत आहे...",
+ "refreshTeamChanges": "टीम बदल रिफ्रेश करा",
+ "refreshShort": "रिफ्रेश",
+ "reviewDiff": "diff पुनरावलोकन करा",
+ "reviewTaskDiff": "टास्क diff पुनरावलोकन करा",
+ "scannedCandidateTasks": "{{eligible}} पैकी {{requested}} उमेदवार टास्क स्कॅन केले",
+ "tasksDeferred": "या पासमध्ये {{count}} टास्क पुढे ढकलले",
+ "title": "बदल",
+ "fileCount_few": "{{count}} फाइल्स",
+ "fileCount_many": "{{count}} फाइल्स",
+ "fileCount_one": "{{count}} फाइल",
+ "fileCount_other": "{{count}} फाइल्स",
+ "fileRowsHidden_few": "{{count}} फाइल पंक्ती लपवल्या",
+ "fileRowsHidden_many": "{{count}} फाइल पंक्ती लपवल्या",
+ "fileRowsHidden_one": "{{count}} फाइल पंक्ती लपवली",
+ "fileRowsHidden_other": "{{count}} फाइल पंक्ती लपवल्या",
+ "moreDiagnostics_few": "{{count}} अधिक डायग्नॉस्टिक्स",
+ "moreDiagnostics_many": "{{count}} अधिक डायग्नॉस्टिक्स",
+ "moreDiagnostics_one": "{{count}} अधिक डायग्नॉस्टिक",
+ "moreDiagnostics_other": "{{count}} अधिक डायग्नॉस्टिक्स",
+ "moreFiles_few": "{{count}} अधिक फाइल्स",
+ "moreFiles_many": "{{count}} अधिक फाइल्स",
+ "moreFiles_one": "{{count}} अधिक फाइल",
+ "moreFiles_other": "{{count}} अधिक फाइल्स",
+ "tasksDeferred_few": "या पासमध्ये {{count}} टास्क पुढे ढकलले",
+ "tasksDeferred_many": "या पासमध्ये {{count}} टास्क पुढे ढकलले",
+ "tasksDeferred_one": "या पासमध्ये {{count}} टास्क पुढे ढकलले",
+ "tasksDeferred_other": "या पासमध्ये {{count}} टास्क पुढे ढकलले"
+ },
+ "clarification": {
+ "awaitingLead": "टीम लीडकडून स्पष्टीकरणाची वाट पाहत आहे",
+ "awaitingUser": "तुमच्याकडून स्पष्टीकरणाची वाट पाहत आहे"
+ },
+ "description": {
+ "add": "वर्णन जोडण्यासाठी क्लिक करा...",
+ "edit": "वर्णन संपादित करा",
+ "placeholder": "टास्क वर्णन (markdown ला समर्थन देते)"
+ },
+ "loading": {
+ "fetchingTeamData": "टीम डेटा आणत आहे",
+ "title": "टास्क लोड होत आहे..."
+ },
+ "logs": {
+ "newArriving": "नवीन टास्क लॉग्स येत आहेत"
+ },
+ "notFound": "टास्क सापडले नाही",
+ "related": {
+ "blockedBy": "यांनी अवरोधित केले",
+ "blocks": "अवरोधित करते",
+ "linkedFrom": "यांच्याकडून लिंक केले",
+ "links": "लिंक्स",
+ "title": "संबंधित टास्क"
+ },
+ "review": {
+ "reviewer": "पुनरावलोकनकर्ता: {{reviewer}}"
+ },
+ "sections": {
+ "attachments": "संलग्नके",
+ "changes": "बदल",
+ "comments": "टिप्पण्या",
+ "description": "वर्णन",
+ "taskLogs": "टास्क लॉग्स",
+ "workflowHistory": "वर्कफ्लो इतिहास"
+ },
+ "unassigned": "नियुक्त नाही",
+ "workflow": {
+ "implementationTimeTitle": "जतन केलेल्या कार्य अंतरांवरून अंमलबजावणी वेळ",
+ "inProgressTime": "प्रगतीपथावरील वेळ {{duration}}"
+ },
+ "comments": {
+ "renderLimit": "UI प्रतिसादक्षम ठेवण्यासाठी सर्वात अलीकडील {{formattedCount}} टिप्पण्या दाखवत आहे.",
+ "badges": {
+ "approved": "मंजूर",
+ "reviewRequested": "पुनरावलोकन विनंती केली"
+ },
+ "unknownTime": "अज्ञात वेळ",
+ "actions": {
+ "reply": "उत्तर द्या",
+ "replyToComment": "टिप्पणीला उत्तर द्या",
+ "showMore": "अधिक टिप्पण्या दाखवा ({{visible}}/{{total}})",
+ "cancelReply": "उत्तर रद्द करा",
+ "comment": "टिप्पणी"
+ },
+ "attachments": {
+ "previewAlt": "संलग्नक पूर्वावलोकन",
+ "downloadFailed": "डाउनलोड अयशस्वी"
+ },
+ "replyingTo": "यांना उत्तर देत आहे",
+ "input": {
+ "placeholder": "टिप्पणी जोडा... (पाठवण्यासाठी Enter)",
+ "charsLeft": "{{count}} अक्षरे शिल्लक",
+ "charsLeft_one": "{{count}} अक्षर शिल्लक",
+ "charsLeft_other": "{{count}} अक्षरे शिल्लक",
+ "charsLeft_few": "{{count}} अक्षरे शिल्लक",
+ "charsLeft_many": "{{count}} अक्षरे शिल्लक"
+ }
+ },
+ "workflowTimeline": {
+ "empty": "कोणताही वर्कफ्लो इतिहास नोंदवला नाही",
+ "currentImplementationInterval": "सध्याचे अंमलबजावणी अंतर",
+ "implementationIntervalEnded": "या संक्रमणावर अंमलबजावणी अंतर संपले",
+ "runningPrefix": "चालू ",
+ "createdAs": "म्हणून तयार केले",
+ "by": "द्वारे",
+ "reassigned": "पुन्हा नियुक्त केले",
+ "assignedTo": "यांना नियुक्त केले",
+ "unassignedFrom": "यांच्याकडून नियुक्ती काढली",
+ "ownerChanged": "मालक बदलला",
+ "reviewRequested": "पुनरावलोकन विनंती केली",
+ "reviewStarted": "पुनरावलोकन सुरू झाले",
+ "changesRequested": "बदल विनंती केली",
+ "approved": "मंजूर",
+ "unknownEvent": "अज्ञात घटना"
+ },
+ "reviewStates": {
+ "approved": "मंजूर",
+ "needsFix": "दुरुस्ती आवश्यक",
+ "inReview": "पुनरावलोकनात"
+ }
+ },
+ "tasks": {
+ "createTask": {
+ "assignee": "नियुक्त व्यक्ती",
+ "assigneeOptional": "नियुक्त व्यक्ती (ऐच्छिक)",
+ "blockedByOptional": "यांनी अवरोधित केलेली टास्क (ऐच्छिक)",
+ "blockedBySummary": "टास्क यांनी अवरोधित होईल: {{tasks}}",
+ "cancel": "रद्द करा",
+ "create": "तयार करा",
+ "creating": "तयार करत आहे...",
+ "description": "टास्क टीमच्या tasks/ डिरेक्टरीमध्ये तयार होईल आणि Kanban बोर्डवर दिसेल.",
+ "descriptionOptional": "वर्णन (ऐच्छिक)",
+ "detailsPlaceholder": "टास्क तपशील (markdown ला समर्थन देते)",
+ "hideOptionalFields": "ऐच्छिक फील्ड्स लपवा",
+ "offlineNotice": {
+ "after": "- अंमलबजावणी सुरू करण्यासाठी टीम सुरू करा.",
+ "before": "टीम ऑफलाइन आहे. टास्क येथे जोडले जाईल"
+ },
+ "promptOptional": "नियुक्त व्यक्तीसाठी प्रॉम्प्ट (ऐच्छिक)",
+ "promptPlaceholder": "टीम सदस्यासाठी कस्टम सूचना...",
+ "relatedOptional": "संबंधित टास्क (ऐच्छिक)",
+ "relatedSummary": "संबंधित: {{tasks}}",
+ "saved": "जतन केले",
+ "searchTasks": "टास्क शोधा...",
+ "selectMember": "एक सदस्य निवडा",
+ "selectMemberOptional": "सदस्य निवडा...",
+ "showOptionalFields": "ऐच्छिक फील्ड्स दाखवा",
+ "startImmediately": "लगेच सुरू करा",
+ "startOfflineHint": "टीम ऑफलाइन आहे. टास्क लगेच सुरू करण्यासाठी प्रथम टीम सुरू करा.",
+ "subject": "विषय",
+ "subjectPlaceholder": "काय करायचे आहे?",
+ "title": "टास्क तयार करा",
+ "todo": "करायचे आहे"
+ },
+ "list": {
+ "columns": {
+ "blockedBy": "यांनी अवरोधित केले",
+ "blocks": "अवरोधित करते",
+ "id": "ID",
+ "owner": "मालक",
+ "status": "स्थिती",
+ "subject": "विषय"
+ },
+ "empty": "या टीममध्ये कोणतीही टास्क नाहीत",
+ "filters": {
+ "allOwners": "सर्व मालक",
+ "allStatuses": "सर्व स्थिती",
+ "ownerAria": "मालकानुसार टास्क फिल्टर करा",
+ "statusAria": "स्थितीनुसार टास्क फिल्टर करा"
+ },
+ "showing": "{{total}} पैकी {{shown}} दाखवत आहे"
+ },
+ "status": {
+ "completed": "completed",
+ "deleted": "deleted",
+ "inProgress": "in_progress",
+ "pending": "pending"
+ },
+ "statusSummary": {
+ "progressAria": "टास्क {{completed}}/{{total}} पूर्ण",
+ "inProgress": "{{count}} in_progress",
+ "inProgress_one": "{{count}} in_progress",
+ "inProgress_other": "{{count}} in_progress",
+ "inProgress_few": "{{count}} in_progress",
+ "inProgress_many": "{{count}} in_progress",
+ "pending": "{{count}} pending",
+ "pending_one": "{{count}} pending",
+ "pending_other": "{{count}} pending",
+ "pending_few": "{{count}} pending",
+ "pending_many": "{{count}} pending",
+ "completed": "{{count}} completed",
+ "completed_one": "{{count}} completed",
+ "completed_other": "{{count}} completed",
+ "completed_few": "{{count}} completed",
+ "completed_many": "{{count}} completed"
+ },
+ "unassigned": "नियुक्त नाही",
+ "teamPrefix": "टीम:",
+ "openTask": "टास्क उघडा",
+ "deleteConfirm": {
+ "title": "टास्क हटवा",
+ "message": "टास्क #{{taskId}} कचऱ्यात हलवायचे?",
+ "confirmLabel": "हटवा",
+ "cancelLabel": "रद्द करा"
+ }
+ },
+ "editor": {
+ "actions": {
+ "cancel": "रद्द करा",
+ "closeEditor": "एडिटर बंद करा",
+ "closeTab": "टॅब बंद करा",
+ "closeTooltip": "एडिटर बंद करा (Esc)",
+ "discard": "टाकून द्या",
+ "discardAndClose": "टाकून द्या आणि बंद करा",
+ "keep": "ठेवा",
+ "keepMine": "माझे ठेवा",
+ "keyboardShortcuts": "कीबोर्ड शॉर्टकट्स",
+ "overwrite": "ओव्हरराइट करा",
+ "refreshAria": "रिफ्रेश करा (F5)",
+ "refreshTooltip": "git स्थिती रिफ्रेश करा (F5)",
+ "reload": "पुन्हा लोड करा",
+ "retry": "पुन्हा प्रयत्न करा",
+ "save": "जतन करा",
+ "saveAllAndClose": "सर्व जतन करा आणि बंद करा"
+ },
+ "ariaLabel": "प्रकल्प एडिटर",
+ "dialogs": {
+ "conflictDescription": "तुम्ही उघडल्यापासून फाइल बाह्यरित्या सुधारित केली गेली आहे. तुमच्या बदलांनी ओव्हरराइट करायची?",
+ "conflictTitle": "जतन संघर्ष",
+ "unsavedDescription": "तुमच्याकडे जतन न केलेले बदल आहेत. तुम्हाला काय करायचे आहे?",
+ "unsavedFileDescription": "या फाइलमध्ये जतन न केलेले बदल आहेत. तुम्हाला काय करायचे आहे?",
+ "unsavedTitle": "जतन न केलेले बदल"
+ },
+ "newFile": {
+ "validation": {
+ "nameRequired": "नाव रिकामे असू शकत नाही",
+ "invalidName": "अवैध नाव",
+ "invalidCharacters": "नावात अवैध अक्षरे आहेत",
+ "nameTooLong": "नाव खूप लांब आहे"
+ },
+ "placeholders": {
+ "fileName": "फाइल नाव...",
+ "folderName": "फोल्डर नाव..."
+ },
+ "aria": {
+ "newFileName": "नवीन फाइल नाव",
+ "newFolderName": "नवीन फोल्डर नाव"
+ }
+ },
+ "draftRecovered": "मागील सत्रातील जतन न केलेले बदल पुनर्प्राप्त केले.",
+ "externalChange": {
+ "changed": "फाइल डिस्कवर बदलली.",
+ "deleted": "फाइल आता डिस्कवर अस्तित्वात नाही."
+ },
+ "saveFailed": "जतन अयशस्वी: {{error}}",
+ "sidebar": {
+ "explorer": "एक्सप्लोरर",
+ "hide": "साइडबार लपवा",
+ "hideWithShortcut": "साइडबार लपवा ({{shortcut}})",
+ "show": "साइडबार दाखवा",
+ "showWithShortcut": "साइडबार दाखवा ({{shortcut}})"
+ },
+ "searchInFiles": {
+ "title": "फाइल्समध्ये शोधा",
+ "closeSearch": "शोध बंद करा",
+ "closeSearchShortcut": "शोध बंद करा (Esc)",
+ "searchPlaceholder": "शोधा...",
+ "matchCase": "केस जुळवा",
+ "matchCaseToggle": "Aa",
+ "noResults": "कोणतेही परिणाम सापडले नाहीत",
+ "resultsSummary": "{{fileCount}} फाइल्समध्ये {{count}} जुळण्या",
+ "resultsSummary_one": "{{fileCount}} फाइल्समध्ये {{count}} जुळणी",
+ "truncated": "(छाटले)",
+ "resultsSummary_few": "{{fileCount}} फाइल्समध्ये {{count}} जुळण्या",
+ "resultsSummary_many": "{{fileCount}} फाइल्समध्ये {{count}} जुळण्या",
+ "resultsSummary_other": "{{fileCount}} फाइल्समध्ये {{count}} जुळण्या"
+ },
+ "fileTree": {
+ "failedToLoadFiles": "फाइल्स लोड करणे अयशस्वी: {{error}}",
+ "loading": "फाइल्स लोड होत आहेत...",
+ "empty": "कोणत्याही फाइल्स सापडल्या नाहीत",
+ "dropForProjectRoot": "प्रकल्प रूटसाठी येथे टाका",
+ "moveToTrash": "कचऱ्यात हलवा",
+ "moveToTrashConfirm": "\"{{name}}\" कचऱ्यात हलवायचे?",
+ "cancel": "रद्द करा"
+ },
+ "goToLine": {
+ "title": "ओळीवर जा",
+ "position": "(सध्याचे: {{current}}, एकूण: {{total}})",
+ "placeholder": "ओळ क्रमांक, +ऑफसेट, -ऑफसेट, किंवा %",
+ "go": "जा"
+ },
+ "searchPanel": {
+ "previousMatch": "मागील जुळणी",
+ "nextMatch": "पुढील जुळणी",
+ "close": "बंद करा",
+ "replacePlaceholder": "बदला",
+ "replace": "बदला",
+ "replaceNext": "पुढील बदला",
+ "all": "सर्व",
+ "replaceAll": "सर्व बदला"
+ },
+ "statusBar": {
+ "position": "ओळ {{line}}, स्तंभ {{col}}",
+ "enableWatcher": "फाइल वॉचर सक्षम करा",
+ "disableWatcher": "फाइल वॉचर अक्षम करा",
+ "watch": "वॉच",
+ "watching": "वॉच करत आहे",
+ "watchExternalChanges": "बाह्य बदलांसाठी वॉच करा",
+ "disableExternalWatcher": "बाह्य बदल वॉचर अक्षम करा",
+ "encodingUtf8": "UTF-8",
+ "spaces": "स्पेसेस: {{count}}"
+ },
+ "imagePreview": {
+ "loading": "पूर्वावलोकन लोड होत आहे...",
+ "openFullSize": "पूर्ण-आकाराचे पूर्वावलोकन उघडा",
+ "openSystemViewer": "सिस्टम व्ह्यूअरमध्ये उघडा"
+ },
+ "quickOpen": {
+ "title": "जलद उघडा",
+ "searchPlaceholder": "नावाने फाइल्स शोधा...",
+ "loading": "फाइल्स लोड होत आहेत...",
+ "empty": "कोणत्याही फाइल्स सापडल्या नाहीत"
+ },
+ "errorBoundary": {
+ "crashed": "एडिटर क्रॅश झाला",
+ "unknownError": "अज्ञात त्रुटी"
+ },
+ "binaryPlaceholder": {
+ "file": "बायनरी फाइल ({{size}})"
+ },
+ "unsavedChanges": "जतन न केलेले बदल",
+ "empty": {
+ "selectFile": "संपादित करण्यासाठी ट्रीमधून एक फाइल निवडा"
+ },
+ "search": {
+ "toggleReplace": "बदला टॉगल करा",
+ "placeholder": "शोधा"
+ },
+ "shortcuts": {
+ "title": "कीबोर्ड शॉर्टकट्स",
+ "groups": {
+ "fileOperations": "फाइल ऑपरेशन्स",
+ "search": "शोध",
+ "navigation": "नेव्हिगेशन",
+ "editing": "संपादन",
+ "markdown": "Markdown",
+ "general": "सामान्य"
+ },
+ "actions": {
+ "quickOpen": "जलद उघडा",
+ "save": "जतन करा",
+ "saveAll": "सर्व जतन करा",
+ "closeTab": "टॅब बंद करा",
+ "findInFile": "फाइलमध्ये शोधा",
+ "searchInFiles": "फाइल्समध्ये शोधा",
+ "goToLine": "ओळीवर जा",
+ "nextTab": "पुढील टॅब",
+ "previousTab": "मागील टॅब",
+ "cycleTabs": "टॅब्स सायकल करा",
+ "toggleSidebar": "साइडबार टॉगल करा",
+ "undo": "पूर्ववत करा",
+ "redo": "पुन्हा करा",
+ "selectNextMatch": "पुढील जुळणी निवडा",
+ "toggleComment": "टिप्पणी टॉगल करा",
+ "splitPreview": "स्प्लिट पूर्वावलोकन",
+ "fullPreview": "पूर्ण पूर्वावलोकन",
+ "closeEditor": "एडिटर बंद करा"
+ }
+ },
+ "toolbar": {
+ "enableWordWrap": "शब्द रॅप सक्षम करा",
+ "disableWordWrap": "शब्द रॅप अक्षम करा",
+ "closeSplitPreview": "स्प्लिट पूर्वावलोकन बंद करा",
+ "closePreview": "पूर्वावलोकन बंद करा"
+ }
+ },
+ "launch": {
+ "actions": {
+ "createSchedule": "वेळापत्रक तयार करा",
+ "creating": "तयार करत आहे...",
+ "goToDashboard": "डॅशबोर्डवर जा",
+ "launchTeam": "टीम सुरू करा",
+ "launching": "सुरू करत आहे...",
+ "relaunchTeam": "टीम पुन्हा सुरू करा",
+ "relaunching": "पुन्हा सुरू करत आहे...",
+ "saveChanges": "बदल जतन करा",
+ "saving": "जतन करत आहे..."
+ },
+ "billing": {
+ "prefix": "15 जून, 2026 पासून, Anthropic बिल करते",
+ "readArticle": "Anthropic लेख वाचा",
+ "suffix": "आणि Agent SDK वापर मासिक Agent SDK क्रेडिटमधून, परस्परसंवादी Claude Code मर्यादांपासून वेगळा. क्रेडिट प्रत्येक बिलिंग चक्रात रीसेट होते आणि न वापरलेले क्रेडिट पुढे जात नाही."
+ },
+ "conflict": {
+ "description": "एकाच डिरेक्टरीमध्ये दोन टीम्स चालवणे जोखमीचे आहे - त्या समान फाइल्स संपादित करताना संघर्ष करू शकतात. पृथक्करणासाठी वेगळी डिरेक्टरी किंवा git worktree वापरण्याचा विचार करा.",
+ "title": "या वर्किंग डिरेक्टरीसाठी आधीच दुसरी टीम \"{{team}}\" चालू आहे",
+ "workingDirectory": "वर्किंग डिरेक्टरी:"
+ },
+ "description": {
+ "createSchedule": "स्वयंचलित Claude टास्क अंमलबजावणी नियोजित करा",
+ "createScheduleForTeam": "टीम \"{{team}}\" साठी स्वयंचलित रन नियोजित करा",
+ "editSchedule": "टीम \"{{team}}\" साठी वेळापत्रक संपादित करत आहे",
+ "launchPrefix": "टीम सुरू करा",
+ "launchSuffix": "स्थानिक Claude CLI द्वारे.",
+ "relaunchPrefix": "सध्याचा रन थांबवा",
+ "relaunchSuffix": "आणि स्थानिक Claude CLI द्वारे पुन्हा सुरू करा."
+ },
+ "prepare": {
+ "action": {
+ "launch": "सुरू करा",
+ "relaunch": "पुन्हा सुरू करा"
+ },
+ "blocked": "रनटाइम एन्व्हायर्न्मेंट उपलब्ध नाही - {{action}} अवरोधित आहे",
+ "checkingProviders": "निवडलेले प्रोव्हायडर्स तपासत आहे...",
+ "failed": "निवडलेले प्रोव्हायडर्स तयार करणे अयशस्वी",
+ "preflight": "{{action}} पूर्वी त्रुटी पकडण्यासाठी प्री-फ्लाइट तपासणी",
+ "preparingEnvironment": "एन्व्हायर्न्मेंट तयार करत आहे...",
+ "ready": "सर्व निवडलेले प्रोव्हायडर्स तयार आहेत.",
+ "readyWithNotes": "सर्व निवडलेले प्रोव्हायडर्स तयार आहेत, नोट्ससह.",
+ "unsupportedPreload": "सध्याची preload आवृत्ती team:prepareProvisioning ला समर्थन देत नाही. dev अॅप रीस्टार्ट करा.",
+ "selectWorkingDirectory": "लॉन्च एन्व्हायर्न्मेंट पडताळण्यासाठी एक वर्किंग डिरेक्टरी निवडा.",
+ "someProvidersNeedAttention": "काही निवडलेल्या प्रोव्हायडर्सना लक्ष देण्याची गरज आहे."
+ },
+ "prompt": {
+ "label": "प्रॉम्प्ट",
+ "oneShotPrefix": "हा प्रॉम्प्ट यांना पाठवला जाईल",
+ "oneShotSuffix": "एक-शॉट अंमलबजावणीसाठी",
+ "saved": "जतन केले",
+ "schedulePlaceholder": "वेळापत्रकानुसार अंमलात आणण्यासाठी Claude साठी सूचना...",
+ "teamLeadOptional": "टीम लीडसाठी प्रॉम्प्ट (ऐच्छिक)",
+ "teamLeadPlaceholder": "टीम लीडसाठी सूचना..."
+ },
+ "providerChanged": "प्रोव्हायडर {{from}} वरून {{to}} वर बदलला. मागील लीड सत्र पुन्हा सुरू केले जाणार नाही, आणि नवीन रनटाइम योग्यरित्या लागू होण्यासाठी लीड ताज्या संदर्भासह सुरू होईल.",
+ "relaunchFreshSession": "टीम पुन्हा सुरू केल्याने ताजे लीड सत्र सुरू होते. टिकाऊ टीम स्थिती, टास्क बोर्ड आणि सदस्य कॉन्फिगरेशन लॉन्च प्रॉम्प्टमध्ये पुन्हा भरले जातात.",
+ "relaunchWarning": {
+ "description": "या सेटिंग्ज जतन केल्याने सध्याची टीम प्रक्रिया थांबेल, अपडेट केलेला रोस्टर टिकवला जाईल, आणि नवीन रनटाइमसह टीम पुन्हा सुरू होईल.",
+ "title": "पुन्हा सुरू केल्याने सध्याचा टीम रन रीस्टार्ट होईल"
+ },
+ "schedule": {
+ "labelOptional": "लेबल (ऐच्छिक)",
+ "labelPlaceholder": "उदा., दैनिक कोड पुनरावलोकन, रात्रीच्या चाचण्या...",
+ "maxBudgetUsd": "कमाल बजेट (USD)",
+ "maxTurns": "कमाल वळणे",
+ "noLimit": "कोणतीही मर्यादा नाही",
+ "noMatches": "तुमच्या शोधाशी कोणतीही टीम्स जुळत नाहीत.",
+ "noTeams": "कोणत्याही टीम्स उपलब्ध नाहीत. प्रथम एक टीम तयार करा.",
+ "searchTeams": "टीम्स शोधा...",
+ "selectTeam": "एक टीम निवडा...",
+ "team": "टीम",
+ "title": "वेळापत्रक"
+ },
+ "title": {
+ "createSchedule": "वेळापत्रक तयार करा",
+ "editSchedule": "वेळापत्रक संपादित करा",
+ "launch": "टीम सुरू करा",
+ "relaunch": "टीम पुन्हा सुरू करा"
+ },
+ "errors": {
+ "loadProjectsFailed": "प्रकल्प लोड करणे अयशस्वी",
+ "saveScheduleFailed": "वेळापत्रक जतन करणे अयशस्वी",
+ "relaunchFailed": "टीम पुन्हा सुरू करणे अयशस्वी",
+ "launchFailed": "टीम सुरू करणे अयशस्वी"
+ },
+ "validation": {
+ "openCodeLeadModelRequired": "OpenCode लीडला निवडलेले मॉडेल आवश्यक आहे.",
+ "openCodeTeammateRequired": "OpenCode लीडला किमान एक OpenCode सहकारी आवश्यक आहे.",
+ "selectWorkingDirectory": "वर्किंग डिरेक्टरी निवडा (cwd)",
+ "fixMemberNames": "सुरू करण्यापूर्वी सदस्य नावे दुरुस्त करा",
+ "memberNamesUnique": "सुरू करण्यापूर्वी सदस्य नावे अद्वितीय असणे आवश्यक आहे"
+ },
+ "optionalSettings": {
+ "relaunchTitle": "पुन्हा सुरू करण्याच्या सेटिंग्ज",
+ "title": "ऐच्छिक लॉन्च सेटिंग्ज",
+ "relaunchDescription": "टीम रीस्टार्ट करण्यापूर्वी रोस्टर आणि लीड रनटाइम तपासा.",
+ "description": "लॉन्च फ्लो प्रकल्प पथावर केंद्रित ठेवा आणि तुम्हाला अतिरिक्त नियंत्रण हवे असेल तेव्हाच हे विस्तृत करा."
+ }
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "टीम कॉपी करा",
+ "createTeam": "टीम तयार करा",
+ "deleteForever": "कायमचे हटवा",
+ "deletePermanently": "कायमस्वरूपी हटवा",
+ "deleteTeam": "टीम हटवा",
+ "launching": "सुरू करत आहे...",
+ "launchTeam": "टीम सुरू करा",
+ "relaunchTeam": "टीम पुन्हा सुरू करा",
+ "restore": "पुनर्संचयित करा",
+ "restoreTeam": "टीम पुनर्संचयित करा",
+ "retry": "पुन्हा प्रयत्न करा",
+ "stopTeam": "टीम थांबवा",
+ "stopping": "थांबवत आहे..."
+ },
+ "electronOnly": {
+ "description": "ब्राउझर मोडमध्ये, स्थानिक `~/.claude/teams` डिरेक्टरीजचा प्रवेश उपलब्ध नाही.",
+ "title": "टीम्स फक्त Electron मोडमध्ये उपलब्ध आहे"
+ },
+ "empty": {
+ "description": "सुरुवात करण्यासाठी येथे एक टीम तयार करा. ती आपोआप यादीत दिसेल.",
+ "localOnly": "टीम तयार करणे फक्त स्थानिक Electron मोडमध्ये उपलब्ध आहे.",
+ "title": "कोणत्याही टीम्स सापडल्या नाहीत"
+ },
+ "filter": {
+ "clearAll": "सर्व साफ करा",
+ "label": "टीम्स फिल्टर करा",
+ "projectPriority": "प्रकल्प प्राधान्य",
+ "status": "स्थिती"
+ },
+ "loadFailed": "टीम्स लोड करणे अयशस्वी",
+ "loading": "टीम्स लोड होत आहेत...",
+ "localOnly": "फक्त स्थानिक Electron मोडमध्ये उपलब्ध.",
+ "membersCount": "सदस्य: {{count}}",
+ "membersCount_few": "सदस्य: {{count}}",
+ "membersCount_many": "सदस्य: {{count}}",
+ "membersCount_one": "सदस्य: {{count}}",
+ "membersCount_other": "सदस्य: {{count}}",
+ "noDescription": "कोणतेही वर्णन नाही",
+ "noMatches": "सध्याच्या फिल्टर्सशी जुळणाऱ्या कोणत्याही टीम्स नाहीत",
+ "partial": {
+ "pending": "शेवटचे सुरू होणे अजूनही समन्वयित होत आहे.",
+ "skipped": "शेवटच्या सुरू होण्याने सहकारी वगळले आहेत.",
+ "skippedWithCount": "शेवटच्या सुरू होण्याने {{count}}/{{expected}} सहकारी वगळला.",
+ "skippedWithCount_few": "शेवटच्या सुरू होण्याने {{count}}/{{expected}} सहकारी वगळले.",
+ "skippedWithCount_many": "शेवटच्या सुरू होण्याने {{count}}/{{expected}} सहकारी वगळले.",
+ "skippedWithCount_one": "शेवटच्या सुरू होण्याने {{count}}/{{expected}} सहकारी वगळला.",
+ "skippedWithCount_other": "शेवटच्या सुरू होण्याने {{count}}/{{expected}} सहकारी वगळले.",
+ "stopped": "सर्व सहकारी सामील होण्यापूर्वी शेवटचे सुरू होणे थांबले.",
+ "stoppedWithCount": "{{count}}/{{expected}} सहकारी सामील होण्यापूर्वी शेवटचे सुरू होणे थांबले.",
+ "stoppedWithCount_few": "{{count}}/{{expected}} सहकारी सामील होण्यापूर्वी शेवटचे सुरू होणे थांबले.",
+ "stoppedWithCount_many": "{{count}}/{{expected}} सहकारी सामील होण्यापूर्वी शेवटचे सुरू होणे थांबले.",
+ "stoppedWithCount_one": "{{count}}/{{expected}} सहकारी सामील होण्यापूर्वी शेवटचे सुरू होणे थांबले.",
+ "stoppedWithCount_other": "{{count}}/{{expected}} सहकारी सामील होण्यापूर्वी शेवटचे सुरू होणे थांबले."
+ },
+ "searchPlaceholder": "टीम्स शोधा...",
+ "sections": {
+ "otherTeams": "इतर टीम्स",
+ "projectTeams": "{{project}} साठी टीम्स",
+ "selectedProject": "निवडलेला प्रकल्प"
+ },
+ "solo": "एकल",
+ "status": {
+ "active": "सक्रिय",
+ "deleted": "हटवले",
+ "launching": "सुरू करत आहे...",
+ "offline": "ऑफलाइन",
+ "partialFailure": "सुरू होणे मध्येच अयशस्वी",
+ "partialPending": "बूटस्ट्रॅप प्रलंबित",
+ "partialSkipped": "सुरू होताना सदस्य वगळला",
+ "running": "चालू आहे"
+ },
+ "title": "टीम निवडा",
+ "trash": "कचरा ({{count}})",
+ "trash_few": "कचरा ({{count}})",
+ "trash_many": "कचरा ({{count}})",
+ "trash_one": "कचरा ({{count}})",
+ "trash_other": "कचरा ({{count}})",
+ "deleteDraft": {
+ "title": "मसुदा हटवा",
+ "message": "मसुदा टीम \"{{teamName}}\" हटवायची? हे पूर्ववत करता येणार नाही.",
+ "confirmLabel": "हटवा",
+ "cancelLabel": "रद्द करा"
+ },
+ "moveToTrash": {
+ "title": "कचऱ्यात हलवा",
+ "message": "टीम \"{{teamName}}\" कचऱ्यात हलवायची? तुम्ही ती नंतर पुनर्संचयित करू शकता.",
+ "confirmLabel": "कचऱ्यात हलवा",
+ "cancelLabel": "रद्द करा"
+ },
+ "deleteForever": {
+ "title": "कायमस्वरूपी हटवा",
+ "message": "टीम \"{{teamName}}\" कायमस्वरूपी हटवायची? सर्व डेटा गमावला जाईल.",
+ "confirmLabel": "कायमचे हटवा",
+ "cancelLabel": "रद्द करा"
+ }
+ },
+ "messageComposer": {
+ "crossTeam": {
+ "hint": "टीप: क्रॉस-टीम संदेश लक्ष्य टीम लीडकडे जातात. उत्तर तुमच्याऐवजी तुमच्या टीम लीडकडे परत यावे असे तुम्हाला वाटत असल्यास, ते संदेशात स्पष्टपणे सांगा."
+ },
+ "attachments": {
+ "attachFiles": "फाइल्स संलग्न करा (पेस्ट करा किंवा ड्रॅग आणि ड्रॉप करा)",
+ "unavailable": "संलग्नके उपलब्ध नाहीत",
+ "disabledHint": "ऑनलाइन टीम लीड आणि ऑनलाइन OpenCode सहकाऱ्यांसाठी फाइल संलग्नकांना समर्थन आहे. संलग्नके काढा किंवा प्राप्तकर्ता बदला.",
+ "restrictions": {
+ "crossTeam": "क्रॉस-टीम संदेशांसाठी फाइल संलग्नकांना समर्थन नाही",
+ "teamOffline": "फाइल्स संलग्न करण्यासाठी टीम ऑनलाइन असणे आवश्यक आहे",
+ "unsupportedRecipient": "फाइल्स टीम लीड किंवा OpenCode सहकाऱ्यांना पाठवता येतात",
+ "openCodeOffline": "OpenCode सहकाऱ्यांसाठी फाइल्स संलग्न करण्यासाठी टीम ऑनलाइन असणे आवश्यक आहे",
+ "sending": "फाइल्स जोडण्यापूर्वी सध्याचा संदेश पाठवणे पूर्ण होण्याची वाट पाहा",
+ "maximumReached": "कमाल संलग्नके पोहोचली",
+ "leadOnly": "फाइल्स फक्त टीम लीडला पाठवता येतात"
+ }
+ },
+ "slash": {
+ "restrictions": {
+ "attachments": "स्लॅश कमांड्सना लाइव्ह टीम लीड आवश्यक आहे आणि संलग्नकांसह पाठवता येत नाहीत",
+ "crossTeam": "स्लॅश कमांड्स फक्त सध्याच्या टीम लीडवर चालवता येतात",
+ "notLead": "स्लॅश कमांड्स फक्त टीम लीडला पाठवता येतात",
+ "leadOffline": "स्लॅश कमांड्सना टीम लीड ऑनलाइन असणे आवश्यक आहे"
+ }
+ },
+ "status": {
+ "reusedCrossTeamRequest": "अलीकडील क्रॉस-टीम विनंती पुन्हा वापरली",
+ "teamOffline": "टीम ऑफलाइन"
+ },
+ "revision": {
+ "editing": "मागील संदेश संपादित करत आहे",
+ "cancel": "रद्द करा",
+ "tooltip": "एजंटला मागील संदेशाकडे दुर्लक्ष करण्यास आणि तो कंपोझरमध्ये पुनर्संचयित करण्यास सांगा."
+ },
+ "input": {
+ "charsLeft": "{{count}} अक्षरे शिल्लक",
+ "charsLeft_one": "{{count}} अक्षर शिल्लक",
+ "charsLeft_other": "{{count}} अक्षरे शिल्लक",
+ "teamLaunchingPlaceholder": "टीम सुरू होत आहे... संदेश इनबॉक्स वितरणासाठी रांगेत लावला जाईल.",
+ "crossTeamPlaceholder": "{{team}} ला क्रॉस-टीम संदेश...",
+ "teamFallback": "टीम",
+ "placeholder": "संदेश लिहा... (पाठवण्यासाठी Enter, नवीन ओळीसाठी Shift+Enter)",
+ "slashTip": "टीप: कोणत्याही Claude कमांड्स चालवण्यासाठी तुम्ही \"/\" वापरू शकता.",
+ "charsLeft_few": "{{count}} अक्षरे शिल्लक",
+ "charsLeft_many": "{{count}} अक्षरे शिल्लक"
+ },
+ "teamSelector": {
+ "thisTeam": "ही टीम",
+ "current": "सध्याची",
+ "online": "ऑनलाइन",
+ "offline": "ऑफलाइन",
+ "onlineTitle": "ऑनलाइन",
+ "offlineTitle": "ऑफलाइन"
+ },
+ "recipient": {
+ "select": "निवडा...",
+ "searchPlaceholder": "शोधा...",
+ "noResults": "कोणतेही परिणाम नाहीत"
+ },
+ "actions": {
+ "voiceToText": "आवाज ते मजकूर",
+ "send": "पाठवा",
+ "sendingUnavailableLaunching": "टीम सुरू होत असताना पाठवणे उपलब्ध नाही"
+ }
+ },
+ "claudeLogs": {
+ "filter": {
+ "ariaLabel": "लॉग्स फिल्टर करा",
+ "tooltip": "लॉग्स फिल्टर करा",
+ "sections": {
+ "stream": "स्ट्रीम",
+ "content": "मजकूर"
+ },
+ "kinds": {
+ "output": "आउटपुट",
+ "thinking": "विचार",
+ "tool": "टूल कॉल्स"
+ },
+ "actions": {
+ "reset": "रीसेट करा",
+ "save": "जतन करा"
+ },
+ "streams": {
+ "stdout": "stdout",
+ "stderr": "stderr"
+ }
+ },
+ "rawLineCount": "{{formattedCount}} कच्च्या ओळी",
+ "rawLineCount_one": "{{formattedCount}} कच्ची ओळ",
+ "rawLinesCaptured": "{{count}} कॅप्चर केले",
+ "emptyRawLogs": "{{count}}; अद्याप कोणतेही असिस्टंट/टूल आउटपुट नाही.",
+ "noLogsYet": "अद्याप कोणतेही लॉग्स नाहीत.",
+ "teamNotRunning": "टीम चालू नाही.",
+ "searchPlaceholder": "लॉग्स शोधा...",
+ "clearSearch": "शोध साफ करा",
+ "newCount": "+{{count}} नवीन",
+ "loading": "लोड होत आहे...",
+ "showMore": "अधिक दाखवा",
+ "noLogsCaptured": "कोणतेही लॉग्स कॅप्चर केले नाहीत.",
+ "noMatchingLogs": "जुळणारे कोणतेही लॉग्स नाहीत.",
+ "rawLineCount_few": "{{formattedCount}} कच्च्या ओळी",
+ "rawLineCount_many": "{{formattedCount}} कच्च्या ओळी",
+ "rawLineCount_other": "{{formattedCount}} कच्च्या ओळी",
+ "openFullscreen": "फुलस्क्रीन लॉग्स उघडा",
+ "fullscreen": "फुलस्क्रीन",
+ "viewingFullscreen": "फुलस्क्रीन मोडमध्ये पाहत आहे",
+ "logsTitle": "लॉग्स",
+ "sourceSelect": {
+ "placeholder": "लॉग स्रोत निवडा...",
+ "searchPlaceholder": "लॉग स्रोत शोधा...",
+ "emptyMessage": "कोणतेही लॉग स्रोत सापडले नाहीत.",
+ "ariaLabel": "लॉग स्रोत",
+ "leadLabel": "लीड",
+ "selectSourceEmpty": "एक लॉग स्रोत निवडा.",
+ "leadDescription": "टीम लीड",
+ "removedLabel": "काढले",
+ "removedDescription": "काढले"
+ }
+ },
+ "agentGraph": {
+ "popover": {
+ "externalTeam": "बाह्य टीम",
+ "process": {
+ "startedBy": "यांनी सुरू केले:",
+ "at": "येथे:",
+ "openUrl": "URL उघडा"
+ },
+ "overflow": {
+ "hiddenTasks": "लपवलेली टास्क",
+ "empty": "कोणतीही लपवलेली टास्क उपलब्ध नाहीत."
+ },
+ "member": {
+ "lead": "लीड",
+ "workingOn": "यावर काम करत आहे",
+ "recentTools": "अलीकडील टूल्स",
+ "spawn": {
+ "waitingToStart": "सुरू होण्याची वाट पाहत आहे",
+ "starting": "सुरू होत आहे",
+ "failed": "अयशस्वी"
+ },
+ "state": {
+ "active": "सक्रिय",
+ "idle": "निष्क्रिय",
+ "offline": "ऑफलाइन",
+ "runningTool": "टूल चालवत आहे"
+ },
+ "activeTool": {
+ "running": "टूल चालवत आहे",
+ "failed": "टूल अयशस्वी",
+ "finished": "टूल पूर्ण झाले"
+ },
+ "actions": {
+ "message": "संदेश",
+ "profile": "प्रोफाइल",
+ "task": "टास्क"
+ }
+ }
+ },
+ "logPreview": {
+ "logs": "लॉग्स",
+ "loading": "लॉग्स लोड होत आहेत",
+ "more": "+{{count}} अधिक",
+ "more_one": "+{{count}} अधिक",
+ "more_other": "+{{count}} अधिक",
+ "more_few": "+{{count}} अधिक",
+ "more_many": "+{{count}} अधिक",
+ "unsupportedProvider": "असमर्थित प्रोव्हायडर",
+ "openCodeLogsDelayed": "OpenCode लॉग्स विलंबित",
+ "logsUnavailable": "लॉग्स उपलब्ध नाहीत",
+ "noRecentLogs": "अलीकडील कोणतेही लॉग्स नाहीत",
+ "toolError": "टूल त्रुटी",
+ "toolResult": "टूल परिणाम",
+ "toolUse": "टूल वापर",
+ "thinking": "विचार",
+ "error": "त्रुटी",
+ "logEvent": "लॉग घटना",
+ "noErrorOutput": "कोणतेही त्रुटी आउटपुट नाही",
+ "noOutput": "कोणतेही आउटपुट नाही",
+ "noInput": "कोणतेही इनपुट नाही"
+ },
+ "blockingEdge": {
+ "title": "अवरोधक अवलंबित्व",
+ "blocks": "अवरोधित करते",
+ "close": "बंद करा",
+ "blockingHiddenTasks": "लपवलेली टास्क अवरोधित करत आहे",
+ "blockedHiddenTasks": "अवरोधित लपवलेली टास्क",
+ "links_one": "{{count}} लिंक",
+ "links_other": "{{count}} लिंक्स",
+ "hiddenBlockingLinks_one": "{{count}} लपवलेली अवरोधक लिंक",
+ "hiddenBlockingLinks_other": "{{count}} लपवलेल्या अवरोधक लिंक्स",
+ "hiddenTaskStack": "लपवलेला टास्क स्टॅक",
+ "hiddenTasks_one": "{{count}} लपवलेले टास्क",
+ "hiddenTasks_other": "{{count}} लपवलेली टास्क",
+ "task": "टास्क",
+ "openBlockerStack": "अवरोधक स्टॅक उघडा",
+ "openBlockedStack": "अवरोधित स्टॅक उघडा",
+ "openBlockerTask": "अवरोधक टास्क उघडा",
+ "openBlockedTask": "अवरोधित टास्क उघडा"
+ },
+ "activityHud": {
+ "activity": "क्रियाकलाप",
+ "noRecentActivity": "अलीकडील कोणताही क्रियाकलाप नाही",
+ "more": "+{{count}} अधिक",
+ "more_one": "+{{count}} अधिक",
+ "more_other": "+{{count}} अधिक",
+ "more_few": "+{{count}} अधिक",
+ "more_many": "+{{count}} अधिक"
+ },
+ "provisioning": {
+ "launchDetails": "लॉन्च तपशील",
+ "launchDetailsDescription": "तपशीलवार टीम लॉन्च प्रगती, लाइव्ह आउटपुट आणि CLI लॉग्स."
+ }
+ },
+ "projectPath": {
+ "label": "प्रकल्प",
+ "source": {
+ "claude": "Claude ने शोधले",
+ "codex": "Codex ने शोधले",
+ "mixed": "Claude आणि Codex ने शोधले"
+ },
+ "deleted": {
+ "title": "प्रकल्प फोल्डर आता अस्तित्वात नाही",
+ "label": "हटवले"
+ },
+ "mode": {
+ "projectList": "प्रकल्प यादीतून",
+ "customPath": "कस्टम पथ"
+ },
+ "loadingProjects": "प्रकल्प लोड होत आहेत...",
+ "selectProject": "एक प्रकल्प निवडा...",
+ "searchPlaceholder": "नाव किंवा पथानुसार प्रकल्प शोधा",
+ "empty": "काहीही सापडले नाही",
+ "selectFromList": "यादीतून एक प्रकल्प निवडा",
+ "noProjects": "कोणतेही प्रकल्प सापडले नाहीत, कस्टम पथावर बदला.",
+ "customWorkingDirectory": "कस्टम वर्किंग डिरेक्टरी",
+ "browse": "ब्राउझ करा",
+ "createAutomatically": "डिरेक्टरी अस्तित्वात नसल्यास, ती आपोआप तयार केली जाईल."
+ },
+ "members": {
+ "badges": {
+ "worktree": "worktree"
+ },
+ "runtimeTelemetry": {
+ "title": "स्थानिक रनटाइम लोड",
+ "description": "फक्त पालक आणि बाल प्रक्रिया. रिमोट LLM इन्फरन्स समाविष्ट नाही.",
+ "cpu": "CPU",
+ "memory": "मेमरी",
+ "summedRss": "एकत्रित RSS",
+ "sharedHost": "शेअर केलेले OpenCode होस्ट मेट्रिक. ते या सदस्यासाठी अनन्य नाही.",
+ "processTreeCapped": "या नमुन्यासाठी प्रक्रिया ट्री मर्यादित केले होते.",
+ "rssHint": "RSS मध्ये शेअर केलेली पाने समाविष्ट असू शकतात, म्हणून ते अनन्य मेमरी नव्हे तर लोड संकेत म्हणून वाचणे सर्वोत्तम आहे."
+ },
+ "editor": {
+ "title": "सदस्य",
+ "addMember": "सदस्य जोडा",
+ "editAsJson": "JSON म्हणून संपादित करा",
+ "runInSeparateWorktrees": "सहकारी वेगळ्या worktrees मध्ये चालवा",
+ "agentTeamsMcpOnly": "फक्त Agent Teams MCP",
+ "removedCount": "काढले ({{count}})",
+ "removedModelLockReason": "काढलेले सदस्य सॉफ्ट डिलीट इतिहासासाठी ठेवले जातात. सेटिंग्ज संपादित करण्यासाठी त्यांना पुनर्संचयित करा.",
+ "memberNamesUnique": "सदस्य नावे अद्वितीय असणे आवश्यक आहे"
+ },
+ "stats": {
+ "computing": "आकडेवारी गणना करत आहे...",
+ "empty": "कोणतीही आकडेवारी उपलब्ध नाही",
+ "lines": "ओळी",
+ "linesInfo": "अंदाजे. Edit आणि Write टूल्ससाठी अचूक. Bash फाइल लेखन कमांड पॅटर्न्स (heredoc, echo, sed) वरून अंदाजित आहे आणि कमी नोंदवले जाऊ शकते.",
+ "files": "फाइल्स",
+ "toolCalls": "टूल कॉल्स",
+ "tokens": "टोकन्स",
+ "toolUsage": "टूल वापर",
+ "filesTouched": "स्पर्श केलेल्या फाइल्स ({{count}})",
+ "viewAllChanges": "सर्व बदल पाहा",
+ "showLess": "कमी दाखवा",
+ "moreFiles": "+{{count}} अधिक",
+ "footer": "{{count}} सत्रे · {{computedAgo}} गणना केली",
+ "footer_one": "{{count}} सत्र · {{computedAgo}} गणना केली",
+ "footer_few": "{{count}} सत्रे · {{computedAgo}} गणना केली",
+ "footer_many": "{{count}} सत्रे · {{computedAgo}} गणना केली",
+ "footer_other": "{{count}} सत्रे · {{computedAgo}} गणना केली"
+ },
+ "logs": {
+ "searching": "लॉग्स शोधत आहे...",
+ "empty": "कोणतेही लॉग्स सापडले नाहीत",
+ "waitingForTaskActivity": "टास्क प्रगतीपथावर आहे - सत्र क्रियाकलापाची वाट पाहत आहे (ऑटो-रिफ्रेशिंग)...",
+ "noTaskActivity": "अद्याप या टास्कसाठी कोणताही सत्र क्रियाकलाप नाही",
+ "noMemberActivity": "या सदस्याचा अद्याप कोणताही नोंदवलेला सत्र क्रियाकलाप नाही",
+ "leadSessionTooltip": "पूर्ण टीम लीड सत्र लॉग्स - जागतिक ऑर्केस्ट्रेशन संदर्भासाठी उपयुक्त, या एजंटसाठी विशिष्ट नाही",
+ "memberSessionTooltip": "पूर्ण टिकाऊ सहकारी सत्र लॉग्स - सबएजंट फाइलऐवजी रूट सदस्य सत्रात काम चालते तेव्हा उपयुक्त",
+ "startedAt": "{{time}} सुरू झाले",
+ "active": "सक्रिय",
+ "showDetails": "तपशील दाखवा",
+ "hideDetails": "तपशील लपवा",
+ "loadingDetails": "तपशील लोड होत आहेत...",
+ "failedToLoadDetails": "तपशील लोड करणे अयशस्वी"
+ },
+ "detail": {
+ "relaunchOpenCode": "OpenCode पुन्हा सुरू करा",
+ "restart": "रीस्टार्ट करा",
+ "legacyLogsFallback": "लेगसी लॉग्स फॉलबॅक",
+ "copyDiagnostics": "डायग्नॉस्टिक्स कॉपी करा",
+ "pid": "PID {{pid}}",
+ "removedAt": "{{date}} काढले",
+ "failedToRestartMember": "सदस्य रीस्टार्ट करणे अयशस्वी",
+ "sendMessage": "संदेश पाठवा",
+ "assignTask": "टास्क नियुक्त करा",
+ "remove": "काढा"
+ },
+ "list": {
+ "loading": "टीम सदस्य लोड होत आहेत",
+ "unavailable": "सदस्य रोस्टर उपलब्ध नाही",
+ "unavailableDescription": "{{count}} सहकारी टीम मेटाडेटावरून ज्ञात आहेत, पण रोस्टर तपशील गहाळ आहेत.",
+ "unavailableDescription_one": "{{count}} सहकारी टीम मेटाडेटावरून ज्ञात आहे, पण रोस्टर तपशील गहाळ आहेत.",
+ "soloLeadOnly": "एकल टीम - फक्त लीड",
+ "removedCount": "काढले ({{count}})",
+ "unavailableDescription_few": "{{count}} सहकारी टीम मेटाडेटावरून ज्ञात आहेत, पण रोस्टर तपशील गहाळ आहेत.",
+ "unavailableDescription_many": "{{count}} सहकारी टीम मेटाडेटावरून ज्ञात आहेत, पण रोस्टर तपशील गहाळ आहेत.",
+ "unavailableDescription_other": "{{count}} सहकारी टीम मेटाडेटावरून ज्ञात आहेत, पण रोस्टर तपशील गहाळ आहेत."
+ },
+ "executionLog": {
+ "empty": "दाखवण्यासाठी काहीही नाही",
+ "emptyUserMessage": "{{time}} - (रिकामे)",
+ "agentInstructions": "एजंट सूचना",
+ "memberTurn": "{{member}} वळण",
+ "agentTurn": "एजंट वळण",
+ "turn": "वळण"
+ },
+ "recentMessages": {
+ "latest": "नवीनतम संदेश",
+ "latestForMember": "नवीनतम संदेश - {{member}}",
+ "loadMore": "अधिक लोड करा",
+ "expand": "विस्तृत करा",
+ "collapse": "संकुचित करा"
+ },
+ "leadModel": {
+ "defaultModel": "डीफॉल्ट",
+ "providerModelAria": "{{provider}} प्रोव्हायडर, {{model}}",
+ "leadShort": "लीड",
+ "teamLead": "टीम लीड",
+ "syncWithTeammates": "सहकाऱ्यांसह मॉडेल सिंक करा",
+ "anthropicTeamWide": "Anthropic टीम-व्यापी",
+ "runtimeInheritance": "सहकारी स्वतःचा प्रोव्हायडर किंवा मॉडेल सेट करत नाहीत तोपर्यंत लीड रनटाइम त्यांना लागू होतो.",
+ "anthropicContextLimit": "या लॉन्चमध्ये Anthropic रनटाइमसाठी 200K संदर्भ मर्यादा टीम-व्यापी आहे, कस्टम Anthropic सहकाऱ्यांसह."
+ },
+ "runtimeLogs": {
+ "autoRefresh": "ऑटो-रिफ्रेश",
+ "wrapLines": "ओळी रॅप करा",
+ "loadingTail": "प्रक्रिया लॉग टेल लोड होत आहे...",
+ "empty": "या सदस्यासाठी अद्याप कोणतीही प्रक्रिया लॉग फाइल कॅप्चर केली नाही.",
+ "copy": "कॉपी करा",
+ "fileEmpty": "प्रक्रिया लॉग फाइल रिकामी आहे.",
+ "showingLast": "शेवटचे {{bytes}} दाखवत आहे.",
+ "showing": "{{bytes}} दाखवत आहे."
+ },
+ "tasks": {
+ "empty": "या सदस्याला कोणतीही टास्क नियुक्त केलेली नाहीत"
+ },
+ "messages": {
+ "loadOlder": "जुने संदेश लोड करा",
+ "filters": {
+ "all": "सर्व",
+ "messages": "संदेश",
+ "comments": "टिप्पण्या"
+ },
+ "empty": {
+ "loading": "क्रियाकलाप लोड होत आहे...",
+ "noComments": "या सदस्यासाठी कोणत्याही टिप्पण्या नाहीत",
+ "noLoadedMessages": "या सदस्यासाठी अद्याप कोणतेही लोड केलेले संदेश नाहीत",
+ "noMessages": "या सदस्यासह कोणतेही संदेश नाहीत",
+ "noLoadedActivity": "या सदस्यासाठी अद्याप कोणताही लोड केलेला क्रियाकलाप नाही",
+ "noActivity": "या सदस्यासह कोणताही क्रियाकलाप नाही"
+ }
+ },
+ "actions": {
+ "openProfile": "प्रोफाइल उघडा",
+ "editRole": "भूमिका संपादित करा",
+ "sendMessage": "संदेश पाठवा",
+ "assignTask": "टास्क नियुक्त करा"
+ },
+ "roleSelect": {
+ "customRolePlaceholder": "कस्टम भूमिका टाका..."
+ }
+ },
+ "schedule": {
+ "count": "{{count}} वेळापत्रके",
+ "count_one": "{{count}} वेळापत्रक",
+ "count_other": "{{count}} वेळापत्रके",
+ "nextRun": "पुढील: {{next}}",
+ "actions": {
+ "runNow": "आता चालवा",
+ "edit": "संपादित करा",
+ "pause": "थांबवा",
+ "resume": "पुन्हा सुरू करा",
+ "delete": "हटवा",
+ "addSchedule": "वेळापत्रक जोडा"
+ },
+ "runHistory": {
+ "loading": "रन इतिहास लोड होत आहे...",
+ "empty": "अद्याप कोणताही रन नाही"
+ },
+ "count_few": "{{count}} वेळापत्रके",
+ "count_many": "{{count}} वेळापत्रके",
+ "runLog": {
+ "title": "रन लॉग",
+ "exitCode": "एक्झिट {{code}}",
+ "retryCount": "पुन्हा प्रयत्न {{count}}/{{max}}",
+ "stillRunning": "टास्क अजूनही चालू आहे...",
+ "loadingLogs": "लॉग्स लोड होत आहेत...",
+ "errors": "त्रुटी",
+ "close": "बंद करा"
+ },
+ "cron": {
+ "expression": "Cron अभिव्यक्ती",
+ "highFrequencyWarning": "उच्च वारंवारता वेळापत्रक (5 मिनिटांपेक्षा कमी अंतर)",
+ "nextRuns": "पुढील रन:",
+ "timezone": "टाइमझोन",
+ "selectTimezone": "टाइमझोन निवडा",
+ "warmUpTime": "वॉर्म-अप वेळ",
+ "warmUpDescription": "नियोजित अंमलबजावणीपूर्वी निवडलेले प्रोव्हायडर्स तयार करते",
+ "errors": {
+ "enterExpression": "एक cron अभिव्यक्ती टाका",
+ "invalidExpression": "अवैध cron अभिव्यक्ती"
+ },
+ "presets": {
+ "everyHour": "दर तासाला",
+ "everySixHours": "दर 6 तासांनी",
+ "dailyAtNine": "दररोज सकाळी 9 वाजता",
+ "weekdaysAtNine": "आठवड्याच्या दिवशी सकाळी 9 वाजता",
+ "mondayAtNine": "सोमवारी सकाळी 9 वाजता",
+ "everyThirtyMinutes": "दर 30 मिनिटांनी"
+ },
+ "warmUpOptions": {
+ "none": "वॉर्म-अप नाही",
+ "fiveMinutes": "5 मि",
+ "tenMinutes": "10 मि",
+ "fifteenMinutes": "15 मि",
+ "thirtyMinutes": "30 मि"
+ }
+ },
+ "empty": {
+ "title": "अद्याप कोणतीही वेळापत्रके नाहीत",
+ "description": "cron वेळापत्रकानुसार Claude टास्क आपोआप चालवण्यासाठी एक वेळापत्रक तयार करा."
+ },
+ "title": "वेळापत्रके",
+ "status": {
+ "active": "सक्रिय",
+ "paused": "थांबवले",
+ "disabled": "अक्षम"
+ },
+ "runStatus": {
+ "pending": "प्रलंबित",
+ "warmingUp": "वॉर्म होत आहे",
+ "warm": "वॉर्म",
+ "running": "चालू आहे",
+ "completed": "पूर्ण",
+ "failed": "अयशस्वी",
+ "interrupted": "व्यत्यय आला",
+ "cancelled": "रद्द केले"
+ }
+ },
+ "openCodeContextConfigHint": {
+ "summary": "OpenCode स्थानिक मॉडेल्स फक्त-प्रॉम्प्ट मर्यादांऐवजी OpenCode संदर्भ बजेट वापरू शकतात.",
+ "description": "या सहकाऱ्याने वापरलेल्या प्रोव्हायडर आणि मॉडेलसाठी OpenCode कॉन्फिगमध्ये जुळणाऱ्या मर्यादा जोडा. हे स्थानिक मॉडेल्सची संदर्भ विंडो ओव्हरफ्लो होण्यापूर्वी OpenCode ला कॉम्पॅक्ट आणि प्रून करण्यास मदत करते.",
+ "replacePrefix": "बदला",
+ "and": "आणि",
+ "replaceSuffix": "तुमच्या OpenCode सेटअपमधील प्रोव्हायडर आणि मॉडेल ID सह. प्रॉम्प्ट सूचना जसे की",
+ "promptInstructionsSuffix": "कमकुवत आहेत कारण मॉडेल त्या वाचण्यापूर्वी विनंती एकत्र केली जाते.",
+ "providerLimits": "प्रोव्हायडर मर्यादा",
+ "compactionConfig": "कॉम्पॅक्शन कॉन्फिग"
+ },
+ "sessions": {
+ "noProjectPath": "कोणताही प्रकल्प पथ लिंक केलेला नाही",
+ "provisioningHint": "टीम प्रोव्हिजनिंगनंतर सत्रे दिसतील",
+ "projectNotFound": "प्रकल्प सापडला नाही",
+ "loading": "सत्रे लोड होत आहेत...",
+ "empty": "कोणतीही सत्रे सापडली नाहीत",
+ "showAllSessions": "सर्व सत्रांसाठी दाखवा",
+ "lead": "लीड",
+ "removeFilter": "फिल्टर काढा",
+ "filterBySession": "या सत्रानुसार फिल्टर करा",
+ "openSession": "सत्र उघडा",
+ "title": "सत्रे"
+ },
+ "provisioning": {
+ "pid": "PID {{pid}}",
+ "cancel": "रद्द करा",
+ "moreWarningsHidden": "{{count}} अधिक इशारे लपवले",
+ "diagnostics": "डायग्नॉस्टिक्स",
+ "liveOutput": "लाइव्ह आउटपुट",
+ "diagnosticsCopied": "डायग्नॉस्टिक्स कॉपी केले",
+ "copyDiagnostics": "डायग्नॉस्टिक्स कॉपी करा",
+ "copied": "कॉपी केले",
+ "noOutput": "अद्याप कोणतेही आउटपुट कॅप्चर केले नाही.",
+ "cliLogs": "CLI लॉग्स",
+ "steps": {
+ "starting": "सुरू होत आहे",
+ "configuring": "टीम सेटअप",
+ "assembling": "सदस्य सामील होत आहेत",
+ "finalizing": "अंतिम करत आहे"
+ },
+ "providerStatus": {
+ "status": {
+ "checking": "तपासत आहे...",
+ "ready": "ठीक",
+ "notes": "ठीक (नोट्स)",
+ "failed": "त्रुटी",
+ "pending": "वाट पाहत आहे"
+ },
+ "detailSummary": {
+ "cliBinaryMissing": "CLI बायनरी गहाळ",
+ "openCodeRuntimeMissing": "OpenCode रनटाइम गहाळ",
+ "openCodeWindowsAccessBlocked": "OpenCode Windows प्रवेश अवरोधित",
+ "openCodeNoOutput": "OpenCode रनटाइम तपासणीने कोणतेही आउटपुट दिले नाही",
+ "openCodeMcpUnreachable": "OpenCode अॅप MCP पोहोचण्याजोगे नाही",
+ "workingDirectoryMissing": "वर्किंग डिरेक्टरी गहाळ",
+ "cliBinaryCouldNotStart": "CLI बायनरी सुरू करता आली नाही",
+ "cliPreflightIncomplete": "CLI प्रीफ्लाइट पूर्ण झाले नाही",
+ "authenticationRequired": "प्रमाणीकरण आवश्यक",
+ "runtimeProviderNotConfigured": "रनटाइम प्रोव्हायडर कॉन्फिगर केलेला नाही",
+ "cliPreflightFailed": "CLI प्रीफ्लाइट अयशस्वी",
+ "selectedModelCompatible": "निवडलेले मॉडेल सुसंगत",
+ "selectedModelCompatibilityPending": "निवडलेले मॉडेल सुसंगतता प्रलंबित",
+ "selectedModelAvailable": "निवडलेले मॉडेल उपलब्ध",
+ "selectedModelVerified": "निवडलेले मॉडेल पडताळले",
+ "selectedModelUnavailable": "निवडलेले मॉडेल उपलब्ध नाही",
+ "selectedModelTimedOut": "निवडलेले मॉडेल पडताळणी टाइम आउट झाली",
+ "selectedModelCheckFailed": "निवडलेले मॉडेल तपासणी अयशस्वी",
+ "selectedModelDeferred": "निवडलेले मॉडेल पडताळणी पुढे ढकलली",
+ "selectedModelPingNotConfirmed": "निवडलेले मॉडेल ping पुष्टी झाली नाही",
+ "readyWithNotes": "नोट्ससह तयार",
+ "needsAttention": "लक्ष आवश्यक"
+ },
+ "modelChecksSummary": "निवडलेले मॉडेल तपासण्या - {{details}}",
+ "modelParts": {
+ "unavailable": "{{count}} मॉडेल उपलब्ध नाही",
+ "unavailable_one": "{{count}} मॉडेल उपलब्ध नाही",
+ "unavailable_other": "{{count}} मॉडेल्स उपलब्ध नाहीत",
+ "checkFailed": "{{count}} मॉडेल तपासणी अयशस्वी",
+ "checkFailed_one": "{{count}} मॉडेल तपासणी अयशस्वी",
+ "checkFailed_other": "{{count}} मॉडेल्स तपासणी अयशस्वी",
+ "timedOut": "{{count}} मॉडेल टाइम आउट झाले",
+ "timedOut_one": "{{count}} मॉडेल टाइम आउट झाले",
+ "timedOut_other": "{{count}} मॉडेल्स टाइम आउट झाली",
+ "deferred": "{{count}} पडताळणी पुढे ढकलली",
+ "deferred_one": "{{count}} पडताळणी पुढे ढकलली",
+ "deferred_other": "{{count}} पडताळणी पुढे ढकलली",
+ "pingNotConfirmed": "{{count}} ping पुष्टी झाली नाही",
+ "pingNotConfirmed_one": "{{count}} ping पुष्टी झाली नाही",
+ "pingNotConfirmed_other": "{{count}} ping पुष्टी झाली नाही",
+ "compatibilityPending": "{{count}} सुसंगत, सखोल पडताळणी प्रलंबित",
+ "compatibilityPending_one": "{{count}} सुसंगत, सखोल पडताळणी प्रलंबित",
+ "compatibilityPending_other": "{{count}} सुसंगत, सखोल पडताळणी प्रलंबित",
+ "compatible": "{{count}} सुसंगत",
+ "compatible_one": "{{count}} सुसंगत",
+ "compatible_other": "{{count}} सुसंगत",
+ "checking": "{{count}} तपासत आहे",
+ "checking_one": "{{count}} तपासत आहे",
+ "checking_other": "{{count}} तपासत आहे",
+ "available": "{{count}} उपलब्ध",
+ "available_one": "{{count}} उपलब्ध",
+ "available_other": "{{count}} उपलब्ध",
+ "verified": "{{count}} पडताळले",
+ "verified_one": "{{count}} पडताळले",
+ "verified_other": "{{count}} पडताळले",
+ "unavailable_few": "{{count}} मॉडेल्स उपलब्ध नाहीत",
+ "unavailable_many": "{{count}} मॉडेल्स उपलब्ध नाहीत",
+ "checkFailed_few": "{{count}} मॉडेल्स तपासणी अयशस्वी",
+ "checkFailed_many": "{{count}} मॉडेल्स तपासणी अयशस्वी",
+ "timedOut_few": "{{count}} मॉडेल्स टाइम आउट झाली",
+ "timedOut_many": "{{count}} मॉडेल्स टाइम आउट झाली",
+ "deferred_few": "{{count}} पडताळणी पुढे ढकलली",
+ "deferred_many": "{{count}} पडताळणी पुढे ढकलली",
+ "pingNotConfirmed_few": "{{count}} ping पुष्टी झाली नाही",
+ "pingNotConfirmed_many": "{{count}} ping पुष्टी झाली नाही",
+ "compatibilityPending_few": "{{count}} सुसंगत, सखोल पडताळणी प्रलंबित",
+ "compatibilityPending_many": "{{count}} सुसंगत, सखोल पडताळणी प्रलंबित",
+ "compatible_few": "{{count}} सुसंगत",
+ "compatible_many": "{{count}} सुसंगत",
+ "checking_few": "{{count}} तपासत आहे",
+ "checking_many": "{{count}} तपासत आहे",
+ "available_few": "{{count}} उपलब्ध",
+ "available_many": "{{count}} उपलब्ध",
+ "verified_few": "{{count}} पडताळले",
+ "verified_many": "{{count}} पडताळले"
+ },
+ "openProviderSettings": "{{provider}} सेटिंग्ज उघडा",
+ "copied": "कॉपी केले",
+ "copyDiagnostics": "डायग्नॉस्टिक्स कॉपी करा",
+ "deepVerificationPending": "सखोल पडताळणी अजूनही चालू आहे. OpenCode मोफत मॉडेल्सना सुमारे 20 सेकंद लागू शकतात.",
+ "progress": {
+ "checkingSelectedProviders": "निवडलेले प्रोव्हायडर्स समांतरपणे तपासत आहे...",
+ "checkingProvider": "{{provider}} प्रोव्हायडर तपासत आहे...",
+ "checkingProviders": "{{providers}} प्रोव्हायडर्स तपासत आहे..."
+ },
+ "failureHints": {
+ "openCodeAccessDenied": "फोल्डर परवानग्या दुरुस्त करा किंवा प्रकल्प वापरकर्ता-लेखनयोग्य फोल्डरमध्ये हलवा. प्रशासक म्हणून चालवणे फक्त तात्पुरता उपाय आहे.",
+ "openCodeBridgeNoOutput": "अॅप आणि OpenCode रनटाइम रीस्टार्ट करा, मग पुन्हा प्रयत्न करा. पुन्हा झाल्यास, डायग्नॉस्टिक्स कॉपी करा.",
+ "workingDirectoryMissing": "विद्यमान वर्किंग डिरेक्टरी निवडा, मग हा डायलॉग पुन्हा उघडा.",
+ "authenticationRequired": "Claude CLI मध्ये आवश्यक प्रोव्हायडर प्रमाणित करा, मग हा डायलॉग पुन्हा उघडा.",
+ "runtimeProviderNotConfigured": "निवडलेला प्रोव्हायडर रनटाइम कॉन्फिगर करा, मग हा डायलॉग पुन्हा उघडा.",
+ "openCodeRuntimeMissing": "प्रोव्हायडर स्थिती कार्डवरून OpenCode रनटाइम इन्स्टॉल करा किंवा पुन्हा प्रयत्न करा, मग हा डायलॉग पुन्हा उघडा.",
+ "openCodeAppMcpUnreachable": "OpenCode अॅप MCP ब्रिज रिफ्रेश करण्यासाठी लॉन्च पुन्हा प्रयत्न करा. पुन्हा झाल्यास, अॅप आणि OpenCode रनटाइम रीस्टार्ट करा.",
+ "cliBinaryMissing": "स्थानिक Claude CLI बायनरी अस्तित्वात आहे आणि सुरू करता येते याची खात्री करा, मग हा डायलॉग पुन्हा उघडा.",
+ "default": "वरील समस्या सोडवा, मग हा डायलॉग पुन्हा उघडा.",
+ "openCodeNodeModulesSymlinkPermission": "Agent Teams AI प्रशासक म्हणून चालवा, मग लॉन्च पुन्हा प्रयत्न करा."
+ }
+ },
+ "presentation": {
+ "awaitingPermission": "{{count}} सहकारी परवानगी मंजुरीची वाट पाहत आहे",
+ "nameListWithMore": "{{names}}, +{{count}} अधिक",
+ "waitingForOpenCode": "OpenCode ची वाट पाहत आहे: {{names}}",
+ "bootstrapStalled": "बूटस्ट्रॅप थांबले: {{names}}",
+ "bootstrapStalledWithOpenCodeWait": "{{stalled}}; OpenCode ची वाट पाहत आहे: {{names}}",
+ "namedPendingDiagnostic": "{{label}}: {{names}}",
+ "countPendingDiagnostic": "{{count}} {{label}}",
+ "pendingLabels": {
+ "bootstrapStalled": "बूटस्ट्रॅप थांबले",
+ "shellOnly": "फक्त-शेल",
+ "waitingForBootstrap": "बूटस्ट्रॅपची वाट पाहत आहे",
+ "bootstrapUnconfirmed": "बूटस्ट्रॅप अपुष्ट",
+ "awaitingPermission": "परवानगीची वाट पाहत आहे",
+ "waitingForRuntime": "रनटाइमची वाट पाहत आहे",
+ "shellOnlyLower": "फक्त-शेल",
+ "waitingForBootstrapLower": "बूटस्ट्रॅपची वाट पाहत आहे",
+ "bootstrapUnconfirmedLower": "बूटस्ट्रॅप अपुष्ट",
+ "awaitingPermissionLower": "परवानगीची वाट पाहत आहे",
+ "waitingForRuntimeLower": "रनटाइमची वाट पाहत आहे"
+ },
+ "failed": {
+ "memberFailedToStart": "{{name}} सुरू होण्यात अयशस्वी",
+ "teammatesFailedToStart": "{{count}} सहकारी सुरू होण्यात अयशस्वी",
+ "teammatesFailedRatio": "{{count}}/{{total}} सहकारी सुरू होण्यात अयशस्वी"
+ },
+ "skipped": {
+ "memberSkipped": "या लॉन्चसाठी {{name}} वगळला",
+ "memberSkippedWithReason": "या लॉन्चसाठी {{name}} वगळला - {{reason}}",
+ "memberSkippedCompact": "{{name}} वगळला",
+ "teammatesSkipped": "{{count}} सहकारी वगळले",
+ "teammatesSkippedList": "वगळलेले सहकारी: {{list}}",
+ "teammatesSkippedRatio": "या लॉन्चसाठी {{count}}/{{total}} सहकारी वगळले"
+ },
+ "joining": {
+ "teammatesStillJoining": "{{count}} सहकारी अजूनही सामील होत आहेत",
+ "teammatesStillJoining_one": "{{count}} सहकारी अजूनही सामील होत आहे",
+ "teammatesStillJoining_few": "{{count}} सहकारी अजूनही सामील होत आहेत",
+ "teammatesStillJoining_many": "{{count}} सहकारी अजूनही सामील होत आहेत",
+ "teammatesStillJoining_other": "{{count}} सहकारी अजूनही सामील होत आहेत",
+ "teammatesConfirmedRatio": "{{count}}/{{total}} सहकारी पुष्टी झाले"
+ },
+ "ready": {
+ "leadOnline": "लीड ऑनलाइन",
+ "allTeammatesJoined": "सर्व {{count}} सहकारी सामील झाले",
+ "teamProvisionedLeadOnline": "टीम प्रोव्हिजन केली - लीड ऑनलाइन",
+ "teamProvisionedAllJoined": "टीम प्रोव्हिजन केली - सर्व {{count}} सहकारी सामील झाले",
+ "teamProvisionedStillJoining": "टीम प्रोव्हिजन केली - सहकारी अजूनही सामील होत आहेत",
+ "launchFinishedWithErrors": "लॉन्च त्रुटींसह पूर्ण झाले - {{count}}/{{total}} सहकारी सुरू होण्यात अयशस्वी",
+ "launchContinuedSkipped": "लॉन्च सुरू राहिले - {{count}}/{{total}} सहकारी वगळले",
+ "teamLaunchedLeadOnline": "टीम सुरू झाली - लीड ऑनलाइन",
+ "teamLaunchedAllJoined": "टीम सुरू झाली - सर्व {{count}} सहकारी सामील झाले"
+ },
+ "panel": {
+ "launchFailed": "लॉन्च अयशस्वी",
+ "launchDetails": "लॉन्च तपशील",
+ "launchFinishedWithErrors": "लॉन्च त्रुटींसह पूर्ण झाले",
+ "launchContinuedSkipped": "वगळलेल्या सहकाऱ्यांसह लॉन्च सुरू राहिले",
+ "coreTeamReady": "मुख्य टीम तयार",
+ "finishingLaunch": "लॉन्च पूर्ण करत आहे",
+ "teamLaunched": "टीम सुरू झाली",
+ "launchingTeam": "टीम सुरू करत आहे"
+ }
+ }
+ },
+ "liveRuntimeStatus": {
+ "title": "लाइव्ह रनटाइम स्थिती",
+ "description": "फक्त-दृश्य हार्टबीट आणि लॉन्च स्थिती. प्रक्रिया नियंत्रणे खाली राहतात.",
+ "source": "स्रोत: {{source}}",
+ "lane": "{{lane}} लेन",
+ "diagnosticOnly": "फक्त डायग्नॉस्टिक",
+ "updated": "{{value}} अपडेट केले",
+ "states": {
+ "running": "चालू आहे",
+ "starting": "सुरू होत आहे",
+ "waiting": "वाट पाहत आहे",
+ "degraded": "लक्ष आवश्यक",
+ "stopped": "थांबले",
+ "unknown": "अज्ञात"
+ }
+ },
+ "taskLogs": {
+ "exact": {
+ "title": "अचूक टास्क लॉग्स",
+ "loading": "अचूक टास्क लॉग्स लोड होत आहेत...",
+ "description": "लॉग्समध्ये वापरलेल्या समान अंमलबजावणी-लॉग कंपोनंट्ससह रेंडर केलेले अचूक ट्रान्स्क्रिप्ट तुकडे.",
+ "emptyTitle": "अद्याप कोणतीही अचूक टास्क लॉग्स नाहीत",
+ "emptyDescription": "स्पष्ट टास्क-लिंक केलेला ट्रान्स्क्रिप्ट मेटाडेटा उपलब्ध असताना अचूक ट्रान्स्क्रिप्ट बंडल्स येथे दिसतील.",
+ "summaryOnly": "फक्त सारांश"
+ },
+ "executionSessions": {
+ "title": "अंमलबजावणी सत्रे",
+ "online": "ऑनलाइन",
+ "updating": "अपडेट करत आहे...",
+ "description": "लेगसी सत्र-केंद्रित ट्रान्स्क्रिप्ट ब्राउझिंग आणि पूर्वावलोकने."
+ },
+ "stream": {
+ "title": "टास्क लॉग स्ट्रीम"
+ }
+ },
+ "kanban": {
+ "taskCard": {
+ "cancelTask": "टास्क {{taskId}} रद्द करा",
+ "cancel": "रद्द करा",
+ "moveBackToTodoConfirm": "हे टास्क परत करायचे आहे वर हलवायचे आणि टीमला सूचित करायचे?",
+ "confirm": "पुष्टी करा",
+ "keep": "ठेवा",
+ "changesNeedAttention": "बदलांना लक्ष आवश्यक",
+ "changes": "बदल",
+ "deleteTask": "टास्क हटवा",
+ "taskLogsActive": "टास्क लॉग्स सक्रिय",
+ "newTaskLogsArriving": "नवीन टास्क लॉग्स येत आहेत",
+ "awaitingUser": "वापरकर्त्याची वाट पाहत आहे",
+ "awaitingLead": "लीडची वाट पाहत आहे",
+ "blockedBy": "यांनी अवरोधित केले",
+ "blocks": "अवरोधित करते",
+ "start": "सुरू करा",
+ "complete": "पूर्ण करा",
+ "approve": "मंजूर करा",
+ "requestReview": "पुनरावलोकन विनंती करा",
+ "manualReview": "मॅन्युअल पुनरावलोकन",
+ "requestChanges": "बदल विनंती करा"
+ },
+ "filter": {
+ "title": "टास्क फिल्टर करा",
+ "session": "सत्र",
+ "allSessions": "सर्व सत्रे",
+ "teammate": "सहकारी",
+ "unassigned": "(नियुक्त नाही)",
+ "column": "स्तंभ",
+ "clearAll": "सर्व साफ करा"
+ },
+ "board": {
+ "addTask": "टास्क जोडा",
+ "noTasks": "कोणतीही टास्क नाहीत",
+ "showMore": "आणखी {{count}} दाखवा",
+ "hiddenCount": "{{count}} लपवले",
+ "trash": "कचरा",
+ "gridView": "ग्रिड दृश्य",
+ "columnsView": "स्तंभ दृश्य"
+ },
+ "trash": {
+ "title": "कचरा",
+ "empty": "कोणतीही हटवलेली टास्क नाहीत",
+ "subject": "विषय",
+ "owner": "मालक",
+ "deleted": "हटवले",
+ "unassigned": "नियुक्त नाही",
+ "restoreTask": "टास्क पुनर्संचयित करा",
+ "restore": "पुनर्संचयित करा",
+ "close": "बंद करा"
+ },
+ "sort": {
+ "title": "टास्क क्रमवारी लावा",
+ "sortBy": "यानुसार क्रमवारी लावा",
+ "reset": "रीसेट करा",
+ "options": {
+ "updatedAt": {
+ "label": "शेवटचे अपडेट",
+ "description": "अलीकडे अपडेट केलेले प्रथम"
+ },
+ "createdAt": {
+ "label": "तयार केले",
+ "description": "नवीनतम प्रथम"
+ },
+ "owner": {
+ "label": "मालक",
+ "description": "नियुक्त व्यक्तीनुसार वर्णानुक्रमे"
+ },
+ "manual": {
+ "label": "मॅन्युअल",
+ "description": "ड्रॅग-अँड-ड्रॉप क्रम"
+ }
+ }
+ },
+ "search": {
+ "clearSearch": "शोध साफ करा",
+ "tasks": "टास्क",
+ "createdAgo": "{{time}} तयार केले",
+ "updatedAgo": "{{time}} अपडेट केले",
+ "placeholder": "टास्क शोधा... (#id किंवा मजकूर)"
+ },
+ "grid": {
+ "addTask": "टास्क जोडा",
+ "noTasks": "कोणतीही टास्क नाहीत"
+ },
+ "title": "Kanban",
+ "columns": {
+ "todo": "करायचे आहे",
+ "inProgress": "प्रगतीपथावर",
+ "review": "पुनरावलोकन",
+ "done": "पूर्ण",
+ "approved": "मंजूर"
+ }
+ },
+ "worktreeGitReadiness": {
+ "checking": "सहकारी worktrees साठी Git रिपॉझिटरी स्थिती तपासत आहे...",
+ "ready": "Git worktrees तयार आहेत.",
+ "readyOnBranch": "{{branch}} शाखेवर Git worktrees तयार आहेत.",
+ "needsSetup": "Worktree पृथक्करणाला Git सेटअप आवश्यक आहे",
+ "initialCommitNotice": "प्रारंभिक कमिट क्रिया संदेशासह सर्व सध्याच्या फाइल्स स्टेज आणि कमिट करते",
+ "initializeRepository": "Git रिपॉझिटरी आरंभ करा",
+ "createInitialCommit": "प्रारंभिक कमिट तयार करा",
+ "initialCommitMessage": "chore: initial commit"
+ },
+ "toolApproval": {
+ "settings": "सेटिंग्ज",
+ "autoAllowAllTools": "सर्व टूल्स ऑटो-अनुमती द्या",
+ "autoAllowFileEdits": "फाइल संपादने ऑटो-अनुमती द्या (Edit, Write, NotebookEdit)",
+ "autoAllowSafeCommands": "सुरक्षित कमांड्स ऑटो-अनुमती द्या (git, pnpm, npm, ls...)",
+ "onTimeout": "टाइमआउटवर:",
+ "after": "नंतर",
+ "secondsShort": "से",
+ "timeoutActions": {
+ "wait": "कायम वाट पाहा",
+ "allow": "अनुमती द्या",
+ "deny": "नाकारा"
+ },
+ "submit": "सबमिट करा",
+ "allow": "अनुमती द्या",
+ "deny": "नाकारा",
+ "allowAll": "सर्व अनुमती द्या",
+ "pendingCount": "{{count}} प्रलंबित",
+ "autoActionIn": "{{time}} मध्ये ऑटो-{{action}}",
+ "diff": {
+ "previewChanges": "बदल पूर्वावलोकन करा",
+ "readingFile": "फाइल वाचत आहे...",
+ "binaryFile": "बायनरी फाइल - पूर्वावलोकन करता येत नाही",
+ "truncated": "फाइल 2MB वर छाटली - diff अपूर्ण असू शकतो",
+ "newFile": "नवीन फाइल"
+ }
+ },
+ "memberWorkSync": {
+ "details": {
+ "title": "सदस्य वर्क सिंक",
+ "actionableItems": "कृतीयोग्य आयटम्स",
+ "fingerprint": "फिंगरप्रिंट",
+ "report": "अहवाल",
+ "none": "काहीही नाही",
+ "shadowWouldNudge": "शॅडो नज करेल",
+ "yes": "होय",
+ "no": "नाही",
+ "moreActionableItems": "{{count}} अधिक कृतीयोग्य आयटम",
+ "diagnostics": "डायग्नॉस्टिक्स: {{diagnostics}}"
+ },
+ "title": "सदस्य वर्क सिंक",
+ "loadingDiagnostics": "सदस्य वर्क सिंक डायग्नॉस्टिक्स लोड होत आहेत.",
+ "diagnosticsUnavailable": "सदस्य वर्क सिंक डायग्नॉस्टिक्स उपलब्ध नाहीत."
+ },
+ "advancedCli": {
+ "title": "प्रगत",
+ "useWorktree": "worktree वापरा",
+ "recent": "अलीकडील",
+ "commandPreview": "कमांड पूर्वावलोकन",
+ "customArguments": "कस्टम आर्ग्युमेंट्स",
+ "validate": "पडताळा",
+ "validation": {
+ "allFlagsValid": "सर्व फ्लॅग्स वैध",
+ "unknownFlags": "अज्ञात: {{flags}}",
+ "protectedFlags": "संरक्षित: {{flags}}",
+ "failed": "पडताळणी अयशस्वी"
+ },
+ "placeholders": {
+ "worktreeName": "worktree-name"
+ }
+ },
+ "processes": {
+ "ago": "{{time}} पूर्वी",
+ "stoppedAgo": "{{time}} पूर्वी थांबले",
+ "running": "चालू आहे",
+ "stopped": "थांबले",
+ "stopProcess": "प्रक्रिया थांबवा (SIGTERM)",
+ "kill": "Kill करा",
+ "openInBrowser": "ब्राउझरमध्ये उघडा",
+ "open": "उघडा",
+ "pid": "PID{{pid}}",
+ "title": "CLI प्रक्रिया"
+ },
+ "taskActivity": {
+ "loadingDetails": "क्रियाकलाप तपशील लोड होत आहेत...",
+ "contextUnavailable": "या क्रियाकलापासाठी तपशीलवार ट्रान्स्क्रिप्ट संदर्भ आता उपलब्ध नाही.",
+ "loading": "टास्क क्रियाकलाप लोड होत आहे...",
+ "lowSignalOnly": "अद्याप कोणताही मुख्य टास्क क्रियाकलाप सापडला नाही. खालील टास्क लॉग स्ट्रीममध्ये कमी-स्तरीय अंमलबजावणी तपशील उपलब्ध आहेत.",
+ "empty": "उपलब्ध ट्रान्स्क्रिप्ट्समध्ये अद्याप कोणताही स्पष्ट टास्क क्रियाकलाप सापडला नाही. जुने किंवा ह्युरिस्टिक सत्र लॉग्स अद्याप खाली अंमलबजावणी सत्रांमध्ये उपलब्ध असू शकतात.",
+ "title": "टास्क क्रियाकलाप",
+ "description": "ट्रान्स्क्रिप्ट मेटाडेटावरून या टास्कशी लिंक केलेला मुख्य स्पष्ट रनटाइम क्रियाकलाप."
+ },
+ "sendMessage": {
+ "title": "संदेश पाठवा",
+ "description": "टीम सदस्याला थेट संदेश पाठवा.",
+ "recipientLabel": "प्राप्तकर्ता",
+ "selectMemberPlaceholder": "सदस्य निवडा...",
+ "messageLabel": "संदेश",
+ "placeholder": "तुमचा संदेश लिहा... (पाठवण्यासाठी Enter)",
+ "send": "पाठवा",
+ "sending": "पाठवत आहे...",
+ "charsLeft": "{{count}} अक्षरे शिल्लक",
+ "saved": "जतन केले",
+ "attachments": {
+ "teamOnlineRequired": "फाइल्स संलग्न करण्यासाठी टीम ऑनलाइन असणे आवश्यक आहे",
+ "recipientUnsupported": "फाइल्स टीम लीड किंवा OpenCode सहकाऱ्यांना पाठवता येतात",
+ "openCodeOnlineRequired": "OpenCode सहकाऱ्यांसाठी फाइल्स संलग्न करण्यासाठी टीम ऑनलाइन असणे आवश्यक आहे",
+ "disabledHint": "ऑनलाइन टीम लीड आणि ऑनलाइन OpenCode सहकाऱ्यांसाठी फाइल संलग्नकांना समर्थन आहे. संलग्नके काढा किंवा प्राप्तकर्ता बदला.",
+ "attachFiles": "फाइल्स संलग्न करा (पेस्ट करा किंवा ड्रॅग आणि ड्रॉप करा)",
+ "unavailable": "संलग्नके उपलब्ध नाहीत"
+ },
+ "quote": {
+ "remove": "कोट काढा",
+ "replyingTo": "यांना उत्तर देत आहे"
+ }
+ },
+ "taskComments": {
+ "cancelReply": "उत्तर रद्द करा",
+ "replyingTo": "यांना उत्तर देत आहे",
+ "placeholder": "टिप्पणी जोडा... (पाठवण्यासाठी Enter)",
+ "attachFile": "फाइल संलग्न करा (किंवा पेस्ट करा)",
+ "voiceToText": "आवाज ते मजकूर",
+ "comment": "टिप्पणी",
+ "charsLeft": "{{count}} अक्षरे शिल्लक",
+ "saved": "जतन केले",
+ "awaitingReplyFrom": "यांच्याकडून उत्तराची वाट पाहत आहे",
+ "or": "किंवा"
+ },
+ "taskAttachments": {
+ "dropImageHere": "इमेज येथे टाका",
+ "attachImage": "इमेज संलग्न करा",
+ "pasteOrDragDrop": "किंवा पेस्ट करा / ड्रॅग-ड्रॉप करा",
+ "fromOriginalMessage": "मूळ संदेशातून",
+ "dropFilesHere": "फाइल्स येथे टाका",
+ "loading": "संलग्नके लोड होत आहेत..."
+ },
+ "permissions": {
+ "autoApproveAllTools": "सर्व टूल्स ऑटो-मंजूर करा",
+ "autonomousModeDescription": "स्वायत्त मोड: टीम टूल्स पुष्टीशिवाय अंमलात येतात. अविश्वसनीय कोडसह सावध राहा.",
+ "manualModeDescription": "मॅन्युअल मोड: तुम्ही प्रत्येक टूल कॉल रिअल-टाइममध्ये मंजूर किंवा नाकाराल."
+ },
+ "memberLogStream": {
+ "tabs": {
+ "execution": "अंमलबजावणी",
+ "process": "प्रक्रिया"
+ },
+ "filters": {
+ "all": "सर्व"
+ },
+ "logs": {
+ "title": "लॉग्स",
+ "loading": "सदस्य लॉग स्ट्रीम लोड होत आहे...",
+ "emptyTitle": "या सदस्यासाठी अद्याप कोणत्याही लॉग स्ट्रीम नोंदी सापडल्या नाहीत.",
+ "emptyDescription": "उपलब्ध असताना सदस्य-व्याप्तीचे ट्रान्स्क्रिप्ट किंवा रनटाइम लॉग्स येथे दिसतील."
+ }
+ },
+ "reviewDialog": {
+ "placeholder": "काय बदलण्याची गरज आहे ते वर्णन करा... (सबमिट करण्यासाठी Enter)",
+ "submit": "सबमिट करा",
+ "charsLeft": "{{count}} अक्षरे शिल्लक",
+ "saved": "जतन केले",
+ "title": "बदल विनंती करा"
+ },
+ "dialogs": {
+ "actions": {
+ "openDashboard": "डॅशबोर्ड उघडा",
+ "openTeam": "टीम उघडा",
+ "cancel": "रद्द करा"
+ },
+ "membersJson": {
+ "hide": "JSON लपवा"
+ },
+ "optional": {
+ "badge": "ऐच्छिक"
+ }
+ },
+ "runningTeams": {
+ "title": "चालू असलेल्या टीम्स",
+ "status": {
+ "active": "सक्रिय",
+ "provisioning": "सुरू होत आहे",
+ "idle": "चालू आहे"
+ },
+ "noProject": "कोणताही प्रकल्प नाही"
+ },
+ "layout": {
+ "maxPanesReached": "कमाल {{count}} पॅन्स पोहोचले"
+ },
+ "codexReconnect": {
+ "description": "तुमचे Codex सत्र शिळे दिसते. सुरू ठेवण्यासाठी पुन्हा कनेक्ट करा.",
+ "useCode": "कोड वापरा",
+ "generating": "तयार करत आहे...",
+ "openLogin": "लॉगिन उघडा",
+ "generateLink": "लिंक तयार करा"
+ },
+ "effortLevel": {
+ "label": "प्रयत्न स्तर (ऐच्छिक)",
+ "maxDescription": "कमाल मॉडेलला कठीण टास्कसाठी सर्वाधिक तर्क वेळ देते."
+ },
+ "contextLimit": {
+ "limitTo200k": "संदर्भ 200K टोकन्सपर्यंत मर्यादित करा",
+ "always200k": "(या मॉडेलसाठी नेहमी 200K)",
+ "tooltipContent": "समर्थित असताना लॉन्च 200K-टोकन संदर्भ विंडोमध्ये ठेवते.",
+ "tooltipTitle": "संदर्भ मर्यादा"
+ },
+ "roleSelect": {
+ "noRole": "कोणतीही भूमिका नाही",
+ "customRole": "कस्टम भूमिका...",
+ "searchPlaceholder": "भूमिका शोधा...",
+ "empty": "कोणत्याही भूमिका सापडल्या नाहीत.",
+ "reservedRole": "ही भूमिका राखीव आहे",
+ "emptyCustomRole": "भूमिका रिकामी असू शकत नाही"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ms/common.json b/src/features/localization/renderer/locales/ms/common.json
new file mode 100644
index 00000000..7a7e29c2
--- /dev/null
+++ b/src/features/localization/renderer/locales/ms/common.json
@@ -0,0 +1,927 @@
+{
+ "actions": {
+ "cancel": "Batal",
+ "close": "Tutup",
+ "copied": "Disalin",
+ "copyUrl": "Salin URL",
+ "open": "Buka",
+ "reveal": "Dedahkan",
+ "retry": "Cuba lagi",
+ "save": "Simpan",
+ "showLess": "Tunjuk kurang",
+ "showMore": "Tunjuk lebih banyak",
+ "refresh": "Segar semula",
+ "reset": "Tetap semula",
+ "copyToClipboard": "Salin ke papan keratan",
+ "moreActions": "Lebih banyak tindakan",
+ "closeDialog": "Tutup dialog",
+ "goToDashboard": "Pergi ke Papan Pemuka",
+ "or": "atau",
+ "hide": "Sembunyi",
+ "resetSelection": "Tetap semula pilihan"
+ },
+ "code": {
+ "line": "baris {{line}}",
+ "lines": "baris {{from}}-{{to}}",
+ "moreLines": "({{count}} baris lagi...)",
+ "moreLines_few": "({{count}} baris lagi...)",
+ "moreLines_many": "({{count}} baris lagi...)",
+ "moreLines_one": "({{count}} baris lagi...)",
+ "moreLines_other": "({{count}} baris lagi...)",
+ "code": "Kod",
+ "preview": "Pratonton",
+ "markdownPreview": "Pratonton Markdown",
+ "linesParenthesized": "(baris {{from}}-{{to}})",
+ "mermaidSyntaxError": "Ralat sintaks Mermaid"
+ },
+ "contextBadge": {
+ "badge": "Konteks",
+ "breakdown": {
+ "text": "Teks",
+ "thinking": "Pemikiran"
+ },
+ "detailsAria": "Butiran suntikan konteks",
+ "sectionSummary": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sections": {
+ "claudeMdFiles": "Fail CLAUDE.md",
+ "mentionedFiles": "Fail Disebut",
+ "taskCoordination": "Penyelarasan Tugasan",
+ "thinkingText": "Pemikiran + Teks",
+ "toolOutputs": "Output Alat",
+ "userMessages": "Mesej Pengguna"
+ },
+ "title": "Konteks Baharu Disuntik Dalam Giliran Ini",
+ "tokenCount": "~{{tokens}} token",
+ "totalNewTokens": "Jumlah token baharu",
+ "turn": "Giliran {{turn}}",
+ "sectionSummary_few": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sectionSummary_many": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sectionSummary_one": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sectionSummary_other": "{{title}} ({{count}}) ~{{tokens}} token"
+ },
+ "locales": {
+ "emptyMessage": "Tiada bahasa ditemui.",
+ "names": {
+ "ar": "Arab",
+ "bn": "Benggali",
+ "de": "Jerman",
+ "en": "Inggeris",
+ "es": "Sepanyol",
+ "fa": "Parsi",
+ "fil": "Filipino",
+ "fr": "Perancis",
+ "hi": "Hindi",
+ "id": "Indonesia",
+ "it": "Itali",
+ "ja": "Jepun",
+ "ko": "Korea",
+ "mr": "Marathi",
+ "ms": "Melayu",
+ "nl": "Belanda",
+ "pl": "Poland",
+ "pt": "Portugis",
+ "ro": "Romania",
+ "ru": "Rusia",
+ "sw": "Swahili",
+ "system": "Sistem",
+ "ta": "Tamil",
+ "te": "Telugu",
+ "th": "Thai",
+ "tr": "Turki",
+ "uk": "Ukraine",
+ "ur": "Urdu",
+ "vi": "Vietnam",
+ "zh": "Cina"
+ },
+ "searchPlaceholder": "Cari bahasa...",
+ "selectPlaceholder": "Pilih bahasa aplikasi...",
+ "systemWithResolved": "Sistem - {{locale}}"
+ },
+ "members": {
+ "emptyMessage": "Tiada ahli ditemui.",
+ "searchPlaceholder": "Cari ahli...",
+ "unassigned": "Tidak ditugaskan",
+ "teammateFallback": "rakan pasukan"
+ },
+ "providerRuntime": {
+ "codex": {
+ "install": {
+ "checking": "Menyemak",
+ "downloading": "Memuat turun",
+ "installCli": "Pasang Codex CLI",
+ "installing": "Memasang",
+ "retryInstall": "Cuba pasang lagi"
+ }
+ }
+ },
+ "search": {
+ "noMatchingSuggestions": "Tiada cadangan yang sepadan",
+ "searching": "Mencari...",
+ "searchingFiles": "Mencari fail...",
+ "findInConversation": "Cari dalam perbualan...",
+ "resultCount": "{{current}} daripada {{total}}",
+ "resultCountCapped": "{{current}} daripada {{total}}+",
+ "noResults": "Tiada hasil",
+ "previousResultShortcut": "Hasil sebelumnya (Shift+Enter)",
+ "nextResultShortcut": "Hasil seterusnya (Enter)",
+ "closeShortcut": "Tutup (Esc)",
+ "nothingFound": "Tiada apa-apa ditemui",
+ "placeholder": "Cari..."
+ },
+ "schedules": {
+ "actions": {
+ "addSchedule": "Tambah Jadual",
+ "clearFilters": "Kosongkan penapis",
+ "createSchedule": "Cipta Jadual",
+ "delete": "Padam",
+ "edit": "Sunting",
+ "pause": "Jeda",
+ "resume": "Sambung semula",
+ "runNow": "Jalankan sekarang"
+ },
+ "empty": {
+ "description": "Cipta jadual pada mana-mana pasukan untuk mengautomasikan pelaksanaan tugasan Claude dengan ungkapan cron. Jadual daripada semua pasukan akan dipaparkan di sini.",
+ "noMatches": "Tiada jadual yang sepadan dengan penapis semasa",
+ "title": "Tiada tugasan berjadual"
+ },
+ "filters": {
+ "allTeams": "Semua pasukan"
+ },
+ "item": {
+ "loadingRunHistory": "Memuatkan sejarah larian...",
+ "nextRun": "Seterusnya: {{value}}",
+ "noRunsYet": "Belum ada larian"
+ },
+ "loading": "Memuatkan jadual...",
+ "searchPlaceholder": "Cari jadual...",
+ "status": {
+ "active": "Aktif",
+ "all": "Semua",
+ "disabled": "Dilumpuhkan",
+ "paused": "Dijeda"
+ },
+ "title": "Jadual"
+ },
+ "sessions": {
+ "actions": {
+ "hide": "Sembunyi",
+ "pin": "Sematkan",
+ "unhide": "Nyahsembunyi"
+ },
+ "empty": {
+ "noMatchingSessions": "Tiada sesi yang sepadan",
+ "noMatchingSessionsDescription": "Projek ini belum mempunyai sesi yang sepadan.",
+ "noMatchingSessionsFiltered": "Cuba pertanyaan lain atau tetap semula penapis pembekal.",
+ "noSessions": "Tiada sesi ditemui",
+ "noSessionsDescription": "Projek ini belum mempunyai sesi",
+ "selectProject": "Pilih projek untuk melihat sesi"
+ },
+ "errors": {
+ "loading": "Ralat memuatkan sesi"
+ },
+ "loadedMatchingMore": "{{count}} sesi yang sepadan dimuatkan setakat ini - tatal ke bawah untuk memuatkan lebih banyak.",
+ "loadingMore": "Memuatkan lebih banyak sesi...",
+ "pinned": "Disematkan",
+ "scrollToLoadMore": "Tatal untuk memuatkan lebih banyak",
+ "search": {
+ "clear": "Kosongkan carian sesi",
+ "placeholder": "Cari sesi..."
+ },
+ "selection": {
+ "cancel": "Batal pilihan",
+ "exitMode": "Keluar mod pilihan",
+ "hideSelected": "Sembunyi sesi yang dipilih",
+ "pinSelected": "Sematkan sesi yang dipilih",
+ "selectSessions": "Pilih sesi",
+ "selected": "{{count}} dipilih",
+ "unhideSelected": "Nyahsembunyi sesi yang dipilih",
+ "selected_few": "{{count}} dipilih",
+ "selected_many": "{{count}} dipilih",
+ "selected_one": "{{count}} dipilih",
+ "selected_other": "{{count}} dipilih"
+ },
+ "sort": {
+ "byContext": "Mengikut Konteks",
+ "byContextTooltip": "Isih mengikut penggunaan konteks",
+ "byRecentTooltip": "Isih mengikut terkini",
+ "contextLoadedOnly": "Pengisihan konteks hanya menyusun sesi yang dimuatkan."
+ },
+ "title": "Sesi",
+ "visibility": {
+ "hideHidden": "Sembunyi sesi tersembunyi",
+ "showHidden": "Tunjuk sesi tersembunyi"
+ },
+ "worktree": {
+ "switch": "Tukar Worktree"
+ },
+ "loadedMatchingMore_few": "{{count}} sesi yang sepadan dimuatkan setakat ini - tatal ke bawah untuk memuatkan lebih banyak.",
+ "loadedMatchingMore_many": "{{count}} sesi yang sepadan dimuatkan setakat ini - tatal ke bawah untuk memuatkan lebih banyak.",
+ "loadedMatchingMore_one": "{{count}} sesi yang sepadan dimuatkan setakat ini - tatal ke bawah untuk memuatkan lebih banyak.",
+ "loadedMatchingMore_other": "{{count}} sesi yang sepadan dimuatkan setakat ini - tatal ke bawah untuk memuatkan lebih banyak.",
+ "failedToLoad": "Gagal memuatkan sesi",
+ "loading": "Memuatkan sesi...",
+ "filter": {
+ "title": "Tapis sesi"
+ },
+ "count": "{{count}} sesi",
+ "count_one": "{{count}} sesi",
+ "count_other": "{{count}} sesi",
+ "count_few": "{{count}} sesi",
+ "count_many": "{{count}} sesi",
+ "inProgress": "Sesi sedang berlangsung..."
+ },
+ "states": {
+ "loading": "Memuatkan...",
+ "offline": "Luar talian",
+ "online": "Dalam talian",
+ "unknown": "Tidak diketahui",
+ "error": "Ralat"
+ },
+ "markdown": {
+ "imageFallback": "[Imej: {{label}}]",
+ "largeContentNotice": "Kandungan sangat besar ({{count}} aksara). Memaparkan pratonton mentah untuk memastikan UI responsif.",
+ "largeContentTitle": "Kandungan besar dipaparkan sebagai mentah untuk mengelakkan UI membeku",
+ "raw": "Mentah",
+ "rawPreview": "Pratonton mentah",
+ "renderMarkdown": "Render markdown",
+ "showAll": "Tunjuk semua",
+ "showMore": "Tunjuk lebih banyak",
+ "showRaw": "Tunjuk mentah",
+ "showingChars": "Memaparkan {{shown}} / {{total}} aksara",
+ "largeContentNotice_few": "Kandungan sangat besar ({{count}} aksara). Memaparkan pratonton mentah untuk memastikan UI responsif.",
+ "largeContentNotice_many": "Kandungan sangat besar ({{count}} aksara). Memaparkan pratonton mentah untuk memastikan UI responsif.",
+ "largeContentNotice_one": "Kandungan sangat besar ({{count}} aksara). Memaparkan pratonton mentah untuk memastikan UI responsif.",
+ "largeContentNotice_other": "Kandungan sangat besar ({{count}} aksara). Memaparkan pratonton mentah untuk memastikan UI responsif."
+ },
+ "terminal": {
+ "checkOutputForDetails": "Semak output terminal di atas untuk butiran",
+ "closingInSeconds": "Menutup dalam {{count}}s...",
+ "closingInSeconds_few": "Menutup dalam {{count}}s...",
+ "closingInSeconds_many": "Menutup dalam {{count}}s...",
+ "closingInSeconds_one": "Menutup dalam {{count}}s...",
+ "closingInSeconds_other": "Menutup dalam {{count}}s...",
+ "completedSuccessfully": "Selesai dengan jayanya",
+ "exitCode": "(kod keluar {{code}})",
+ "processFailed": "Proses gagal",
+ "title": "Terminal"
+ },
+ "tokens": {
+ "accumulatedWithoutDuplication": "Terkumpul sepanjang keseluruhan sesi tanpa pertindihan",
+ "cacheRead": "Bacaan Cache",
+ "cacheWrite": "Tulisan Cache",
+ "costUsd": "Kos (USD)",
+ "inputTokens": "Token Input",
+ "model": "Model",
+ "outputTokens": "Token Output",
+ "phase": "Fasa {{phase}}/{{total}}",
+ "promptInputShare": "{{percent}}% daripada input prompt",
+ "taskCoordination": "Penyelarasan Tugasan",
+ "thinkingText": "Pemikiran + Teks",
+ "toolOutputs": "Output Alat",
+ "total": "Jumlah",
+ "userMessages": "Mesej Pengguna",
+ "visibleContext": "Konteks Boleh Dilihat",
+ "includesClaudeMd": "termasuk CLAUDE.md ×{{count}}",
+ "claudeMd": "CLAUDE.md",
+ "mentionedFiles": "@fail",
+ "percentValue": "({{percent}}%)",
+ "approxTokens": "~{{tokens}} token",
+ "approxTokensParenthesized": "(~{{tokens}})"
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Salin pasukan",
+ "createTeam": "Cipta Pasukan",
+ "deleteForever": "Padam selama-lamanya",
+ "deletePermanently": "Padam secara kekal",
+ "deleteTeam": "Padam pasukan",
+ "launching": "Melancarkan...",
+ "launchTeam": "Lancarkan pasukan",
+ "relaunchTeam": "Lancarkan semula pasukan",
+ "restore": "Pulihkan",
+ "restoreTeam": "Pulihkan pasukan",
+ "retry": "Cuba lagi",
+ "stopTeam": "Hentikan pasukan",
+ "stopping": "Menghentikan..."
+ },
+ "status": {
+ "active": "Aktif",
+ "deleted": "Dipadam",
+ "launching": "Melancarkan...",
+ "offline": "Luar talian",
+ "partialFailure": "Pelancaran gagal di pertengahan",
+ "partialPending": "Bootstrap tertangguh",
+ "partialSkipped": "Pelancaran melangkau ahli",
+ "running": "Berjalan"
+ },
+ "partial": {
+ "pending": "Pelancaran terakhir masih diselaraskan.",
+ "skipped": "Pelancaran terakhir mempunyai rakan pasukan yang dilangkau.",
+ "skippedWithCount": "Pelancaran terakhir melangkau {{count}}/{{expected}} rakan pasukan.",
+ "skippedWithCount_few": "Pelancaran terakhir melangkau {{count}}/{{expected}} rakan pasukan.",
+ "skippedWithCount_many": "Pelancaran terakhir melangkau {{count}}/{{expected}} rakan pasukan.",
+ "skippedWithCount_one": "Pelancaran terakhir melangkau {{count}}/{{expected}} rakan pasukan.",
+ "skippedWithCount_other": "Pelancaran terakhir melangkau {{count}}/{{expected}} rakan pasukan.",
+ "stopped": "Pelancaran terakhir dihentikan sebelum semua rakan pasukan menyertai.",
+ "stoppedWithCount": "Pelancaran terakhir dihentikan sebelum {{count}}/{{expected}} rakan pasukan menyertai.",
+ "stoppedWithCount_few": "Pelancaran terakhir dihentikan sebelum {{count}}/{{expected}} rakan pasukan menyertai.",
+ "stoppedWithCount_many": "Pelancaran terakhir dihentikan sebelum {{count}}/{{expected}} rakan pasukan menyertai.",
+ "stoppedWithCount_one": "Pelancaran terakhir dihentikan sebelum {{count}}/{{expected}} rakan pasukan menyertai.",
+ "stoppedWithCount_other": "Pelancaran terakhir dihentikan sebelum {{count}}/{{expected}} rakan pasukan menyertai."
+ },
+ "noDescription": "Tiada penerangan",
+ "solo": "Solo",
+ "membersCount": "Ahli: {{count}}",
+ "membersCount_few": "Ahli: {{count}}",
+ "membersCount_many": "Ahli: {{count}}",
+ "membersCount_one": "Ahli: {{count}}",
+ "membersCount_other": "Ahli: {{count}}",
+ "all": "Semua",
+ "moreCount": "+{{count}} lagi",
+ "moreCount_one": "+{{count}} lagi",
+ "moreCount_other": "+{{count}} lagi",
+ "moreCount_few": "+{{count}} lagi",
+ "moreCount_many": "+{{count}} lagi"
+ },
+ "runtimeProvider": {
+ "defaults": {
+ "scopeDescriptionAllProjects": "Lalai untuk setiap projek yang tidak mempunyai penggantian OpenCode sendiri.",
+ "scopeDescriptionProject": "Gantikan hanya projek yang dipilih. Pasukan yang sedang berjalan tidak berubah.",
+ "setAllProjectsDefault": "Tetapkan lalai semua projek",
+ "setProjectDefault": "Tetapkan lalai projek",
+ "validationContext": "Konteks pengesahan",
+ "projectOverrideContext": "Konteks penggantian projek",
+ "selectProjectHint": "Pilih projek sebelum menguji model tempatan atau menyimpan lalai.",
+ "allProjectsHint": "Ujian menggunakan {{project}}. Lalai terpakai melainkan projek mempunyai penggantian.",
+ "projectHint": "Menyimpan hanya menggantikan {{project}}."
+ }
+ },
+ "sessionContext": {
+ "header": {
+ "title": "Konteks",
+ "closePanel": "Tutup panel",
+ "phase": "Fasa:",
+ "current": "Semasa",
+ "view": "Paparan:",
+ "category": "Kategori",
+ "bySize": "Mengikut Saiz"
+ },
+ "metrics": {
+ "unavailable": "Tidak tersedia",
+ "contextUsed": "Konteks Digunakan",
+ "promptInput": "Input Prompt",
+ "visibleContext": "Konteks Boleh Dilihat",
+ "ofContext": "daripada konteks",
+ "ofPrompt": "daripada prompt",
+ "codexTelemetryUnavailable": "Penggunaan sisi-prompt Codex belum didedahkan oleh telemetri runtime semasa, jadi Input Prompt dan Konteks Digunakan kekal tidak tersedia dan bukannya memaparkan sifar palsu.",
+ "sessionCost": "Kos Sesi:",
+ "parentPlus": "induk +",
+ "subagents": "subagen",
+ "details": "butiran"
+ },
+ "help": {
+ "contextUsed": {
+ "title": "Konteks Digunakan",
+ "description": "Input prompt ditambah token output yang sedang menduduki tetingkap konteks model."
+ },
+ "promptInput": {
+ "title": "Input Prompt",
+ "description": "Token yang dihantar ke model sebelum penjanaan. Untuk Claude ini termasuk `input_tokens + cache_creation_input_tokens + cache_read_input_tokens`."
+ },
+ "visibleContext": {
+ "title": "Konteks Boleh Dilihat",
+ "description": "Subset boleh diperiksa bagi input prompt: fail, CLAUDE.md, output alat, mesej pengguna, dan suntikan serupa yang boleh anda optimumkan secara langsung."
+ },
+ "availability": {
+ "title": "Ketersediaan",
+ "description": "Jika runtime pembekal belum mendedahkan penggunaan sisi-prompt, panel memaparkan metrik sebagai tidak tersedia dan bukannya berpura-pura ia sifar."
+ }
+ },
+ "items": {
+ "turn": "@Giliran {{turn}}",
+ "tokensApprox": "~{{tokens}} token",
+ "toolsCount": "{{count}} alat",
+ "toolsCount_one": "{{count}} alat",
+ "toolsCount_other": "{{count}} alat",
+ "toolsCount_few": "{{count}} alat",
+ "toolsCount_many": "{{count}} alat",
+ "itemsCount": "{{count}} item",
+ "itemsCount_one": "{{count}} item",
+ "itemsCount_other": "{{count}} item",
+ "itemsCount_few": "{{count}} item",
+ "itemsCount_many": "{{count}} item",
+ "missing": "hilang",
+ "thinking": "Pemikiran",
+ "text": "Teks"
+ },
+ "empty": "Tiada suntikan konteks dikesan dalam sesi ini",
+ "view": {
+ "grouped": "Berkumpulan",
+ "flat": "Rata"
+ },
+ "claudeMdFiles": "Fail CLAUDE.md",
+ "mentionedFiles": "Fail Disebut"
+ },
+ "chat": {
+ "subagent": {
+ "fallbackName": "Subagen",
+ "shutdownConfirmed": "Penutupan disahkan",
+ "summary": {
+ "tools": "{{count}} alat",
+ "tools_one": "{{count}} alat",
+ "tools_other": "{{count}} alat",
+ "tools_few": "{{count}} alat",
+ "tools_many": "{{count}} alat"
+ },
+ "meta": {
+ "type": "Jenis",
+ "duration": "Tempoh",
+ "model": "Model",
+ "id": "ID"
+ },
+ "metrics": {
+ "contextWindow": "Tetingkap Konteks",
+ "contextUsage": "Penggunaan Konteks",
+ "mainContext": "Konteks Utama",
+ "totalOutput": "Jumlah Output",
+ "turns": "({{count}} giliran)",
+ "turns_one": "({{count}} giliran)",
+ "turns_other": "({{count}} giliran)",
+ "subagentContext": "Konteks Subagen",
+ "phase": "Fasa {{phase}}",
+ "turns_few": "({{count}} giliran)",
+ "turns_many": "({{count}} giliran)"
+ },
+ "trace": {
+ "title": "Jejak Pelaksanaan"
+ }
+ },
+ "user": {
+ "you": "Anda",
+ "showMore": "Tunjuk lebih banyak",
+ "showLess": "Tunjuk kurang",
+ "backgroundTask": "Tugasan latar belakang",
+ "exitCode": "keluar {{code}}",
+ "imagesAttached": "{{count}} imej dilampirkan",
+ "imagesAttached_one": "{{count}} imej dilampirkan",
+ "imagesAttached_few": "{{count}} imej dilampirkan",
+ "imagesAttached_many": "{{count}} imej dilampirkan",
+ "imagesAttached_other": "{{count}} imej dilampirkan"
+ },
+ "compact": {
+ "toggle": "Togol kandungan dimampatkan",
+ "contextCompacted": "Konteks dimampatkan",
+ "freedTokens": "({{tokens}} dibebaskan)",
+ "phase": "Fasa {{phase}}",
+ "conversationCompacted": "Perbualan Dimampatkan",
+ "summary": "Mesej sebelumnya diringkaskan untuk menjimatkan konteks. Sejarah perbualan penuh dikekalkan dalam fail sesi.",
+ "compacted": "Dimampatkan"
+ },
+ "executionTrace": {
+ "empty": "Tiada item pelaksanaan",
+ "nested": "Bersarang: {{name}}",
+ "input": "Input"
+ },
+ "items": {
+ "empty": "Tiada item untuk dipaparkan"
+ },
+ "tools": {
+ "teammateSpawned": "Rakan pasukan dijana",
+ "shutdownRequested": "Penutupan diminta ->",
+ "noResultReceived": "Tiada hasil diterima",
+ "duration": "Tempoh: {{duration}}",
+ "result": "Hasil",
+ "write": {
+ "createdFile": "Fail dicipta",
+ "wroteToFile": "Menulis ke fail"
+ },
+ "skill": {
+ "instructions": "Arahan Kemahiran",
+ "unknown": "Kemahiran Tidak Diketahui"
+ }
+ },
+ "lastOutput": {
+ "requestInterrupted": "Permintaan diganggu oleh pengguna",
+ "planReadyForApproval": "Pelan Sedia untuk Kelulusan"
+ },
+ "empty": {
+ "icon": "💬",
+ "title": "Tiada sejarah perbualan",
+ "description": "Sesi ini belum mengandungi sebarang mesej."
+ },
+ "context": {
+ "remainingPercent": "({{percent}}% berbaki)",
+ "count": "Konteks ({{count}})",
+ "count_one": "Konteks ({{count}})",
+ "count_other": "Konteks ({{count}})",
+ "count_few": "Konteks ({{count}})",
+ "count_many": "Konteks ({{count}})"
+ },
+ "scrollToBottom": "Tatal ke bawah",
+ "bottom": "Bawah",
+ "teammateMessage": {
+ "message": "Mesej",
+ "resent": "Dihantar semula",
+ "fallback": "Mesej rakan pasukan"
+ },
+ "system": {
+ "label": "Sistem"
+ }
+ },
+ "tmuxInstaller": {
+ "summaryTitle": "tmux belum dipasang",
+ "detectedOs": "OS dikesan: {{os}}",
+ "runtimePath": "Laluan runtime: {{path}}",
+ "phase": "Fasa: {{phase}}",
+ "actions": {
+ "cancel": "Batal",
+ "manualGuide": "Panduan manual",
+ "hideSetupSteps": "Sembunyi langkah persediaan",
+ "showSetupSteps": "Tunjuk langkah persediaan ({{count}})",
+ "showSetupSteps_one": "Tunjuk langkah persediaan ({{count}})",
+ "showSetupSteps_other": "Tunjuk langkah persediaan ({{count}})",
+ "recheck": "Semak semula",
+ "showSetupSteps_few": "Tunjuk langkah persediaan ({{count}})",
+ "showSetupSteps_many": "Tunjuk langkah persediaan ({{count}})"
+ },
+ "installerProgress": "Kemajuan pemasang",
+ "input": {
+ "placeholder": "Hantar input ke pemasang",
+ "send": "Hantar input",
+ "passwordNotice": "Input kata laluan dihantar terus ke terminal pemasang dan tidak ditambah ke output log."
+ },
+ "details": {
+ "show": "Tunjuk butiran",
+ "hide": "Sembunyi butiran"
+ }
+ },
+ "commandPalette": {
+ "noRecentActivity": "Tiada aktiviti terkini",
+ "sessionsCount": "{{count}} sesi",
+ "sessionsCount_one": "{{count}} sesi",
+ "sessionsCount_other": "{{count}} sesi",
+ "mode": {
+ "searchProjects": "Cari projek",
+ "searchAcrossProjects": "Cari merentas semua projek",
+ "searchInProject": "Cari dalam projek"
+ },
+ "currentProject": "Projek semasa",
+ "global": "Global",
+ "placeholders": {
+ "projects": "Cari projek...",
+ "conversations": "Cari perbualan..."
+ },
+ "empty": {
+ "noProjectsForQuery": "Tiada projek ditemui untuk \"{{query}}\"",
+ "noProjects": "Tiada projek ditemui",
+ "minChars": "Taip sekurang-kurangnya 2 aksara untuk mencari",
+ "noFastResults": "Tiada hasil pantas dalam sesi terkini untuk \"{{query}}\"",
+ "noResults": "Tiada hasil ditemui untuk \"{{query}}\""
+ },
+ "footer": {
+ "projectsCount": "{{count}} projek",
+ "projectsCount_one": "{{count}} projek",
+ "projectsCount_other": "{{count}} projek",
+ "results": "{{count}} {{speed}}hasil",
+ "results_one": "{{count}} {{speed}}hasil",
+ "results_other": "{{count}} {{speed}}hasil",
+ "resultsAcrossProjects": "{{count}} {{speed}}hasil merentas semua projek",
+ "resultsAcrossProjects_one": "{{count}} {{speed}}hasil merentas semua projek",
+ "resultsAcrossProjects_other": "{{count}} {{speed}}hasil merentas semua projek",
+ "fastPrefix": "pantas ",
+ "typeToSearch": "Taip untuk mencari",
+ "navigate": "navigasi",
+ "select": "pilih",
+ "open": "buka",
+ "global": "global",
+ "close": "tutup",
+ "results_few": "{{count}} {{speed}}hasil",
+ "results_many": "{{count}} {{speed}}hasil",
+ "resultsAcrossProjects_few": "{{count}} {{speed}}hasil merentas semua projek",
+ "resultsAcrossProjects_many": "{{count}} {{speed}}hasil merentas semua projek",
+ "projectsCount_few": "{{count}} projek",
+ "projectsCount_many": "{{count}} projek",
+ "upDownKey": "↑↓",
+ "escapeKey": "esc"
+ },
+ "sessionsCount_few": "{{count}} sesi",
+ "sessionsCount_many": "{{count}} sesi"
+ },
+ "tasksPanel": {
+ "title": "Tugasan",
+ "searchPlaceholder": "Cari tugasan...",
+ "pinned": "Disematkan",
+ "groupByLabel": "Kumpulkan mengikut:",
+ "groupByAria": "Kumpulkan mengikut",
+ "groupModes": {
+ "none": "Tiada",
+ "project": "Projek",
+ "time": "Masa"
+ },
+ "showArchived": "Tunjuk yang diarkibkan",
+ "hideArchived": "Sembunyi yang diarkibkan",
+ "empty": {
+ "noMatchingTasks": "Tiada tugasan yang sepadan",
+ "noTasks": "Tiada tugasan ditemui"
+ },
+ "teamLabel": "Pasukan: {{team}}",
+ "showMore": "Tunjuk lebih banyak",
+ "showLess": "Tunjuk kurang",
+ "deleteConfirm": {
+ "title": "Padam tugasan",
+ "message": "Alihkan tugasan #{{taskId}} ke tong sampah?",
+ "confirmLabel": "Padam",
+ "cancelLabel": "Batal"
+ },
+ "deleteFailed": {
+ "title": "Gagal memadam tugasan",
+ "fallbackMessage": "Ralat tidak dijangka berlaku",
+ "confirmLabel": "OK"
+ },
+ "sort": {
+ "byTime": "Mengikut masa",
+ "byUnread": "Mengikut belum dibaca",
+ "byProject": "Mengikut projek",
+ "byTeam": "Mengikut pasukan"
+ }
+ },
+ "toolViewer": {
+ "input": "Input",
+ "replaceAll": "(ganti semua)",
+ "noInputRecorded": "Tiada input direkodkan untuk panggilan alat ini.",
+ "agent": {
+ "action": "tindakan",
+ "teammate": "rakan pasukan",
+ "team": "pasukan",
+ "runtime": "runtime",
+ "type": "jenis",
+ "startupInstructionsHidden": "Arahan permulaan disembunyikan dalam UI."
+ }
+ },
+ "taskContextMenu": {
+ "unpin": "Nyahsematkan",
+ "pin": "Sematkan",
+ "rename": "Namakan semula",
+ "markUnread": "Tandakan sebagai belum dibaca",
+ "unarchive": "Nyaharkib",
+ "archive": "Arkibkan",
+ "deleteTask": "Padam tugasan"
+ },
+ "updateDialog": {
+ "closeDialog": "Tutup dialog",
+ "updateAvailable": "Kemas kini tersedia",
+ "updateReady": "Kemas Kini Sedia",
+ "noReleaseNotes": "Tiada nota keluaran tersedia.",
+ "viewOnGitHub": "Lihat di GitHub",
+ "later": "Kemudian",
+ "restartNow": "Mulakan semula sekarang",
+ "download": "Muat turun"
+ },
+ "errorBoundary": {
+ "title": "Sesuatu telah berlaku",
+ "description": "Ralat tidak dijangka berlaku dalam aplikasi. Anda boleh cuba memuat semula halaman atau menetapkan semula keadaan ralat.",
+ "componentStack": "Tindanan Komponen",
+ "tryAgain": "Cuba Lagi",
+ "copied": "Disalin",
+ "copyErrorDetails": "Salin Butiran Ralat",
+ "reportBugOnGitHub": "Laporkan Pepijat di GitHub",
+ "reloadApp": "Muat Semula Aplikasi",
+ "diagnosticsNotice": "Laporan pepijat GitHub dan diagnostik yang disalin termasuk mesej ralat, jejak tindanan, versi aplikasi, tab aktif, pasukan terpilih, konteks tugasan, dan butiran persekitaran."
+ },
+ "runtimeBackendSelector": {
+ "label": "Backend runtime",
+ "resolved": "Diselesaikan: {{backend}}",
+ "current": "Semasa",
+ "recommended": "Disyorkan",
+ "unavailable": "Tidak tersedia",
+ "cannotSelectYet": "Backend ini belum boleh dipilih.",
+ "auto": "Auto",
+ "autoCurrently": "Auto (kini: {{backend}})",
+ "audience": {
+ "internal": "Dalaman"
+ },
+ "states": {
+ "locked": "Dikunci",
+ "disabled": "Dilumpuhkan",
+ "authRequired": "Pengesahan diperlukan",
+ "runtimeMissing": "Runtime hilang",
+ "degraded": "Merosot",
+ "unavailable": "Tidak tersedia"
+ }
+ },
+ "providerModelBadges": {
+ "checking": "Menyemak",
+ "unavailable": "Tidak tersedia",
+ "checkFailed": "Semakan gagal",
+ "free": "Percuma",
+ "freeTooltip": "Dilaporkan oleh metadata OpenCode. Ketersediaan dan had mungkin berubah."
+ },
+ "taskFilters": {
+ "status": "Status",
+ "clearAll": "Kosongkan semua",
+ "selectAll": "Pilih semua",
+ "team": "Pasukan",
+ "allTeams": "Semua pasukan",
+ "searchTeams": "Cari pasukan...",
+ "noTeamsFound": "Tiada pasukan ditemui",
+ "project": "Projek",
+ "allProjects": "Semua Projek",
+ "searchProjects": "Cari projek...",
+ "noProjects": "Tiada projek",
+ "comments": "Komen",
+ "apply": "Terapkan",
+ "read": {
+ "all": "Semua",
+ "unread": "Belum dibaca",
+ "read": "Dibaca"
+ },
+ "statusOptions": {
+ "todo": "PERLU DIBUAT",
+ "inProgress": "SEDANG DIBUAT",
+ "needsFix": "PERLU PEMBETULAN",
+ "done": "SELESAI",
+ "review": "SEMAKAN",
+ "approved": "DILULUSKAN"
+ }
+ },
+ "sessionItem": {
+ "totalContext": "Jumlah Konteks: {{tokens}} token",
+ "context": "Konteks: {{tokens}}",
+ "phase": "Fasa {{phase}}:",
+ "compactedTo": "(dimampatkan kepada {{tokens}})"
+ },
+ "notifications": {
+ "row": {
+ "team": "pasukan",
+ "subagent": "subagen",
+ "markAsRead": "Tandakan sebagai dibaca",
+ "delete": "Padam",
+ "viewInSession": "Lihat dalam sesi"
+ },
+ "title": "Pemberitahuan",
+ "loading": "Memuatkan pemberitahuan...",
+ "actions": {
+ "markFilteredAsRead": "Tandakan yang ditapis sebagai dibaca",
+ "markAllAsRead": "Tandakan semua sebagai dibaca",
+ "markFilteredRead": "Tandakan yang ditapis dibaca",
+ "markAllRead": "Tandakan semua dibaca",
+ "clearFilteredNotifications": "Kosongkan pemberitahuan yang ditapis",
+ "clearAllNotifications": "Kosongkan semua pemberitahuan",
+ "clickToConfirm": "Klik untuk mengesahkan",
+ "clearFiltered": "Kosongkan yang ditapis",
+ "clearAll": "Kosongkan semua"
+ },
+ "counts": {
+ "unreadInFilter": "{{count}} belum dibaca dalam penapis",
+ "unreadInFilter_one": "{{count}} belum dibaca dalam penapis",
+ "unreadInFilter_few": "{{count}} belum dibaca dalam penapis",
+ "unreadInFilter_many": "{{count}} belum dibaca dalam penapis",
+ "unreadInFilter_other": "{{count}} belum dibaca dalam penapis",
+ "inFilter": "{{count}} dalam penapis",
+ "inFilter_one": "{{count}} dalam penapis",
+ "inFilter_few": "{{count}} dalam penapis",
+ "inFilter_many": "{{count}} dalam penapis",
+ "inFilter_other": "{{count}} dalam penapis",
+ "unread": "{{count}} belum dibaca",
+ "unread_one": "{{count}} belum dibaca",
+ "unread_few": "{{count}} belum dibaca",
+ "unread_many": "{{count}} belum dibaca",
+ "unread_other": "{{count}} belum dibaca",
+ "total": "{{count}} jumlah",
+ "total_one": "{{count}} jumlah",
+ "total_few": "{{count}} jumlah",
+ "total_many": "{{count}} jumlah",
+ "total_other": "{{count}} jumlah"
+ },
+ "filters": {
+ "other": "Lain-lain"
+ },
+ "empty": {
+ "noMatching": "Tiada pemberitahuan yang sepadan",
+ "noNotifications": "Tiada pemberitahuan",
+ "tryDifferentFilter": "Cuba penapis yang berbeza",
+ "allCaughtUp": "Anda sudah selesai semuanya!"
+ }
+ },
+ "updates": {
+ "restartToUpdate": "Mulakan semula untuk mengemas kini",
+ "updateApp": "Kemas kini aplikasi",
+ "downloadedRestartTooltip": "Kemas kini dimuat turun, mulakan semula untuk menerapkan",
+ "newVersionAvailable": "Versi baharu tersedia",
+ "updatingApp": "Mengemas kini aplikasi",
+ "updateReady": "Kemas kini sedia",
+ "restartNow": "Mulakan semula sekarang"
+ },
+ "layout": {
+ "github": "GitHub",
+ "discord": "Discord",
+ "expandSidebar": "Kembangkan bar sisi",
+ "collapseSidebarShortcut": "Runtuhkan bar sisi ({{shortcut}})",
+ "sidebarView": "Paparan bar sisi",
+ "resizeSidebar": "Ubah saiz bar sisi",
+ "closeTab": "Tutup tab",
+ "openedFromSearch": "Dibuka daripada carian",
+ "pinnedSession": "Sesi disematkan",
+ "jumpToSection": "Lompat ke bahagian",
+ "newTab": "Tab baharu",
+ "newTabDashboard": "Tab baharu (Papan Pemuka)",
+ "refreshSession": "Segar semula sesi",
+ "refreshSessionWithShortcut": "Segar Semula Sesi ({{shortcut}})",
+ "loadingTab": "Memuatkan tab",
+ "menu": {
+ "teams": "Pasukan",
+ "settings": "Tetapan",
+ "extensions": "Sambungan",
+ "search": "Cari",
+ "schedules": "Jadual",
+ "docs": "Dokumen",
+ "exportMarkdown": "Eksport sebagai Markdown",
+ "exportJson": "Eksport sebagai JSON",
+ "exportPlainText": "Eksport sebagai Teks Biasa",
+ "analyzeSession": "Analisis Sesi"
+ },
+ "tabMenu": {
+ "closeTabs": "Tutup {{count}} Tab",
+ "closeTabs_one": "Tutup {{count}} Tab",
+ "closeTabs_few": "Tutup {{count}} Tab",
+ "closeTabs_many": "Tutup {{count}} Tab",
+ "closeTabs_other": "Tutup {{count}} Tab",
+ "closeTab": "Tutup Tab",
+ "closeOtherTabs": "Tutup Tab Lain",
+ "splitRight": "Pisah ke Kanan",
+ "splitLeft": "Pisah ke Kiri",
+ "pinToSidebar": "Sematkan ke Bar Sisi",
+ "unpinFromSidebar": "Nyahsematkan daripada Bar Sisi",
+ "hideFromSidebar": "Sembunyi daripada Bar Sisi",
+ "unhideFromSidebar": "Nyahsembunyi daripada Bar Sisi",
+ "closeAllTabs": "Tutup Semua Tab"
+ },
+ "sections": {
+ "team": "Pasukan",
+ "sessions": "Sesi",
+ "kanban": "Kanban",
+ "claudeLogs": "Log",
+ "messages": "Mesej"
+ }
+ },
+ "editorFormatting": {
+ "bold": "Tebal",
+ "italic": "Condong",
+ "strike": "Garis tengah",
+ "code": "Kod"
+ },
+ "diff": {
+ "changed": "Ditukar",
+ "noChangesDetected": "Tiada perubahan dikesan"
+ },
+ "codexLogin": {
+ "copyLoginLinkAndCode": "Salin pautan log masuk ChatGPT dan kod",
+ "copyLoginLink": "Salin pautan log masuk ChatGPT",
+ "copyFailed": "Salinan gagal",
+ "copyLinkAndCode": "Salin pautan + kod",
+ "copyLink": "Salin pautan",
+ "enterCodeOnLoginPage": "Masukkan kod ini pada halaman log masuk ChatGPT"
+ },
+ "window": {
+ "minimize": "Minimumkan",
+ "maximize": "Maksimumkan",
+ "restore": "Pulihkan"
+ },
+ "context": {
+ "local": "Tempatan",
+ "switchingTo": "Beralih ke {{workspace}}",
+ "loadingWorkspace": "Memuatkan ruang kerja",
+ "switchWorkspace": "Tukar Ruang Kerja"
+ },
+ "repositories": {
+ "noneAvailable": "Tiada repositori tersedia",
+ "remove": "Buang repositori"
+ },
+ "export": {
+ "session": "Eksport sesi",
+ "sessionTitle": "Eksport Sesi"
+ },
+ "brand": {
+ "claude": "Claude"
+ },
+ "sessionReport": {
+ "noSessionData": "Tiada data sesi tersedia",
+ "title": "Laporan Sesi"
+ },
+ "sessionFilters": {
+ "project": {
+ "selectProject": "Pilih Projek"
+ }
+ },
+ "tasks": {
+ "date": {
+ "updatedPrefix": "kemas kini",
+ "updatedYesterday": "kemas kini semalam",
+ "yesterday": "Semalam"
+ },
+ "reviewState": {
+ "needsFix": "Perlu Pembetulan"
+ },
+ "unassigned": "tidak ditugaskan"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ms/dashboard.json b/src/features/localization/renderer/locales/ms/dashboard.json
new file mode 100644
index 00000000..d3d79cef
--- /dev/null
+++ b/src/features/localization/renderer/locales/ms/dashboard.json
@@ -0,0 +1,197 @@
+{
+ "cliStatus": {
+ "actions": {
+ "alreadyLoggedIn": "Sudah log masuk?",
+ "becomeSponsor": "Jadi penaja",
+ "cancel": "Batal",
+ "checkNow": "Semak sekarang",
+ "checkUpdates": "Semak Kemas Kini",
+ "checking": "Menyemak...",
+ "connect": "Sambung",
+ "extensions": "Sambungan",
+ "login": "Log masuk",
+ "manage": "Urus",
+ "manageProviders": "Urus Pembekal",
+ "plan": "Pelan",
+ "recheck": "Semak semula",
+ "recheckProvider": "Semak semula {{provider}}",
+ "retry": "Cuba lagi",
+ "updateTo": "Kemas kini ke v{{version}}",
+ "useCode": "Guna kod"
+ },
+ "atlas": {
+ "alt": "Atlas Cloud",
+ "description": "Atlas Cloud ialah platform inferens AI modal penuh yang memberikan pembangun satu API AI tunggal untuk mengakses penjanaan video, penjanaan imej, dan API LLM. Daripada menguruskan pelbagai integrasi vendor, anda bersambung sekali dan mendapat akses bersatu kepada 300+ model terpilih merentas semua modaliti. Lihat promosi pelan pengekodan baharu Atlas Cloud untuk akses API yang lebih jimat.",
+ "openCodeProvider": "Pembekal OpenCode",
+ "plan": "Pelan pengekodan Atlas Cloud",
+ "sponsor": "Penaja"
+ },
+ "errors": {
+ "checkStatusFailed": "Gagal menyemak status CLI",
+ "installationFailed": "Pemasangan gagal",
+ "refreshFailed": "Gagal menyemak kemas kini. Semak sambungan rangkaian anda dan cuba lagi.",
+ "runtimeUpdatedRefreshFailed": "Runtime dikemas kini, tetapi gagal menyegarkan status pembekal."
+ },
+ "hints": {
+ "backgroundStatus": "Status {{runtime}} akan disemak di latar belakang.",
+ "codexApiKeyFallback": "{{hint}} Sandaran kunci API tersedia jika anda menukar mod pengesahan.",
+ "codexAutoApiKey": "{{hint}} Auto akan terus menggunakan kunci API sehingga ChatGPT disambungkan.",
+ "codexFinishLogin": "Selesaikan log masuk ChatGPT dalam pelayar. Masukkan kod yang dipaparkan jika diminta.",
+ "codexNoActiveLogin": "Had penggunaan muncul hanya selepas Codex CLI melihat akaun ChatGPT yang aktif. Buat masa ini ia melaporkan tiada log masuk ChatGPT yang aktif.",
+ "codexNoActiveManagedSession": "Had penggunaan muncul hanya selepas Codex CLI melihat akaun ChatGPT yang aktif. Data akaun Codex tempatan wujud, tetapi tiada sesi terurus aktif yang dipilih buat masa ini.",
+ "codexReconnectNeeded": "Had penggunaan muncul hanya selepas Codex menyegarkan sesi ChatGPT yang dipilih kini. Buat masa ini sesi tempatan perlu disambung semula.",
+ "firstCheckSlow": "Semakan pertama mungkin mengambil masa sehingga 30 saat",
+ "loginRequiredForTeams": "Melayari sesi dan projek berfungsi tanpa log masuk. Log masuk hanya diperlukan untuk menjalankan pasukan agen.",
+ "troubleshootTitle": "Jika anda pasti anda sudah log masuk, cuba langkah-langkah ini:"
+ },
+ "installer": {
+ "checkingLatest": "Menyemak versi terkini...",
+ "downloading": "Memuat turun {{runtime}}...",
+ "installing": "Memasang {{runtime}}...",
+ "success": "Berjaya memasang {{runtime}} v{{version}}",
+ "verifying": "Mengesahkan checksum..."
+ },
+ "labels": {
+ "apiKeyRequired": "Kunci API diperlukan",
+ "comingSoon": "Akan datang",
+ "collapseProviderDetails": "Runtuhkan butiran pembekal",
+ "expandProviderDetails": "Kembangkan butiran pembekal",
+ "generateLink": "Jana pautan",
+ "loadingRateLimits": "Had kadar dimuatkan",
+ "loggedOut": "Pembekal telah log keluar",
+ "loginAuthFailed": "Pengesahan gagal",
+ "loginAuthUpdated": "Pengesahan dikemas kini",
+ "loginComplete": "Log masuk selesai",
+ "loginFailed": "Log masuk gagal",
+ "loginTitle": "Log masuk",
+ "logoutFailed": "Log keluar gagal",
+ "logoutTitle": "Log keluar",
+ "notLoggedIn": "Belum log masuk",
+ "openLogin": "Buka log masuk",
+ "providerActionRequired": "Tindakan pembekal diperlukan",
+ "resets": "ditetap semula {{time}}",
+ "runtimeLoginTitle": "Log Masuk {{runtime}}"
+ },
+ "loading": {
+ "aiProviders": "Menyemak Pembekal AI...",
+ "claudeCli": "Menyemak Claude CLI..."
+ },
+ "provider": {
+ "authenticated": "Disahkan",
+ "backend": "Backend: {{backend}}",
+ "checkingAuthentication": "Menyemak pengesahan...",
+ "checkingProviders": "Menyemak pembekal...",
+ "configuredLocalCount": "{{count}} dikonfigurasi setempat",
+ "configuredLocalCount_few": "{{count}} dikonfigurasi setempat",
+ "configuredLocalCount_many": "{{count}} dikonfigurasi setempat",
+ "configuredLocalCount_one": "{{count}} dikonfigurasi setempat",
+ "configuredLocalCount_other": "{{count}} dikonfigurasi setempat",
+ "configuredLocalTitle": "Laluan OpenCode tempatan diimport daripada konfigurasi OpenCode anda.",
+ "connectedCount": "Pembekal: {{connected}}/{{denominator}} disambung",
+ "freeModels": "Model percuma",
+ "freeModelsTitle": "OpenCode merangkumi pilihan model percuma seperti Big Pickle apabila tersedia dalam persediaan anda. OpenRouter melalui OpenCode juga boleh mendedahkan model percuma, tetapi tidak setiap model OpenCode/OpenRouter adalah percuma. Ketersediaan dan had mungkin berubah.",
+ "loadingModels": "Memuatkan model...",
+ "modelsUnavailable": "Model tidak tersedia untuk binaan runtime ini",
+ "runtime": "Runtime: {{runtime}}",
+ "verifiedCount": "{{count}} disahkan",
+ "verifiedCount_few": "{{count}} disahkan",
+ "verifiedCount_many": "{{count}} disahkan",
+ "verifiedCount_one": "{{count}} disahkan",
+ "verifiedCount_other": "{{count}} disahkan",
+ "verifiedTitle": "Laluan OpenCode dengan bukti pelaksanaan yang berjaya."
+ },
+ "runtime": {
+ "configuredHealthCheckFailed": "{{runtime}} yang dikonfigurasi gagal semakan kesihatan permulaannya.",
+ "configuredNotFound": "{{runtime}} yang dikonfigurasi tidak ditemui.",
+ "foundButFailed": "{{runtime}} ditemui tetapi gagal dimulakan",
+ "healthCheckFailedDescription": "Aplikasi menemui {{runtime}} yang dikonfigurasi, tetapi semakan kesihatan permulaannya gagal. Baiki atau pasang semula, kemudian cuba lagi.",
+ "install": "Pasang {{runtime}}",
+ "installRequiredDescription": "{{runtime}} diperlukan untuk peruntukan pasukan dan pengurusan sesi. Pasangnya untuk bermula.",
+ "isRequired": "{{runtime}} diperlukan",
+ "reinstall": "Pasang semula {{runtime}}"
+ },
+ "runtimeInstall": {
+ "checking": "Menyemak",
+ "codexTitle": "Pasang Codex CLI ke dalam data aplikasi",
+ "downloading": "Memuat turun",
+ "downloadingPercent": "Memuat turun {{percent}}%",
+ "install": "Pasang",
+ "installing": "Memasang",
+ "openCodeTitle": "Pasang runtime OpenCode ke dalam data aplikasi",
+ "retryInstall": "Cuba pasang lagi"
+ },
+ "troubleshoot": {
+ "again": "lagi",
+ "authStatusCommand": "arahan status pengesahan CLI yang anda konfigurasikan",
+ "checkLoggedIn": "- semak jika ia memaparkan \"Logged in\"",
+ "click": "Klik",
+ "loginCommand": "arahan log masuk runtime",
+ "logoutCommand": "arahan log keluar runtime",
+ "openTerminal": "Buka terminal anda dan jalankan:",
+ "reloginPrefix": "Jika ia menyatakan sudah log masuk tetapi aplikasi tidak melihatnya, cuba:",
+ "sameRuntime": "Pastikan CLI dalam terminal anda adalah runtime yang sama dengan yang digunakan aplikasi",
+ "statusCacheHint": "- kadangkala status di-cache untuk beberapa saat",
+ "then": "kemudian"
+ },
+ "warnings": {
+ "multipleApiKeysMissing": "Satu atau lebih pembekal ditetapkan ke mod kunci API, tetapi tiada kunci API dikonfigurasi. Buka Urus Pembekal untuk menambah kunci atau menukar mod sambungan.",
+ "multipleApiKeysNeedAttention": "Satu atau lebih pembekal ditetapkan ke mod kunci API dan memerlukan perhatian. Buka Urus Pembekal untuk menyemak kunci yang disimpan atau menukar mod sambungan.",
+ "notAuthenticated": "{{runtime}} telah dipasang tetapi anda belum disahkan. Log masuk diperlukan untuk peruntukan pasukan dan ciri AI.",
+ "singleApiKeyMissing": "{{provider}} ditetapkan ke mod kunci API, tetapi tiada kunci API dikonfigurasi. Buka Urus Pembekal untuk menambah kunci atau menukar mod sambungan.",
+ "singleApiKeyNeedsAttention": "{{provider}} ditetapkan ke mod kunci API, tetapi ia tidak disambung. Buka Urus Pembekal untuk menyemak kunci yang disimpan atau menukar mod sambungan."
+ }
+ },
+ "recentProjects": {
+ "selectFolderTitle": "Pilih folder projek",
+ "selectFolder": "Pilih Folder",
+ "failedToLoad": "Gagal memuatkan projek",
+ "retry": "Cuba lagi",
+ "noProjects": "Tiada projek ditemui",
+ "noMatches": "Tiada padanan untuk \"{{query}}\"",
+ "noRecentProjects": "Tiada projek terkini ditemui",
+ "emptyDescription": "Aktiviti Claude dan Codex terkini akan dipaparkan di sini.",
+ "loadMore": "Muat lagi",
+ "card": {
+ "deleted": "Dipadam",
+ "projectFolderMissing": "Folder projek tidak lagi wujud",
+ "taskCounts": {
+ "active": "{{count}} aktif",
+ "active_one": "{{count}} aktif",
+ "active_other": "{{count}} aktif",
+ "active_few": "{{count}} aktif",
+ "active_many": "{{count}} aktif",
+ "pending": "{{count}} tertangguh",
+ "pending_one": "{{count}} tertangguh",
+ "pending_other": "{{count}} tertangguh",
+ "pending_few": "{{count}} tertangguh",
+ "pending_many": "{{count}} tertangguh",
+ "done": "{{count}} selesai",
+ "done_one": "{{count}} selesai",
+ "done_other": "{{count}} selesai",
+ "done_few": "{{count}} selesai",
+ "done_many": "{{count}} selesai"
+ }
+ },
+ "title": "Projek Terkini",
+ "searchResults": "Hasil Carian",
+ "searchPlaceholder": "Cari projek..."
+ },
+ "actions": {
+ "selectTeam": "Pilih Pasukan",
+ "or": "atau",
+ "clearSearch": "Kosongkan carian"
+ },
+ "windowsAdmin": {
+ "title": "Mod Pentadbir Windows disyorkan",
+ "description": "Semakan runtime OpenCode boleh tamat masa apabila Agent Teams AI tidak dinaik taraf. Mulakan semula aplikasi dengan Run as administrator sebelum melancarkan pasukan OpenCode."
+ },
+ "webPreview": {
+ "title": "Buka aplikasi desktop untuk fungsi penuh",
+ "description": "Versi pelayar masih dalam pembangunan. Tindakan projek, integrasi, dan kemas kini status langsung mungkin terhad di sini. Gunakan aplikasi desktop untuk mengakses semua ciri dengan boleh dipercayai."
+ },
+ "updateBanner": {
+ "newVersionAvailable": "Versi baharu tersedia",
+ "restartNow": "Mulakan semula sekarang",
+ "viewDetails": "Lihat butiran"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ms/errors.json b/src/features/localization/renderer/locales/ms/errors.json
new file mode 100644
index 00000000..52b2aedf
--- /dev/null
+++ b/src/features/localization/renderer/locales/ms/errors.json
@@ -0,0 +1,3 @@
+{
+ "fallback": "Sesuatu telah berlaku."
+}
diff --git a/src/features/localization/renderer/locales/ms/extensions.json b/src/features/localization/renderer/locales/ms/extensions.json
new file mode 100644
index 00000000..35d84783
--- /dev/null
+++ b/src/features/localization/renderer/locales/ms/extensions.json
@@ -0,0 +1,688 @@
+{
+ "store": {
+ "actions": {
+ "addCustom": "Tambah Tersuai",
+ "openDashboard": "Buka Papan Pemuka",
+ "refreshCatalog": "Segar semula katalog"
+ },
+ "capabilities": {
+ "mcp": "MCP: {{status}}",
+ "plugins": "Plugin: {{status}}",
+ "skills": "Kemahiran: {{status}}"
+ },
+ "desktopOnly": "Tersedia dalam aplikasi desktop sahaja.",
+ "provider": {
+ "checkingStatus": "Menyemak status pembekal...",
+ "connected": "Disambung",
+ "loading": "Memuatkan...",
+ "needsSetup": "Perlu persediaan",
+ "readyToConfigure": "Sedia untuk dikonfigurasi",
+ "unsupported": "Tidak disokong"
+ },
+ "runtime": {
+ "checkingAvailabilityDescription": "Sambungan memerlukan runtime yang dikonfigurasi untuk menguruskan plugin, pelayan MCP, kemahiran, dan sambungan pembekal.",
+ "checkingAvailabilityTitle": "Menyemak ketersediaan runtime sambungan",
+ "failedToStartDescription": "Sambungan dilumpuhkan sehingga runtime lulus semakan kesihatan permulaannya. Buka Papan Pemuka untuk membaikinya atau memasangnya semula.",
+ "failedToStartTitle": "Runtime yang dikonfigurasi ditemui tetapi gagal dimulakan",
+ "multimodelCapabilitiesDescription": "Sokongan pembekal boleh berbeza mengikut bahagian. Plugin dipaparkan hanya di mana runtime secara eksplisit mengisytiharkan sokongan.",
+ "multimodelCapabilitiesTitle": "Keupayaan runtime multimodel",
+ "needsSignInDescription": "{{runtime}} ditemui{{version}}, tetapi pemasangan plugin dilumpuhkan sehingga anda log masuk daripada Papan Pemuka.",
+ "needsSignInTitle": "{{runtime}} perlu log masuk",
+ "notAvailableDescription": "Sambungan dilumpuhkan sehingga runtime dipasang. Buka Papan Pemuka untuk memasangnya dan cuba lagi.",
+ "notAvailableTitle": "Runtime yang dikonfigurasi tidak tersedia",
+ "readyDescription": "Plugin boleh dipasang daripada halaman ini{{versionSuffix}}.",
+ "readyTitle": "{{runtime}} sedia",
+ "requiredForMutations": "Runtime yang dikonfigurasi diperlukan untuk memasang atau menyahpasang sambungan. Pasang atau baiki ia daripada Papan Pemuka."
+ },
+ "sessionsRestartWarning": "Sesi yang sedang berjalan tidak akan menerima perubahan sambungan sehingga dimulakan semula.",
+ "tabs": {
+ "apiKeys": {
+ "description": "Kunci rahsia untuk perkhidmatan dalam talian. Tambahkannya di sini supaya plugin, pelayan, dan integrasi boleh bersambung dan berfungsi.",
+ "label": "Kunci API"
+ },
+ "mcpServers": {
+ "description": "Sambungan ke alat dan aplikasi luar. Ia membenarkan runtime membaca data atau melakukan tindakan di luar aplikasi ini.",
+ "label": "Pelayan MCP"
+ },
+ "plugins": {
+ "description": "Tambahan kecil untuk runtime. Dalam mod multimodel ia kini terpakai kepada sesi Anthropic apabila disokong. Sokongan pembekal yang lebih luas dalam pembangunan.",
+ "label": "Plugin"
+ },
+ "skills": {
+ "description": "Arahan siap sedia untuk tugas biasa. Ia membantu runtime mengendalikan tugasan berulang dengan lebih konsisten.",
+ "label": "Kemahiran"
+ }
+ },
+ "title": "Sambungan"
+ },
+ "pluginsPanel": {
+ "activeFilters": "{{count}} aktif",
+ "browseByFit": "Layari mengikut kesesuaian",
+ "capabilities": "Keupayaan",
+ "categories": "Kategori",
+ "clearAllFilters": "Kosongkan semua penapis",
+ "clearFilters": "Kosongkan penapis",
+ "counts": {
+ "capabilities": "{{count}} keupayaan",
+ "categories": "{{count}} kategori",
+ "plugins": "{{count}} plugin",
+ "capabilities_few": "{{count}} keupayaan",
+ "capabilities_many": "{{count}} keupayaan",
+ "capabilities_one": "{{count}} keupayaan",
+ "capabilities_other": "{{count}} keupayaan",
+ "categories_few": "{{count}} kategori",
+ "categories_many": "{{count}} kategori",
+ "categories_one": "{{count}} kategori",
+ "categories_other": "{{count}} kategori",
+ "plugins_few": "{{count}} plugin",
+ "plugins_many": "{{count}} plugin",
+ "plugins_one": "{{count}} plugin",
+ "plugins_other": "{{count}} plugin"
+ },
+ "empty": {
+ "description": "Semak semula kemudian untuk plugin baharu",
+ "filteredDescription": "Cuba laraskan kriteria carian atau penapis anda",
+ "filteredTitle": "Tiada plugin sepadan dengan penapis anda",
+ "title": "Tiada plugin tersedia"
+ },
+ "filterDescription": "Persempitkan katalog mengikut kategori, keupayaan, atau keadaan dipasang.",
+ "installedOnly": "Dipasang sahaja",
+ "providerSupportNotice": "Sokongan plugin kini dijamin untuk sesi Anthropic (Claude) sahaja. Kami sedang berusaha untuk menyokong plugin merentas semua agen.",
+ "resultsUpdateInstantly": "Hasil dikemas kini serta-merta apabila anda memperhalusi penapis.",
+ "searchPlaceholder": "Cari plugin...",
+ "selectedCount": "{{count}} dipilih",
+ "showing": "Memaparkan {{shown}} daripada {{total}} plugin",
+ "sort": {
+ "category": "Kategori",
+ "nameAsc": "Nama A-Z",
+ "nameDesc": "Nama Z-A",
+ "popular": "Popular"
+ },
+ "activeFilters_few": "{{count}} aktif",
+ "activeFilters_many": "{{count}} aktif",
+ "activeFilters_one": "{{count}} aktif",
+ "activeFilters_other": "{{count}} aktif",
+ "selectedCount_few": "{{count}} dipilih",
+ "selectedCount_many": "{{count}} dipilih",
+ "selectedCount_one": "{{count}} dipilih",
+ "selectedCount_other": "{{count}} dipilih"
+ },
+ "customMcp": {
+ "actions": {
+ "add": "Tambah",
+ "cancel": "Batal",
+ "install": "Pasang",
+ "installing": "Memasang..."
+ },
+ "description": "Tambah pelayan secara manual tanpa katalog.",
+ "errors": {
+ "installFailed": "Pemasangan gagal",
+ "invalidServerName": "Nama pelayan tidak sah. Gunakan aksara alfanumerik, sengkang, garis bawah, titik.",
+ "npmPackageRequired": "Nama pakej npm diperlukan",
+ "serverNameRequired": "Nama pelayan diperlukan",
+ "serverUrlRequired": "URL pelayan diperlukan"
+ },
+ "fields": {
+ "environmentVariables": "Pemboleh Ubah Persekitaran",
+ "headers": "Pengepala",
+ "npmPackage": "Pakej npm",
+ "scope": "Skop",
+ "serverName": "Nama Pelayan",
+ "serverUrl": "URL Pelayan",
+ "transport": "Pengangkutan",
+ "transportType": "Jenis Pengangkutan",
+ "versionOptional": "Versi (pilihan)"
+ },
+ "title": "Tambah Pelayan MCP Tersuai",
+ "transport": {
+ "httpSse": "HTTP / SSE",
+ "stdio": "Stdio (npm)"
+ },
+ "placeholders": {
+ "headerName": "Header-Name",
+ "envVarName": "ENV_VAR_NAME",
+ "serverName": "my-server",
+ "latest": "latest",
+ "value": "value",
+ "serverUrl": "https://api.example.com/mcp"
+ }
+ },
+ "mcpDetail": {
+ "auth": {
+ "remoteMayNeedHeaders": "Pelayan MCP jauh mungkin masih memerlukan pengepala tersuai atau kunci API walaupun pendaftaran tidak menerangkannya. Jika sambungan gagal selepas pemasangan, semak dokumentasi pembekal.",
+ "required": "Pelayan ini memerlukan pengesahan"
+ },
+ "diagnostics": {
+ "launchTarget": "Sasaran Pelancaran"
+ },
+ "form": {
+ "autoFilled": "Diisi auto",
+ "environmentVariables": "Pemboleh Ubah Persekitaran",
+ "headers": "Pengepala",
+ "scope": "Skop",
+ "serverName": "Nama Pelayan"
+ },
+ "install": {
+ "httpTransport": "HTTP: {{transport}}",
+ "manualSetupDescription": "Pelayan ini memerlukan persediaan manual. Semak repositori untuk arahan pemasangan.",
+ "manualSetupRequired": "Persediaan manual diperlukan",
+ "npmPackage": "npm: {{package}}",
+ "manage": "Urus Pemasangan",
+ "install": "Pasang Pelayan"
+ },
+ "links": {
+ "glama": "Glama",
+ "repository": "Repositori",
+ "website": "Laman web"
+ },
+ "metadata": {
+ "author": "Pengarang",
+ "githubStars": "Bintang GitHub",
+ "hosting": "Pengehosan",
+ "installType": "Jenis Pemasangan",
+ "license": "Lesen",
+ "published": "Diterbitkan",
+ "source": "Sumber",
+ "updated": "Dikemas kini",
+ "version": "Versi"
+ },
+ "scope": {
+ "local": "Tempatan",
+ "project": "Projek"
+ },
+ "tools": {
+ "title": "Alat ({{count}})",
+ "title_few": "Alat ({{count}})",
+ "title_many": "Alat ({{count}})",
+ "title_one": "Alat ({{count}})",
+ "title_other": "Alat ({{count}})"
+ },
+ "placeholders": {
+ "serverName": "my-server"
+ }
+ },
+ "skillEditor": {
+ "actions": {
+ "cancel": "Batal",
+ "createSkill": "Cipta Kemahiran",
+ "preparing": "Menyediakan...",
+ "reviewAndCreate": "Semak Dan Cipta",
+ "reviewAndSave": "Semak Dan Simpan",
+ "saveSkill": "Simpan Kemahiran"
+ },
+ "advanced": {
+ "customDescription": "Kemahiran ini menggunakan format markdown tersuai, jadi suntinglah secara langsung di sini.",
+ "customTitle": "2. Editor SKILL.md",
+ "description": "Kebanyakan orang boleh melangkau ini. Buka ia hanya jika anda mahukan kawalan langsung ke atas fail markdown mentah.",
+ "hide": "Sembunyi Editor Lanjutan",
+ "resetFromStructuredFields": "Tetap Semula Daripada Medan Berstruktur",
+ "show": "Tunjuk Editor Lanjutan",
+ "title": "4. Editor SKILL.md lanjutan"
+ },
+ "basics": {
+ "description": "Beri kemahiran ini nama yang jelas, pilih siapa yang boleh menggunakannya, dan tentukan di mana ia patut berada.",
+ "title": "1. Asas"
+ },
+ "description": {
+ "create": "Terangkan aliran kerja dalam bahasa biasa, semak fail yang akan dicipta, kemudian simpannya.",
+ "edit": "Kemas kini kemahiran ini, semak perubahan fail yang terhasil, kemudian simpannya."
+ },
+ "extraFiles": {
+ "addedFiles": "Fail ditambah:",
+ "assets": "Aset",
+ "assetsDescription": "Tambah tangkapan skrin atau media terbundel hanya jika ia membantu menjelaskan aliran kerja.",
+ "description": "Tambah dokumen sokongan, skrip, atau aset hanya jika kemahiran ini benar-benar memerlukannya.",
+ "lockedForEdits": "Akar dan folder dikunci untuk suntingan",
+ "optionalDescription": "Tambah fail permulaan yang akan disertakan dalam semakan dan ditulis bersama `SKILL.md`.",
+ "optionalTitle": "Fail pilihan",
+ "references": "Rujukan",
+ "referencesDescription": "Tambah dokumen sokongan, pautan, atau contoh yang boleh dilihat oleh runtime.",
+ "scripts": "Skrip",
+ "scriptsDescription": "Tambah arahan pembantu atau nota persediaan. Semak dengan teliti sebelum berkongsi kemahiran ini.",
+ "title": "3. Fail tambahan"
+ },
+ "fields": {
+ "compatibility": "Keserasian",
+ "description": "Penerangan",
+ "folderName": "Nama folder",
+ "folderNameHint": "Kami mencadangkan ini secara automatik daripada nama kemahiran supaya semakan berfungsi serta-merta.",
+ "invocation": "Bagaimana ia patut digunakan",
+ "license": "Lesen",
+ "name": "Nama kemahiran",
+ "notes": "Nota tambahan atau pagar pelindung",
+ "root": "Tempat menyimpannya",
+ "scope": "Siapa yang boleh menggunakannya",
+ "steps": "Langkah utama untuk diikuti",
+ "whenToUse": "Bila perlu menggunakan ini"
+ },
+ "instructions": {
+ "description": "Bahagian ini menjana fail kemahiran untuk anda, jadi anda tidak perlu menyunting markdown melainkan anda mahu.",
+ "locked": "Medan berstruktur dikunci kerana anda beralih ke penyuntingan `SKILL.md` manual di bawah.",
+ "title": "2. Arahan"
+ },
+ "invocation": {
+ "auto": "Boleh digunakan secara automatik",
+ "manualOnly": "Hanya apabila anda memintanya"
+ },
+ "placeholders": {
+ "description": "Apa yang dibantu oleh kemahiran ini",
+ "name": "Tulis nama kemahiran yang ringkas",
+ "notes": "Contoh: Tonjolkan ujian yang hilang, regresi, dan andaian berisiko.",
+ "steps": "1. Periksa fail yang berkaitan.\n2. Terangkan risiko utama dahulu.\n3. Cadangkan pembetulan yang paling selamat.",
+ "whenToUse": "Contoh: Gunakan ini apabila tugasan ialah permintaan semakan kod atau triaj pepijat.",
+ "license": "MIT",
+ "compatibility": "claude-code, cursor"
+ },
+ "review": {
+ "creating": "Mencipta kemahiran",
+ "hint": "Semak perubahan fail dahulu, kemudian sahkan simpan dalam langkah seterusnya.",
+ "saving": "Menyimpan kemahiran ini"
+ },
+ "root": {
+ "codexOnly": " - Codex sahaja",
+ "shared": " - Dikongsi"
+ },
+ "scope": {
+ "project": "Projek: {{project}}",
+ "projectUnavailable": "Projek tidak tersedia",
+ "user": "Pengguna"
+ },
+ "title": {
+ "create": "Cipta kemahiran",
+ "edit": "Sunting kemahiran"
+ }
+ },
+ "skillDetail": {
+ "actions": {
+ "cancel": "Batal",
+ "delete": "Padam",
+ "deleteSkill": "Padam Kemahiran",
+ "deleting": "Memadam...",
+ "editSkill": "Sunting Kemahiran",
+ "openFolder": "Buka Folder",
+ "openSkillFile": "Buka SKILL.md",
+ "retry": "Cuba lagi"
+ },
+ "badges": {
+ "assets": "Aset",
+ "autoUse": "Guna auto",
+ "hasScripts": "Ada skrip",
+ "manualUse": "Guna manual",
+ "references": "Rujukan",
+ "storedIn": "Disimpan dalam {{root}}"
+ },
+ "deleteDialog": {
+ "description": "Padam kemahiran ini dan alihkan ia ke Tong Sampah?",
+ "descriptionWithName": "Padam \"{{name}}\" dan alihkan ia ke Tong Sampah? Anda boleh memulihkannya kemudian daripada Tong Sampah jika perlu.",
+ "title": "Padam kemahiran?"
+ },
+ "descriptionFallback": "Periksa metadata kemahiran yang ditemui dan arahan mentah.",
+ "errors": {
+ "deleteFailed": "Gagal memadam kemahiran",
+ "loadFailed": "Tidak dapat memuatkan kemahiran ini."
+ },
+ "files": {
+ "advancedDetails": "Butiran fail lanjutan",
+ "assets": "Aset",
+ "references": "Rujukan",
+ "scripts": "Skrip",
+ "storedAt": "Disimpan di"
+ },
+ "includes": {
+ "assets": "aset",
+ "instructionsOnly": "Hanya arahan kemahiran",
+ "references": "rujukan",
+ "scripts": "skrip"
+ },
+ "invocation": {
+ "auto": "Berjalan secara automatik apabila ia sepadan dengan tugasan.",
+ "manualOnly": "Hanya berjalan apabila anda memintanya secara eksplisit."
+ },
+ "issues": {
+ "bundledScripts": "Kemahiran ini merangkumi skrip terbundel",
+ "reviewCarefully": "Semak kemahiran ini dengan teliti sebelum menggunakannya"
+ },
+ "loading": "Memuatkan butiran kemahiran...",
+ "scope": {
+ "personal": "Kemahiran peribadi anda",
+ "projectOnly": "Projek ini sahaja"
+ },
+ "summary": {
+ "howUsed": "Bagaimana ia digunakan",
+ "included": "Apa yang disertakan dengannya",
+ "whoCanUse": "Siapa yang boleh menggunakannya"
+ },
+ "titleFallback": "Butiran kemahiran"
+ },
+ "skillsPanel": {
+ "actions": {
+ "createSkill": "Cipta Kemahiran",
+ "import": "Import"
+ },
+ "badges": {
+ "assets": "Aset",
+ "hasScripts": "Ada skrip",
+ "needsAttention": "Perlu perhatian",
+ "references": "Rujukan",
+ "storedIn": "Disimpan dalam {{root}}"
+ },
+ "configuredRuntime": "runtime yang dikonfigurasi",
+ "counts": {
+ "codexOnly": "{{count}} Codex sahaja",
+ "personal": "{{count}} peribadi",
+ "project": "{{count}} projek",
+ "shared": "{{count}} dikongsi",
+ "total": "{{count}} jumlah",
+ "codexOnly_few": "{{count}} Codex sahaja",
+ "codexOnly_many": "{{count}} Codex sahaja",
+ "codexOnly_one": "{{count}} Codex sahaja",
+ "codexOnly_other": "{{count}} Codex sahaja",
+ "personal_few": "{{count}} peribadi",
+ "personal_many": "{{count}} peribadi",
+ "personal_one": "{{count}} peribadi",
+ "personal_other": "{{count}} peribadi",
+ "project_few": "{{count}} projek",
+ "project_many": "{{count}} projek",
+ "project_one": "{{count}} projek",
+ "project_other": "{{count}} projek",
+ "shared_few": "{{count}} dikongsi",
+ "shared_many": "{{count}} dikongsi",
+ "shared_one": "{{count}} dikongsi",
+ "shared_other": "{{count}} dikongsi",
+ "total_few": "{{count}} jumlah",
+ "total_many": "{{count}} jumlah",
+ "total_one": "{{count}} jumlah",
+ "total_other": "{{count}} jumlah"
+ },
+ "empty": {
+ "noMatches": "Tiada kemahiran sepadan dengan carian anda",
+ "noMatchesDescription": "Cuba istilah carian yang berbeza atau tukar penapis.",
+ "noSkills": "Belum ada kemahiran",
+ "noSkillsDescription": "Cipta kemahiran pertama anda untuk mengajar aliran kerja berulang, atau import satu yang sudah anda gunakan."
+ },
+ "filters": {
+ "all": "Semua kemahiran",
+ "codexOnly": "Codex sahaja",
+ "hasScripts": "Ada skrip",
+ "needsAttention": "Perlu perhatian",
+ "personal": "Peribadi",
+ "project": "Projek",
+ "shared": "Dikongsi"
+ },
+ "hero": {
+ "codexAvailable": "Gunakan `.codex` apabila kemahiran patut kekal khusus Codex.",
+ "codexUnavailable": "Kemahiran `.codex` sedia ada kekal boleh disunting di sini, tetapi kemahiran khusus Codex baharu memerlukan runtime Codex didayakan.",
+ "description": "Kemahiran ialah arahan boleh guna semula yang membantu runtime mengendalikan jenis tugasan yang sama dengan lebih konsisten.",
+ "guidance": "Gunakan kemahiran peribadi untuk tabiat yang anda mahu di mana-mana. Gunakan kemahiran projek untuk aliran kerja yang hanya masuk akal dalam satu pangkalan kod.",
+ "personalContext": "Anda kini melihat hanya kemahiran peribadi anda.",
+ "projectContext": "Anda melihat kemahiran untuk {{project}} serta kemahiran peribadi anda.",
+ "title": "Ajar kerja berulang"
+ },
+ "invocation": {
+ "auto": "Berjalan secara automatik apabila sesuai",
+ "manualOnly": "Hanya berjalan apabila anda memintanya secara eksplisit"
+ },
+ "loading": {
+ "loading": "Memuatkan kemahiran...",
+ "refreshing": "Menyegarkan kemahiran..."
+ },
+ "runtimeAudience": "Kemahiran yang dikongsi dalam `.claude`, `.cursor`, dan `.agents` tersedia kepada {{audience}}. Kemahiran yang disimpan dalam `.codex` kekal khusus Codex apabila sokongan Codex tersedia.",
+ "scope": {
+ "project": "Projek ini",
+ "user": "Peribadi"
+ },
+ "searchPlaceholder": "Cari mengikut nama kemahiran atau apa yang dibantunya...",
+ "sections": {
+ "personal": {
+ "description": "Tabiat dan arahan yang anda mahu tersedia di mana-mana.",
+ "title": "Kemahiran peribadi"
+ },
+ "project": {
+ "description": "Aliran kerja yang hanya masuk akal untuk pangkalan kod ini.",
+ "title": "Kemahiran projek"
+ }
+ },
+ "sort": {
+ "label": "Isih kemahiran",
+ "name": "Nama",
+ "recent": "Terkini"
+ },
+ "status": {
+ "hasScripts": "Merangkumi skrip, jadi semaknya dengan teliti",
+ "needsAttention": "Perlu perhatian sebelum anda bergantung padanya",
+ "ready": "Sedia untuk digunakan"
+ },
+ "success": {
+ "created": "Kemahiran berjaya dicipta.",
+ "imported": "Kemahiran berjaya diimport.",
+ "saved": "Kemahiran berjaya disimpan."
+ }
+ },
+ "pluginDetail": {
+ "unknown": "Tidak diketahui",
+ "metadata": {
+ "author": "Pengarang",
+ "category": "Kategori",
+ "source": "Sumber",
+ "version": "Versi",
+ "capabilities": "Keupayaan",
+ "installs": "Pemasangan"
+ },
+ "scope": {
+ "label": "Skop:",
+ "options": {
+ "user": "Pengguna (global)",
+ "project": "Projek (dikongsi)",
+ "local": "Tempatan (gitignored)"
+ }
+ },
+ "links": {
+ "homepage": "Laman utama",
+ "contact": "Hubungi"
+ },
+ "readme": {
+ "loading": "Memuatkan README...",
+ "empty": "Tiada README tersedia."
+ }
+ },
+ "skillImport": {
+ "title": "Import kemahiran",
+ "description": "Pilih folder kemahiran sedia ada, semak apa yang akan disalin, kemudian import ia ke dalam salah satu lokasi kemahiran anda yang disokong.",
+ "steps": {
+ "chooseFolder": {
+ "title": "1. Pilih folder kemahiran",
+ "description": "Ini patut menjadi folder yang sudah mengandungi fail `SKILL.md`, `Skill.md`, atau `skill.md`."
+ },
+ "location": {
+ "title": "2. Tentukan di mana ia patut berada",
+ "description": "Kemahiran peribadi berfungsi di mana-mana. Kemahiran projek hanya muncul untuk satu pangkalan kod."
+ }
+ },
+ "fields": {
+ "sourceFolder": "Folder sumber",
+ "destinationFolderName": "Nama folder destinasi",
+ "audience": "Siapa yang boleh menggunakannya",
+ "storage": "Tempat menyimpannya"
+ },
+ "placeholders": {
+ "defaultFolderName": "Lalai kepada nama folder sumber"
+ },
+ "actions": {
+ "browse": "Layari",
+ "cancel": "Batal",
+ "preparing": "Menyediakan...",
+ "reviewAndImport": "Semak Dan Import",
+ "importSkill": "Import Kemahiran",
+ "backToImport": "Kembali Ke Import"
+ },
+ "scope": {
+ "user": "Pengguna",
+ "project": "Projek: {{project}}",
+ "projectUnavailable": "Projek tidak tersedia"
+ },
+ "rootSuffix": {
+ "codexOnly": " - Codex sahaja",
+ "shared": " - Dikongsi"
+ },
+ "reviewHint": "Semak fail yang disalin dahulu, kemudian sahkan import dalam langkah seterusnya.",
+ "reviewLabel": "Mengimport kemahiran ini",
+ "errors": {
+ "missingSkillFile": "Folder ini belum kelihatan seperti kemahiran. Ia memerlukan fail SKILL.md, Skill.md, atau skill.md.",
+ "symbolicLinks": "Folder ini mengandungi pautan simbolik. Import fail sebenar dan bukannya pautan.",
+ "tooManyFiles": "Folder kemahiran ini terlalu besar untuk diimport sekaligus. Buang fail tambahan dan cuba lagi.",
+ "tooLarge": "Folder kemahiran ini terlalu besar untuk diimport dengan selamat. Pangkas aset besar dan cuba lagi.",
+ "invalidFolderName": "Pilih nama folder destinasi yang lebih ringkas menggunakan huruf, nombor, titik, sengkang, atau garis bawah.",
+ "mustBeDirectory": "Pilih folder untuk diimport, bukan satu fail tunggal.",
+ "reviewFailed": "Gagal menyemak perubahan import",
+ "importFailed": "Gagal mengimport kemahiran"
+ }
+ },
+ "mcpPanel": {
+ "sort": {
+ "nameAsc": "Nama A→Z",
+ "nameDesc": "Nama Z→A",
+ "toolsDesc": "Alat terbanyak"
+ },
+ "health": {
+ "title": "Status Kesihatan MCP",
+ "checkingViaRuntime": "Menyemak pelayan MCP yang dipasang melalui {{runtime}} ...",
+ "lastChecked": "Disemak terakhir {{time}}",
+ "description": "Jalankan diagnostik daripada halaman ini untuk mengesahkan ketersambungan MCP yang dipasang.",
+ "checking": "Menyemak...",
+ "checkStatus": "Semak Status"
+ },
+ "diagnostics": {
+ "title": "Diagnostik MCP Runtime",
+ "serversCount": "{{count}} pelayan",
+ "serversCount_one": "{{count}} pelayan",
+ "serversCount_other": "{{count}} pelayan",
+ "waiting": "Menunggu hasil diagnostik...",
+ "disableReasons": {
+ "checkingRuntimeStatus": "Menyemak status runtime...",
+ "checkingRuntimeAvailability": "Menyemak ketersediaan runtime...",
+ "runtimeFailedToStart": "Runtime yang dikonfigurasi ditemui tetapi gagal dimulakan. Buka Papan Pemuka untuk membaikinya atau memasangnya semula.",
+ "runtimeRequired": "Runtime yang dikonfigurasi diperlukan. Pasang atau baiki ia daripada Papan Pemuka."
+ },
+ "serversCount_few": "{{count}} pelayan",
+ "serversCount_many": "{{count}} pelayan"
+ },
+ "searchPlaceholder": "Cari pelayan MCP...",
+ "runtime": {
+ "notAvailable": "{{runtime}} tidak tersedia",
+ "notInstalled": "{{runtime}} belum dipasang",
+ "requiredDescription": "Semakan kesihatan MCP memerlukan {{runtime}}. Pergi ke Papan Pemuka untuk memasang atau membaikinya."
+ },
+ "empty": {
+ "searchTitle": "Tiada pelayan ditemui",
+ "title": "Tiada pelayan MCP tersedia",
+ "searchDescription": "Cuba istilah carian yang berbeza",
+ "description": "Semak semula kemudian untuk pelayan baharu"
+ },
+ "loadMore": "Muat lagi"
+ },
+ "apiKeys": {
+ "description": "Simpan kunci API dengan selamat untuk mengisi auto semasa memasang pelayan MCP.",
+ "storage": {
+ "osKeychain": "Kunci disulitkan melalui {{backend}} dan disimpan dengan kebenaran fail terhad (pemilik sahaja).",
+ "localEncryption": "Rantai kunci OS tidak tersedia - kunci disulitkan secara tempatan dengan AES-256. Untuk perlindungan yang lebih kukuh, pasang perkhidmatan rantai kunci (gnome-keyring, kwallet)."
+ },
+ "actions": {
+ "add": "Tambah Kunci API",
+ "addFirst": "Tambah kunci pertama anda",
+ "edit": "Sunting",
+ "copied": "Disalin!",
+ "copyEnvVarName": "Salin nama pemboleh ubah persekitaran",
+ "confirmDelete": "Klik sekali lagi untuk mengesahkan",
+ "delete": "Padam"
+ },
+ "empty": {
+ "title": "Tiada kunci API disimpan",
+ "description": "Tambah kunci untuk mengisi auto pemboleh ubah persekitaran semasa memasang pelayan MCP."
+ },
+ "form": {
+ "addTitle": "Tambah Kunci API",
+ "editTitle": "Sunting Kunci API",
+ "addDescription": "Simpan kunci API untuk mengisi auto dalam pemasangan pelayan MCP.",
+ "editDescription": "Kemas kini butiran kunci. Anda mesti memasukkan semula nilainya.",
+ "keychainUnavailable": "Rantai kunci OS tidak tersedia - kunci disulitkan dengan AES-256 secara tempatan. Pasang gnome-keyring untuk perlindungan peringkat OS.",
+ "name": "Nama",
+ "namePlaceholder": "cth. OpenAI Production",
+ "environmentVariableName": "Nama Pemboleh Ubah Persekitaran",
+ "envVarPlaceholder": "cth. OPENAI_API_KEY",
+ "value": "Nilai",
+ "reenterValue": "Masukkan semula nilai kunci",
+ "valuePlaceholder": "sk-...",
+ "scope": "Skop",
+ "userScopeLabel": "Pengguna (global)",
+ "projectScopeLabel": "Projek: {{project}}",
+ "projectUnavailable": "Projek tidak tersedia",
+ "boundTo": "Terikat kepada {{path}}",
+ "cancel": "Batal",
+ "saving": "Menyimpan...",
+ "update": "Kemas kini",
+ "save": "Simpan",
+ "errors": {
+ "invalidEnvVarFormat": "Gunakan huruf, digit, garis bawah. Mesti bermula dengan huruf atau garis bawah.",
+ "nameRequired": "Nama diperlukan",
+ "envVarRequired": "Nama pemboleh ubah persekitaran diperlukan",
+ "invalidEnvVar": "Nama pemboleh ubah persekitaran tidak sah",
+ "valueRequired": "Nilai kunci diperlukan",
+ "projectScopeRequiresProject": "Kunci API berskop projek memerlukan projek aktif",
+ "saveFailed": "Gagal menyimpan"
+ }
+ }
+ },
+ "skillReview": {
+ "title": "Semak perubahan kemahiran",
+ "description": "{{reviewLabel}} mempratonton perubahan sistem fail dahulu. Tiada apa-apa ditulis sehingga anda mengesahkan di bawah.",
+ "noPreview": "Tiada pratonton tersedia.",
+ "confirmPromptPrefix": "Semak perbezaan di bawah, kemudian gunakan",
+ "confirmPromptSuffix": "untuk menerapkan perubahan ini.",
+ "noChanges": "Belum ada perubahan fail dikesan.",
+ "binaryBadge": "binari",
+ "binaryPreviewHidden": "Pratonton fail binari tidak dipaparkan. Fail akan disalin seadanya.",
+ "summary": {
+ "fileChanges": "{{count}} perubahan fail",
+ "fileChanges_one": "{{count}} perubahan fail",
+ "fileChanges_other": "{{count}} perubahan fail",
+ "new": "{{count}} baharu",
+ "updated": "{{count}} dikemas kini",
+ "removed": "{{count}} dibuang",
+ "binary": "{{count}} binari",
+ "fileChanges_few": "{{count}} perubahan fail",
+ "fileChanges_many": "{{count}} perubahan fail"
+ }
+ },
+ "mcpCard": {
+ "toolsCount": "{{count}} alat",
+ "toolsCount_one": "{{count}} alat",
+ "toolsCount_other": "{{count}} alat",
+ "envCount": "{{count}} env",
+ "envCount_one": "{{count}} env",
+ "envCount_other": "{{count}} env",
+ "auth": "Pengesahan",
+ "byAuthor": "oleh {{author}}",
+ "hosting": {
+ "remote": "Jauh",
+ "local": "Tempatan",
+ "both": "Kedua-dua"
+ },
+ "toolsCount_few": "{{count}} alat",
+ "toolsCount_many": "{{count}} alat",
+ "envCount_few": "{{count}} env",
+ "envCount_many": "{{count}} env",
+ "repository": "Repositori",
+ "website": "Laman web"
+ },
+ "installButton": {
+ "installing": "Memasang...",
+ "removing": "Membuang...",
+ "done": "Selesai",
+ "retry": "Cuba lagi",
+ "uninstall": "Nyahpasang",
+ "install": "Pasang"
+ },
+ "pluginCard": {
+ "official": "Rasmi"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ms/report.json b/src/features/localization/renderer/locales/ms/report.json
new file mode 100644
index 00000000..13fb6daf
--- /dev/null
+++ b/src/features/localization/renderer/locales/ms/report.json
@@ -0,0 +1,217 @@
+{
+ "cost": {
+ "breakdownTitle": "Pecahan Kos (setiap 1J token)",
+ "cacheRead": "Bacaan Cache",
+ "cacheWrite": "Tulisan Cache",
+ "cost": "Kos",
+ "input": "Input",
+ "noCommits": "tiada commit",
+ "noLinesChanged": "tiada baris ditukar",
+ "output": "Output",
+ "parent": "Induk: {{cost}}",
+ "parentCost": "Kos Induk",
+ "perCommit": "Setiap Commit",
+ "perCommitFormula": "jumlah kos ÷ {{count}} commit",
+ "perCommitFormula_few": "jumlah kos ÷ {{count}} commit",
+ "perCommitFormula_many": "jumlah kos ÷ {{count}} commit",
+ "perCommitFormula_one": "jumlah kos ÷ {{count}} commit",
+ "perCommitFormula_other": "jumlah kos ÷ {{count}} commit",
+ "perLineChanged": "Setiap Baris Ditukar",
+ "perLineFormula": "jumlah kos ÷ {{count}} baris",
+ "perLineFormula_few": "jumlah kos ÷ {{count}} baris",
+ "perLineFormula_many": "jumlah kos ÷ {{count}} baris",
+ "perLineFormula_one": "jumlah kos ÷ {{count}} baris",
+ "perLineFormula_other": "jumlah kos ÷ {{count}} baris",
+ "subagent": "Subagen: {{cost}}",
+ "subagentCost": "Kos Subagen",
+ "title": "Analisis Kos",
+ "total": "Jumlah"
+ },
+ "insights": {
+ "agent": "agen",
+ "agent_few": "agen",
+ "agent_many": "agen",
+ "agent_one": "agen",
+ "agent_other": "agen",
+ "agentTree": "Pohon Agen ({{count}} {{unit}})",
+ "background": "(latar belakang)",
+ "bashCommands": "Arahan Bash",
+ "outOfScopeFindings": "Penemuan Luar Skop ({{count}})",
+ "questionsAsked": "Soalan Ditanya ({{count}})",
+ "repeated": "Berulang",
+ "skillsInvoked": "Kemahiran Digunakan ({{count}})",
+ "taskDispatches": "Penghantaran Tugasan ({{count}})",
+ "tasksCreated": "Tugasan Dicipta ({{count}})",
+ "teamMode": "Mod Pasukan",
+ "teams": "Pasukan: {{teams}}",
+ "title": "Wawasan Sesi",
+ "total": "Jumlah",
+ "unique": "Unik",
+ "skillsInvoked_few": "Kemahiran Digunakan ({{count}})",
+ "skillsInvoked_many": "Kemahiran Digunakan ({{count}})",
+ "skillsInvoked_one": "Kemahiran Digunakan ({{count}})",
+ "skillsInvoked_other": "Kemahiran Digunakan ({{count}})",
+ "taskDispatches_few": "Penghantaran Tugasan ({{count}})",
+ "taskDispatches_many": "Penghantaran Tugasan ({{count}})",
+ "taskDispatches_one": "Penghantaran Tugasan ({{count}})",
+ "taskDispatches_other": "Penghantaran Tugasan ({{count}})",
+ "tasksCreated_few": "Tugasan Dicipta ({{count}})",
+ "tasksCreated_many": "Tugasan Dicipta ({{count}})",
+ "tasksCreated_one": "Tugasan Dicipta ({{count}})",
+ "tasksCreated_other": "Tugasan Dicipta ({{count}})",
+ "questionsAsked_few": "Soalan Ditanya ({{count}})",
+ "questionsAsked_many": "Soalan Ditanya ({{count}})",
+ "questionsAsked_one": "Soalan Ditanya ({{count}})",
+ "questionsAsked_other": "Soalan Ditanya ({{count}})",
+ "agentTree_few": "Pohon Agen ({{count}} {{unit}})",
+ "agentTree_many": "Pohon Agen ({{count}} {{unit}})",
+ "agentTree_one": "Pohon Agen ({{count}} {{unit}})",
+ "agentTree_other": "Pohon Agen ({{count}} {{unit}})",
+ "outOfScopeFindings_few": "Penemuan Luar Skop ({{count}})",
+ "outOfScopeFindings_many": "Penemuan Luar Skop ({{count}})",
+ "outOfScopeFindings_one": "Penemuan Luar Skop ({{count}})",
+ "outOfScopeFindings_other": "Penemuan Luar Skop ({{count}})",
+ "keyTakeaways": "Intipati Utama"
+ },
+ "quality": {
+ "chars": "aksara",
+ "corrections": "Pembetulan",
+ "failed": "gagal",
+ "fileReadRedundancy": "Lebihan Bacaan Fail",
+ "firstMessage": "Mesej Pertama",
+ "firstRun": "Larian Pertama",
+ "frictionRate": "Kadar Geseran",
+ "lastRun": "Larian Terakhir",
+ "messagesBeforeWork": "Mesej Sebelum Kerja",
+ "passed": "lulus",
+ "promptQuality": "Kualiti Prompt",
+ "readsPerUniqueFile": "Bacaan/Fail Unik",
+ "snapshot": "syot kilat",
+ "snapshot_few": "syot kilat",
+ "snapshot_many": "syot kilat",
+ "snapshot_one": "syot kilat",
+ "snapshot_other": "syot kilat",
+ "startupOverhead": "Overhed Permulaan",
+ "testProgression": "Perkembangan Ujian",
+ "title": "Isyarat Kualiti",
+ "tokensBeforeWork": "Token Sebelum Kerja",
+ "totalReads": "Jumlah Bacaan",
+ "uniqueFiles": "Fail Unik",
+ "userMessages": "Mesej Pengguna",
+ "percentOfTotal": "% daripada Jumlah"
+ },
+ "tokens": {
+ "apiCalls": "Panggilan API",
+ "cacheCreate": "Cipta Cache",
+ "cacheEfficiency": "Kecekapan Cache",
+ "cacheRead": "Bacaan Cache",
+ "cacheReadPct": "% Bacaan Cache",
+ "coldStart": "Mula Sejuk",
+ "cost": "Kos",
+ "input": "Input",
+ "model": "Model",
+ "no": "Tidak",
+ "output": "Output",
+ "readWriteRatio": "Nisbah B/T",
+ "title": "Penggunaan Token",
+ "total": "Jumlah",
+ "yes": "Ya"
+ },
+ "subagents": {
+ "title": "Subagen",
+ "metrics": {
+ "count": "Bilangan",
+ "totalTokens": "Jumlah Token",
+ "totalDuration": "Jumlah Tempoh",
+ "totalCost": "Jumlah Kos"
+ },
+ "table": {
+ "description": "Penerangan",
+ "type": "Jenis",
+ "tokens": "Token",
+ "duration": "Tempoh",
+ "cost": "Kos"
+ }
+ },
+ "overview": {
+ "title": "Gambaran Keseluruhan",
+ "yes": "Ya",
+ "no": "Tidak",
+ "metrics": {
+ "duration": "Tempoh",
+ "messages": "Mesej",
+ "contextUsage": "Penggunaan Konteks",
+ "compactions": "Pemampatan",
+ "branch": "Cawangan",
+ "subagents": "Subagen",
+ "project": "Projek",
+ "sessionId": "ID Sesi"
+ }
+ },
+ "timeline": {
+ "title": "Garis Masa & Aktiviti",
+ "idleAnalysis": "Analisis Melahu",
+ "metrics": {
+ "idleGaps": "Jurang Melahu",
+ "totalIdle": "Jumlah Melahu",
+ "activeTime": "Masa Aktif",
+ "idlePercent": "% Melahu"
+ },
+ "modelSwitches": "Pertukaran Model ({{count}})",
+ "modelSwitches_one": "Pertukaran Model ({{count}})",
+ "modelSwitches_other": "Pertukaran Model ({{count}})",
+ "messageNumber": "mesej #{{number}}",
+ "keyEvents": "Peristiwa Utama",
+ "modelSwitches_few": "Pertukaran Model ({{count}})",
+ "modelSwitches_many": "Pertukaran Model ({{count}})"
+ },
+ "tools": {
+ "title": "Penggunaan Alat",
+ "summary": "{{formattedCount}} jumlah panggilan merentas {{toolCount}} alat",
+ "columns": {
+ "tool": "Alat",
+ "calls": "Panggilan",
+ "errors": "Ralat",
+ "successPercent": "% Berjaya",
+ "health": "Kesihatan"
+ }
+ },
+ "git": {
+ "title": "Aktiviti Git",
+ "commits": "Commit",
+ "pushes": "Push",
+ "linesAdded": "Baris Ditambah",
+ "linesRemoved": "Baris Dibuang",
+ "branchesCreated": "Cawangan Dicipta"
+ },
+ "friction": {
+ "title": "Isyarat Geseran",
+ "rate": "Kadar Geseran: {{rate}}%",
+ "correctionsCount": "{{count}} pembetulan",
+ "correctionsCount_one": "{{count}} pembetulan",
+ "corrections": "Pembetulan",
+ "thrashingSignals": "Isyarat Pertukaran Berlebihan",
+ "repeatedBashCommands": "Arahan Bash Berulang",
+ "reworkedFiles": "Fail Dikerjakan Semula (3+ suntingan)",
+ "correctionsCount_few": "{{count}} pembetulan",
+ "correctionsCount_many": "{{count}} pembetulan",
+ "correctionsCount_other": "{{count}} pembetulan"
+ },
+ "errors": {
+ "title": "Ralat",
+ "permissionDenied": "Kebenaran Ditolak",
+ "messageIndex": "mesej #{{index}}",
+ "input": "Input",
+ "error": "Ralat",
+ "count": "{{count}} ralat",
+ "count_one": "{{count}} ralat",
+ "permissionDenialCount": "{{count}} penolakan kebenaran",
+ "permissionDenialCount_one": "{{count}} penolakan kebenaran",
+ "count_few": "{{count}} ralat",
+ "count_many": "{{count}} ralat",
+ "count_other": "{{count}} ralat",
+ "permissionDenialCount_few": "{{count}} penolakan kebenaran",
+ "permissionDenialCount_many": "{{count}} penolakan kebenaran",
+ "permissionDenialCount_other": "{{count}} penolakan kebenaran"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ms/settings.json b/src/features/localization/renderer/locales/ms/settings.json
new file mode 100644
index 00000000..073a9bd4
--- /dev/null
+++ b/src/features/localization/renderer/locales/ms/settings.json
@@ -0,0 +1,994 @@
+{
+ "tabs": {
+ "advanced": {
+ "description": "Pilihan pengguna mahir: eksport/import konfigurasi, tetap semula lalai, dan penyuntingan konfigurasi mentah.",
+ "label": "Lanjutan"
+ },
+ "general": {
+ "description": "Keutamaan teras aplikasi seperti tema, bahasa, ketumpatan paparan, dan tingkah laku permulaan.",
+ "label": "Umum"
+ },
+ "infoAriaLabel": "Apakah {{label}}?",
+ "notifications": {
+ "description": "Kawal bila dan bagaimana anda diberitahu tentang aktiviti agen, penyelesaian tugasan, dan ralat.",
+ "label": "Pemberitahuan"
+ }
+ },
+ "view": {
+ "description": "Urus keutamaan aplikasi anda",
+ "loading": "Memuatkan tetapan...",
+ "title": "Tetapan"
+ },
+ "runtimeProvider": {
+ "actions": {
+ "cancel": "Batal",
+ "test": "Uji"
+ },
+ "defaults": {
+ "allProjects": "Semua projek",
+ "allProjectsHint": "Ujian menggunakan {{project}}. Lalai terpakai melainkan projek mempunyai penggantian.",
+ "loadingContexts": "Memuatkan konteks...",
+ "projectHint": "Menyimpan hanya menggantikan {{project}}.",
+ "projectOverrideContext": "Konteks penggantian projek",
+ "scopeDescriptionAllProjects": "Lalai untuk setiap projek yang tidak mempunyai penggantian OpenCode sendiri.",
+ "scopeDescriptionProject": "Gantikan hanya projek yang dipilih. Pasukan yang sedang berjalan tidak berubah.",
+ "selectProjectContext": "Pilih konteks projek",
+ "selectProjectHint": "Pilih projek sebelum menguji model tempatan atau menyimpan lalai.",
+ "selectValidationContext": "Pilih konteks pengesahan",
+ "setAllProjectsDefault": "Tetapkan lalai semua projek",
+ "setProjectDefault": "Tetapkan lalai projek",
+ "thisProject": "Projek ini",
+ "title": "Lalai OpenCode",
+ "validationContext": "Konteks pengesahan"
+ },
+ "diagnostics": {
+ "copied": "Diagnostik disalin",
+ "copiedShort": "Disalin",
+ "copy": "Salin diagnostik",
+ "hints": "Petua",
+ "likelyCause": "Kemungkinan punca:",
+ "windowsSymlinkAdminHint": "Windows: jalankan Agent Teams AI sebagai Pentadbir"
+ },
+ "models": {
+ "alreadyDefault": "Ini sudah menjadi lalai OpenCode yang dipilih.",
+ "empty": "Tiada model ditemui.",
+ "emptyFree": "Tiada model percuma ditemui.",
+ "emptyRecommended": "Tiada model disyorkan ditemui.",
+ "emptyRecommendedFree": "Tiada model percuma yang disyorkan ditemui.",
+ "freeOnly": "Percuma sahaja",
+ "launchableDescription": "Laluan yang diketahui daripada konfigurasi OpenCode, model terbina dalam percuma, dan lalai semasa. Laluan tempatan memerlukan ujian yang berjaya sebelum ia sedia untuk pelancaran pasukan.",
+ "launchableTitle": "Laluan model OpenCode",
+ "loadingRoutes": "Memuatkan laluan model OpenCode...",
+ "noRoutesMatch": "Tiada laluan model OpenCode yang sepadan dengan \"{{query}}\".",
+ "noneReported": "Belum ada laluan model OpenCode dilaporkan. Konfigurasikan laluan tempatan dalam OpenCode atau gunakan tab Pembekal untuk memeriksa pembekal katalog.",
+ "recommendedOnly": "Disyorkan sahaja",
+ "searchPlaceholder": "Cari model",
+ "selectProjectBeforeTesting": "Pilih konteks projek sebelum menguji model.",
+ "selectProjectBeforeTestingDefaults": "Pilih konteks projek sebelum menguji atau menyimpan lalai OpenCode.",
+ "testInProgress": "Ujian model sedang berjalan.",
+ "useInTeamPicker": "Simpan untuk pemilih pasukan",
+ "validationContextRequired": "Pilih konteks pengesahan di atas untuk membolehkan Uji dan Tetapkan lalai. Menyimpan untuk pemilih pasukan hanya menyimpan laluan untuk pasukan baharu.",
+ "actionsUnavailable": "Tindakan tidak tersedia buat sementara waktu.",
+ "defaultSaveInProgress": "Lalai OpenCode sedang disimpan.",
+ "routeUnavailableAuth": "Pembekal ini memerlukan pengesahan sebelum model ini boleh digunakan.",
+ "routeUnavailableFailed": "Laluan model ini gagal ujian pelaksanaan terakhirnya.",
+ "routeUnavailableGeneric": "Laluan model ini tidak boleh digunakan buat masa ini.",
+ "routeUnavailableUnknown": "Model ini ialah lalai OpenCode semasa, tetapi ia belum tersedia dalam katalog langsung."
+ },
+ "providers": {
+ "catalog": "Katalog pembekal OpenCode",
+ "countFallback": "Pembekal OpenCode",
+ "description": "{{count}}. Pembekal yang disambung dan disyorkan dipaparkan dahulu.",
+ "loadMore": "Muat lebih banyak pembekal",
+ "loading": "Memuatkan pembekal OpenCode",
+ "noMatches": "Tiada pembekal yang sepadan dengan carian itu.",
+ "noneReported": "Tiada pembekal OpenCode dilaporkan oleh runtime terurus.",
+ "recommended": "Disyorkan",
+ "refreshCatalog": "Segar semula katalog",
+ "searchPlaceholder": "Cari pembekal",
+ "description_few": "{{count}}. Pembekal yang disambung dan disyorkan dipaparkan dahulu.",
+ "description_many": "{{count}}. Pembekal yang disambung dan disyorkan dipaparkan dahulu.",
+ "description_one": "{{count}}. Pembekal yang disambung dan disyorkan dipaparkan dahulu.",
+ "description_other": "{{count}}. Pembekal yang disambung dan disyorkan dipaparkan dahulu."
+ },
+ "setup": {
+ "loading": "Memuatkan persediaan pembekal..."
+ },
+ "summary": {
+ "defaultModel": "Lalai OpenCode: {{model}}",
+ "loading": "Memuatkan runtime OpenCode terurus, pembekal yang disambung, dan lalai model...",
+ "source": "Sumber: {{source}}",
+ "title": "Runtime OpenCode"
+ },
+ "tabs": {
+ "models": "Model",
+ "providers": "Pembekal"
+ },
+ "modelRoutes": {
+ "searchPlaceholder": "Cari laluan model"
+ },
+ "badges": {
+ "usedInTeamPicker": "Disimpan untuk pemilih pasukan",
+ "free": "percuma",
+ "local": "tempatan",
+ "configured": "dikonfigurasi",
+ "knownRoute": "laluan diketahui",
+ "connected": "disambung",
+ "verified": "disahkan",
+ "needsTest": "perlu diuji",
+ "failed": "gagal",
+ "unknown": "tidak diketahui",
+ "default": "lalai"
+ },
+ "compatibleEndpoint": {
+ "baseUrlPlaceholder": "http://localhost:1234"
+ }
+ },
+ "general": {
+ "agentLanguage": {
+ "description": "Bahasa untuk komunikasi agen",
+ "descriptionWithDetected": "Bahasa untuk komunikasi agen (dikesan: {{detected}})",
+ "emptyMessage": "Tiada bahasa ditemui.",
+ "label": "Bahasa",
+ "searchPlaceholder": "Cari bahasa...",
+ "selectPlaceholder": "Pilih bahasa...",
+ "title": "Bahasa Agen"
+ },
+ "appLanguage": {
+ "description": "Bahasa untuk antara muka aplikasi.",
+ "label": "Bahasa",
+ "title": "Bahasa Aplikasi"
+ },
+ "appearance": {
+ "autoExpandAIGroups": {
+ "description": "Kembangkan secara automatik setiap giliran respons apabila membuka transkrip atau menerima mesej baharu",
+ "label": "Kembangkan respons AI secara lalai"
+ },
+ "nativeTitleBar": {
+ "description": "Gunakan bingkai tetingkap sistem lalai dan bukannya bar tajuk tersuai",
+ "label": "Gunakan bar tajuk natif",
+ "restartConfirm": {
+ "confirmLabel": "Mulakan semula",
+ "message": "Aplikasi perlu dimulakan semula untuk menerapkan perubahan bar tajuk. Mulakan semula sekarang?",
+ "title": "Mula semula diperlukan"
+ }
+ },
+ "theme": {
+ "description": "Pilih tema warna pilihan anda",
+ "label": "Tema",
+ "options": {
+ "dark": "Gelap",
+ "light": "Cerah",
+ "system": "Sistem"
+ }
+ },
+ "title": "Penampilan"
+ },
+ "browserAccess": {
+ "serverMode": {
+ "description": "Mulakan pelayan HTTP untuk mengakses UI daripada pelayar atau membenamkan dalam iframe",
+ "label": "Dayakan mod pelayan"
+ },
+ "title": "Akses Pelayar"
+ },
+ "localClaudeRoot": {
+ "actions": {
+ "selectFolder": "Pilih Folder",
+ "selectFolderManually": "Pilih Folder Secara Manual",
+ "useAutoDetect": "Gunakan Kesan Auto",
+ "useFolder": "Gunakan Folder",
+ "usePath": "Gunakan Laluan",
+ "useThisPath": "Gunakan Laluan Ini",
+ "useWsl": "Menggunakan Linux/WSL?"
+ },
+ "confirm": {
+ "noProjectsDir": {
+ "message": "Folder ini tidak mengandungi direktori \"projects\". Teruskan juga?",
+ "title": "Tiada direktori projek ditemui"
+ },
+ "notClaudeDir": {
+ "message": "Folder ini dinamakan \"{{folderName}}\", bukan \".claude\". Teruskan juga?",
+ "title": "Folder yang dipilih bukan .claude"
+ },
+ "noWslPaths": {
+ "message": "Tidak dapat mencari distro WSL dengan data Claude secara automatik. Pilih folder secara manual?",
+ "title": "Tiada laluan WSL Claude ditemui"
+ },
+ "wslNoProjectsDir": {
+ "message": "\"{{path}}\" tidak mengandungi direktori \"projects\". Teruskan juga?",
+ "title": "Laluan WSL kehilangan direktori projek"
+ }
+ },
+ "current": {
+ "autoDetected": "Dikesan auto: {{path}}",
+ "autoDetectedPath": "Menggunakan laluan yang dikesan auto",
+ "customPath": "Menggunakan laluan tersuai",
+ "label": "Akar Tempatan Semasa"
+ },
+ "description": "Pilih folder tempatan mana yang dianggap sebagai akar data Claude anda",
+ "errors": {
+ "detectWslFailed": "Gagal mengesan laluan akar WSL Claude",
+ "loadFailed": "Gagal memuatkan tetapan akar Claude tempatan",
+ "updateFailed": "Gagal mengemas kini akar Claude"
+ },
+ "title": "Akar Claude Tempatan",
+ "wslModal": {
+ "closeAriaLabel": "Tutup modal laluan WSL",
+ "description": "Pengedaran WSL yang dikesan dan calon akar Claude",
+ "noProjectsDir": "Tiada direktori projek dikesan",
+ "title": "Pilih Akar WSL Claude"
+ }
+ },
+ "privacy": {
+ "telemetry": {
+ "description": "Bantu meningkatkan aplikasi dengan menghantar data ranap dan prestasi tanpa nama",
+ "label": "Hantar laporan ranap"
+ },
+ "title": "Privasi"
+ },
+ "server": {
+ "runningOn": "Berjalan pada",
+ "standaloneModeDescription": "Berjalan dalam mod kendiri. Pelayan HTTP sentiasa aktif. Pemberitahuan sistem tidak tersedia - pencetus pemberitahuan dilog dalam aplikasi sahaja.",
+ "title": "Pelayan"
+ },
+ "startup": {
+ "launchAtLogin": {
+ "description": "Mulakan aplikasi secara automatik apabila anda log masuk",
+ "label": "Lancarkan ketika log masuk"
+ },
+ "showDockIcon": {
+ "description": "Paparkan ikon aplikasi dalam dock (macOS)",
+ "label": "Tunjuk ikon dock"
+ },
+ "title": "Permulaan"
+ }
+ },
+ "notifications": {
+ "dev": {
+ "descriptionPrefix": "Pemberitahuan mungkin tidak berfungsi dalam mod pembangunan. macOS mengenal pasti aplikasi sebagai \"Electron\" (ID himpunan",
+ "descriptionSuffix": ") dan bukannya nama aplikasi pengeluaran. Semak Tetapan Sistem > Pemberitahuan > Electron untuk mengesahkan kebenaran.",
+ "title": "Mod Pembangun"
+ },
+ "ignoredRepositories": {
+ "description": "Pemberitahuan daripada repositori ini akan diabaikan",
+ "empty": "Tiada repositori diabaikan",
+ "selectPlaceholder": "Pilih repositori untuk diabaikan...",
+ "title": "Repositori Diabaikan"
+ },
+ "settings": {
+ "enabled": {
+ "description": "Tunjuk pemberitahuan sistem untuk ralat dan peristiwa",
+ "label": "Dayakan Pemberitahuan Sistem"
+ },
+ "sound": {
+ "description": "Mainkan bunyi apabila pemberitahuan muncul",
+ "label": "Mainkan bunyi"
+ },
+ "subagentErrors": {
+ "description": "Kesan dan beritahu tentang ralat dalam sesi subagen",
+ "label": "Sertakan ralat subagen"
+ },
+ "title": "Tetapan Pemberitahuan"
+ },
+ "snooze": {
+ "clear": "Kosongkan Tunda",
+ "description": "Jeda pemberitahuan buat sementara waktu",
+ "descriptionWithTime": "Ditunda sehingga {{time}}",
+ "label": "Tunda pemberitahuan",
+ "options": {
+ "15": "15 minit",
+ "30": "30 minit",
+ "60": "1 jam",
+ "120": "2 jam",
+ "240": "4 jam",
+ "-1": "Sehingga esok"
+ },
+ "selectDuration": "Pilih tempoh..."
+ },
+ "taskCompletion": {
+ "description": "Dapatkan pemberitahuan OS natif apabila Claude menyelesaikan tugasan - bunyi, sepanduk, dan lencana Dock/bar tugas. Berfungsi pada macOS, Linux, dan Windows.",
+ "installPlugin": "Pasang plugin claude-notifications-go",
+ "title": "Pemberitahuan Penyelesaian Tugasan"
+ },
+ "team": {
+ "allTasksCompleted": {
+ "description": "Beritahu apabila setiap tugasan dalam pasukan mencapai status selesai",
+ "label": "Semua tugasan selesai"
+ },
+ "autoResumeOnRateLimit": {
+ "description": "Apabila Claude melaporkan masa tetapan semula, jadualkan dorongan susulan untuk ketua pasukan selepas had ditetapkan semula",
+ "label": "Sambung semula auto selepas had kadar"
+ },
+ "clarifications": {
+ "description": "Tunjuk pemberitahuan OS natif apabila tugasan memerlukan input anda",
+ "label": "Pemberitahuan penjelasan tugasan"
+ },
+ "crossTeamMessage": {
+ "description": "Beritahu apabila mesej tiba daripada pasukan lain",
+ "label": "Pemberitahuan mesej merentas pasukan"
+ },
+ "leadInbox": {
+ "description": "Beritahu apabila rakan pasukan menghantar mesej kepada ketua pasukan",
+ "label": "Pemberitahuan peti masuk ketua"
+ },
+ "statusChange": {
+ "description": "Tunjuk pemberitahuan OS natif apabila status tugasan berubah",
+ "label": "Pemberitahuan perubahan status tugasan",
+ "onlySolo": {
+ "description": "Beritahu hanya apabila pasukan tiada rakan pasukan",
+ "label": "Hanya dalam mod Solo"
+ },
+ "statuses": {
+ "description": "Status sasaran mana yang mencetuskan pemberitahuan",
+ "label": "Beritahu pada status ini",
+ "options": {
+ "approved": "Diluluskan",
+ "completed": "Selesai",
+ "deleted": "Dipadam",
+ "in_progress": "Bermula",
+ "needsFix": "Perlu Pembetulan",
+ "pending": "Tertangguh",
+ "review": "Semakan"
+ }
+ }
+ },
+ "taskComments": {
+ "description": "Tunjuk pemberitahuan OS natif apabila agen mengulas pada tugasan",
+ "label": "Pemberitahuan komen tugasan"
+ },
+ "taskCreated": {
+ "description": "Tunjuk pemberitahuan OS natif apabila tugasan baharu dicipta",
+ "label": "Pemberitahuan tugasan dicipta"
+ },
+ "teamLaunched": {
+ "description": "Beritahu apabila pasukan selesai dilancarkan dan sedia",
+ "label": "Pemberitahuan pasukan dilancarkan"
+ },
+ "title": "Pemberitahuan Pasukan",
+ "toolApproval": {
+ "description": "Beritahu apabila alat memerlukan kelulusan anda (Benarkan/Tolak) semasa aplikasi tidak difokus",
+ "label": "Pemberitahuan kelulusan alat"
+ },
+ "userInbox": {
+ "description": "Beritahu apabila rakan pasukan menghantar mesej kepada anda",
+ "label": "Pemberitahuan peti masuk pengguna"
+ }
+ },
+ "test": {
+ "action": "Hantar Ujian",
+ "description": "Hantar pemberitahuan ujian untuk mengesahkan penghantaran",
+ "failedToSend": "Gagal menghantar pemberitahuan ujian",
+ "label": "Pemberitahuan ujian",
+ "sending": "Menghantar...",
+ "sent": "Dihantar!",
+ "unknownError": "Ralat tidak diketahui"
+ }
+ },
+ "advanced": {
+ "about": {
+ "appIconAlt": "Ikon aplikasi",
+ "description": "Himpunkan pasukan agen AI yang bekerja secara autonomi selari, berkomunikasi merentas pasukan, dan menguruskan tugasan pada papan kanban - dengan semakan kod terbina dalam, pemantauan proses langsung, dan ketelusan alat penuh.",
+ "standalone": "Kendiri",
+ "title": "Perihal",
+ "version": "Versi {{version}}"
+ },
+ "configuration": {
+ "editConfig": "Sunting Konfigurasi",
+ "exportConfig": "Eksport Konfigurasi",
+ "importConfig": "Import Konfigurasi",
+ "openInEditor": "Buka dalam Editor",
+ "resetToDefaults": "Tetap Semula ke Lalai",
+ "title": "Konfigurasi"
+ },
+ "updates": {
+ "available": "v{{version}} tersedia",
+ "check": "Semak Kemas Kini",
+ "checking": "Menyemak...",
+ "ready": "Kemas kini sedia",
+ "unknownVersion": "tidak diketahui",
+ "upToDate": "Terkini"
+ },
+ "appName": "Agent Teams AI"
+ },
+ "configEditor": {
+ "errors": {
+ "loadFailed": "Gagal memuatkan konfigurasi",
+ "saveFailed": "Gagal menyimpan konfigurasi"
+ },
+ "footer": {
+ "autoSave": "Perubahan disimpan auto selepas penyuntingan",
+ "toClose": "untuk menutup",
+ "escapeKey": "Esc"
+ },
+ "loading": "Memuatkan konfigurasi...",
+ "status": {
+ "invalidJson": "JSON tidak sah",
+ "saveFailed": "Penyimpanan gagal",
+ "saved": "Disimpan",
+ "saving": "Menyimpan..."
+ },
+ "title": "Sunting Konfigurasi"
+ },
+ "notificationTriggers": {
+ "add": {
+ "cancel": "Batal",
+ "submit": "Tambah Pencetus",
+ "title": "Tambah Pencetus Tersuai"
+ },
+ "builtin": {
+ "description": "Pencetus lalai yang disertakan dengan aplikasi. Anda boleh mendayakan atau melumpuhkannya dan menyesuaikan coraknya.",
+ "title": "Pencetus Terbina Dalam"
+ },
+ "card": {
+ "builtinBadge": "Terbina dalam",
+ "collapseAriaLabel": "Runtuhkan",
+ "deleteAriaLabel": "Padam pencetus",
+ "editNameAriaLabel": "Sunting nama",
+ "expandAriaLabel": "Kembangkan"
+ },
+ "color": {
+ "customHexTitle": "Warna hex tersuai",
+ "invalidHex": "Hex tidak sah"
+ },
+ "configuration": {
+ "alertIfGreaterThan": "Beri amaran jika >",
+ "emptyPatternHint": "Biarkan kosong untuk memadankan semua kandungan. Menggunakan sintaks regex JavaScript.",
+ "errorStatusDescription": "Mencetus apabila pelaksanaan alat melaporkan ralat (is_error: true).",
+ "tokensUnit": "token",
+ "matchPatternPlaceholder": "cth., error|failed|exception"
+ },
+ "custom": {
+ "description": "Cipta pencetus anda sendiri untuk diberitahu bagi corak atau output alat tertentu.",
+ "empty": "Belum ada pencetus tersuai dikonfigurasi.",
+ "title": "Pencetus Tersuai"
+ },
+ "errors": {
+ "invalidRegexPattern": "Corak regex tidak sah"
+ },
+ "fields": {
+ "contentType": "Jenis Kandungan",
+ "matchField": "Medan Padanan",
+ "matchPattern": "Corak Padanan (Regex)",
+ "scopeToolName": "Skop / Nama Alat",
+ "scopeToolNameOptional": "Skop / Nama Alat (pilihan)",
+ "threshold": "Ambang",
+ "tokenType": "Jenis Token",
+ "triggerNamePlaceholder": "cth., Amaran Kegagalan Binaan",
+ "triggerNameRequired": "Nama Pencetus *"
+ },
+ "ignorePatterns": {
+ "hint": "Tekan Enter untuk menambah. Pemberitahuan dilangkau jika mana-mana corak sepadan.",
+ "placeholder": "Tambah regex abai...",
+ "removeAriaLabel": "Buang corak abai",
+ "summary": "Lanjutan: Peraturan Pengecualian",
+ "title": "Corak Abai (langkau jika sepadan)"
+ },
+ "options": {
+ "contentTypes": {
+ "text": "Output Teks",
+ "thinking": "Pemikiran",
+ "tool_result": "Hasil Alat",
+ "tool_use": "Penggunaan Alat"
+ },
+ "matchFields": {
+ "args": "Argumen",
+ "command": "Arahan",
+ "content": "Kandungan",
+ "description": "Penerangan",
+ "file_path": "Laluan Fail",
+ "fullInput": "Input Penuh (JSON)",
+ "glob": "Penapis Glob",
+ "new_string": "Rentetan Baharu",
+ "old_string": "Rentetan Lama",
+ "path": "Laluan",
+ "pattern": "Corak",
+ "prompt": "Prompt",
+ "query": "Pertanyaan",
+ "skill": "Nama Kemahiran",
+ "subagent_type": "Jenis Subagen",
+ "text": "Kandungan Teks",
+ "thinking": "Kandungan Pemikiran",
+ "url": "URL"
+ },
+ "modes": {
+ "content_match": "Corak Kandungan",
+ "error_status": "Ralat Pelaksanaan",
+ "token_threshold": "Penggunaan Token Tinggi"
+ },
+ "tokenTypes": {
+ "input": "Token Input",
+ "output": "Token Output",
+ "total": "Jumlah Token"
+ },
+ "toolNames": {
+ "anyTool": "Mana-mana Alat"
+ }
+ },
+ "preview": {
+ "defaultTestTriggerName": "Pencetus Ujian",
+ "detectedSuffix": "ralat akan dikesan",
+ "more": "...dan {{count}} lagi",
+ "more_few": "...dan {{count}} lagi",
+ "more_many": "...dan {{count}} lagi",
+ "more_one": "...dan {{count}} lagi",
+ "more_other": "...dan {{count}} lagi",
+ "testTrigger": "Pencetus Ujian",
+ "testing": "Menguji...",
+ "title": "Pratonton",
+ "truncatedWarning": "Carian berhenti awal (tamat masa atau had kiraan). Padanan sebenar mungkin lebih tinggi.",
+ "viewSession": "Lihat Sesi"
+ },
+ "repositoryScope": {
+ "empty": "Tiada repositori dipilih - pencetus terpakai kepada semua repositori",
+ "hint": "Apabila repositori dipilih, pencetus ini hanya menyala untuk ralat dalam repositori tersebut.",
+ "placeholder": "Pilih repositori untuk ditambah...",
+ "summary": "Lanjutan: Skop Repositori",
+ "title": "Hadkan kepada Repositori (terpakai hanya kepada repositori yang dipilih)"
+ },
+ "sections": {
+ "configuration": "Konfigurasi",
+ "dotColor": "Warna Titik",
+ "generalInfo": "Maklumat Umum",
+ "triggerCondition": "Syarat Pencetus"
+ }
+ },
+ "workspaceProfiles": {
+ "actions": {
+ "addProfile": "Tambah Profil",
+ "cancel": "Batal",
+ "deleteProfile": "Padam profil",
+ "editProfile": "Sunting profil",
+ "save": "Simpan"
+ },
+ "authMethods": {
+ "agent": "Ejen SSH",
+ "auto": "Auto (daripada Konfigurasi SSH)",
+ "password": "Kata Laluan",
+ "privateKey": "Kunci Peribadi"
+ },
+ "deleteConfirm": {
+ "confirmLabel": "Padam",
+ "message": "Adakah anda pasti mahu memadam \"{{name}}\"? Ini tidak boleh dibuat asal.",
+ "title": "Padam Profil"
+ },
+ "description": "Simpan profil sambungan SSH untuk penyambungan semula pantas",
+ "empty": {
+ "description": "Tambah profil SSH untuk menyambung dengan pantas",
+ "title": "Tiada profil disimpan"
+ },
+ "form": {
+ "authentication": "Pengesahan",
+ "host": "Hos",
+ "name": "Nama",
+ "passwordPrompt": "Anda akan diminta kata laluan apabila menyambung.",
+ "port": "Port",
+ "privateKeyPath": "Laluan Kunci Peribadi",
+ "username": "Nama pengguna",
+ "namePlaceholder": "Pelayan Saya",
+ "hostPlaceholder": "nama hos atau IP",
+ "usernamePlaceholder": "pengguna"
+ },
+ "loading": "Memuatkan profil...",
+ "title": "Profil Ruang Kerja"
+ },
+ "connection": {
+ "actions": {
+ "connect": "Sambung",
+ "connecting": "Menyambung...",
+ "disconnect": "Putuskan sambungan",
+ "testConnection": "Uji Sambungan",
+ "testing": "Menguji..."
+ },
+ "currentMode": {
+ "description": "Sumber data untuk fail sesi",
+ "label": "Mod Semasa",
+ "local": "Tempatan ({{path}})"
+ },
+ "description": "Sambung ke mesin jauh untuk melihat sesi Claude Code yang berjalan di sana",
+ "form": {
+ "authentication": "Pengesahan",
+ "host": "Hos",
+ "password": "Kata Laluan",
+ "port": "Port",
+ "privateKeyPath": "Laluan Kunci Peribadi",
+ "username": "Nama pengguna",
+ "hostPlaceholder": "nama hos atau alias konfigurasi SSH",
+ "usernamePlaceholder": "pengguna"
+ },
+ "savedProfiles": {
+ "title": "Profil Disimpan"
+ },
+ "ssh": {
+ "title": "Sambungan SSH"
+ },
+ "status": {
+ "connectedTo": "Disambung ke {{host}}",
+ "remoteSessions": "Melihat sesi jauh melalui SSH"
+ },
+ "test": {
+ "failed": "Sambungan gagal: {{error}}",
+ "success": "Sambungan berjaya",
+ "unknownError": "Ralat tidak diketahui"
+ },
+ "title": "Sambungan Jauh"
+ },
+ "providerRuntime": {
+ "actions": {
+ "cancel": "Batal",
+ "cancelLogin": "Batal log masuk",
+ "connectChatGpt": "Sambung ChatGPT",
+ "delete": "Padam",
+ "disable": "Lumpuhkan",
+ "disconnectAccount": "Putuskan sambungan akaun",
+ "generateLink": "Jana pautan",
+ "openLogin": "Buka log masuk",
+ "reconnectAnthropic": "Sambung semula Anthropic",
+ "refresh": "Segar semula",
+ "replaceKey": "Gantikan kunci",
+ "saveEndpoint": "Simpan endpoint",
+ "saveKey": "Simpan kunci",
+ "saving": "Menyimpan...",
+ "setApiKey": "Tetapkan kunci API",
+ "updateKey": "Kemas kini kunci",
+ "useCode": "Guna kod"
+ },
+ "apiKey": {
+ "loadingStoredCredentials": "Memuatkan kelayakan tersimpan...",
+ "projectScope": "Projek",
+ "scope": "Skop",
+ "storedIn": "Disimpan dalam {{backend}}",
+ "userScope": "Pengguna",
+ "storedInApp": "Disimpan dalam aplikasi",
+ "providers": {
+ "anthropic": {
+ "name": "Kunci API Anthropic",
+ "title": "Kunci API",
+ "description": "Gunakan kunci API Anthropic langsung untuk akses bil-API. Sesi langganan Anthropic anda kekal tersedia apabila anda beralih kembali.",
+ "placeholder": "sk-ant-..."
+ },
+ "codex": {
+ "name": "Kunci API Codex",
+ "title": "Kunci API",
+ "description": "Gunakan kunci API OpenAI sebagai laluan pengesahan Codex kedua. Jika anda beralih Codex ke mod kunci API, aplikasi akan mencerminkan OPENAI_API_KEY ke dalam CODEX_API_KEY untuk pelancaran natif.",
+ "placeholder": "sk-proj-..."
+ },
+ "gemini": {
+ "name": "Kunci API Gemini",
+ "title": "Akses API",
+ "description": "Gunakan `GEMINI_API_KEY` untuk backend API Gemini. CLI SDK dan ADC tidak memerlukannya.",
+ "placeholder": "AIza..."
+ }
+ }
+ },
+ "codex": {
+ "account": {
+ "appServer": "App-server: {{state}}",
+ "connected": "Disambung",
+ "description": "Urus sesi akaun app-server Codex tempatan yang menggerakkan pelancaran natif berasaskan langganan.",
+ "loginInProgress": "Log masuk sedang berlangsung",
+ "plan": "Pelan: {{plan}}",
+ "reconnectRequired": "Sambung semula diperlukan",
+ "title": "Akaun ChatGPT",
+ "hints": {
+ "autoUsesApiKeyUntilChatgpt": "{{message}} Auto akan terus menggunakan kunci API yang dikesan sehingga ChatGPT disambungkan.",
+ "detectedApiKeyNeedsApiMode": "{{message}} Kunci API yang dikesan hanya digunakan selepas anda beralih Codex ke mod kunci API.",
+ "localArtifactsNoSession": "Codex CLI kini melaporkan tiada akaun ChatGPT aktif. Data akaun Codex tempatan wujud, tetapi tiada sesi terurus aktif yang dipilih. Had penggunaan muncul di sini hanya selepas Codex CLI melihatnya.",
+ "noActiveAccount": "Codex CLI kini melaporkan tiada akaun ChatGPT aktif. Had penggunaan muncul di sini hanya selepas Codex CLI melihatnya.",
+ "reconnectBeforeUsage": "Codex mempunyai akaun ChatGPT yang dipilih secara tempatan, tetapi sesi semasa perlu disambung semula sebelum had penggunaan boleh dimuatkan di sini.",
+ "usageLimitsAfterReport": "Had penggunaan muncul di sini selepas Codex melaporkannya untuk akaun ChatGPT yang disambung."
+ }
+ },
+ "install": {
+ "checking": "Menyemak",
+ "downloading": "Memuat turun",
+ "installCli": "Pasang Codex CLI",
+ "installing": "Memasang",
+ "retryInstall": "Cuba pasang lagi",
+ "title": "Pasang Codex CLI ke dalam data aplikasi"
+ },
+ "rateLimits": {
+ "credits": "Kredit",
+ "creditsDescription": "Kredit dipaparkan secara berasingan daripada penggunaan langganan berasaskan tetingkap dan mungkin tidak tersedia untuk sesi ChatGPT berasaskan pelan.",
+ "noSecondaryWindow": "Codex tidak mengembalikan tetingkap kedua untuk syot kilat akaun ini.",
+ "notReported": "Tidak dilaporkan",
+ "primaryReset": "Tetapan semula utama",
+ "primaryUsed": "Utama digunakan",
+ "primaryWindow": "Tetingkap utama",
+ "remainingLeft": "{{value}} berbaki",
+ "remainingUnknown": "Baki tidak diketahui",
+ "secondaryReset": "Tetapan semula kedua",
+ "secondaryUsed": "Kedua digunakan",
+ "secondaryWindow": "Tetingkap kedua",
+ "usedQuotaNote": "Peratusan ini menunjukkan kuota yang digunakan, bukan kuota berbaki.",
+ "weeklyReset": "Tetapan semula mingguan",
+ "weeklyUsed": "Mingguan digunakan",
+ "weeklyUsedOneWeek": "Mingguan digunakan (1m)",
+ "weeklyWindow": "Tetingkap mingguan",
+ "secondaryFallback": "kedua",
+ "secondaryWindowNote": " Had mingguan dipaparkan secara berasingan dalam tetingkap {{window}}.",
+ "usageExplanationGeneric": "Menunjukkan kuota yang digunakan, bukan kuota berbaki.",
+ "usageExplanationWindowOnly": "Menunjukkan kuota yang digunakan dalam tetingkap {{window}} semasa, bukan kuota berbaki.",
+ "usageExplanationWithRemaining": "{{used}} digunakan - lebih kurang {{remaining}} berbaki dalam tetingkap {{window}} semasa."
+ }
+ },
+ "compatibleEndpoint": {
+ "authToken": "Token pengesahan",
+ "authTokenMissing": "Token pengesahan tidak dikonfigurasi.",
+ "baseUrl": "URL Asas",
+ "description": "Gunakan endpoint runtime tempatan yang serasi Anthropic.",
+ "keepSavedToken": "Biarkan kosong untuk mengekalkan token yang disimpan",
+ "title": "Endpoint tempatan / serasi",
+ "tokenStatus": "Token {{status}}",
+ "validation": {
+ "baseUrlRequired": "URL Asas diperlukan",
+ "firstPartyAnthropic": "Gunakan Auto, Langganan, atau kunci API untuk Anthropic pihak pertama",
+ "httpRequired": "URL Asas mesti menggunakan http:// atau https://",
+ "invalidUrl": "URL tidak sah",
+ "noCredentials": "URL Asas tidak boleh menyertakan kelayakan"
+ },
+ "status": {
+ "endpointDisabledTokenKept": "Endpoint dilumpuhkan. Token yang disimpan dikekalkan.",
+ "endpointSaved": "Endpoint disimpan",
+ "endpointSavedTokenMissing": "Endpoint disimpan. Token pengesahan tidak dikonfigurasi."
+ }
+ },
+ "connection": {
+ "authenticationMethod": "Kaedah pengesahan",
+ "descriptions": {
+ "anthropic": "Pilih bagaimana sesi Anthropic yang dilancarkan aplikasi disahkan.",
+ "codex": "Pilih sama ada Codex patut mengutamakan langganan ChatGPT anda atau kunci API apabila runtime natif dilancarkan.",
+ "gemini": "Konfigurasikan akses API pilihan. CLI SDK dan ADC masih ditemui secara automatik.",
+ "opencode": "Pengesahan OpenCode dan inventori pembekal diuruskan oleh runtime OpenCode."
+ },
+ "method": "Kaedah sambungan",
+ "mode": "Mod: {{mode}}",
+ "selected": "Dipilih",
+ "switching": "Beralih...",
+ "title": "Sambungan"
+ },
+ "connectionCards": {
+ "apiKey": {
+ "title": "Kunci API"
+ },
+ "anthropic": {
+ "apiKeyDescription": "Gunakan ANTHROPIC_API_KEY dan pengebilan API Anthropic.",
+ "autoDescription": "Gunakan lalai runtime Anthropic dan kelayakan tempatan terbaik yang tersedia.",
+ "hint": "Auto mengekalkan Anthropic pada penyelesaian kelayakan tempatan lalainya.",
+ "subscriptionDescription": "Gunakan sesi log masuk Anthropic tempatan dan akses langganan anda.",
+ "subscriptionTitle": "Langganan Anthropic"
+ },
+ "auto": {
+ "title": "Auto"
+ },
+ "codex": {
+ "apiKeyDescription": "Gunakan pengebilan OPENAI_API_KEY dan CODEX_API_KEY untuk pelancaran Codex natif.",
+ "autoDescription": "Utamakan akaun ChatGPT dan langganan anda. Gunakan mod kunci API hanya jika perlu.",
+ "chatgptDescription": "Gunakan akaun ChatGPT yang disambung dan langganan Codex anda.",
+ "chatgptTitle": "Akaun ChatGPT",
+ "hint": "Codex sentiasa berjalan melalui runtime natif. Auto mengutamakan akaun ChatGPT anda sebelum kembali kepada kelayakan kunci API."
+ }
+ },
+ "description": "Urus bagaimana setiap pembekal bersambung dan, apabila disokong, backend mana yang patut digunakan oleh runtime multimodel.",
+ "fastMode": {
+ "defaultOff": "Lalai Mati",
+ "description": "Terapkan mod Claude Code Fast secara lalai untuk pelancaran pasukan Anthropic baharu apabila model dan runtime yang diselesaikan membenarkannya.",
+ "disabledHint": "Pelancaran Anthropic baharu kekal pada kelajuan biasa melainkan pasukan secara eksplisit mendayakan mod Fast.",
+ "enabledHint": "Pelancaran Anthropic baharu akan meminta mod Fast secara lalai apabila model yang diselesaikan menyokongnya.",
+ "notExposed": "Runtime Anthropic ini tidak mendedahkan mod Fast.",
+ "preferFast": "Utamakan Fast",
+ "title": "Lalai mod Fast",
+ "unavailableForRuntime": "Mod Fast kini tidak tersedia untuk runtime Anthropic ini."
+ },
+ "alerts": {
+ "anthropicApiKeyMissing": "Mod kunci API dipilih, tetapi tiada kelayakan API Anthropic tersedia lagi.",
+ "anthropicStoredKeyAvailable": "Kunci API yang disimpan tersedia, tetapi sesi Anthropic yang dilancarkan aplikasi hanya menggunakannya selepas anda beralih ke mod kunci API.",
+ "anthropicSubscriptionMissing": "Mod langganan Anthropic dipilih. Log masuk dengan Anthropic untuk menggunakan pembekal ini.",
+ "authTokenMissing": "Token pengesahan tidak dikonfigurasi. Banyak endpoint tempatan serasi Anthropic memerlukan token yang tidak kosong.",
+ "chatgptLoginPending": "Menunggu log masuk akaun ChatGPT selesai...",
+ "chatgptLoginStarting": "Memulakan log masuk ChatGPT...",
+ "codexApiKeyMissing": "Mod kunci API dipilih, tetapi tiada kelayakan OPENAI_API_KEY atau CODEX_API_KEY tersedia lagi.",
+ "codexLocalArtifactsNoSession": "Codex CLI kini tiada akaun ChatGPT aktif. Data akaun Codex tempatan wujud, tetapi tiada sesi terurus aktif yang dipilih.",
+ "codexNeedsReconnect": "Codex mempunyai akaun ChatGPT yang dipilih secara tempatan, tetapi sesi semasa perlu disambung semula.",
+ "codexNoChatgptAccount": "Codex CLI kini tiada akaun ChatGPT aktif. Sambung ChatGPT untuk menggunakan langganan anda.",
+ "codexNoCredential": "Tiada akaun ChatGPT atau kunci API tersedia lagi.",
+ "geminiApiUnavailable": "API Gemini kini tidak tersedia. Konfigurasikan `GEMINI_API_KEY` di sini atau gunakan kelayakan Google ADC yang sah.",
+ "withApiKeyFallback": "{{message}} Beralih ke mod kunci API untuk menggunakan kunci API yang dikesan."
+ },
+ "authModeDescriptions": {
+ "anthropic": {
+ "apiKey": "Paksa sesi Anthropic yang dilancarkan aplikasi menggunakan kelayakan kunci API.",
+ "auto": "Gunakan tingkah laku lalai runtime. Kunci API yang disimpan dalam aplikasi ini hanya digunakan selepas anda beralih ke mod kunci API.",
+ "oauth": "Paksa sesi Anthropic yang dilancarkan aplikasi menggunakan sesi langganan Anthropic tempatan."
+ },
+ "codex": {
+ "apiKey": "Paksa pelancaran Codex natif menggunakan pengebilan OPENAI_API_KEY / CODEX_API_KEY.",
+ "auto": "Utamakan akaun ChatGPT anda apabila ia tersedia. Kembali kepada mod kunci API hanya apabila perlu.",
+ "chatgpt": "Paksa pelancaran Codex natif menggunakan akaun ChatGPT yang disambung dan langganan anda."
+ }
+ },
+ "progress": {
+ "applyingConnectionChanges": "Menerapkan perubahan sambungan...",
+ "refreshingProviderStatus": "Menyegarkan status pembekal...",
+ "savingCompatibleEndpoint": "Menyimpan endpoint serasi...",
+ "switchingAnthropicSubscription": "Beralih ke langganan Anthropic...",
+ "switchingApiKey": "Beralih ke kunci API...",
+ "switchingApiKeyMode": "Beralih ke mod kunci API...",
+ "switchingAuto": "Beralih ke Auto...",
+ "switchingChatgpt": "Beralih ke mod akaun ChatGPT..."
+ },
+ "provider": "Pembekal",
+ "runtime": {
+ "descriptions": {
+ "anthropic": "Anthropic kini tiada pemilih backend runtime berasingan.",
+ "codex": "Codex kini hanya berjalan melalui laluan runtime natif.",
+ "gemini": "Pilih backend runtime Gemini mana yang patut digunakan multimodel.",
+ "opencode": "OpenCode menggunakan hos runtime terurusnya sendiri. Desktop kini mendedahkan status sahaja."
+ },
+ "title": "Runtime",
+ "updating": "Mengemas kini runtime..."
+ },
+ "runtimeSummary": "Runtime: {{runtime}}",
+ "status": {
+ "configured": "dikonfigurasi",
+ "enabled": "Didayakan",
+ "notConfigured": "Tidak dikonfigurasi",
+ "notSet": "tidak ditetapkan",
+ "off": "Mati",
+ "unknown": "Tidak diketahui"
+ },
+ "title": "Tetapan Pembekal",
+ "usage": {
+ "apiKey": "Menggunakan kunci API",
+ "apiKeyRequired": "Kunci API diperlukan",
+ "compatibleEndpoint": "Menggunakan endpoint serasi",
+ "notConnected": "Tidak disambung",
+ "usingMethod": "Menggunakan {{method}}"
+ },
+ "errors": {
+ "apiKeyDeletedRefreshFailed": "Kunci API dipadam, tetapi gagal menyegarkan status pembekal.",
+ "apiKeySavedRefreshFailed": "Kunci API disimpan, tetapi gagal menyegarkan status pembekal.",
+ "connectionUpdatedRefreshFailed": "Sambungan dikemas kini, tetapi gagal menyegarkan status pembekal.",
+ "deleteApiKey": "Gagal memadam kunci API",
+ "disableEndpoint": "Gagal melumpuhkan endpoint",
+ "endpointDisabledRefreshFailed": "Endpoint dilumpuhkan, tetapi gagal menyegarkan status pembekal.",
+ "endpointSavedRefreshFailed": "Endpoint disimpan, tetapi gagal menyegarkan status pembekal.",
+ "refreshCodexAccount": "Gagal menyegarkan akaun Codex",
+ "saveApiKey": "Gagal menyimpan kunci API",
+ "saveEndpoint": "Gagal menyimpan endpoint",
+ "updateAnthropicFastMode": "Gagal mengemas kini mod Anthropic Fast",
+ "updateConnection": "Gagal mengemas kini sambungan",
+ "updateRuntimeBackend": "Gagal mengemas kini backend runtime",
+ "apiKeyRequired": "Kunci API diperlukan"
+ },
+ "connectionUi": {
+ "authMode": {
+ "auto": "Auto",
+ "oauth": "Langganan / OAuth",
+ "chatgpt": "Akaun ChatGPT",
+ "apiKey": "Kunci API",
+ "anthropicSubscription": "Langganan Anthropic"
+ },
+ "authMethod": {
+ "apiKey": "Kunci API",
+ "apiKeyHelper": "Pembantu kunci API",
+ "oauth": "OAuth",
+ "claudeSubscription": "Langganan Claude",
+ "geminiCli": "Gemini CLI",
+ "googleAccount": "Akaun Google",
+ "serviceAccount": "akaun perkhidmatan"
+ },
+ "runtime": {
+ "codexNative": "Codex natif",
+ "currentRuntime": "Runtime semasa",
+ "selectedRuntime": "Runtime dipilih",
+ "summary": "{{prefix}}: {{runtime}}"
+ },
+ "status": {
+ "checking": "Menyemak...",
+ "modelsAvailable": "Model tersedia",
+ "checked": "Disemak",
+ "providerActivity": "Aktiviti Pembekal",
+ "notConnected": "Tidak disambung",
+ "startingChatGptLogin": "Memulakan log masuk ChatGPT...",
+ "waitingForChatGptLogin": "Menunggu log masuk akaun ChatGPT...",
+ "chatGptVerificationDegraded": "Akaun ChatGPT dikesan - pengesahan akaun kini merosot.",
+ "chatGptAccountReady": "Akaun ChatGPT sedia",
+ "apiKeyReady": "Kunci API sedia",
+ "codexLocalAccountNeedsReconnect": "Codex mempunyai akaun ChatGPT yang dipilih secara tempatan, tetapi sesi semasa perlu disambung semula.",
+ "codexNoActiveManagedSession": "Codex CLI melaporkan tiada log masuk ChatGPT aktif. Data akaun Codex tempatan wujud, tetapi tiada sesi terurus aktif yang dipilih.",
+ "codexNoActiveChatGptLogin": "Codex CLI melaporkan tiada log masuk ChatGPT aktif",
+ "connectChatGptForSubscription": "Sambung akaun ChatGPT untuk menggunakan langganan Codex anda.",
+ "codexNativeReady": "Codex natif sedia",
+ "codexNativeUnavailable": "Codex natif tidak tersedia",
+ "unavailableInCurrentRuntime": "Tidak tersedia dalam runtime semasa",
+ "connectedViaApiKey": "Disambung melalui kunci API",
+ "apiKeyConfiguredNotVerified": "Kunci API dikonfigurasi, tetapi belum disahkan",
+ "apiKeyModeMissingCredential": "Mod kunci API dipilih, tetapi tiada kunci API dikonfigurasi",
+ "connectedVia": "Disambung melalui {{method}}",
+ "unableToVerify": "Tidak dapat mengesahkan"
+ },
+ "mode": {
+ "selectedAuth": "Pengesahan dipilih: {{authMode}}",
+ "preferredAuth": "Pengesahan diutamakan: {{authMode}}"
+ },
+ "credential": {
+ "apiKeyConfigured": "Kunci API dikonfigurasi",
+ "savedApiKeyAvailable": "Kunci API yang disimpan tersedia dalam Urus",
+ "apiKeyAlsoConfigured": "Kunci API juga dikonfigurasi dalam Urus",
+ "apiKeyConfiguredInManage": "Kunci API dikonfigurasi dalam Urus",
+ "apiKeyFallbackInManage": "Kunci API juga tersedia dalam Urus sebagai sandaran",
+ "availableAsFallback": "{{summary}} - tersedia sebagai sandaran",
+ "savedApiKeyAvailableIfSwitch": "Kunci API yang disimpan tersedia dalam Urus jika anda beralih ke mod kunci API",
+ "availableIfSwitch": "{{summary}} - tersedia jika anda beralih ke mod kunci API",
+ "autoWillUseUntilChatGpt": "{{summary}} - Auto akan menggunakan ini sehingga ChatGPT disambungkan"
+ },
+ "actions": {
+ "connect": "Sambung",
+ "connectAnthropic": "Sambung Anthropic",
+ "connectChatGpt": "Sambung ChatGPT",
+ "disconnect": "Putuskan sambungan",
+ "openLogin": "Buka Log Masuk"
+ },
+ "disconnect": {
+ "anthropicTitle": "Putuskan sambungan langganan Anthropic?",
+ "anthropic": "Ini membuang sesi langganan Anthropic tempatan daripada runtime Claude CLI.",
+ "anthropicWithApiKey": "Ini membuang sesi langganan Anthropic tempatan daripada runtime Claude CLI. Kunci API yang disimpan dalam Urus kekal tersedia.",
+ "geminiTitle": "Putuskan sambungan Gemini CLI?",
+ "gemini": "Ini mengosongkan metadata sesi Gemini CLI tempatan. Kelayakan ADC luaran dan kunci API yang disimpan tidak dibuang."
+ }
+ }
+ },
+ "cliRuntime": {
+ "actions": {
+ "checkForUpdates": "Semak Kemas Kini",
+ "checking": "Menyemak...",
+ "extensions": "Sambungan",
+ "installRuntime": "Pasang {{runtime}}",
+ "manage": "Urus",
+ "recheck": "Semak semula",
+ "reinstallRuntime": "Pasang semula {{runtime}}",
+ "retry": "Cuba lagi",
+ "update": "Kemas kini"
+ },
+ "installer": {
+ "checkingLatest": "Menyemak versi terkini...",
+ "downloading": "Memuat turun...",
+ "failed": "Pemasangan gagal",
+ "installed": "Dipasang v{{version}}",
+ "installing": "Memasang...",
+ "latest": "terkini",
+ "verifying": "Mengesahkan checksum..."
+ },
+ "labels": {
+ "multimodel": "Multimodel"
+ },
+ "loading": {
+ "aiProviders": "Menyemak Pembekal AI...",
+ "claudeCli": "Menyemak Claude CLI..."
+ },
+ "provider": {
+ "backend": "Backend: {{backend}}",
+ "loadingModels": "Memuatkan model...",
+ "modelsUnavailable": "Model tidak tersedia untuk binaan runtime ini",
+ "runtime": "Runtime: {{runtime}}"
+ },
+ "providerTerminal": {
+ "authFailed": "Pengesahan gagal",
+ "authUpdated": "Pengesahan dikemas kini",
+ "loggedOut": "Pembekal telah log keluar",
+ "login": "Log masuk",
+ "logout": "Log keluar",
+ "logoutFailed": "Log keluar gagal"
+ },
+ "status": {
+ "configuredNotFound": "{{runtime}} yang dikonfigurasi tidak ditemui.",
+ "foundButFailed": "{{runtime}} ditemui tetapi gagal dimulakan",
+ "healthCheckFailed": "{{runtime}} yang dikonfigurasi gagal semakan kesihatan permulaannya.",
+ "notInstalled": "{{runtime}} belum dipasang"
+ },
+ "title": "Runtime CLI"
+ },
+ "cliStatus": {
+ "versionUpgrade": "v{{current}} -> v{{latest}}"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ms/team.json b/src/features/localization/renderer/locales/ms/team.json
new file mode 100644
index 00000000..de09246b
--- /dev/null
+++ b/src/features/localization/renderer/locales/ms/team.json
@@ -0,0 +1,2487 @@
+{
+ "activity": {
+ "actions": {
+ "createTaskFromMessage": "Cipta tugasan daripada mesej",
+ "editMessage": "Sunting mesej",
+ "expandMessage": "Kembangkan mesej",
+ "replyToMessage": "Balas mesej",
+ "restartTeam": "Mulakan semula pasukan"
+ },
+ "authError": {
+ "description": "Pengesahan gagal. Memulakan semula pasukan akan menyegarkan sesi dan mungkin menyelesaikan isu ini. Jika masalah berterusan, semak kelayakan API anda atau cuba lagi kemudian."
+ },
+ "automation": {
+ "reviewPickup": "Meminta rakan pasukan mengambil semakan",
+ "stallNudge": "Meminta rakan pasukan meneruskan tugasan yang tergendala",
+ "workSyncBody": "Meminta rakan pasukan menyelaraskan kerja semasa"
+ },
+ "badges": {
+ "automation": "automasi",
+ "bootstrap": "bootstrap",
+ "command": "arahan",
+ "comment": "Komen",
+ "live": "langsung",
+ "note": "nota",
+ "rateLimited": "Had Kadar Dicapai",
+ "restart": "mula semula",
+ "result": "hasil",
+ "session": "sesi",
+ "stallNudge": "dorongan tergendala",
+ "start": "mula",
+ "workSync": "penyelarasan kerja",
+ "agentError": "Ralat Agen",
+ "apiError": "Ralat API"
+ },
+ "bootstrap": {
+ "acknowledged": "Bootstrap diakui",
+ "restarting": "Memulakan semula rakan pasukan",
+ "starting": "Memulakan rakan pasukan"
+ },
+ "rawJson": "JSON Mentah",
+ "unread": "Belum dibaca",
+ "thoughts": {
+ "count": "{{count}} pemikiran",
+ "count_one": "{{count}} pemikiran",
+ "expand": "Kembangkan pemikiran",
+ "showMore": "Tunjuk lebih banyak",
+ "showLess": "Tunjuk kurang",
+ "count_few": "{{count}} pemikiran",
+ "count_many": "{{count}} pemikiran",
+ "count_other": "{{count}} pemikiran",
+ "toolSummary": "🔧 {{summary}}",
+ "titleForMember": "{{name}} - pemikiran"
+ },
+ "timeline": {
+ "loadingMessages": "Memuatkan mesej...",
+ "noMessages": "Tiada mesej",
+ "emptyHint": "Hantar mesej kepada ahli untuk melihat aktiviti.",
+ "newSession": "Sesi baharu",
+ "olderCount": "+{{count}} lebih lama",
+ "showMore": "Tunjuk {{count}} lagi",
+ "showAll": "Tunjuk semua",
+ "olderCount_one": "+{{count}} lebih lama",
+ "olderCount_few": "+{{count}} lebih lama",
+ "olderCount_many": "+{{count}} lebih lama",
+ "olderCount_other": "+{{count}} lebih lama"
+ },
+ "pendingReplies": {
+ "title": "Menunggu balasan",
+ "openMember": "Buka ahli",
+ "messageSentAwaitingReply": "Mesej dihantar, menunggu balasan",
+ "awaitingReply": "menunggu balasan",
+ "externalTeam": "pasukan luaran",
+ "crossTeamAwaitingReply": "Mesej merentas pasukan dihantar, menunggu balasan",
+ "user": "pengguna",
+ "awaitingApproval": "menunggu kelulusan"
+ },
+ "reply": {
+ "replyingTo": "Membalas kepada",
+ "action": "Balas"
+ },
+ "activeTasks": {
+ "inProgress": "Sedang dijalankan",
+ "expandInProgress": "Kembangkan sedang dijalankan",
+ "collapseInProgress": "Runtuhkan sedang dijalankan",
+ "reviewing": "menyemak",
+ "workingOn": "sedang mengerjakan"
+ },
+ "expandDialog": {
+ "description": "Paparan mesej dikembangkan"
+ }
+ },
+ "create": {
+ "actions": {
+ "create": "Cipta",
+ "creating": "Mencipta...",
+ "openExisting": "Buka Pasukan Sedia Ada",
+ "skipPreflightAndCreate": "Langkau pra-terbang dan cipta"
+ },
+ "conflict": {
+ "description": "Menjalankan dua pasukan dalam direktori yang sama adalah berisiko - ia mungkin bercanggah menyunting fail yang sama. Pertimbangkan untuk menggunakan direktori berbeza atau worktree git untuk pengasingan.",
+ "title": "Pasukan lain \"{{team}}\" sudah berjalan untuk direktori kerja ini",
+ "workingDirectory": "Direktori kerja:"
+ },
+ "description": {
+ "copy": "Cipta pasukan baharu berdasarkan yang sedia ada.",
+ "create": "Sediakan pasukan anda dan pilih cara ia bermula."
+ },
+ "errors": {
+ "nameExists": "Nama pasukan sudah wujud",
+ "nameLaunching": "Pasukan dengan nama ini sedang dilancarkan",
+ "createConfigFailed": "Gagal mencipta konfigurasi pasukan",
+ "loadProjectsFailed": "Gagal memuatkan projek"
+ },
+ "fields": {
+ "color": "Warna (pilihan)",
+ "description": "Penerangan (pilihan)",
+ "prompt": "Prompt untuk ketua pasukan (pilihan)",
+ "teamName": "Nama pasukan"
+ },
+ "launchAfterCreate": {
+ "description": "Mulakan pasukan serta-merta melalui Claude CLI tempatan.",
+ "label": "Jalankan arahan selepas mencipta"
+ },
+ "localOnly": "Tersedia hanya dalam mod Electron tempatan.",
+ "onDisk": "Pada cakera:",
+ "placeholders": {
+ "description": "Penerangan ringkas tujuan pasukan",
+ "prompt": "Arahan untuk ketua pasukan semasa peruntukan..."
+ },
+ "saved": "Disimpan",
+ "solo": {
+ "description": "Hanya ketua pasukan (proses utama) akan dimulakan - tiada rakan pasukan akan dijana. Berfungsi seperti sesi agen biasa dalam runtime pilihan anda (Claude Code, Codex, OpenCode, Gemini) tetapi dengan akses ke papan tugasan untuk perancangan. Menjimatkan token dengan mengelakkan overhed penyelarasan rakan pasukan. Anda boleh menambah ahli kemudian daripada tetapan pasukan.",
+ "label": "Pasukan solo"
+ },
+ "title": {
+ "copy": "Salin Pasukan",
+ "create": "Cipta Pasukan"
+ },
+ "optional": {
+ "launchSettingsTitle": "Tetapan pelancaran pilihan",
+ "launchSettingsDescription": "Prompt, keselamatan, dan penggantian CLI berada di sini apabila anda memerlukannya.",
+ "teamDetailsTitle": "Butiran pasukan pilihan",
+ "teamDetailsDescription": "Kekalkan aliran lalai padat dan buka ini hanya apabila anda mahukan konteks tambahan atau warna tersuai."
+ },
+ "prepare": {
+ "unsupportedPreload": "Versi preload semasa tidak menyokong team:prepareProvisioning. Mulakan semula aplikasi dev.",
+ "selectWorkingDirectory": "Pilih direktori kerja untuk mengesahkan persekitaran pelancaran.",
+ "someProvidersNeedAttention": "Sesetengah pembekal yang dipilih memerlukan perhatian.",
+ "readyWithNotes": "Semua pembekal yang dipilih sedia, dengan nota.",
+ "ready": "Semua pembekal yang dipilih sedia.",
+ "failed": "Gagal menyediakan pembekal yang dipilih",
+ "checkingProviders": "Menyemak pembekal yang dipilih...",
+ "preparingEnvironment": "Menyediakan persekitaran...",
+ "selectedProvidersReadyWithNotes": "Pembekal yang dipilih sedia (dengan nota)",
+ "selectedProvidersReady": "Pembekal yang dipilih sedia"
+ },
+ "validation": {
+ "nameMustContainLetterOrDigit": "Nama mesti mengandungi sekurang-kurangnya satu huruf atau digit",
+ "nameTooLong": "Nama terlalu panjang (maksimum 128 aksara)",
+ "selectWorkingDirectory": "Pilih direktori kerja (cwd)",
+ "memberNameRequired": "Nama ahli tidak boleh kosong",
+ "memberNameInvalid": "Nama ahli mesti bermula dengan alfanumerik, gunakan hanya [a-zA-Z0-9._-], maksimum 128 aksara",
+ "memberNamesUnique": "Nama ahli mesti unik",
+ "openCodeLeadModelRequired": "Ketua OpenCode memerlukan model yang dipilih.",
+ "openCodeTeammateRequired": "Ketua OpenCode memerlukan sekurang-kurangnya satu rakan pasukan OpenCode.",
+ "teamLaunching": "Pasukan sedang dilancarkan",
+ "teamNameExists": "Nama pasukan sudah wujud",
+ "checkFormFields": "Semak medan borang"
+ }
+ },
+ "editTeam": {
+ "actions": {
+ "cancel": "Batal",
+ "save": "Simpan"
+ },
+ "addMemberLockReason": "Gunakan dialog Tambah ahli khusus untuk menambah rakan pasukan baharu semasa pasukan langsung.",
+ "description": "Tukar nama, penerangan dan warna pasukan",
+ "errors": {
+ "changesSavedRefreshFailed": "Perubahan pasukan disimpan, tetapi gagal menyegarkan paparan terkini: {{message}}",
+ "liveRenameBlocked": "Rakan pasukan sedia ada tidak boleh dinamakan semula semasa pasukan langsung. dinamakan semula: {{names}}",
+ "memberNameEmpty": "Nama ahli tidak boleh kosong",
+ "memberNameInvalid": "Nama ahli mesti bermula dengan alfanumerik, gunakan hanya [a-zA-Z0-9._-], maksimum 128 aksara",
+ "memberNameNumericSuffix": "Nama ahli \"{{name}}\" tidak dibenarkan (dikhaskan untuk akhiran auto Claude CLI). Gunakan \"{{base}}\" sebaliknya.",
+ "memberNameReserved": "Nama ahli \"{{name}}\" dikhaskan",
+ "memberNamesUnique": "Nama ahli mesti unik sebelum menyimpan",
+ "newLiveTeammates": "Tambah rakan pasukan baharu daripada dialog Tambah ahli khusus semasa pasukan langsung. Sunting Pasukan hanya menyokong mengemas kini rakan pasukan sedia ada.",
+ "provisioning": "Tetapan pasukan tidak boleh disunting semasa peruntukan masih dijalankan. Tunggu pelancaran selesai, kemudian cuba lagi.",
+ "restartFailedMany": "Pasukan disimpan, tetapi gagal memulakan semula rakan pasukan ini: {{failures}}",
+ "restartFailedOne": "Pasukan disimpan, tetapi gagal memulakan semula rakan pasukan ini: {{failures}}",
+ "saveFailed": "Gagal menyimpan",
+ "settingsChanged": "Tetapan pasukan berubah semasa dialog ini terbuka. Buka semula dan semak keadaan terkini sebelum menyimpan.",
+ "settingsSavedMembersAndRefreshFailed": "Tetapan pasukan disimpan, tetapi perubahan ahli gagal: {{message}}. Penyegaran juga gagal: {{refreshError}}",
+ "settingsSavedMembersFailed": "Tetapan pasukan disimpan, tetapi perubahan ahli gagal: {{message}}",
+ "settingsSavedRefreshFailed": "Tetapan pasukan disimpan, tetapi gagal menyegarkan paparan terkini: {{message}}",
+ "teamNameEmpty": "Nama pasukan tidak boleh kosong",
+ "unsupportedMixedPrimaryMutation": "Suntingan langsung kepada rakan pasukan milik primari dalam pasukan OpenCode campuran belum disokong. Hentikan pasukan, sunting senarai, kemudian lancarkan semula. Terjejas: {{names}}"
+ },
+ "fields": {
+ "colorOptional": "Warna (pilihan)",
+ "description": "Penerangan",
+ "name": "Nama"
+ },
+ "memberRestartWarning": "Menyimpan akan memulakan semula rakan pasukan ini untuk menerapkan perubahan peranan, aliran kerja, pengasingan worktree, pembekal, model, usaha, atau akses MCP.",
+ "notices": {
+ "liveRenameBlocked": "Simpan langsung disekat kerana rakan pasukan sedia ada dinamakan semula. Patah balik perubahan identiti tersebut atau hentikan pasukan dahulu.",
+ "newLiveTeammates": "Rakan pasukan baharu tidak boleh ditambah daripada Sunting Pasukan semasa pasukan langsung. Gunakan dialog Tambah ahli sebaliknya.",
+ "provisioning": "Peruntukan pasukan masih dijalankan. Penyuntingan dikunci buat sementara sehingga pelancaran selesai.",
+ "restartMany": "Menyimpan akan memulakan semula atau melancarkan semula rakan pasukan ini untuk menerapkan perubahan peranan, aliran kerja, pengasingan worktree, pembekal, model, usaha, atau akses MCP: {{names}}.",
+ "restartOne": "Menyimpan akan memulakan semula atau melancarkan semula rakan pasukan ini untuk menerapkan perubahan peranan, aliran kerja, pengasingan worktree, pembekal, model, usaha, atau akses MCP: {{names}}.",
+ "unsupportedMixedPrimaryMutation": "Suntingan/pembuangan langsung untuk rakan pasukan milik primari dalam pasukan OpenCode campuran memerlukan menghentikan dan melancarkan semula pasukan: {{names}}."
+ },
+ "placeholders": {
+ "description": "Penerangan pasukan (pilihan)",
+ "teamName": "Nama pasukan"
+ },
+ "teamLead": {
+ "changeRuntime": "Tukar runtime ketua",
+ "changeRuntimeDescription": "Buka Lancar Semula Pasukan untuk menukar pembekal, model, atau usaha ketua.",
+ "modelLockReason": "Runtime ketua pasukan diuruskan daripada Lancar Semula Pasukan.",
+ "readOnlyHint": "Nama dan peranan ketua pasukan kekal baca-sahaja di sini. Buka panel runtime pada baris ketua untuk menukar pembekal, model, atau usaha.",
+ "role": "Ketua Pasukan"
+ },
+ "title": "Sunting Pasukan"
+ },
+ "memberDraft": {
+ "actions": {
+ "remove": "Buang ahli",
+ "removeAria": "Buang {{name}}",
+ "restore": "Pulihkan ahli",
+ "restoreAria": "Pulihkan {{name}}"
+ },
+ "anthropicContext": {
+ "defaultSetting": "tetapan konteks lalai",
+ "description": "Konteks Anthropic adalah seluruh pasukan untuk pelancaran ini: {{mode}}. Gunakan kotak semak Hadkan konteks pada panel runtime ketua untuk menukarnya.",
+ "limitEnabled": "Had 200K didayakan"
+ },
+ "mcp": {
+ "buttonInherit": "Warisi MCP",
+ "buttonScopes": "Skop MCP",
+ "chooseScopes": "Pilih skop",
+ "inheritLead": "Warisi ketua",
+ "lockedInfo": "Agent Teams MCP sahaja didayakan untuk semua rakan pasukan. Rakan pasukan ini akan dilancarkan dengan pelayan Agent Teams sahaja.",
+ "mode": "Mod MCP",
+ "scopes": {
+ "local": "tempatan",
+ "project": "projek",
+ "user": "pengguna"
+ },
+ "serverNames": "Nama pelayan",
+ "settingInfo": "Agent Teams MCP melancarkan rakan pasukan ini dengan pelayan Agent Teams sahaja. Mod skop dan senarai benar terpakai hanya kepada pelancaran rakan pasukan ini.",
+ "strictAllowlist": "Senarai benar ketat",
+ "tooltip": "{{label}}: Kawal dasar pewarisan MCP ahli ini",
+ "agentTeamsMcp": "Agent Teams MCP"
+ },
+ "model": {
+ "ariaLabel": "Pembekal {{provider}}, {{model}}",
+ "currentLeadRuntime": "Runtime ketua semasa",
+ "default": "Lalai",
+ "inheritedTooltip": "Pembekal, model, dan usaha diwarisi daripada ketua semasa penyegerakan didayakan.",
+ "leadSuffix": "{{label}} (ketua)",
+ "liveDisabled": "Perubahan pembekal, model, dan usaha dilumpuhkan semasa pasukan langsung. Sambung semula pasukan untuk menerapkannya dengan selamat.",
+ "lockedActionFallback": "Perubahan runtime ketua membuka Lancar Semula Pasukan, di mana pembekal, model, dan usaha boleh dikemas kini.",
+ "restartWholeTeam": "Menyimpan perubahan runtime tersebut memulakan semula seluruh pasukan."
+ },
+ "nameAria": "Nama ahli {{index}}",
+ "nameFallback": "ahli {{index}}",
+ "noRole": "Tiada peranan",
+ "removed": "Dibuang",
+ "workflow": {
+ "addTooltip": "Tambah aliran kerja rakan pasukan",
+ "editTooltip": "Sunting aliran kerja rakan pasukan",
+ "label": "Aliran kerja (pilihan)",
+ "placeholder": "Bagaimana agen ini patut berkelakuan, berinteraksi dengan yang lain...",
+ "saved": "Disimpan"
+ },
+ "worktree": {
+ "description": "Jalankan rakan pasukan ini dalam worktree git berasingan. Terima/tolak perubahan menyasarkan worktree tersebut, bukan ruang kerja ketua.",
+ "label": "Worktree"
+ },
+ "addMembers": {
+ "title": "Tambah Ahli",
+ "description": "Tambah ahli baharu ke {{teamName}}"
+ },
+ "placeholders": {
+ "name": "member-name",
+ "mcpServers": "github, sentry"
+ }
+ },
+ "detail": {
+ "actions": {
+ "add": "Tambah",
+ "cancel": "Batal",
+ "delete": "Padam",
+ "editCode": "Sunting kod",
+ "launch": "Lancar",
+ "remove": "Buang",
+ "stop": "Hentikan",
+ "task": "Tugasan",
+ "visualize": "Visualisasikan"
+ },
+ "deleteTeam": {
+ "description": "Padam pasukan \"{{team}}\"? Tindakan ini tidak boleh diterbalikkan. Semua data dan tugasan pasukan akan dipadam.",
+ "title": "Padam pasukan"
+ },
+ "draft": {
+ "descriptionPrefix": "Ini ialah pasukan draf -",
+ "descriptionSuffix": "telah dikonfigurasi dengan {{count}} {{member}} tetapi belum diperuntukkan oleh CLI lagi. Klik Lancar untuk memilih model dan memulakan pasukan.",
+ "descriptionSuffix_few": "telah dikonfigurasi dengan {{count}} {{member}} tetapi belum diperuntukkan oleh CLI lagi. Klik Lancar untuk memilih model dan memulakan pasukan.",
+ "descriptionSuffix_many": "telah dikonfigurasi dengan {{count}} {{member}} tetapi belum diperuntukkan oleh CLI lagi. Klik Lancar untuk memilih model dan memulakan pasukan.",
+ "descriptionSuffix_one": "telah dikonfigurasi dengan {{count}} {{member}} tetapi belum diperuntukkan oleh CLI lagi. Klik Lancar untuk memilih model dan memulakan pasukan.",
+ "descriptionSuffix_other": "telah dikonfigurasi dengan {{count}} {{member}} tetapi belum diperuntukkan oleh CLI lagi. Klik Lancar untuk memilih model dan memulakan pasukan.",
+ "member": "ahli",
+ "member_few": "ahli",
+ "member_many": "ahli",
+ "member_one": "ahli",
+ "member_other": "ahli",
+ "title": "Pasukan belum dilancarkan"
+ },
+ "invalidTab": "Tab pasukan tidak sah",
+ "kanbanSafeData": "Gagal memuatkan kanban sepenuhnya. Memaparkan data selamat.",
+ "loadFailed": "Gagal memuatkan pasukan",
+ "loading": "Memuatkan pasukan",
+ "loadingSidebar": "Memuatkan bar sisi pasukan",
+ "offline": {
+ "offline": "Pasukan luar talian",
+ "partialFailed": "Pelancaran terakhir gagal di pertengahan",
+ "partialMissing": "Pelancaran terakhir gagal di pertengahan - {{missing}}/{{expected}} rakan pasukan tidak menyertai",
+ "reconciling": "Pelancaran terakhir masih diselaraskan"
+ },
+ "previous": "Sebelumnya: {{paths}}",
+ "removeMember": {
+ "description": "Buang \"{{member}}\" daripada pasukan? Tugasan dan mesej akan dikekalkan, tetapi nama ini tidak boleh diguna semula.",
+ "title": "Buang ahli"
+ },
+ "sections": {
+ "team": "Pasukan"
+ },
+ "solo": "Solo",
+ "status": {
+ "active": "Aktif",
+ "launching": "Melancarkan...",
+ "running": "Berjalan"
+ },
+ "telemetry": {
+ "cpu": "CPU",
+ "memory": "Memori"
+ },
+ "tooltips": {
+ "deleteTeam": "Padam pasukan",
+ "editTeam": "Sunting pasukan",
+ "editUnavailableProvisioning": "Sunting pasukan tidak tersedia semasa peruntukan masih dijalankan",
+ "openBuiltInEditor": "Buka projek dalam editor terbina dalam",
+ "openTeamGraph": "Buka graf pasukan",
+ "stopTeam": "Hentikan pasukan"
+ },
+ "waitingForProvisioning": "Data pasukan akan muncul setelah peruntukan selesai",
+ "context": {
+ "title": "Konteks",
+ "loading": "Memuatkan...",
+ "noSessionLoaded": "Tiada sesi dimuatkan",
+ "closePanel": "Tutup panel konteks {{team}}",
+ "loadingContext": "Memuatkan konteks...",
+ "openLeadSession": "Buka sesi ketua pasukan untuk melihat konteks."
+ }
+ },
+ "review": {
+ "fileHeader": {
+ "actions": {
+ "accept": "Terima",
+ "discard": "Buang",
+ "discardTooltip": "Buang semua suntingan untuk fail ini",
+ "keepMyDraft": "Kekalkan draf saya",
+ "reject": "Tolak",
+ "reloadFromDisk": "Muat semula daripada cakera",
+ "restore": "Pulihkan",
+ "restoreTooltip": "Cipta/pulihkan fail ini pada cakera daripada pratonton",
+ "saveFile": "Simpan Fail",
+ "saveFileTooltip": "Simpan fail ke cakera"
+ },
+ "badges": {
+ "deleted": "DIPADAM",
+ "manualReview": "SEMAKAN MANUAL",
+ "new": "BAHARU",
+ "worktree": "WORKTREE"
+ },
+ "contentSource": {
+ "disk-current": "Cakera Semasa",
+ "file-history": "Sejarah Fail",
+ "git-fallback": "Sandaran Git",
+ "ledger-exact": "Lejar Tugasan",
+ "ledger-snapshot": "Syot Kilat Lejar",
+ "snippet-reconstruction": "Dibina Semula",
+ "unavailable": "Kandungan tidak tersedia"
+ },
+ "contentUnavailable": {
+ "badge": "Kandungan tidak tersedia",
+ "description": "Lejar merekodkan metadata untuk perubahan ini, tetapi kandungan teks penuh tidak tersedia. Ini biasanya bermaksud kandungan binari, besar, atau hash sahaja.",
+ "safety": "Terima/tolak automatik dilumpuhkan untuk fail ini untuk mengelakkan penulisan cakera yang tidak selamat.",
+ "title": "Kandungan teks tidak tersedia"
+ },
+ "disabled": {
+ "acceptRejectContentUnavailable": "Terima/Tolak dilumpuhkan kerana kandungan teks penuh tidak tersedia.",
+ "acceptRejectMissingOnDisk": "Terima/Tolak dilumpuhkan semasa fail hilang pada cakera.",
+ "rejectBaselineUnavailable": "Tolak dilumpuhkan kerana garis dasar asal tidak tersedia.",
+ "rejectContentUnavailable": "Tolak dilumpuhkan kerana kandungan teks penuh tidak tersedia.",
+ "rejectManualLedgerReview": "Tolak dilumpuhkan kerana perubahan lejar ini mempunyai kandungan binari, besar, atau tidak tersedia."
+ },
+ "externalChange": {
+ "changedOnDisk": "Ditukar pada cakera",
+ "deletedOnDisk": "Dipadam pada cakera",
+ "recreatedOnDisk": "Dicipta semula pada cakera"
+ },
+ "missingOnDisk": {
+ "badge": "Hilang pada cakera",
+ "description": "Kami masih boleh menunjukkan pratonton daripada log agen, tetapi sistem fail anda tidak segerak.",
+ "restorePrefix": "Gunakan",
+ "restoreSuffix": "untuk menulis kandungan pratonton kembali ke cakera.",
+ "restoreUnavailable": "Kandungan fail penuh tidak tersedia untuk dipulihkan secara automatik.",
+ "title": "Fail hilang pada cakera"
+ },
+ "pathChange": {
+ "from": "Daripada {{path}}",
+ "to": "Kepada {{path}}"
+ },
+ "worktree": {
+ "isolated": "Worktree terasing"
+ }
+ },
+ "toolbar": {
+ "stats": {
+ "pending": "{{count}} tertangguh",
+ "pending_one": "{{count}} tertangguh",
+ "pending_other": "{{count}} tertangguh",
+ "accepted": "{{count}} diterima",
+ "accepted_one": "{{count}} diterima",
+ "accepted_other": "{{count}} diterima",
+ "rejected": "{{count}} ditolak",
+ "rejected_one": "{{count}} ditolak",
+ "rejected_other": "{{count}} ditolak",
+ "acrossFiles": "merentas {{count}} fail",
+ "acrossFiles_one": "merentas {{count}} fail",
+ "acrossFiles_other": "merentas {{count}} fail",
+ "edited": "{{count}} disunting",
+ "edited_one": "{{count}} disunting",
+ "edited_other": "{{count}} disunting",
+ "pending_few": "{{count}} tertangguh",
+ "pending_many": "{{count}} tertangguh",
+ "accepted_few": "{{count}} diterima",
+ "accepted_many": "{{count}} diterima",
+ "rejected_few": "{{count}} ditolak",
+ "rejected_many": "{{count}} ditolak",
+ "acrossFiles_few": "merentas {{count}} fail",
+ "acrossFiles_many": "merentas {{count}} fail",
+ "edited_few": "{{count}} disunting",
+ "edited_many": "{{count}} disunting"
+ },
+ "actions": {
+ "auto": "Auto",
+ "undo": "Buat asal",
+ "acceptAll": "Terima Semua",
+ "rejectAll": "Tolak Semua",
+ "applying": "Menerapkan...",
+ "applyRejections": "Terapkan Penolakan"
+ },
+ "tooltips": {
+ "autoOn": "Tandakan fail sebagai dilihat secara auto apabila ditatal ke hujung (HIDUP)",
+ "autoOff": "Tandakan fail sebagai dilihat secara auto apabila ditatal ke hujung (MATI)",
+ "undo": "Buat asal operasi semakan terakhir (Ctrl+Z)",
+ "acceptAll": "Terima semua perubahan merentas semua fail",
+ "rejectAll": "Tolak semua perubahan yang selamat ditolak merentas semua fail",
+ "rejectAllDisabled": "Tiada fail tertangguh mempunyai garis dasar asal yang selamat untuk ditolak.",
+ "applyRejections": "Terapkan hunk yang ditolak ke cakera; perubahan yang diterima dikekalkan seadanya"
+ }
+ },
+ "diffError": {
+ "title": "Gagal merender paparan perbezaan",
+ "unexpected": "Ralat tidak dijangka berlaku semasa merender perbezaan.",
+ "actions": {
+ "retry": "Cuba lagi"
+ },
+ "raw": {
+ "show": "Tunjuk data perbezaan mentah",
+ "file": "Fail: {{file}}",
+ "original": "--- Asal",
+ "modified": "+++ Diubah suai",
+ "charsTotal": "... ({{count}} aksara jumlah)",
+ "charsTotal_one": "... ({{count}} aksara jumlah)",
+ "charsTotal_other": "... ({{count}} aksara jumlah)",
+ "charsTotal_few": "... ({{count}} aksara jumlah)",
+ "charsTotal_many": "... ({{count}} aksara jumlah)"
+ }
+ },
+ "fileTree": {
+ "viewed": "Dilihat",
+ "badges": {
+ "new": "baharu",
+ "deleted": "dipadam"
+ },
+ "collapseFolder": "Runtuhkan {{name}}",
+ "expandFolder": "Kembangkan {{name}}",
+ "empty": {
+ "noChangedFiles": "Tiada fail ditukar",
+ "noMatchingFiles": "Tiada fail yang sepadan"
+ },
+ "searchPlaceholder": "Cari fail…",
+ "filters": {
+ "unresolved": "Belum diselesaikan",
+ "rejected": "Ditolak",
+ "new": "Baharu",
+ "clear": "Kosongkan"
+ }
+ },
+ "diffControls": {
+ "previousChunk": "Ketulan sebelumnya",
+ "nextChunk": "Ketulan seterusnya",
+ "rejectChange": "Tolak perubahan (⌘N)",
+ "acceptChange": "Terima perubahan (⌘Y)",
+ "undo": "Buat asal",
+ "keep": "Kekalkan",
+ "rejectShortcut": "⌘N",
+ "acceptShortcut": "⌘Y"
+ },
+ "conflict": {
+ "title": "Konflik Dikesan",
+ "description": "Fail ini telah diubah suai sejak perubahan agen",
+ "cancel": "Batal",
+ "saveResolution": "Simpan Penyelesaian",
+ "editManually": "Sunting Secara Manual",
+ "useOriginal": "Guna Asal",
+ "keepCurrent": "Kekalkan Semasa"
+ },
+ "fullDiffLoading": {
+ "titleOne": "Menyediakan Perbezaan Penuh",
+ "titleMany": "Menyediakan {{count}} Perbezaan Penuh",
+ "subtitleForFile": "Memuktamadkan perbezaan editor yang tepat untuk {{file}}.",
+ "subtitleCurrentFile": "Memuktamadkan perbezaan editor yang tepat untuk fail semasa.",
+ "subtitleMany": "Menyelesaikan garis dasar sebelum/selepas yang tepat untuk fail yang sedang dimuatkan.",
+ "previewsReady": "{{count}} pratonton sedia",
+ "previewsReady_one": "{{count}} pratonton sedia",
+ "editorViewLoading": "Paparan editor dimuatkan",
+ "filesInProgress": "{{count}} fail sedang diproses",
+ "filesInProgress_one": "{{count}} fail sedang diproses",
+ "filesReady": "{{ready}}/{{total}} fail sedia",
+ "progressDescription": "{{ready}} sedia, {{loading}} masih dimuatkan. Perbezaan pratonton kekal kelihatan di bawah semasa garis dasar yang tinggal diselesaikan.",
+ "singleDescription": "Perbezaan pratonton kekal kelihatan di bawah semasa garis dasar yang tepat diselesaikan.",
+ "previewsReady_few": "{{count}} pratonton sedia",
+ "previewsReady_many": "{{count}} pratonton sedia",
+ "previewsReady_other": "{{count}} pratonton sedia",
+ "filesInProgress_few": "{{count}} fail sedang diproses",
+ "filesInProgress_many": "{{count}} fail sedang diproses",
+ "filesInProgress_other": "{{count}} fail sedang diproses"
+ },
+ "fileMissingPrefix": "Fail hilang pada cakera. Perbezaan ini mungkin hanya pratonton daripada log agen. Gunakan",
+ "restore": "Pulihkan",
+ "fileMissingSuffix": "untuk mencipta fail pada cakera.",
+ "filePlaceholder": {
+ "loading": "Memuatkan",
+ "description": "Menyediakan perbezaan editor penuh untuk fail ini."
+ },
+ "loading": {
+ "diff": "PERBEZAAN",
+ "ledgerObjectsProcessed": "{{count}} objek lejar diproses",
+ "ledgerObjectsProcessed_one": "{{count}} objek lejar diproses",
+ "ledgerObjectsProcessed_other": "{{count}} objek lejar diproses",
+ "ledgerObjectsProcessed_few": "{{count}} objek lejar diproses",
+ "ledgerObjectsProcessed_many": "{{count}} objek lejar diproses",
+ "phases": {
+ "readingLedger": "Membaca lejar tugasan...",
+ "resolvingFiles": "Menyelesaikan keadaan fail...",
+ "checkingWorktree": "Menyemak konteks worktree...",
+ "preparingDiffs": "Menyediakan perbezaan semakan..."
+ }
+ },
+ "progress": {
+ "viewed": "{{viewed}}/{{total}} dilihat"
+ },
+ "scope": {
+ "readMore": "Baca lebih lanjut",
+ "tiers": {
+ "exact": {
+ "title": "Skop tugasan ditentukan dengan tepat",
+ "detail": "Kedua-dua penanda mula dan selesai ditemui dalam log sesi. Perbezaan ini merangkumi hanya perubahan yang dibuat semasa tugasan khusus ini - tugasan lain yang mengubah suai fail yang sama dikecualikan."
+ },
+ "endEstimated": {
+ "title": "Sempadan akhir dianggarkan",
+ "detail": "Hanya penanda mula ditemui - tugasan belum mempunyai penanda selesai. Perubahan ditunjukkan daripada permulaan tugasan ke hujung sesi. Jika tugasan lain berjalan selepas ini dalam sesi yang sama, perubahan mereka juga mungkin disertakan."
+ },
+ "startEstimated": {
+ "title": "Sempadan mula dianggarkan",
+ "detail": "Hanya penanda selesai ditemui - permulaan kerja tidak ditangkap. Jika tugasan lain berjalan sebelum ini dalam sesi yang sama, perubahan mereka kepada fail yang sama juga mungkin disertakan."
+ },
+ "allSession": {
+ "title": "Memaparkan semua perubahan sesi",
+ "detail": "Tiada penanda tugasan ditemui dalam log sesi. Tidak dapat mengasingkan tugasan ini - semua perubahan fail daripada keseluruhan sesi ditunjukkan, termasuk perubahan daripada tugasan lain. Ini boleh berlaku dengan versi CLI yang lebih lama atau aliran kerja bukan standard."
+ }
+ },
+ "ledger": {
+ "exact": {
+ "title": "Perubahan ditangkap oleh lejar tugasan",
+ "detail": "Orkestrator menangkap perubahan fail ini semasa agen mengerjakan tugasan ini.",
+ "badge": "Lejar tepat"
+ },
+ "limited": {
+ "title": "Perubahan ditangkap dengan kebolehsemakan terhad",
+ "detail": "Orkestrator menangkap perubahan fail ini untuk tugasan ini, tetapi sekurang-kurangnya satu perubahan ditangkap daripada syot kilat atau sumber metadata sahaja. Semak perbezaan teks yang tepat di mana tersedia; kandungan binari atau tidak tersedia mungkin memerlukan semakan manual.",
+ "mixedBadge": "Kebolehsemakan campuran",
+ "needsReviewBadge": "Perlu semakan"
+ }
+ },
+ "workInterval": {
+ "title": "Diskop mengikut selang kerja berterusan",
+ "detail": "Penanda mula tugasan tidak tersedia dalam log sesi, jadi perbezaan diskop mengikut selang kerja tugasan yang disimpan pada papan.",
+ "badge": "Diskop mengikut selang"
+ },
+ "confidence": {
+ "high": "Keyakinan tinggi",
+ "medium": "Keyakinan sederhana",
+ "low": "Keyakinan rendah",
+ "bestEffort": "Usaha terbaik"
+ }
+ },
+ "shortcuts": {
+ "title": "Pintasan Papan Kekunci",
+ "actions": {
+ "nextChange": "Perubahan seterusnya",
+ "previousChange": "Perubahan sebelumnya",
+ "nextFile": "Fail seterusnya",
+ "previousFile": "Fail sebelumnya",
+ "acceptChange": "Terima perubahan",
+ "rejectChange": "Tolak perubahan",
+ "saveFile": "Simpan fail",
+ "undo": "Buat asal",
+ "redo": "Buat semula",
+ "toggleShortcuts": "Togol pintasan",
+ "closeDialog": "Tutup dialog"
+ }
+ },
+ "timeline": {
+ "empty": "Tiada peristiwa suntingan",
+ "titleWithCount": "Garis Masa Suntingan ({{count}})"
+ },
+ "continuousScroll": {
+ "empty": "Tiada perubahan fail yang boleh disemak"
+ },
+ "empty": {
+ "noSafeDiff": "Tiada perbezaan selamat tersedia",
+ "noFileChangesRecorded": "Tiada perubahan fail direkodkan",
+ "noSafeDiffDescription": "Lejar tugasan tidak mendedahkan perbezaan fail yang selamat untuk tugasan ini.",
+ "noSafeDiffDiagnosticsDescription": "Lejar tugasan tidak mendedahkan perbezaan fail yang selamat untuk tugasan ini. Diagnostik di bawah menjelaskan sebabnya.",
+ "noFileEventsYet": "Lejar tugasan belum mempunyai peristiwa fail untuk tugasan ini.",
+ "noFileEvents": "Lejar tugasan tiada peristiwa fail untuk tugasan ini."
+ }
+ },
+ "messages": {
+ "actions": {
+ "bottomSheetActions": "Tindakan helaian bawah mesej",
+ "collapseAll": "Runtuhkan semua mesej",
+ "collapseSheet": "Runtuhkan helaian",
+ "expandAll": "Kembangkan semua mesej",
+ "expandSheet": "Kembangkan helaian",
+ "floatComposer": "Apungkan penggubah",
+ "floatMessagesComposer": "Apungkan penggubah mesej",
+ "hideSearch": "Sembunyi carian",
+ "loadOlder": "Muat mesej lebih lama",
+ "markAllRead": "Tandakan semua sebagai dibaca",
+ "messageActions": "Tindakan mesej",
+ "moveMessagesToBottomSheet": "Alih mesej ke helaian bawah",
+ "moveMessagesToSidebar": "Alih mesej ke bar sisi",
+ "moveToBottomSheet": "Alih ke helaian bawah",
+ "moveToInline": "Alih ke sebaris",
+ "moveToSidebar": "Alih ke bar sisi",
+ "panelActions": "Tindakan panel mesej",
+ "searchMessages": "Cari mesej"
+ },
+ "delivery": {
+ "copied": "Disalin",
+ "copyDebugDetails": "Salin butiran nyahpepijat",
+ "details": "Butiran",
+ "fields": {
+ "acceptanceUnknown": "acceptanceUnknown",
+ "delivered": "delivered",
+ "diagnostics": "diagnostics",
+ "ledgerStatus": "ledgerStatus",
+ "messageId": "messageId",
+ "providerId": "providerId",
+ "queuedBehindMessageId": "queuedBehindMessageId",
+ "reason": "reason",
+ "responsePending": "responsePending",
+ "responseState": "responseState",
+ "statusMessageId": "statusMessageId",
+ "userVisibleMessage": "userVisibleMessage",
+ "userVisibleNextReviewAt": "userVisibleNextReviewAt",
+ "userVisibleReasonCode": "userVisibleReasonCode",
+ "userVisibleState": "userVisibleState",
+ "visibleReplyCorrelation": "visibleReplyCorrelation",
+ "visibleReplyMessageId": "visibleReplyMessageId"
+ }
+ },
+ "panelMode": "Mod panel mesej",
+ "title": "Mesej",
+ "unread": {
+ "new": "{{count}} baharu",
+ "unread": "{{count}} belum dibaca",
+ "new_few": "{{count}} baharu",
+ "new_many": "{{count}} baharu",
+ "new_one": "{{count}} baharu",
+ "new_other": "{{count}} baharu",
+ "unread_few": "{{count}} belum dibaca",
+ "unread_many": "{{count}} belum dibaca",
+ "unread_one": "{{count}} belum dibaca",
+ "unread_other": "{{count}} belum dibaca"
+ },
+ "filter": {
+ "ariaLabel": "Tapis mesej",
+ "tooltip": "Tapis mesej",
+ "from": "Daripada",
+ "to": "Kepada",
+ "noData": "Tiada data",
+ "showStatusUpdates": "Tunjuk kemas kini status (melahu/penutupan)",
+ "actions": {
+ "reset": "Tetap semula",
+ "save": "Simpan"
+ }
+ },
+ "status": {
+ "title": "Status"
+ },
+ "actionMode": {
+ "label": "Mod tindakan"
+ },
+ "search": {
+ "placeholder": "Cari..."
+ }
+ },
+ "modelSelector": {
+ "badges": {
+ "configured": "Dikonfigurasi",
+ "connected": "Disambung",
+ "failed": "Gagal",
+ "free": "Percuma",
+ "local": "Tempatan",
+ "needsTest": "Perlu diuji",
+ "verified": "Disahkan",
+ "unavailable": "Tidak tersedia",
+ "issue": "Isu"
+ },
+ "customModelId": "ID model tersuai",
+ "label": "Model (pilihan)",
+ "multimodelRequired": "Codex dan Gemini memerlukan mod Multimodel.",
+ "openCode": {
+ "allSources": "Semua sumber OpenCode",
+ "filterSource": "Tapis {{source}}",
+ "filterSources": "Tapis sumber OpenCode",
+ "freeOnly": "Percuma sahaja",
+ "freeTooltip": "OpenCode menandakan model ini sebagai percuma.",
+ "loadingModels": "Memuatkan model OpenCode...",
+ "noSourcesFound": "Tiada sumber ditemui.",
+ "recommendedOnly": "Disyorkan sahaja",
+ "searchSources": "Cari sumber",
+ "sourcesCount": "{{count}} sumber OpenCode",
+ "sourcesCount_few": "{{count}} sumber OpenCode",
+ "sourcesCount_many": "{{count}} sumber OpenCode",
+ "sourcesCount_one": "{{count}} sumber OpenCode",
+ "sourcesCount_other": "{{count}} sumber OpenCode"
+ },
+ "reason": "Sebab: {{reason}}",
+ "runtimeModelsSyncing": "Model eksplisit dimuatkan daripada runtime semasa. Lalai kekal tersedia semasa senarai disegerakkan.",
+ "fastMode": {
+ "codexLabel": "Mod Fast (2x kredit)",
+ "optionalLabel": "Mod Fast (pilihan)",
+ "defaultOff": "Lalai (Mati)",
+ "fast": "Fast",
+ "off": "Mati",
+ "defaultFast": "Lalai (Fast)",
+ "defaultResolvesTo": "Lalai kini diselesaikan kepada {{mode}}.",
+ "runtimeBackedHint": "Mod Fast disokong runtime dan hanya dibuka apabila model pelancaran Anthropic yang diselesaikan menyokongnya."
+ },
+ "anthropicExtraUsage": {
+ "pricingDocs": "Baca dokumentasi harga Anthropic"
+ },
+ "searchModels": "Cari model",
+ "defaultModel": "Lalai",
+ "empty": {
+ "noSearchMatches": "Tiada model sepadan dengan carian ini.",
+ "recommendedFreeOpenCode": "Tiada model OpenCode percuma yang disyorkan tersedia dalam senarai runtime semasa.",
+ "freeOpenCode": "Tiada model OpenCode percuma tersedia dalam senarai runtime semasa.",
+ "recommendedOpenCode": "Tiada model OpenCode yang disyorkan tersedia dalam senarai runtime semasa.",
+ "noModels": "Tiada model tersedia dalam senarai runtime semasa."
+ },
+ "openCodeStatus": {
+ "notReadyTitle": "OpenCode belum sedia untuk pelancaran pasukan",
+ "freeModelsAvailableTitle": "Model OpenCode percuma tersedia",
+ "providerNotConnectedTitle": "Pembekal OpenCode tidak disambung",
+ "readyTitle": "OpenCode sedia",
+ "readyMessage": "OpenCode lulus kesediaan pembekal. Pilihnya untuk menggunakan model OpenCode untuk pasukan ini.",
+ "useOpenCode": "Guna OpenCode",
+ "badges": {
+ "check": "Semak",
+ "install": "Pasang",
+ "free": "Percuma",
+ "setup": "Persediaan"
+ },
+ "summary": {
+ "checking": "Status OpenCode: menyemak runtime",
+ "status": "Status OpenCode: {{parts}}"
+ },
+ "summaryParts": {
+ "teamLaunchBlocked": "pelancaran pasukan disekat",
+ "providerOptional": "sambungan pembekal pilihan",
+ "providerModelsNeedSetup": "model disokong pembekal perlu persediaan",
+ "teamLaunchReady": "pelancaran pasukan sedia",
+ "runtimeDetected": "runtime dikesan",
+ "runtimeMissing": "runtime hilang",
+ "freeWithoutAuth": "model percuma tersedia tanpa pengesahan",
+ "providerConnected": "pembekal disambung",
+ "providerNotConnected": "pembekal tidak disambung"
+ },
+ "messages": {
+ "checking": "Aplikasi masih menyemak runtime OpenCode. Tunggu status pembekal selesai, kemudian cuba lagi.",
+ "unsupported": "OpenCode tidak dipasang, tidak ditemui, atau runtime yang dikesan tidak disokong. Pasang atau kemas kini OpenCode, kemudian segarkan status pembekal. Anda juga boleh menggunakan butang Pasang di halaman utama.",
+ "freeAvailable": "OpenCode dikesan. Anda boleh menggunakan model OpenCode percuma seperti Big Pickle tanpa menyambung pembekal. Sambung pembekal hanya apabila anda mahukan model disokong pembekal.",
+ "noFreeListed": "OpenCode dikesan, tetapi belum ada model OpenCode percuma disenaraikan. Segarkan status pembekal, atau sambung pembekal dalam OpenCode untuk model disokong pembekal.",
+ "launchBlocked": "OpenCode dipasang dan disahkan, tetapi kesediaan pelancaran Agent Teams disekat.",
+ "ready": "OpenCode sedia untuk pelancaran pasukan."
+ },
+ "loadingRuntime": "Status runtime OpenCode masih dimuatkan."
+ },
+ "advisory": {
+ "pingNotConfirmed": "Ping tidak disahkan",
+ "note": "Nota"
+ },
+ "placeholders": {
+ "customModelId": "openai/gpt-oss-20b"
+ },
+ "routeGroups": {
+ "openCodeConfig": "Konfigurasi OpenCode",
+ "builtinFree": "Percuma terbina dalam",
+ "connectedProviders": "Pembekal disambung",
+ "otherCatalog": "Katalog OpenCode lain"
+ },
+ "pricing": {
+ "free": "Percuma",
+ "inputShort": "masuk {{rate}}",
+ "outputShort": "keluar {{rate}}",
+ "perMillionSummary": "{{summary}} / 1J",
+ "inputTitle": "Input: {{rate}} setiap 1J token",
+ "outputTitle": "Output: {{rate}} setiap 1J token",
+ "cacheReadTitle": "Bacaan cache: {{rate}} setiap 1J token",
+ "cacheWriteTitle": "Tulisan cache: {{rate}} setiap 1J token"
+ },
+ "defaultTooltip": {
+ "anthropicCompatibleWithResolved": "Menggunakan model lalai endpoint serasi Anthropic.\nKini diselesaikan kepada {{model}}.",
+ "anthropicCompatible": "Menggunakan model lalai endpoint serasi Anthropic.",
+ "anthropic": "Menggunakan model lalai pasukan Claude.\nDiselesaikan kepada {{longContextModel}} dengan konteks 1J, atau {{limitedContextModel}} dengan konteks 200K apabila Hadkan konteks didayakan.",
+ "openCodeWithResolved": "Menggunakan model lalai OpenCode.\nKini diselesaikan kepada {{model}}.",
+ "openCode": "Menggunakan model lalai runtime OpenCode.",
+ "runtime": "Menggunakan lalai runtime untuk pembekal yang dipilih."
+ },
+ "multimodelOff": "Multimodel mati",
+ "unavailableInRuntime": "Tidak tersedia dalam runtime semasa"
+ },
+ "taskDetail": {
+ "actions": {
+ "cancel": "Batal",
+ "delete": "Padam",
+ "markResolved": "Tandakan diselesaikan",
+ "save": "Simpan"
+ },
+ "attachments": {
+ "commentAttachment": "Lampiran komen",
+ "fromComments": "Daripada komen",
+ "preview": "Pratonton {{filename}}"
+ },
+ "changes": {
+ "badges": {
+ "attention": "perhatian",
+ "noSafeDiff": "tiada perbezaan selamat"
+ },
+ "empty": {
+ "noFileChangesRecorded": "Tiada perubahan fail direkodkan",
+ "noFileChangesRecordedYet": "Belum ada perubahan fail direkodkan",
+ "noReviewableChangesRecovered": "Tiada perubahan fail yang boleh disemak dipulihkan",
+ "noSafeDiffAvailable": "Tiada perbezaan selamat tersedia"
+ },
+ "loadFailed": "Gagal memuatkan ringkasan perubahan tugasan",
+ "loading": "Memuatkan perubahan...",
+ "fileCount": "{{count}} fail",
+ "fileRowsHidden": "{{count}} baris fail disembunyikan",
+ "moreDiagnostics": "{{count}} diagnostik lagi",
+ "moreFiles": "{{count}} fail lagi",
+ "openInEditor": "Buka dalam editor",
+ "openTask": "Buka tugasan {{subject}}",
+ "refresh": "Segar semula perubahan",
+ "refreshFailed": "Penyegaran gagal: {{error}}",
+ "refreshing": "Menyegarkan",
+ "refreshingChanges": "Menyegarkan perubahan...",
+ "refreshTeamChanges": "Segar semula perubahan pasukan",
+ "refreshShort": "Segar semula",
+ "reviewDiff": "Semak perbezaan",
+ "reviewTaskDiff": "Semak perbezaan tugasan",
+ "scannedCandidateTasks": "Mengimbas {{requested}} daripada {{eligible}} tugasan calon",
+ "tasksDeferred": "{{count}} tugasan ditangguhkan pusingan ini",
+ "title": "Perubahan",
+ "fileCount_few": "{{count}} fail",
+ "fileCount_many": "{{count}} fail",
+ "fileCount_one": "{{count}} fail",
+ "fileCount_other": "{{count}} fail",
+ "fileRowsHidden_few": "{{count}} baris fail disembunyikan",
+ "fileRowsHidden_many": "{{count}} baris fail disembunyikan",
+ "fileRowsHidden_one": "{{count}} baris fail disembunyikan",
+ "fileRowsHidden_other": "{{count}} baris fail disembunyikan",
+ "moreDiagnostics_few": "{{count}} diagnostik lagi",
+ "moreDiagnostics_many": "{{count}} diagnostik lagi",
+ "moreDiagnostics_one": "{{count}} diagnostik lagi",
+ "moreDiagnostics_other": "{{count}} diagnostik lagi",
+ "moreFiles_few": "{{count}} fail lagi",
+ "moreFiles_many": "{{count}} fail lagi",
+ "moreFiles_one": "{{count}} fail lagi",
+ "moreFiles_other": "{{count}} fail lagi",
+ "tasksDeferred_few": "{{count}} tugasan ditangguhkan pusingan ini",
+ "tasksDeferred_many": "{{count}} tugasan ditangguhkan pusingan ini",
+ "tasksDeferred_one": "{{count}} tugasan ditangguhkan pusingan ini",
+ "tasksDeferred_other": "{{count}} tugasan ditangguhkan pusingan ini"
+ },
+ "clarification": {
+ "awaitingLead": "Menunggu penjelasan daripada ketua pasukan",
+ "awaitingUser": "Menunggu penjelasan daripada anda"
+ },
+ "description": {
+ "add": "Klik untuk menambah penerangan...",
+ "edit": "Sunting penerangan",
+ "placeholder": "Penerangan tugasan (menyokong markdown)"
+ },
+ "loading": {
+ "fetchingTeamData": "Mendapatkan data pasukan",
+ "title": "Memuatkan tugasan..."
+ },
+ "logs": {
+ "newArriving": "Log tugasan baharu tiba"
+ },
+ "notFound": "Tugasan tidak ditemui",
+ "related": {
+ "blockedBy": "Disekat oleh",
+ "blocks": "Menyekat",
+ "linkedFrom": "Dipaut daripada",
+ "links": "Pautan",
+ "title": "Tugasan berkaitan"
+ },
+ "review": {
+ "reviewer": "Penyemak: {{reviewer}}"
+ },
+ "sections": {
+ "attachments": "Lampiran",
+ "changes": "Perubahan",
+ "comments": "Komen",
+ "description": "Penerangan",
+ "taskLogs": "Log Tugasan",
+ "workflowHistory": "Sejarah Aliran Kerja"
+ },
+ "unassigned": "Tidak ditugaskan",
+ "workflow": {
+ "implementationTimeTitle": "Masa pelaksanaan daripada selang kerja berterusan",
+ "inProgressTime": "Masa sedang dijalankan {{duration}}"
+ },
+ "comments": {
+ "renderLimit": "Memaparkan {{formattedCount}} komen terkini untuk memastikan UI responsif.",
+ "badges": {
+ "approved": "Diluluskan",
+ "reviewRequested": "Semakan diminta"
+ },
+ "unknownTime": "masa tidak diketahui",
+ "actions": {
+ "reply": "Balas",
+ "replyToComment": "Balas komen",
+ "showMore": "Tunjuk lebih banyak komen ({{visible}}/{{total}})",
+ "cancelReply": "Batal balasan",
+ "comment": "Komen"
+ },
+ "attachments": {
+ "previewAlt": "Pratonton lampiran",
+ "downloadFailed": "Muat turun gagal"
+ },
+ "replyingTo": "Membalas kepada",
+ "input": {
+ "placeholder": "Tambah komen... (Enter untuk hantar)",
+ "charsLeft": "{{count}} aksara berbaki",
+ "charsLeft_one": "{{count}} aksara berbaki",
+ "charsLeft_other": "{{count}} aksara berbaki",
+ "charsLeft_few": "{{count}} aksara berbaki",
+ "charsLeft_many": "{{count}} aksara berbaki"
+ }
+ },
+ "workflowTimeline": {
+ "empty": "Tiada sejarah aliran kerja direkodkan",
+ "currentImplementationInterval": "Selang pelaksanaan semasa",
+ "implementationIntervalEnded": "Selang pelaksanaan berakhir pada peralihan ini",
+ "runningPrefix": "berjalan ",
+ "createdAs": "Dicipta sebagai",
+ "by": "oleh",
+ "reassigned": "Ditugaskan semula",
+ "assignedTo": "Ditugaskan kepada",
+ "unassignedFrom": "Dinyahtugaskan daripada",
+ "ownerChanged": "Pemilik ditukar",
+ "reviewRequested": "Semakan diminta",
+ "reviewStarted": "Semakan dimulakan",
+ "changesRequested": "Perubahan diminta",
+ "approved": "Diluluskan",
+ "unknownEvent": "Peristiwa tidak diketahui"
+ },
+ "reviewStates": {
+ "approved": "Diluluskan",
+ "needsFix": "Perlu pembetulan",
+ "inReview": "Dalam semakan"
+ }
+ },
+ "tasks": {
+ "createTask": {
+ "assignee": "Penerima tugas",
+ "assigneeOptional": "Penerima tugas (pilihan)",
+ "blockedByOptional": "Tugasan yang menyekat (pilihan)",
+ "blockedBySummary": "Tugasan akan disekat oleh: {{tasks}}",
+ "cancel": "Batal",
+ "create": "Cipta",
+ "creating": "Mencipta...",
+ "description": "Tugasan akan dicipta dalam direktori tasks/ pasukan dan muncul pada papan Kanban.",
+ "descriptionOptional": "Penerangan (pilihan)",
+ "detailsPlaceholder": "Butiran tugasan (menyokong markdown)",
+ "hideOptionalFields": "Sembunyi medan pilihan",
+ "offlineNotice": {
+ "after": "- lancarkan pasukan untuk memulakan pelaksanaan.",
+ "before": "Pasukan luar talian. Tugasan akan ditambah ke"
+ },
+ "promptOptional": "Prompt untuk penerima tugas (pilihan)",
+ "promptPlaceholder": "Arahan tersuai untuk ahli pasukan...",
+ "relatedOptional": "Tugasan berkaitan (pilihan)",
+ "relatedSummary": "Berkaitan: {{tasks}}",
+ "saved": "Disimpan",
+ "searchTasks": "Cari tugasan...",
+ "selectMember": "Pilih ahli",
+ "selectMemberOptional": "Pilih ahli...",
+ "showOptionalFields": "Tunjuk medan pilihan",
+ "startImmediately": "Mula serta-merta",
+ "startOfflineHint": "Pasukan luar talian. Lancarkan pasukan dahulu untuk memulakan tugasan serta-merta.",
+ "subject": "Subjek",
+ "subjectPlaceholder": "Apa yang perlu dilakukan?",
+ "title": "Cipta Tugasan",
+ "todo": "PERLU DIBUAT"
+ },
+ "list": {
+ "columns": {
+ "blockedBy": "Disekat Oleh",
+ "blocks": "Menyekat",
+ "id": "ID",
+ "owner": "Pemilik",
+ "status": "Status",
+ "subject": "Subjek"
+ },
+ "empty": "Tiada tugasan dalam pasukan ini",
+ "filters": {
+ "allOwners": "Semua pemilik",
+ "allStatuses": "Semua status",
+ "ownerAria": "Tapis tugasan mengikut pemilik",
+ "statusAria": "Tapis tugasan mengikut status"
+ },
+ "showing": "Memaparkan {{shown}} daripada {{total}}"
+ },
+ "status": {
+ "completed": "completed",
+ "deleted": "deleted",
+ "inProgress": "in_progress",
+ "pending": "pending"
+ },
+ "statusSummary": {
+ "progressAria": "Tugasan {{completed}}/{{total}} selesai",
+ "inProgress": "{{count}} in_progress",
+ "inProgress_one": "{{count}} in_progress",
+ "inProgress_other": "{{count}} in_progress",
+ "inProgress_few": "{{count}} in_progress",
+ "inProgress_many": "{{count}} in_progress",
+ "pending": "{{count}} pending",
+ "pending_one": "{{count}} pending",
+ "pending_other": "{{count}} pending",
+ "pending_few": "{{count}} pending",
+ "pending_many": "{{count}} pending",
+ "completed": "{{count}} completed",
+ "completed_one": "{{count}} completed",
+ "completed_other": "{{count}} completed",
+ "completed_few": "{{count}} completed",
+ "completed_many": "{{count}} completed"
+ },
+ "unassigned": "Tidak ditugaskan",
+ "teamPrefix": "Pasukan:",
+ "openTask": "Buka tugasan",
+ "deleteConfirm": {
+ "title": "Padam tugasan",
+ "message": "Alihkan tugasan #{{taskId}} ke tong sampah?",
+ "confirmLabel": "Padam",
+ "cancelLabel": "Batal"
+ }
+ },
+ "editor": {
+ "actions": {
+ "cancel": "Batal",
+ "closeEditor": "Tutup editor",
+ "closeTab": "Tutup tab",
+ "closeTooltip": "Tutup editor (Esc)",
+ "discard": "Buang",
+ "discardAndClose": "Buang & Tutup",
+ "keep": "Kekalkan",
+ "keepMine": "Kekalkan milik saya",
+ "keyboardShortcuts": "Pintasan papan kekunci",
+ "overwrite": "Tulis ganti",
+ "refreshAria": "Segar semula (F5)",
+ "refreshTooltip": "Segar semula status git (F5)",
+ "reload": "Muat semula",
+ "retry": "Cuba lagi",
+ "save": "Simpan",
+ "saveAllAndClose": "Simpan Semua & Tutup"
+ },
+ "ariaLabel": "Editor Projek",
+ "dialogs": {
+ "conflictDescription": "Fail telah diubah suai secara luaran sejak anda membukanya. Tulis ganti dengan perubahan anda?",
+ "conflictTitle": "Konflik Simpan",
+ "unsavedDescription": "Anda mempunyai perubahan yang belum disimpan. Apa yang anda ingin lakukan?",
+ "unsavedFileDescription": "Fail ini mempunyai perubahan yang belum disimpan. Apa yang anda ingin lakukan?",
+ "unsavedTitle": "Perubahan Belum Disimpan"
+ },
+ "newFile": {
+ "validation": {
+ "nameRequired": "Nama tidak boleh kosong",
+ "invalidName": "Nama tidak sah",
+ "invalidCharacters": "Nama mengandungi aksara tidak sah",
+ "nameTooLong": "Nama terlalu panjang"
+ },
+ "placeholders": {
+ "fileName": "Nama fail...",
+ "folderName": "Nama folder..."
+ },
+ "aria": {
+ "newFileName": "Nama fail baharu",
+ "newFolderName": "Nama folder baharu"
+ }
+ },
+ "draftRecovered": "Memulihkan perubahan yang belum disimpan daripada sesi sebelumnya.",
+ "externalChange": {
+ "changed": "Fail ditukar pada cakera.",
+ "deleted": "Fail tidak lagi wujud pada cakera."
+ },
+ "saveFailed": "Penyimpanan gagal: {{error}}",
+ "sidebar": {
+ "explorer": "Penjelajah",
+ "hide": "Sembunyi bar sisi",
+ "hideWithShortcut": "Sembunyi bar sisi ({{shortcut}})",
+ "show": "Tunjuk bar sisi",
+ "showWithShortcut": "Tunjuk bar sisi ({{shortcut}})"
+ },
+ "searchInFiles": {
+ "title": "Cari dalam Fail",
+ "closeSearch": "Tutup carian",
+ "closeSearchShortcut": "Tutup carian (Esc)",
+ "searchPlaceholder": "Cari...",
+ "matchCase": "Padan Huruf Besar/Kecil",
+ "matchCaseToggle": "Aa",
+ "noResults": "Tiada hasil ditemui",
+ "resultsSummary": "{{count}} padanan dalam {{fileCount}} fail",
+ "resultsSummary_one": "{{count}} padanan dalam {{fileCount}} fail",
+ "truncated": "(dipangkas)",
+ "resultsSummary_few": "{{count}} padanan dalam {{fileCount}} fail",
+ "resultsSummary_many": "{{count}} padanan dalam {{fileCount}} fail",
+ "resultsSummary_other": "{{count}} padanan dalam {{fileCount}} fail"
+ },
+ "fileTree": {
+ "failedToLoadFiles": "Gagal memuatkan fail: {{error}}",
+ "loading": "Memuatkan fail...",
+ "empty": "Tiada fail ditemui",
+ "dropForProjectRoot": "Lepaskan di sini untuk akar projek",
+ "moveToTrash": "Alih ke Tong Sampah",
+ "moveToTrashConfirm": "Alih \"{{name}}\" ke Tong Sampah?",
+ "cancel": "Batal"
+ },
+ "goToLine": {
+ "title": "Pergi ke Baris",
+ "position": "(semasa: {{current}}, jumlah: {{total}})",
+ "placeholder": "Nombor baris, +ofset, -ofset, atau %",
+ "go": "Pergi"
+ },
+ "searchPanel": {
+ "previousMatch": "Padanan Sebelumnya",
+ "nextMatch": "Padanan Seterusnya",
+ "close": "Tutup",
+ "replacePlaceholder": "Ganti",
+ "replace": "Ganti",
+ "replaceNext": "Ganti Seterusnya",
+ "all": "Semua",
+ "replaceAll": "Ganti Semua"
+ },
+ "statusBar": {
+ "position": "Brs {{line}}, Kol {{col}}",
+ "enableWatcher": "Dayakan pemantau fail",
+ "disableWatcher": "Lumpuhkan pemantau fail",
+ "watch": "pantau",
+ "watching": "memantau",
+ "watchExternalChanges": "Pantau perubahan luaran",
+ "disableExternalWatcher": "Lumpuhkan pemantau perubahan luaran",
+ "encodingUtf8": "UTF-8",
+ "spaces": "Ruang: {{count}}"
+ },
+ "imagePreview": {
+ "loading": "Memuatkan pratonton...",
+ "openFullSize": "Buka pratonton saiz penuh",
+ "openSystemViewer": "Buka dalam Pemapar Sistem"
+ },
+ "quickOpen": {
+ "title": "Buka Pantas",
+ "searchPlaceholder": "Cari fail mengikut nama...",
+ "loading": "Memuatkan fail...",
+ "empty": "Tiada fail ditemui"
+ },
+ "errorBoundary": {
+ "crashed": "Editor terhempas",
+ "unknownError": "Ralat tidak diketahui"
+ },
+ "binaryPlaceholder": {
+ "file": "Fail binari ({{size}})"
+ },
+ "unsavedChanges": "Perubahan belum disimpan",
+ "empty": {
+ "selectFile": "Pilih fail daripada pohon untuk disunting"
+ },
+ "search": {
+ "toggleReplace": "Togol Ganti",
+ "placeholder": "Cari"
+ },
+ "shortcuts": {
+ "title": "Pintasan Papan Kekunci",
+ "groups": {
+ "fileOperations": "Operasi Fail",
+ "search": "Carian",
+ "navigation": "Navigasi",
+ "editing": "Penyuntingan",
+ "markdown": "Markdown",
+ "general": "Umum"
+ },
+ "actions": {
+ "quickOpen": "Buka Pantas",
+ "save": "Simpan",
+ "saveAll": "Simpan Semua",
+ "closeTab": "Tutup Tab",
+ "findInFile": "Cari dalam Fail",
+ "searchInFiles": "Cari dalam Fail",
+ "goToLine": "Pergi ke Baris",
+ "nextTab": "Tab Seterusnya",
+ "previousTab": "Tab Sebelumnya",
+ "cycleTabs": "Kitar Tab",
+ "toggleSidebar": "Togol Bar Sisi",
+ "undo": "Buat asal",
+ "redo": "Buat semula",
+ "selectNextMatch": "Pilih Padanan Seterusnya",
+ "toggleComment": "Togol Komen",
+ "splitPreview": "Pisah Pratonton",
+ "fullPreview": "Pratonton Penuh",
+ "closeEditor": "Tutup Editor"
+ }
+ },
+ "toolbar": {
+ "enableWordWrap": "Dayakan balut perkataan",
+ "disableWordWrap": "Lumpuhkan balut perkataan",
+ "closeSplitPreview": "Tutup pratonton pisah",
+ "closePreview": "Tutup pratonton"
+ }
+ },
+ "launch": {
+ "actions": {
+ "createSchedule": "Cipta Jadual",
+ "creating": "Mencipta...",
+ "goToDashboard": "Pergi ke Papan Pemuka",
+ "launchTeam": "Lancarkan pasukan",
+ "launching": "Melancarkan...",
+ "relaunchTeam": "Lancarkan semula pasukan",
+ "relaunching": "Melancarkan semula...",
+ "saveChanges": "Simpan Perubahan",
+ "saving": "Menyimpan..."
+ },
+ "billing": {
+ "prefix": "Bermula 15 Jun 2026, Anthropic mengenakan bil",
+ "readArticle": "Baca artikel Anthropic",
+ "suffix": "dan penggunaan Agent SDK daripada kredit Agent SDK bulanan, berasingan daripada had interaktif Claude Code. Kredit ditetapkan semula setiap kitaran pengebilan dan kredit yang tidak digunakan tidak dibawa ke hadapan."
+ },
+ "conflict": {
+ "description": "Menjalankan dua pasukan dalam direktori yang sama adalah berisiko - ia mungkin bercanggah menyunting fail yang sama. Pertimbangkan untuk menggunakan direktori berbeza atau worktree git untuk pengasingan.",
+ "title": "Pasukan lain \"{{team}}\" sudah berjalan untuk direktori kerja ini",
+ "workingDirectory": "Direktori kerja:"
+ },
+ "description": {
+ "createSchedule": "Jadualkan pelaksanaan tugasan Claude automatik",
+ "createScheduleForTeam": "Jadualkan larian automatik untuk pasukan \"{{team}}\"",
+ "editSchedule": "Menyunting jadual untuk pasukan \"{{team}}\"",
+ "launchPrefix": "Mulakan pasukan",
+ "launchSuffix": "melalui Claude CLI tempatan.",
+ "relaunchPrefix": "Hentikan larian semasa untuk",
+ "relaunchSuffix": "dan mulakannya semula melalui Claude CLI tempatan."
+ },
+ "prepare": {
+ "action": {
+ "launch": "lancar",
+ "relaunch": "lancar semula"
+ },
+ "blocked": "Persekitaran runtime tidak tersedia - {{action}} disekat",
+ "checkingProviders": "Menyemak pembekal yang dipilih...",
+ "failed": "Gagal menyediakan pembekal yang dipilih",
+ "preflight": "Semakan pra-terbang untuk menangkap ralat sebelum {{action}}",
+ "preparingEnvironment": "Menyediakan persekitaran...",
+ "ready": "Semua pembekal yang dipilih sedia.",
+ "readyWithNotes": "Semua pembekal yang dipilih sedia, dengan nota.",
+ "unsupportedPreload": "Versi preload semasa tidak menyokong team:prepareProvisioning. Mulakan semula aplikasi dev.",
+ "selectWorkingDirectory": "Pilih direktori kerja untuk mengesahkan persekitaran pelancaran.",
+ "someProvidersNeedAttention": "Sesetengah pembekal yang dipilih memerlukan perhatian."
+ },
+ "prompt": {
+ "label": "Prompt",
+ "oneShotPrefix": "Prompt ini akan dihantar kepada",
+ "oneShotSuffix": "untuk pelaksanaan sekali sahaja",
+ "saved": "Disimpan",
+ "schedulePlaceholder": "Arahan untuk Claude laksanakan mengikut jadual...",
+ "teamLeadOptional": "Prompt untuk ketua pasukan (pilihan)",
+ "teamLeadPlaceholder": "Arahan untuk ketua pasukan..."
+ },
+ "providerChanged": "Pembekal ditukar daripada {{from}} kepada {{to}}. Sesi ketua sebelumnya tidak akan disambung semula, dan ketua akan bermula dengan konteks baharu supaya runtime baharu diterapkan dengan betul.",
+ "relaunchFreshSession": "Pelancaran semula pasukan memulakan sesi ketua yang baharu. Keadaan pasukan kekal, papan tugasan, dan konfigurasi ahli dihidrat semula ke dalam prompt pelancaran.",
+ "relaunchWarning": {
+ "description": "Menyimpan tetapan ini akan menghentikan proses pasukan semasa, mengekalkan senarai yang dikemas kini, dan melancarkan pasukan semula dengan runtime baharu.",
+ "title": "Pelancaran semula akan memulakan semula larian pasukan semasa"
+ },
+ "schedule": {
+ "labelOptional": "Label (pilihan)",
+ "labelPlaceholder": "cth., Semakan kod harian, Ujian malam...",
+ "maxBudgetUsd": "Belanjawan maksimum (USD)",
+ "maxTurns": "Giliran maksimum",
+ "noLimit": "Tiada had",
+ "noMatches": "Tiada pasukan sepadan dengan carian anda.",
+ "noTeams": "Tiada pasukan tersedia. Cipta pasukan dahulu.",
+ "searchTeams": "Cari pasukan...",
+ "selectTeam": "Pilih pasukan...",
+ "team": "Pasukan",
+ "title": "Jadual"
+ },
+ "title": {
+ "createSchedule": "Cipta Jadual",
+ "editSchedule": "Sunting Jadual",
+ "launch": "Lancarkan Pasukan",
+ "relaunch": "Lancarkan Semula Pasukan"
+ },
+ "errors": {
+ "loadProjectsFailed": "Gagal memuatkan projek",
+ "saveScheduleFailed": "Gagal menyimpan jadual",
+ "relaunchFailed": "Gagal melancarkan semula pasukan",
+ "launchFailed": "Gagal melancarkan pasukan"
+ },
+ "validation": {
+ "openCodeLeadModelRequired": "Ketua OpenCode memerlukan model yang dipilih.",
+ "openCodeTeammateRequired": "Ketua OpenCode memerlukan sekurang-kurangnya satu rakan pasukan OpenCode.",
+ "selectWorkingDirectory": "Pilih direktori kerja (cwd)",
+ "fixMemberNames": "Betulkan nama ahli sebelum pelancaran",
+ "memberNamesUnique": "Nama ahli mesti unik sebelum pelancaran"
+ },
+ "optionalSettings": {
+ "relaunchTitle": "Tetapan pelancaran semula",
+ "title": "Tetapan pelancaran pilihan",
+ "relaunchDescription": "Semak senarai dan runtime ketua sebelum memulakan semula pasukan.",
+ "description": "Kekalkan aliran pelancaran fokus pada laluan projek dan kembangkan ini hanya apabila anda mahukan kawalan tambahan."
+ }
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Salin pasukan",
+ "createTeam": "Cipta Pasukan",
+ "deleteForever": "Padam selama-lamanya",
+ "deletePermanently": "Padam secara kekal",
+ "deleteTeam": "Padam pasukan",
+ "launching": "Melancarkan...",
+ "launchTeam": "Lancarkan pasukan",
+ "relaunchTeam": "Lancarkan semula pasukan",
+ "restore": "Pulihkan",
+ "restoreTeam": "Pulihkan pasukan",
+ "retry": "Cuba lagi",
+ "stopTeam": "Hentikan pasukan",
+ "stopping": "Menghentikan..."
+ },
+ "electronOnly": {
+ "description": "Dalam mod pelayar, akses ke direktori `~/.claude/teams` tempatan tidak tersedia.",
+ "title": "Pasukan hanya tersedia dalam mod Electron"
+ },
+ "empty": {
+ "description": "Cipta pasukan di sini untuk bermula. Ia akan muncul dalam senarai secara automatik.",
+ "localOnly": "Penciptaan pasukan hanya tersedia dalam mod Electron tempatan.",
+ "title": "Tiada pasukan ditemui"
+ },
+ "filter": {
+ "clearAll": "Kosongkan semua",
+ "label": "Tapis pasukan",
+ "projectPriority": "Keutamaan projek",
+ "status": "Status"
+ },
+ "loadFailed": "Gagal memuatkan pasukan",
+ "loading": "Memuatkan pasukan...",
+ "localOnly": "Hanya tersedia dalam mod Electron tempatan.",
+ "membersCount": "Ahli: {{count}}",
+ "membersCount_few": "Ahli: {{count}}",
+ "membersCount_many": "Ahli: {{count}}",
+ "membersCount_one": "Ahli: {{count}}",
+ "membersCount_other": "Ahli: {{count}}",
+ "noDescription": "Tiada penerangan",
+ "noMatches": "Tiada pasukan sepadan dengan penapis semasa",
+ "partial": {
+ "pending": "Pelancaran terakhir masih diselaraskan.",
+ "skipped": "Pelancaran terakhir mempunyai rakan pasukan yang dilangkau.",
+ "skippedWithCount": "Pelancaran terakhir melangkau {{count}}/{{expected}} rakan pasukan.",
+ "skippedWithCount_few": "Pelancaran terakhir melangkau {{count}}/{{expected}} rakan pasukan.",
+ "skippedWithCount_many": "Pelancaran terakhir melangkau {{count}}/{{expected}} rakan pasukan.",
+ "skippedWithCount_one": "Pelancaran terakhir melangkau {{count}}/{{expected}} rakan pasukan.",
+ "skippedWithCount_other": "Pelancaran terakhir melangkau {{count}}/{{expected}} rakan pasukan.",
+ "stopped": "Pelancaran terakhir dihentikan sebelum semua rakan pasukan menyertai.",
+ "stoppedWithCount": "Pelancaran terakhir dihentikan sebelum {{count}}/{{expected}} rakan pasukan menyertai.",
+ "stoppedWithCount_few": "Pelancaran terakhir dihentikan sebelum {{count}}/{{expected}} rakan pasukan menyertai.",
+ "stoppedWithCount_many": "Pelancaran terakhir dihentikan sebelum {{count}}/{{expected}} rakan pasukan menyertai.",
+ "stoppedWithCount_one": "Pelancaran terakhir dihentikan sebelum {{count}}/{{expected}} rakan pasukan menyertai.",
+ "stoppedWithCount_other": "Pelancaran terakhir dihentikan sebelum {{count}}/{{expected}} rakan pasukan menyertai."
+ },
+ "searchPlaceholder": "Cari pasukan...",
+ "sections": {
+ "otherTeams": "Pasukan lain",
+ "projectTeams": "Pasukan untuk {{project}}",
+ "selectedProject": "projek yang dipilih"
+ },
+ "solo": "Solo",
+ "status": {
+ "active": "Aktif",
+ "deleted": "Dipadam",
+ "launching": "Melancarkan...",
+ "offline": "Luar talian",
+ "partialFailure": "Pelancaran gagal di pertengahan",
+ "partialPending": "Bootstrap tertangguh",
+ "partialSkipped": "Pelancaran melangkau ahli",
+ "running": "Berjalan"
+ },
+ "title": "Pilih Pasukan",
+ "trash": "Tong Sampah ({{count}})",
+ "trash_few": "Tong Sampah ({{count}})",
+ "trash_many": "Tong Sampah ({{count}})",
+ "trash_one": "Tong Sampah ({{count}})",
+ "trash_other": "Tong Sampah ({{count}})",
+ "deleteDraft": {
+ "title": "Padam draf",
+ "message": "Padam pasukan draf \"{{teamName}}\"? Ini tidak boleh dibuat asal.",
+ "confirmLabel": "Padam",
+ "cancelLabel": "Batal"
+ },
+ "moveToTrash": {
+ "title": "Alih ke tong sampah",
+ "message": "Alih pasukan \"{{teamName}}\" ke tong sampah? Anda boleh memulihkannya kemudian.",
+ "confirmLabel": "Alih ke tong sampah",
+ "cancelLabel": "Batal"
+ },
+ "deleteForever": {
+ "title": "Padam secara kekal",
+ "message": "Padam pasukan \"{{teamName}}\" secara kekal? Semua data akan hilang.",
+ "confirmLabel": "Padam selama-lamanya",
+ "cancelLabel": "Batal"
+ }
+ },
+ "messageComposer": {
+ "crossTeam": {
+ "hint": "Petua: Mesej merentas pasukan pergi ke ketua pasukan sasaran. Jika anda mahu balasan kembali kepada ketua pasukan anda dan bukannya anda, nyatakannya secara eksplisit dalam mesej."
+ },
+ "attachments": {
+ "attachFiles": "Lampirkan fail (tampal atau seret & lepas)",
+ "unavailable": "Lampiran tidak tersedia",
+ "disabledHint": "Lampiran fail disokong untuk ketua pasukan dalam talian dan rakan pasukan OpenCode dalam talian. Buang lampiran atau tukar penerima.",
+ "restrictions": {
+ "crossTeam": "Lampiran fail tidak disokong untuk mesej merentas pasukan",
+ "teamOffline": "Pasukan mesti dalam talian untuk melampirkan fail",
+ "unsupportedRecipient": "Fail boleh dihantar kepada ketua pasukan atau rakan pasukan OpenCode",
+ "openCodeOffline": "Pasukan mesti dalam talian untuk melampirkan fail bagi rakan pasukan OpenCode",
+ "sending": "Tunggu mesej semasa selesai dihantar sebelum menambah fail",
+ "maximumReached": "Lampiran maksimum dicapai",
+ "leadOnly": "Fail hanya boleh dihantar kepada ketua pasukan"
+ }
+ },
+ "slash": {
+ "restrictions": {
+ "attachments": "Arahan slash memerlukan ketua pasukan langsung dan tidak boleh dihantar dengan lampiran",
+ "crossTeam": "Arahan slash hanya boleh dijalankan pada ketua pasukan semasa",
+ "notLead": "Arahan slash hanya boleh dihantar kepada ketua pasukan",
+ "leadOffline": "Arahan slash memerlukan ketua pasukan dalam talian"
+ }
+ },
+ "status": {
+ "reusedCrossTeamRequest": "Menggunakan semula permintaan merentas pasukan terkini",
+ "teamOffline": "Pasukan luar talian"
+ },
+ "revision": {
+ "editing": "Menyunting mesej sebelumnya",
+ "cancel": "Batal",
+ "tooltip": "Minta agen mengabaikan mesej sebelumnya dan memulihkannya ke penggubah."
+ },
+ "input": {
+ "charsLeft": "{{count}} aksara berbaki",
+ "charsLeft_one": "{{count}} aksara berbaki",
+ "charsLeft_other": "{{count}} aksara berbaki",
+ "teamLaunchingPlaceholder": "Pasukan sedang dilancarkan... mesej akan dibaris gilir untuk penghantaran peti masuk.",
+ "crossTeamPlaceholder": "Mesej merentas pasukan ke {{team}}...",
+ "teamFallback": "pasukan",
+ "placeholder": "Tulis mesej... (Enter untuk hantar, Shift+Enter untuk baris baharu)",
+ "slashTip": "Petua: Anda boleh gunakan \"/\" untuk menjalankan sebarang arahan Claude.",
+ "charsLeft_few": "{{count}} aksara berbaki",
+ "charsLeft_many": "{{count}} aksara berbaki"
+ },
+ "teamSelector": {
+ "thisTeam": "Pasukan ini",
+ "current": "semasa",
+ "online": "dalam talian",
+ "offline": "luar talian",
+ "onlineTitle": "Dalam talian",
+ "offlineTitle": "Luar talian"
+ },
+ "recipient": {
+ "select": "Pilih...",
+ "searchPlaceholder": "Cari...",
+ "noResults": "Tiada hasil"
+ },
+ "actions": {
+ "voiceToText": "Suara ke teks",
+ "send": "Hantar",
+ "sendingUnavailableLaunching": "Penghantaran tidak tersedia semasa pasukan sedang dilancarkan"
+ }
+ },
+ "claudeLogs": {
+ "filter": {
+ "ariaLabel": "Tapis log",
+ "tooltip": "Tapis log",
+ "sections": {
+ "stream": "Strim",
+ "content": "Kandungan"
+ },
+ "kinds": {
+ "output": "Output",
+ "thinking": "Pemikiran",
+ "tool": "Panggilan alat"
+ },
+ "actions": {
+ "reset": "Tetap semula",
+ "save": "Simpan"
+ },
+ "streams": {
+ "stdout": "stdout",
+ "stderr": "stderr"
+ }
+ },
+ "rawLineCount": "{{formattedCount}} baris mentah",
+ "rawLineCount_one": "{{formattedCount}} baris mentah",
+ "rawLinesCaptured": "{{count}} ditangkap",
+ "emptyRawLogs": "{{count}}; tiada yang merupakan output pembantu/alat lagi.",
+ "noLogsYet": "Belum ada log.",
+ "teamNotRunning": "Pasukan tidak berjalan.",
+ "searchPlaceholder": "Cari log...",
+ "clearSearch": "Kosongkan carian",
+ "newCount": "+{{count}} baharu",
+ "loading": "Memuatkan...",
+ "showMore": "Tunjuk lebih banyak",
+ "noLogsCaptured": "Tiada log ditangkap.",
+ "noMatchingLogs": "Tiada log yang sepadan.",
+ "rawLineCount_few": "{{formattedCount}} baris mentah",
+ "rawLineCount_many": "{{formattedCount}} baris mentah",
+ "rawLineCount_other": "{{formattedCount}} baris mentah",
+ "openFullscreen": "Buka log skrin penuh",
+ "fullscreen": "Skrin penuh",
+ "viewingFullscreen": "Melihat dalam mod skrin penuh",
+ "logsTitle": "Log",
+ "sourceSelect": {
+ "placeholder": "Pilih sumber log...",
+ "searchPlaceholder": "Cari sumber log...",
+ "emptyMessage": "Tiada sumber log ditemui.",
+ "ariaLabel": "Sumber log",
+ "leadLabel": "Ketua",
+ "selectSourceEmpty": "Pilih sumber log.",
+ "leadDescription": "Ketua Pasukan",
+ "removedLabel": "dibuang",
+ "removedDescription": "Dibuang"
+ }
+ },
+ "agentGraph": {
+ "popover": {
+ "externalTeam": "Pasukan luaran",
+ "process": {
+ "startedBy": "Dimulakan oleh:",
+ "at": "Pada:",
+ "openUrl": "Buka URL"
+ },
+ "overflow": {
+ "hiddenTasks": "Tugasan tersembunyi",
+ "empty": "Tiada tugasan tersembunyi tersedia."
+ },
+ "member": {
+ "lead": "Ketua",
+ "workingOn": "sedang mengerjakan",
+ "recentTools": "Alat terkini",
+ "spawn": {
+ "waitingToStart": "menunggu untuk bermula",
+ "starting": "memulakan",
+ "failed": "gagal"
+ },
+ "state": {
+ "active": "aktif",
+ "idle": "melahu",
+ "offline": "luar talian",
+ "runningTool": "menjalankan alat"
+ },
+ "activeTool": {
+ "running": "Menjalankan alat",
+ "failed": "Alat gagal",
+ "finished": "Alat selesai"
+ },
+ "actions": {
+ "message": "Mesej",
+ "profile": "Profil",
+ "task": "Tugasan"
+ }
+ }
+ },
+ "logPreview": {
+ "logs": "Log",
+ "loading": "Memuatkan log",
+ "more": "+{{count}} lagi",
+ "more_one": "+{{count}} lagi",
+ "more_other": "+{{count}} lagi",
+ "more_few": "+{{count}} lagi",
+ "more_many": "+{{count}} lagi",
+ "unsupportedProvider": "Pembekal tidak disokong",
+ "openCodeLogsDelayed": "Log OpenCode ditangguhkan",
+ "logsUnavailable": "Log tidak tersedia",
+ "noRecentLogs": "Tiada log terkini",
+ "toolError": "Ralat alat",
+ "toolResult": "Hasil alat",
+ "toolUse": "Penggunaan alat",
+ "thinking": "Pemikiran",
+ "error": "Ralat",
+ "logEvent": "Peristiwa log",
+ "noErrorOutput": "Tiada output ralat",
+ "noOutput": "Tiada output",
+ "noInput": "Tiada input"
+ },
+ "blockingEdge": {
+ "title": "Kebergantungan Menyekat",
+ "blocks": "menyekat",
+ "close": "Tutup",
+ "blockingHiddenTasks": "Tugasan tersembunyi yang menyekat",
+ "blockedHiddenTasks": "Tugasan tersembunyi yang disekat",
+ "links_one": "{{count}} pautan",
+ "links_other": "{{count}} pautan",
+ "hiddenBlockingLinks_one": "{{count}} pautan menyekat tersembunyi",
+ "hiddenBlockingLinks_other": "{{count}} pautan menyekat tersembunyi",
+ "hiddenTaskStack": "Tindanan tugasan tersembunyi",
+ "hiddenTasks_one": "{{count}} tugasan tersembunyi",
+ "hiddenTasks_other": "{{count}} tugasan tersembunyi",
+ "task": "Tugasan",
+ "openBlockerStack": "Buka tindanan penyekat",
+ "openBlockedStack": "Buka tindanan disekat",
+ "openBlockerTask": "Buka tugasan penyekat",
+ "openBlockedTask": "Buka tugasan disekat"
+ },
+ "activityHud": {
+ "activity": "Aktiviti",
+ "noRecentActivity": "Tiada aktiviti terkini",
+ "more": "+{{count}} lagi",
+ "more_one": "+{{count}} lagi",
+ "more_other": "+{{count}} lagi",
+ "more_few": "+{{count}} lagi",
+ "more_many": "+{{count}} lagi"
+ },
+ "provisioning": {
+ "launchDetails": "Butiran pelancaran",
+ "launchDetailsDescription": "Kemajuan pelancaran pasukan terperinci, output langsung dan log CLI."
+ }
+ },
+ "projectPath": {
+ "label": "Projek",
+ "source": {
+ "claude": "Ditemui oleh Claude",
+ "codex": "Ditemui oleh Codex",
+ "mixed": "Ditemui oleh Claude dan Codex"
+ },
+ "deleted": {
+ "title": "Folder projek tidak lagi wujud",
+ "label": "Dipadam"
+ },
+ "mode": {
+ "projectList": "Daripada senarai projek",
+ "customPath": "Laluan tersuai"
+ },
+ "loadingProjects": "Memuatkan projek...",
+ "selectProject": "Pilih projek...",
+ "searchPlaceholder": "Cari projek mengikut nama atau laluan",
+ "empty": "Tiada apa-apa ditemui",
+ "selectFromList": "Pilih projek daripada senarai",
+ "noProjects": "Tiada projek ditemui, beralih ke laluan tersuai.",
+ "customWorkingDirectory": "Direktori kerja tersuai",
+ "browse": "Layari",
+ "createAutomatically": "Jika direktori tidak wujud, ia akan dicipta secara automatik."
+ },
+ "members": {
+ "badges": {
+ "worktree": "worktree"
+ },
+ "runtimeTelemetry": {
+ "title": "Beban runtime tempatan",
+ "description": "Proses induk dan anak sahaja. Inferens LLM jauh tidak disertakan.",
+ "cpu": "CPU",
+ "memory": "Memori",
+ "summedRss": "RSS terjumlah",
+ "sharedHost": "Metrik hos OpenCode dikongsi. Ia tidak eksklusif kepada ahli ini.",
+ "processTreeCapped": "Pohon proses dihadkan untuk sampel ini.",
+ "rssHint": "RSS boleh termasuk halaman yang dikongsi, jadi ia paling baik dibaca sebagai isyarat beban, bukan memori eksklusif."
+ },
+ "editor": {
+ "title": "Ahli",
+ "addMember": "Tambah ahli",
+ "editAsJson": "Sunting sebagai JSON",
+ "runInSeparateWorktrees": "Jalankan rakan pasukan dalam worktree berasingan",
+ "agentTeamsMcpOnly": "Agent Teams MCP sahaja",
+ "removedCount": "Dibuang ({{count}})",
+ "removedModelLockReason": "Ahli yang dibuang dikekalkan untuk sejarah padam lembut. Pulihkan mereka untuk menyunting tetapan.",
+ "memberNamesUnique": "Nama ahli mesti unik"
+ },
+ "stats": {
+ "computing": "Mengira statistik...",
+ "empty": "Tiada statistik tersedia",
+ "lines": "Baris",
+ "linesInfo": "Anggaran. Tepat untuk alat Edit dan Write. Penulisan fail Bash dianggarkan daripada corak arahan (heredoc, echo, sed) dan mungkin kurang dilaporkan.",
+ "files": "Fail",
+ "toolCalls": "Panggilan Alat",
+ "tokens": "Token",
+ "toolUsage": "Penggunaan Alat",
+ "filesTouched": "Fail Disentuh ({{count}})",
+ "viewAllChanges": "Lihat Semua Perubahan",
+ "showLess": "Tunjuk kurang",
+ "moreFiles": "+{{count}} lagi",
+ "footer": "{{count}} sesi · dikira {{computedAgo}}",
+ "footer_one": "{{count}} sesi · dikira {{computedAgo}}",
+ "footer_few": "{{count}} sesi · dikira {{computedAgo}}",
+ "footer_many": "{{count}} sesi · dikira {{computedAgo}}",
+ "footer_other": "{{count}} sesi · dikira {{computedAgo}}"
+ },
+ "logs": {
+ "searching": "Mencari log...",
+ "empty": "Tiada log ditemui",
+ "waitingForTaskActivity": "Tugasan sedang dijalankan - menunggu aktiviti sesi (menyegar auto)...",
+ "noTaskActivity": "Belum ada aktiviti sesi untuk tugasan ini",
+ "noMemberActivity": "Ahli ini belum mempunyai aktiviti sesi yang direkodkan",
+ "leadSessionTooltip": "Log sesi ketua pasukan penuh - berguna untuk konteks orkestrasi global, tidak khusus untuk agen ini",
+ "memberSessionTooltip": "Log sesi rakan pasukan kekal penuh - berguna apabila kerja berjalan dalam sesi ahli akar dan bukannya fail subagen",
+ "startedAt": "dimulakan {{time}}",
+ "active": "aktif",
+ "showDetails": "Tunjuk butiran",
+ "hideDetails": "Sembunyi butiran",
+ "loadingDetails": "Memuatkan butiran...",
+ "failedToLoadDetails": "Gagal memuatkan butiran"
+ },
+ "detail": {
+ "relaunchOpenCode": "Lancarkan semula OpenCode",
+ "restart": "Mulakan semula",
+ "legacyLogsFallback": "Sandaran Log Legasi",
+ "copyDiagnostics": "Salin diagnostik",
+ "pid": "PID {{pid}}",
+ "removedAt": "Dibuang {{date}}",
+ "failedToRestartMember": "Gagal memulakan semula ahli",
+ "sendMessage": "Hantar Mesej",
+ "assignTask": "Tugaskan Tugasan",
+ "remove": "Buang"
+ },
+ "list": {
+ "loading": "Memuatkan ahli pasukan",
+ "unavailable": "Senarai ahli tidak tersedia",
+ "unavailableDescription": "{{count}} rakan pasukan diketahui daripada metadata pasukan, tetapi butiran senarai hilang.",
+ "unavailableDescription_one": "{{count}} rakan pasukan diketahui daripada metadata pasukan, tetapi butiran senarai hilang.",
+ "soloLeadOnly": "Pasukan solo - ketua sahaja",
+ "removedCount": "Dibuang ({{count}})",
+ "unavailableDescription_few": "{{count}} rakan pasukan diketahui daripada metadata pasukan, tetapi butiran senarai hilang.",
+ "unavailableDescription_many": "{{count}} rakan pasukan diketahui daripada metadata pasukan, tetapi butiran senarai hilang.",
+ "unavailableDescription_other": "{{count}} rakan pasukan diketahui daripada metadata pasukan, tetapi butiran senarai hilang."
+ },
+ "executionLog": {
+ "empty": "Tiada apa-apa untuk dipaparkan",
+ "emptyUserMessage": "{{time}} - (kosong)",
+ "agentInstructions": "Arahan agen",
+ "memberTurn": "Giliran {{member}}",
+ "agentTurn": "Giliran agen",
+ "turn": "giliran"
+ },
+ "recentMessages": {
+ "latest": "Mesej terkini",
+ "latestForMember": "Mesej terkini - {{member}}",
+ "loadMore": "Muat lagi",
+ "expand": "Kembangkan",
+ "collapse": "Runtuhkan"
+ },
+ "leadModel": {
+ "defaultModel": "Lalai",
+ "providerModelAria": "Pembekal {{provider}}, {{model}}",
+ "leadShort": "ketua",
+ "teamLead": "Ketua Pasukan",
+ "syncWithTeammates": "Segerakkan model dengan rakan pasukan",
+ "anthropicTeamWide": "Anthropic seluruh pasukan",
+ "runtimeInheritance": "Runtime ketua terpakai kepada rakan pasukan melainkan mereka menetapkan pembekal atau model sendiri.",
+ "anthropicContextLimit": "Had konteks 200K adalah seluruh pasukan untuk runtime Anthropic dalam pelancaran ini, termasuk rakan pasukan Anthropic tersuai."
+ },
+ "runtimeLogs": {
+ "autoRefresh": "Segar auto",
+ "wrapLines": "Balut baris",
+ "loadingTail": "Memuatkan ekor log proses...",
+ "empty": "Belum ada fail log proses ditangkap untuk ahli ini.",
+ "copy": "Salin",
+ "fileEmpty": "Fail log proses kosong.",
+ "showingLast": "Memaparkan {{bytes}} terakhir.",
+ "showing": "Memaparkan {{bytes}}."
+ },
+ "tasks": {
+ "empty": "Tiada tugasan ditugaskan kepada ahli ini"
+ },
+ "messages": {
+ "loadOlder": "Muat mesej lebih lama",
+ "filters": {
+ "all": "Semua",
+ "messages": "Mesej",
+ "comments": "Komen"
+ },
+ "empty": {
+ "loading": "Memuatkan aktiviti...",
+ "noComments": "Tiada komen untuk ahli ini",
+ "noLoadedMessages": "Belum ada mesej dimuatkan untuk ahli ini",
+ "noMessages": "Tiada mesej dengan ahli ini",
+ "noLoadedActivity": "Belum ada aktiviti dimuatkan untuk ahli ini",
+ "noActivity": "Tiada aktiviti dengan ahli ini"
+ }
+ },
+ "actions": {
+ "openProfile": "Buka profil",
+ "editRole": "Sunting peranan",
+ "sendMessage": "Hantar mesej",
+ "assignTask": "Tugaskan tugasan"
+ },
+ "roleSelect": {
+ "customRolePlaceholder": "Masukkan peranan tersuai..."
+ }
+ },
+ "schedule": {
+ "count": "{{count}} jadual",
+ "count_one": "{{count}} jadual",
+ "count_other": "{{count}} jadual",
+ "nextRun": "Seterusnya: {{next}}",
+ "actions": {
+ "runNow": "Jalankan sekarang",
+ "edit": "Sunting",
+ "pause": "Jeda",
+ "resume": "Sambung semula",
+ "delete": "Padam",
+ "addSchedule": "Tambah Jadual"
+ },
+ "runHistory": {
+ "loading": "Memuatkan sejarah larian...",
+ "empty": "Belum ada larian"
+ },
+ "count_few": "{{count}} jadual",
+ "count_many": "{{count}} jadual",
+ "runLog": {
+ "title": "Log Larian",
+ "exitCode": "keluar {{code}}",
+ "retryCount": "cuba semula {{count}}/{{max}}",
+ "stillRunning": "Tugasan masih berjalan...",
+ "loadingLogs": "Memuatkan log...",
+ "errors": "Ralat",
+ "close": "Tutup"
+ },
+ "cron": {
+ "expression": "Ungkapan cron",
+ "highFrequencyWarning": "Jadual frekuensi tinggi (selang kurang daripada 5 minit)",
+ "nextRuns": "Larian seterusnya:",
+ "timezone": "Zon waktu",
+ "selectTimezone": "Pilih zon waktu",
+ "warmUpTime": "Masa pemanasan",
+ "warmUpDescription": "Menyediakan pembekal yang dipilih sebelum pelaksanaan berjadual",
+ "errors": {
+ "enterExpression": "Masukkan ungkapan cron",
+ "invalidExpression": "Ungkapan cron tidak sah"
+ },
+ "presets": {
+ "everyHour": "Setiap jam",
+ "everySixHours": "Setiap 6 jam",
+ "dailyAtNine": "Setiap hari pada 9 pagi",
+ "weekdaysAtNine": "Hari bekerja pada 9 pagi",
+ "mondayAtNine": "Isnin pada 9 pagi",
+ "everyThirtyMinutes": "Setiap 30 minit"
+ },
+ "warmUpOptions": {
+ "none": "Tiada pemanasan",
+ "fiveMinutes": "5 minit",
+ "tenMinutes": "10 minit",
+ "fifteenMinutes": "15 minit",
+ "thirtyMinutes": "30 minit"
+ }
+ },
+ "empty": {
+ "title": "Belum ada jadual",
+ "description": "Cipta jadual untuk menjalankan tugasan Claude secara automatik mengikut jadual cron."
+ },
+ "title": "Jadual",
+ "status": {
+ "active": "Aktif",
+ "paused": "Dijeda",
+ "disabled": "Dilumpuhkan"
+ },
+ "runStatus": {
+ "pending": "Tertangguh",
+ "warmingUp": "Memanaskan",
+ "warm": "Panas",
+ "running": "Berjalan",
+ "completed": "Selesai",
+ "failed": "Gagal",
+ "interrupted": "Terganggu",
+ "cancelled": "Dibatalkan"
+ }
+ },
+ "openCodeContextConfigHint": {
+ "summary": "Model OpenCode tempatan boleh menggunakan belanjawan konteks OpenCode dan bukannya had prompt sahaja.",
+ "description": "Tambah had yang sepadan kepada konfigurasi OpenCode untuk pembekal dan model yang digunakan oleh rakan pasukan ini. Ini membantu OpenCode memampatkan dan mencantas sebelum model tempatan melimpahi tetingkap konteks mereka.",
+ "replacePrefix": "Gantikan",
+ "and": "dan",
+ "replaceSuffix": "dengan ID pembekal dan model daripada persediaan OpenCode anda. Arahan prompt seperti",
+ "promptInstructionsSuffix": "adalah lebih lemah kerana permintaan dihimpunkan sebelum model membacanya.",
+ "providerLimits": "Had pembekal",
+ "compactionConfig": "Konfigurasi pemampatan"
+ },
+ "sessions": {
+ "noProjectPath": "Tiada laluan projek dipaut",
+ "provisioningHint": "Sesi akan muncul selepas peruntukan pasukan",
+ "projectNotFound": "Projek tidak ditemui",
+ "loading": "Memuatkan sesi...",
+ "empty": "Tiada sesi ditemui",
+ "showAllSessions": "Tunjuk untuk semua sesi",
+ "lead": "ketua",
+ "removeFilter": "Buang penapis",
+ "filterBySession": "Tapis mengikut sesi ini",
+ "openSession": "Buka sesi",
+ "title": "Sesi"
+ },
+ "provisioning": {
+ "pid": "PID {{pid}}",
+ "cancel": "Batal",
+ "moreWarningsHidden": "{{count}} amaran lagi disembunyikan",
+ "diagnostics": "Diagnostik",
+ "liveOutput": "Output langsung",
+ "diagnosticsCopied": "Diagnostik disalin",
+ "copyDiagnostics": "Salin diagnostik",
+ "copied": "Disalin",
+ "noOutput": "Belum ada output ditangkap.",
+ "cliLogs": "Log CLI",
+ "steps": {
+ "starting": "Memulakan",
+ "configuring": "Persediaan pasukan",
+ "assembling": "Ahli menyertai",
+ "finalizing": "Memuktamadkan"
+ },
+ "providerStatus": {
+ "status": {
+ "checking": "menyemak...",
+ "ready": "OK",
+ "notes": "OK (nota)",
+ "failed": "ERR",
+ "pending": "menunggu"
+ },
+ "detailSummary": {
+ "cliBinaryMissing": "Binari CLI hilang",
+ "openCodeRuntimeMissing": "Runtime OpenCode hilang",
+ "openCodeWindowsAccessBlocked": "Akses Windows OpenCode disekat",
+ "openCodeNoOutput": "Semakan runtime OpenCode tidak mengembalikan output",
+ "openCodeMcpUnreachable": "MCP aplikasi OpenCode tidak dapat dicapai",
+ "workingDirectoryMissing": "Direktori kerja hilang",
+ "cliBinaryCouldNotStart": "Binari CLI tidak dapat dimulakan",
+ "cliPreflightIncomplete": "Pra-terbang CLI tidak selesai",
+ "authenticationRequired": "Pengesahan diperlukan",
+ "runtimeProviderNotConfigured": "Pembekal runtime tidak dikonfigurasi",
+ "cliPreflightFailed": "Pra-terbang CLI gagal",
+ "selectedModelCompatible": "Model yang dipilih serasi",
+ "selectedModelCompatibilityPending": "Keserasian model yang dipilih tertangguh",
+ "selectedModelAvailable": "Model yang dipilih tersedia",
+ "selectedModelVerified": "Model yang dipilih disahkan",
+ "selectedModelUnavailable": "Model yang dipilih tidak tersedia",
+ "selectedModelTimedOut": "Pengesahan model yang dipilih tamat masa",
+ "selectedModelCheckFailed": "Semakan model yang dipilih gagal",
+ "selectedModelDeferred": "Pengesahan model yang dipilih ditangguhkan",
+ "selectedModelPingNotConfirmed": "Ping model yang dipilih tidak disahkan",
+ "readyWithNotes": "Sedia dengan nota",
+ "needsAttention": "Perlu perhatian"
+ },
+ "modelChecksSummary": "Semakan model yang dipilih - {{details}}",
+ "modelParts": {
+ "unavailable": "{{count}} model tidak tersedia",
+ "unavailable_one": "{{count}} model tidak tersedia",
+ "unavailable_other": "{{count}} model tidak tersedia",
+ "checkFailed": "{{count}} semakan model gagal",
+ "checkFailed_one": "{{count}} semakan model gagal",
+ "checkFailed_other": "{{count}} semakan model gagal",
+ "timedOut": "{{count}} model tamat masa",
+ "timedOut_one": "{{count}} model tamat masa",
+ "timedOut_other": "{{count}} model tamat masa",
+ "deferred": "{{count}} pengesahan ditangguhkan",
+ "deferred_one": "{{count}} pengesahan ditangguhkan",
+ "deferred_other": "{{count}} pengesahan ditangguhkan",
+ "pingNotConfirmed": "{{count}} ping tidak disahkan",
+ "pingNotConfirmed_one": "{{count}} ping tidak disahkan",
+ "pingNotConfirmed_other": "{{count}} ping tidak disahkan",
+ "compatibilityPending": "{{count}} serasi, pengesahan mendalam tertangguh",
+ "compatibilityPending_one": "{{count}} serasi, pengesahan mendalam tertangguh",
+ "compatibilityPending_other": "{{count}} serasi, pengesahan mendalam tertangguh",
+ "compatible": "{{count}} serasi",
+ "compatible_one": "{{count}} serasi",
+ "compatible_other": "{{count}} serasi",
+ "checking": "{{count}} menyemak",
+ "checking_one": "{{count}} menyemak",
+ "checking_other": "{{count}} menyemak",
+ "available": "{{count}} tersedia",
+ "available_one": "{{count}} tersedia",
+ "available_other": "{{count}} tersedia",
+ "verified": "{{count}} disahkan",
+ "verified_one": "{{count}} disahkan",
+ "verified_other": "{{count}} disahkan",
+ "unavailable_few": "{{count}} model tidak tersedia",
+ "unavailable_many": "{{count}} model tidak tersedia",
+ "checkFailed_few": "{{count}} semakan model gagal",
+ "checkFailed_many": "{{count}} semakan model gagal",
+ "timedOut_few": "{{count}} model tamat masa",
+ "timedOut_many": "{{count}} model tamat masa",
+ "deferred_few": "{{count}} pengesahan ditangguhkan",
+ "deferred_many": "{{count}} pengesahan ditangguhkan",
+ "pingNotConfirmed_few": "{{count}} ping tidak disahkan",
+ "pingNotConfirmed_many": "{{count}} ping tidak disahkan",
+ "compatibilityPending_few": "{{count}} serasi, pengesahan mendalam tertangguh",
+ "compatibilityPending_many": "{{count}} serasi, pengesahan mendalam tertangguh",
+ "compatible_few": "{{count}} serasi",
+ "compatible_many": "{{count}} serasi",
+ "checking_few": "{{count}} menyemak",
+ "checking_many": "{{count}} menyemak",
+ "available_few": "{{count}} tersedia",
+ "available_many": "{{count}} tersedia",
+ "verified_few": "{{count}} disahkan",
+ "verified_many": "{{count}} disahkan"
+ },
+ "openProviderSettings": "Buka tetapan {{provider}}",
+ "copied": "Disalin",
+ "copyDiagnostics": "Salin diagnostik",
+ "deepVerificationPending": "Pengesahan mendalam masih berjalan. Model OpenCode percuma mungkin mengambil masa sekitar 20 saat.",
+ "progress": {
+ "checkingSelectedProviders": "Menyemak pembekal yang dipilih secara selari...",
+ "checkingProvider": "Menyemak pembekal {{provider}}...",
+ "checkingProviders": "Menyemak pembekal {{providers}}..."
+ },
+ "failureHints": {
+ "openCodeAccessDenied": "Betulkan kebenaran folder atau alihkan projek ke folder yang boleh ditulis pengguna. Berjalan sebagai pentadbir hanyalah penyelesaian sementara.",
+ "openCodeBridgeNoOutput": "Mulakan semula aplikasi dan runtime OpenCode, kemudian cuba lagi. Jika berulang, salin diagnostik.",
+ "workingDirectoryMissing": "Pilih direktori kerja yang wujud, kemudian buka semula dialog ini.",
+ "authenticationRequired": "Sahkan pembekal yang diperlukan dalam Claude CLI, kemudian buka semula dialog ini.",
+ "runtimeProviderNotConfigured": "Konfigurasikan runtime pembekal yang dipilih, kemudian buka semula dialog ini.",
+ "openCodeRuntimeMissing": "Pasang atau cuba semula runtime OpenCode daripada kad status pembekal, kemudian buka semula dialog ini.",
+ "openCodeAppMcpUnreachable": "Cuba lancarkan semula untuk menyegarkan jambatan MCP aplikasi OpenCode. Jika berulang, mulakan semula aplikasi dan runtime OpenCode.",
+ "cliBinaryMissing": "Pastikan binari Claude CLI tempatan wujud dan boleh dimulakan, kemudian buka semula dialog ini.",
+ "default": "Selesaikan isu di atas, kemudian buka semula dialog ini.",
+ "openCodeNodeModulesSymlinkPermission": "Jalankan Agent Teams AI sebagai Pentadbir, kemudian cuba lancarkan semula."
+ }
+ },
+ "presentation": {
+ "awaitingPermission": "{{count}} rakan pasukan menunggu kelulusan kebenaran",
+ "nameListWithMore": "{{names}}, +{{count}} lagi",
+ "waitingForOpenCode": "Menunggu OpenCode: {{names}}",
+ "bootstrapStalled": "Bootstrap tergendala: {{names}}",
+ "bootstrapStalledWithOpenCodeWait": "{{stalled}}; Menunggu OpenCode: {{names}}",
+ "namedPendingDiagnostic": "{{label}}: {{names}}",
+ "countPendingDiagnostic": "{{count}} {{label}}",
+ "pendingLabels": {
+ "bootstrapStalled": "Bootstrap tergendala",
+ "shellOnly": "Shell sahaja",
+ "waitingForBootstrap": "Menunggu bootstrap",
+ "bootstrapUnconfirmed": "Bootstrap tidak disahkan",
+ "awaitingPermission": "Menunggu kebenaran",
+ "waitingForRuntime": "Menunggu runtime",
+ "shellOnlyLower": "shell sahaja",
+ "waitingForBootstrapLower": "menunggu bootstrap",
+ "bootstrapUnconfirmedLower": "bootstrap tidak disahkan",
+ "awaitingPermissionLower": "menunggu kebenaran",
+ "waitingForRuntimeLower": "menunggu runtime"
+ },
+ "failed": {
+ "memberFailedToStart": "{{name}} gagal dimulakan",
+ "teammatesFailedToStart": "{{count}} rakan pasukan gagal dimulakan",
+ "teammatesFailedRatio": "{{count}}/{{total}} rakan pasukan gagal dimulakan"
+ },
+ "skipped": {
+ "memberSkipped": "{{name}} dilangkau untuk pelancaran ini",
+ "memberSkippedWithReason": "{{name}} dilangkau untuk pelancaran ini - {{reason}}",
+ "memberSkippedCompact": "{{name}} dilangkau",
+ "teammatesSkipped": "{{count}} rakan pasukan dilangkau",
+ "teammatesSkippedList": "Rakan pasukan dilangkau: {{list}}",
+ "teammatesSkippedRatio": "{{count}}/{{total}} rakan pasukan dilangkau untuk pelancaran ini"
+ },
+ "joining": {
+ "teammatesStillJoining": "{{count}} rakan pasukan masih menyertai",
+ "teammatesStillJoining_one": "{{count}} rakan pasukan masih menyertai",
+ "teammatesStillJoining_few": "{{count}} rakan pasukan masih menyertai",
+ "teammatesStillJoining_many": "{{count}} rakan pasukan masih menyertai",
+ "teammatesStillJoining_other": "{{count}} rakan pasukan masih menyertai",
+ "teammatesConfirmedRatio": "{{count}}/{{total}} rakan pasukan disahkan"
+ },
+ "ready": {
+ "leadOnline": "Ketua dalam talian",
+ "allTeammatesJoined": "Semua {{count}} rakan pasukan menyertai",
+ "teamProvisionedLeadOnline": "Pasukan diperuntukkan - ketua dalam talian",
+ "teamProvisionedAllJoined": "Pasukan diperuntukkan - semua {{count}} rakan pasukan menyertai",
+ "teamProvisionedStillJoining": "Pasukan diperuntukkan - rakan pasukan masih menyertai",
+ "launchFinishedWithErrors": "Pelancaran selesai dengan ralat - {{count}}/{{total}} rakan pasukan gagal dimulakan",
+ "launchContinuedSkipped": "Pelancaran diteruskan - {{count}}/{{total}} rakan pasukan dilangkau",
+ "teamLaunchedLeadOnline": "Pasukan dilancarkan - ketua dalam talian",
+ "teamLaunchedAllJoined": "Pasukan dilancarkan - semua {{count}} rakan pasukan menyertai"
+ },
+ "panel": {
+ "launchFailed": "Pelancaran gagal",
+ "launchDetails": "Butiran pelancaran",
+ "launchFinishedWithErrors": "Pelancaran selesai dengan ralat",
+ "launchContinuedSkipped": "Pelancaran diteruskan dengan rakan pasukan dilangkau",
+ "coreTeamReady": "Pasukan teras sedia",
+ "finishingLaunch": "Menyelesaikan pelancaran",
+ "teamLaunched": "Pasukan dilancarkan",
+ "launchingTeam": "Melancarkan pasukan"
+ }
+ }
+ },
+ "liveRuntimeStatus": {
+ "title": "Status runtime langsung",
+ "description": "Degupan jantung dan keadaan pelancaran paparan sahaja. Kawalan proses kekal di bawah.",
+ "source": "sumber: {{source}}",
+ "lane": "lorong {{lane}}",
+ "diagnosticOnly": "Diagnostik sahaja",
+ "updated": "dikemas kini {{value}}",
+ "states": {
+ "running": "Berjalan",
+ "starting": "Memulakan",
+ "waiting": "Menunggu",
+ "degraded": "Perlu perhatian",
+ "stopped": "Dihentikan",
+ "unknown": "Tidak diketahui"
+ }
+ },
+ "taskLogs": {
+ "exact": {
+ "title": "Log Tugasan Tepat",
+ "loading": "Memuatkan log tugasan tepat...",
+ "description": "Hirisan transkrip tepat dirender dengan komponen log pelaksanaan yang sama digunakan dalam Log.",
+ "emptyTitle": "Belum ada log tugasan tepat",
+ "emptyDescription": "Himpunan transkrip tepat akan muncul di sini apabila metadata transkrip terpaut tugasan eksplisit tersedia.",
+ "summaryOnly": "ringkasan sahaja"
+ },
+ "executionSessions": {
+ "title": "Sesi Pelaksanaan",
+ "online": "Dalam talian",
+ "updating": "Mengemas kini...",
+ "description": "Pelayaran dan pratonton transkrip berpusatkan sesi legasi."
+ },
+ "stream": {
+ "title": "Strim Log Tugasan"
+ }
+ },
+ "kanban": {
+ "taskCard": {
+ "cancelTask": "Batalkan tugasan {{taskId}}",
+ "cancel": "Batal",
+ "moveBackToTodoConfirm": "Alih tugasan ini kembali ke PERLU DIBUAT dan beritahu pasukan?",
+ "confirm": "Sahkan",
+ "keep": "Kekalkan",
+ "changesNeedAttention": "Perubahan perlu perhatian",
+ "changes": "Perubahan",
+ "deleteTask": "Padam tugasan",
+ "taskLogsActive": "Log tugasan aktif",
+ "newTaskLogsArriving": "Log tugasan baharu tiba",
+ "awaitingUser": "Menunggu pengguna",
+ "awaitingLead": "Menunggu ketua",
+ "blockedBy": "Disekat oleh",
+ "blocks": "Menyekat",
+ "start": "Mula",
+ "complete": "Selesaikan",
+ "approve": "Luluskan",
+ "requestReview": "Minta semakan",
+ "manualReview": "Semakan manual",
+ "requestChanges": "Minta perubahan"
+ },
+ "filter": {
+ "title": "Tapis tugasan",
+ "session": "Sesi",
+ "allSessions": "Semua sesi",
+ "teammate": "Rakan pasukan",
+ "unassigned": "(tidak ditugaskan)",
+ "column": "Lajur",
+ "clearAll": "Kosongkan semua"
+ },
+ "board": {
+ "addTask": "Tambah tugasan",
+ "noTasks": "Tiada tugasan",
+ "showMore": "Tunjuk {{count}} lagi",
+ "hiddenCount": "{{count}} tersembunyi",
+ "trash": "Tong Sampah",
+ "gridView": "Paparan grid",
+ "columnsView": "Paparan lajur"
+ },
+ "trash": {
+ "title": "Tong Sampah",
+ "empty": "Tiada tugasan dipadam",
+ "subject": "Subjek",
+ "owner": "Pemilik",
+ "deleted": "Dipadam",
+ "unassigned": "Tidak ditugaskan",
+ "restoreTask": "Pulihkan tugasan",
+ "restore": "Pulihkan",
+ "close": "Tutup"
+ },
+ "sort": {
+ "title": "Isih tugasan",
+ "sortBy": "Isih mengikut",
+ "reset": "Tetap semula",
+ "options": {
+ "updatedAt": {
+ "label": "Kemas kini terakhir",
+ "description": "Baru dikemas kini dahulu"
+ },
+ "createdAt": {
+ "label": "Dicipta",
+ "description": "Terbaharu dahulu"
+ },
+ "owner": {
+ "label": "Pemilik",
+ "description": "Mengikut abjad penerima tugas"
+ },
+ "manual": {
+ "label": "Manual",
+ "description": "Susunan seret-dan-lepas"
+ }
+ }
+ },
+ "search": {
+ "clearSearch": "Kosongkan carian",
+ "tasks": "Tugasan",
+ "createdAgo": "dicipta {{time}}",
+ "updatedAgo": "dikemas kini {{time}}",
+ "placeholder": "Cari tugasan... (#id atau teks)"
+ },
+ "grid": {
+ "addTask": "Tambah tugasan",
+ "noTasks": "Tiada tugasan"
+ },
+ "title": "Kanban",
+ "columns": {
+ "todo": "PERLU DIBUAT",
+ "inProgress": "SEDANG DIBUAT",
+ "review": "SEMAKAN",
+ "done": "SELESAI",
+ "approved": "DILULUSKAN"
+ }
+ },
+ "worktreeGitReadiness": {
+ "checking": "Menyemak status repositori Git untuk worktree rakan pasukan...",
+ "ready": "Worktree Git sedia.",
+ "readyOnBranch": "Worktree Git sedia pada cawangan {{branch}}.",
+ "needsSetup": "Pengasingan worktree memerlukan persediaan Git",
+ "initialCommitNotice": "Tindakan commit awal memperingkat dan meng-commit semua fail semasa dengan mesej",
+ "initializeRepository": "Mulakan repositori Git",
+ "createInitialCommit": "Cipta commit awal",
+ "initialCommitMessage": "chore: initial commit"
+ },
+ "toolApproval": {
+ "settings": "Tetapan",
+ "autoAllowAllTools": "Benarkan semua alat secara auto",
+ "autoAllowFileEdits": "Benarkan suntingan fail secara auto (Edit, Write, NotebookEdit)",
+ "autoAllowSafeCommands": "Benarkan arahan selamat secara auto (git, pnpm, npm, ls...)",
+ "onTimeout": "Apabila tamat masa:",
+ "after": "selepas",
+ "secondsShort": "saat",
+ "timeoutActions": {
+ "wait": "Tunggu selama-lamanya",
+ "allow": "Benarkan",
+ "deny": "Tolak"
+ },
+ "submit": "Hantar",
+ "allow": "Benarkan",
+ "deny": "Tolak",
+ "allowAll": "Benarkan semua",
+ "pendingCount": "{{count}} tertangguh",
+ "autoActionIn": "Auto-{{action}} dalam {{time}}",
+ "diff": {
+ "previewChanges": "Pratonton perubahan",
+ "readingFile": "Membaca fail...",
+ "binaryFile": "Fail binari - tidak boleh dipratonton",
+ "truncated": "Fail dipangkas pada 2MB - perbezaan mungkin tidak lengkap",
+ "newFile": "Fail baharu"
+ }
+ },
+ "memberWorkSync": {
+ "details": {
+ "title": "Penyelarasan kerja ahli",
+ "actionableItems": "Item boleh diambil tindakan",
+ "fingerprint": "Cap jari",
+ "report": "Laporan",
+ "none": "tiada",
+ "shadowWouldNudge": "Bayang akan menolak",
+ "yes": "ya",
+ "no": "tidak",
+ "moreActionableItems": "{{count}} item boleh diambil tindakan lagi",
+ "diagnostics": "Diagnostik: {{diagnostics}}"
+ },
+ "title": "Penyelarasan kerja ahli",
+ "loadingDiagnostics": "Memuatkan diagnostik penyelarasan kerja ahli.",
+ "diagnosticsUnavailable": "Diagnostik penyelarasan kerja ahli tidak tersedia."
+ },
+ "advancedCli": {
+ "title": "Lanjutan",
+ "useWorktree": "Guna worktree",
+ "recent": "Terkini",
+ "commandPreview": "Pratonton arahan",
+ "customArguments": "Argumen tersuai",
+ "validate": "Sahkan",
+ "validation": {
+ "allFlagsValid": "Semua bendera sah",
+ "unknownFlags": "Tidak diketahui: {{flags}}",
+ "protectedFlags": "Dilindungi: {{flags}}",
+ "failed": "Pengesahan gagal"
+ },
+ "placeholders": {
+ "worktreeName": "worktree-name"
+ }
+ },
+ "processes": {
+ "ago": "{{time}} yang lalu",
+ "stoppedAgo": "dihentikan {{time}} yang lalu",
+ "running": "Berjalan",
+ "stopped": "Dihentikan",
+ "stopProcess": "Hentikan proses (SIGTERM)",
+ "kill": "Bunuh",
+ "openInBrowser": "Buka dalam pelayar",
+ "open": "Buka",
+ "pid": "PID{{pid}}",
+ "title": "Proses CLI"
+ },
+ "taskActivity": {
+ "loadingDetails": "Memuatkan butiran aktiviti...",
+ "contextUnavailable": "Konteks transkrip terperinci tidak lagi tersedia untuk aktiviti ini.",
+ "loading": "Memuatkan aktiviti tugasan...",
+ "lowSignalOnly": "Belum ada aktiviti tugasan utama ditemui. Butiran pelaksanaan peringkat rendah tersedia di bawah dalam Strim Log Tugasan.",
+ "empty": "Belum ada aktiviti tugasan eksplisit ditemui dalam transkrip yang tersedia. Log sesi yang lebih lama atau heuristik mungkin masih tersedia di bawah dalam Sesi Pelaksanaan.",
+ "title": "Aktiviti Tugasan",
+ "description": "Aktiviti runtime eksplisit utama yang dipaut kepada tugasan ini daripada metadata transkrip."
+ },
+ "sendMessage": {
+ "title": "Hantar Mesej",
+ "description": "Hantar mesej terus kepada ahli pasukan.",
+ "recipientLabel": "Penerima",
+ "selectMemberPlaceholder": "Pilih ahli...",
+ "messageLabel": "Mesej",
+ "placeholder": "Tulis mesej anda... (Enter untuk hantar)",
+ "send": "Hantar",
+ "sending": "Menghantar...",
+ "charsLeft": "{{count}} aksara berbaki",
+ "saved": "Disimpan",
+ "attachments": {
+ "teamOnlineRequired": "Pasukan mesti dalam talian untuk melampirkan fail",
+ "recipientUnsupported": "Fail boleh dihantar kepada ketua pasukan atau rakan pasukan OpenCode",
+ "openCodeOnlineRequired": "Pasukan mesti dalam talian untuk melampirkan fail bagi rakan pasukan OpenCode",
+ "disabledHint": "Lampiran fail disokong untuk ketua pasukan dalam talian dan rakan pasukan OpenCode dalam talian. Buang lampiran atau tukar penerima.",
+ "attachFiles": "Lampirkan fail (tampal atau seret & lepas)",
+ "unavailable": "Lampiran tidak tersedia"
+ },
+ "quote": {
+ "remove": "Buang petikan",
+ "replyingTo": "Membalas kepada"
+ }
+ },
+ "taskComments": {
+ "cancelReply": "Batal balasan",
+ "replyingTo": "Membalas kepada",
+ "placeholder": "Tambah komen... (Enter untuk hantar)",
+ "attachFile": "Lampirkan fail (atau tampal)",
+ "voiceToText": "Suara ke teks",
+ "comment": "Komen",
+ "charsLeft": "{{count}} aksara berbaki",
+ "saved": "Disimpan",
+ "awaitingReplyFrom": "Menunggu balasan daripada",
+ "or": "atau"
+ },
+ "taskAttachments": {
+ "dropImageHere": "Lepaskan imej di sini",
+ "attachImage": "Lampirkan imej",
+ "pasteOrDragDrop": "atau tampal / seret-lepas",
+ "fromOriginalMessage": "Daripada mesej asal",
+ "dropFilesHere": "Lepaskan fail di sini",
+ "loading": "Memuatkan lampiran..."
+ },
+ "permissions": {
+ "autoApproveAllTools": "Luluskan semua alat secara auto",
+ "autonomousModeDescription": "Mod autonomi: alat pasukan dilaksanakan tanpa pengesahan. Berhati-hati dengan kod yang tidak dipercayai.",
+ "manualModeDescription": "Mod manual: anda akan meluluskan atau menolak setiap panggilan alat secara masa nyata."
+ },
+ "memberLogStream": {
+ "tabs": {
+ "execution": "Pelaksanaan",
+ "process": "Proses"
+ },
+ "filters": {
+ "all": "Semua"
+ },
+ "logs": {
+ "title": "Log",
+ "loading": "Memuatkan strim log ahli...",
+ "emptyTitle": "Belum ada entri strim log ditemui untuk ahli ini.",
+ "emptyDescription": "Log transkrip atau runtime berskop ahli akan muncul di sini apabila tersedia."
+ }
+ },
+ "reviewDialog": {
+ "placeholder": "Terangkan apa yang perlu diubah... (Enter untuk hantar)",
+ "submit": "Hantar",
+ "charsLeft": "{{count}} aksara berbaki",
+ "saved": "Disimpan",
+ "title": "Minta Perubahan"
+ },
+ "dialogs": {
+ "actions": {
+ "openDashboard": "Buka Papan Pemuka",
+ "openTeam": "Buka pasukan",
+ "cancel": "Batal"
+ },
+ "membersJson": {
+ "hide": "Sembunyi JSON"
+ },
+ "optional": {
+ "badge": "Pilihan"
+ }
+ },
+ "runningTeams": {
+ "title": "Pasukan Berjalan",
+ "status": {
+ "active": "Aktif",
+ "provisioning": "Melancarkan",
+ "idle": "Berjalan"
+ },
+ "noProject": "Tiada projek"
+ },
+ "layout": {
+ "maxPanesReached": "Maksimum {{count}} anak tetingkap dicapai"
+ },
+ "codexReconnect": {
+ "description": "Sesi Codex anda kelihatan lapuk. Sambung semula untuk meneruskan.",
+ "useCode": "Guna kod",
+ "generating": "Menjana...",
+ "openLogin": "Buka log masuk",
+ "generateLink": "Jana pautan"
+ },
+ "effortLevel": {
+ "label": "Tahap usaha (pilihan)",
+ "maxDescription": "Maks memberikan model masa penaakulan paling banyak untuk tugasan yang sukar."
+ },
+ "contextLimit": {
+ "limitTo200k": "Hadkan konteks kepada 200K token",
+ "always200k": "(sentiasa 200K untuk model ini)",
+ "tooltipContent": "Mengekalkan pelancaran dalam tetingkap konteks 200K token apabila disokong.",
+ "tooltipTitle": "Had konteks"
+ },
+ "roleSelect": {
+ "noRole": "Tiada peranan",
+ "customRole": "Peranan tersuai...",
+ "searchPlaceholder": "Cari peranan...",
+ "empty": "Tiada peranan ditemui.",
+ "reservedRole": "Peranan ini dikhaskan",
+ "emptyCustomRole": "Peranan tidak boleh kosong"
+ }
+}
diff --git a/src/features/localization/renderer/locales/nl/common.json b/src/features/localization/renderer/locales/nl/common.json
new file mode 100644
index 00000000..ab04953b
--- /dev/null
+++ b/src/features/localization/renderer/locales/nl/common.json
@@ -0,0 +1,927 @@
+{
+ "actions": {
+ "cancel": "Annuleren",
+ "close": "Sluiten",
+ "copied": "Gekopieerd",
+ "copyUrl": "URL kopiëren",
+ "open": "Openen",
+ "reveal": "Tonen",
+ "retry": "Opnieuw proberen",
+ "save": "Opslaan",
+ "showLess": "Minder tonen",
+ "showMore": "Meer tonen",
+ "refresh": "Vernieuwen",
+ "reset": "Resetten",
+ "copyToClipboard": "Kopiëren naar klembord",
+ "moreActions": "Meer acties",
+ "closeDialog": "Dialoogvenster sluiten",
+ "goToDashboard": "Naar Dashboard",
+ "or": "of",
+ "hide": "Verbergen",
+ "resetSelection": "Selectie resetten"
+ },
+ "code": {
+ "line": "regel {{line}}",
+ "lines": "regels {{from}}-{{to}}",
+ "moreLines": "(nog {{count}} regels...)",
+ "moreLines_few": "(nog {{count}} regels...)",
+ "moreLines_many": "(nog {{count}} regels...)",
+ "moreLines_one": "(nog {{count}} regel...)",
+ "moreLines_other": "(nog {{count}} regels...)",
+ "code": "Code",
+ "preview": "Voorbeeld",
+ "markdownPreview": "Markdown-voorbeeld",
+ "linesParenthesized": "(regels {{from}}-{{to}})",
+ "mermaidSyntaxError": "Mermaid-syntaxisfout"
+ },
+ "contextBadge": {
+ "badge": "Context",
+ "breakdown": {
+ "text": "Tekst",
+ "thinking": "Denken"
+ },
+ "detailsAria": "Details contextinjectie",
+ "sectionSummary": "{{title}} ({{count}}) ~{{tokens}} tokens",
+ "sections": {
+ "claudeMdFiles": "CLAUDE.md-bestanden",
+ "mentionedFiles": "Genoemde bestanden",
+ "taskCoordination": "Taakcoördinatie",
+ "thinkingText": "Denken + tekst",
+ "toolOutputs": "Tooluitvoer",
+ "userMessages": "Gebruikersberichten"
+ },
+ "title": "Nieuwe context geïnjecteerd in deze beurt",
+ "tokenCount": "~{{tokens}} tokens",
+ "totalNewTokens": "Totaal nieuwe tokens",
+ "turn": "Beurt {{turn}}",
+ "sectionSummary_few": "{{title}} ({{count}}) ~{{tokens}} tokens",
+ "sectionSummary_many": "{{title}} ({{count}}) ~{{tokens}} tokens",
+ "sectionSummary_one": "{{title}} ({{count}}) ~{{tokens}} tokens",
+ "sectionSummary_other": "{{title}} ({{count}}) ~{{tokens}} tokens"
+ },
+ "locales": {
+ "emptyMessage": "Geen taal gevonden.",
+ "names": {
+ "ar": "Arabisch",
+ "bn": "Bengaals",
+ "de": "Duits",
+ "en": "Engels",
+ "es": "Spaans",
+ "fa": "Perzisch",
+ "fil": "Filipijns",
+ "fr": "Frans",
+ "hi": "Hindi",
+ "id": "Indonesisch",
+ "it": "Italiaans",
+ "ja": "Japans",
+ "ko": "Koreaans",
+ "mr": "Marathi",
+ "ms": "Maleis",
+ "nl": "Nederlands",
+ "pl": "Pools",
+ "pt": "Portugees",
+ "ro": "Roemeens",
+ "ru": "Russisch",
+ "sw": "Swahili",
+ "system": "Systeem",
+ "ta": "Tamil",
+ "te": "Telugu",
+ "th": "Thai",
+ "tr": "Turks",
+ "uk": "Oekraïens",
+ "ur": "Urdu",
+ "vi": "Vietnamees",
+ "zh": "Chinees"
+ },
+ "searchPlaceholder": "Taal zoeken...",
+ "selectPlaceholder": "App-taal selecteren...",
+ "systemWithResolved": "Systeem - {{locale}}"
+ },
+ "members": {
+ "emptyMessage": "Geen leden gevonden.",
+ "searchPlaceholder": "Leden zoeken...",
+ "unassigned": "Niet toegewezen",
+ "teammateFallback": "teamlid"
+ },
+ "providerRuntime": {
+ "codex": {
+ "install": {
+ "checking": "Controleren",
+ "downloading": "Downloaden",
+ "installCli": "Codex CLI installeren",
+ "installing": "Installeren",
+ "retryInstall": "Installatie opnieuw proberen"
+ }
+ }
+ },
+ "search": {
+ "noMatchingSuggestions": "Geen overeenkomende suggesties",
+ "searching": "Zoeken...",
+ "searchingFiles": "Bestanden zoeken...",
+ "findInConversation": "Zoeken in gesprek...",
+ "resultCount": "{{current}} van {{total}}",
+ "resultCountCapped": "{{current}} van {{total}}+",
+ "noResults": "Geen resultaten",
+ "previousResultShortcut": "Vorig resultaat (Shift+Enter)",
+ "nextResultShortcut": "Volgend resultaat (Enter)",
+ "closeShortcut": "Sluiten (Esc)",
+ "nothingFound": "Niets gevonden",
+ "placeholder": "Zoeken..."
+ },
+ "schedules": {
+ "actions": {
+ "addSchedule": "Planning toevoegen",
+ "clearFilters": "Filters wissen",
+ "createSchedule": "Planning aanmaken",
+ "delete": "Verwijderen",
+ "edit": "Bewerken",
+ "pause": "Pauzeren",
+ "resume": "Hervatten",
+ "runNow": "Nu uitvoeren"
+ },
+ "empty": {
+ "description": "Maak op elk team een planning aan om de uitvoering van Claude-taken te automatiseren met cron-expressies. Planningen van alle teams verschijnen hier.",
+ "noMatches": "Geen planningen komen overeen met de huidige filters",
+ "title": "Geen geplande taken"
+ },
+ "filters": {
+ "allTeams": "Alle teams"
+ },
+ "item": {
+ "loadingRunHistory": "Uitvoeringsgeschiedenis laden...",
+ "nextRun": "Volgende: {{value}}",
+ "noRunsYet": "Nog geen uitvoeringen"
+ },
+ "loading": "Planningen laden...",
+ "searchPlaceholder": "Planningen zoeken...",
+ "status": {
+ "active": "Actief",
+ "all": "Alle",
+ "disabled": "Uitgeschakeld",
+ "paused": "Gepauzeerd"
+ },
+ "title": "Planningen"
+ },
+ "sessions": {
+ "actions": {
+ "hide": "Verbergen",
+ "pin": "Vastmaken",
+ "unhide": "Weergeven"
+ },
+ "empty": {
+ "noMatchingSessions": "Geen overeenkomende sessies",
+ "noMatchingSessionsDescription": "Dit project heeft nog geen overeenkomende sessies.",
+ "noMatchingSessionsFiltered": "Probeer een andere zoekopdracht of reset het providerfilter.",
+ "noSessions": "Geen sessies gevonden",
+ "noSessionsDescription": "Dit project heeft nog geen sessies",
+ "selectProject": "Selecteer een project om sessies te bekijken"
+ },
+ "errors": {
+ "loading": "Fout bij het laden van sessies"
+ },
+ "loadedMatchingMore": "{{count}} overeenkomende sessies tot nu toe geladen - scroll naar beneden om meer te laden.",
+ "loadingMore": "Meer sessies laden...",
+ "pinned": "Vastgemaakt",
+ "scrollToLoadMore": "Scroll om meer te laden",
+ "search": {
+ "clear": "Sessiezoekopdracht wissen",
+ "placeholder": "Sessies zoeken..."
+ },
+ "selection": {
+ "cancel": "Selectie annuleren",
+ "exitMode": "Selectiemodus afsluiten",
+ "hideSelected": "Geselecteerde sessies verbergen",
+ "pinSelected": "Geselecteerde sessies vastmaken",
+ "selectSessions": "Sessies selecteren",
+ "selected": "{{count}} geselecteerd",
+ "unhideSelected": "Geselecteerde sessies weergeven",
+ "selected_few": "{{count}} geselecteerd",
+ "selected_many": "{{count}} geselecteerd",
+ "selected_one": "{{count}} geselecteerd",
+ "selected_other": "{{count}} geselecteerd"
+ },
+ "sort": {
+ "byContext": "Op context",
+ "byContextTooltip": "Sorteren op contextverbruik",
+ "byRecentTooltip": "Sorteren op recent",
+ "contextLoadedOnly": "Contextsortering rangschikt alleen geladen sessies."
+ },
+ "title": "Sessies",
+ "visibility": {
+ "hideHidden": "Verborgen sessies verbergen",
+ "showHidden": "Verborgen sessies tonen"
+ },
+ "worktree": {
+ "switch": "Worktree wisselen"
+ },
+ "loadedMatchingMore_few": "{{count}} overeenkomende sessies tot nu toe geladen - scroll naar beneden om meer te laden.",
+ "loadedMatchingMore_many": "{{count}} overeenkomende sessies tot nu toe geladen - scroll naar beneden om meer te laden.",
+ "loadedMatchingMore_one": "{{count}} overeenkomende sessies tot nu toe geladen - scroll naar beneden om meer te laden.",
+ "loadedMatchingMore_other": "{{count}} overeenkomende sessies tot nu toe geladen - scroll naar beneden om meer te laden.",
+ "failedToLoad": "Kon sessie niet laden",
+ "loading": "Sessie laden...",
+ "filter": {
+ "title": "Sessies filteren"
+ },
+ "count": "{{count}} sessies",
+ "count_one": "{{count}} sessie",
+ "count_other": "{{count}} sessies",
+ "count_few": "{{count}} sessies",
+ "count_many": "{{count}} sessies",
+ "inProgress": "Sessie is bezig..."
+ },
+ "states": {
+ "loading": "Laden...",
+ "offline": "Offline",
+ "online": "Online",
+ "unknown": "Onbekend",
+ "error": "Fout"
+ },
+ "markdown": {
+ "imageFallback": "[Afbeelding: {{label}}]",
+ "largeContentNotice": "Inhoud is erg groot ({{count}} tekens). Ruw voorbeeld wordt getoond om de UI responsief te houden.",
+ "largeContentTitle": "Grote inhoud wordt ruw getoond om vastlopen van de UI te voorkomen",
+ "raw": "Ruw",
+ "rawPreview": "Ruw voorbeeld",
+ "renderMarkdown": "Markdown weergeven",
+ "showAll": "Alles tonen",
+ "showMore": "Meer tonen",
+ "showRaw": "Ruw tonen",
+ "showingChars": "{{shown}} / {{total}} tekens getoond",
+ "largeContentNotice_few": "Inhoud is erg groot ({{count}} tekens). Ruw voorbeeld wordt getoond om de UI responsief te houden.",
+ "largeContentNotice_many": "Inhoud is erg groot ({{count}} tekens). Ruw voorbeeld wordt getoond om de UI responsief te houden.",
+ "largeContentNotice_one": "Inhoud is erg groot ({{count}} tekens). Ruw voorbeeld wordt getoond om de UI responsief te houden.",
+ "largeContentNotice_other": "Inhoud is erg groot ({{count}} tekens). Ruw voorbeeld wordt getoond om de UI responsief te houden."
+ },
+ "terminal": {
+ "checkOutputForDetails": "Bekijk de terminaluitvoer hierboven voor details",
+ "closingInSeconds": "Sluiten over {{count}}s...",
+ "closingInSeconds_few": "Sluiten over {{count}}s...",
+ "closingInSeconds_many": "Sluiten over {{count}}s...",
+ "closingInSeconds_one": "Sluiten over {{count}}s...",
+ "closingInSeconds_other": "Sluiten over {{count}}s...",
+ "completedSuccessfully": "Succesvol voltooid",
+ "exitCode": "(afsluitcode {{code}})",
+ "processFailed": "Proces mislukt",
+ "title": "Terminal"
+ },
+ "tokens": {
+ "accumulatedWithoutDuplication": "Verzameld over de hele sessie zonder duplicatie",
+ "cacheRead": "Cache lezen",
+ "cacheWrite": "Cache schrijven",
+ "costUsd": "Kosten (USD)",
+ "inputTokens": "Invoertokens",
+ "model": "Model",
+ "outputTokens": "Uitvoertokens",
+ "phase": "Fase {{phase}}/{{total}}",
+ "promptInputShare": "{{percent}}% van prompt-invoer",
+ "taskCoordination": "Taakcoördinatie",
+ "thinkingText": "Denken + tekst",
+ "toolOutputs": "Tooluitvoer",
+ "total": "Totaal",
+ "userMessages": "Gebruikersberichten",
+ "visibleContext": "Zichtbare context",
+ "includesClaudeMd": "incl. CLAUDE.md ×{{count}}",
+ "claudeMd": "CLAUDE.md",
+ "mentionedFiles": "@bestanden",
+ "percentValue": "({{percent}}%)",
+ "approxTokens": "~{{tokens}} tokens",
+ "approxTokensParenthesized": "(~{{tokens}})"
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Team kopiëren",
+ "createTeam": "Team aanmaken",
+ "deleteForever": "Definitief verwijderen",
+ "deletePermanently": "Permanent verwijderen",
+ "deleteTeam": "Team verwijderen",
+ "launching": "Starten...",
+ "launchTeam": "Team starten",
+ "relaunchTeam": "Team opnieuw starten",
+ "restore": "Herstellen",
+ "restoreTeam": "Team herstellen",
+ "retry": "Opnieuw proberen",
+ "stopTeam": "Team stoppen",
+ "stopping": "Stoppen..."
+ },
+ "status": {
+ "active": "Actief",
+ "deleted": "Verwijderd",
+ "launching": "Starten...",
+ "offline": "Offline",
+ "partialFailure": "Starten halverwege mislukt",
+ "partialPending": "Bootstrap in behandeling",
+ "partialSkipped": "Start sloeg lid over",
+ "running": "Actief"
+ },
+ "partial": {
+ "pending": "Laatste start wordt nog afgestemd.",
+ "skipped": "Bij de laatste start zijn teamleden overgeslagen.",
+ "skippedWithCount": "Laatste start sloeg {{count}}/{{expected}} teamlid over.",
+ "skippedWithCount_few": "Laatste start sloeg {{count}}/{{expected}} teamleden over.",
+ "skippedWithCount_many": "Laatste start sloeg {{count}}/{{expected}} teamleden over.",
+ "skippedWithCount_one": "Laatste start sloeg {{count}}/{{expected}} teamlid over.",
+ "skippedWithCount_other": "Laatste start sloeg {{count}}/{{expected}} teamleden over.",
+ "stopped": "Laatste start is gestopt voordat alle teamleden zich aansloten.",
+ "stoppedWithCount": "Laatste start is gestopt voordat {{count}}/{{expected}} teamlid zich aansloot.",
+ "stoppedWithCount_few": "Laatste start is gestopt voordat {{count}}/{{expected}} teamleden zich aansloten.",
+ "stoppedWithCount_many": "Laatste start is gestopt voordat {{count}}/{{expected}} teamleden zich aansloten.",
+ "stoppedWithCount_one": "Laatste start is gestopt voordat {{count}}/{{expected}} teamlid zich aansloot.",
+ "stoppedWithCount_other": "Laatste start is gestopt voordat {{count}}/{{expected}} teamleden zich aansloten."
+ },
+ "noDescription": "Geen beschrijving",
+ "solo": "Solo",
+ "membersCount": "Leden: {{count}}",
+ "membersCount_few": "Leden: {{count}}",
+ "membersCount_many": "Leden: {{count}}",
+ "membersCount_one": "Lid: {{count}}",
+ "membersCount_other": "Leden: {{count}}",
+ "all": "Alle",
+ "moreCount": "+{{count}} meer",
+ "moreCount_one": "+{{count}} meer",
+ "moreCount_other": "+{{count}} meer",
+ "moreCount_few": "+{{count}} meer",
+ "moreCount_many": "+{{count}} meer"
+ },
+ "runtimeProvider": {
+ "defaults": {
+ "scopeDescriptionAllProjects": "Standaard voor elk project dat geen eigen OpenCode-override heeft.",
+ "scopeDescriptionProject": "Overschrijf alleen het geselecteerde project. Actieve teams worden niet gewijzigd.",
+ "setAllProjectsDefault": "Standaard voor alle projecten instellen",
+ "setProjectDefault": "Projectstandaard instellen",
+ "validationContext": "Validatiecontext",
+ "projectOverrideContext": "Projectoverridecontext",
+ "selectProjectHint": "Selecteer een project voordat je lokale modellen test of standaardwaarden opslaat.",
+ "allProjectsHint": "Tests gebruiken {{project}}. De standaard geldt tenzij een project een override heeft.",
+ "projectHint": "Opslaan overschrijft alleen {{project}}."
+ }
+ },
+ "sessionContext": {
+ "header": {
+ "title": "Context",
+ "closePanel": "Paneel sluiten",
+ "phase": "Fase:",
+ "current": "Huidig",
+ "view": "Weergave:",
+ "category": "Categorie",
+ "bySize": "Op grootte"
+ },
+ "metrics": {
+ "unavailable": "Niet beschikbaar",
+ "contextUsed": "Gebruikte context",
+ "promptInput": "Prompt-invoer",
+ "visibleContext": "Zichtbare context",
+ "ofContext": "van context",
+ "ofPrompt": "van prompt",
+ "codexTelemetryUnavailable": "Het prompt-zijdige gebruik van Codex wordt nog niet weergegeven door de huidige runtimetelemetrie, dus Prompt-invoer en Gebruikte context blijven op niet beschikbaar staan in plaats van een onjuiste nul te tonen.",
+ "sessionCost": "Sessiekosten:",
+ "parentPlus": "bovenliggend +",
+ "subagents": "subagents",
+ "details": "details"
+ },
+ "help": {
+ "contextUsed": {
+ "title": "Gebruikte context",
+ "description": "Prompt-invoer plus uitvoertokens die momenteel het contextvenster van het model innemen."
+ },
+ "promptInput": {
+ "title": "Prompt-invoer",
+ "description": "Tokens die naar het model worden gestuurd vóór generatie. Voor Claude omvat dit `input_tokens + cache_creation_input_tokens + cache_read_input_tokens`."
+ },
+ "visibleContext": {
+ "title": "Zichtbare context",
+ "description": "De inspecteerbare subset van prompt-invoer: bestanden, CLAUDE.md, tooluitvoer, gebruikersberichten en soortgelijke injecties die je rechtstreeks kunt optimaliseren."
+ },
+ "availability": {
+ "title": "Beschikbaarheid",
+ "description": "Als een provider-runtime het prompt-zijdige gebruik nog niet weergeeft, toont het paneel de waarden als niet beschikbaar in plaats van te doen alsof ze nul zijn."
+ }
+ },
+ "items": {
+ "turn": "@Beurt {{turn}}",
+ "tokensApprox": "~{{tokens}} tokens",
+ "toolsCount": "{{count}} tools",
+ "toolsCount_one": "{{count}} tool",
+ "toolsCount_other": "{{count}} tools",
+ "toolsCount_few": "{{count}} tools",
+ "toolsCount_many": "{{count}} tools",
+ "itemsCount": "{{count}} items",
+ "itemsCount_one": "{{count}} item",
+ "itemsCount_other": "{{count}} items",
+ "itemsCount_few": "{{count}} items",
+ "itemsCount_many": "{{count}} items",
+ "missing": "ontbreekt",
+ "thinking": "Denken",
+ "text": "Tekst"
+ },
+ "empty": "Geen contextinjecties gedetecteerd in deze sessie",
+ "view": {
+ "grouped": "Gegroepeerd",
+ "flat": "Plat"
+ },
+ "claudeMdFiles": "CLAUDE.md-bestanden",
+ "mentionedFiles": "Genoemde bestanden"
+ },
+ "chat": {
+ "subagent": {
+ "fallbackName": "Subagent",
+ "shutdownConfirmed": "Afsluiten bevestigd",
+ "summary": {
+ "tools": "{{count}} tools",
+ "tools_one": "{{count}} tool",
+ "tools_other": "{{count}} tools",
+ "tools_few": "{{count}} tools",
+ "tools_many": "{{count}} tools"
+ },
+ "meta": {
+ "type": "Type",
+ "duration": "Duur",
+ "model": "Model",
+ "id": "ID"
+ },
+ "metrics": {
+ "contextWindow": "Contextvenster",
+ "contextUsage": "Contextgebruik",
+ "mainContext": "Hoofdcontext",
+ "totalOutput": "Totale uitvoer",
+ "turns": "({{count}} beurten)",
+ "turns_one": "({{count}} beurt)",
+ "turns_other": "({{count}} beurten)",
+ "subagentContext": "Subagent-context",
+ "phase": "Fase {{phase}}",
+ "turns_few": "({{count}} beurten)",
+ "turns_many": "({{count}} beurten)"
+ },
+ "trace": {
+ "title": "Uitvoeringstracering"
+ }
+ },
+ "user": {
+ "you": "Jij",
+ "showMore": "Meer tonen",
+ "showLess": "Minder tonen",
+ "backgroundTask": "Achtergrondtaak",
+ "exitCode": "afsluiten {{code}}",
+ "imagesAttached": "{{count}} afbeeldingen bijgevoegd",
+ "imagesAttached_one": "{{count}} afbeelding bijgevoegd",
+ "imagesAttached_few": "{{count}} afbeeldingen bijgevoegd",
+ "imagesAttached_many": "{{count}} afbeeldingen bijgevoegd",
+ "imagesAttached_other": "{{count}} afbeeldingen bijgevoegd"
+ },
+ "compact": {
+ "toggle": "Gecompacte inhoud in-/uitklappen",
+ "contextCompacted": "Context gecompact",
+ "freedTokens": "({{tokens}} vrijgemaakt)",
+ "phase": "Fase {{phase}}",
+ "conversationCompacted": "Gesprek gecompact",
+ "summary": "Eerdere berichten zijn samengevat om context te besparen. De volledige gespreksgeschiedenis blijft bewaard in het sessiebestand.",
+ "compacted": "Gecompact"
+ },
+ "executionTrace": {
+ "empty": "Geen uitvoeringsitems",
+ "nested": "Genest: {{name}}",
+ "input": "Invoer"
+ },
+ "items": {
+ "empty": "Geen items om weer te geven"
+ },
+ "tools": {
+ "teammateSpawned": "Teamlid aangemaakt",
+ "shutdownRequested": "Afsluiten aangevraagd ->",
+ "noResultReceived": "Geen resultaat ontvangen",
+ "duration": "Duur: {{duration}}",
+ "result": "Resultaat",
+ "write": {
+ "createdFile": "Bestand aangemaakt",
+ "wroteToFile": "Naar bestand geschreven"
+ },
+ "skill": {
+ "instructions": "Skill-instructies",
+ "unknown": "Onbekende skill"
+ }
+ },
+ "lastOutput": {
+ "requestInterrupted": "Verzoek onderbroken door gebruiker",
+ "planReadyForApproval": "Plan klaar voor goedkeuring"
+ },
+ "empty": {
+ "icon": "💬",
+ "title": "Geen gespreksgeschiedenis",
+ "description": "Deze sessie bevat nog geen berichten."
+ },
+ "context": {
+ "remainingPercent": "({{percent}}% over)",
+ "count": "Context ({{count}})",
+ "count_one": "Context ({{count}})",
+ "count_other": "Context ({{count}})",
+ "count_few": "Context ({{count}})",
+ "count_many": "Context ({{count}})"
+ },
+ "scrollToBottom": "Scroll naar beneden",
+ "bottom": "Onderaan",
+ "teammateMessage": {
+ "message": "Bericht",
+ "resent": "Opnieuw verzonden",
+ "fallback": "Bericht van teamlid"
+ },
+ "system": {
+ "label": "Systeem"
+ }
+ },
+ "tmuxInstaller": {
+ "summaryTitle": "tmux is niet geïnstalleerd",
+ "detectedOs": "Gedetecteerd OS: {{os}}",
+ "runtimePath": "Runtime-pad: {{path}}",
+ "phase": "Fase: {{phase}}",
+ "actions": {
+ "cancel": "Annuleren",
+ "manualGuide": "Handmatige gids",
+ "hideSetupSteps": "Installatiestappen verbergen",
+ "showSetupSteps": "Installatiestappen tonen ({{count}})",
+ "showSetupSteps_one": "Installatiestap tonen ({{count}})",
+ "showSetupSteps_other": "Installatiestappen tonen ({{count}})",
+ "recheck": "Opnieuw controleren",
+ "showSetupSteps_few": "Installatiestappen tonen ({{count}})",
+ "showSetupSteps_many": "Installatiestappen tonen ({{count}})"
+ },
+ "installerProgress": "Voortgang installatieprogramma",
+ "input": {
+ "placeholder": "Invoer naar het installatieprogramma sturen",
+ "send": "Invoer versturen",
+ "passwordNotice": "Wachtwoordinvoer wordt rechtstreeks naar de installatieprogramma-terminal gestuurd en wordt niet aan de loguitvoer toegevoegd."
+ },
+ "details": {
+ "show": "Details tonen",
+ "hide": "Details verbergen"
+ }
+ },
+ "commandPalette": {
+ "noRecentActivity": "Geen recente activiteit",
+ "sessionsCount": "{{count}} sessies",
+ "sessionsCount_one": "{{count}} sessie",
+ "sessionsCount_other": "{{count}} sessies",
+ "mode": {
+ "searchProjects": "Projecten zoeken",
+ "searchAcrossProjects": "Zoeken in alle projecten",
+ "searchInProject": "Zoeken in project"
+ },
+ "currentProject": "Huidig project",
+ "global": "Globaal",
+ "placeholders": {
+ "projects": "Projecten zoeken...",
+ "conversations": "Gesprekken zoeken..."
+ },
+ "empty": {
+ "noProjectsForQuery": "Geen projecten gevonden voor \"{{query}}\"",
+ "noProjects": "Geen projecten gevonden",
+ "minChars": "Typ minstens 2 tekens om te zoeken",
+ "noFastResults": "Geen snelle resultaten in recente sessies voor \"{{query}}\"",
+ "noResults": "Geen resultaten gevonden voor \"{{query}}\""
+ },
+ "footer": {
+ "projectsCount": "{{count}} projecten",
+ "projectsCount_one": "{{count}} project",
+ "projectsCount_other": "{{count}} projecten",
+ "results": "{{count}} {{speed}}resultaten",
+ "results_one": "{{count}} {{speed}}resultaat",
+ "results_other": "{{count}} {{speed}}resultaten",
+ "resultsAcrossProjects": "{{count}} {{speed}}resultaten in alle projecten",
+ "resultsAcrossProjects_one": "{{count}} {{speed}}resultaat in alle projecten",
+ "resultsAcrossProjects_other": "{{count}} {{speed}}resultaten in alle projecten",
+ "fastPrefix": "snelle ",
+ "typeToSearch": "Typ om te zoeken",
+ "navigate": "navigeren",
+ "select": "selecteren",
+ "open": "openen",
+ "global": "globaal",
+ "close": "sluiten",
+ "results_few": "{{count}} {{speed}}resultaten",
+ "results_many": "{{count}} {{speed}}resultaten",
+ "resultsAcrossProjects_few": "{{count}} {{speed}}resultaten in alle projecten",
+ "resultsAcrossProjects_many": "{{count}} {{speed}}resultaten in alle projecten",
+ "projectsCount_few": "{{count}} projecten",
+ "projectsCount_many": "{{count}} projecten",
+ "upDownKey": "↑↓",
+ "escapeKey": "esc"
+ },
+ "sessionsCount_few": "{{count}} sessies",
+ "sessionsCount_many": "{{count}} sessies"
+ },
+ "tasksPanel": {
+ "title": "Taken",
+ "searchPlaceholder": "Taken zoeken...",
+ "pinned": "Vastgemaakt",
+ "groupByLabel": "Groeperen op:",
+ "groupByAria": "Groeperen op",
+ "groupModes": {
+ "none": "Geen",
+ "project": "Project",
+ "time": "Tijd"
+ },
+ "showArchived": "Gearchiveerde tonen",
+ "hideArchived": "Gearchiveerde verbergen",
+ "empty": {
+ "noMatchingTasks": "Geen overeenkomende taken",
+ "noTasks": "Geen taken gevonden"
+ },
+ "teamLabel": "Team: {{team}}",
+ "showMore": "Meer tonen",
+ "showLess": "Minder tonen",
+ "deleteConfirm": {
+ "title": "Taak verwijderen",
+ "message": "Taak #{{taskId}} naar de prullenbak verplaatsen?",
+ "confirmLabel": "Verwijderen",
+ "cancelLabel": "Annuleren"
+ },
+ "deleteFailed": {
+ "title": "Kon taak niet verwijderen",
+ "fallbackMessage": "Er is een onverwachte fout opgetreden",
+ "confirmLabel": "OK"
+ },
+ "sort": {
+ "byTime": "Op tijd",
+ "byUnread": "Op ongelezen",
+ "byProject": "Op project",
+ "byTeam": "Op team"
+ }
+ },
+ "toolViewer": {
+ "input": "Invoer",
+ "replaceAll": "(alles vervangen)",
+ "noInputRecorded": "Geen invoer geregistreerd voor deze toolaanroep.",
+ "agent": {
+ "action": "actie",
+ "teammate": "teamlid",
+ "team": "team",
+ "runtime": "runtime",
+ "type": "type",
+ "startupInstructionsHidden": "Opstartinstructies zijn verborgen in de UI."
+ }
+ },
+ "taskContextMenu": {
+ "unpin": "Losmaken",
+ "pin": "Vastmaken",
+ "rename": "Hernoemen",
+ "markUnread": "Markeren als ongelezen",
+ "unarchive": "Dearchiveren",
+ "archive": "Archiveren",
+ "deleteTask": "Taak verwijderen"
+ },
+ "updateDialog": {
+ "closeDialog": "Dialoogvenster sluiten",
+ "updateAvailable": "Update beschikbaar",
+ "updateReady": "Update klaar",
+ "noReleaseNotes": "Geen release-opmerkingen beschikbaar.",
+ "viewOnGitHub": "Bekijken op GitHub",
+ "later": "Later",
+ "restartNow": "Nu opnieuw starten",
+ "download": "Downloaden"
+ },
+ "errorBoundary": {
+ "title": "Er is iets misgegaan",
+ "description": "Er is een onverwachte fout opgetreden in de applicatie. Je kunt proberen de pagina opnieuw te laden of de foutstatus te resetten.",
+ "componentStack": "Componentstack",
+ "tryAgain": "Opnieuw proberen",
+ "copied": "Gekopieerd",
+ "copyErrorDetails": "Foutdetails kopiëren",
+ "reportBugOnGitHub": "Bug melden op GitHub",
+ "reloadApp": "App opnieuw laden",
+ "diagnosticsNotice": "GitHub-bugmeldingen en gekopieerde diagnostiek bevatten de foutmelding, stacktraces, app-versie, actief tabblad, geselecteerd team, taakcontext en omgevingsdetails."
+ },
+ "runtimeBackendSelector": {
+ "label": "Runtime-backend",
+ "resolved": "Opgelost: {{backend}}",
+ "current": "Huidig",
+ "recommended": "Aanbevolen",
+ "unavailable": "Niet beschikbaar",
+ "cannotSelectYet": "Deze backend kan nog niet worden geselecteerd.",
+ "auto": "Auto",
+ "autoCurrently": "Auto (momenteel: {{backend}})",
+ "audience": {
+ "internal": "Intern"
+ },
+ "states": {
+ "locked": "Vergrendeld",
+ "disabled": "Uitgeschakeld",
+ "authRequired": "Authenticatie vereist",
+ "runtimeMissing": "Runtime ontbreekt",
+ "degraded": "Verminderd",
+ "unavailable": "Niet beschikbaar"
+ }
+ },
+ "providerModelBadges": {
+ "checking": "Controleren",
+ "unavailable": "Niet beschikbaar",
+ "checkFailed": "Controle mislukt",
+ "free": "Gratis",
+ "freeTooltip": "Gerapporteerd door OpenCode-metadata. Beschikbaarheid en limieten kunnen veranderen."
+ },
+ "taskFilters": {
+ "status": "Status",
+ "clearAll": "Alles wissen",
+ "selectAll": "Alles selecteren",
+ "team": "Team",
+ "allTeams": "Alle teams",
+ "searchTeams": "Teams zoeken...",
+ "noTeamsFound": "Geen teams gevonden",
+ "project": "Project",
+ "allProjects": "Alle projecten",
+ "searchProjects": "Projecten zoeken...",
+ "noProjects": "Geen projecten",
+ "comments": "Opmerkingen",
+ "apply": "Toepassen",
+ "read": {
+ "all": "Alle",
+ "unread": "Ongelezen",
+ "read": "Gelezen"
+ },
+ "statusOptions": {
+ "todo": "TE DOEN",
+ "inProgress": "BEZIG",
+ "needsFix": "TE HERSTELLEN",
+ "done": "KLAAR",
+ "review": "REVIEW",
+ "approved": "GOEDGEKEURD"
+ }
+ },
+ "sessionItem": {
+ "totalContext": "Totale context: {{tokens}} tokens",
+ "context": "Context: {{tokens}}",
+ "phase": "Fase {{phase}}:",
+ "compactedTo": "(gecompact tot {{tokens}})"
+ },
+ "notifications": {
+ "row": {
+ "team": "team",
+ "subagent": "subagent",
+ "markAsRead": "Markeren als gelezen",
+ "delete": "Verwijderen",
+ "viewInSession": "Bekijken in sessie"
+ },
+ "title": "Meldingen",
+ "loading": "Meldingen laden...",
+ "actions": {
+ "markFilteredAsRead": "Gefilterde markeren als gelezen",
+ "markAllAsRead": "Alles markeren als gelezen",
+ "markFilteredRead": "Gefilterde als gelezen markeren",
+ "markAllRead": "Alles als gelezen markeren",
+ "clearFilteredNotifications": "Gefilterde meldingen wissen",
+ "clearAllNotifications": "Alle meldingen wissen",
+ "clickToConfirm": "Klik om te bevestigen",
+ "clearFiltered": "Gefilterde wissen",
+ "clearAll": "Alles wissen"
+ },
+ "counts": {
+ "unreadInFilter": "{{count}} ongelezen in filter",
+ "unreadInFilter_one": "{{count}} ongelezen in filter",
+ "unreadInFilter_few": "{{count}} ongelezen in filter",
+ "unreadInFilter_many": "{{count}} ongelezen in filter",
+ "unreadInFilter_other": "{{count}} ongelezen in filter",
+ "inFilter": "{{count}} in filter",
+ "inFilter_one": "{{count}} in filter",
+ "inFilter_few": "{{count}} in filter",
+ "inFilter_many": "{{count}} in filter",
+ "inFilter_other": "{{count}} in filter",
+ "unread": "{{count}} ongelezen",
+ "unread_one": "{{count}} ongelezen",
+ "unread_few": "{{count}} ongelezen",
+ "unread_many": "{{count}} ongelezen",
+ "unread_other": "{{count}} ongelezen",
+ "total": "{{count}} totaal",
+ "total_one": "{{count}} totaal",
+ "total_few": "{{count}} totaal",
+ "total_many": "{{count}} totaal",
+ "total_other": "{{count}} totaal"
+ },
+ "filters": {
+ "other": "Overig"
+ },
+ "empty": {
+ "noMatching": "Geen overeenkomende meldingen",
+ "noNotifications": "Geen meldingen",
+ "tryDifferentFilter": "Probeer een ander filter",
+ "allCaughtUp": "Je bent helemaal bij!"
+ }
+ },
+ "updates": {
+ "restartToUpdate": "Opnieuw starten om bij te werken",
+ "updateApp": "App bijwerken",
+ "downloadedRestartTooltip": "Update gedownload, start opnieuw om toe te passen",
+ "newVersionAvailable": "Nieuwe versie beschikbaar",
+ "updatingApp": "App bijwerken",
+ "updateReady": "Update klaar",
+ "restartNow": "Nu opnieuw starten"
+ },
+ "layout": {
+ "github": "GitHub",
+ "discord": "Discord",
+ "expandSidebar": "Zijbalk uitklappen",
+ "collapseSidebarShortcut": "Zijbalk inklappen ({{shortcut}})",
+ "sidebarView": "Zijbalkweergave",
+ "resizeSidebar": "Zijbalkgrootte aanpassen",
+ "closeTab": "Tabblad sluiten",
+ "openedFromSearch": "Geopend vanuit zoeken",
+ "pinnedSession": "Vastgemaakte sessie",
+ "jumpToSection": "Naar sectie springen",
+ "newTab": "Nieuw tabblad",
+ "newTabDashboard": "Nieuw tabblad (Dashboard)",
+ "refreshSession": "Sessie vernieuwen",
+ "refreshSessionWithShortcut": "Sessie vernieuwen ({{shortcut}})",
+ "loadingTab": "Tabblad laden",
+ "menu": {
+ "teams": "Teams",
+ "settings": "Instellingen",
+ "extensions": "Extensies",
+ "search": "Zoeken",
+ "schedules": "Planningen",
+ "docs": "Docs",
+ "exportMarkdown": "Exporteren als Markdown",
+ "exportJson": "Exporteren als JSON",
+ "exportPlainText": "Exporteren als platte tekst",
+ "analyzeSession": "Sessie analyseren"
+ },
+ "tabMenu": {
+ "closeTabs": "{{count}} tabbladen sluiten",
+ "closeTabs_one": "{{count}} tabblad sluiten",
+ "closeTabs_few": "{{count}} tabbladen sluiten",
+ "closeTabs_many": "{{count}} tabbladen sluiten",
+ "closeTabs_other": "{{count}} tabbladen sluiten",
+ "closeTab": "Tabblad sluiten",
+ "closeOtherTabs": "Andere tabbladen sluiten",
+ "splitRight": "Naar rechts splitsen",
+ "splitLeft": "Naar links splitsen",
+ "pinToSidebar": "Vastmaken aan zijbalk",
+ "unpinFromSidebar": "Losmaken van zijbalk",
+ "hideFromSidebar": "Verbergen uit zijbalk",
+ "unhideFromSidebar": "Weergeven in zijbalk",
+ "closeAllTabs": "Alle tabbladen sluiten"
+ },
+ "sections": {
+ "team": "Team",
+ "sessions": "Sessies",
+ "kanban": "Kanban",
+ "claudeLogs": "Logs",
+ "messages": "Berichten"
+ }
+ },
+ "editorFormatting": {
+ "bold": "Vet",
+ "italic": "Cursief",
+ "strike": "Doorhalen",
+ "code": "Code"
+ },
+ "diff": {
+ "changed": "Gewijzigd",
+ "noChangesDetected": "Geen wijzigingen gedetecteerd"
+ },
+ "codexLogin": {
+ "copyLoginLinkAndCode": "ChatGPT-loginlink en code kopiëren",
+ "copyLoginLink": "ChatGPT-loginlink kopiëren",
+ "copyFailed": "Kopiëren mislukt",
+ "copyLinkAndCode": "Link + code kopiëren",
+ "copyLink": "Link kopiëren",
+ "enterCodeOnLoginPage": "Voer deze code in op de ChatGPT-loginpagina"
+ },
+ "window": {
+ "minimize": "Minimaliseren",
+ "maximize": "Maximaliseren",
+ "restore": "Herstellen"
+ },
+ "context": {
+ "local": "Lokaal",
+ "switchingTo": "Overschakelen naar {{workspace}}",
+ "loadingWorkspace": "Werkruimte laden",
+ "switchWorkspace": "Werkruimte wisselen"
+ },
+ "repositories": {
+ "noneAvailable": "Geen repositories beschikbaar",
+ "remove": "Repository verwijderen"
+ },
+ "export": {
+ "session": "Sessie exporteren",
+ "sessionTitle": "Sessie exporteren"
+ },
+ "brand": {
+ "claude": "Claude"
+ },
+ "sessionReport": {
+ "noSessionData": "Geen sessiegegevens beschikbaar",
+ "title": "Sessierapport"
+ },
+ "sessionFilters": {
+ "project": {
+ "selectProject": "Project selecteren"
+ }
+ },
+ "tasks": {
+ "date": {
+ "updatedPrefix": "bijgew.",
+ "updatedYesterday": "bijgew. gisteren",
+ "yesterday": "Gisteren"
+ },
+ "reviewState": {
+ "needsFix": "Te herstellen"
+ },
+ "unassigned": "niet toegewezen"
+ }
+}
diff --git a/src/features/localization/renderer/locales/nl/dashboard.json b/src/features/localization/renderer/locales/nl/dashboard.json
new file mode 100644
index 00000000..7db8b531
--- /dev/null
+++ b/src/features/localization/renderer/locales/nl/dashboard.json
@@ -0,0 +1,197 @@
+{
+ "cliStatus": {
+ "actions": {
+ "alreadyLoggedIn": "Al ingelogd?",
+ "becomeSponsor": "Word sponsor",
+ "cancel": "Annuleren",
+ "checkNow": "Nu controleren",
+ "checkUpdates": "Controleren op updates",
+ "checking": "Controleren...",
+ "connect": "Verbinden",
+ "extensions": "Extensies",
+ "login": "Inloggen",
+ "manage": "Beheren",
+ "manageProviders": "Providers beheren",
+ "plan": "Abonnement",
+ "recheck": "Opnieuw controleren",
+ "recheckProvider": "{{provider}} opnieuw controleren",
+ "retry": "Opnieuw proberen",
+ "updateTo": "Bijwerken naar v{{version}}",
+ "useCode": "Code gebruiken"
+ },
+ "atlas": {
+ "alt": "Atlas Cloud",
+ "description": "Atlas Cloud is een full-modal AI-inferentieplatform dat ontwikkelaars één AI-API biedt voor toegang tot videogeneratie, beeldgeneratie en LLM-API's. In plaats van meerdere leveranciersintegraties te beheren, maak je één keer verbinding en krijg je uniforme toegang tot meer dan 300 zorgvuldig geselecteerde modellen voor alle modaliteiten. Bekijk de nieuwe coding-plan-promotie van Atlas Cloud voor budgetvriendelijkere API-toegang.",
+ "openCodeProvider": "OpenCode-provider",
+ "plan": "Atlas Cloud coding-abonnement",
+ "sponsor": "Sponsor"
+ },
+ "errors": {
+ "checkStatusFailed": "Kon CLI-status niet controleren",
+ "installationFailed": "Installatie mislukt",
+ "refreshFailed": "Kon niet controleren op updates. Controleer je netwerkverbinding en probeer het opnieuw.",
+ "runtimeUpdatedRefreshFailed": "Runtime bijgewerkt, maar kon providerstatus niet vernieuwen."
+ },
+ "hints": {
+ "backgroundStatus": "De status van {{runtime}} wordt op de achtergrond gecontroleerd.",
+ "codexApiKeyFallback": "{{hint}} API-sleutel-fallback is beschikbaar als je de authenticatiemodus wijzigt.",
+ "codexAutoApiKey": "{{hint}} Auto blijft de API-sleutel gebruiken totdat ChatGPT is verbonden.",
+ "codexFinishLogin": "Voltooi het inloggen bij ChatGPT in de browser. Voer de getoonde code in indien gevraagd.",
+ "codexNoActiveLogin": "Gebruikslimieten verschijnen pas nadat Codex CLI een actief ChatGPT-account ziet. Op dit moment meldt het geen actieve ChatGPT-login.",
+ "codexNoActiveManagedSession": "Gebruikslimieten verschijnen pas nadat Codex CLI een actief ChatGPT-account ziet. Er bestaan lokale Codex-accountgegevens, maar er is op dit moment geen actieve beheerde sessie geselecteerd.",
+ "codexReconnectNeeded": "Gebruikslimieten verschijnen pas nadat Codex de momenteel geselecteerde ChatGPT-sessie vernieuwt. Op dit moment moet de lokale sessie opnieuw verbinden.",
+ "firstCheckSlow": "De eerste controle kan tot 30 seconden duren",
+ "loginRequiredForTeams": "Door sessies en projecten bladeren werkt zonder inloggen. Inloggen is alleen nodig om agentteams uit te voeren.",
+ "troubleshootTitle": "Als je zeker weet dat je ingelogd bent, probeer dan deze stappen:"
+ },
+ "installer": {
+ "checkingLatest": "Nieuwste versie controleren...",
+ "downloading": "{{runtime}} downloaden...",
+ "installing": "{{runtime}} installeren...",
+ "success": "{{runtime}} v{{version}} is geïnstalleerd",
+ "verifying": "Checksum verifiëren..."
+ },
+ "labels": {
+ "apiKeyRequired": "API-sleutel vereist",
+ "comingSoon": "Binnenkort beschikbaar",
+ "collapseProviderDetails": "Providerdetails inklappen",
+ "expandProviderDetails": "Providerdetails uitklappen",
+ "generateLink": "Link genereren",
+ "loadingRateLimits": "Limieten laden",
+ "loggedOut": "Provider uitgelogd",
+ "loginAuthFailed": "Authenticatie mislukt",
+ "loginAuthUpdated": "Authenticatie bijgewerkt",
+ "loginComplete": "Inloggen voltooid",
+ "loginFailed": "Inloggen mislukt",
+ "loginTitle": "Inloggen",
+ "logoutFailed": "Uitloggen mislukt",
+ "logoutTitle": "Uitloggen",
+ "notLoggedIn": "Niet ingelogd",
+ "openLogin": "Inloggen openen",
+ "providerActionRequired": "Actie van provider vereist",
+ "resets": "wordt {{time}} gereset",
+ "runtimeLoginTitle": "{{runtime}} inloggen"
+ },
+ "loading": {
+ "aiProviders": "AI-providers controleren...",
+ "claudeCli": "Claude CLI controleren..."
+ },
+ "provider": {
+ "authenticated": "Geauthenticeerd",
+ "backend": "Backend: {{backend}}",
+ "checkingAuthentication": "Authenticatie controleren...",
+ "checkingProviders": "Providers controleren...",
+ "configuredLocalCount": "{{count}} lokaal geconfigureerd",
+ "configuredLocalCount_few": "{{count}} lokaal geconfigureerd",
+ "configuredLocalCount_many": "{{count}} lokaal geconfigureerd",
+ "configuredLocalCount_one": "{{count}} lokaal geconfigureerd",
+ "configuredLocalCount_other": "{{count}} lokaal geconfigureerd",
+ "configuredLocalTitle": "Lokale OpenCode-routes geïmporteerd uit je OpenCode-configuratie.",
+ "connectedCount": "Providers: {{connected}}/{{denominator}} verbonden",
+ "freeModels": "Gratis modellen",
+ "freeModelsTitle": "OpenCode bevat gratis modelopties zoals Big Pickle indien beschikbaar in je configuratie. OpenRouter via OpenCode kan ook gratis modellen tonen, maar niet elk OpenCode/OpenRouter-model is gratis. Beschikbaarheid en limieten kunnen veranderen.",
+ "loadingModels": "Modellen laden...",
+ "modelsUnavailable": "Modellen niet beschikbaar voor deze runtime-build",
+ "runtime": "Runtime: {{runtime}}",
+ "verifiedCount": "{{count}} geverifieerd",
+ "verifiedCount_few": "{{count}} geverifieerd",
+ "verifiedCount_many": "{{count}} geverifieerd",
+ "verifiedCount_one": "{{count}} geverifieerd",
+ "verifiedCount_other": "{{count}} geverifieerd",
+ "verifiedTitle": "OpenCode-routes met een succesvol uitvoeringsbewijs."
+ },
+ "runtime": {
+ "configuredHealthCheckFailed": "De geconfigureerde {{runtime}} is niet geslaagd voor de opstartcontrole.",
+ "configuredNotFound": "De geconfigureerde {{runtime}} is niet gevonden.",
+ "foundButFailed": "{{runtime}} is gevonden maar kon niet starten",
+ "healthCheckFailedDescription": "De app heeft de geconfigureerde {{runtime}} gevonden, maar de opstartcontrole is mislukt. Herstel of installeer het opnieuw en probeer het dan opnieuw.",
+ "install": "{{runtime}} installeren",
+ "installRequiredDescription": "{{runtime}} is vereist voor teamprovisioning en sessiebeheer. Installeer het om aan de slag te gaan.",
+ "isRequired": "{{runtime}} is vereist",
+ "reinstall": "{{runtime}} opnieuw installeren"
+ },
+ "runtimeInstall": {
+ "checking": "Controleren",
+ "codexTitle": "Codex CLI in app-data installeren",
+ "downloading": "Downloaden",
+ "downloadingPercent": "Downloaden {{percent}}%",
+ "install": "Installeren",
+ "installing": "Installeren",
+ "openCodeTitle": "OpenCode-runtime in app-data installeren",
+ "retryInstall": "Installatie opnieuw proberen"
+ },
+ "troubleshoot": {
+ "again": "opnieuw",
+ "authStatusCommand": "je geconfigureerde CLI-authenticatiestatuscommando",
+ "checkLoggedIn": "- controleer of het \"Logged in\" toont",
+ "click": "Klik",
+ "loginCommand": "het runtime-logincommando",
+ "logoutCommand": "het runtime-logoutcommando",
+ "openTerminal": "Open je terminal en voer uit:",
+ "reloginPrefix": "Als het zegt dat je ingelogd bent maar de app dit niet ziet, probeer dan:",
+ "sameRuntime": "Zorg ervoor dat de CLI in je terminal dezelfde runtime is die de app gebruikt",
+ "statusCacheHint": "- soms wordt de status enkele seconden gecachet",
+ "then": "vervolgens"
+ },
+ "warnings": {
+ "multipleApiKeysMissing": "Een of meer providers staan in API-sleutelmodus, maar er is geen API-sleutel geconfigureerd. Open Providers beheren om sleutels toe te voegen of de verbindingsmodus te wijzigen.",
+ "multipleApiKeysNeedAttention": "Een of meer providers staan in API-sleutelmodus en hebben aandacht nodig. Open Providers beheren om opgeslagen sleutels te bekijken of de verbindingsmodus te wijzigen.",
+ "notAuthenticated": "{{runtime}} is geïnstalleerd maar je bent niet geauthenticeerd. Inloggen is vereist voor teamprovisioning en AI-functies.",
+ "singleApiKeyMissing": "{{provider}} staat in API-sleutelmodus, maar er is geen API-sleutel geconfigureerd. Open Providers beheren om een sleutel toe te voegen of de verbindingsmodus te wijzigen.",
+ "singleApiKeyNeedsAttention": "{{provider}} staat in API-sleutelmodus, maar is niet verbonden. Open Providers beheren om de opgeslagen sleutel te bekijken of de verbindingsmodus te wijzigen."
+ }
+ },
+ "recentProjects": {
+ "selectFolderTitle": "Selecteer een projectmap",
+ "selectFolder": "Map selecteren",
+ "failedToLoad": "Kon projecten niet laden",
+ "retry": "Opnieuw proberen",
+ "noProjects": "Geen projecten gevonden",
+ "noMatches": "Geen resultaten voor \"{{query}}\"",
+ "noRecentProjects": "Geen recente projecten gevonden",
+ "emptyDescription": "Recente Claude- en Codex-activiteit verschijnt hier.",
+ "loadMore": "Meer laden",
+ "card": {
+ "deleted": "Verwijderd",
+ "projectFolderMissing": "Projectmap bestaat niet meer",
+ "taskCounts": {
+ "active": "{{count}} actief",
+ "active_one": "{{count}} actief",
+ "active_other": "{{count}} actief",
+ "active_few": "{{count}} actief",
+ "active_many": "{{count}} actief",
+ "pending": "{{count}} in behandeling",
+ "pending_one": "{{count}} in behandeling",
+ "pending_other": "{{count}} in behandeling",
+ "pending_few": "{{count}} in behandeling",
+ "pending_many": "{{count}} in behandeling",
+ "done": "{{count}} voltooid",
+ "done_one": "{{count}} voltooid",
+ "done_other": "{{count}} voltooid",
+ "done_few": "{{count}} voltooid",
+ "done_many": "{{count}} voltooid"
+ }
+ },
+ "title": "Recente projecten",
+ "searchResults": "Zoekresultaten",
+ "searchPlaceholder": "Projecten zoeken..."
+ },
+ "actions": {
+ "selectTeam": "Team selecteren",
+ "or": "of",
+ "clearSearch": "Zoekopdracht wissen"
+ },
+ "windowsAdmin": {
+ "title": "Windows-beheerdersmodus aanbevolen",
+ "description": "Controles van de OpenCode-runtime kunnen verlopen wanneer Agent Teams AI niet verhoogd is. Start de app opnieuw met Als administrator uitvoeren voordat je OpenCode-teams start."
+ },
+ "webPreview": {
+ "title": "Open de desktop-app voor volledige functionaliteit",
+ "description": "De browserversie is nog in ontwikkeling. Projectacties, integraties en live statusupdates kunnen hier beperkt zijn. Gebruik de desktop-app om betrouwbaar toegang te krijgen tot alle functies."
+ },
+ "updateBanner": {
+ "newVersionAvailable": "Nieuwe versie beschikbaar",
+ "restartNow": "Nu opnieuw starten",
+ "viewDetails": "Details bekijken"
+ }
+}
diff --git a/src/features/localization/renderer/locales/nl/errors.json b/src/features/localization/renderer/locales/nl/errors.json
new file mode 100644
index 00000000..234524cf
--- /dev/null
+++ b/src/features/localization/renderer/locales/nl/errors.json
@@ -0,0 +1,3 @@
+{
+ "fallback": "Er is iets misgegaan."
+}
diff --git a/src/features/localization/renderer/locales/nl/extensions.json b/src/features/localization/renderer/locales/nl/extensions.json
new file mode 100644
index 00000000..f6b250cf
--- /dev/null
+++ b/src/features/localization/renderer/locales/nl/extensions.json
@@ -0,0 +1,688 @@
+{
+ "store": {
+ "actions": {
+ "addCustom": "Aangepast toevoegen",
+ "openDashboard": "Dashboard openen",
+ "refreshCatalog": "Catalogus vernieuwen"
+ },
+ "capabilities": {
+ "mcp": "MCP: {{status}}",
+ "plugins": "Plugins: {{status}}",
+ "skills": "Skills: {{status}}"
+ },
+ "desktopOnly": "Alleen beschikbaar in de desktop-app.",
+ "provider": {
+ "checkingStatus": "Providerstatus controleren...",
+ "connected": "Verbonden",
+ "loading": "Laden...",
+ "needsSetup": "Configuratie nodig",
+ "readyToConfigure": "Klaar om te configureren",
+ "unsupported": "Niet ondersteund"
+ },
+ "runtime": {
+ "checkingAvailabilityDescription": "Extensies hebben de geconfigureerde runtime nodig om plugins, MCP-servers, skills en providerverbindingen te beheren.",
+ "checkingAvailabilityTitle": "Beschikbaarheid van extensie-runtime controleren",
+ "failedToStartDescription": "Extensies zijn uitgeschakeld totdat de runtime de opstartcontrole doorstaat. Open het Dashboard om het te herstellen of opnieuw te installeren.",
+ "failedToStartTitle": "De geconfigureerde runtime is gevonden maar kon niet starten",
+ "multimodelCapabilitiesDescription": "Providerondersteuning kan per sectie verschillen. Plugins worden alleen getoond waar de runtime expliciet ondersteuning aangeeft.",
+ "multimodelCapabilitiesTitle": "Multimodel-runtimemogelijkheden",
+ "needsSignInDescription": "{{runtime}} is gevonden{{version}}, maar plugin-installaties zijn uitgeschakeld totdat je inlogt vanuit het Dashboard.",
+ "needsSignInTitle": "{{runtime}} vereist inloggen",
+ "notAvailableDescription": "Extensies zijn uitgeschakeld totdat de runtime is geïnstalleerd. Open het Dashboard om het te installeren en probeer het opnieuw.",
+ "notAvailableTitle": "De geconfigureerde runtime is niet beschikbaar",
+ "readyDescription": "Plugins kunnen vanaf deze pagina worden geïnstalleerd{{versionSuffix}}.",
+ "readyTitle": "{{runtime}} is klaar",
+ "requiredForMutations": "De geconfigureerde runtime is vereist om extensies te installeren of te verwijderen. Installeer of herstel het via het Dashboard."
+ },
+ "sessionsRestartWarning": "Lopende sessies nemen extensiewijzigingen pas over na een herstart.",
+ "tabs": {
+ "apiKeys": {
+ "description": "Geheime sleutels voor onlinediensten. Voeg ze hier toe zodat plugins, servers en integraties verbinding kunnen maken en werken.",
+ "label": "API-sleutels"
+ },
+ "mcpServers": {
+ "description": "Verbindingen met externe tools en apps. Hiermee kan de runtime gegevens lezen of acties uitvoeren buiten deze app.",
+ "label": "MCP-servers"
+ },
+ "plugins": {
+ "description": "Kleine add-ons voor de runtime. In multimodel-modus zijn ze momenteel van toepassing op Anthropic-sessies indien ondersteund. Bredere providerondersteuning is in ontwikkeling.",
+ "label": "Plugins"
+ },
+ "skills": {
+ "description": "Kant-en-klare instructies voor veelvoorkomende taken. Ze helpen de runtime herhaalbare taken consistenter af te handelen.",
+ "label": "Skills"
+ }
+ },
+ "title": "Extensies"
+ },
+ "pluginsPanel": {
+ "activeFilters": "{{count}} actief",
+ "browseByFit": "Bladeren op geschiktheid",
+ "capabilities": "Mogelijkheden",
+ "categories": "Categorieën",
+ "clearAllFilters": "Alle filters wissen",
+ "clearFilters": "Filters wissen",
+ "counts": {
+ "capabilities": "{{count}} mogelijkheden",
+ "categories": "{{count}} categorieën",
+ "plugins": "{{count}} plugins",
+ "capabilities_few": "{{count}} mogelijkheden",
+ "capabilities_many": "{{count}} mogelijkheden",
+ "capabilities_one": "{{count}} mogelijkheden",
+ "capabilities_other": "{{count}} mogelijkheden",
+ "categories_few": "{{count}} categorieën",
+ "categories_many": "{{count}} categorieën",
+ "categories_one": "{{count}} categorieën",
+ "categories_other": "{{count}} categorieën",
+ "plugins_few": "{{count}} plugins",
+ "plugins_many": "{{count}} plugins",
+ "plugins_one": "{{count}} plugins",
+ "plugins_other": "{{count}} plugins"
+ },
+ "empty": {
+ "description": "Kom later terug voor nieuwe plugins",
+ "filteredDescription": "Probeer je zoekopdracht of filtercriteria aan te passen",
+ "filteredTitle": "Geen plugins komen overeen met je filters",
+ "title": "Geen plugins beschikbaar"
+ },
+ "filterDescription": "Verfijn de catalogus op categorie, mogelijkheid of geïnstalleerde status.",
+ "installedOnly": "Alleen geïnstalleerd",
+ "providerSupportNotice": "Pluginondersteuning is momenteel alleen gegarandeerd voor Anthropic-sessies (Claude). We werken eraan om plugins voor alle agents te ondersteunen.",
+ "resultsUpdateInstantly": "Resultaten worden direct bijgewerkt terwijl je filters verfijnt.",
+ "searchPlaceholder": "Plugins zoeken...",
+ "selectedCount": "{{count}} geselecteerd",
+ "showing": "{{shown}} van {{total}} plugins getoond",
+ "sort": {
+ "category": "Categorie",
+ "nameAsc": "Naam A-Z",
+ "nameDesc": "Naam Z-A",
+ "popular": "Populair"
+ },
+ "activeFilters_few": "{{count}} actief",
+ "activeFilters_many": "{{count}} actief",
+ "activeFilters_one": "{{count}} actief",
+ "activeFilters_other": "{{count}} actief",
+ "selectedCount_few": "{{count}} geselecteerd",
+ "selectedCount_many": "{{count}} geselecteerd",
+ "selectedCount_one": "{{count}} geselecteerd",
+ "selectedCount_other": "{{count}} geselecteerd"
+ },
+ "customMcp": {
+ "actions": {
+ "add": "Toevoegen",
+ "cancel": "Annuleren",
+ "install": "Installeren",
+ "installing": "Installeren..."
+ },
+ "description": "Voeg handmatig een server toe zonder de catalogus.",
+ "errors": {
+ "installFailed": "Installatie mislukt",
+ "invalidServerName": "Ongeldige servernaam. Gebruik alfanumerieke tekens, koppeltekens, underscores en punten.",
+ "npmPackageRequired": "npm-pakketnaam is vereist",
+ "serverNameRequired": "Servernaam is vereist",
+ "serverUrlRequired": "Server-URL is vereist"
+ },
+ "fields": {
+ "environmentVariables": "Omgevingsvariabelen",
+ "headers": "Headers",
+ "npmPackage": "npm-pakket",
+ "scope": "Scope",
+ "serverName": "Servernaam",
+ "serverUrl": "Server-URL",
+ "transport": "Transport",
+ "transportType": "Transporttype",
+ "versionOptional": "Versie (optioneel)"
+ },
+ "title": "Aangepaste MCP-server toevoegen",
+ "transport": {
+ "httpSse": "HTTP / SSE",
+ "stdio": "Stdio (npm)"
+ },
+ "placeholders": {
+ "headerName": "Header-Name",
+ "envVarName": "ENV_VAR_NAME",
+ "serverName": "my-server",
+ "latest": "latest",
+ "value": "waarde",
+ "serverUrl": "https://api.example.com/mcp"
+ }
+ },
+ "mcpDetail": {
+ "auth": {
+ "remoteMayNeedHeaders": "Externe MCP-servers kunnen nog steeds aangepaste headers of API-sleutels vereisen, zelfs als het register die niet beschrijft. Als de verbinding na de installatie mislukt, raadpleeg dan de providerdocumentatie.",
+ "required": "Deze server vereist authenticatie"
+ },
+ "diagnostics": {
+ "launchTarget": "Startdoel"
+ },
+ "form": {
+ "autoFilled": "Automatisch ingevuld",
+ "environmentVariables": "Omgevingsvariabelen",
+ "headers": "Headers",
+ "scope": "Scope",
+ "serverName": "Servernaam"
+ },
+ "install": {
+ "httpTransport": "HTTP: {{transport}}",
+ "manualSetupDescription": "Deze server vereist handmatige configuratie. Raadpleeg de repository voor installatie-instructies.",
+ "manualSetupRequired": "Handmatige configuratie vereist",
+ "npmPackage": "npm: {{package}}",
+ "manage": "Installatie beheren",
+ "install": "Server installeren"
+ },
+ "links": {
+ "glama": "Glama",
+ "repository": "Repository",
+ "website": "Website"
+ },
+ "metadata": {
+ "author": "Auteur",
+ "githubStars": "GitHub-sterren",
+ "hosting": "Hosting",
+ "installType": "Installatietype",
+ "license": "Licentie",
+ "published": "Gepubliceerd",
+ "source": "Bron",
+ "updated": "Bijgewerkt",
+ "version": "Versie"
+ },
+ "scope": {
+ "local": "Lokaal",
+ "project": "Project"
+ },
+ "tools": {
+ "title": "Tools ({{count}})",
+ "title_few": "Tools ({{count}})",
+ "title_many": "Tools ({{count}})",
+ "title_one": "Tools ({{count}})",
+ "title_other": "Tools ({{count}})"
+ },
+ "placeholders": {
+ "serverName": "my-server"
+ }
+ },
+ "skillEditor": {
+ "actions": {
+ "cancel": "Annuleren",
+ "createSkill": "Skill aanmaken",
+ "preparing": "Voorbereiden...",
+ "reviewAndCreate": "Controleren en aanmaken",
+ "reviewAndSave": "Controleren en opslaan",
+ "saveSkill": "Skill opslaan"
+ },
+ "advanced": {
+ "customDescription": "Deze skill gebruikt een aangepast markdown-formaat, dus bewerk het hier rechtstreeks.",
+ "customTitle": "2. SKILL.md-editor",
+ "description": "De meeste mensen kunnen dit overslaan. Open het alleen als je directe controle over het ruwe markdown-bestand wilt.",
+ "hide": "Geavanceerde editor verbergen",
+ "resetFromStructuredFields": "Resetten vanuit gestructureerde velden",
+ "show": "Geavanceerde editor tonen",
+ "title": "4. Geavanceerde SKILL.md-editor"
+ },
+ "basics": {
+ "description": "Geef deze skill een duidelijke naam, kies wie het kan gebruiken en bepaal waar het moet komen te staan.",
+ "title": "1. Basis"
+ },
+ "description": {
+ "create": "Beschrijf de workflow in gewone taal, controleer de bestanden die worden aangemaakt en sla het vervolgens op.",
+ "edit": "Werk deze skill bij, controleer de resulterende bestandswijzigingen en sla het vervolgens op."
+ },
+ "extraFiles": {
+ "addedFiles": "Toegevoegde bestanden:",
+ "assets": "Assets",
+ "assetsDescription": "Voeg alleen screenshots of gebundelde media toe als ze helpen de workflow uit te leggen.",
+ "description": "Voeg alleen ondersteunende documenten, scripts of assets toe als deze skill ze echt nodig heeft.",
+ "lockedForEdits": "Root en map zijn vergrendeld voor bewerkingen",
+ "optionalDescription": "Voeg startbestanden toe die worden meegenomen in de controle en samen met `SKILL.md` worden weggeschreven.",
+ "optionalTitle": "Optionele bestanden",
+ "references": "Referenties",
+ "referencesDescription": "Voeg ondersteunende documenten, links of voorbeelden toe die de runtime kan raadplegen.",
+ "scripts": "Scripts",
+ "scriptsDescription": "Voeg hulpcommando's of configuratienotities toe. Controleer zorgvuldig voordat je deze skill deelt.",
+ "title": "3. Extra bestanden"
+ },
+ "fields": {
+ "compatibility": "Compatibiliteit",
+ "description": "Beschrijving",
+ "folderName": "Mapnaam",
+ "folderNameHint": "We stellen dit automatisch voor op basis van de skillnaam, zodat de controle direct werkt.",
+ "invocation": "Hoe het moet worden gebruikt",
+ "license": "Licentie",
+ "name": "Skillnaam",
+ "notes": "Extra notities of vangrails",
+ "root": "Waar het op te slaan",
+ "scope": "Wie het kan gebruiken",
+ "steps": "Belangrijkste te volgen stappen",
+ "whenToUse": "Wanneer je dit moet gebruiken"
+ },
+ "instructions": {
+ "description": "Deze secties genereren het skillbestand voor je, dus je hoeft geen markdown te bewerken tenzij je dat wilt.",
+ "locked": "Gestructureerde velden zijn vergrendeld omdat je hieronder bent overgeschakeld naar handmatige `SKILL.md`-bewerking.",
+ "title": "2. Instructies"
+ },
+ "invocation": {
+ "auto": "Kan automatisch worden gebruikt",
+ "manualOnly": "Alleen wanneer je erom vraagt"
+ },
+ "placeholders": {
+ "description": "Waar deze skill bij helpt",
+ "name": "Schrijf een beknopte skillnaam",
+ "notes": "Voorbeeld: Wijs op ontbrekende tests, regressies en riskante aannames.",
+ "steps": "1. Inspecteer de relevante bestanden.\n2. Leg eerst het belangrijkste risico uit.\n3. Stel de veiligste oplossing voor.",
+ "whenToUse": "Voorbeeld: Gebruik dit wanneer de taak een codereview of bug-triageverzoek is.",
+ "license": "MIT",
+ "compatibility": "claude-code, cursor"
+ },
+ "review": {
+ "creating": "Een skill aanmaken",
+ "hint": "Controleer eerst de bestandswijzigingen en bevestig daarna het opslaan in de volgende stap.",
+ "saving": "Deze skill opslaan"
+ },
+ "root": {
+ "codexOnly": " - Alleen Codex",
+ "shared": " - Gedeeld"
+ },
+ "scope": {
+ "project": "Project: {{project}}",
+ "projectUnavailable": "Project niet beschikbaar",
+ "user": "Gebruiker"
+ },
+ "title": {
+ "create": "Skill aanmaken",
+ "edit": "Skill bewerken"
+ }
+ },
+ "skillDetail": {
+ "actions": {
+ "cancel": "Annuleren",
+ "delete": "Verwijderen",
+ "deleteSkill": "Skill verwijderen",
+ "deleting": "Verwijderen...",
+ "editSkill": "Skill bewerken",
+ "openFolder": "Map openen",
+ "openSkillFile": "SKILL.md openen",
+ "retry": "Opnieuw proberen"
+ },
+ "badges": {
+ "assets": "Assets",
+ "autoUse": "Automatisch gebruik",
+ "hasScripts": "Bevat scripts",
+ "manualUse": "Handmatig gebruik",
+ "references": "Referenties",
+ "storedIn": "Opgeslagen in {{root}}"
+ },
+ "deleteDialog": {
+ "description": "Deze skill verwijderen en naar de Prullenbak verplaatsen?",
+ "descriptionWithName": "\"{{name}}\" verwijderen en naar de Prullenbak verplaatsen? Je kunt het later indien nodig herstellen vanuit de Prullenbak.",
+ "title": "Skill verwijderen?"
+ },
+ "descriptionFallback": "Bekijk gevonden skill-metadata en ruwe instructies.",
+ "errors": {
+ "deleteFailed": "Kon skill niet verwijderen",
+ "loadFailed": "Kan deze skill niet laden."
+ },
+ "files": {
+ "advancedDetails": "Geavanceerde bestandsdetails",
+ "assets": "Assets",
+ "references": "Referenties",
+ "scripts": "Scripts",
+ "storedAt": "Opgeslagen op"
+ },
+ "includes": {
+ "assets": "assets",
+ "instructionsOnly": "Alleen de skill-instructies",
+ "references": "referenties",
+ "scripts": "scripts"
+ },
+ "invocation": {
+ "auto": "Wordt automatisch uitgevoerd wanneer het bij de taak past.",
+ "manualOnly": "Wordt alleen uitgevoerd wanneer je er expliciet om vraagt."
+ },
+ "issues": {
+ "bundledScripts": "Deze skill bevat gebundelde scripts",
+ "reviewCarefully": "Controleer deze skill zorgvuldig voordat je het gebruikt"
+ },
+ "loading": "Skill-details laden...",
+ "scope": {
+ "personal": "Je persoonlijke skills",
+ "projectOnly": "Alleen dit project"
+ },
+ "summary": {
+ "howUsed": "Hoe het wordt gebruikt",
+ "included": "Wat erbij hoort",
+ "whoCanUse": "Wie het kan gebruiken"
+ },
+ "titleFallback": "Skill-details"
+ },
+ "skillsPanel": {
+ "actions": {
+ "createSkill": "Skill aanmaken",
+ "import": "Importeren"
+ },
+ "badges": {
+ "assets": "Assets",
+ "hasScripts": "Bevat scripts",
+ "needsAttention": "Aandacht nodig",
+ "references": "Referenties",
+ "storedIn": "Opgeslagen in {{root}}"
+ },
+ "configuredRuntime": "de geconfigureerde runtime",
+ "counts": {
+ "codexOnly": "{{count}} alleen Codex",
+ "personal": "{{count}} persoonlijk",
+ "project": "{{count}} project",
+ "shared": "{{count}} gedeeld",
+ "total": "{{count}} totaal",
+ "codexOnly_few": "{{count}} alleen Codex",
+ "codexOnly_many": "{{count}} alleen Codex",
+ "codexOnly_one": "{{count}} alleen Codex",
+ "codexOnly_other": "{{count}} alleen Codex",
+ "personal_few": "{{count}} persoonlijk",
+ "personal_many": "{{count}} persoonlijk",
+ "personal_one": "{{count}} persoonlijk",
+ "personal_other": "{{count}} persoonlijk",
+ "project_few": "{{count}} project",
+ "project_many": "{{count}} project",
+ "project_one": "{{count}} project",
+ "project_other": "{{count}} project",
+ "shared_few": "{{count}} gedeeld",
+ "shared_many": "{{count}} gedeeld",
+ "shared_one": "{{count}} gedeeld",
+ "shared_other": "{{count}} gedeeld",
+ "total_few": "{{count}} totaal",
+ "total_many": "{{count}} totaal",
+ "total_one": "{{count}} totaal",
+ "total_other": "{{count}} totaal"
+ },
+ "empty": {
+ "noMatches": "Geen skills komen overeen met je zoekopdracht",
+ "noMatchesDescription": "Probeer een andere zoekterm of wijzig de filters.",
+ "noSkills": "Nog geen skills",
+ "noSkillsDescription": "Maak je eerste skill aan om een herhaalbare workflow aan te leren, of importeer er een die je al gebruikt."
+ },
+ "filters": {
+ "all": "Alle skills",
+ "codexOnly": "Alleen Codex",
+ "hasScripts": "Bevat scripts",
+ "needsAttention": "Aandacht nodig",
+ "personal": "Persoonlijk",
+ "project": "Project",
+ "shared": "Gedeeld"
+ },
+ "hero": {
+ "codexAvailable": "Gebruik `.codex` wanneer een skill alleen voor Codex moet blijven.",
+ "codexUnavailable": "Bestaande `.codex`-skills blijven hier bewerkbaar, maar nieuwe skills die alleen voor Codex zijn, vereisen dat de Codex-runtime is ingeschakeld.",
+ "description": "Skills zijn herbruikbare instructies die de runtime helpen hetzelfde soort taak consistenter af te handelen.",
+ "guidance": "Gebruik persoonlijke skills voor gewoonten die je overal wilt. Gebruik projectskills voor workflows die alleen binnen één codebase zinvol zijn.",
+ "personalContext": "Je ziet op dit moment alleen je persoonlijke skills.",
+ "projectContext": "Je ziet skills voor {{project}} plus je persoonlijke skills.",
+ "title": "Herhaalbaar werk aanleren"
+ },
+ "invocation": {
+ "auto": "Wordt automatisch uitgevoerd wanneer het past",
+ "manualOnly": "Wordt alleen uitgevoerd wanneer je er expliciet om vraagt"
+ },
+ "loading": {
+ "loading": "Skills laden...",
+ "refreshing": "Skills vernieuwen..."
+ },
+ "runtimeAudience": "Gedeelde skills in `.claude`, `.cursor` en `.agents` zijn beschikbaar voor {{audience}}. Skills die in `.codex` zijn opgeslagen, blijven alleen voor Codex wanneer Codex-ondersteuning beschikbaar is.",
+ "scope": {
+ "project": "Dit project",
+ "user": "Persoonlijk"
+ },
+ "searchPlaceholder": "Zoeken op skillnaam of waar het bij helpt...",
+ "sections": {
+ "personal": {
+ "description": "Gewoonten en instructies die je overal beschikbaar wilt hebben.",
+ "title": "Persoonlijke skills"
+ },
+ "project": {
+ "description": "Workflows die alleen zinvol zijn voor deze codebase.",
+ "title": "Projectskills"
+ }
+ },
+ "sort": {
+ "label": "Skills sorteren",
+ "name": "Naam",
+ "recent": "Recent"
+ },
+ "status": {
+ "hasScripts": "Bevat scripts, controleer het dus zorgvuldig",
+ "needsAttention": "Aandacht nodig voordat je erop vertrouwt",
+ "ready": "Klaar voor gebruik"
+ },
+ "success": {
+ "created": "Skill succesvol aangemaakt.",
+ "imported": "Skill succesvol geïmporteerd.",
+ "saved": "Skill succesvol opgeslagen."
+ }
+ },
+ "pluginDetail": {
+ "unknown": "Onbekend",
+ "metadata": {
+ "author": "Auteur",
+ "category": "Categorie",
+ "source": "Bron",
+ "version": "Versie",
+ "capabilities": "Mogelijkheden",
+ "installs": "Installaties"
+ },
+ "scope": {
+ "label": "Scope:",
+ "options": {
+ "user": "Gebruiker (globaal)",
+ "project": "Project (gedeeld)",
+ "local": "Lokaal (gitignored)"
+ }
+ },
+ "links": {
+ "homepage": "Startpagina",
+ "contact": "Contact"
+ },
+ "readme": {
+ "loading": "README laden...",
+ "empty": "Geen README beschikbaar."
+ }
+ },
+ "skillImport": {
+ "title": "Skill importeren",
+ "description": "Kies een bestaande skillmap, controleer wat er wordt gekopieerd en importeer het vervolgens naar een van je ondersteunde skill-locaties.",
+ "steps": {
+ "chooseFolder": {
+ "title": "1. Kies een skillmap",
+ "description": "Dit moet een map zijn die al een `SKILL.md`-, `Skill.md`- of `skill.md`-bestand bevat."
+ },
+ "location": {
+ "title": "2. Bepaal waar het thuishoort",
+ "description": "Persoonlijke skills werken overal. Projectskills verschijnen alleen voor één codebase."
+ }
+ },
+ "fields": {
+ "sourceFolder": "Bronmap",
+ "destinationFolderName": "Naam van bestemmingsmap",
+ "audience": "Wie het kan gebruiken",
+ "storage": "Waar het op te slaan"
+ },
+ "placeholders": {
+ "defaultFolderName": "Standaard de naam van de bronmap"
+ },
+ "actions": {
+ "browse": "Bladeren",
+ "cancel": "Annuleren",
+ "preparing": "Voorbereiden...",
+ "reviewAndImport": "Controleren en importeren",
+ "importSkill": "Skill importeren",
+ "backToImport": "Terug naar importeren"
+ },
+ "scope": {
+ "user": "Gebruiker",
+ "project": "Project: {{project}}",
+ "projectUnavailable": "Project niet beschikbaar"
+ },
+ "rootSuffix": {
+ "codexOnly": " - Alleen Codex",
+ "shared": " - Gedeeld"
+ },
+ "reviewHint": "Controleer eerst de gekopieerde bestanden en bevestig daarna de import in de volgende stap.",
+ "reviewLabel": "Deze skill importeren",
+ "errors": {
+ "missingSkillFile": "Deze map lijkt nog geen skill te zijn. Het heeft een SKILL.md-, Skill.md- of skill.md-bestand nodig.",
+ "symbolicLinks": "Deze map bevat symbolische links. Importeer de echte bestanden in plaats van links.",
+ "tooManyFiles": "Deze skillmap is te groot om in één keer te importeren. Verwijder extra bestanden en probeer het opnieuw.",
+ "tooLarge": "Deze skillmap is te groot om veilig te importeren. Verklein grote assets en probeer het opnieuw.",
+ "invalidFolderName": "Kies een eenvoudiger naam voor de bestemmingsmap met letters, cijfers, punten, koppeltekens of underscores.",
+ "mustBeDirectory": "Kies een map om te importeren, geen enkel bestand.",
+ "reviewFailed": "Kon importwijzigingen niet controleren",
+ "importFailed": "Kon skill niet importeren"
+ }
+ },
+ "mcpPanel": {
+ "sort": {
+ "nameAsc": "Naam A→Z",
+ "nameDesc": "Naam Z→A",
+ "toolsDesc": "Meeste tools"
+ },
+ "health": {
+ "title": "MCP-statusoverzicht",
+ "checkingViaRuntime": "Geïnstalleerde MCP-servers controleren via {{runtime}} ...",
+ "lastChecked": "Laatst gecontroleerd {{time}}",
+ "description": "Voer diagnostiek uit vanaf deze pagina om de connectiviteit van geïnstalleerde MCP te verifiëren.",
+ "checking": "Controleren...",
+ "checkStatus": "Status controleren"
+ },
+ "diagnostics": {
+ "title": "Runtime MCP-diagnostiek",
+ "serversCount": "{{count}} servers",
+ "serversCount_one": "{{count}} server",
+ "serversCount_other": "{{count}} servers",
+ "waiting": "Wachten op diagnostiekresultaten...",
+ "disableReasons": {
+ "checkingRuntimeStatus": "Runtimestatus controleren...",
+ "checkingRuntimeAvailability": "Beschikbaarheid van runtime controleren...",
+ "runtimeFailedToStart": "De geconfigureerde runtime is gevonden maar kon niet starten. Open het Dashboard om het te herstellen of opnieuw te installeren.",
+ "runtimeRequired": "De geconfigureerde runtime is vereist. Installeer of herstel het via het Dashboard."
+ },
+ "serversCount_few": "{{count}} servers",
+ "serversCount_many": "{{count}} servers"
+ },
+ "searchPlaceholder": "MCP-servers zoeken...",
+ "runtime": {
+ "notAvailable": "{{runtime}} niet beschikbaar",
+ "notInstalled": "{{runtime}} niet geïnstalleerd",
+ "requiredDescription": "MCP-statuscontroles vereisen {{runtime}}. Ga naar het Dashboard om het te installeren of te herstellen."
+ },
+ "empty": {
+ "searchTitle": "Geen servers gevonden",
+ "title": "Geen MCP-servers beschikbaar",
+ "searchDescription": "Probeer een andere zoekterm",
+ "description": "Kom later terug voor nieuwe servers"
+ },
+ "loadMore": "Meer laden"
+ },
+ "apiKeys": {
+ "description": "Sla API-sleutels veilig op om automatisch in te vullen bij het installeren van MCP-servers.",
+ "storage": {
+ "osKeychain": "Sleutels worden versleuteld via {{backend}} en opgeslagen met beperkte bestandsrechten (alleen eigenaar).",
+ "localEncryption": "OS-sleutelhanger niet beschikbaar - sleutels worden lokaal versleuteld met AES-256. Installeer voor sterkere bescherming een sleutelhangerdienst (gnome-keyring, kwallet)."
+ },
+ "actions": {
+ "add": "API-sleutel toevoegen",
+ "addFirst": "Voeg je eerste sleutel toe",
+ "edit": "Bewerken",
+ "copied": "Gekopieerd!",
+ "copyEnvVarName": "Naam omgevingsvariabele kopiëren",
+ "confirmDelete": "Klik nogmaals om te bevestigen",
+ "delete": "Verwijderen"
+ },
+ "empty": {
+ "title": "Geen API-sleutels opgeslagen",
+ "description": "Voeg sleutels toe om omgevingsvariabelen automatisch in te vullen bij het installeren van MCP-servers."
+ },
+ "form": {
+ "addTitle": "API-sleutel toevoegen",
+ "editTitle": "API-sleutel bewerken",
+ "addDescription": "Sla een API-sleutel op om automatisch in te vullen bij MCP-serverinstallaties.",
+ "editDescription": "Werk de sleuteldetails bij. Je moet de waarde opnieuw invoeren.",
+ "keychainUnavailable": "OS-sleutelhanger niet beschikbaar - sleutels lokaal versleuteld met AES-256. Installeer gnome-keyring voor bescherming op OS-niveau.",
+ "name": "Naam",
+ "namePlaceholder": "bijv. OpenAI Production",
+ "environmentVariableName": "Naam omgevingsvariabele",
+ "envVarPlaceholder": "bijv. OPENAI_API_KEY",
+ "value": "Waarde",
+ "reenterValue": "Sleutelwaarde opnieuw invoeren",
+ "valuePlaceholder": "sk-...",
+ "scope": "Scope",
+ "userScopeLabel": "Gebruiker (globaal)",
+ "projectScopeLabel": "Project: {{project}}",
+ "projectUnavailable": "Project niet beschikbaar",
+ "boundTo": "Gekoppeld aan {{path}}",
+ "cancel": "Annuleren",
+ "saving": "Opslaan...",
+ "update": "Bijwerken",
+ "save": "Opslaan",
+ "errors": {
+ "invalidEnvVarFormat": "Gebruik letters, cijfers en underscores. Moet beginnen met een letter of underscore.",
+ "nameRequired": "Naam is vereist",
+ "envVarRequired": "Naam van omgevingsvariabele is vereist",
+ "invalidEnvVar": "Ongeldige naam omgevingsvariabele",
+ "valueRequired": "Sleutelwaarde is vereist",
+ "projectScopeRequiresProject": "Projectgebonden API-sleutels vereisen een actief project",
+ "saveFailed": "Opslaan mislukt"
+ }
+ }
+ },
+ "skillReview": {
+ "title": "Skillwijzigingen controleren",
+ "description": "{{reviewLabel}} toont eerst een voorbeeld van de bestandssysteemwijzigingen. Er wordt niets weggeschreven totdat je hieronder bevestigt.",
+ "noPreview": "Geen voorbeeld beschikbaar.",
+ "confirmPromptPrefix": "Bekijk de diff hieronder en gebruik vervolgens",
+ "confirmPromptSuffix": "om deze wijzigingen toe te passen.",
+ "noChanges": "Nog geen bestandswijzigingen gedetecteerd.",
+ "binaryBadge": "binair",
+ "binaryPreviewHidden": "Voorbeeld van binair bestand wordt niet getoond. Het bestand wordt as-is gekopieerd.",
+ "summary": {
+ "fileChanges": "{{count}} bestandswijzigingen",
+ "fileChanges_one": "{{count}} bestandswijziging",
+ "fileChanges_other": "{{count}} bestandswijzigingen",
+ "new": "{{count}} nieuw",
+ "updated": "{{count}} bijgewerkt",
+ "removed": "{{count}} verwijderd",
+ "binary": "{{count}} binair",
+ "fileChanges_few": "{{count}} bestandswijzigingen",
+ "fileChanges_many": "{{count}} bestandswijzigingen"
+ }
+ },
+ "mcpCard": {
+ "toolsCount": "{{count}} tools",
+ "toolsCount_one": "{{count}} tool",
+ "toolsCount_other": "{{count}} tools",
+ "envCount": "{{count}} env's",
+ "envCount_one": "{{count}} env",
+ "envCount_other": "{{count}} env's",
+ "auth": "Auth",
+ "byAuthor": "door {{author}}",
+ "hosting": {
+ "remote": "Extern",
+ "local": "Lokaal",
+ "both": "Beide"
+ },
+ "toolsCount_few": "{{count}} tools",
+ "toolsCount_many": "{{count}} tools",
+ "envCount_few": "{{count}} env's",
+ "envCount_many": "{{count}} env's",
+ "repository": "Repository",
+ "website": "Website"
+ },
+ "installButton": {
+ "installing": "Installeren...",
+ "removing": "Verwijderen...",
+ "done": "Klaar",
+ "retry": "Opnieuw proberen",
+ "uninstall": "Verwijderen",
+ "install": "Installeren"
+ },
+ "pluginCard": {
+ "official": "Officieel"
+ }
+}
diff --git a/src/features/localization/renderer/locales/nl/report.json b/src/features/localization/renderer/locales/nl/report.json
new file mode 100644
index 00000000..c5103353
--- /dev/null
+++ b/src/features/localization/renderer/locales/nl/report.json
@@ -0,0 +1,217 @@
+{
+ "cost": {
+ "breakdownTitle": "Kostenuitsplitsing (per 1M tokens)",
+ "cacheRead": "Cache lezen",
+ "cacheWrite": "Cache schrijven",
+ "cost": "Kosten",
+ "input": "Invoer",
+ "noCommits": "geen commits",
+ "noLinesChanged": "geen regels gewijzigd",
+ "output": "Uitvoer",
+ "parent": "Bovenliggend: {{cost}}",
+ "parentCost": "Kosten bovenliggend",
+ "perCommit": "Per commit",
+ "perCommitFormula": "totale kosten ÷ {{count}} commit",
+ "perCommitFormula_few": "totale kosten ÷ {{count}} commits",
+ "perCommitFormula_many": "totale kosten ÷ {{count}} commits",
+ "perCommitFormula_one": "totale kosten ÷ {{count}} commit",
+ "perCommitFormula_other": "totale kosten ÷ {{count}} commits",
+ "perLineChanged": "Per gewijzigde regel",
+ "perLineFormula": "totale kosten ÷ {{count}} regel",
+ "perLineFormula_few": "totale kosten ÷ {{count}} regels",
+ "perLineFormula_many": "totale kosten ÷ {{count}} regels",
+ "perLineFormula_one": "totale kosten ÷ {{count}} regel",
+ "perLineFormula_other": "totale kosten ÷ {{count}} regels",
+ "subagent": "Subagent: {{cost}}",
+ "subagentCost": "Kosten subagent",
+ "title": "Kostenanalyse",
+ "total": "Totaal"
+ },
+ "insights": {
+ "agent": "agent",
+ "agent_few": "agents",
+ "agent_many": "agents",
+ "agent_one": "agent",
+ "agent_other": "agents",
+ "agentTree": "Agentboom ({{count}} {{unit}})",
+ "background": "(achtergrond)",
+ "bashCommands": "Bash-commando's",
+ "outOfScopeFindings": "Bevindingen buiten scope ({{count}})",
+ "questionsAsked": "Gestelde vragen ({{count}})",
+ "repeated": "Herhaald",
+ "skillsInvoked": "Aangeroepen skills ({{count}})",
+ "taskDispatches": "Taakverzendingen ({{count}})",
+ "tasksCreated": "Aangemaakte taken ({{count}})",
+ "teamMode": "Teammodus",
+ "teams": "Teams: {{teams}}",
+ "title": "Sessie-inzichten",
+ "total": "Totaal",
+ "unique": "Uniek",
+ "skillsInvoked_few": "Aangeroepen skills ({{count}})",
+ "skillsInvoked_many": "Aangeroepen skills ({{count}})",
+ "skillsInvoked_one": "Aangeroepen skills ({{count}})",
+ "skillsInvoked_other": "Aangeroepen skills ({{count}})",
+ "taskDispatches_few": "Taakverzendingen ({{count}})",
+ "taskDispatches_many": "Taakverzendingen ({{count}})",
+ "taskDispatches_one": "Taakverzendingen ({{count}})",
+ "taskDispatches_other": "Taakverzendingen ({{count}})",
+ "tasksCreated_few": "Aangemaakte taken ({{count}})",
+ "tasksCreated_many": "Aangemaakte taken ({{count}})",
+ "tasksCreated_one": "Aangemaakte taken ({{count}})",
+ "tasksCreated_other": "Aangemaakte taken ({{count}})",
+ "questionsAsked_few": "Gestelde vragen ({{count}})",
+ "questionsAsked_many": "Gestelde vragen ({{count}})",
+ "questionsAsked_one": "Gestelde vragen ({{count}})",
+ "questionsAsked_other": "Gestelde vragen ({{count}})",
+ "agentTree_few": "Agentboom ({{count}} {{unit}})",
+ "agentTree_many": "Agentboom ({{count}} {{unit}})",
+ "agentTree_one": "Agentboom ({{count}} {{unit}})",
+ "agentTree_other": "Agentboom ({{count}} {{unit}})",
+ "outOfScopeFindings_few": "Bevindingen buiten scope ({{count}})",
+ "outOfScopeFindings_many": "Bevindingen buiten scope ({{count}})",
+ "outOfScopeFindings_one": "Bevindingen buiten scope ({{count}})",
+ "outOfScopeFindings_other": "Bevindingen buiten scope ({{count}})",
+ "keyTakeaways": "Belangrijkste conclusies"
+ },
+ "quality": {
+ "chars": "tekens",
+ "corrections": "Correcties",
+ "failed": "mislukt",
+ "fileReadRedundancy": "Redundantie bestandslezingen",
+ "firstMessage": "Eerste bericht",
+ "firstRun": "Eerste uitvoering",
+ "frictionRate": "Frictiepercentage",
+ "lastRun": "Laatste uitvoering",
+ "messagesBeforeWork": "Berichten vóór werk",
+ "passed": "geslaagd",
+ "promptQuality": "Promptkwaliteit",
+ "readsPerUniqueFile": "Lezingen/uniek bestand",
+ "snapshot": "snapshot",
+ "snapshot_few": "snapshots",
+ "snapshot_many": "snapshots",
+ "snapshot_one": "snapshot",
+ "snapshot_other": "snapshots",
+ "startupOverhead": "Opstartoverhead",
+ "testProgression": "Testvoortgang",
+ "title": "Kwaliteitssignalen",
+ "tokensBeforeWork": "Tokens vóór werk",
+ "totalReads": "Totaal aantal lezingen",
+ "uniqueFiles": "Unieke bestanden",
+ "userMessages": "Gebruikersberichten",
+ "percentOfTotal": "% van totaal"
+ },
+ "tokens": {
+ "apiCalls": "API-aanroepen",
+ "cacheCreate": "Cache aanmaken",
+ "cacheEfficiency": "Cache-efficiëntie",
+ "cacheRead": "Cache lezen",
+ "cacheReadPct": "Cache lezen %",
+ "coldStart": "Koude start",
+ "cost": "Kosten",
+ "input": "Invoer",
+ "model": "Model",
+ "no": "Nee",
+ "output": "Uitvoer",
+ "readWriteRatio": "L/S-verhouding",
+ "title": "Tokengebruik",
+ "total": "Totaal",
+ "yes": "Ja"
+ },
+ "subagents": {
+ "title": "Subagents",
+ "metrics": {
+ "count": "Aantal",
+ "totalTokens": "Totaal aantal tokens",
+ "totalDuration": "Totale duur",
+ "totalCost": "Totale kosten"
+ },
+ "table": {
+ "description": "Beschrijving",
+ "type": "Type",
+ "tokens": "Tokens",
+ "duration": "Duur",
+ "cost": "Kosten"
+ }
+ },
+ "overview": {
+ "title": "Overzicht",
+ "yes": "Ja",
+ "no": "Nee",
+ "metrics": {
+ "duration": "Duur",
+ "messages": "Berichten",
+ "contextUsage": "Contextgebruik",
+ "compactions": "Compactaties",
+ "branch": "Branch",
+ "subagents": "Subagents",
+ "project": "Project",
+ "sessionId": "Sessie-ID"
+ }
+ },
+ "timeline": {
+ "title": "Tijdlijn & activiteit",
+ "idleAnalysis": "Inactiviteitsanalyse",
+ "metrics": {
+ "idleGaps": "Inactieve perioden",
+ "totalIdle": "Totaal inactief",
+ "activeTime": "Actieve tijd",
+ "idlePercent": "Inactief %"
+ },
+ "modelSwitches": "Modelwisselingen ({{count}})",
+ "modelSwitches_one": "Modelwisselingen ({{count}})",
+ "modelSwitches_other": "Modelwisselingen ({{count}})",
+ "messageNumber": "ber. #{{number}}",
+ "keyEvents": "Belangrijke gebeurtenissen",
+ "modelSwitches_few": "Modelwisselingen ({{count}})",
+ "modelSwitches_many": "Modelwisselingen ({{count}})"
+ },
+ "tools": {
+ "title": "Toolgebruik",
+ "summary": "{{formattedCount}} aanroepen in totaal over {{toolCount}} tools",
+ "columns": {
+ "tool": "Tool",
+ "calls": "Aanroepen",
+ "errors": "Fouten",
+ "successPercent": "Succes %",
+ "health": "Status"
+ }
+ },
+ "git": {
+ "title": "Git-activiteit",
+ "commits": "Commits",
+ "pushes": "Pushes",
+ "linesAdded": "Toegevoegde regels",
+ "linesRemoved": "Verwijderde regels",
+ "branchesCreated": "Aangemaakte branches"
+ },
+ "friction": {
+ "title": "Frictiesignalen",
+ "rate": "Frictiepercentage: {{rate}}%",
+ "correctionsCount": "{{count}} correcties",
+ "correctionsCount_one": "{{count}} correctie",
+ "corrections": "Correcties",
+ "thrashingSignals": "Thrashing-signalen",
+ "repeatedBashCommands": "Herhaalde Bash-commando's",
+ "reworkedFiles": "Herwerkte bestanden (3+ bewerkingen)",
+ "correctionsCount_few": "{{count}} correcties",
+ "correctionsCount_many": "{{count}} correcties",
+ "correctionsCount_other": "{{count}} correcties"
+ },
+ "errors": {
+ "title": "Fouten",
+ "permissionDenied": "Toegang geweigerd",
+ "messageIndex": "ber. #{{index}}",
+ "input": "Invoer",
+ "error": "Fout",
+ "count": "{{count}} fouten",
+ "count_one": "{{count}} fout",
+ "permissionDenialCount": "{{count}} toegangsweigeringen",
+ "permissionDenialCount_one": "{{count}} toegangsweigering",
+ "count_few": "{{count}} fouten",
+ "count_many": "{{count}} fouten",
+ "count_other": "{{count}} fouten",
+ "permissionDenialCount_few": "{{count}} toegangsweigeringen",
+ "permissionDenialCount_many": "{{count}} toegangsweigeringen",
+ "permissionDenialCount_other": "{{count}} toegangsweigeringen"
+ }
+}
diff --git a/src/features/localization/renderer/locales/nl/settings.json b/src/features/localization/renderer/locales/nl/settings.json
new file mode 100644
index 00000000..5cd6f739
--- /dev/null
+++ b/src/features/localization/renderer/locales/nl/settings.json
@@ -0,0 +1,994 @@
+{
+ "tabs": {
+ "advanced": {
+ "description": "Opties voor gevorderde gebruikers: configuratie exporteren/importeren, standaardwaarden resetten en ruwe configuratie bewerken.",
+ "label": "Geavanceerd"
+ },
+ "general": {
+ "description": "Kern-app-voorkeuren zoals thema, taal, weergavedichtheid en opstartgedrag.",
+ "label": "Algemeen"
+ },
+ "infoAriaLabel": "Wat is {{label}}?",
+ "notifications": {
+ "description": "Bepaal wanneer en hoe je meldingen krijgt over agentactiviteit, voltooide taken en fouten.",
+ "label": "Meldingen"
+ }
+ },
+ "view": {
+ "description": "Beheer je app-voorkeuren",
+ "loading": "Instellingen laden...",
+ "title": "Instellingen"
+ },
+ "runtimeProvider": {
+ "actions": {
+ "cancel": "Annuleren",
+ "test": "Testen"
+ },
+ "defaults": {
+ "allProjects": "Alle projecten",
+ "allProjectsHint": "Tests gebruiken {{project}}. De standaard geldt tenzij een project een override heeft.",
+ "loadingContexts": "Contexten laden...",
+ "projectHint": "Opslaan overschrijft alleen {{project}}.",
+ "projectOverrideContext": "Projectoverridecontext",
+ "scopeDescriptionAllProjects": "Standaard voor elk project dat geen eigen OpenCode-override heeft.",
+ "scopeDescriptionProject": "Overschrijf alleen het geselecteerde project. Actieve teams worden niet gewijzigd.",
+ "selectProjectContext": "Projectcontext selecteren",
+ "selectProjectHint": "Selecteer een project voordat je lokale modellen test of standaardwaarden opslaat.",
+ "selectValidationContext": "Validatiecontext selecteren",
+ "setAllProjectsDefault": "Standaard voor alle projecten instellen",
+ "setProjectDefault": "Projectstandaard instellen",
+ "thisProject": "Dit project",
+ "title": "OpenCode-standaarden",
+ "validationContext": "Validatiecontext"
+ },
+ "diagnostics": {
+ "copied": "Diagnostiek gekopieerd",
+ "copiedShort": "Gekopieerd",
+ "copy": "Diagnostiek kopiëren",
+ "hints": "Tips",
+ "likelyCause": "Waarschijnlijke oorzaak:",
+ "windowsSymlinkAdminHint": "Windows: voer Agent Teams AI uit als administrator"
+ },
+ "models": {
+ "alreadyDefault": "Dit is al de geselecteerde OpenCode-standaard.",
+ "empty": "Geen modellen gevonden.",
+ "emptyFree": "Geen gratis modellen gevonden.",
+ "emptyRecommended": "Geen aanbevolen modellen gevonden.",
+ "emptyRecommendedFree": "Geen aanbevolen gratis modellen gevonden.",
+ "freeOnly": "Alleen gratis",
+ "launchableDescription": "Bekende routes uit de OpenCode-configuratie, gratis ingebouwde modellen en de huidige standaard. Lokale routes hebben een succesvolle test nodig voordat ze klaar zijn voor teamstarts.",
+ "launchableTitle": "OpenCode-modelroutes",
+ "loadingRoutes": "OpenCode-modelroutes laden...",
+ "noRoutesMatch": "Geen OpenCode-modelroutes komen overeen met \"{{query}}\".",
+ "noneReported": "Er zijn nog geen OpenCode-modelroutes gerapporteerd. Configureer een lokale route in OpenCode of gebruik het tabblad Providers om catalogusproviders te inspecteren.",
+ "recommendedOnly": "Alleen aanbevolen",
+ "searchPlaceholder": "Modellen zoeken",
+ "selectProjectBeforeTesting": "Selecteer een projectcontext voordat je modellen test.",
+ "selectProjectBeforeTestingDefaults": "Selecteer een projectcontext voordat je OpenCode-standaarden test of opslaat.",
+ "testInProgress": "Modeltest is al bezig.",
+ "useInTeamPicker": "Opslaan voor teamkiezer",
+ "validationContextRequired": "Selecteer hierboven een validatiecontext om Testen en Standaard instellen in te schakelen. Opslaan voor de teamkiezer bewaart de route alleen voor nieuwe teams.",
+ "actionsUnavailable": "Acties zijn tijdelijk niet beschikbaar.",
+ "defaultSaveInProgress": "OpenCode-standaard wordt opgeslagen.",
+ "routeUnavailableAuth": "Deze provider vereist authenticatie voordat dit model kan worden gebruikt.",
+ "routeUnavailableFailed": "Deze modelroute is niet geslaagd voor de laatste uitvoeringstest.",
+ "routeUnavailableGeneric": "Deze modelroute kan op dit moment niet worden gebruikt.",
+ "routeUnavailableUnknown": "Dit model is de huidige OpenCode-standaard, maar het is nog niet beschikbaar in de live catalogus."
+ },
+ "providers": {
+ "catalog": "OpenCode-providercatalogus",
+ "countFallback": "OpenCode-providers",
+ "description": "{{count}}. Verbonden en aanbevolen providers worden als eerste getoond.",
+ "loadMore": "Meer providers laden",
+ "loading": "OpenCode-providers laden",
+ "noMatches": "Geen providers komen overeen met die zoekopdracht.",
+ "noneReported": "Geen OpenCode-providers gerapporteerd door de beheerde runtime.",
+ "recommended": "Aanbevolen",
+ "refreshCatalog": "Catalogus vernieuwen",
+ "searchPlaceholder": "Providers zoeken",
+ "description_few": "{{count}}. Verbonden en aanbevolen providers worden als eerste getoond.",
+ "description_many": "{{count}}. Verbonden en aanbevolen providers worden als eerste getoond.",
+ "description_one": "{{count}}. Verbonden en aanbevolen providers worden als eerste getoond.",
+ "description_other": "{{count}}. Verbonden en aanbevolen providers worden als eerste getoond."
+ },
+ "setup": {
+ "loading": "Providerconfiguratie laden..."
+ },
+ "summary": {
+ "defaultModel": "OpenCode-standaard: {{model}}",
+ "loading": "Beheerde OpenCode-runtime, verbonden providers en modelstandaarden laden...",
+ "source": "Bron: {{source}}",
+ "title": "OpenCode-runtime"
+ },
+ "tabs": {
+ "models": "Modellen",
+ "providers": "Providers"
+ },
+ "modelRoutes": {
+ "searchPlaceholder": "Modelroutes zoeken"
+ },
+ "badges": {
+ "usedInTeamPicker": "Opgeslagen voor teamkiezer",
+ "free": "gratis",
+ "local": "lokaal",
+ "configured": "geconfigureerd",
+ "knownRoute": "bekende route",
+ "connected": "verbonden",
+ "verified": "geverifieerd",
+ "needsTest": "test nodig",
+ "failed": "mislukt",
+ "unknown": "onbekend",
+ "default": "standaard"
+ },
+ "compatibleEndpoint": {
+ "baseUrlPlaceholder": "http://localhost:1234"
+ }
+ },
+ "general": {
+ "agentLanguage": {
+ "description": "Taal voor agentcommunicatie",
+ "descriptionWithDetected": "Taal voor agentcommunicatie (gedetecteerd: {{detected}})",
+ "emptyMessage": "Geen taal gevonden.",
+ "label": "Taal",
+ "searchPlaceholder": "Taal zoeken...",
+ "selectPlaceholder": "Taal selecteren...",
+ "title": "Agenttaal"
+ },
+ "appLanguage": {
+ "description": "Taal voor de applicatie-interface.",
+ "label": "Taal",
+ "title": "App-taal"
+ },
+ "appearance": {
+ "autoExpandAIGroups": {
+ "description": "Klap elke responsbeurt automatisch uit bij het openen van een transcript of het ontvangen van een nieuw bericht",
+ "label": "AI-antwoorden standaard uitklappen"
+ },
+ "nativeTitleBar": {
+ "description": "Gebruik het standaard systeemvensterframe in plaats van de aangepaste titelbalk",
+ "label": "Native titelbalk gebruiken",
+ "restartConfirm": {
+ "confirmLabel": "Opnieuw starten",
+ "message": "De app moet opnieuw worden gestart om de titelbalkwijziging toe te passen. Nu opnieuw starten?",
+ "title": "Opnieuw starten vereist"
+ }
+ },
+ "theme": {
+ "description": "Kies je voorkeurskleurthema",
+ "label": "Thema",
+ "options": {
+ "dark": "Donker",
+ "light": "Licht",
+ "system": "Systeem"
+ }
+ },
+ "title": "Weergave"
+ },
+ "browserAccess": {
+ "serverMode": {
+ "description": "Start een HTTP-server om de UI vanuit een browser te benaderen of in iframes in te sluiten",
+ "label": "Servermodus inschakelen"
+ },
+ "title": "Browsertoegang"
+ },
+ "localClaudeRoot": {
+ "actions": {
+ "selectFolder": "Map selecteren",
+ "selectFolderManually": "Map handmatig selecteren",
+ "useAutoDetect": "Automatische detectie gebruiken",
+ "useFolder": "Map gebruiken",
+ "usePath": "Pad gebruiken",
+ "useThisPath": "Dit pad gebruiken",
+ "useWsl": "Gebruik je Linux/WSL?"
+ },
+ "confirm": {
+ "noProjectsDir": {
+ "message": "Deze map bevat geen \"projects\"-directory. Toch doorgaan?",
+ "title": "Geen projects-directory gevonden"
+ },
+ "notClaudeDir": {
+ "message": "Deze map heet \"{{folderName}}\", niet \".claude\". Toch doorgaan?",
+ "title": "Geselecteerde map is niet .claude"
+ },
+ "noWslPaths": {
+ "message": "Kon niet automatisch WSL-distributies met Claude-gegevens vinden. Map handmatig selecteren?",
+ "title": "Geen WSL-Claude-paden gevonden"
+ },
+ "wslNoProjectsDir": {
+ "message": "\"{{path}}\" bevat geen \"projects\"-directory. Toch doorgaan?",
+ "title": "WSL-pad mist projects-directory"
+ }
+ },
+ "current": {
+ "autoDetected": "Automatisch gedetecteerd: {{path}}",
+ "autoDetectedPath": "Automatisch gedetecteerd pad gebruiken",
+ "customPath": "Aangepast pad gebruiken",
+ "label": "Huidige lokale root"
+ },
+ "description": "Kies welke lokale map als je Claude-data-root wordt behandeld",
+ "errors": {
+ "detectWslFailed": "Kon WSL-Claude-rootpaden niet detecteren",
+ "loadFailed": "Kon lokale Claude-rootinstellingen niet laden",
+ "updateFailed": "Kon Claude-root niet bijwerken"
+ },
+ "title": "Lokale Claude-root",
+ "wslModal": {
+ "closeAriaLabel": "WSL-padvenster sluiten",
+ "description": "Gedetecteerde WSL-distributies en Claude-rootkandidaten",
+ "noProjectsDir": "Geen projects-directory gedetecteerd",
+ "title": "WSL-Claude-root selecteren"
+ }
+ },
+ "privacy": {
+ "telemetry": {
+ "description": "Help de app verbeteren door anonieme crash- en prestatiegegevens te verzenden",
+ "label": "Crashrapporten verzenden"
+ },
+ "title": "Privacy"
+ },
+ "server": {
+ "runningOn": "Actief op",
+ "standaloneModeDescription": "Wordt uitgevoerd in standalone-modus. De HTTP-server is altijd actief. Systeemmeldingen zijn niet beschikbaar - meldingstriggers worden alleen in de app gelogd.",
+ "title": "Server"
+ },
+ "startup": {
+ "launchAtLogin": {
+ "description": "Start de app automatisch wanneer je inlogt",
+ "label": "Starten bij inloggen"
+ },
+ "showDockIcon": {
+ "description": "Toon het app-pictogram in de dock (macOS)",
+ "label": "Dock-pictogram tonen"
+ },
+ "title": "Opstarten"
+ }
+ },
+ "notifications": {
+ "dev": {
+ "descriptionPrefix": "Meldingen werken mogelijk niet in ontwikkelmodus. macOS identificeert de app als \"Electron\" (bundle-ID",
+ "descriptionSuffix": ") in plaats van de productie-app-naam. Controleer Systeeminstellingen > Meldingen > Electron om de machtigingen te verifiëren.",
+ "title": "Ontwikkelmodus"
+ },
+ "ignoredRepositories": {
+ "description": "Meldingen van deze repositories worden genegeerd",
+ "empty": "Geen repositories genegeerd",
+ "selectPlaceholder": "Selecteer repository om te negeren...",
+ "title": "Genegeerde repositories"
+ },
+ "settings": {
+ "enabled": {
+ "description": "Toon systeemmeldingen voor fouten en gebeurtenissen",
+ "label": "Systeemmeldingen inschakelen"
+ },
+ "sound": {
+ "description": "Speel een geluid af wanneer meldingen verschijnen",
+ "label": "Geluid afspelen"
+ },
+ "subagentErrors": {
+ "description": "Detecteer en meld fouten in subagent-sessies",
+ "label": "Subagent-fouten meenemen"
+ },
+ "title": "Meldingsinstellingen"
+ },
+ "snooze": {
+ "clear": "Sluimer wissen",
+ "description": "Meldingen tijdelijk pauzeren",
+ "descriptionWithTime": "Gesluimerd tot {{time}}",
+ "label": "Meldingen sluimeren",
+ "options": {
+ "15": "15 minuten",
+ "30": "30 minuten",
+ "60": "1 uur",
+ "120": "2 uur",
+ "240": "4 uur",
+ "-1": "Tot morgen"
+ },
+ "selectDuration": "Duur selecteren..."
+ },
+ "taskCompletion": {
+ "description": "Krijg native OS-meldingen wanneer Claude taken voltooit - geluiden, banners en Dock-/taakbalkbadges. Werkt op macOS, Linux en Windows.",
+ "installPlugin": "claude-notifications-go-plugin installeren",
+ "title": "Meldingen bij taakvoltooiing"
+ },
+ "team": {
+ "allTasksCompleted": {
+ "description": "Meld wanneer elke taak in een team de status voltooid bereikt",
+ "label": "Alle taken voltooid"
+ },
+ "autoResumeOnRateLimit": {
+ "description": "Wanneer Claude een resettijd rapporteert, plan een vervolgsignaal voor de teamlead in nadat de limiet is gereset",
+ "label": "Automatisch hervatten na ratelimiet"
+ },
+ "clarifications": {
+ "description": "Toon native OS-meldingen wanneer een taak je invoer nodig heeft",
+ "label": "Meldingen voor taakverduidelijking"
+ },
+ "crossTeamMessage": {
+ "description": "Meld wanneer er een bericht van een ander team binnenkomt",
+ "label": "Meldingen voor berichten tussen teams"
+ },
+ "leadInbox": {
+ "description": "Meld wanneer teamleden berichten naar de teamlead sturen",
+ "label": "Meldingen voor lead-inbox"
+ },
+ "statusChange": {
+ "description": "Toon native OS-meldingen wanneer de status van een taak verandert",
+ "label": "Meldingen voor statuswijziging van taak",
+ "onlySolo": {
+ "description": "Meld alleen wanneer het team geen teamleden heeft",
+ "label": "Alleen in Solo-modus"
+ },
+ "statuses": {
+ "description": "Welke doelstatussen een melding activeren",
+ "label": "Meld bij deze statussen",
+ "options": {
+ "approved": "Goedgekeurd",
+ "completed": "Voltooid",
+ "deleted": "Verwijderd",
+ "in_progress": "Gestart",
+ "needsFix": "Te herstellen",
+ "pending": "In behandeling",
+ "review": "Review"
+ }
+ }
+ },
+ "taskComments": {
+ "description": "Toon native OS-meldingen wanneer agents opmerkingen op taken plaatsen",
+ "label": "Meldingen voor taakopmerkingen"
+ },
+ "taskCreated": {
+ "description": "Toon native OS-meldingen wanneer een nieuwe taak wordt aangemaakt",
+ "label": "Meldingen voor aangemaakte taken"
+ },
+ "teamLaunched": {
+ "description": "Meld wanneer een team klaar is met starten en gereed is",
+ "label": "Meldingen voor gestart team"
+ },
+ "title": "Teammeldingen",
+ "toolApproval": {
+ "description": "Meld wanneer een tool je goedkeuring nodig heeft (Toestaan/Weigeren) terwijl de app niet gefocust is",
+ "label": "Meldingen voor toolgoedkeuring"
+ },
+ "userInbox": {
+ "description": "Meld wanneer teamleden berichten naar je sturen",
+ "label": "Meldingen voor gebruikersinbox"
+ }
+ },
+ "test": {
+ "action": "Test verzenden",
+ "description": "Verstuur een testmelding om de bezorging te verifiëren",
+ "failedToSend": "Kon testmelding niet verzenden",
+ "label": "Testmelding",
+ "sending": "Verzenden...",
+ "sent": "Verzonden!",
+ "unknownError": "Onbekende fout"
+ }
+ },
+ "advanced": {
+ "about": {
+ "appIconAlt": "App-pictogram",
+ "description": "Stel AI-agentteams samen die autonoom en parallel werken, communiceren tussen teams en taken beheren op een Kanban-bord - met ingebouwde codereview, live procesmonitoring en volledige toolzichtbaarheid.",
+ "standalone": "Standalone",
+ "title": "Over",
+ "version": "Versie {{version}}"
+ },
+ "configuration": {
+ "editConfig": "Configuratie bewerken",
+ "exportConfig": "Configuratie exporteren",
+ "importConfig": "Configuratie importeren",
+ "openInEditor": "Openen in editor",
+ "resetToDefaults": "Terugzetten naar standaard",
+ "title": "Configuratie"
+ },
+ "updates": {
+ "available": "v{{version}} beschikbaar",
+ "check": "Controleren op updates",
+ "checking": "Controleren...",
+ "ready": "Update klaar",
+ "unknownVersion": "onbekend",
+ "upToDate": "Up-to-date"
+ },
+ "appName": "Agent Teams AI"
+ },
+ "configEditor": {
+ "errors": {
+ "loadFailed": "Kon configuratie niet laden",
+ "saveFailed": "Kon configuratie niet opslaan"
+ },
+ "footer": {
+ "autoSave": "Wijzigingen worden automatisch opgeslagen na het bewerken",
+ "toClose": "om te sluiten",
+ "escapeKey": "Esc"
+ },
+ "loading": "Configuratie laden...",
+ "status": {
+ "invalidJson": "Ongeldige JSON",
+ "saveFailed": "Opslaan mislukt",
+ "saved": "Opgeslagen",
+ "saving": "Opslaan..."
+ },
+ "title": "Configuratie bewerken"
+ },
+ "notificationTriggers": {
+ "add": {
+ "cancel": "Annuleren",
+ "submit": "Trigger toevoegen",
+ "title": "Aangepaste trigger toevoegen"
+ },
+ "builtin": {
+ "description": "Standaardtriggers die bij de applicatie horen. Je kunt ze in- of uitschakelen en hun patronen aanpassen.",
+ "title": "Ingebouwde triggers"
+ },
+ "card": {
+ "builtinBadge": "Ingebouwd",
+ "collapseAriaLabel": "Inklappen",
+ "deleteAriaLabel": "Trigger verwijderen",
+ "editNameAriaLabel": "Naam bewerken",
+ "expandAriaLabel": "Uitklappen"
+ },
+ "color": {
+ "customHexTitle": "Aangepaste hex-kleur",
+ "invalidHex": "Ongeldige hex"
+ },
+ "configuration": {
+ "alertIfGreaterThan": "Waarschuw als >",
+ "emptyPatternHint": "Laat leeg om alle inhoud te matchen. Gebruikt JavaScript-regex-syntaxis.",
+ "errorStatusDescription": "Wordt geactiveerd wanneer een tooluitvoering een fout rapporteert (is_error: true).",
+ "tokensUnit": "tokens",
+ "matchPatternPlaceholder": "bijv. error|failed|exception"
+ },
+ "custom": {
+ "description": "Maak je eigen triggers om meldingen te krijgen voor specifieke patronen of tooluitvoer.",
+ "empty": "Nog geen aangepaste triggers geconfigureerd.",
+ "title": "Aangepaste triggers"
+ },
+ "errors": {
+ "invalidRegexPattern": "Ongeldig regex-patroon"
+ },
+ "fields": {
+ "contentType": "Inhoudstype",
+ "matchField": "Matchveld",
+ "matchPattern": "Matchpatroon (regex)",
+ "scopeToolName": "Scope / toolnaam",
+ "scopeToolNameOptional": "Scope / toolnaam (optioneel)",
+ "threshold": "Drempel",
+ "tokenType": "Tokentype",
+ "triggerNamePlaceholder": "bijv. Waarschuwing bij buildfout",
+ "triggerNameRequired": "Triggernaam *"
+ },
+ "ignorePatterns": {
+ "hint": "Druk op Enter om toe te voegen. De melding wordt overgeslagen als een patroon overeenkomt.",
+ "placeholder": "Negeer-regex toevoegen...",
+ "removeAriaLabel": "Negeerpatroon verwijderen",
+ "summary": "Geavanceerd: uitsluitingsregels",
+ "title": "Negeerpatronen (overslaan bij overeenkomst)"
+ },
+ "options": {
+ "contentTypes": {
+ "text": "Tekstuitvoer",
+ "thinking": "Denken",
+ "tool_result": "Toolresultaat",
+ "tool_use": "Toolgebruik"
+ },
+ "matchFields": {
+ "args": "Argumenten",
+ "command": "Commando",
+ "content": "Inhoud",
+ "description": "Beschrijving",
+ "file_path": "Bestandspad",
+ "fullInput": "Volledige invoer (JSON)",
+ "glob": "Glob-filter",
+ "new_string": "Nieuwe tekst",
+ "old_string": "Oude tekst",
+ "path": "Pad",
+ "pattern": "Patroon",
+ "prompt": "Prompt",
+ "query": "Zoekopdracht",
+ "skill": "Skillnaam",
+ "subagent_type": "Subagent-type",
+ "text": "Tekstinhoud",
+ "thinking": "Denkinhoud",
+ "url": "URL"
+ },
+ "modes": {
+ "content_match": "Inhoudspatroon",
+ "error_status": "Uitvoeringsfout",
+ "token_threshold": "Hoog tokengebruik"
+ },
+ "tokenTypes": {
+ "input": "Invoertokens",
+ "output": "Uitvoertokens",
+ "total": "Totaal aantal tokens"
+ },
+ "toolNames": {
+ "anyTool": "Elke tool"
+ }
+ },
+ "preview": {
+ "defaultTestTriggerName": "Testtrigger",
+ "detectedSuffix": "fouten zouden zijn gedetecteerd",
+ "more": "...en {{count}} meer",
+ "more_few": "...en {{count}} meer",
+ "more_many": "...en {{count}} meer",
+ "more_one": "...en {{count}} meer",
+ "more_other": "...en {{count}} meer",
+ "testTrigger": "Testtrigger",
+ "testing": "Testen...",
+ "title": "Voorbeeld",
+ "truncatedWarning": "Zoeken vroegtijdig gestopt (time-out of aantallimiet). Het werkelijke aantal overeenkomsten kan hoger zijn.",
+ "viewSession": "Sessie bekijken"
+ },
+ "repositoryScope": {
+ "empty": "Geen repositories geselecteerd - trigger geldt voor alle repositories",
+ "hint": "Wanneer repositories zijn geselecteerd, wordt deze trigger alleen geactiveerd voor fouten in die repositories.",
+ "placeholder": "Selecteer repository om toe te voegen...",
+ "summary": "Geavanceerd: repository-scope",
+ "title": "Beperken tot repositories (geldt alleen voor geselecteerde repositories)"
+ },
+ "sections": {
+ "configuration": "Configuratie",
+ "dotColor": "Stipkleur",
+ "generalInfo": "Algemene info",
+ "triggerCondition": "Triggervoorwaarde"
+ }
+ },
+ "workspaceProfiles": {
+ "actions": {
+ "addProfile": "Profiel toevoegen",
+ "cancel": "Annuleren",
+ "deleteProfile": "Profiel verwijderen",
+ "editProfile": "Profiel bewerken",
+ "save": "Opslaan"
+ },
+ "authMethods": {
+ "agent": "SSH-agent",
+ "auto": "Auto (uit SSH-config)",
+ "password": "Wachtwoord",
+ "privateKey": "Privésleutel"
+ },
+ "deleteConfirm": {
+ "confirmLabel": "Verwijderen",
+ "message": "Weet je zeker dat je \"{{name}}\" wilt verwijderen? Dit kan niet ongedaan worden gemaakt.",
+ "title": "Profiel verwijderen"
+ },
+ "description": "Sla SSH-verbindingsprofielen op voor snel opnieuw verbinden",
+ "empty": {
+ "description": "Voeg een SSH-profiel toe om snel verbinding te maken",
+ "title": "Geen opgeslagen profielen"
+ },
+ "form": {
+ "authentication": "Authenticatie",
+ "host": "Host",
+ "name": "Naam",
+ "passwordPrompt": "Je wordt om het wachtwoord gevraagd bij het verbinden.",
+ "port": "Poort",
+ "privateKeyPath": "Pad naar privésleutel",
+ "username": "Gebruikersnaam",
+ "namePlaceholder": "Mijn server",
+ "hostPlaceholder": "hostnaam of IP",
+ "usernamePlaceholder": "gebruiker"
+ },
+ "loading": "Profielen laden...",
+ "title": "Werkruimteprofielen"
+ },
+ "connection": {
+ "actions": {
+ "connect": "Verbinden",
+ "connecting": "Verbinden...",
+ "disconnect": "Verbinding verbreken",
+ "testConnection": "Verbinding testen",
+ "testing": "Testen..."
+ },
+ "currentMode": {
+ "description": "Gegevensbron voor sessiebestanden",
+ "label": "Huidige modus",
+ "local": "Lokaal ({{path}})"
+ },
+ "description": "Maak verbinding met een externe machine om Claude Code-sessies te bekijken die daar worden uitgevoerd",
+ "form": {
+ "authentication": "Authenticatie",
+ "host": "Host",
+ "password": "Wachtwoord",
+ "port": "Poort",
+ "privateKeyPath": "Pad naar privésleutel",
+ "username": "Gebruikersnaam",
+ "hostPlaceholder": "hostnaam of SSH-config-alias",
+ "usernamePlaceholder": "gebruiker"
+ },
+ "savedProfiles": {
+ "title": "Opgeslagen profielen"
+ },
+ "ssh": {
+ "title": "SSH-verbinding"
+ },
+ "status": {
+ "connectedTo": "Verbonden met {{host}}",
+ "remoteSessions": "Externe sessies bekijken via SSH"
+ },
+ "test": {
+ "failed": "Verbinding mislukt: {{error}}",
+ "success": "Verbinding geslaagd",
+ "unknownError": "Onbekende fout"
+ },
+ "title": "Externe verbinding"
+ },
+ "providerRuntime": {
+ "actions": {
+ "cancel": "Annuleren",
+ "cancelLogin": "Inloggen annuleren",
+ "connectChatGpt": "ChatGPT verbinden",
+ "delete": "Verwijderen",
+ "disable": "Uitschakelen",
+ "disconnectAccount": "Account loskoppelen",
+ "generateLink": "Link genereren",
+ "openLogin": "Inloggen openen",
+ "reconnectAnthropic": "Anthropic opnieuw verbinden",
+ "refresh": "Vernieuwen",
+ "replaceKey": "Sleutel vervangen",
+ "saveEndpoint": "Endpoint opslaan",
+ "saveKey": "Sleutel opslaan",
+ "saving": "Opslaan...",
+ "setApiKey": "API-sleutel instellen",
+ "updateKey": "Sleutel bijwerken",
+ "useCode": "Code gebruiken"
+ },
+ "apiKey": {
+ "loadingStoredCredentials": "Opgeslagen inloggegevens laden...",
+ "projectScope": "Project",
+ "scope": "Scope",
+ "storedIn": "Opgeslagen in {{backend}}",
+ "userScope": "Gebruiker",
+ "storedInApp": "Opgeslagen in app",
+ "providers": {
+ "anthropic": {
+ "name": "Anthropic API-sleutel",
+ "title": "API-sleutel",
+ "description": "Gebruik een directe Anthropic API-sleutel voor API-gefactureerde toegang. Je Anthropic-abonnementssessie blijft beschikbaar wanneer je terugschakelt.",
+ "placeholder": "sk-ant-..."
+ },
+ "codex": {
+ "name": "Codex API-sleutel",
+ "title": "API-sleutel",
+ "description": "Gebruik een OpenAI API-sleutel als secundair Codex-authenticatiepad. Als je Codex naar API-sleutelmodus overschakelt, spiegelt de app OPENAI_API_KEY naar CODEX_API_KEY voor native starts.",
+ "placeholder": "sk-proj-..."
+ },
+ "gemini": {
+ "name": "Gemini API-sleutel",
+ "title": "API-toegang",
+ "description": "Gebruik `GEMINI_API_KEY` voor de Gemini API-backend. CLI SDK en ADC vereisen dit niet.",
+ "placeholder": "AIza..."
+ }
+ }
+ },
+ "codex": {
+ "account": {
+ "appServer": "App-server: {{state}}",
+ "connected": "Verbonden",
+ "description": "Beheer de lokale Codex-app-server-accountsessie die abonnementsgebaseerde native starts mogelijk maakt.",
+ "loginInProgress": "Inloggen bezig",
+ "plan": "Abonnement: {{plan}}",
+ "reconnectRequired": "Opnieuw verbinden vereist",
+ "title": "ChatGPT-account",
+ "hints": {
+ "autoUsesApiKeyUntilChatgpt": "{{message}} Auto blijft de gedetecteerde API-sleutel gebruiken totdat ChatGPT is verbonden.",
+ "detectedApiKeyNeedsApiMode": "{{message}} De gedetecteerde API-sleutel wordt pas gebruikt nadat je Codex naar API-sleutelmodus overschakelt.",
+ "localArtifactsNoSession": "Codex CLI rapporteert momenteel geen actief ChatGPT-account. Er bestaan lokale Codex-accountgegevens, maar er is geen actieve beheerde sessie geselecteerd. Gebruikslimieten verschijnen hier pas nadat Codex CLI er een ziet.",
+ "noActiveAccount": "Codex CLI rapporteert momenteel geen actief ChatGPT-account. Gebruikslimieten verschijnen hier pas nadat Codex CLI er een ziet.",
+ "reconnectBeforeUsage": "Codex heeft een lokaal geselecteerd ChatGPT-account, maar de huidige sessie moet opnieuw verbinden voordat gebruikslimieten hier kunnen laden.",
+ "usageLimitsAfterReport": "Gebruikslimieten verschijnen hier nadat Codex ze rapporteert voor het verbonden ChatGPT-account."
+ }
+ },
+ "install": {
+ "checking": "Controleren",
+ "downloading": "Downloaden",
+ "installCli": "Codex CLI installeren",
+ "installing": "Installeren",
+ "retryInstall": "Installatie opnieuw proberen",
+ "title": "Codex CLI in app-data installeren"
+ },
+ "rateLimits": {
+ "credits": "Credits",
+ "creditsDescription": "Credits worden afzonderlijk getoond van venstergebaseerd abonnementsgebruik en zijn mogelijk niet beschikbaar voor abonnementsgebaseerde ChatGPT-sessies.",
+ "noSecondaryWindow": "Codex heeft geen secundair venster geretourneerd voor deze accountsnapshot.",
+ "notReported": "Niet gerapporteerd",
+ "primaryReset": "Primaire reset",
+ "primaryUsed": "Primair gebruikt",
+ "primaryWindow": "Primair venster",
+ "remainingLeft": "{{value}} over",
+ "remainingUnknown": "Resterend onbekend",
+ "secondaryReset": "Secundaire reset",
+ "secondaryUsed": "Secundair gebruikt",
+ "secondaryWindow": "Secundair venster",
+ "usedQuotaNote": "Deze percentages tonen gebruikte quota, niet resterende quota.",
+ "weeklyReset": "Wekelijkse reset",
+ "weeklyUsed": "Wekelijks gebruikt",
+ "weeklyUsedOneWeek": "Wekelijks gebruikt (1w)",
+ "weeklyWindow": "Wekelijks venster",
+ "secondaryFallback": "secundair",
+ "secondaryWindowNote": " Wekelijkse limieten worden afzonderlijk getoond in het {{window}}-venster.",
+ "usageExplanationGeneric": "Toont gebruikte quota, niet resterende quota.",
+ "usageExplanationWindowOnly": "Toont gebruikte quota in het huidige {{window}}-venster, niet resterende quota.",
+ "usageExplanationWithRemaining": "{{used}} gebruikt - ongeveer {{remaining}} over in het huidige {{window}}-venster."
+ }
+ },
+ "compatibleEndpoint": {
+ "authToken": "Auth-token",
+ "authTokenMissing": "Auth-token is niet geconfigureerd.",
+ "baseUrl": "Basis-URL",
+ "description": "Gebruik een Anthropic-compatibel lokaal runtime-endpoint.",
+ "keepSavedToken": "Laat leeg om het opgeslagen token te behouden",
+ "title": "Lokaal / compatibel endpoint",
+ "tokenStatus": "Token {{status}}",
+ "validation": {
+ "baseUrlRequired": "Basis-URL is vereist",
+ "firstPartyAnthropic": "Gebruik Auto, Abonnement of API-sleutel voor first-party Anthropic",
+ "httpRequired": "Basis-URL moet http:// of https:// gebruiken",
+ "invalidUrl": "Ongeldige URL",
+ "noCredentials": "Basis-URL mag geen inloggegevens bevatten"
+ },
+ "status": {
+ "endpointDisabledTokenKept": "Endpoint uitgeschakeld. Opgeslagen token is behouden.",
+ "endpointSaved": "Endpoint opgeslagen",
+ "endpointSavedTokenMissing": "Endpoint opgeslagen. Auth-token is niet geconfigureerd."
+ }
+ },
+ "connection": {
+ "authenticationMethod": "Authenticatiemethode",
+ "descriptions": {
+ "anthropic": "Kies hoe door de app gestarte Anthropic-sessies authenticeren.",
+ "codex": "Kies of Codex je ChatGPT-abonnement of een API-sleutel moet verkiezen wanneer de native runtime start.",
+ "gemini": "Configureer optionele API-toegang. CLI SDK en ADC worden nog steeds automatisch gedetecteerd.",
+ "opencode": "OpenCode-authenticatie en providerinventaris worden beheerd door de OpenCode-runtime."
+ },
+ "method": "Verbindingsmethode",
+ "mode": "Modus: {{mode}}",
+ "selected": "Geselecteerd",
+ "switching": "Overschakelen...",
+ "title": "Verbinding"
+ },
+ "connectionCards": {
+ "apiKey": {
+ "title": "API-sleutel"
+ },
+ "anthropic": {
+ "apiKeyDescription": "Gebruik ANTHROPIC_API_KEY en Anthropic API-facturering.",
+ "autoDescription": "Gebruik de Anthropic-runtimestandaarden en de beste beschikbare lokale inloggegevens.",
+ "hint": "Auto houdt Anthropic op de standaard lokale credential-resolutie.",
+ "subscriptionDescription": "Gebruik je lokale Anthropic-aanmeldsessie en abonnementstoegang.",
+ "subscriptionTitle": "Anthropic-abonnement"
+ },
+ "auto": {
+ "title": "Auto"
+ },
+ "codex": {
+ "apiKeyDescription": "Gebruik OPENAI_API_KEY- en CODEX_API_KEY-facturering voor native Codex-starts.",
+ "autoDescription": "Verkies je ChatGPT-account en abonnement. Gebruik de API-sleutelmodus alleen indien nodig.",
+ "chatgptDescription": "Gebruik je verbonden ChatGPT-account en Codex-abonnement.",
+ "chatgptTitle": "ChatGPT-account",
+ "hint": "Codex draait altijd via de native runtime. Auto verkiest je ChatGPT-account voordat het terugvalt op API-sleutel-inloggegevens."
+ }
+ },
+ "description": "Beheer hoe elke provider verbinding maakt en, indien ondersteund, welke backend de multimodel-runtime moet gebruiken.",
+ "fastMode": {
+ "defaultOff": "Standaard uit",
+ "description": "Pas de Claude Code Fast-modus standaard toe voor nieuwe Anthropic-teamstarts wanneer het opgeloste model en de runtime dit toestaan.",
+ "disabledHint": "Nieuwe Anthropic-starts blijven op normale snelheid tenzij een team de Fast-modus expliciet inschakelt.",
+ "enabledHint": "Nieuwe Anthropic-starts vragen standaard de Fast-modus aan wanneer het opgeloste model dit ondersteunt.",
+ "notExposed": "Deze Anthropic-runtime stelt de Fast-modus niet beschikbaar.",
+ "preferFast": "Fast verkiezen",
+ "title": "Fast-modus standaard",
+ "unavailableForRuntime": "De Fast-modus is momenteel niet beschikbaar voor deze Anthropic-runtime."
+ },
+ "alerts": {
+ "anthropicApiKeyMissing": "API-sleutelmodus is geselecteerd, maar er is nog geen Anthropic API-credential beschikbaar.",
+ "anthropicStoredKeyAvailable": "Er is een opgeslagen API-sleutel beschikbaar, maar door de app gestarte Anthropic-sessies gebruiken deze pas nadat je naar API-sleutelmodus overschakelt.",
+ "anthropicSubscriptionMissing": "Anthropic-abonnementsmodus is geselecteerd. Log in met Anthropic om deze provider te gebruiken.",
+ "authTokenMissing": "Auth-token is niet geconfigureerd. Veel lokale Anthropic-compatibele endpoints vereisen een niet-leeg token.",
+ "chatgptLoginPending": "Wachten tot het inloggen op het ChatGPT-account is voltooid...",
+ "chatgptLoginStarting": "ChatGPT-login starten...",
+ "codexApiKeyMissing": "API-sleutelmodus is geselecteerd, maar er is nog geen OPENAI_API_KEY- of CODEX_API_KEY-credential beschikbaar.",
+ "codexLocalArtifactsNoSession": "Codex CLI heeft momenteel geen actief ChatGPT-account. Er bestaan lokale Codex-accountgegevens, maar er is geen actieve beheerde sessie geselecteerd.",
+ "codexNeedsReconnect": "Codex heeft een lokaal geselecteerd ChatGPT-account, maar de huidige sessie moet opnieuw verbinden.",
+ "codexNoChatgptAccount": "Codex CLI heeft momenteel geen actief ChatGPT-account. Verbind ChatGPT om je abonnement te gebruiken.",
+ "codexNoCredential": "Er is nog geen ChatGPT-account of API-sleutel beschikbaar.",
+ "geminiApiUnavailable": "De Gemini API is momenteel niet beschikbaar. Configureer hier `GEMINI_API_KEY` of gebruik geldige Google ADC-inloggegevens.",
+ "withApiKeyFallback": "{{message}} Schakel naar API-sleutelmodus om de gedetecteerde API-sleutel te gebruiken."
+ },
+ "authModeDescriptions": {
+ "anthropic": {
+ "apiKey": "Forceer door de app gestarte Anthropic-sessies om een API-sleutel-credential te gebruiken.",
+ "auto": "Gebruik het standaardgedrag van de runtime. Opgeslagen API-sleutels in deze app worden pas gebruikt nadat je naar API-sleutelmodus overschakelt.",
+ "oauth": "Forceer door de app gestarte Anthropic-sessies om de lokale Anthropic-abonnementssessie te gebruiken."
+ },
+ "codex": {
+ "apiKey": "Forceer native Codex-starts om OPENAI_API_KEY-/CODEX_API_KEY-facturering te gebruiken.",
+ "auto": "Verkies je ChatGPT-account wanneer het beschikbaar is. Val alleen terug op API-sleutelmodus wanneer dat nodig is.",
+ "chatgpt": "Forceer native Codex-starts om je verbonden ChatGPT-account en abonnement te gebruiken."
+ }
+ },
+ "progress": {
+ "applyingConnectionChanges": "Verbindingswijzigingen toepassen...",
+ "refreshingProviderStatus": "Providerstatus vernieuwen...",
+ "savingCompatibleEndpoint": "Compatibel endpoint opslaan...",
+ "switchingAnthropicSubscription": "Overschakelen naar Anthropic-abonnement...",
+ "switchingApiKey": "Overschakelen naar API-sleutel...",
+ "switchingApiKeyMode": "Overschakelen naar API-sleutelmodus...",
+ "switchingAuto": "Overschakelen naar Auto...",
+ "switchingChatgpt": "Overschakelen naar ChatGPT-accountmodus..."
+ },
+ "provider": "Provider",
+ "runtime": {
+ "descriptions": {
+ "anthropic": "Anthropic heeft momenteel geen aparte runtime-backendkiezer.",
+ "codex": "Codex draait nu alleen via het native runtime-pad.",
+ "gemini": "Kies welke Gemini-runtime-backend multimodel moet gebruiken.",
+ "opencode": "OpenCode gebruikt zijn eigen beheerde runtime-host. Desktop stelt momenteel alleen de status beschikbaar."
+ },
+ "title": "Runtime",
+ "updating": "Runtime bijwerken..."
+ },
+ "runtimeSummary": "Runtime: {{runtime}}",
+ "status": {
+ "configured": "geconfigureerd",
+ "enabled": "Ingeschakeld",
+ "notConfigured": "Niet geconfigureerd",
+ "notSet": "niet ingesteld",
+ "off": "Uit",
+ "unknown": "Onbekend"
+ },
+ "title": "Providerinstellingen",
+ "usage": {
+ "apiKey": "API-sleutel wordt gebruikt",
+ "apiKeyRequired": "API-sleutel vereist",
+ "compatibleEndpoint": "Compatibel endpoint wordt gebruikt",
+ "notConnected": "Niet verbonden",
+ "usingMethod": "{{method}} wordt gebruikt"
+ },
+ "errors": {
+ "apiKeyDeletedRefreshFailed": "API-sleutel verwijderd, maar kon providerstatus niet vernieuwen.",
+ "apiKeySavedRefreshFailed": "API-sleutel opgeslagen, maar kon providerstatus niet vernieuwen.",
+ "connectionUpdatedRefreshFailed": "Verbinding bijgewerkt, maar kon providerstatus niet vernieuwen.",
+ "deleteApiKey": "Kon API-sleutel niet verwijderen",
+ "disableEndpoint": "Kon endpoint niet uitschakelen",
+ "endpointDisabledRefreshFailed": "Endpoint uitgeschakeld, maar kon providerstatus niet vernieuwen.",
+ "endpointSavedRefreshFailed": "Endpoint opgeslagen, maar kon providerstatus niet vernieuwen.",
+ "refreshCodexAccount": "Kon Codex-account niet vernieuwen",
+ "saveApiKey": "Kon API-sleutel niet opslaan",
+ "saveEndpoint": "Kon endpoint niet opslaan",
+ "updateAnthropicFastMode": "Kon Anthropic Fast-modus niet bijwerken",
+ "updateConnection": "Kon verbinding niet bijwerken",
+ "updateRuntimeBackend": "Kon runtime-backend niet bijwerken",
+ "apiKeyRequired": "API-sleutel is vereist"
+ },
+ "connectionUi": {
+ "authMode": {
+ "auto": "Auto",
+ "oauth": "Abonnement / OAuth",
+ "chatgpt": "ChatGPT-account",
+ "apiKey": "API-sleutel",
+ "anthropicSubscription": "Anthropic-abonnement"
+ },
+ "authMethod": {
+ "apiKey": "API-sleutel",
+ "apiKeyHelper": "API-sleutel-helper",
+ "oauth": "OAuth",
+ "claudeSubscription": "Claude-abonnement",
+ "geminiCli": "Gemini CLI",
+ "googleAccount": "Google-account",
+ "serviceAccount": "serviceaccount"
+ },
+ "runtime": {
+ "codexNative": "Codex native",
+ "currentRuntime": "Huidige runtime",
+ "selectedRuntime": "Geselecteerde runtime",
+ "summary": "{{prefix}}: {{runtime}}"
+ },
+ "status": {
+ "checking": "Controleren...",
+ "modelsAvailable": "Modellen beschikbaar",
+ "checked": "Gecontroleerd",
+ "providerActivity": "Provideractiviteit",
+ "notConnected": "Niet verbonden",
+ "startingChatGptLogin": "ChatGPT-login starten...",
+ "waitingForChatGptLogin": "Wachten op inloggen ChatGPT-account...",
+ "chatGptVerificationDegraded": "ChatGPT-account gedetecteerd - accountverificatie is momenteel verminderd.",
+ "chatGptAccountReady": "ChatGPT-account gereed",
+ "apiKeyReady": "API-sleutel gereed",
+ "codexLocalAccountNeedsReconnect": "Codex heeft een lokaal geselecteerd ChatGPT-account, maar de huidige sessie moet opnieuw verbinden.",
+ "codexNoActiveManagedSession": "Codex CLI rapporteert geen actieve ChatGPT-login. Er bestaan lokale Codex-accountgegevens, maar er is geen actieve beheerde sessie geselecteerd.",
+ "codexNoActiveChatGptLogin": "Codex CLI rapporteert geen actieve ChatGPT-login",
+ "connectChatGptForSubscription": "Verbind een ChatGPT-account om je Codex-abonnement te gebruiken.",
+ "codexNativeReady": "Codex native gereed",
+ "codexNativeUnavailable": "Codex native niet beschikbaar",
+ "unavailableInCurrentRuntime": "Niet beschikbaar in huidige runtime",
+ "connectedViaApiKey": "Verbonden via API-sleutel",
+ "apiKeyConfiguredNotVerified": "API-sleutel geconfigureerd, maar nog niet geverifieerd",
+ "apiKeyModeMissingCredential": "API-sleutelmodus geselecteerd, maar er is geen API-sleutel geconfigureerd",
+ "connectedVia": "Verbonden via {{method}}",
+ "unableToVerify": "Kan niet verifiëren"
+ },
+ "mode": {
+ "selectedAuth": "Geselecteerde authenticatie: {{authMode}}",
+ "preferredAuth": "Voorkeursauthenticatie: {{authMode}}"
+ },
+ "credential": {
+ "apiKeyConfigured": "API-sleutel is geconfigureerd",
+ "savedApiKeyAvailable": "Opgeslagen API-sleutel beschikbaar in Beheren",
+ "apiKeyAlsoConfigured": "API-sleutel ook geconfigureerd in Beheren",
+ "apiKeyConfiguredInManage": "API-sleutel is geconfigureerd in Beheren",
+ "apiKeyFallbackInManage": "API-sleutel ook beschikbaar in Beheren als fallback",
+ "availableAsFallback": "{{summary}} - beschikbaar als fallback",
+ "savedApiKeyAvailableIfSwitch": "Opgeslagen API-sleutel beschikbaar in Beheren als je naar API-sleutelmodus overschakelt",
+ "availableIfSwitch": "{{summary}} - beschikbaar als je naar API-sleutelmodus overschakelt",
+ "autoWillUseUntilChatGpt": "{{summary}} - Auto gebruikt dit totdat ChatGPT is verbonden"
+ },
+ "actions": {
+ "connect": "Verbinden",
+ "connectAnthropic": "Anthropic verbinden",
+ "connectChatGpt": "ChatGPT verbinden",
+ "disconnect": "Verbinding verbreken",
+ "openLogin": "Inloggen openen"
+ },
+ "disconnect": {
+ "anthropicTitle": "Anthropic-abonnement loskoppelen?",
+ "anthropic": "Dit verwijdert de lokale Anthropic-abonnementssessie uit de Claude CLI-runtime.",
+ "anthropicWithApiKey": "Dit verwijdert de lokale Anthropic-abonnementssessie uit de Claude CLI-runtime. Opgeslagen API-sleutels in Beheren blijven beschikbaar.",
+ "geminiTitle": "Gemini CLI loskoppelen?",
+ "gemini": "Dit wist de lokale Gemini CLI-sessiemetadata. Externe ADC-inloggegevens en opgeslagen API-sleutels worden niet verwijderd."
+ }
+ }
+ },
+ "cliRuntime": {
+ "actions": {
+ "checkForUpdates": "Controleren op updates",
+ "checking": "Controleren...",
+ "extensions": "Extensies",
+ "installRuntime": "{{runtime}} installeren",
+ "manage": "Beheren",
+ "recheck": "Opnieuw controleren",
+ "reinstallRuntime": "{{runtime}} opnieuw installeren",
+ "retry": "Opnieuw proberen",
+ "update": "Bijwerken"
+ },
+ "installer": {
+ "checkingLatest": "Nieuwste versie controleren...",
+ "downloading": "Downloaden...",
+ "failed": "Installatie mislukt",
+ "installed": "v{{version}} geïnstalleerd",
+ "installing": "Installeren...",
+ "latest": "latest",
+ "verifying": "Checksum verifiëren..."
+ },
+ "labels": {
+ "multimodel": "Multimodel"
+ },
+ "loading": {
+ "aiProviders": "AI-providers controleren...",
+ "claudeCli": "Claude CLI controleren..."
+ },
+ "provider": {
+ "backend": "Backend: {{backend}}",
+ "loadingModels": "Modellen laden...",
+ "modelsUnavailable": "Modellen niet beschikbaar voor deze runtime-build",
+ "runtime": "Runtime: {{runtime}}"
+ },
+ "providerTerminal": {
+ "authFailed": "Authenticatie mislukt",
+ "authUpdated": "Authenticatie bijgewerkt",
+ "loggedOut": "Provider uitgelogd",
+ "login": "Inloggen",
+ "logout": "Uitloggen",
+ "logoutFailed": "Uitloggen mislukt"
+ },
+ "status": {
+ "configuredNotFound": "De geconfigureerde {{runtime}} is niet gevonden.",
+ "foundButFailed": "{{runtime}} is gevonden maar kon niet starten",
+ "healthCheckFailed": "De geconfigureerde {{runtime}} is niet geslaagd voor de opstartcontrole.",
+ "notInstalled": "{{runtime}} niet geïnstalleerd"
+ },
+ "title": "CLI-runtime"
+ },
+ "cliStatus": {
+ "versionUpgrade": "v{{current}} -> v{{latest}}"
+ }
+}
diff --git a/src/features/localization/renderer/locales/nl/team.json b/src/features/localization/renderer/locales/nl/team.json
new file mode 100644
index 00000000..4fe7b0fa
--- /dev/null
+++ b/src/features/localization/renderer/locales/nl/team.json
@@ -0,0 +1,2487 @@
+{
+ "activity": {
+ "actions": {
+ "createTaskFromMessage": "Taak aanmaken vanuit bericht",
+ "editMessage": "Bericht bewerken",
+ "expandMessage": "Bericht uitklappen",
+ "replyToMessage": "Op bericht reageren",
+ "restartTeam": "Team opnieuw starten"
+ },
+ "authError": {
+ "description": "Authenticatie mislukt. Het opnieuw starten van het team vernieuwt de sessie en kan dit probleem oplossen. Als het probleem aanhoudt, controleer dan je API-inloggegevens of probeer het later opnieuw."
+ },
+ "automation": {
+ "reviewPickup": "Teamlid gevraagd om review op te pakken",
+ "stallNudge": "Teamlid gevraagd om vastgelopen taak voort te zetten",
+ "workSyncBody": "Teamlid gevraagd om huidig werk te synchroniseren"
+ },
+ "badges": {
+ "automation": "automatisering",
+ "bootstrap": "bootstrap",
+ "command": "commando",
+ "comment": "Opmerking",
+ "live": "live",
+ "note": "notitie",
+ "rateLimited": "Ratelimiet bereikt",
+ "restart": "herstart",
+ "result": "resultaat",
+ "session": "sessie",
+ "stallNudge": "vastloopsignaal",
+ "start": "start",
+ "workSync": "werksynchronisatie",
+ "agentError": "Agentfout",
+ "apiError": "API-fout"
+ },
+ "bootstrap": {
+ "acknowledged": "Bootstrap bevestigd",
+ "restarting": "Teamlid opnieuw starten",
+ "starting": "Teamlid starten"
+ },
+ "rawJson": "Ruwe JSON",
+ "unread": "Ongelezen",
+ "thoughts": {
+ "count": "{{count}} gedachten",
+ "count_one": "{{count}} gedachte",
+ "expand": "Gedachten uitklappen",
+ "showMore": "Meer tonen",
+ "showLess": "Minder tonen",
+ "count_few": "{{count}} gedachten",
+ "count_many": "{{count}} gedachten",
+ "count_other": "{{count}} gedachten",
+ "toolSummary": "🔧 {{summary}}",
+ "titleForMember": "{{name}} - gedachten"
+ },
+ "timeline": {
+ "loadingMessages": "Berichten laden...",
+ "noMessages": "Geen berichten",
+ "emptyHint": "Stuur een bericht naar een lid om activiteit te zien.",
+ "newSession": "Nieuwe sessie",
+ "olderCount": "+{{count}} ouder",
+ "showMore": "{{count}} meer tonen",
+ "showAll": "Alles tonen",
+ "olderCount_one": "+{{count}} ouder",
+ "olderCount_few": "+{{count}} ouder",
+ "olderCount_many": "+{{count}} ouder",
+ "olderCount_other": "+{{count}} ouder"
+ },
+ "pendingReplies": {
+ "title": "Wachten op antwoorden",
+ "openMember": "Lid openen",
+ "messageSentAwaitingReply": "Bericht verzonden, wachten op antwoord",
+ "awaitingReply": "wachten op antwoord",
+ "externalTeam": "extern team",
+ "crossTeamAwaitingReply": "Bericht tussen teams verzonden, wachten op antwoord",
+ "user": "gebruiker",
+ "awaitingApproval": "wachten op goedkeuring"
+ },
+ "reply": {
+ "replyingTo": "Reageert op",
+ "action": "Reageren"
+ },
+ "activeTasks": {
+ "inProgress": "Bezig",
+ "expandInProgress": "Bezig uitklappen",
+ "collapseInProgress": "Bezig inklappen",
+ "reviewing": "controleert",
+ "workingOn": "werkt aan"
+ },
+ "expandDialog": {
+ "description": "Uitgeklapte berichtweergave"
+ }
+ },
+ "create": {
+ "actions": {
+ "create": "Aanmaken",
+ "creating": "Aanmaken...",
+ "openExisting": "Bestaand team openen",
+ "skipPreflightAndCreate": "Pre-flight overslaan en aanmaken"
+ },
+ "conflict": {
+ "description": "Het uitvoeren van twee teams in dezelfde directory is riskant - ze kunnen conflicteren bij het bewerken van dezelfde bestanden. Overweeg een andere directory of een git-worktree voor isolatie te gebruiken.",
+ "title": "Een ander team \"{{team}}\" draait al voor deze werkdirectory",
+ "workingDirectory": "Werkdirectory:"
+ },
+ "description": {
+ "copy": "Maak een nieuw team aan op basis van een bestaand team.",
+ "create": "Stel je team in en kies hoe het start."
+ },
+ "errors": {
+ "nameExists": "Teamnaam bestaat al",
+ "nameLaunching": "Een team met deze naam is momenteel aan het starten",
+ "createConfigFailed": "Kon teamconfiguratie niet aanmaken",
+ "loadProjectsFailed": "Kon projecten niet laden"
+ },
+ "fields": {
+ "color": "Kleur (optioneel)",
+ "description": "Beschrijving (optioneel)",
+ "prompt": "Prompt voor teamlead (optioneel)",
+ "teamName": "Teamnaam"
+ },
+ "launchAfterCreate": {
+ "description": "Start het team meteen via lokale Claude CLI.",
+ "label": "Commando uitvoeren na aanmaken"
+ },
+ "localOnly": "Alleen beschikbaar in lokale Electron-modus.",
+ "onDisk": "Op schijf:",
+ "placeholders": {
+ "description": "Korte beschrijving van het teamdoel",
+ "prompt": "Instructies voor de teamlead tijdens provisioning..."
+ },
+ "saved": "Opgeslagen",
+ "solo": {
+ "description": "Alleen de teamlead (hoofdproces) wordt gestart - er worden geen teamleden aangemaakt. Werkt als een gewone agentsessie in je gekozen runtime (Claude Code, Codex, OpenCode, Gemini) maar met toegang tot het takenbord voor planning. Bespaart tokens door coördinatieoverhead van teamleden te vermijden. Je kunt later leden toevoegen via de teaminstellingen.",
+ "label": "Soloteam"
+ },
+ "title": {
+ "copy": "Team kopiëren",
+ "create": "Team aanmaken"
+ },
+ "optional": {
+ "launchSettingsTitle": "Optionele startinstellingen",
+ "launchSettingsDescription": "Prompt-, veiligheids- en CLI-overrides staan hier wanneer je ze nodig hebt.",
+ "teamDetailsTitle": "Optionele teamdetails",
+ "teamDetailsDescription": "Houd de standaardflow compact en open dit alleen wanneer je extra context of een aangepaste kleur wilt."
+ },
+ "prepare": {
+ "unsupportedPreload": "De huidige preload-versie ondersteunt team:prepareProvisioning niet. Start de dev-app opnieuw.",
+ "selectWorkingDirectory": "Selecteer een werkdirectory om de startomgeving te valideren.",
+ "someProvidersNeedAttention": "Sommige geselecteerde providers hebben aandacht nodig.",
+ "readyWithNotes": "Alle geselecteerde providers zijn gereed, met opmerkingen.",
+ "ready": "Alle geselecteerde providers zijn gereed.",
+ "failed": "Kon geselecteerde providers niet voorbereiden",
+ "checkingProviders": "Geselecteerde providers controleren...",
+ "preparingEnvironment": "Omgeving voorbereiden...",
+ "selectedProvidersReadyWithNotes": "Geselecteerde providers gereed (met opmerkingen)",
+ "selectedProvidersReady": "Geselecteerde providers gereed"
+ },
+ "validation": {
+ "nameMustContainLetterOrDigit": "Naam moet minstens één letter of cijfer bevatten",
+ "nameTooLong": "Naam is te lang (max. 128 tekens)",
+ "selectWorkingDirectory": "Selecteer werkdirectory (cwd)",
+ "memberNameRequired": "Ledennaam mag niet leeg zijn",
+ "memberNameInvalid": "Ledennaam moet beginnen met een alfanumeriek teken, gebruik alleen [a-zA-Z0-9._-], max. 128 tekens",
+ "memberNamesUnique": "Ledennamen moeten uniek zijn",
+ "openCodeLeadModelRequired": "OpenCode-lead vereist een geselecteerd model.",
+ "openCodeTeammateRequired": "OpenCode-lead vereist minstens één OpenCode-teamlid.",
+ "teamLaunching": "Team is momenteel aan het starten",
+ "teamNameExists": "Teamnaam bestaat al",
+ "checkFormFields": "Controleer de formuliervelden"
+ }
+ },
+ "editTeam": {
+ "actions": {
+ "cancel": "Annuleren",
+ "save": "Opslaan"
+ },
+ "addMemberLockReason": "Gebruik het speciale dialoogvenster Lid toevoegen om nieuwe teamleden toe te voegen terwijl het team live is.",
+ "description": "Wijzig teamnaam, beschrijving en kleur",
+ "errors": {
+ "changesSavedRefreshFailed": "Teamwijzigingen zijn opgeslagen, maar het vernieuwen van de nieuwste weergave is mislukt: {{message}}",
+ "liveRenameBlocked": "Bestaande teamleden kunnen niet worden hernoemd terwijl het team live is. Hernoemd: {{names}}",
+ "memberNameEmpty": "Ledennaam mag niet leeg zijn",
+ "memberNameInvalid": "Ledennaam moet beginnen met een alfanumeriek teken, gebruik alleen [a-zA-Z0-9._-], max. 128 tekens",
+ "memberNameNumericSuffix": "Ledennaam \"{{name}}\" is niet toegestaan (gereserveerd voor de automatische suffix van Claude CLI). Gebruik in plaats daarvan \"{{base}}\".",
+ "memberNameReserved": "Ledennaam \"{{name}}\" is gereserveerd",
+ "memberNamesUnique": "Ledennamen moeten uniek zijn voordat je opslaat",
+ "newLiveTeammates": "Voeg nieuwe teamleden toe via het speciale dialoogvenster Lid toevoegen terwijl het team live is. Team bewerken ondersteunt alleen het bijwerken van bestaande teamleden.",
+ "provisioning": "Teaminstellingen kunnen niet worden bewerkt zolang de provisioning nog bezig is. Wacht tot de start is voltooid en probeer het dan opnieuw.",
+ "restartFailedMany": "Team opgeslagen, maar het opnieuw starten van deze teamleden is mislukt: {{failures}}",
+ "restartFailedOne": "Team opgeslagen, maar het opnieuw starten van dit teamlid is mislukt: {{failures}}",
+ "saveFailed": "Opslaan mislukt",
+ "settingsChanged": "Teaminstellingen zijn gewijzigd terwijl dit dialoogvenster open was. Open het opnieuw en controleer de nieuwste status voordat je opslaat.",
+ "settingsSavedMembersAndRefreshFailed": "Teaminstellingen zijn opgeslagen, maar ledenwijzigingen zijn mislukt: {{message}}. Vernieuwen is ook mislukt: {{refreshError}}",
+ "settingsSavedMembersFailed": "Teaminstellingen zijn opgeslagen, maar ledenwijzigingen zijn mislukt: {{message}}",
+ "settingsSavedRefreshFailed": "Teaminstellingen zijn opgeslagen, maar het vernieuwen van de nieuwste weergave is mislukt: {{message}}",
+ "teamNameEmpty": "Teamnaam mag niet leeg zijn",
+ "unsupportedMixedPrimaryMutation": "Live bewerkingen van door primair beheerde teamleden in gemengde OpenCode-teams worden nog niet ondersteund. Stop het team, bewerk de samenstelling en start opnieuw. Betrokken: {{names}}"
+ },
+ "fields": {
+ "colorOptional": "Kleur (optioneel)",
+ "description": "Beschrijving",
+ "name": "Naam"
+ },
+ "memberRestartWarning": "Door op te slaan wordt dit teamlid opnieuw gestart om wijzigingen in rol, workflow, worktree-isolatie, provider, model, inspanning of MCP-toegang toe te passen.",
+ "notices": {
+ "liveRenameBlocked": "Live opslaan is geblokkeerd omdat bestaande teamleden zijn hernoemd. Maak die identiteitswijzigingen ongedaan of stop eerst het team.",
+ "newLiveTeammates": "Nieuwe teamleden kunnen niet worden toegevoegd via Team bewerken terwijl het team live is. Gebruik in plaats daarvan het dialoogvenster Lid toevoegen.",
+ "provisioning": "Teamprovisioning is nog bezig. Bewerken is tijdelijk vergrendeld totdat de start is voltooid.",
+ "restartMany": "Door op te slaan worden deze teamleden opnieuw gestart of gestart om wijzigingen in rol, workflow, worktree-isolatie, provider, model, inspanning of MCP-toegang toe te passen: {{names}}.",
+ "restartOne": "Door op te slaan wordt dit teamlid opnieuw gestart of gestart om wijzigingen in rol, workflow, worktree-isolatie, provider, model, inspanning of MCP-toegang toe te passen: {{names}}.",
+ "unsupportedMixedPrimaryMutation": "Live bewerkingen/verwijderingen voor door primair beheerde teamleden in gemengde OpenCode-teams vereisen het stoppen en opnieuw starten van het team: {{names}}."
+ },
+ "placeholders": {
+ "description": "Teambeschrijving (optioneel)",
+ "teamName": "Teamnaam"
+ },
+ "teamLead": {
+ "changeRuntime": "Lead-runtime wijzigen",
+ "changeRuntimeDescription": "Open Team opnieuw starten om de lead-provider, het model of de inspanning te wijzigen.",
+ "modelLockReason": "De lead-runtime van het team wordt beheerd vanuit Team opnieuw starten.",
+ "readOnlyHint": "De naam en rol van de teamlead blijven hier alleen-lezen. Open het runtime-paneel op de lead-rij om provider, model of inspanning te wijzigen.",
+ "role": "Teamlead"
+ },
+ "title": "Team bewerken"
+ },
+ "memberDraft": {
+ "actions": {
+ "remove": "Lid verwijderen",
+ "removeAria": "{{name}} verwijderen",
+ "restore": "Lid herstellen",
+ "restoreAria": "{{name}} herstellen"
+ },
+ "anthropicContext": {
+ "defaultSetting": "standaard contextinstelling",
+ "description": "De Anthropic-context is teambreed voor deze start: {{mode}}. Gebruik het selectievakje Context beperken in het lead-runtime-paneel om dit te wijzigen.",
+ "limitEnabled": "200K-limiet ingeschakeld"
+ },
+ "mcp": {
+ "buttonInherit": "MCP overerven",
+ "buttonScopes": "MCP-scopes",
+ "chooseScopes": "Scopes kiezen",
+ "inheritLead": "Van lead overerven",
+ "lockedInfo": "Alleen Agent Teams MCP is ingeschakeld voor alle teamleden. Dit teamlid start met alleen de Agent Teams-server.",
+ "mode": "MCP-modus",
+ "scopes": {
+ "local": "lokaal",
+ "project": "project",
+ "user": "gebruiker"
+ },
+ "serverNames": "Servernamen",
+ "settingInfo": "Agent Teams MCP start dit teamlid met alleen de Agent Teams-server. Scope- en allowlist-modi gelden alleen voor deze teamlidstart.",
+ "strictAllowlist": "Strikte allowlist",
+ "tooltip": "{{label}}: beheer het MCP-overervingsbeleid van dit lid",
+ "agentTeamsMcp": "Agent Teams MCP"
+ },
+ "model": {
+ "ariaLabel": "{{provider}}-provider, {{model}}",
+ "currentLeadRuntime": "Huidige lead-runtime",
+ "default": "Standaard",
+ "inheritedTooltip": "Provider, model en inspanning worden van de lead overgeërfd zolang synchronisatie is ingeschakeld.",
+ "leadSuffix": "{{label}} (lead)",
+ "liveDisabled": "Wijzigingen in provider, model en inspanning zijn uitgeschakeld terwijl het team live is. Verbind het team opnieuw om ze veilig toe te passen.",
+ "lockedActionFallback": "Lead-runtimewijzigingen openen Team opnieuw starten, waar provider, model en inspanning kunnen worden bijgewerkt.",
+ "restartWholeTeam": "Door die runtimewijzigingen op te slaan wordt het hele team opnieuw gestart."
+ },
+ "nameAria": "Naam van lid {{index}}",
+ "nameFallback": "lid {{index}}",
+ "noRole": "Geen rol",
+ "removed": "Verwijderd",
+ "workflow": {
+ "addTooltip": "Teamlidworkflow toevoegen",
+ "editTooltip": "Teamlidworkflow bewerken",
+ "label": "Workflow (optioneel)",
+ "placeholder": "Hoe deze agent zich moet gedragen, met anderen moet omgaan...",
+ "saved": "Opgeslagen"
+ },
+ "worktree": {
+ "description": "Voer dit teamlid uit in een aparte git-worktree. Wijzigingen toepassen/afwijzen richt zich op die worktree, niet op de lead-werkruimte.",
+ "label": "Worktree"
+ },
+ "addMembers": {
+ "title": "Leden toevoegen",
+ "description": "Voeg nieuwe leden toe aan {{teamName}}"
+ },
+ "placeholders": {
+ "name": "ledennaam",
+ "mcpServers": "github, sentry"
+ }
+ },
+ "detail": {
+ "actions": {
+ "add": "Toevoegen",
+ "cancel": "Annuleren",
+ "delete": "Verwijderen",
+ "editCode": "Code bewerken",
+ "launch": "Starten",
+ "remove": "Verwijderen",
+ "stop": "Stoppen",
+ "task": "Taak",
+ "visualize": "Visualiseren"
+ },
+ "deleteTeam": {
+ "description": "Team \"{{team}}\" verwijderen? Deze actie is onomkeerbaar. Alle teamgegevens en taken worden verwijderd.",
+ "title": "Team verwijderen"
+ },
+ "draft": {
+ "descriptionPrefix": "Dit is een conceptteam -",
+ "descriptionSuffix": "is geconfigureerd met {{count}} {{member}} maar is nog niet door de CLI geprovisioneerd. Klik op Starten om een model te selecteren en het team te starten.",
+ "descriptionSuffix_few": "is geconfigureerd met {{count}} {{member}} maar is nog niet door de CLI geprovisioneerd. Klik op Starten om een model te selecteren en het team te starten.",
+ "descriptionSuffix_many": "is geconfigureerd met {{count}} {{member}} maar is nog niet door de CLI geprovisioneerd. Klik op Starten om een model te selecteren en het team te starten.",
+ "descriptionSuffix_one": "is geconfigureerd met {{count}} {{member}} maar is nog niet door de CLI geprovisioneerd. Klik op Starten om een model te selecteren en het team te starten.",
+ "descriptionSuffix_other": "is geconfigureerd met {{count}} {{member}} maar is nog niet door de CLI geprovisioneerd. Klik op Starten om een model te selecteren en het team te starten.",
+ "member": "leden",
+ "member_few": "leden",
+ "member_many": "leden",
+ "member_one": "lid",
+ "member_other": "leden",
+ "title": "Team nog niet gestart"
+ },
+ "invalidTab": "Ongeldig teamtabblad",
+ "kanbanSafeData": "Kon Kanban niet volledig laden. Veilige gegevens worden weergegeven.",
+ "loadFailed": "Kon team niet laden",
+ "loading": "Team laden",
+ "loadingSidebar": "Teamzijbalk laden",
+ "offline": {
+ "offline": "Team is offline",
+ "partialFailed": "Laatste start halverwege mislukt",
+ "partialMissing": "Laatste start halverwege mislukt - {{missing}}/{{expected}} teamleden hebben zich niet aangesloten",
+ "reconciling": "Laatste start wordt nog afgestemd"
+ },
+ "previous": "Vorige: {{paths}}",
+ "removeMember": {
+ "description": "\"{{member}}\" uit het team verwijderen? Taken en berichten blijven bewaard, maar deze naam kan niet opnieuw worden gebruikt.",
+ "title": "Lid verwijderen"
+ },
+ "sections": {
+ "team": "Team"
+ },
+ "solo": "Solo",
+ "status": {
+ "active": "Actief",
+ "launching": "Starten...",
+ "running": "Actief"
+ },
+ "telemetry": {
+ "cpu": "CPU",
+ "memory": "Geheugen"
+ },
+ "tooltips": {
+ "deleteTeam": "Team verwijderen",
+ "editTeam": "Team bewerken",
+ "editUnavailableProvisioning": "Team bewerken is niet beschikbaar zolang de provisioning nog bezig is",
+ "openBuiltInEditor": "Project openen in ingebouwde editor",
+ "openTeamGraph": "Teamgrafiek openen",
+ "stopTeam": "Team stoppen"
+ },
+ "waitingForProvisioning": "Teamgegevens verschijnen zodra de provisioning is voltooid",
+ "context": {
+ "title": "Context",
+ "loading": "Laden...",
+ "noSessionLoaded": "Geen sessie geladen",
+ "closePanel": "Contextpaneel van {{team}} sluiten",
+ "loadingContext": "Context laden...",
+ "openLeadSession": "Open de teamlead-sessie om de context te bekijken."
+ }
+ },
+ "review": {
+ "fileHeader": {
+ "actions": {
+ "accept": "Accepteren",
+ "discard": "Verwerpen",
+ "discardTooltip": "Alle bewerkingen voor dit bestand verwerpen",
+ "keepMyDraft": "Mijn concept behouden",
+ "reject": "Afwijzen",
+ "reloadFromDisk": "Opnieuw laden van schijf",
+ "restore": "Herstellen",
+ "restoreTooltip": "Dit bestand op schijf aanmaken/herstellen vanuit het voorbeeld",
+ "saveFile": "Bestand opslaan",
+ "saveFileTooltip": "Bestand naar schijf opslaan"
+ },
+ "badges": {
+ "deleted": "VERWIJDERD",
+ "manualReview": "HANDMATIGE REVIEW",
+ "new": "NIEUW",
+ "worktree": "WORKTREE"
+ },
+ "contentSource": {
+ "disk-current": "Huidige schijf",
+ "file-history": "Bestandsgeschiedenis",
+ "git-fallback": "Git-fallback",
+ "ledger-exact": "Taakgrootboek",
+ "ledger-snapshot": "Grootboeksnapshot",
+ "snippet-reconstruction": "Gereconstrueerd",
+ "unavailable": "Inhoud niet beschikbaar"
+ },
+ "contentUnavailable": {
+ "badge": "Inhoud niet beschikbaar",
+ "description": "Het grootboek heeft metadata voor deze wijziging vastgelegd, maar de volledige tekstinhoud is niet beschikbaar. Dit betekent meestal binaire, grote of alleen-hash-inhoud.",
+ "safety": "Automatisch accepteren/afwijzen is voor dit bestand uitgeschakeld om onveilige schijfschrijfacties te voorkomen.",
+ "title": "Tekstinhoud is niet beschikbaar"
+ },
+ "disabled": {
+ "acceptRejectContentUnavailable": "Accepteren/Afwijzen is uitgeschakeld omdat de volledige tekstinhoud niet beschikbaar is.",
+ "acceptRejectMissingOnDisk": "Accepteren/Afwijzen is uitgeschakeld terwijl het bestand ontbreekt op schijf.",
+ "rejectBaselineUnavailable": "Afwijzen is uitgeschakeld omdat de originele baseline niet beschikbaar is.",
+ "rejectContentUnavailable": "Afwijzen is uitgeschakeld omdat de volledige tekstinhoud niet beschikbaar is.",
+ "rejectManualLedgerReview": "Afwijzen is uitgeschakeld omdat deze grootboekwijziging binaire, grote of niet-beschikbare inhoud bevat."
+ },
+ "externalChange": {
+ "changedOnDisk": "Gewijzigd op schijf",
+ "deletedOnDisk": "Verwijderd op schijf",
+ "recreatedOnDisk": "Opnieuw aangemaakt op schijf"
+ },
+ "missingOnDisk": {
+ "badge": "Ontbreekt op schijf",
+ "description": "We kunnen nog steeds een voorbeeld tonen uit agentlogboeken, maar je bestandssysteem is niet gesynchroniseerd.",
+ "restorePrefix": "Gebruik",
+ "restoreSuffix": "om de voorbeeldinhoud terug naar schijf te schrijven.",
+ "restoreUnavailable": "De volledige bestandsinhoud is niet beschikbaar om automatisch te herstellen.",
+ "title": "Bestand ontbreekt op schijf"
+ },
+ "pathChange": {
+ "from": "Van {{path}}",
+ "to": "Naar {{path}}"
+ },
+ "worktree": {
+ "isolated": "Geïsoleerde worktree"
+ }
+ },
+ "toolbar": {
+ "stats": {
+ "pending": "{{count}} in behandeling",
+ "pending_one": "{{count}} in behandeling",
+ "pending_other": "{{count}} in behandeling",
+ "accepted": "{{count}} geaccepteerd",
+ "accepted_one": "{{count}} geaccepteerd",
+ "accepted_other": "{{count}} geaccepteerd",
+ "rejected": "{{count}} afgewezen",
+ "rejected_one": "{{count}} afgewezen",
+ "rejected_other": "{{count}} afgewezen",
+ "acrossFiles": "over {{count}} bestanden",
+ "acrossFiles_one": "over {{count}} bestand",
+ "acrossFiles_other": "over {{count}} bestanden",
+ "edited": "{{count}} bewerkt",
+ "edited_one": "{{count}} bewerkt",
+ "edited_other": "{{count}} bewerkt",
+ "pending_few": "{{count}} in behandeling",
+ "pending_many": "{{count}} in behandeling",
+ "accepted_few": "{{count}} geaccepteerd",
+ "accepted_many": "{{count}} geaccepteerd",
+ "rejected_few": "{{count}} afgewezen",
+ "rejected_many": "{{count}} afgewezen",
+ "acrossFiles_few": "over {{count}} bestanden",
+ "acrossFiles_many": "over {{count}} bestanden",
+ "edited_few": "{{count}} bewerkt",
+ "edited_many": "{{count}} bewerkt"
+ },
+ "actions": {
+ "auto": "Auto",
+ "undo": "Ongedaan maken",
+ "acceptAll": "Alles accepteren",
+ "rejectAll": "Alles afwijzen",
+ "applying": "Toepassen...",
+ "applyRejections": "Afwijzingen toepassen"
+ },
+ "tooltips": {
+ "autoOn": "Bestanden automatisch markeren als bekeken bij scrollen naar het einde (AAN)",
+ "autoOff": "Bestanden automatisch markeren als bekeken bij scrollen naar het einde (UIT)",
+ "undo": "Laatste reviewbewerking ongedaan maken (Ctrl+Z)",
+ "acceptAll": "Alle wijzigingen in alle bestanden accepteren",
+ "rejectAll": "Alle veilig afwijsbare wijzigingen in alle bestanden afwijzen",
+ "rejectAllDisabled": "Geen bestanden in behandeling hebben een veilige originele baseline om af te wijzen.",
+ "applyRejections": "Afgewezen hunks toepassen op schijf; geaccepteerde wijzigingen blijven zoals ze zijn"
+ }
+ },
+ "diffError": {
+ "title": "Kon diff-weergave niet renderen",
+ "unexpected": "Er is een onverwachte fout opgetreden tijdens het renderen van de diff.",
+ "actions": {
+ "retry": "Opnieuw proberen"
+ },
+ "raw": {
+ "show": "Ruwe diff-gegevens tonen",
+ "file": "Bestand: {{file}}",
+ "original": "--- Origineel",
+ "modified": "+++ Gewijzigd",
+ "charsTotal": "... ({{count}} tekens totaal)",
+ "charsTotal_one": "... ({{count}} teken totaal)",
+ "charsTotal_other": "... ({{count}} tekens totaal)",
+ "charsTotal_few": "... ({{count}} tekens totaal)",
+ "charsTotal_many": "... ({{count}} tekens totaal)"
+ }
+ },
+ "fileTree": {
+ "viewed": "Bekeken",
+ "badges": {
+ "new": "nieuw",
+ "deleted": "verwijderd"
+ },
+ "collapseFolder": "{{name}} inklappen",
+ "expandFolder": "{{name}} uitklappen",
+ "empty": {
+ "noChangedFiles": "Geen gewijzigde bestanden",
+ "noMatchingFiles": "Geen overeenkomende bestanden"
+ },
+ "searchPlaceholder": "Bestanden zoeken…",
+ "filters": {
+ "unresolved": "Onopgelost",
+ "rejected": "Afgewezen",
+ "new": "Nieuw",
+ "clear": "Wissen"
+ }
+ },
+ "diffControls": {
+ "previousChunk": "Vorige chunk",
+ "nextChunk": "Volgende chunk",
+ "rejectChange": "Wijziging afwijzen (⌘N)",
+ "acceptChange": "Wijziging accepteren (⌘Y)",
+ "undo": "Ongedaan maken",
+ "keep": "Behouden",
+ "rejectShortcut": "⌘N",
+ "acceptShortcut": "⌘Y"
+ },
+ "conflict": {
+ "title": "Conflict gedetecteerd",
+ "description": "Dit bestand is gewijzigd sinds de wijzigingen van de agent",
+ "cancel": "Annuleren",
+ "saveResolution": "Oplossing opslaan",
+ "editManually": "Handmatig bewerken",
+ "useOriginal": "Origineel gebruiken",
+ "keepCurrent": "Huidige behouden"
+ },
+ "fullDiffLoading": {
+ "titleOne": "Volledige diff voorbereiden",
+ "titleMany": "{{count}} volledige diffs voorbereiden",
+ "subtitleForFile": "De exacte editor-diff voor {{file}} afronden.",
+ "subtitleCurrentFile": "De exacte editor-diff voor het huidige bestand afronden.",
+ "subtitleMany": "Exacte voor/na-baselines oplossen voor de bestanden die momenteel laden.",
+ "previewsReady": "{{count}} voorbeelden gereed",
+ "previewsReady_one": "{{count}} voorbeeld gereed",
+ "editorViewLoading": "Editorweergave laden",
+ "filesInProgress": "{{count}} bestanden bezig",
+ "filesInProgress_one": "{{count}} bestand bezig",
+ "filesReady": "{{ready}}/{{total}} bestanden gereed",
+ "progressDescription": "{{ready}} gereed, {{loading}} nog aan het laden. Voorbeeld-diffs blijven hieronder zichtbaar terwijl de resterende baselines worden opgelost.",
+ "singleDescription": "Voorbeeld-diffs blijven hieronder zichtbaar terwijl de exacte baseline wordt opgelost.",
+ "previewsReady_few": "{{count}} voorbeelden gereed",
+ "previewsReady_many": "{{count}} voorbeelden gereed",
+ "previewsReady_other": "{{count}} voorbeelden gereed",
+ "filesInProgress_few": "{{count}} bestanden bezig",
+ "filesInProgress_many": "{{count}} bestanden bezig",
+ "filesInProgress_other": "{{count}} bestanden bezig"
+ },
+ "fileMissingPrefix": "Bestand ontbreekt op schijf. Deze diff is mogelijk alleen een voorbeeld uit agentlogboeken. Gebruik",
+ "restore": "Herstellen",
+ "fileMissingSuffix": "om het bestand op schijf aan te maken.",
+ "filePlaceholder": {
+ "loading": "Laden",
+ "description": "Een volledige editor-diff voor dit bestand voorbereiden."
+ },
+ "loading": {
+ "diff": "DIFF",
+ "ledgerObjectsProcessed": "{{count}} grootboekobjecten verwerkt",
+ "ledgerObjectsProcessed_one": "{{count}} grootboekobject verwerkt",
+ "ledgerObjectsProcessed_other": "{{count}} grootboekobjecten verwerkt",
+ "ledgerObjectsProcessed_few": "{{count}} grootboekobjecten verwerkt",
+ "ledgerObjectsProcessed_many": "{{count}} grootboekobjecten verwerkt",
+ "phases": {
+ "readingLedger": "Taakgrootboek lezen...",
+ "resolvingFiles": "Bestandsstatussen oplossen...",
+ "checkingWorktree": "Worktree-context controleren...",
+ "preparingDiffs": "Review-diffs voorbereiden..."
+ }
+ },
+ "progress": {
+ "viewed": "{{viewed}}/{{total}} bekeken"
+ },
+ "scope": {
+ "readMore": "Meer lezen",
+ "tiers": {
+ "exact": {
+ "title": "Taakscope nauwkeurig bepaald",
+ "detail": "Zowel start- als voltooiingsmarkeringen gevonden in het sessielogboek. De diff bevat alleen wijzigingen die tijdens deze specifieke taak zijn gemaakt - andere taken die dezelfde bestanden hebben gewijzigd, zijn uitgesloten."
+ },
+ "endEstimated": {
+ "title": "Eindgrens geschat",
+ "detail": "Alleen de startmarkering is gevonden - de taak heeft nog geen voltooiingsmarkering. Wijzigingen worden getoond van het begin van de taak tot het einde van de sessie. Als er na deze taak andere taken in dezelfde sessie zijn uitgevoerd, kunnen hun wijzigingen ook zijn opgenomen."
+ },
+ "startEstimated": {
+ "title": "Startgrens geschat",
+ "detail": "Alleen de voltooiingsmarkering is gevonden - het begin van het werk is niet vastgelegd. Als er vóór deze taak andere taken in dezelfde sessie zijn uitgevoerd, kunnen hun wijzigingen aan dezelfde bestanden ook zijn opgenomen."
+ },
+ "allSession": {
+ "title": "Alle sessiewijzigingen worden getoond",
+ "detail": "Geen taakmarkeringen gevonden in het sessielogboek. Kan deze taak niet isoleren - alle bestandswijzigingen van de hele sessie worden getoond, inclusief wijzigingen van andere taken. Dit kan gebeuren bij oudere CLI-versies of niet-standaard workflows."
+ }
+ },
+ "ledger": {
+ "exact": {
+ "title": "Wijzigingen vastgelegd door taakgrootboek",
+ "detail": "De orchestrator heeft deze bestandswijzigingen vastgelegd terwijl de agent aan deze taak werkte.",
+ "badge": "Grootboek exact"
+ },
+ "limited": {
+ "title": "Wijzigingen vastgelegd met beperkte reviewbaarheid",
+ "detail": "De orchestrator heeft deze bestandswijzigingen voor deze taak vastgelegd, maar minstens één wijziging is vastgelegd vanuit een snapshot of alleen-metadata-bron. Bekijk exacte tekst-diffs waar beschikbaar; binaire of niet-beschikbare inhoud vereist mogelijk handmatige review.",
+ "mixedBadge": "Gemengde reviewbaarheid",
+ "needsReviewBadge": "Review nodig"
+ }
+ },
+ "workInterval": {
+ "title": "Beperkt op basis van bewaard werkinterval",
+ "detail": "De startmarkering van de taak was niet beschikbaar in het sessielogboek, dus de diff is beperkt op basis van het werkinterval van de taak dat op het bord is opgeslagen.",
+ "badge": "Intervalbeperkt"
+ },
+ "confidence": {
+ "high": "Hoge betrouwbaarheid",
+ "medium": "Gemiddelde betrouwbaarheid",
+ "low": "Lage betrouwbaarheid",
+ "bestEffort": "Best effort"
+ }
+ },
+ "shortcuts": {
+ "title": "Sneltoetsen",
+ "actions": {
+ "nextChange": "Volgende wijziging",
+ "previousChange": "Vorige wijziging",
+ "nextFile": "Volgend bestand",
+ "previousFile": "Vorig bestand",
+ "acceptChange": "Wijziging accepteren",
+ "rejectChange": "Wijziging afwijzen",
+ "saveFile": "Bestand opslaan",
+ "undo": "Ongedaan maken",
+ "redo": "Opnieuw uitvoeren",
+ "toggleShortcuts": "Sneltoetsen in-/uitschakelen",
+ "closeDialog": "Dialoogvenster sluiten"
+ }
+ },
+ "timeline": {
+ "empty": "Geen bewerkingsgebeurtenissen",
+ "titleWithCount": "Bewerkingstijdlijn ({{count}})"
+ },
+ "continuousScroll": {
+ "empty": "Geen reviewbare bestandswijzigingen"
+ },
+ "empty": {
+ "noSafeDiff": "Geen veilige diff beschikbaar",
+ "noFileChangesRecorded": "Geen bestandswijzigingen geregistreerd",
+ "noSafeDiffDescription": "Het taakgrootboek heeft geen veilige bestandsdiff voor deze taak blootgelegd.",
+ "noSafeDiffDiagnosticsDescription": "Het taakgrootboek heeft geen veilige bestandsdiff voor deze taak blootgelegd. De diagnostiek hieronder legt uit waarom.",
+ "noFileEventsYet": "Het taakgrootboek heeft nog geen bestandsgebeurtenissen voor deze taak.",
+ "noFileEvents": "Het taakgrootboek heeft geen bestandsgebeurtenissen voor deze taak."
+ }
+ },
+ "messages": {
+ "actions": {
+ "bottomSheetActions": "Acties berichtenpaneel onderaan",
+ "collapseAll": "Alle berichten inklappen",
+ "collapseSheet": "Paneel inklappen",
+ "expandAll": "Alle berichten uitklappen",
+ "expandSheet": "Paneel uitklappen",
+ "floatComposer": "Composer laten zweven",
+ "floatMessagesComposer": "Berichtencomposer laten zweven",
+ "hideSearch": "Zoeken verbergen",
+ "loadOlder": "Oudere berichten laden",
+ "markAllRead": "Alles markeren als gelezen",
+ "messageActions": "Berichtacties",
+ "moveMessagesToBottomSheet": "Berichten naar onderpaneel verplaatsen",
+ "moveMessagesToSidebar": "Berichten naar zijbalk verplaatsen",
+ "moveToBottomSheet": "Naar onderpaneel verplaatsen",
+ "moveToInline": "Naar inline verplaatsen",
+ "moveToSidebar": "Naar zijbalk verplaatsen",
+ "panelActions": "Acties berichtenpaneel",
+ "searchMessages": "Berichten zoeken"
+ },
+ "delivery": {
+ "copied": "Gekopieerd",
+ "copyDebugDetails": "Debugdetails kopiëren",
+ "details": "Details",
+ "fields": {
+ "acceptanceUnknown": "acceptanceUnknown",
+ "delivered": "delivered",
+ "diagnostics": "diagnostics",
+ "ledgerStatus": "ledgerStatus",
+ "messageId": "messageId",
+ "providerId": "providerId",
+ "queuedBehindMessageId": "queuedBehindMessageId",
+ "reason": "reason",
+ "responsePending": "responsePending",
+ "responseState": "responseState",
+ "statusMessageId": "statusMessageId",
+ "userVisibleMessage": "userVisibleMessage",
+ "userVisibleNextReviewAt": "userVisibleNextReviewAt",
+ "userVisibleReasonCode": "userVisibleReasonCode",
+ "userVisibleState": "userVisibleState",
+ "visibleReplyCorrelation": "visibleReplyCorrelation",
+ "visibleReplyMessageId": "visibleReplyMessageId"
+ }
+ },
+ "panelMode": "Modus berichtenpaneel",
+ "title": "Berichten",
+ "unread": {
+ "new": "{{count}} nieuw",
+ "unread": "{{count}} ongelezen",
+ "new_few": "{{count}} nieuw",
+ "new_many": "{{count}} nieuw",
+ "new_one": "{{count}} nieuw",
+ "new_other": "{{count}} nieuw",
+ "unread_few": "{{count}} ongelezen",
+ "unread_many": "{{count}} ongelezen",
+ "unread_one": "{{count}} ongelezen",
+ "unread_other": "{{count}} ongelezen"
+ },
+ "filter": {
+ "ariaLabel": "Berichten filteren",
+ "tooltip": "Berichten filteren",
+ "from": "Van",
+ "to": "Aan",
+ "noData": "Geen gegevens",
+ "showStatusUpdates": "Statusupdates tonen (idle/shutdown)",
+ "actions": {
+ "reset": "Resetten",
+ "save": "Opslaan"
+ }
+ },
+ "status": {
+ "title": "Status"
+ },
+ "actionMode": {
+ "label": "Actiemodus"
+ },
+ "search": {
+ "placeholder": "Zoeken..."
+ }
+ },
+ "modelSelector": {
+ "badges": {
+ "configured": "Geconfigureerd",
+ "connected": "Verbonden",
+ "failed": "Mislukt",
+ "free": "Gratis",
+ "local": "Lokaal",
+ "needsTest": "Test nodig",
+ "verified": "Geverifieerd",
+ "unavailable": "Niet beschikbaar",
+ "issue": "Probleem"
+ },
+ "customModelId": "Aangepaste model-id",
+ "label": "Model (optioneel)",
+ "multimodelRequired": "Codex en Gemini vereisen Multimodel-modus.",
+ "openCode": {
+ "allSources": "Alle OpenCode-bronnen",
+ "filterSource": "{{source}} filteren",
+ "filterSources": "OpenCode-bronnen filteren",
+ "freeOnly": "Alleen gratis",
+ "freeTooltip": "OpenCode markeert dit model als gratis.",
+ "loadingModels": "OpenCode-modellen laden...",
+ "noSourcesFound": "Geen bronnen gevonden.",
+ "recommendedOnly": "Alleen aanbevolen",
+ "searchSources": "Bronnen zoeken",
+ "sourcesCount": "{{count}} OpenCode-bronnen",
+ "sourcesCount_few": "{{count}} OpenCode-bronnen",
+ "sourcesCount_many": "{{count}} OpenCode-bronnen",
+ "sourcesCount_one": "{{count}} OpenCode-bron",
+ "sourcesCount_other": "{{count}} OpenCode-bronnen"
+ },
+ "reason": "Reden: {{reason}}",
+ "runtimeModelsSyncing": "Expliciete modellen worden geladen vanuit de huidige runtime. Standaard blijft beschikbaar terwijl de lijst synchroniseert.",
+ "fastMode": {
+ "codexLabel": "Fast-modus (2x credits)",
+ "optionalLabel": "Fast-modus (optioneel)",
+ "defaultOff": "Standaard (Uit)",
+ "fast": "Fast",
+ "off": "Uit",
+ "defaultFast": "Standaard (Fast)",
+ "defaultResolvesTo": "Standaard wordt momenteel omgezet naar {{mode}}.",
+ "runtimeBackedHint": "De Fast-modus is runtime-ondersteund en wordt alleen ontgrendeld wanneer het opgeloste Anthropic-startmodel dit ondersteunt."
+ },
+ "anthropicExtraUsage": {
+ "pricingDocs": "Lees de Anthropic-prijsdocumentatie"
+ },
+ "searchModels": "Modellen zoeken",
+ "defaultModel": "Standaard",
+ "empty": {
+ "noSearchMatches": "Geen modellen komen overeen met deze zoekopdracht.",
+ "recommendedFreeOpenCode": "Er zijn geen aanbevolen gratis OpenCode-modellen beschikbaar in de huidige runtimelijst.",
+ "freeOpenCode": "Er zijn geen gratis OpenCode-modellen beschikbaar in de huidige runtimelijst.",
+ "recommendedOpenCode": "Er zijn geen aanbevolen OpenCode-modellen beschikbaar in de huidige runtimelijst.",
+ "noModels": "Er zijn geen modellen beschikbaar in de huidige runtimelijst."
+ },
+ "openCodeStatus": {
+ "notReadyTitle": "OpenCode is niet klaar voor teamstart",
+ "freeModelsAvailableTitle": "OpenCode gratis modellen zijn beschikbaar",
+ "providerNotConnectedTitle": "OpenCode-provider is niet verbonden",
+ "readyTitle": "OpenCode is gereed",
+ "readyMessage": "OpenCode is geslaagd voor de providergereedheid. Selecteer het om OpenCode-modellen voor dit team te gebruiken.",
+ "useOpenCode": "OpenCode gebruiken",
+ "badges": {
+ "check": "Controleren",
+ "install": "Installeren",
+ "free": "Gratis",
+ "setup": "Configuratie"
+ },
+ "summary": {
+ "checking": "OpenCode-status: runtime controleren",
+ "status": "OpenCode-status: {{parts}}"
+ },
+ "summaryParts": {
+ "teamLaunchBlocked": "teamstart geblokkeerd",
+ "providerOptional": "providerverbinding optioneel",
+ "providerModelsNeedSetup": "provider-ondersteunde modellen vereisen configuratie",
+ "teamLaunchReady": "teamstart gereed",
+ "runtimeDetected": "runtime gedetecteerd",
+ "runtimeMissing": "runtime ontbreekt",
+ "freeWithoutAuth": "gratis modellen beschikbaar zonder authenticatie",
+ "providerConnected": "provider verbonden",
+ "providerNotConnected": "provider niet verbonden"
+ },
+ "messages": {
+ "checking": "De app controleert nog steeds de OpenCode-runtime. Wacht tot de providerstatus is voltooid en probeer het dan opnieuw.",
+ "unsupported": "OpenCode is niet geïnstalleerd, niet gevonden, of de gedetecteerde runtime wordt niet ondersteund. Installeer of update OpenCode en vernieuw vervolgens de providerstatus. Je kunt ook de knop Installeren op de startpagina gebruiken.",
+ "freeAvailable": "OpenCode is gedetecteerd. Je kunt gratis OpenCode-modellen zoals Big Pickle gebruiken zonder een provider te verbinden. Verbind alleen een provider wanneer je provider-ondersteunde modellen wilt.",
+ "noFreeListed": "OpenCode is gedetecteerd, maar er is nog geen gratis OpenCode-model vermeld. Vernieuw de providerstatus of verbind een provider in OpenCode voor provider-ondersteunde modellen.",
+ "launchBlocked": "OpenCode is geïnstalleerd en geauthenticeerd, maar de Agent Teams-startgereedheid is geblokkeerd.",
+ "ready": "OpenCode is gereed voor teamstart."
+ },
+ "loadingRuntime": "De OpenCode-runtimestatus is nog aan het laden."
+ },
+ "advisory": {
+ "pingNotConfirmed": "Ping niet bevestigd",
+ "note": "Opmerking"
+ },
+ "placeholders": {
+ "customModelId": "openai/gpt-oss-20b"
+ },
+ "routeGroups": {
+ "openCodeConfig": "OpenCode-config",
+ "builtinFree": "Gratis ingebouwd",
+ "connectedProviders": "Verbonden providers",
+ "otherCatalog": "Overige OpenCode-catalogus"
+ },
+ "pricing": {
+ "free": "Gratis",
+ "inputShort": "in {{rate}}",
+ "outputShort": "uit {{rate}}",
+ "perMillionSummary": "{{summary}} / 1M",
+ "inputTitle": "Invoer: {{rate}} per 1M tokens",
+ "outputTitle": "Uitvoer: {{rate}} per 1M tokens",
+ "cacheReadTitle": "Cache lezen: {{rate}} per 1M tokens",
+ "cacheWriteTitle": "Cache schrijven: {{rate}} per 1M tokens"
+ },
+ "defaultTooltip": {
+ "anthropicCompatibleWithResolved": "Gebruikt het standaardmodel van het Anthropic-compatibele endpoint.\nWordt momenteel omgezet naar {{model}}.",
+ "anthropicCompatible": "Gebruikt het standaardmodel van het Anthropic-compatibele endpoint.",
+ "anthropic": "Gebruikt het standaard Claude-teammodel.\nWordt omgezet naar {{longContextModel}} met 1M context, of {{limitedContextModel}} met 200K context wanneer Context beperken is ingeschakeld.",
+ "openCodeWithResolved": "Gebruikt het standaard OpenCode-model.\nWordt momenteel omgezet naar {{model}}.",
+ "openCode": "Gebruikt het standaardmodel van de OpenCode-runtime.",
+ "runtime": "Gebruikt de runtimestandaard voor de geselecteerde provider."
+ },
+ "multimodelOff": "Multimodel uit",
+ "unavailableInRuntime": "Niet beschikbaar in huidige runtime"
+ },
+ "taskDetail": {
+ "actions": {
+ "cancel": "Annuleren",
+ "delete": "Verwijderen",
+ "markResolved": "Markeren als opgelost",
+ "save": "Opslaan"
+ },
+ "attachments": {
+ "commentAttachment": "Opmerkingbijlage",
+ "fromComments": "Uit opmerkingen",
+ "preview": "Voorbeeld {{filename}}"
+ },
+ "changes": {
+ "badges": {
+ "attention": "aandacht",
+ "noSafeDiff": "geen veilige diff"
+ },
+ "empty": {
+ "noFileChangesRecorded": "Geen bestandswijzigingen geregistreerd",
+ "noFileChangesRecordedYet": "Nog geen bestandswijzigingen geregistreerd",
+ "noReviewableChangesRecovered": "Geen reviewbare bestandswijzigingen hersteld",
+ "noSafeDiffAvailable": "Geen veilige diff beschikbaar"
+ },
+ "loadFailed": "Kon samenvatting van taakwijzigingen niet laden",
+ "loading": "Wijzigingen laden...",
+ "fileCount": "{{count}} bestanden",
+ "fileRowsHidden": "{{count}} bestandsrijen verborgen",
+ "moreDiagnostics": "{{count}} meer diagnostiek",
+ "moreFiles": "{{count}} meer bestanden",
+ "openInEditor": "Openen in editor",
+ "openTask": "Taak {{subject}} openen",
+ "refresh": "Wijzigingen vernieuwen",
+ "refreshFailed": "Vernieuwen mislukt: {{error}}",
+ "refreshing": "Vernieuwen",
+ "refreshingChanges": "Wijzigingen vernieuwen...",
+ "refreshTeamChanges": "Teamwijzigingen vernieuwen",
+ "refreshShort": "Vernieuwen",
+ "reviewDiff": "Diff bekijken",
+ "reviewTaskDiff": "Taakdiff bekijken",
+ "scannedCandidateTasks": "{{requested}} van {{eligible}} kandidaattaken gescand",
+ "tasksDeferred": "{{count}} taken uitgesteld in deze ronde",
+ "title": "Wijzigingen",
+ "fileCount_few": "{{count}} bestanden",
+ "fileCount_many": "{{count}} bestanden",
+ "fileCount_one": "{{count}} bestand",
+ "fileCount_other": "{{count}} bestanden",
+ "fileRowsHidden_few": "{{count}} bestandsrijen verborgen",
+ "fileRowsHidden_many": "{{count}} bestandsrijen verborgen",
+ "fileRowsHidden_one": "{{count}} bestandsrij verborgen",
+ "fileRowsHidden_other": "{{count}} bestandsrijen verborgen",
+ "moreDiagnostics_few": "{{count}} meer diagnostiek",
+ "moreDiagnostics_many": "{{count}} meer diagnostiek",
+ "moreDiagnostics_one": "{{count}} meer diagnostiek",
+ "moreDiagnostics_other": "{{count}} meer diagnostiek",
+ "moreFiles_few": "{{count}} meer bestanden",
+ "moreFiles_many": "{{count}} meer bestanden",
+ "moreFiles_one": "{{count}} meer bestand",
+ "moreFiles_other": "{{count}} meer bestanden",
+ "tasksDeferred_few": "{{count}} taken uitgesteld in deze ronde",
+ "tasksDeferred_many": "{{count}} taken uitgesteld in deze ronde",
+ "tasksDeferred_one": "{{count}} taak uitgesteld in deze ronde",
+ "tasksDeferred_other": "{{count}} taken uitgesteld in deze ronde"
+ },
+ "clarification": {
+ "awaitingLead": "Wachten op verduidelijking van teamlead",
+ "awaitingUser": "Wachten op verduidelijking van jou"
+ },
+ "description": {
+ "add": "Klik om een beschrijving toe te voegen...",
+ "edit": "Beschrijving bewerken",
+ "placeholder": "Taakbeschrijving (ondersteunt markdown)"
+ },
+ "loading": {
+ "fetchingTeamData": "Teamgegevens ophalen",
+ "title": "Taak laden..."
+ },
+ "logs": {
+ "newArriving": "Nieuwe taaklogboeken komen binnen"
+ },
+ "notFound": "Taak niet gevonden",
+ "related": {
+ "blockedBy": "Geblokkeerd door",
+ "blocks": "Blokkeert",
+ "linkedFrom": "Gelinkt vanuit",
+ "links": "Links",
+ "title": "Gerelateerde taken"
+ },
+ "review": {
+ "reviewer": "Reviewer: {{reviewer}}"
+ },
+ "sections": {
+ "attachments": "Bijlagen",
+ "changes": "Wijzigingen",
+ "comments": "Opmerkingen",
+ "description": "Beschrijving",
+ "taskLogs": "Taaklogboeken",
+ "workflowHistory": "Workflowgeschiedenis"
+ },
+ "unassigned": "Niet toegewezen",
+ "workflow": {
+ "implementationTimeTitle": "Implementatietijd uit bewaarde werkintervallen",
+ "inProgressTime": "Tijd bezig {{duration}}"
+ },
+ "comments": {
+ "renderLimit": "De meest recente {{formattedCount}} opmerkingen worden getoond om de UI responsief te houden.",
+ "badges": {
+ "approved": "Goedgekeurd",
+ "reviewRequested": "Review aangevraagd"
+ },
+ "unknownTime": "onbekende tijd",
+ "actions": {
+ "reply": "Reageren",
+ "replyToComment": "Op opmerking reageren",
+ "showMore": "Meer opmerkingen tonen ({{visible}}/{{total}})",
+ "cancelReply": "Reactie annuleren",
+ "comment": "Opmerking"
+ },
+ "attachments": {
+ "previewAlt": "Bijlagevoorbeeld",
+ "downloadFailed": "Download mislukt"
+ },
+ "replyingTo": "Reageert op",
+ "input": {
+ "placeholder": "Voeg een opmerking toe... (Enter om te verzenden)",
+ "charsLeft": "{{count}} tekens over",
+ "charsLeft_one": "{{count}} teken over",
+ "charsLeft_other": "{{count}} tekens over",
+ "charsLeft_few": "{{count}} tekens over",
+ "charsLeft_many": "{{count}} tekens over"
+ }
+ },
+ "workflowTimeline": {
+ "empty": "Geen workflowgeschiedenis geregistreerd",
+ "currentImplementationInterval": "Huidig implementatie-interval",
+ "implementationIntervalEnded": "Implementatie-interval eindigde bij deze overgang",
+ "runningPrefix": "loopt ",
+ "createdAs": "Aangemaakt als",
+ "by": "door",
+ "reassigned": "Opnieuw toegewezen",
+ "assignedTo": "Toegewezen aan",
+ "unassignedFrom": "Toewijzing ongedaan gemaakt van",
+ "ownerChanged": "Eigenaar gewijzigd",
+ "reviewRequested": "Review aangevraagd",
+ "reviewStarted": "Review gestart",
+ "changesRequested": "Wijzigingen aangevraagd",
+ "approved": "Goedgekeurd",
+ "unknownEvent": "Onbekende gebeurtenis"
+ },
+ "reviewStates": {
+ "approved": "Goedgekeurd",
+ "needsFix": "Te herstellen",
+ "inReview": "In review"
+ }
+ },
+ "tasks": {
+ "createTask": {
+ "assignee": "Toegewezene",
+ "assigneeOptional": "Toegewezene (optioneel)",
+ "blockedByOptional": "Geblokkeerd door taken (optioneel)",
+ "blockedBySummary": "Taak wordt geblokkeerd door: {{tasks}}",
+ "cancel": "Annuleren",
+ "create": "Aanmaken",
+ "creating": "Aanmaken...",
+ "description": "De taak wordt aangemaakt in de tasks/-directory van het team en verschijnt op het Kanban-bord.",
+ "descriptionOptional": "Beschrijving (optioneel)",
+ "detailsPlaceholder": "Taakdetails (ondersteunt markdown)",
+ "hideOptionalFields": "Optionele velden verbergen",
+ "offlineNotice": {
+ "after": "- start het team om de uitvoering te beginnen.",
+ "before": "Team is offline. De taak wordt toegevoegd aan"
+ },
+ "promptOptional": "Prompt voor toegewezene (optioneel)",
+ "promptPlaceholder": "Aangepaste instructies voor het teamlid...",
+ "relatedOptional": "Gerelateerde taken (optioneel)",
+ "relatedSummary": "Gerelateerd: {{tasks}}",
+ "saved": "Opgeslagen",
+ "searchTasks": "Taken zoeken...",
+ "selectMember": "Selecteer een lid",
+ "selectMemberOptional": "Lid selecteren...",
+ "showOptionalFields": "Optionele velden tonen",
+ "startImmediately": "Meteen starten",
+ "startOfflineHint": "Team is offline. Start eerst het team om taken meteen te starten.",
+ "subject": "Onderwerp",
+ "subjectPlaceholder": "Wat moet er gebeuren?",
+ "title": "Taak aanmaken",
+ "todo": "TE DOEN"
+ },
+ "list": {
+ "columns": {
+ "blockedBy": "Geblokkeerd door",
+ "blocks": "Blokkeert",
+ "id": "ID",
+ "owner": "Eigenaar",
+ "status": "Status",
+ "subject": "Onderwerp"
+ },
+ "empty": "Geen taken in dit team",
+ "filters": {
+ "allOwners": "Alle eigenaren",
+ "allStatuses": "Alle statussen",
+ "ownerAria": "Taken filteren op eigenaar",
+ "statusAria": "Taken filteren op status"
+ },
+ "showing": "{{shown}} van {{total}} getoond"
+ },
+ "status": {
+ "completed": "voltooid",
+ "deleted": "verwijderd",
+ "inProgress": "in_progress",
+ "pending": "in behandeling"
+ },
+ "statusSummary": {
+ "progressAria": "Taken {{completed}}/{{total}} voltooid",
+ "inProgress": "{{count}} in_progress",
+ "inProgress_one": "{{count}} in_progress",
+ "inProgress_other": "{{count}} in_progress",
+ "inProgress_few": "{{count}} in_progress",
+ "inProgress_many": "{{count}} in_progress",
+ "pending": "{{count}} in behandeling",
+ "pending_one": "{{count}} in behandeling",
+ "pending_other": "{{count}} in behandeling",
+ "pending_few": "{{count}} in behandeling",
+ "pending_many": "{{count}} in behandeling",
+ "completed": "{{count}} voltooid",
+ "completed_one": "{{count}} voltooid",
+ "completed_other": "{{count}} voltooid",
+ "completed_few": "{{count}} voltooid",
+ "completed_many": "{{count}} voltooid"
+ },
+ "unassigned": "Niet toegewezen",
+ "teamPrefix": "Team:",
+ "openTask": "Taak openen",
+ "deleteConfirm": {
+ "title": "Taak verwijderen",
+ "message": "Taak #{{taskId}} naar de prullenbak verplaatsen?",
+ "confirmLabel": "Verwijderen",
+ "cancelLabel": "Annuleren"
+ }
+ },
+ "editor": {
+ "actions": {
+ "cancel": "Annuleren",
+ "closeEditor": "Editor sluiten",
+ "closeTab": "Tabblad sluiten",
+ "closeTooltip": "Editor sluiten (Esc)",
+ "discard": "Verwerpen",
+ "discardAndClose": "Verwerpen en sluiten",
+ "keep": "Behouden",
+ "keepMine": "Mijne behouden",
+ "keyboardShortcuts": "Sneltoetsen",
+ "overwrite": "Overschrijven",
+ "refreshAria": "Vernieuwen (F5)",
+ "refreshTooltip": "Git-status vernieuwen (F5)",
+ "reload": "Opnieuw laden",
+ "retry": "Opnieuw proberen",
+ "save": "Opslaan",
+ "saveAllAndClose": "Alles opslaan en sluiten"
+ },
+ "ariaLabel": "Projecteditor",
+ "dialogs": {
+ "conflictDescription": "Het bestand is extern gewijzigd sinds je het hebt geopend. Overschrijven met je wijzigingen?",
+ "conflictTitle": "Opslagconflict",
+ "unsavedDescription": "Je hebt niet-opgeslagen wijzigingen. Wat wil je doen?",
+ "unsavedFileDescription": "Dit bestand heeft niet-opgeslagen wijzigingen. Wat wil je doen?",
+ "unsavedTitle": "Niet-opgeslagen wijzigingen"
+ },
+ "newFile": {
+ "validation": {
+ "nameRequired": "Naam mag niet leeg zijn",
+ "invalidName": "Ongeldige naam",
+ "invalidCharacters": "Naam bevat ongeldige tekens",
+ "nameTooLong": "Naam is te lang"
+ },
+ "placeholders": {
+ "fileName": "Bestandsnaam...",
+ "folderName": "Mapnaam..."
+ },
+ "aria": {
+ "newFileName": "Nieuwe bestandsnaam",
+ "newFolderName": "Nieuwe mapnaam"
+ }
+ },
+ "draftRecovered": "Niet-opgeslagen wijzigingen van een vorige sessie hersteld.",
+ "externalChange": {
+ "changed": "Bestand gewijzigd op schijf.",
+ "deleted": "Bestand bestaat niet meer op schijf."
+ },
+ "saveFailed": "Opslaan mislukt: {{error}}",
+ "sidebar": {
+ "explorer": "Verkenner",
+ "hide": "Zijbalk verbergen",
+ "hideWithShortcut": "Zijbalk verbergen ({{shortcut}})",
+ "show": "Zijbalk tonen",
+ "showWithShortcut": "Zijbalk tonen ({{shortcut}})"
+ },
+ "searchInFiles": {
+ "title": "Zoeken in bestanden",
+ "closeSearch": "Zoeken sluiten",
+ "closeSearchShortcut": "Zoeken sluiten (Esc)",
+ "searchPlaceholder": "Zoeken...",
+ "matchCase": "Hoofdlettergevoelig",
+ "matchCaseToggle": "Aa",
+ "noResults": "Geen resultaten gevonden",
+ "resultsSummary": "{{count}} overeenkomsten in {{fileCount}} bestanden",
+ "resultsSummary_one": "{{count}} overeenkomst in {{fileCount}} bestanden",
+ "truncated": "(ingekort)",
+ "resultsSummary_few": "{{count}} overeenkomsten in {{fileCount}} bestanden",
+ "resultsSummary_many": "{{count}} overeenkomsten in {{fileCount}} bestanden",
+ "resultsSummary_other": "{{count}} overeenkomsten in {{fileCount}} bestanden"
+ },
+ "fileTree": {
+ "failedToLoadFiles": "Kon bestanden niet laden: {{error}}",
+ "loading": "Bestanden laden...",
+ "empty": "Geen bestanden gevonden",
+ "dropForProjectRoot": "Hier neerzetten voor projectroot",
+ "moveToTrash": "Naar prullenbak verplaatsen",
+ "moveToTrashConfirm": "\"{{name}}\" naar de prullenbak verplaatsen?",
+ "cancel": "Annuleren"
+ },
+ "goToLine": {
+ "title": "Ga naar regel",
+ "position": "(huidig: {{current}}, totaal: {{total}})",
+ "placeholder": "Regelnummer, +offset, -offset of %",
+ "go": "Ga"
+ },
+ "searchPanel": {
+ "previousMatch": "Vorige overeenkomst",
+ "nextMatch": "Volgende overeenkomst",
+ "close": "Sluiten",
+ "replacePlaceholder": "Vervangen",
+ "replace": "Vervangen",
+ "replaceNext": "Volgende vervangen",
+ "all": "Alle",
+ "replaceAll": "Alles vervangen"
+ },
+ "statusBar": {
+ "position": "Rg {{line}}, Kol {{col}}",
+ "enableWatcher": "Bestandswatcher inschakelen",
+ "disableWatcher": "Bestandswatcher uitschakelen",
+ "watch": "bekijken",
+ "watching": "bekijkt",
+ "watchExternalChanges": "Externe wijzigingen bekijken",
+ "disableExternalWatcher": "Externe wijzigingenwatcher uitschakelen",
+ "encodingUtf8": "UTF-8",
+ "spaces": "Spaties: {{count}}"
+ },
+ "imagePreview": {
+ "loading": "Voorbeeld laden...",
+ "openFullSize": "Voorbeeld op volledige grootte openen",
+ "openSystemViewer": "Openen in systeemviewer"
+ },
+ "quickOpen": {
+ "title": "Snel openen",
+ "searchPlaceholder": "Bestanden zoeken op naam...",
+ "loading": "Bestanden laden...",
+ "empty": "Geen bestanden gevonden"
+ },
+ "errorBoundary": {
+ "crashed": "Editor gecrasht",
+ "unknownError": "Onbekende fout"
+ },
+ "binaryPlaceholder": {
+ "file": "Binair bestand ({{size}})"
+ },
+ "unsavedChanges": "Niet-opgeslagen wijzigingen",
+ "empty": {
+ "selectFile": "Selecteer een bestand uit de boom om te bewerken"
+ },
+ "search": {
+ "toggleReplace": "Vervangen in-/uitschakelen",
+ "placeholder": "Zoeken"
+ },
+ "shortcuts": {
+ "title": "Sneltoetsen",
+ "groups": {
+ "fileOperations": "Bestandsbewerkingen",
+ "search": "Zoeken",
+ "navigation": "Navigatie",
+ "editing": "Bewerken",
+ "markdown": "Markdown",
+ "general": "Algemeen"
+ },
+ "actions": {
+ "quickOpen": "Snel openen",
+ "save": "Opslaan",
+ "saveAll": "Alles opslaan",
+ "closeTab": "Tabblad sluiten",
+ "findInFile": "Zoeken in bestand",
+ "searchInFiles": "Zoeken in bestanden",
+ "goToLine": "Ga naar regel",
+ "nextTab": "Volgend tabblad",
+ "previousTab": "Vorig tabblad",
+ "cycleTabs": "Tabbladen doorlopen",
+ "toggleSidebar": "Zijbalk in-/uitschakelen",
+ "undo": "Ongedaan maken",
+ "redo": "Opnieuw uitvoeren",
+ "selectNextMatch": "Volgende overeenkomst selecteren",
+ "toggleComment": "Opmerking in-/uitschakelen",
+ "splitPreview": "Gesplitst voorbeeld",
+ "fullPreview": "Volledig voorbeeld",
+ "closeEditor": "Editor sluiten"
+ }
+ },
+ "toolbar": {
+ "enableWordWrap": "Tekstterugloop inschakelen",
+ "disableWordWrap": "Tekstterugloop uitschakelen",
+ "closeSplitPreview": "Gesplitst voorbeeld sluiten",
+ "closePreview": "Voorbeeld sluiten"
+ }
+ },
+ "launch": {
+ "actions": {
+ "createSchedule": "Planning aanmaken",
+ "creating": "Aanmaken...",
+ "goToDashboard": "Naar Dashboard",
+ "launchTeam": "Team starten",
+ "launching": "Starten...",
+ "relaunchTeam": "Team opnieuw starten",
+ "relaunching": "Opnieuw starten...",
+ "saveChanges": "Wijzigingen opslaan",
+ "saving": "Opslaan..."
+ },
+ "billing": {
+ "prefix": "Vanaf 15 juni 2026 factureert Anthropic",
+ "readArticle": "Lees het Anthropic-artikel",
+ "suffix": "en Agent SDK-gebruik vanuit het maandelijkse Agent SDK-tegoed, los van interactieve Claude Code-limieten. Het tegoed wordt elke factureringscyclus gereset en ongebruikt tegoed wordt niet doorgeschoven."
+ },
+ "conflict": {
+ "description": "Het uitvoeren van twee teams in dezelfde directory is riskant - ze kunnen conflicteren bij het bewerken van dezelfde bestanden. Overweeg een andere directory of een git-worktree voor isolatie te gebruiken.",
+ "title": "Een ander team \"{{team}}\" draait al voor deze werkdirectory",
+ "workingDirectory": "Werkdirectory:"
+ },
+ "description": {
+ "createSchedule": "Plan automatische uitvoering van Claude-taken",
+ "createScheduleForTeam": "Plan automatische uitvoeringen voor team \"{{team}}\"",
+ "editSchedule": "Planning bewerken voor team \"{{team}}\"",
+ "launchPrefix": "Start team",
+ "launchSuffix": "via lokale Claude CLI.",
+ "relaunchPrefix": "Stop de huidige uitvoering voor",
+ "relaunchSuffix": "en start het opnieuw via lokale Claude CLI."
+ },
+ "prepare": {
+ "action": {
+ "launch": "starten",
+ "relaunch": "opnieuw starten"
+ },
+ "blocked": "Runtime-omgeving is niet beschikbaar - {{action}} is geblokkeerd",
+ "checkingProviders": "Geselecteerde providers controleren...",
+ "failed": "Kon geselecteerde providers niet voorbereiden",
+ "preflight": "Pre-flight-controle om fouten op te vangen vóór {{action}}",
+ "preparingEnvironment": "Omgeving voorbereiden...",
+ "ready": "Alle geselecteerde providers zijn gereed.",
+ "readyWithNotes": "Alle geselecteerde providers zijn gereed, met opmerkingen.",
+ "unsupportedPreload": "De huidige preload-versie ondersteunt team:prepareProvisioning niet. Start de dev-app opnieuw.",
+ "selectWorkingDirectory": "Selecteer een werkdirectory om de startomgeving te valideren.",
+ "someProvidersNeedAttention": "Sommige geselecteerde providers hebben aandacht nodig."
+ },
+ "prompt": {
+ "label": "Prompt",
+ "oneShotPrefix": "Deze prompt wordt doorgegeven aan",
+ "oneShotSuffix": "voor eenmalige uitvoering",
+ "saved": "Opgeslagen",
+ "schedulePlaceholder": "Instructies voor Claude om volgens planning uit te voeren...",
+ "teamLeadOptional": "Prompt voor teamlead (optioneel)",
+ "teamLeadPlaceholder": "Instructies voor teamlead..."
+ },
+ "providerChanged": "Provider gewijzigd van {{from}} naar {{to}}. De vorige lead-sessie wordt niet hervat en de lead start met verse context zodat de nieuwe runtime correct wordt toegepast.",
+ "relaunchFreshSession": "Het opnieuw starten van het team start een verse lead-sessie. Duurzame teamstatus, takenbord en ledenconfiguratie worden opnieuw in de startprompt geladen.",
+ "relaunchWarning": {
+ "description": "Door deze instellingen op te slaan wordt het huidige teamproces gestopt, de bijgewerkte samenstelling bewaard en het team opnieuw gestart met de nieuwe runtime.",
+ "title": "Opnieuw starten herstart de huidige teamuitvoering"
+ },
+ "schedule": {
+ "labelOptional": "Label (optioneel)",
+ "labelPlaceholder": "bijv. Dagelijkse codereview, nachtelijke tests...",
+ "maxBudgetUsd": "Max. budget (USD)",
+ "maxTurns": "Max. beurten",
+ "noLimit": "Geen limiet",
+ "noMatches": "Geen teams komen overeen met je zoekopdracht.",
+ "noTeams": "Geen teams beschikbaar. Maak eerst een team aan.",
+ "searchTeams": "Teams zoeken...",
+ "selectTeam": "Selecteer een team...",
+ "team": "Team",
+ "title": "Planning"
+ },
+ "title": {
+ "createSchedule": "Planning aanmaken",
+ "editSchedule": "Planning bewerken",
+ "launch": "Team starten",
+ "relaunch": "Team opnieuw starten"
+ },
+ "errors": {
+ "loadProjectsFailed": "Kon projecten niet laden",
+ "saveScheduleFailed": "Kon planning niet opslaan",
+ "relaunchFailed": "Kon team niet opnieuw starten",
+ "launchFailed": "Kon team niet starten"
+ },
+ "validation": {
+ "openCodeLeadModelRequired": "OpenCode-lead vereist een geselecteerd model.",
+ "openCodeTeammateRequired": "OpenCode-lead vereist minstens één OpenCode-teamlid.",
+ "selectWorkingDirectory": "Selecteer werkdirectory (cwd)",
+ "fixMemberNames": "Herstel ledennamen vóór het starten",
+ "memberNamesUnique": "Ledennamen moeten uniek zijn vóór het starten"
+ },
+ "optionalSettings": {
+ "relaunchTitle": "Instellingen opnieuw starten",
+ "title": "Optionele startinstellingen",
+ "relaunchDescription": "Controleer de samenstelling en lead-runtime voordat je het team opnieuw start.",
+ "description": "Houd de startflow gericht op het projectpad en klap dit alleen uit wanneer je extra controle wilt."
+ }
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Team kopiëren",
+ "createTeam": "Team aanmaken",
+ "deleteForever": "Definitief verwijderen",
+ "deletePermanently": "Permanent verwijderen",
+ "deleteTeam": "Team verwijderen",
+ "launching": "Starten...",
+ "launchTeam": "Team starten",
+ "relaunchTeam": "Team opnieuw starten",
+ "restore": "Herstellen",
+ "restoreTeam": "Team herstellen",
+ "retry": "Opnieuw proberen",
+ "stopTeam": "Team stoppen",
+ "stopping": "Stoppen..."
+ },
+ "electronOnly": {
+ "description": "In browsermodus is toegang tot lokale `~/.claude/teams`-directories niet beschikbaar.",
+ "title": "Teams is alleen beschikbaar in Electron-modus"
+ },
+ "empty": {
+ "description": "Maak hier een team aan om te beginnen. Het verschijnt automatisch in de lijst.",
+ "localOnly": "Het aanmaken van teams is alleen beschikbaar in lokale Electron-modus.",
+ "title": "Geen teams gevonden"
+ },
+ "filter": {
+ "clearAll": "Alles wissen",
+ "label": "Teams filteren",
+ "projectPriority": "Projectprioriteit",
+ "status": "Status"
+ },
+ "loadFailed": "Kon teams niet laden",
+ "loading": "Teams laden...",
+ "localOnly": "Alleen beschikbaar in lokale Electron-modus.",
+ "membersCount": "Leden: {{count}}",
+ "membersCount_few": "Leden: {{count}}",
+ "membersCount_many": "Leden: {{count}}",
+ "membersCount_one": "Lid: {{count}}",
+ "membersCount_other": "Leden: {{count}}",
+ "noDescription": "Geen beschrijving",
+ "noMatches": "Geen teams komen overeen met de huidige filters",
+ "partial": {
+ "pending": "Laatste start wordt nog afgestemd.",
+ "skipped": "Bij de laatste start zijn teamleden overgeslagen.",
+ "skippedWithCount": "Laatste start sloeg {{count}}/{{expected}} teamlid over.",
+ "skippedWithCount_few": "Laatste start sloeg {{count}}/{{expected}} teamleden over.",
+ "skippedWithCount_many": "Laatste start sloeg {{count}}/{{expected}} teamleden over.",
+ "skippedWithCount_one": "Laatste start sloeg {{count}}/{{expected}} teamlid over.",
+ "skippedWithCount_other": "Laatste start sloeg {{count}}/{{expected}} teamleden over.",
+ "stopped": "Laatste start is gestopt voordat alle teamleden zich aansloten.",
+ "stoppedWithCount": "Laatste start is gestopt voordat {{count}}/{{expected}} teamlid zich aansloot.",
+ "stoppedWithCount_few": "Laatste start is gestopt voordat {{count}}/{{expected}} teamleden zich aansloten.",
+ "stoppedWithCount_many": "Laatste start is gestopt voordat {{count}}/{{expected}} teamleden zich aansloten.",
+ "stoppedWithCount_one": "Laatste start is gestopt voordat {{count}}/{{expected}} teamlid zich aansloot.",
+ "stoppedWithCount_other": "Laatste start is gestopt voordat {{count}}/{{expected}} teamleden zich aansloten."
+ },
+ "searchPlaceholder": "Teams zoeken...",
+ "sections": {
+ "otherTeams": "Andere teams",
+ "projectTeams": "Teams voor {{project}}",
+ "selectedProject": "geselecteerd project"
+ },
+ "solo": "Solo",
+ "status": {
+ "active": "Actief",
+ "deleted": "Verwijderd",
+ "launching": "Starten...",
+ "offline": "Offline",
+ "partialFailure": "Starten halverwege mislukt",
+ "partialPending": "Bootstrap in behandeling",
+ "partialSkipped": "Start sloeg lid over",
+ "running": "Actief"
+ },
+ "title": "Team selecteren",
+ "trash": "Prullenbak ({{count}})",
+ "trash_few": "Prullenbak ({{count}})",
+ "trash_many": "Prullenbak ({{count}})",
+ "trash_one": "Prullenbak ({{count}})",
+ "trash_other": "Prullenbak ({{count}})",
+ "deleteDraft": {
+ "title": "Concept verwijderen",
+ "message": "Conceptteam \"{{teamName}}\" verwijderen? Dit kan niet ongedaan worden gemaakt.",
+ "confirmLabel": "Verwijderen",
+ "cancelLabel": "Annuleren"
+ },
+ "moveToTrash": {
+ "title": "Naar prullenbak verplaatsen",
+ "message": "Team \"{{teamName}}\" naar de prullenbak verplaatsen? Je kunt het later herstellen.",
+ "confirmLabel": "Naar prullenbak verplaatsen",
+ "cancelLabel": "Annuleren"
+ },
+ "deleteForever": {
+ "title": "Permanent verwijderen",
+ "message": "Team \"{{teamName}}\" permanent verwijderen? Alle gegevens gaan verloren.",
+ "confirmLabel": "Definitief verwijderen",
+ "cancelLabel": "Annuleren"
+ }
+ },
+ "messageComposer": {
+ "crossTeam": {
+ "hint": "Tip: Berichten tussen teams gaan naar de teamlead van het doelteam. Als je wilt dat het antwoord terugkomt naar jouw teamlead in plaats van naar jou, vermeld dat dan expliciet in het bericht."
+ },
+ "attachments": {
+ "attachFiles": "Bestanden bijvoegen (plakken of slepen)",
+ "unavailable": "Bijlagen zijn niet beschikbaar",
+ "disabledHint": "Bestandsbijlagen worden ondersteund voor de online teamlead en online OpenCode-teamleden. Verwijder bijlagen of wijzig de ontvanger.",
+ "restrictions": {
+ "crossTeam": "Bestandsbijlagen worden niet ondersteund voor berichten tussen teams",
+ "teamOffline": "Team moet online zijn om bestanden bij te voegen",
+ "unsupportedRecipient": "Bestanden kunnen worden verzonden naar de teamlead of OpenCode-teamleden",
+ "openCodeOffline": "Team moet online zijn om bestanden bij te voegen voor OpenCode-teamleden",
+ "sending": "Wacht tot het huidige bericht is verzonden voordat je bestanden toevoegt",
+ "maximumReached": "Maximum aantal bijlagen bereikt",
+ "leadOnly": "Bestanden kunnen alleen naar de teamlead worden verzonden"
+ }
+ },
+ "slash": {
+ "restrictions": {
+ "attachments": "Slash-commando's vereisen een live teamlead en kunnen niet met bijlagen worden verzonden",
+ "crossTeam": "Slash-commando's kunnen alleen op de huidige teamlead worden uitgevoerd",
+ "notLead": "Slash-commando's kunnen alleen naar de teamlead worden verzonden",
+ "leadOffline": "Slash-commando's vereisen dat de teamlead online is"
+ }
+ },
+ "status": {
+ "reusedCrossTeamRequest": "Recent verzoek tussen teams hergebruikt",
+ "teamOffline": "Team offline"
+ },
+ "revision": {
+ "editing": "Vorig bericht bewerken",
+ "cancel": "Annuleren",
+ "tooltip": "Vraag de agent om het vorige bericht te negeren en het terug te zetten in de composer."
+ },
+ "input": {
+ "charsLeft": "{{count}} tekens over",
+ "charsLeft_one": "{{count}} teken over",
+ "charsLeft_other": "{{count}} tekens over",
+ "teamLaunchingPlaceholder": "Team is aan het starten... bericht wordt in de wachtrij geplaatst voor inboxbezorging.",
+ "crossTeamPlaceholder": "Bericht tussen teams naar {{team}}...",
+ "teamFallback": "team",
+ "placeholder": "Schrijf een bericht... (Enter om te verzenden, Shift+Enter voor nieuwe regel)",
+ "slashTip": "Tip: Je kunt \"/\" gebruiken om Claude-commando's uit te voeren.",
+ "charsLeft_few": "{{count}} tekens over",
+ "charsLeft_many": "{{count}} tekens over"
+ },
+ "teamSelector": {
+ "thisTeam": "Dit team",
+ "current": "huidig",
+ "online": "online",
+ "offline": "offline",
+ "onlineTitle": "Online",
+ "offlineTitle": "Offline"
+ },
+ "recipient": {
+ "select": "Selecteren...",
+ "searchPlaceholder": "Zoeken...",
+ "noResults": "Geen resultaten"
+ },
+ "actions": {
+ "voiceToText": "Spraak naar tekst",
+ "send": "Verzenden",
+ "sendingUnavailableLaunching": "Verzenden niet beschikbaar terwijl het team aan het starten is"
+ }
+ },
+ "claudeLogs": {
+ "filter": {
+ "ariaLabel": "Logboeken filteren",
+ "tooltip": "Logboeken filteren",
+ "sections": {
+ "stream": "Stream",
+ "content": "Inhoud"
+ },
+ "kinds": {
+ "output": "Uitvoer",
+ "thinking": "Denken",
+ "tool": "Toolaanroepen"
+ },
+ "actions": {
+ "reset": "Resetten",
+ "save": "Opslaan"
+ },
+ "streams": {
+ "stdout": "stdout",
+ "stderr": "stderr"
+ }
+ },
+ "rawLineCount": "{{formattedCount}} ruwe regels",
+ "rawLineCount_one": "{{formattedCount}} ruwe regel",
+ "rawLinesCaptured": "{{count}} vastgelegd",
+ "emptyRawLogs": "{{count}}; geen daarvan is nog assistent-/tooluitvoer.",
+ "noLogsYet": "Nog geen logboeken.",
+ "teamNotRunning": "Team draait niet.",
+ "searchPlaceholder": "Logboeken zoeken...",
+ "clearSearch": "Zoekopdracht wissen",
+ "newCount": "+{{count}} nieuw",
+ "loading": "Laden...",
+ "showMore": "Meer tonen",
+ "noLogsCaptured": "Geen logboeken vastgelegd.",
+ "noMatchingLogs": "Geen overeenkomende logboeken.",
+ "rawLineCount_few": "{{formattedCount}} ruwe regels",
+ "rawLineCount_many": "{{formattedCount}} ruwe regels",
+ "rawLineCount_other": "{{formattedCount}} ruwe regels",
+ "openFullscreen": "Logboeken op volledig scherm openen",
+ "fullscreen": "Volledig scherm",
+ "viewingFullscreen": "Bekijken in volledig-schermmodus",
+ "logsTitle": "Logboeken",
+ "sourceSelect": {
+ "placeholder": "Logboekbron selecteren...",
+ "searchPlaceholder": "Logboekbronnen zoeken...",
+ "emptyMessage": "Geen logboekbronnen gevonden.",
+ "ariaLabel": "Logboekbron",
+ "leadLabel": "Lead",
+ "selectSourceEmpty": "Selecteer een logboekbron.",
+ "leadDescription": "Teamlead",
+ "removedLabel": "verwijderd",
+ "removedDescription": "Verwijderd"
+ }
+ },
+ "agentGraph": {
+ "popover": {
+ "externalTeam": "Extern team",
+ "process": {
+ "startedBy": "Gestart door:",
+ "at": "Op:",
+ "openUrl": "URL openen"
+ },
+ "overflow": {
+ "hiddenTasks": "Verborgen taken",
+ "empty": "Geen verborgen taken beschikbaar."
+ },
+ "member": {
+ "lead": "Lead",
+ "workingOn": "werkt aan",
+ "recentTools": "Recente tools",
+ "spawn": {
+ "waitingToStart": "wacht om te starten",
+ "starting": "starten",
+ "failed": "mislukt"
+ },
+ "state": {
+ "active": "actief",
+ "idle": "inactief",
+ "offline": "offline",
+ "runningTool": "tool wordt uitgevoerd"
+ },
+ "activeTool": {
+ "running": "Tool wordt uitgevoerd",
+ "failed": "Tool mislukt",
+ "finished": "Tool voltooid"
+ },
+ "actions": {
+ "message": "Bericht",
+ "profile": "Profiel",
+ "task": "Taak"
+ }
+ }
+ },
+ "logPreview": {
+ "logs": "Logboeken",
+ "loading": "Logboeken laden",
+ "more": "+{{count}} meer",
+ "more_one": "+{{count}} meer",
+ "more_other": "+{{count}} meer",
+ "more_few": "+{{count}} meer",
+ "more_many": "+{{count}} meer",
+ "unsupportedProvider": "Niet-ondersteunde provider",
+ "openCodeLogsDelayed": "OpenCode-logboeken vertraagd",
+ "logsUnavailable": "Logboeken niet beschikbaar",
+ "noRecentLogs": "Geen recente logboeken",
+ "toolError": "Toolfout",
+ "toolResult": "Toolresultaat",
+ "toolUse": "Toolgebruik",
+ "thinking": "Denken",
+ "error": "Fout",
+ "logEvent": "Logboekgebeurtenis",
+ "noErrorOutput": "Geen foutuitvoer",
+ "noOutput": "Geen uitvoer",
+ "noInput": "Geen invoer"
+ },
+ "blockingEdge": {
+ "title": "Blokkerende afhankelijkheid",
+ "blocks": "blokkeert",
+ "close": "Sluiten",
+ "blockingHiddenTasks": "Blokkerende verborgen taken",
+ "blockedHiddenTasks": "Geblokkeerde verborgen taken",
+ "links_one": "{{count}} link",
+ "links_other": "{{count}} links",
+ "hiddenBlockingLinks_one": "{{count}} verborgen blokkerende link",
+ "hiddenBlockingLinks_other": "{{count}} verborgen blokkerende links",
+ "hiddenTaskStack": "Verborgen taakstack",
+ "hiddenTasks_one": "{{count}} verborgen taak",
+ "hiddenTasks_other": "{{count}} verborgen taken",
+ "task": "Taak",
+ "openBlockerStack": "Blokkeerderstack openen",
+ "openBlockedStack": "Geblokkeerde stack openen",
+ "openBlockerTask": "Blokkeertaak openen",
+ "openBlockedTask": "Geblokkeerde taak openen"
+ },
+ "activityHud": {
+ "activity": "Activiteit",
+ "noRecentActivity": "Geen recente activiteit",
+ "more": "+{{count}} meer",
+ "more_one": "+{{count}} meer",
+ "more_other": "+{{count}} meer",
+ "more_few": "+{{count}} meer",
+ "more_many": "+{{count}} meer"
+ },
+ "provisioning": {
+ "launchDetails": "Startdetails",
+ "launchDetailsDescription": "Gedetailleerde voortgang van de teamstart, live uitvoer en CLI-logboeken."
+ }
+ },
+ "projectPath": {
+ "label": "Project",
+ "source": {
+ "claude": "Gevonden door Claude",
+ "codex": "Gevonden door Codex",
+ "mixed": "Gevonden door Claude en Codex"
+ },
+ "deleted": {
+ "title": "Projectmap bestaat niet meer",
+ "label": "Verwijderd"
+ },
+ "mode": {
+ "projectList": "Uit projectlijst",
+ "customPath": "Aangepast pad"
+ },
+ "loadingProjects": "Projecten laden...",
+ "selectProject": "Selecteer een project...",
+ "searchPlaceholder": "Project zoeken op naam of pad",
+ "empty": "Niets gevonden",
+ "selectFromList": "Selecteer een project uit de lijst",
+ "noProjects": "Geen projecten gevonden, schakel over naar aangepast pad.",
+ "customWorkingDirectory": "Aangepaste werkdirectory",
+ "browse": "Bladeren",
+ "createAutomatically": "Als de directory niet bestaat, wordt deze automatisch aangemaakt."
+ },
+ "members": {
+ "badges": {
+ "worktree": "worktree"
+ },
+ "runtimeTelemetry": {
+ "title": "Lokale runtimebelasting",
+ "description": "Alleen ouder- en kindprocessen. Externe LLM-inferentie is niet inbegrepen.",
+ "cpu": "CPU",
+ "memory": "Geheugen",
+ "summedRss": "opgetelde RSS",
+ "sharedHost": "Gedeelde OpenCode-hostmetriek. Deze is niet exclusief voor dit lid.",
+ "processTreeCapped": "De procesboom is voor dit sample begrensd.",
+ "rssHint": "RSS kan gedeelde pagina's bevatten, dus het is het beste te lezen als een belastingssignaal, niet als exclusief geheugen."
+ },
+ "editor": {
+ "title": "Leden",
+ "addMember": "Lid toevoegen",
+ "editAsJson": "Bewerken als JSON",
+ "runInSeparateWorktrees": "Teamleden in aparte worktrees uitvoeren",
+ "agentTeamsMcpOnly": "Alleen Agent Teams MCP",
+ "removedCount": "Verwijderd ({{count}})",
+ "removedModelLockReason": "Verwijderde leden worden bewaard voor de soft-delete-geschiedenis. Herstel ze om instellingen te bewerken.",
+ "memberNamesUnique": "Ledennamen moeten uniek zijn"
+ },
+ "stats": {
+ "computing": "Statistieken berekenen...",
+ "empty": "Geen statistieken beschikbaar",
+ "lines": "Regels",
+ "linesInfo": "Bij benadering. Nauwkeurig voor de tools Edit en Write. Bash-bestandsschrijfacties worden geschat op basis van commandopatronen (heredoc, echo, sed) en kunnen onderschat zijn.",
+ "files": "Bestanden",
+ "toolCalls": "Toolaanroepen",
+ "tokens": "Tokens",
+ "toolUsage": "Toolgebruik",
+ "filesTouched": "Aangeraakte bestanden ({{count}})",
+ "viewAllChanges": "Alle wijzigingen bekijken",
+ "showLess": "Minder tonen",
+ "moreFiles": "+{{count}} meer",
+ "footer": "{{count}} sessies · berekend {{computedAgo}}",
+ "footer_one": "{{count}} sessie · berekend {{computedAgo}}",
+ "footer_few": "{{count}} sessies · berekend {{computedAgo}}",
+ "footer_many": "{{count}} sessies · berekend {{computedAgo}}",
+ "footer_other": "{{count}} sessies · berekend {{computedAgo}}"
+ },
+ "logs": {
+ "searching": "Logboeken doorzoeken...",
+ "empty": "Geen logboeken gevonden",
+ "waitingForTaskActivity": "Taak is bezig - wachten op sessieactiviteit (automatisch vernieuwen)...",
+ "noTaskActivity": "Nog geen sessieactiviteit voor deze taak",
+ "noMemberActivity": "Dit lid heeft nog geen geregistreerde sessieactiviteit",
+ "leadSessionTooltip": "Volledige teamlead-sessielogboeken - nuttig voor globale orkestratiecontext, niet specifiek voor deze agent",
+ "memberSessionTooltip": "Volledige permanente teamlid-sessielogboeken - nuttig wanneer werk wordt uitgevoerd in een root-ledensessie in plaats van een subagent-bestand",
+ "startedAt": "gestart {{time}}",
+ "active": "actief",
+ "showDetails": "Details tonen",
+ "hideDetails": "Details verbergen",
+ "loadingDetails": "Details laden...",
+ "failedToLoadDetails": "Kon details niet laden"
+ },
+ "detail": {
+ "relaunchOpenCode": "OpenCode opnieuw starten",
+ "restart": "Opnieuw starten",
+ "legacyLogsFallback": "Legacy-logboekfallback",
+ "copyDiagnostics": "Diagnostiek kopiëren",
+ "pid": "PID {{pid}}",
+ "removedAt": "Verwijderd {{date}}",
+ "failedToRestartMember": "Kon lid niet opnieuw starten",
+ "sendMessage": "Bericht verzenden",
+ "assignTask": "Taak toewijzen",
+ "remove": "Verwijderen"
+ },
+ "list": {
+ "loading": "Teamleden laden",
+ "unavailable": "Ledenoverzicht niet beschikbaar",
+ "unavailableDescription": "{{count}} teamleden zijn bekend uit de teammetadata, maar samenstellingsdetails ontbreken.",
+ "unavailableDescription_one": "{{count}} teamlid is bekend uit de teammetadata, maar samenstellingsdetails ontbreken.",
+ "soloLeadOnly": "Soloteam - alleen lead",
+ "removedCount": "Verwijderd ({{count}})",
+ "unavailableDescription_few": "{{count}} teamleden zijn bekend uit de teammetadata, maar samenstellingsdetails ontbreken.",
+ "unavailableDescription_many": "{{count}} teamleden zijn bekend uit de teammetadata, maar samenstellingsdetails ontbreken.",
+ "unavailableDescription_other": "{{count}} teamleden zijn bekend uit de teammetadata, maar samenstellingsdetails ontbreken."
+ },
+ "executionLog": {
+ "empty": "Niets om weer te geven",
+ "emptyUserMessage": "{{time}} - (leeg)",
+ "agentInstructions": "Agentinstructies",
+ "memberTurn": "Beurt van {{member}}",
+ "agentTurn": "Agentbeurt",
+ "turn": "beurt"
+ },
+ "recentMessages": {
+ "latest": "Nieuwste berichten",
+ "latestForMember": "Nieuwste berichten - {{member}}",
+ "loadMore": "Meer laden",
+ "expand": "Uitklappen",
+ "collapse": "Inklappen"
+ },
+ "leadModel": {
+ "defaultModel": "Standaard",
+ "providerModelAria": "{{provider}}-provider, {{model}}",
+ "leadShort": "lead",
+ "teamLead": "Teamlead",
+ "syncWithTeammates": "Model synchroniseren met teamleden",
+ "anthropicTeamWide": "Anthropic teambreed",
+ "runtimeInheritance": "De lead-runtime geldt voor teamleden tenzij ze hun eigen provider of model instellen.",
+ "anthropicContextLimit": "De 200K-contextlimiet is teambreed voor Anthropic-runtimes in deze start, inclusief aangepaste Anthropic-teamleden."
+ },
+ "runtimeLogs": {
+ "autoRefresh": "Automatisch vernieuwen",
+ "wrapLines": "Regels afbreken",
+ "loadingTail": "Einde van proceslogboek laden...",
+ "empty": "Nog geen proceslogboekbestand vastgelegd voor dit lid.",
+ "copy": "Kopiëren",
+ "fileEmpty": "Proceslogboekbestand is leeg.",
+ "showingLast": "Laatste {{bytes}} getoond.",
+ "showing": "{{bytes}} getoond."
+ },
+ "tasks": {
+ "empty": "Geen taken toegewezen aan dit lid"
+ },
+ "messages": {
+ "loadOlder": "Oudere berichten laden",
+ "filters": {
+ "all": "Alle",
+ "messages": "Berichten",
+ "comments": "Opmerkingen"
+ },
+ "empty": {
+ "loading": "Activiteit laden...",
+ "noComments": "Geen opmerkingen voor dit lid",
+ "noLoadedMessages": "Nog geen geladen berichten voor dit lid",
+ "noMessages": "Geen berichten met dit lid",
+ "noLoadedActivity": "Nog geen geladen activiteit voor dit lid",
+ "noActivity": "Geen activiteit met dit lid"
+ }
+ },
+ "actions": {
+ "openProfile": "Profiel openen",
+ "editRole": "Rol bewerken",
+ "sendMessage": "Bericht verzenden",
+ "assignTask": "Taak toewijzen"
+ },
+ "roleSelect": {
+ "customRolePlaceholder": "Voer aangepaste rol in..."
+ }
+ },
+ "schedule": {
+ "count": "{{count}} planningen",
+ "count_one": "{{count}} planning",
+ "count_other": "{{count}} planningen",
+ "nextRun": "Volgende: {{next}}",
+ "actions": {
+ "runNow": "Nu uitvoeren",
+ "edit": "Bewerken",
+ "pause": "Pauzeren",
+ "resume": "Hervatten",
+ "delete": "Verwijderen",
+ "addSchedule": "Planning toevoegen"
+ },
+ "runHistory": {
+ "loading": "Uitvoeringsgeschiedenis laden...",
+ "empty": "Nog geen uitvoeringen"
+ },
+ "count_few": "{{count}} planningen",
+ "count_many": "{{count}} planningen",
+ "runLog": {
+ "title": "Uitvoeringslogboek",
+ "exitCode": "afsluiten {{code}}",
+ "retryCount": "poging {{count}}/{{max}}",
+ "stillRunning": "Taak loopt nog...",
+ "loadingLogs": "Logboeken laden...",
+ "errors": "Fouten",
+ "close": "Sluiten"
+ },
+ "cron": {
+ "expression": "Cron-expressie",
+ "highFrequencyWarning": "Hoogfrequente planning (interval korter dan 5 min)",
+ "nextRuns": "Volgende uitvoeringen:",
+ "timezone": "Tijdzone",
+ "selectTimezone": "Tijdzone selecteren",
+ "warmUpTime": "Opwarmtijd",
+ "warmUpDescription": "Bereidt geselecteerde providers voor vóór de geplande uitvoering",
+ "errors": {
+ "enterExpression": "Voer een cron-expressie in",
+ "invalidExpression": "Ongeldige cron-expressie"
+ },
+ "presets": {
+ "everyHour": "Elk uur",
+ "everySixHours": "Elke 6 uur",
+ "dailyAtNine": "Dagelijks om 9:00",
+ "weekdaysAtNine": "Op werkdagen om 9:00",
+ "mondayAtNine": "Maandag om 9:00",
+ "everyThirtyMinutes": "Elke 30 min"
+ },
+ "warmUpOptions": {
+ "none": "Geen opwarming",
+ "fiveMinutes": "5 min",
+ "tenMinutes": "10 min",
+ "fifteenMinutes": "15 min",
+ "thirtyMinutes": "30 min"
+ }
+ },
+ "empty": {
+ "title": "Nog geen planningen",
+ "description": "Maak een planning aan om Claude-taken automatisch op een cron-schema uit te voeren."
+ },
+ "title": "Planningen",
+ "status": {
+ "active": "Actief",
+ "paused": "Gepauzeerd",
+ "disabled": "Uitgeschakeld"
+ },
+ "runStatus": {
+ "pending": "In behandeling",
+ "warmingUp": "Opwarmen",
+ "warm": "Warm",
+ "running": "Actief",
+ "completed": "Voltooid",
+ "failed": "Mislukt",
+ "interrupted": "Onderbroken",
+ "cancelled": "Geannuleerd"
+ }
+ },
+ "openCodeContextConfigHint": {
+ "summary": "OpenCode-lokale modellen kunnen een OpenCode-contextbudget gebruiken in plaats van alleen-prompt-limieten.",
+ "description": "Voeg overeenkomende limieten toe aan de OpenCode-config voor de provider en het model die door dit teamlid worden gebruikt. Dit helpt OpenCode te compacteren en te snoeien voordat lokale modellen hun contextvenster overschrijden.",
+ "replacePrefix": "Vervang",
+ "and": "en",
+ "replaceSuffix": "door de provider- en model-ID's uit je OpenCode-configuratie. Promptinstructies zoals",
+ "promptInstructionsSuffix": "zijn zwakker omdat het verzoek wordt samengesteld voordat het model ze leest.",
+ "providerLimits": "Providerlimieten",
+ "compactionConfig": "Compactatieconfiguratie"
+ },
+ "sessions": {
+ "noProjectPath": "Geen projectpad gekoppeld",
+ "provisioningHint": "Sessies verschijnen na de teamprovisioning",
+ "projectNotFound": "Project niet gevonden",
+ "loading": "Sessies laden...",
+ "empty": "Geen sessies gevonden",
+ "showAllSessions": "Voor alle sessies tonen",
+ "lead": "lead",
+ "removeFilter": "Filter verwijderen",
+ "filterBySession": "Filteren op deze sessie",
+ "openSession": "Sessie openen",
+ "title": "Sessies"
+ },
+ "provisioning": {
+ "pid": "PID {{pid}}",
+ "cancel": "Annuleren",
+ "moreWarningsHidden": "{{count}} meer waarschuwingen verborgen",
+ "diagnostics": "Diagnostiek",
+ "liveOutput": "Live uitvoer",
+ "diagnosticsCopied": "Diagnostiek gekopieerd",
+ "copyDiagnostics": "Diagnostiek kopiëren",
+ "copied": "Gekopieerd",
+ "noOutput": "Nog geen uitvoer vastgelegd.",
+ "cliLogs": "CLI-logboeken",
+ "steps": {
+ "starting": "Starten",
+ "configuring": "Teamconfiguratie",
+ "assembling": "Leden sluiten zich aan",
+ "finalizing": "Afronden"
+ },
+ "providerStatus": {
+ "status": {
+ "checking": "controleren...",
+ "ready": "OK",
+ "notes": "OK (opmerkingen)",
+ "failed": "FOUT",
+ "pending": "wachten"
+ },
+ "detailSummary": {
+ "cliBinaryMissing": "CLI-binary ontbreekt",
+ "openCodeRuntimeMissing": "OpenCode-runtime ontbreekt",
+ "openCodeWindowsAccessBlocked": "OpenCode Windows-toegang geblokkeerd",
+ "openCodeNoOutput": "OpenCode-runtimecontrole gaf geen uitvoer",
+ "openCodeMcpUnreachable": "OpenCode-app-MCP onbereikbaar",
+ "workingDirectoryMissing": "Werkdirectory ontbreekt",
+ "cliBinaryCouldNotStart": "CLI-binary kon niet worden gestart",
+ "cliPreflightIncomplete": "CLI-preflight is niet voltooid",
+ "authenticationRequired": "Authenticatie vereist",
+ "runtimeProviderNotConfigured": "Runtime-provider is niet geconfigureerd",
+ "cliPreflightFailed": "CLI-preflight mislukt",
+ "selectedModelCompatible": "Geselecteerd model compatibel",
+ "selectedModelCompatibilityPending": "Compatibiliteit van geselecteerd model in behandeling",
+ "selectedModelAvailable": "Geselecteerd model beschikbaar",
+ "selectedModelVerified": "Geselecteerd model geverifieerd",
+ "selectedModelUnavailable": "Geselecteerd model niet beschikbaar",
+ "selectedModelTimedOut": "Verificatie van geselecteerd model verlopen",
+ "selectedModelCheckFailed": "Controle van geselecteerd model mislukt",
+ "selectedModelDeferred": "Verificatie van geselecteerd model uitgesteld",
+ "selectedModelPingNotConfirmed": "Ping van geselecteerd model niet bevestigd",
+ "readyWithNotes": "Gereed met opmerkingen",
+ "needsAttention": "Aandacht nodig"
+ },
+ "modelChecksSummary": "Controles geselecteerd model - {{details}}",
+ "modelParts": {
+ "unavailable": "{{count}} model niet beschikbaar",
+ "unavailable_one": "{{count}} model niet beschikbaar",
+ "unavailable_other": "{{count}} modellen niet beschikbaar",
+ "checkFailed": "{{count}} modelcontrole mislukt",
+ "checkFailed_one": "{{count}} modelcontrole mislukt",
+ "checkFailed_other": "{{count}} modelcontroles mislukt",
+ "timedOut": "{{count}} model verlopen",
+ "timedOut_one": "{{count}} model verlopen",
+ "timedOut_other": "{{count}} modellen verlopen",
+ "deferred": "{{count}} verificatie uitgesteld",
+ "deferred_one": "{{count}} verificatie uitgesteld",
+ "deferred_other": "{{count}} verificaties uitgesteld",
+ "pingNotConfirmed": "{{count}} ping niet bevestigd",
+ "pingNotConfirmed_one": "{{count}} ping niet bevestigd",
+ "pingNotConfirmed_other": "{{count}} pings niet bevestigd",
+ "compatibilityPending": "{{count}} compatibel, diepe verificatie in behandeling",
+ "compatibilityPending_one": "{{count}} compatibel, diepe verificatie in behandeling",
+ "compatibilityPending_other": "{{count}} compatibel, diepe verificatie in behandeling",
+ "compatible": "{{count}} compatibel",
+ "compatible_one": "{{count}} compatibel",
+ "compatible_other": "{{count}} compatibel",
+ "checking": "{{count}} controleren",
+ "checking_one": "{{count}} controleren",
+ "checking_other": "{{count}} controleren",
+ "available": "{{count}} beschikbaar",
+ "available_one": "{{count}} beschikbaar",
+ "available_other": "{{count}} beschikbaar",
+ "verified": "{{count}} geverifieerd",
+ "verified_one": "{{count}} geverifieerd",
+ "verified_other": "{{count}} geverifieerd",
+ "unavailable_few": "{{count}} modellen niet beschikbaar",
+ "unavailable_many": "{{count}} modellen niet beschikbaar",
+ "checkFailed_few": "{{count}} modelcontroles mislukt",
+ "checkFailed_many": "{{count}} modelcontroles mislukt",
+ "timedOut_few": "{{count}} modellen verlopen",
+ "timedOut_many": "{{count}} modellen verlopen",
+ "deferred_few": "{{count}} verificaties uitgesteld",
+ "deferred_many": "{{count}} verificaties uitgesteld",
+ "pingNotConfirmed_few": "{{count}} pings niet bevestigd",
+ "pingNotConfirmed_many": "{{count}} pings niet bevestigd",
+ "compatibilityPending_few": "{{count}} compatibel, diepe verificatie in behandeling",
+ "compatibilityPending_many": "{{count}} compatibel, diepe verificatie in behandeling",
+ "compatible_few": "{{count}} compatibel",
+ "compatible_many": "{{count}} compatibel",
+ "checking_few": "{{count}} controleren",
+ "checking_many": "{{count}} controleren",
+ "available_few": "{{count}} beschikbaar",
+ "available_many": "{{count}} beschikbaar",
+ "verified_few": "{{count}} geverifieerd",
+ "verified_many": "{{count}} geverifieerd"
+ },
+ "openProviderSettings": "{{provider}}-instellingen openen",
+ "copied": "Gekopieerd",
+ "copyDiagnostics": "Diagnostiek kopiëren",
+ "deepVerificationPending": "Diepe verificatie loopt nog. Gratis OpenCode-modellen kunnen ongeveer 20 seconden duren.",
+ "progress": {
+ "checkingSelectedProviders": "Geselecteerde providers parallel controleren...",
+ "checkingProvider": "{{provider}}-provider controleren...",
+ "checkingProviders": "{{providers}}-providers controleren..."
+ },
+ "failureHints": {
+ "openCodeAccessDenied": "Herstel de mapmachtigingen of verplaats het project naar een door de gebruiker beschrijfbare map. Als administrator uitvoeren is slechts een tijdelijke oplossing.",
+ "openCodeBridgeNoOutput": "Start de app en de OpenCode-runtime opnieuw en probeer het opnieuw. Als het zich herhaalt, kopieer dan de diagnostiek.",
+ "workingDirectoryMissing": "Kies een bestaande werkdirectory en open dit dialoogvenster opnieuw.",
+ "authenticationRequired": "Authenticeer de vereiste provider in Claude CLI en open dit dialoogvenster opnieuw.",
+ "runtimeProviderNotConfigured": "Configureer de geselecteerde provider-runtime en open dit dialoogvenster opnieuw.",
+ "openCodeRuntimeMissing": "Installeer of probeer de OpenCode-runtime opnieuw vanuit de providerstatuskaart en open dit dialoogvenster opnieuw.",
+ "openCodeAppMcpUnreachable": "Probeer de start opnieuw om de OpenCode-app-MCP-bridge te vernieuwen. Als het zich herhaalt, start dan de app en de OpenCode-runtime opnieuw.",
+ "cliBinaryMissing": "Zorg ervoor dat de lokale Claude CLI-binary bestaat en kan worden gestart, en open dit dialoogvenster opnieuw.",
+ "default": "Los het bovenstaande probleem op en open dit dialoogvenster opnieuw.",
+ "openCodeNodeModulesSymlinkPermission": "Voer Agent Teams AI uit als administrator en probeer de start opnieuw."
+ }
+ },
+ "presentation": {
+ "awaitingPermission": "{{count}} teamlid wacht op machtigingsgoedkeuring",
+ "nameListWithMore": "{{names}}, +{{count}} meer",
+ "waitingForOpenCode": "Wachten op OpenCode: {{names}}",
+ "bootstrapStalled": "Bootstrap vastgelopen: {{names}}",
+ "bootstrapStalledWithOpenCodeWait": "{{stalled}}; Wachten op OpenCode: {{names}}",
+ "namedPendingDiagnostic": "{{label}}: {{names}}",
+ "countPendingDiagnostic": "{{count}} {{label}}",
+ "pendingLabels": {
+ "bootstrapStalled": "Bootstrap vastgelopen",
+ "shellOnly": "Alleen-shell",
+ "waitingForBootstrap": "Wachten op bootstrap",
+ "bootstrapUnconfirmed": "Bootstrap onbevestigd",
+ "awaitingPermission": "Wachten op machtiging",
+ "waitingForRuntime": "Wachten op runtime",
+ "shellOnlyLower": "alleen-shell",
+ "waitingForBootstrapLower": "wachten op bootstrap",
+ "bootstrapUnconfirmedLower": "bootstrap onbevestigd",
+ "awaitingPermissionLower": "wachten op machtiging",
+ "waitingForRuntimeLower": "wachten op runtime"
+ },
+ "failed": {
+ "memberFailedToStart": "{{name}} kon niet starten",
+ "teammatesFailedToStart": "{{count}} teamleden konden niet starten",
+ "teammatesFailedRatio": "{{count}}/{{total}} teamleden konden niet starten"
+ },
+ "skipped": {
+ "memberSkipped": "{{name}} overgeslagen voor deze start",
+ "memberSkippedWithReason": "{{name}} overgeslagen voor deze start - {{reason}}",
+ "memberSkippedCompact": "{{name}} overgeslagen",
+ "teammatesSkipped": "{{count}} teamleden overgeslagen",
+ "teammatesSkippedList": "Overgeslagen teamleden: {{list}}",
+ "teammatesSkippedRatio": "{{count}}/{{total}} teamleden overgeslagen voor deze start"
+ },
+ "joining": {
+ "teammatesStillJoining": "{{count}} teamleden sluiten zich nog aan",
+ "teammatesStillJoining_one": "{{count}} teamlid sluit zich nog aan",
+ "teammatesStillJoining_few": "{{count}} teamleden sluiten zich nog aan",
+ "teammatesStillJoining_many": "{{count}} teamleden sluiten zich nog aan",
+ "teammatesStillJoining_other": "{{count}} teamleden sluiten zich nog aan",
+ "teammatesConfirmedRatio": "{{count}}/{{total}} teamleden bevestigd"
+ },
+ "ready": {
+ "leadOnline": "Lead online",
+ "allTeammatesJoined": "Alle {{count}} teamleden aangesloten",
+ "teamProvisionedLeadOnline": "Team geprovisioneerd - lead online",
+ "teamProvisionedAllJoined": "Team geprovisioneerd - alle {{count}} teamleden aangesloten",
+ "teamProvisionedStillJoining": "Team geprovisioneerd - teamleden sluiten zich nog aan",
+ "launchFinishedWithErrors": "Start voltooid met fouten - {{count}}/{{total}} teamleden konden niet starten",
+ "launchContinuedSkipped": "Start voortgezet - {{count}}/{{total}} teamleden overgeslagen",
+ "teamLaunchedLeadOnline": "Team gestart - lead online",
+ "teamLaunchedAllJoined": "Team gestart - alle {{count}} teamleden aangesloten"
+ },
+ "panel": {
+ "launchFailed": "Start mislukt",
+ "launchDetails": "Startdetails",
+ "launchFinishedWithErrors": "Start voltooid met fouten",
+ "launchContinuedSkipped": "Start voortgezet met overgeslagen teamleden",
+ "coreTeamReady": "Kernteam gereed",
+ "finishingLaunch": "Start afronden",
+ "teamLaunched": "Team gestart",
+ "launchingTeam": "Team starten"
+ }
+ }
+ },
+ "liveRuntimeStatus": {
+ "title": "Live runtimestatus",
+ "description": "Alleen-weergave heartbeat en startstatus. Procesbedieningen blijven hieronder.",
+ "source": "bron: {{source}}",
+ "lane": "{{lane}}-lane",
+ "diagnosticOnly": "Alleen diagnostisch",
+ "updated": "bijgewerkt {{value}}",
+ "states": {
+ "running": "Actief",
+ "starting": "Starten",
+ "waiting": "Wachten",
+ "degraded": "Aandacht nodig",
+ "stopped": "Gestopt",
+ "unknown": "Onbekend"
+ }
+ },
+ "taskLogs": {
+ "exact": {
+ "title": "Exacte taaklogboeken",
+ "loading": "Exacte taaklogboeken laden...",
+ "description": "Exacte transcriptfragmenten gerenderd met dezelfde uitvoeringslogboekcomponenten die in Logboeken worden gebruikt.",
+ "emptyTitle": "Nog geen exacte taaklogboeken",
+ "emptyDescription": "Exacte transcriptbundels verschijnen hier wanneer expliciete taakgekoppelde transcriptmetadata beschikbaar is.",
+ "summaryOnly": "alleen samenvatting"
+ },
+ "executionSessions": {
+ "title": "Uitvoeringssessies",
+ "online": "Online",
+ "updating": "Bijwerken...",
+ "description": "Legacy sessiegericht transcriptbladeren en voorbeelden."
+ },
+ "stream": {
+ "title": "Taaklogboekstream"
+ }
+ },
+ "kanban": {
+ "taskCard": {
+ "cancelTask": "Taak {{taskId}} annuleren",
+ "cancel": "Annuleren",
+ "moveBackToTodoConfirm": "Deze taak terugzetten naar TE DOEN en het team op de hoogte stellen?",
+ "confirm": "Bevestigen",
+ "keep": "Behouden",
+ "changesNeedAttention": "Wijzigingen hebben aandacht nodig",
+ "changes": "Wijzigingen",
+ "deleteTask": "Taak verwijderen",
+ "taskLogsActive": "Taaklogboeken actief",
+ "newTaskLogsArriving": "Nieuwe taaklogboeken komen binnen",
+ "awaitingUser": "Wachten op gebruiker",
+ "awaitingLead": "Wachten op lead",
+ "blockedBy": "Geblokkeerd door",
+ "blocks": "Blokkeert",
+ "start": "Starten",
+ "complete": "Voltooien",
+ "approve": "Goedkeuren",
+ "requestReview": "Review aanvragen",
+ "manualReview": "Handmatige review",
+ "requestChanges": "Wijzigingen aanvragen"
+ },
+ "filter": {
+ "title": "Taken filteren",
+ "session": "Sessie",
+ "allSessions": "Alle sessies",
+ "teammate": "Teamlid",
+ "unassigned": "(niet toegewezen)",
+ "column": "Kolom",
+ "clearAll": "Alles wissen"
+ },
+ "board": {
+ "addTask": "Taak toevoegen",
+ "noTasks": "Geen taken",
+ "showMore": "{{count}} meer tonen",
+ "hiddenCount": "{{count}} verborgen",
+ "trash": "Prullenbak",
+ "gridView": "Rasterweergave",
+ "columnsView": "Kolomweergave"
+ },
+ "trash": {
+ "title": "Prullenbak",
+ "empty": "Geen verwijderde taken",
+ "subject": "Onderwerp",
+ "owner": "Eigenaar",
+ "deleted": "Verwijderd",
+ "unassigned": "Niet toegewezen",
+ "restoreTask": "Taak herstellen",
+ "restore": "Herstellen",
+ "close": "Sluiten"
+ },
+ "sort": {
+ "title": "Taken sorteren",
+ "sortBy": "Sorteren op",
+ "reset": "Resetten",
+ "options": {
+ "updatedAt": {
+ "label": "Laatst bijgewerkt",
+ "description": "Recent bijgewerkt eerst"
+ },
+ "createdAt": {
+ "label": "Aangemaakt",
+ "description": "Nieuwste eerst"
+ },
+ "owner": {
+ "label": "Eigenaar",
+ "description": "Alfabetisch op toegewezene"
+ },
+ "manual": {
+ "label": "Handmatig",
+ "description": "Sleepvolgorde"
+ }
+ }
+ },
+ "search": {
+ "clearSearch": "Zoekopdracht wissen",
+ "tasks": "Taken",
+ "createdAgo": "aangemaakt {{time}}",
+ "updatedAgo": "bijgewerkt {{time}}",
+ "placeholder": "Taken zoeken... (#id of tekst)"
+ },
+ "grid": {
+ "addTask": "Taak toevoegen",
+ "noTasks": "Geen taken"
+ },
+ "title": "Kanban",
+ "columns": {
+ "todo": "TE DOEN",
+ "inProgress": "BEZIG",
+ "review": "REVIEW",
+ "done": "KLAAR",
+ "approved": "GOEDGEKEURD"
+ }
+ },
+ "worktreeGitReadiness": {
+ "checking": "Git-repositorystatus controleren voor teamlid-worktrees...",
+ "ready": "Git-worktrees zijn gereed.",
+ "readyOnBranch": "Git-worktrees zijn gereed op branch {{branch}}.",
+ "needsSetup": "Worktree-isolatie vereist Git-configuratie",
+ "initialCommitNotice": "De actie voor de initiële commit staget en commit alle huidige bestanden met het bericht",
+ "initializeRepository": "Git-repository initialiseren",
+ "createInitialCommit": "Initiële commit aanmaken",
+ "initialCommitMessage": "chore: initial commit"
+ },
+ "toolApproval": {
+ "settings": "Instellingen",
+ "autoAllowAllTools": "Alle tools automatisch toestaan",
+ "autoAllowFileEdits": "Bestandsbewerkingen automatisch toestaan (Edit, Write, NotebookEdit)",
+ "autoAllowSafeCommands": "Veilige commando's automatisch toestaan (git, pnpm, npm, ls...)",
+ "onTimeout": "Bij time-out:",
+ "after": "na",
+ "secondsShort": "sec",
+ "timeoutActions": {
+ "wait": "Voor altijd wachten",
+ "allow": "Toestaan",
+ "deny": "Weigeren"
+ },
+ "submit": "Verzenden",
+ "allow": "Toestaan",
+ "deny": "Weigeren",
+ "allowAll": "Alles toestaan",
+ "pendingCount": "{{count}} in behandeling",
+ "autoActionIn": "Automatisch {{action}} over {{time}}",
+ "diff": {
+ "previewChanges": "Wijzigingen bekijken",
+ "readingFile": "Bestand lezen...",
+ "binaryFile": "Binair bestand - kan geen voorbeeld tonen",
+ "truncated": "Bestand ingekort op 2MB - diff is mogelijk onvolledig",
+ "newFile": "Nieuw bestand"
+ }
+ },
+ "memberWorkSync": {
+ "details": {
+ "title": "Werksynchronisatie lid",
+ "actionableItems": "Actiepunten",
+ "fingerprint": "Vingerafdruk",
+ "report": "Rapport",
+ "none": "geen",
+ "shadowWouldNudge": "Shadow zou aansporen",
+ "yes": "ja",
+ "no": "nee",
+ "moreActionableItems": "{{count}} extra actiepunt(en)",
+ "diagnostics": "Diagnostiek: {{diagnostics}}"
+ },
+ "title": "Werksynchronisatie lid",
+ "loadingDiagnostics": "Diagnostiek werksynchronisatie lid laden.",
+ "diagnosticsUnavailable": "Diagnostiek werksynchronisatie lid is niet beschikbaar."
+ },
+ "advancedCli": {
+ "title": "Geavanceerd",
+ "useWorktree": "Worktree gebruiken",
+ "recent": "Recent",
+ "commandPreview": "Commandovoorbeeld",
+ "customArguments": "Aangepaste argumenten",
+ "validate": "Valideren",
+ "validation": {
+ "allFlagsValid": "Alle flags geldig",
+ "unknownFlags": "Onbekend: {{flags}}",
+ "protectedFlags": "Beschermd: {{flags}}",
+ "failed": "Validatie mislukt"
+ },
+ "placeholders": {
+ "worktreeName": "worktree-name"
+ }
+ },
+ "processes": {
+ "ago": "{{time}} geleden",
+ "stoppedAgo": "gestopt {{time}} geleden",
+ "running": "Actief",
+ "stopped": "Gestopt",
+ "stopProcess": "Proces stoppen (SIGTERM)",
+ "kill": "Beëindigen",
+ "openInBrowser": "Openen in browser",
+ "open": "Openen",
+ "pid": "PID{{pid}}",
+ "title": "CLI-processen"
+ },
+ "taskActivity": {
+ "loadingDetails": "Activiteitsdetails laden...",
+ "contextUnavailable": "Gedetailleerde transcriptcontext is niet meer beschikbaar voor deze activiteit.",
+ "loading": "Taakactiviteit laden...",
+ "lowSignalOnly": "Er is nog geen belangrijke taakactiviteit gevonden. Uitvoeringsdetails op laag niveau zijn hieronder beschikbaar in de Taaklogboekstream.",
+ "empty": "Er is nog geen expliciete taakactiviteit gevonden in de beschikbare transcripties. Oudere of heuristische sessielogboeken zijn mogelijk nog beschikbaar hieronder in Uitvoeringssessies.",
+ "title": "Taakactiviteit",
+ "description": "Belangrijke expliciete runtime-activiteit die aan deze taak is gekoppeld vanuit transcriptmetadata."
+ },
+ "sendMessage": {
+ "title": "Bericht verzenden",
+ "description": "Stuur een direct bericht naar een teamlid.",
+ "recipientLabel": "Ontvanger",
+ "selectMemberPlaceholder": "Lid selecteren...",
+ "messageLabel": "Bericht",
+ "placeholder": "Schrijf je bericht... (Enter om te verzenden)",
+ "send": "Verzenden",
+ "sending": "Verzenden...",
+ "charsLeft": "{{count}} tekens over",
+ "saved": "Opgeslagen",
+ "attachments": {
+ "teamOnlineRequired": "Team moet online zijn om bestanden bij te voegen",
+ "recipientUnsupported": "Bestanden kunnen worden verzonden naar de teamlead of OpenCode-teamleden",
+ "openCodeOnlineRequired": "Team moet online zijn om bestanden bij te voegen voor OpenCode-teamleden",
+ "disabledHint": "Bestandsbijlagen worden ondersteund voor de online teamlead en online OpenCode-teamleden. Verwijder bijlagen of wijzig de ontvanger.",
+ "attachFiles": "Bestanden bijvoegen (plakken of slepen)",
+ "unavailable": "Bijlagen zijn niet beschikbaar"
+ },
+ "quote": {
+ "remove": "Citaat verwijderen",
+ "replyingTo": "Reageert op"
+ }
+ },
+ "taskComments": {
+ "cancelReply": "Reactie annuleren",
+ "replyingTo": "Reageert op",
+ "placeholder": "Voeg een opmerking toe... (Enter om te verzenden)",
+ "attachFile": "Bestand bijvoegen (of plakken)",
+ "voiceToText": "Spraak naar tekst",
+ "comment": "Opmerking",
+ "charsLeft": "{{count}} tekens over",
+ "saved": "Opgeslagen",
+ "awaitingReplyFrom": "Wachten op antwoord van",
+ "or": "of"
+ },
+ "taskAttachments": {
+ "dropImageHere": "Sleep afbeelding hierheen",
+ "attachImage": "Afbeelding bijvoegen",
+ "pasteOrDragDrop": "of plakken / slepen",
+ "fromOriginalMessage": "Uit oorspronkelijk bericht",
+ "dropFilesHere": "Sleep bestanden hierheen",
+ "loading": "Bijlagen laden..."
+ },
+ "permissions": {
+ "autoApproveAllTools": "Alle tools automatisch goedkeuren",
+ "autonomousModeDescription": "Autonome modus: teamtools worden zonder bevestiging uitgevoerd. Wees voorzichtig met niet-vertrouwde code.",
+ "manualModeDescription": "Handmatige modus: je keurt elke toolaanroep in realtime goed of weigert deze."
+ },
+ "memberLogStream": {
+ "tabs": {
+ "execution": "Uitvoering",
+ "process": "Proces"
+ },
+ "filters": {
+ "all": "Alle"
+ },
+ "logs": {
+ "title": "Logboeken",
+ "loading": "Logboekstream van lid laden...",
+ "emptyTitle": "Er zijn nog geen logboekstream-vermeldingen gevonden voor dit lid.",
+ "emptyDescription": "Ledengerichte transcript- of runtimelogboeken verschijnen hier wanneer ze beschikbaar zijn."
+ }
+ },
+ "reviewDialog": {
+ "placeholder": "Beschrijf wat er moet veranderen... (Enter om te verzenden)",
+ "submit": "Verzenden",
+ "charsLeft": "{{count}} tekens over",
+ "saved": "Opgeslagen",
+ "title": "Wijzigingen aanvragen"
+ },
+ "dialogs": {
+ "actions": {
+ "openDashboard": "Dashboard openen",
+ "openTeam": "Team openen",
+ "cancel": "Annuleren"
+ },
+ "membersJson": {
+ "hide": "JSON verbergen"
+ },
+ "optional": {
+ "badge": "Optioneel"
+ }
+ },
+ "runningTeams": {
+ "title": "Actieve teams",
+ "status": {
+ "active": "Actief",
+ "provisioning": "Starten",
+ "idle": "Actief"
+ },
+ "noProject": "Geen project"
+ },
+ "layout": {
+ "maxPanesReached": "Maximum van {{count}} panelen bereikt"
+ },
+ "codexReconnect": {
+ "description": "Je Codex-sessie lijkt verouderd. Verbind opnieuw om door te gaan.",
+ "useCode": "Code gebruiken",
+ "generating": "Genereren...",
+ "openLogin": "Inloggen openen",
+ "generateLink": "Link genereren"
+ },
+ "effortLevel": {
+ "label": "Inspanningsniveau (optioneel)",
+ "maxDescription": "Max geeft het model de meeste redeneertijd voor moeilijke taken."
+ },
+ "contextLimit": {
+ "limitTo200k": "Context beperken tot 200K tokens",
+ "always200k": "(altijd 200K voor dit model)",
+ "tooltipContent": "Houdt starts binnen een contextvenster van 200K tokens waar ondersteund.",
+ "tooltipTitle": "Contextlimiet"
+ },
+ "roleSelect": {
+ "noRole": "Geen rol",
+ "customRole": "Aangepaste rol...",
+ "searchPlaceholder": "Rollen zoeken...",
+ "empty": "Geen rollen gevonden.",
+ "reservedRole": "Deze rol is gereserveerd",
+ "emptyCustomRole": "Rol mag niet leeg zijn"
+ }
+}
diff --git a/src/features/localization/renderer/locales/pl/common.json b/src/features/localization/renderer/locales/pl/common.json
new file mode 100644
index 00000000..9d838558
--- /dev/null
+++ b/src/features/localization/renderer/locales/pl/common.json
@@ -0,0 +1,927 @@
+{
+ "actions": {
+ "cancel": "Anuluj",
+ "close": "Zamknij",
+ "copied": "Skopiowano",
+ "copyUrl": "Kopiuj URL",
+ "open": "Otwórz",
+ "reveal": "Pokaż w folderze",
+ "retry": "Ponów",
+ "save": "Zapisz",
+ "showLess": "Pokaż mniej",
+ "showMore": "Pokaż więcej",
+ "refresh": "Odśwież",
+ "reset": "Resetuj",
+ "copyToClipboard": "Kopiuj do schowka",
+ "moreActions": "Więcej akcji",
+ "closeDialog": "Zamknij okno dialogowe",
+ "goToDashboard": "Przejdź do panelu",
+ "or": "lub",
+ "hide": "Ukryj",
+ "resetSelection": "Resetuj zaznaczenie"
+ },
+ "code": {
+ "line": "linia {{line}}",
+ "lines": "linie {{from}}-{{to}}",
+ "moreLines": "(jeszcze {{count}} linii...)",
+ "moreLines_few": "(jeszcze {{count}} linie...)",
+ "moreLines_many": "(jeszcze {{count}} linii...)",
+ "moreLines_one": "(jeszcze {{count}} linia...)",
+ "moreLines_other": "(jeszcze {{count}} linii...)",
+ "code": "Kod",
+ "preview": "Podgląd",
+ "markdownPreview": "Podgląd Markdown",
+ "linesParenthesized": "(linie {{from}}-{{to}})",
+ "mermaidSyntaxError": "Błąd składni Mermaid"
+ },
+ "contextBadge": {
+ "badge": "Kontekst",
+ "breakdown": {
+ "text": "Tekst",
+ "thinking": "Myślenie"
+ },
+ "detailsAria": "Szczegóły wstrzyknięcia kontekstu",
+ "sectionSummary": "{{title}} ({{count}}) ~{{tokens}} tokenów",
+ "sections": {
+ "claudeMdFiles": "Pliki CLAUDE.md",
+ "mentionedFiles": "Wspomniane pliki",
+ "taskCoordination": "Koordynacja zadań",
+ "thinkingText": "Myślenie + tekst",
+ "toolOutputs": "Wyniki narzędzi",
+ "userMessages": "Wiadomości użytkownika"
+ },
+ "title": "Nowy kontekst wstrzyknięty w tej turze",
+ "tokenCount": "~{{tokens}} tokenów",
+ "totalNewTokens": "Łącznie nowych tokenów",
+ "turn": "Tura {{turn}}",
+ "sectionSummary_few": "{{title}} ({{count}}) ~{{tokens}} tokenów",
+ "sectionSummary_many": "{{title}} ({{count}}) ~{{tokens}} tokenów",
+ "sectionSummary_one": "{{title}} ({{count}}) ~{{tokens}} tokenów",
+ "sectionSummary_other": "{{title}} ({{count}}) ~{{tokens}} tokenów"
+ },
+ "locales": {
+ "emptyMessage": "Nie znaleziono języka.",
+ "names": {
+ "ar": "Arabski",
+ "bn": "Bengalski",
+ "de": "Niemiecki",
+ "en": "Angielski",
+ "es": "Hiszpański",
+ "fa": "Perski",
+ "fil": "Filipiński",
+ "fr": "Francuski",
+ "hi": "Hindi",
+ "id": "Indonezyjski",
+ "it": "Włoski",
+ "ja": "Japoński",
+ "ko": "Koreański",
+ "mr": "Marathi",
+ "ms": "Malajski",
+ "nl": "Niderlandzki",
+ "pl": "Polski",
+ "pt": "Portugalski",
+ "ro": "Rumuński",
+ "ru": "Rosyjski",
+ "sw": "Suahili",
+ "system": "Systemowy",
+ "ta": "Tamilski",
+ "te": "Telugu",
+ "th": "Tajski",
+ "tr": "Turecki",
+ "uk": "Ukraiński",
+ "ur": "Urdu",
+ "vi": "Wietnamski",
+ "zh": "Chiński"
+ },
+ "searchPlaceholder": "Szukaj języka...",
+ "selectPlaceholder": "Wybierz język aplikacji...",
+ "systemWithResolved": "Systemowy - {{locale}}"
+ },
+ "members": {
+ "emptyMessage": "Nie znaleziono członków.",
+ "searchPlaceholder": "Szukaj członków...",
+ "unassigned": "Nieprzypisane",
+ "teammateFallback": "członek zespołu"
+ },
+ "providerRuntime": {
+ "codex": {
+ "install": {
+ "checking": "Sprawdzanie",
+ "downloading": "Pobieranie",
+ "installCli": "Zainstaluj Codex CLI",
+ "installing": "Instalowanie",
+ "retryInstall": "Ponów instalację"
+ }
+ }
+ },
+ "search": {
+ "noMatchingSuggestions": "Brak pasujących sugestii",
+ "searching": "Wyszukiwanie...",
+ "searchingFiles": "Wyszukiwanie plików...",
+ "findInConversation": "Znajdź w konwersacji...",
+ "resultCount": "{{current}} z {{total}}",
+ "resultCountCapped": "{{current}} z {{total}}+",
+ "noResults": "Brak wyników",
+ "previousResultShortcut": "Poprzedni wynik (Shift+Enter)",
+ "nextResultShortcut": "Następny wynik (Enter)",
+ "closeShortcut": "Zamknij (Esc)",
+ "nothingFound": "Nic nie znaleziono",
+ "placeholder": "Szukaj..."
+ },
+ "schedules": {
+ "actions": {
+ "addSchedule": "Dodaj harmonogram",
+ "clearFilters": "Wyczyść filtry",
+ "createSchedule": "Utwórz harmonogram",
+ "delete": "Usuń",
+ "edit": "Edytuj",
+ "pause": "Wstrzymaj",
+ "resume": "Wznów",
+ "runNow": "Uruchom teraz"
+ },
+ "empty": {
+ "description": "Utwórz harmonogram w dowolnym zespole, aby zautomatyzować wykonywanie zadań Claude za pomocą wyrażeń cron. Harmonogramy ze wszystkich zespołów pojawią się tutaj.",
+ "noMatches": "Żaden harmonogram nie pasuje do bieżących filtrów",
+ "title": "Brak zaplanowanych zadań"
+ },
+ "filters": {
+ "allTeams": "Wszystkie zespoły"
+ },
+ "item": {
+ "loadingRunHistory": "Ładowanie historii uruchomień...",
+ "nextRun": "Następne: {{value}}",
+ "noRunsYet": "Brak uruchomień"
+ },
+ "loading": "Ładowanie harmonogramów...",
+ "searchPlaceholder": "Szukaj harmonogramów...",
+ "status": {
+ "active": "Aktywne",
+ "all": "Wszystkie",
+ "disabled": "Wyłączone",
+ "paused": "Wstrzymane"
+ },
+ "title": "Harmonogramy"
+ },
+ "sessions": {
+ "actions": {
+ "hide": "Ukryj",
+ "pin": "Przypnij",
+ "unhide": "Odkryj"
+ },
+ "empty": {
+ "noMatchingSessions": "Brak pasujących sesji",
+ "noMatchingSessionsDescription": "Ten projekt nie ma jeszcze pasujących sesji.",
+ "noMatchingSessionsFiltered": "Wypróbuj inne zapytanie lub zresetuj filtr dostawcy.",
+ "noSessions": "Nie znaleziono sesji",
+ "noSessionsDescription": "Ten projekt nie ma jeszcze sesji",
+ "selectProject": "Wybierz projekt, aby zobaczyć sesje"
+ },
+ "errors": {
+ "loading": "Błąd ładowania sesji"
+ },
+ "loadedMatchingMore": "Załadowano dotąd {{count}} pasujących sesji - przewiń w dół, aby załadować więcej.",
+ "loadingMore": "Ładowanie kolejnych sesji...",
+ "pinned": "Przypięte",
+ "scrollToLoadMore": "Przewiń, aby załadować więcej",
+ "search": {
+ "clear": "Wyczyść wyszukiwanie sesji",
+ "placeholder": "Szukaj sesji..."
+ },
+ "selection": {
+ "cancel": "Anuluj zaznaczenie",
+ "exitMode": "Wyjdź z trybu zaznaczania",
+ "hideSelected": "Ukryj zaznaczone sesje",
+ "pinSelected": "Przypnij zaznaczone sesje",
+ "selectSessions": "Zaznacz sesje",
+ "selected": "zaznaczono: {{count}}",
+ "unhideSelected": "Odkryj zaznaczone sesje",
+ "selected_few": "zaznaczono: {{count}}",
+ "selected_many": "zaznaczono: {{count}}",
+ "selected_one": "zaznaczono: {{count}}",
+ "selected_other": "zaznaczono: {{count}}"
+ },
+ "sort": {
+ "byContext": "Wg kontekstu",
+ "byContextTooltip": "Sortuj wg zużycia kontekstu",
+ "byRecentTooltip": "Sortuj wg najnowszych",
+ "contextLoadedOnly": "Sortowanie wg kontekstu obejmuje tylko załadowane sesje."
+ },
+ "title": "Sesje",
+ "visibility": {
+ "hideHidden": "Ukryj ukryte sesje",
+ "showHidden": "Pokaż ukryte sesje"
+ },
+ "worktree": {
+ "switch": "Przełącz worktree"
+ },
+ "loadedMatchingMore_few": "Załadowano dotąd {{count}} pasujących sesji - przewiń w dół, aby załadować więcej.",
+ "loadedMatchingMore_many": "Załadowano dotąd {{count}} pasujących sesji - przewiń w dół, aby załadować więcej.",
+ "loadedMatchingMore_one": "Załadowano dotąd {{count}} pasujących sesji - przewiń w dół, aby załadować więcej.",
+ "loadedMatchingMore_other": "Załadowano dotąd {{count}} pasujących sesji - przewiń w dół, aby załadować więcej.",
+ "failedToLoad": "Nie udało się załadować sesji",
+ "loading": "Ładowanie sesji...",
+ "filter": {
+ "title": "Filtruj sesje"
+ },
+ "count": "{{count}} sesji",
+ "count_one": "{{count}} sesja",
+ "count_other": "{{count}} sesji",
+ "count_few": "{{count}} sesje",
+ "count_many": "{{count}} sesji",
+ "inProgress": "Sesja w toku..."
+ },
+ "states": {
+ "loading": "Ładowanie...",
+ "offline": "Offline",
+ "online": "Online",
+ "unknown": "Nieznane",
+ "error": "Błąd"
+ },
+ "markdown": {
+ "imageFallback": "[Obraz: {{label}}]",
+ "largeContentNotice": "Treść jest bardzo duża ({{count}} znaków). Wyświetlanie surowego podglądu, aby zachować responsywność interfejsu.",
+ "largeContentTitle": "Duża treść jest wyświetlana jako surowa, aby zapobiec zawieszeniu interfejsu",
+ "raw": "Surowy",
+ "rawPreview": "Surowy podgląd",
+ "renderMarkdown": "Renderuj markdown",
+ "showAll": "Pokaż wszystko",
+ "showMore": "Pokaż więcej",
+ "showRaw": "Pokaż surowy",
+ "showingChars": "Wyświetlanie {{shown}} / {{total}} znaków",
+ "largeContentNotice_few": "Treść jest bardzo duża ({{count}} znaków). Wyświetlanie surowego podglądu, aby zachować responsywność interfejsu.",
+ "largeContentNotice_many": "Treść jest bardzo duża ({{count}} znaków). Wyświetlanie surowego podglądu, aby zachować responsywność interfejsu.",
+ "largeContentNotice_one": "Treść jest bardzo duża ({{count}} znaków). Wyświetlanie surowego podglądu, aby zachować responsywność interfejsu.",
+ "largeContentNotice_other": "Treść jest bardzo duża ({{count}} znaków). Wyświetlanie surowego podglądu, aby zachować responsywność interfejsu."
+ },
+ "terminal": {
+ "checkOutputForDetails": "Sprawdź wynik terminala powyżej, aby uzyskać szczegóły",
+ "closingInSeconds": "Zamykanie za {{count}}s...",
+ "closingInSeconds_few": "Zamykanie za {{count}}s...",
+ "closingInSeconds_many": "Zamykanie za {{count}}s...",
+ "closingInSeconds_one": "Zamykanie za {{count}}s...",
+ "closingInSeconds_other": "Zamykanie za {{count}}s...",
+ "completedSuccessfully": "Zakończono pomyślnie",
+ "exitCode": "(kod wyjścia {{code}})",
+ "processFailed": "Proces nie powiódł się",
+ "title": "Terminal"
+ },
+ "tokens": {
+ "accumulatedWithoutDuplication": "Zsumowane w całej sesji bez duplikacji",
+ "cacheRead": "Odczyt z cache",
+ "cacheWrite": "Zapis do cache",
+ "costUsd": "Koszt (USD)",
+ "inputTokens": "Tokeny wejściowe",
+ "model": "Model",
+ "outputTokens": "Tokeny wyjściowe",
+ "phase": "Faza {{phase}}/{{total}}",
+ "promptInputShare": "{{percent}}% wejścia promptu",
+ "taskCoordination": "Koordynacja zadań",
+ "thinkingText": "Myślenie + tekst",
+ "toolOutputs": "Wyniki narzędzi",
+ "total": "Razem",
+ "userMessages": "Wiadomości użytkownika",
+ "visibleContext": "Widoczny kontekst",
+ "includesClaudeMd": "w tym CLAUDE.md ×{{count}}",
+ "claudeMd": "CLAUDE.md",
+ "mentionedFiles": "@pliki",
+ "percentValue": "({{percent}}%)",
+ "approxTokens": "~{{tokens}} tokenów",
+ "approxTokensParenthesized": "(~{{tokens}})"
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Kopiuj zespół",
+ "createTeam": "Utwórz zespół",
+ "deleteForever": "Usuń na zawsze",
+ "deletePermanently": "Usuń trwale",
+ "deleteTeam": "Usuń zespół",
+ "launching": "Uruchamianie...",
+ "launchTeam": "Uruchom zespół",
+ "relaunchTeam": "Uruchom ponownie zespół",
+ "restore": "Przywróć",
+ "restoreTeam": "Przywróć zespół",
+ "retry": "Ponów",
+ "stopTeam": "Zatrzymaj zespół",
+ "stopping": "Zatrzymywanie..."
+ },
+ "status": {
+ "active": "Aktywny",
+ "deleted": "Usunięty",
+ "launching": "Uruchamianie...",
+ "offline": "Offline",
+ "partialFailure": "Uruchomienie nie powiodło się w trakcie",
+ "partialPending": "Bootstrap w toku",
+ "partialSkipped": "Uruchomienie pominęło członka",
+ "running": "Działa"
+ },
+ "partial": {
+ "pending": "Ostatnie uruchomienie wciąż się uzgadnia.",
+ "skipped": "Ostatnie uruchomienie pominęło członków zespołu.",
+ "skippedWithCount": "Ostatnie uruchomienie pominęło {{count}}/{{expected}} członka zespołu.",
+ "skippedWithCount_few": "Ostatnie uruchomienie pominęło {{count}}/{{expected}} członków zespołu.",
+ "skippedWithCount_many": "Ostatnie uruchomienie pominęło {{count}}/{{expected}} członków zespołu.",
+ "skippedWithCount_one": "Ostatnie uruchomienie pominęło {{count}}/{{expected}} członka zespołu.",
+ "skippedWithCount_other": "Ostatnie uruchomienie pominęło {{count}}/{{expected}} członków zespołu.",
+ "stopped": "Ostatnie uruchomienie zatrzymano, zanim dołączyli wszyscy członkowie zespołu.",
+ "stoppedWithCount": "Ostatnie uruchomienie zatrzymano, zanim dołączył {{count}}/{{expected}} członek zespołu.",
+ "stoppedWithCount_few": "Ostatnie uruchomienie zatrzymano, zanim dołączyło {{count}}/{{expected}} członków zespołu.",
+ "stoppedWithCount_many": "Ostatnie uruchomienie zatrzymano, zanim dołączyło {{count}}/{{expected}} członków zespołu.",
+ "stoppedWithCount_one": "Ostatnie uruchomienie zatrzymano, zanim dołączył {{count}}/{{expected}} członek zespołu.",
+ "stoppedWithCount_other": "Ostatnie uruchomienie zatrzymano, zanim dołączyło {{count}}/{{expected}} członków zespołu."
+ },
+ "noDescription": "Brak opisu",
+ "solo": "Solo",
+ "membersCount": "Członkowie: {{count}}",
+ "membersCount_few": "Członkowie: {{count}}",
+ "membersCount_many": "Członkowie: {{count}}",
+ "membersCount_one": "Członek: {{count}}",
+ "membersCount_other": "Członkowie: {{count}}",
+ "all": "Wszystkie",
+ "moreCount": "+{{count}} więcej",
+ "moreCount_one": "+{{count}} więcej",
+ "moreCount_other": "+{{count}} więcej",
+ "moreCount_few": "+{{count}} więcej",
+ "moreCount_many": "+{{count}} więcej"
+ },
+ "runtimeProvider": {
+ "defaults": {
+ "scopeDescriptionAllProjects": "Domyślne dla każdego projektu, który nie ma własnego nadpisania OpenCode.",
+ "scopeDescriptionProject": "Nadpisz tylko wybrany projekt. Działające zespoły nie są zmieniane.",
+ "setAllProjectsDefault": "Ustaw domyślne dla wszystkich projektów",
+ "setProjectDefault": "Ustaw domyślne dla projektu",
+ "validationContext": "Kontekst walidacji",
+ "projectOverrideContext": "Kontekst nadpisania projektu",
+ "selectProjectHint": "Wybierz projekt przed testowaniem modeli lokalnych lub zapisaniem ustawień domyślnych.",
+ "allProjectsHint": "Testy używają {{project}}. Domyślne obowiązuje, chyba że projekt ma nadpisanie.",
+ "projectHint": "Zapis nadpisuje tylko {{project}}."
+ }
+ },
+ "sessionContext": {
+ "header": {
+ "title": "Kontekst",
+ "closePanel": "Zamknij panel",
+ "phase": "Faza:",
+ "current": "Bieżąca",
+ "view": "Widok:",
+ "category": "Kategoria",
+ "bySize": "Wg rozmiaru"
+ },
+ "metrics": {
+ "unavailable": "Niedostępne",
+ "contextUsed": "Użyty kontekst",
+ "promptInput": "Wejście promptu",
+ "visibleContext": "Widoczny kontekst",
+ "ofContext": "kontekstu",
+ "ofPrompt": "promptu",
+ "codexTelemetryUnavailable": "Zużycie po stronie promptu w Codex nie jest jeszcze udostępniane przez bieżącą telemetrię środowiska uruchomieniowego, więc Wejście promptu i Użyty kontekst pozostają niedostępne zamiast pokazywać fałszywe zero.",
+ "sessionCost": "Koszt sesji:",
+ "parentPlus": "nadrzędny +",
+ "subagents": "podagenci",
+ "details": "szczegóły"
+ },
+ "help": {
+ "contextUsed": {
+ "title": "Użyty kontekst",
+ "description": "Wejście promptu plus tokeny wyjściowe aktualnie zajmujące okno kontekstu modelu."
+ },
+ "promptInput": {
+ "title": "Wejście promptu",
+ "description": "Tokeny wysłane do modelu przed generowaniem. W przypadku Claude obejmuje to `input_tokens + cache_creation_input_tokens + cache_read_input_tokens`."
+ },
+ "visibleContext": {
+ "title": "Widoczny kontekst",
+ "description": "Możliwy do zbadania podzbiór wejścia promptu: pliki, CLAUDE.md, wyniki narzędzi, wiadomości użytkownika i podobne wstrzyknięcia, które możesz bezpośrednio optymalizować."
+ },
+ "availability": {
+ "title": "Dostępność",
+ "description": "Jeśli środowisko uruchomieniowe dostawcy nie udostępnia jeszcze zużycia po stronie promptu, panel pokazuje metryki jako niedostępne, zamiast udawać, że wynoszą zero."
+ }
+ },
+ "items": {
+ "turn": "@Tura {{turn}}",
+ "tokensApprox": "~{{tokens}} tokenów",
+ "toolsCount": "{{count}} narzędzi",
+ "toolsCount_one": "{{count}} narzędzie",
+ "toolsCount_other": "{{count}} narzędzi",
+ "toolsCount_few": "{{count}} narzędzia",
+ "toolsCount_many": "{{count}} narzędzi",
+ "itemsCount": "{{count}} elementów",
+ "itemsCount_one": "{{count}} element",
+ "itemsCount_other": "{{count}} elementów",
+ "itemsCount_few": "{{count}} elementy",
+ "itemsCount_many": "{{count}} elementów",
+ "missing": "brakuje",
+ "thinking": "Myślenie",
+ "text": "Tekst"
+ },
+ "empty": "Nie wykryto wstrzyknięć kontekstu w tej sesji",
+ "view": {
+ "grouped": "Pogrupowane",
+ "flat": "Płaskie"
+ },
+ "claudeMdFiles": "Pliki CLAUDE.md",
+ "mentionedFiles": "Wspomniane pliki"
+ },
+ "chat": {
+ "subagent": {
+ "fallbackName": "Podagent",
+ "shutdownConfirmed": "Wyłączenie potwierdzone",
+ "summary": {
+ "tools": "{{count}} narzędzi",
+ "tools_one": "{{count}} narzędzie",
+ "tools_other": "{{count}} narzędzi",
+ "tools_few": "{{count}} narzędzia",
+ "tools_many": "{{count}} narzędzi"
+ },
+ "meta": {
+ "type": "Typ",
+ "duration": "Czas trwania",
+ "model": "Model",
+ "id": "ID"
+ },
+ "metrics": {
+ "contextWindow": "Okno kontekstu",
+ "contextUsage": "Wykorzystanie kontekstu",
+ "mainContext": "Kontekst główny",
+ "totalOutput": "Łączne wyjście",
+ "turns": "({{count}} tur)",
+ "turns_one": "({{count}} tura)",
+ "turns_other": "({{count}} tur)",
+ "subagentContext": "Kontekst podagenta",
+ "phase": "Faza {{phase}}",
+ "turns_few": "({{count}} tury)",
+ "turns_many": "({{count}} tur)"
+ },
+ "trace": {
+ "title": "Ślad wykonania"
+ }
+ },
+ "user": {
+ "you": "Ty",
+ "showMore": "Pokaż więcej",
+ "showLess": "Pokaż mniej",
+ "backgroundTask": "Zadanie w tle",
+ "exitCode": "wyjście {{code}}",
+ "imagesAttached": "Dołączono {{count}} obrazów",
+ "imagesAttached_one": "Dołączono {{count}} obraz",
+ "imagesAttached_few": "Dołączono {{count}} obrazy",
+ "imagesAttached_many": "Dołączono {{count}} obrazów",
+ "imagesAttached_other": "Dołączono {{count}} obrazów"
+ },
+ "compact": {
+ "toggle": "Przełącz skompaktowaną treść",
+ "contextCompacted": "Kontekst skompaktowany",
+ "freedTokens": "(zwolniono {{tokens}})",
+ "phase": "Faza {{phase}}",
+ "conversationCompacted": "Konwersacja skompaktowana",
+ "summary": "Poprzednie wiadomości zostały podsumowane, aby oszczędzić kontekst. Pełna historia konwersacji jest zachowana w pliku sesji.",
+ "compacted": "Skompaktowane"
+ },
+ "executionTrace": {
+ "empty": "Brak elementów wykonania",
+ "nested": "Zagnieżdżone: {{name}}",
+ "input": "Wejście"
+ },
+ "items": {
+ "empty": "Brak elementów do wyświetlenia"
+ },
+ "tools": {
+ "teammateSpawned": "Utworzono członka zespołu",
+ "shutdownRequested": "Zażądano wyłączenia ->",
+ "noResultReceived": "Nie otrzymano wyniku",
+ "duration": "Czas trwania: {{duration}}",
+ "result": "Wynik",
+ "write": {
+ "createdFile": "Utworzono plik",
+ "wroteToFile": "Zapisano do pliku"
+ },
+ "skill": {
+ "instructions": "Instrukcje umiejętności",
+ "unknown": "Nieznana umiejętność"
+ }
+ },
+ "lastOutput": {
+ "requestInterrupted": "Żądanie przerwane przez użytkownika",
+ "planReadyForApproval": "Plan gotowy do zatwierdzenia"
+ },
+ "empty": {
+ "icon": "💬",
+ "title": "Brak historii konwersacji",
+ "description": "Ta sesja nie zawiera jeszcze żadnych wiadomości."
+ },
+ "context": {
+ "remainingPercent": "(pozostało {{percent}}%)",
+ "count": "Kontekst ({{count}})",
+ "count_one": "Kontekst ({{count}})",
+ "count_other": "Kontekst ({{count}})",
+ "count_few": "Kontekst ({{count}})",
+ "count_many": "Kontekst ({{count}})"
+ },
+ "scrollToBottom": "Przewiń na dół",
+ "bottom": "Dół",
+ "teammateMessage": {
+ "message": "Wiadomość",
+ "resent": "Wysłano ponownie",
+ "fallback": "Wiadomość członka zespołu"
+ },
+ "system": {
+ "label": "System"
+ }
+ },
+ "tmuxInstaller": {
+ "summaryTitle": "tmux nie jest zainstalowany",
+ "detectedOs": "Wykryty system: {{os}}",
+ "runtimePath": "Ścieżka środowiska uruchomieniowego: {{path}}",
+ "phase": "Faza: {{phase}}",
+ "actions": {
+ "cancel": "Anuluj",
+ "manualGuide": "Przewodnik ręczny",
+ "hideSetupSteps": "Ukryj kroki konfiguracji",
+ "showSetupSteps": "Pokaż kroki konfiguracji ({{count}})",
+ "showSetupSteps_one": "Pokaż krok konfiguracji ({{count}})",
+ "showSetupSteps_other": "Pokaż kroki konfiguracji ({{count}})",
+ "recheck": "Sprawdź ponownie",
+ "showSetupSteps_few": "Pokaż kroki konfiguracji ({{count}})",
+ "showSetupSteps_many": "Pokaż kroki konfiguracji ({{count}})"
+ },
+ "installerProgress": "Postęp instalatora",
+ "input": {
+ "placeholder": "Wyślij dane wejściowe do instalatora",
+ "send": "Wyślij dane",
+ "passwordNotice": "Hasło jest wysyłane bezpośrednio do terminala instalatora i nie jest dodawane do logu."
+ },
+ "details": {
+ "show": "Pokaż szczegóły",
+ "hide": "Ukryj szczegóły"
+ }
+ },
+ "commandPalette": {
+ "noRecentActivity": "Brak ostatniej aktywności",
+ "sessionsCount": "{{count}} sesji",
+ "sessionsCount_one": "{{count}} sesja",
+ "sessionsCount_other": "{{count}} sesji",
+ "mode": {
+ "searchProjects": "Szukaj projektów",
+ "searchAcrossProjects": "Szukaj we wszystkich projektach",
+ "searchInProject": "Szukaj w projekcie"
+ },
+ "currentProject": "Bieżący projekt",
+ "global": "Globalnie",
+ "placeholders": {
+ "projects": "Szukaj projektów...",
+ "conversations": "Szukaj konwersacji..."
+ },
+ "empty": {
+ "noProjectsForQuery": "Nie znaleziono projektów dla \"{{query}}\"",
+ "noProjects": "Nie znaleziono projektów",
+ "minChars": "Wpisz co najmniej 2 znaki, aby wyszukać",
+ "noFastResults": "Brak szybkich wyników w ostatnich sesjach dla \"{{query}}\"",
+ "noResults": "Nie znaleziono wyników dla \"{{query}}\""
+ },
+ "footer": {
+ "projectsCount": "{{count}} projektów",
+ "projectsCount_one": "{{count}} projekt",
+ "projectsCount_other": "{{count}} projektów",
+ "results": "{{count}} {{speed}}wyników",
+ "results_one": "{{count}} {{speed}}wynik",
+ "results_other": "{{count}} {{speed}}wyników",
+ "resultsAcrossProjects": "{{count}} {{speed}}wyników we wszystkich projektach",
+ "resultsAcrossProjects_one": "{{count}} {{speed}}wynik we wszystkich projektach",
+ "resultsAcrossProjects_other": "{{count}} {{speed}}wyników we wszystkich projektach",
+ "fastPrefix": "szybkich ",
+ "typeToSearch": "Wpisz, aby wyszukać",
+ "navigate": "nawiguj",
+ "select": "wybierz",
+ "open": "otwórz",
+ "global": "globalnie",
+ "close": "zamknij",
+ "results_few": "{{count}} {{speed}}wyniki",
+ "results_many": "{{count}} {{speed}}wyników",
+ "resultsAcrossProjects_few": "{{count}} {{speed}}wyniki we wszystkich projektach",
+ "resultsAcrossProjects_many": "{{count}} {{speed}}wyników we wszystkich projektach",
+ "projectsCount_few": "{{count}} projekty",
+ "projectsCount_many": "{{count}} projektów",
+ "upDownKey": "↑↓",
+ "escapeKey": "esc"
+ },
+ "sessionsCount_few": "{{count}} sesje",
+ "sessionsCount_many": "{{count}} sesji"
+ },
+ "tasksPanel": {
+ "title": "Zadania",
+ "searchPlaceholder": "Szukaj zadań...",
+ "pinned": "Przypięte",
+ "groupByLabel": "Grupuj wg:",
+ "groupByAria": "Grupuj wg",
+ "groupModes": {
+ "none": "Brak",
+ "project": "Projekt",
+ "time": "Czas"
+ },
+ "showArchived": "Pokaż zarchiwizowane",
+ "hideArchived": "Ukryj zarchiwizowane",
+ "empty": {
+ "noMatchingTasks": "Brak pasujących zadań",
+ "noTasks": "Nie znaleziono zadań"
+ },
+ "teamLabel": "Zespół: {{team}}",
+ "showMore": "Pokaż więcej",
+ "showLess": "Pokaż mniej",
+ "deleteConfirm": {
+ "title": "Usuń zadanie",
+ "message": "Przenieść zadanie #{{taskId}} do kosza?",
+ "confirmLabel": "Usuń",
+ "cancelLabel": "Anuluj"
+ },
+ "deleteFailed": {
+ "title": "Nie udało się usunąć zadania",
+ "fallbackMessage": "Wystąpił nieoczekiwany błąd",
+ "confirmLabel": "OK"
+ },
+ "sort": {
+ "byTime": "Wg czasu",
+ "byUnread": "Wg nieprzeczytanych",
+ "byProject": "Wg projektu",
+ "byTeam": "Wg zespołu"
+ }
+ },
+ "toolViewer": {
+ "input": "Wejście",
+ "replaceAll": "(zamień wszystko)",
+ "noInputRecorded": "Nie zarejestrowano danych wejściowych dla tego wywołania narzędzia.",
+ "agent": {
+ "action": "akcja",
+ "teammate": "członek zespołu",
+ "team": "zespół",
+ "runtime": "środowisko uruchomieniowe",
+ "type": "typ",
+ "startupInstructionsHidden": "Instrukcje startowe są ukryte w interfejsie."
+ }
+ },
+ "taskContextMenu": {
+ "unpin": "Odepnij",
+ "pin": "Przypnij",
+ "rename": "Zmień nazwę",
+ "markUnread": "Oznacz jako nieprzeczytane",
+ "unarchive": "Przywróć z archiwum",
+ "archive": "Archiwizuj",
+ "deleteTask": "Usuń zadanie"
+ },
+ "updateDialog": {
+ "closeDialog": "Zamknij okno dialogowe",
+ "updateAvailable": "Dostępna aktualizacja",
+ "updateReady": "Aktualizacja gotowa",
+ "noReleaseNotes": "Brak dostępnych informacji o wydaniu.",
+ "viewOnGitHub": "Zobacz na GitHub",
+ "later": "Później",
+ "restartNow": "Uruchom ponownie teraz",
+ "download": "Pobierz"
+ },
+ "errorBoundary": {
+ "title": "Coś poszło nie tak",
+ "description": "W aplikacji wystąpił nieoczekiwany błąd. Możesz spróbować przeładować stronę lub zresetować stan błędu.",
+ "componentStack": "Stos komponentów",
+ "tryAgain": "Spróbuj ponownie",
+ "copied": "Skopiowano",
+ "copyErrorDetails": "Kopiuj szczegóły błędu",
+ "reportBugOnGitHub": "Zgłoś błąd na GitHub",
+ "reloadApp": "Przeładuj aplikację",
+ "diagnosticsNotice": "Zgłoszenia błędów na GitHub i skopiowana diagnostyka zawierają komunikat błędu, ślady stosu, wersję aplikacji, aktywną kartę, wybrany zespół, kontekst zadania oraz szczegóły środowiska."
+ },
+ "runtimeBackendSelector": {
+ "label": "Backend środowiska uruchomieniowego",
+ "resolved": "Rozwiązany: {{backend}}",
+ "current": "Bieżący",
+ "recommended": "Zalecany",
+ "unavailable": "Niedostępny",
+ "cannotSelectYet": "Tego backendu nie można jeszcze wybrać.",
+ "auto": "Auto",
+ "autoCurrently": "Auto (obecnie: {{backend}})",
+ "audience": {
+ "internal": "Wewnętrzny"
+ },
+ "states": {
+ "locked": "Zablokowany",
+ "disabled": "Wyłączony",
+ "authRequired": "Wymagane uwierzytelnianie",
+ "runtimeMissing": "Brak środowiska uruchomieniowego",
+ "degraded": "Obniżona wydajność",
+ "unavailable": "Niedostępny"
+ }
+ },
+ "providerModelBadges": {
+ "checking": "Sprawdzanie",
+ "unavailable": "Niedostępne",
+ "checkFailed": "Sprawdzenie nie powiodło się",
+ "free": "Darmowe",
+ "freeTooltip": "Zgłaszane przez metadane OpenCode. Dostępność i limity mogą się zmieniać."
+ },
+ "taskFilters": {
+ "status": "Status",
+ "clearAll": "Wyczyść wszystko",
+ "selectAll": "Zaznacz wszystko",
+ "team": "Zespół",
+ "allTeams": "Wszystkie zespoły",
+ "searchTeams": "Szukaj zespołów...",
+ "noTeamsFound": "Nie znaleziono zespołów",
+ "project": "Projekt",
+ "allProjects": "Wszystkie projekty",
+ "searchProjects": "Szukaj projektów...",
+ "noProjects": "Brak projektów",
+ "comments": "Komentarze",
+ "apply": "Zastosuj",
+ "read": {
+ "all": "Wszystkie",
+ "unread": "Nieprzeczytane",
+ "read": "Przeczytane"
+ },
+ "statusOptions": {
+ "todo": "DO ZROBIENIA",
+ "inProgress": "W TOKU",
+ "needsFix": "WYMAGA POPRAWEK",
+ "done": "GOTOWE",
+ "review": "PRZEGLĄD",
+ "approved": "ZATWIERDZONE"
+ }
+ },
+ "sessionItem": {
+ "totalContext": "Łączny kontekst: {{tokens}} tokenów",
+ "context": "Kontekst: {{tokens}}",
+ "phase": "Faza {{phase}}:",
+ "compactedTo": "(skompaktowano do {{tokens}})"
+ },
+ "notifications": {
+ "row": {
+ "team": "zespół",
+ "subagent": "podagent",
+ "markAsRead": "Oznacz jako przeczytane",
+ "delete": "Usuń",
+ "viewInSession": "Pokaż w sesji"
+ },
+ "title": "Powiadomienia",
+ "loading": "Ładowanie powiadomień...",
+ "actions": {
+ "markFilteredAsRead": "Oznacz filtrowane jako przeczytane",
+ "markAllAsRead": "Oznacz wszystkie jako przeczytane",
+ "markFilteredRead": "Oznacz filtrowane przeczytane",
+ "markAllRead": "Oznacz wszystkie przeczytane",
+ "clearFilteredNotifications": "Wyczyść filtrowane powiadomienia",
+ "clearAllNotifications": "Wyczyść wszystkie powiadomienia",
+ "clickToConfirm": "Kliknij, aby potwierdzić",
+ "clearFiltered": "Wyczyść filtrowane",
+ "clearAll": "Wyczyść wszystkie"
+ },
+ "counts": {
+ "unreadInFilter": "{{count}} nieprzeczytanych w filtrze",
+ "unreadInFilter_one": "{{count}} nieprzeczytane w filtrze",
+ "unreadInFilter_few": "{{count}} nieprzeczytane w filtrze",
+ "unreadInFilter_many": "{{count}} nieprzeczytanych w filtrze",
+ "unreadInFilter_other": "{{count}} nieprzeczytanych w filtrze",
+ "inFilter": "{{count}} w filtrze",
+ "inFilter_one": "{{count}} w filtrze",
+ "inFilter_few": "{{count}} w filtrze",
+ "inFilter_many": "{{count}} w filtrze",
+ "inFilter_other": "{{count}} w filtrze",
+ "unread": "{{count}} nieprzeczytanych",
+ "unread_one": "{{count}} nieprzeczytane",
+ "unread_few": "{{count}} nieprzeczytane",
+ "unread_many": "{{count}} nieprzeczytanych",
+ "unread_other": "{{count}} nieprzeczytanych",
+ "total": "{{count}} łącznie",
+ "total_one": "{{count}} łącznie",
+ "total_few": "{{count}} łącznie",
+ "total_many": "{{count}} łącznie",
+ "total_other": "{{count}} łącznie"
+ },
+ "filters": {
+ "other": "Inne"
+ },
+ "empty": {
+ "noMatching": "Brak pasujących powiadomień",
+ "noNotifications": "Brak powiadomień",
+ "tryDifferentFilter": "Wypróbuj inny filtr",
+ "allCaughtUp": "Wszystko nadrobione!"
+ }
+ },
+ "updates": {
+ "restartToUpdate": "Uruchom ponownie, aby zaktualizować",
+ "updateApp": "Zaktualizuj aplikację",
+ "downloadedRestartTooltip": "Aktualizacja pobrana, uruchom ponownie, aby zastosować",
+ "newVersionAvailable": "Dostępna nowa wersja",
+ "updatingApp": "Aktualizowanie aplikacji",
+ "updateReady": "Aktualizacja gotowa",
+ "restartNow": "Uruchom ponownie teraz"
+ },
+ "layout": {
+ "github": "GitHub",
+ "discord": "Discord",
+ "expandSidebar": "Rozwiń panel boczny",
+ "collapseSidebarShortcut": "Zwiń panel boczny ({{shortcut}})",
+ "sidebarView": "Widok panelu bocznego",
+ "resizeSidebar": "Zmień rozmiar panelu bocznego",
+ "closeTab": "Zamknij kartę",
+ "openedFromSearch": "Otwarte z wyszukiwania",
+ "pinnedSession": "Przypięta sesja",
+ "jumpToSection": "Przejdź do sekcji",
+ "newTab": "Nowa karta",
+ "newTabDashboard": "Nowa karta (panel)",
+ "refreshSession": "Odśwież sesję",
+ "refreshSessionWithShortcut": "Odśwież sesję ({{shortcut}})",
+ "loadingTab": "Ładowanie karty",
+ "menu": {
+ "teams": "Zespoły",
+ "settings": "Ustawienia",
+ "extensions": "Rozszerzenia",
+ "search": "Szukaj",
+ "schedules": "Harmonogramy",
+ "docs": "Dokumentacja",
+ "exportMarkdown": "Eksportuj jako Markdown",
+ "exportJson": "Eksportuj jako JSON",
+ "exportPlainText": "Eksportuj jako zwykły tekst",
+ "analyzeSession": "Analizuj sesję"
+ },
+ "tabMenu": {
+ "closeTabs": "Zamknij {{count}} kart",
+ "closeTabs_one": "Zamknij {{count}} kartę",
+ "closeTabs_few": "Zamknij {{count}} karty",
+ "closeTabs_many": "Zamknij {{count}} kart",
+ "closeTabs_other": "Zamknij {{count}} kart",
+ "closeTab": "Zamknij kartę",
+ "closeOtherTabs": "Zamknij pozostałe karty",
+ "splitRight": "Podziel w prawo",
+ "splitLeft": "Podziel w lewo",
+ "pinToSidebar": "Przypnij do panelu bocznego",
+ "unpinFromSidebar": "Odepnij z panelu bocznego",
+ "hideFromSidebar": "Ukryj z panelu bocznego",
+ "unhideFromSidebar": "Odkryj w panelu bocznym",
+ "closeAllTabs": "Zamknij wszystkie karty"
+ },
+ "sections": {
+ "team": "Zespół",
+ "sessions": "Sesje",
+ "kanban": "Kanban",
+ "claudeLogs": "Logi",
+ "messages": "Wiadomości"
+ }
+ },
+ "editorFormatting": {
+ "bold": "Pogrubienie",
+ "italic": "Kursywa",
+ "strike": "Przekreślenie",
+ "code": "Kod"
+ },
+ "diff": {
+ "changed": "Zmienione",
+ "noChangesDetected": "Nie wykryto zmian"
+ },
+ "codexLogin": {
+ "copyLoginLinkAndCode": "Kopiuj link logowania ChatGPT i kod",
+ "copyLoginLink": "Kopiuj link logowania ChatGPT",
+ "copyFailed": "Kopiowanie nie powiodło się",
+ "copyLinkAndCode": "Kopiuj link + kod",
+ "copyLink": "Kopiuj link",
+ "enterCodeOnLoginPage": "Wprowadź ten kod na stronie logowania ChatGPT"
+ },
+ "window": {
+ "minimize": "Minimalizuj",
+ "maximize": "Maksymalizuj",
+ "restore": "Przywróć"
+ },
+ "context": {
+ "local": "Lokalny",
+ "switchingTo": "Przełączanie na {{workspace}}",
+ "loadingWorkspace": "Ładowanie przestrzeni roboczej",
+ "switchWorkspace": "Przełącz przestrzeń roboczą"
+ },
+ "repositories": {
+ "noneAvailable": "Brak dostępnych repozytoriów",
+ "remove": "Usuń repozytorium"
+ },
+ "export": {
+ "session": "Eksportuj sesję",
+ "sessionTitle": "Eksportuj sesję"
+ },
+ "brand": {
+ "claude": "Claude"
+ },
+ "sessionReport": {
+ "noSessionData": "Brak dostępnych danych sesji",
+ "title": "Raport sesji"
+ },
+ "sessionFilters": {
+ "project": {
+ "selectProject": "Wybierz projekt"
+ }
+ },
+ "tasks": {
+ "date": {
+ "updatedPrefix": "akt.",
+ "updatedYesterday": "akt. wczoraj",
+ "yesterday": "Wczoraj"
+ },
+ "reviewState": {
+ "needsFix": "Wymaga poprawek"
+ },
+ "unassigned": "nieprzypisane"
+ }
+}
diff --git a/src/features/localization/renderer/locales/pl/dashboard.json b/src/features/localization/renderer/locales/pl/dashboard.json
new file mode 100644
index 00000000..fb748899
--- /dev/null
+++ b/src/features/localization/renderer/locales/pl/dashboard.json
@@ -0,0 +1,197 @@
+{
+ "cliStatus": {
+ "actions": {
+ "alreadyLoggedIn": "Już zalogowano?",
+ "becomeSponsor": "Zostań sponsorem",
+ "cancel": "Anuluj",
+ "checkNow": "Sprawdź teraz",
+ "checkUpdates": "Sprawdź aktualizacje",
+ "checking": "Sprawdzanie...",
+ "connect": "Połącz",
+ "extensions": "Rozszerzenia",
+ "login": "Zaloguj się",
+ "manage": "Zarządzaj",
+ "manageProviders": "Zarządzaj dostawcami",
+ "plan": "Plan",
+ "recheck": "Sprawdź ponownie",
+ "recheckProvider": "Sprawdź ponownie {{provider}}",
+ "retry": "Ponów",
+ "updateTo": "Zaktualizuj do v{{version}}",
+ "useCode": "Użyj kodu"
+ },
+ "atlas": {
+ "alt": "Atlas Cloud",
+ "description": "Atlas Cloud to wielomodalna platforma inferencji AI, która daje deweloperom jedno API AI do generowania wideo, generowania obrazów i API LLM. Zamiast zarządzać wieloma integracjami z dostawcami, łączysz się raz i otrzymujesz ujednolicony dostęp do ponad 300 wyselekcjonowanych modeli we wszystkich modalnościach. Sprawdź nową promocję planu coding od Atlas Cloud, aby uzyskać bardziej przystępny cenowo dostęp do API.",
+ "openCodeProvider": "Dostawca OpenCode",
+ "plan": "Plan coding Atlas Cloud",
+ "sponsor": "Sponsor"
+ },
+ "errors": {
+ "checkStatusFailed": "Nie udało się sprawdzić statusu CLI",
+ "installationFailed": "Instalacja nie powiodła się",
+ "refreshFailed": "Nie udało się sprawdzić aktualizacji. Sprawdź połączenie sieciowe i spróbuj ponownie.",
+ "runtimeUpdatedRefreshFailed": "Środowisko uruchomieniowe zaktualizowane, ale nie udało się odświeżyć statusu dostawcy."
+ },
+ "hints": {
+ "backgroundStatus": "Status {{runtime}} zostanie sprawdzony w tle.",
+ "codexApiKeyFallback": "{{hint}} Awaryjne użycie klucza API jest dostępne po zmianie trybu uwierzytelniania.",
+ "codexAutoApiKey": "{{hint}} Tryb Auto będzie nadal korzystał z klucza API do czasu połączenia ChatGPT.",
+ "codexFinishLogin": "Dokończ logowanie do ChatGPT w przeglądarce. Wprowadź wyświetlony kod, jeśli pojawi się prośba.",
+ "codexNoActiveLogin": "Limity użycia pojawiają się dopiero, gdy Codex CLI wykryje aktywne konto ChatGPT. W tej chwili zgłasza brak aktywnego logowania do ChatGPT.",
+ "codexNoActiveManagedSession": "Limity użycia pojawiają się dopiero, gdy Codex CLI wykryje aktywne konto ChatGPT. Lokalne dane konta Codex istnieją, ale obecnie nie wybrano aktywnej sesji zarządzanej.",
+ "codexReconnectNeeded": "Limity użycia pojawiają się dopiero, gdy Codex odświeży aktualnie wybraną sesję ChatGPT. W tej chwili sesja lokalna wymaga ponownego połączenia.",
+ "firstCheckSlow": "Pierwsze sprawdzenie może potrwać do 30 sekund",
+ "loginRequiredForTeams": "Przeglądanie sesji i projektów działa bez logowania. Logowanie jest potrzebne tylko do uruchamiania zespołów agentów.",
+ "troubleshootTitle": "Jeśli masz pewność, że jesteś zalogowany, wypróbuj te kroki:"
+ },
+ "installer": {
+ "checkingLatest": "Sprawdzanie najnowszej wersji...",
+ "downloading": "Pobieranie {{runtime}}...",
+ "installing": "Instalowanie {{runtime}}...",
+ "success": "Pomyślnie zainstalowano {{runtime}} v{{version}}",
+ "verifying": "Weryfikacja sumy kontrolnej..."
+ },
+ "labels": {
+ "apiKeyRequired": "Wymagany klucz API",
+ "comingSoon": "Wkrótce",
+ "collapseProviderDetails": "Zwiń szczegóły dostawcy",
+ "expandProviderDetails": "Rozwiń szczegóły dostawcy",
+ "generateLink": "Wygeneruj link",
+ "loadingRateLimits": "Ładowanie limitów",
+ "loggedOut": "Dostawca wylogowany",
+ "loginAuthFailed": "Uwierzytelnianie nie powiodło się",
+ "loginAuthUpdated": "Uwierzytelnianie zaktualizowane",
+ "loginComplete": "Logowanie zakończone",
+ "loginFailed": "Logowanie nie powiodło się",
+ "loginTitle": "Logowanie",
+ "logoutFailed": "Wylogowanie nie powiodło się",
+ "logoutTitle": "Wyloguj się",
+ "notLoggedIn": "Nie zalogowano",
+ "openLogin": "Otwórz logowanie",
+ "providerActionRequired": "Wymagane działanie dostawcy",
+ "resets": "resetuje się {{time}}",
+ "runtimeLoginTitle": "Logowanie {{runtime}}"
+ },
+ "loading": {
+ "aiProviders": "Sprawdzanie dostawców AI...",
+ "claudeCli": "Sprawdzanie Claude CLI..."
+ },
+ "provider": {
+ "authenticated": "Uwierzytelniono",
+ "backend": "Backend: {{backend}}",
+ "checkingAuthentication": "Sprawdzanie uwierzytelniania...",
+ "checkingProviders": "Sprawdzanie dostawców...",
+ "configuredLocalCount": "skonfigurowano lokalnie: {{count}}",
+ "configuredLocalCount_few": "skonfigurowano lokalnie: {{count}}",
+ "configuredLocalCount_many": "skonfigurowano lokalnie: {{count}}",
+ "configuredLocalCount_one": "skonfigurowano lokalnie: {{count}}",
+ "configuredLocalCount_other": "skonfigurowano lokalnie: {{count}}",
+ "configuredLocalTitle": "Lokalne trasy OpenCode zaimportowane z Twojej konfiguracji OpenCode.",
+ "connectedCount": "Dostawcy: połączono {{connected}}/{{denominator}}",
+ "freeModels": "Darmowe modele",
+ "freeModelsTitle": "OpenCode zawiera opcje darmowych modeli, takich jak Big Pickle, gdy są dostępne w Twojej konfiguracji. OpenRouter przez OpenCode może również udostępniać darmowe modele, ale nie każdy model OpenCode/OpenRouter jest darmowy. Dostępność i limity mogą się zmieniać.",
+ "loadingModels": "Ładowanie modeli...",
+ "modelsUnavailable": "Modele niedostępne dla tej kompilacji środowiska uruchomieniowego",
+ "runtime": "Środowisko uruchomieniowe: {{runtime}}",
+ "verifiedCount": "zweryfikowano: {{count}}",
+ "verifiedCount_few": "zweryfikowano: {{count}}",
+ "verifiedCount_many": "zweryfikowano: {{count}}",
+ "verifiedCount_one": "zweryfikowano: {{count}}",
+ "verifiedCount_other": "zweryfikowano: {{count}}",
+ "verifiedTitle": "Trasy OpenCode z udanym dowodem wykonania."
+ },
+ "runtime": {
+ "configuredHealthCheckFailed": "Skonfigurowane środowisko {{runtime}} nie przeszło kontroli kondycji przy starcie.",
+ "configuredNotFound": "Nie znaleziono skonfigurowanego środowiska {{runtime}}.",
+ "foundButFailed": "Znaleziono {{runtime}}, ale nie udało się go uruchomić",
+ "healthCheckFailedDescription": "Aplikacja znalazła skonfigurowane środowisko {{runtime}}, ale jego kontrola kondycji przy starcie nie powiodła się. Napraw je lub zainstaluj ponownie, a następnie ponów próbę.",
+ "install": "Zainstaluj {{runtime}}",
+ "installRequiredDescription": "{{runtime}} jest wymagane do przygotowywania zespołów i zarządzania sesjami. Zainstaluj je, aby rozpocząć.",
+ "isRequired": "{{runtime}} jest wymagane",
+ "reinstall": "Zainstaluj ponownie {{runtime}}"
+ },
+ "runtimeInstall": {
+ "checking": "Sprawdzanie",
+ "codexTitle": "Zainstaluj Codex CLI w danych aplikacji",
+ "downloading": "Pobieranie",
+ "downloadingPercent": "Pobieranie {{percent}}%",
+ "install": "Zainstaluj",
+ "installing": "Instalowanie",
+ "openCodeTitle": "Zainstaluj środowisko uruchomieniowe OpenCode w danych aplikacji",
+ "retryInstall": "Ponów instalację"
+ },
+ "troubleshoot": {
+ "again": "ponownie",
+ "authStatusCommand": "skonfigurowane polecenie sprawdzania statusu uwierzytelniania CLI",
+ "checkLoggedIn": "- sprawdź, czy wyświetla \"Logged in\"",
+ "click": "Kliknij",
+ "loginCommand": "polecenie logowania środowiska uruchomieniowego",
+ "logoutCommand": "polecenie wylogowania środowiska uruchomieniowego",
+ "openTerminal": "Otwórz terminal i uruchom:",
+ "reloginPrefix": "Jeśli pokazuje, że jesteś zalogowany, ale aplikacja tego nie widzi, spróbuj:",
+ "sameRuntime": "Upewnij się, że CLI w Twoim terminalu to to samo środowisko uruchomieniowe, którego używa aplikacja",
+ "statusCacheHint": "- czasami status jest buforowany przez kilka sekund",
+ "then": "następnie"
+ },
+ "warnings": {
+ "multipleApiKeysMissing": "Co najmniej jeden dostawca jest ustawiony na tryb klucza API, ale nie skonfigurowano żadnego klucza API. Otwórz Zarządzaj dostawcami, aby dodać klucze lub zmienić tryb połączenia.",
+ "multipleApiKeysNeedAttention": "Co najmniej jeden dostawca jest ustawiony na tryb klucza API i wymaga uwagi. Otwórz Zarządzaj dostawcami, aby przejrzeć zapisane klucze lub zmienić tryb połączenia.",
+ "notAuthenticated": "{{runtime}} jest zainstalowane, ale nie jesteś uwierzytelniony. Logowanie jest wymagane do przygotowywania zespołów i funkcji AI.",
+ "singleApiKeyMissing": "{{provider}} jest ustawiony na tryb klucza API, ale nie skonfigurowano żadnego klucza API. Otwórz Zarządzaj dostawcami, aby dodać klucz lub zmienić tryb połączenia.",
+ "singleApiKeyNeedsAttention": "{{provider}} jest ustawiony na tryb klucza API, ale nie jest połączony. Otwórz Zarządzaj dostawcami, aby przejrzeć zapisany klucz lub zmienić tryb połączenia."
+ }
+ },
+ "recentProjects": {
+ "selectFolderTitle": "Wybierz folder projektu",
+ "selectFolder": "Wybierz folder",
+ "failedToLoad": "Nie udało się załadować projektów",
+ "retry": "Ponów",
+ "noProjects": "Nie znaleziono projektów",
+ "noMatches": "Brak wyników dla \"{{query}}\"",
+ "noRecentProjects": "Nie znaleziono ostatnich projektów",
+ "emptyDescription": "Tutaj pojawi się ostatnia aktywność Claude i Codex.",
+ "loadMore": "Załaduj więcej",
+ "card": {
+ "deleted": "Usunięto",
+ "projectFolderMissing": "Folder projektu już nie istnieje",
+ "taskCounts": {
+ "active": "{{count}} aktywnych",
+ "active_one": "{{count}} aktywne",
+ "active_other": "{{count}} aktywnych",
+ "active_few": "{{count}} aktywne",
+ "active_many": "{{count}} aktywnych",
+ "pending": "{{count}} oczekujących",
+ "pending_one": "{{count}} oczekujące",
+ "pending_other": "{{count}} oczekujących",
+ "pending_few": "{{count}} oczekujące",
+ "pending_many": "{{count}} oczekujących",
+ "done": "{{count}} ukończonych",
+ "done_one": "{{count}} ukończone",
+ "done_other": "{{count}} ukończonych",
+ "done_few": "{{count}} ukończone",
+ "done_many": "{{count}} ukończonych"
+ }
+ },
+ "title": "Ostatnie projekty",
+ "searchResults": "Wyniki wyszukiwania",
+ "searchPlaceholder": "Szukaj projektów..."
+ },
+ "actions": {
+ "selectTeam": "Wybierz zespół",
+ "or": "lub",
+ "clearSearch": "Wyczyść wyszukiwanie"
+ },
+ "windowsAdmin": {
+ "title": "Zalecany tryb administratora Windows",
+ "description": "Sprawdzanie środowiska uruchomieniowego OpenCode może przekroczyć limit czasu, gdy Agent Teams AI nie działa z podwyższonymi uprawnieniami. Uruchom ponownie aplikację z opcją Uruchom jako administrator przed uruchomieniem zespołów OpenCode."
+ },
+ "webPreview": {
+ "title": "Otwórz aplikację desktopową dla pełnej funkcjonalności",
+ "description": "Wersja przeglądarkowa jest wciąż w fazie rozwoju. Akcje projektów, integracje i aktualizacje statusu na żywo mogą być tutaj ograniczone. Użyj aplikacji desktopowej, aby niezawodnie korzystać ze wszystkich funkcji."
+ },
+ "updateBanner": {
+ "newVersionAvailable": "Dostępna nowa wersja",
+ "restartNow": "Uruchom ponownie teraz",
+ "viewDetails": "Zobacz szczegóły"
+ }
+}
diff --git a/src/features/localization/renderer/locales/pl/errors.json b/src/features/localization/renderer/locales/pl/errors.json
new file mode 100644
index 00000000..ac22201c
--- /dev/null
+++ b/src/features/localization/renderer/locales/pl/errors.json
@@ -0,0 +1,3 @@
+{
+ "fallback": "Coś poszło nie tak."
+}
diff --git a/src/features/localization/renderer/locales/pl/extensions.json b/src/features/localization/renderer/locales/pl/extensions.json
new file mode 100644
index 00000000..f20ff344
--- /dev/null
+++ b/src/features/localization/renderer/locales/pl/extensions.json
@@ -0,0 +1,688 @@
+{
+ "store": {
+ "actions": {
+ "addCustom": "Dodaj własny",
+ "openDashboard": "Otwórz panel",
+ "refreshCatalog": "Odśwież katalog"
+ },
+ "capabilities": {
+ "mcp": "MCP: {{status}}",
+ "plugins": "Wtyczki: {{status}}",
+ "skills": "Umiejętności: {{status}}"
+ },
+ "desktopOnly": "Dostępne tylko w aplikacji desktopowej.",
+ "provider": {
+ "checkingStatus": "Sprawdzanie statusu dostawcy...",
+ "connected": "Połączono",
+ "loading": "Ładowanie...",
+ "needsSetup": "Wymaga konfiguracji",
+ "readyToConfigure": "Gotowe do konfiguracji",
+ "unsupported": "Nieobsługiwane"
+ },
+ "runtime": {
+ "checkingAvailabilityDescription": "Rozszerzenia potrzebują skonfigurowanego środowiska uruchomieniowego do zarządzania wtyczkami, serwerami MCP, umiejętnościami i połączeniami z dostawcami.",
+ "checkingAvailabilityTitle": "Sprawdzanie dostępności środowiska uruchomieniowego rozszerzeń",
+ "failedToStartDescription": "Rozszerzenia są wyłączone, dopóki środowisko uruchomieniowe nie przejdzie kontroli kondycji przy starcie. Otwórz panel, aby je naprawić lub zainstalować ponownie.",
+ "failedToStartTitle": "Skonfigurowane środowisko uruchomieniowe zostało znalezione, ale nie udało się go uruchomić",
+ "multimodelCapabilitiesDescription": "Obsługa dostawców może różnić się w zależności od sekcji. Wtyczki są pokazywane tylko tam, gdzie środowisko uruchomieniowe wyraźnie deklaruje obsługę.",
+ "multimodelCapabilitiesTitle": "Możliwości środowiska wielomodelowego",
+ "needsSignInDescription": "Znaleziono {{runtime}}{{version}}, ale instalacja wtyczek jest wyłączona, dopóki nie zalogujesz się z panelu.",
+ "needsSignInTitle": "{{runtime}} wymaga zalogowania",
+ "notAvailableDescription": "Rozszerzenia są wyłączone, dopóki środowisko uruchomieniowe nie zostanie zainstalowane. Otwórz panel, aby je zainstalować i ponów próbę.",
+ "notAvailableTitle": "Skonfigurowane środowisko uruchomieniowe jest niedostępne",
+ "readyDescription": "Wtyczki można instalować z tej strony{{versionSuffix}}.",
+ "readyTitle": "{{runtime}} jest gotowe",
+ "requiredForMutations": "Skonfigurowane środowisko uruchomieniowe jest wymagane do instalowania lub odinstalowywania rozszerzeń. Zainstaluj je lub napraw z panelu."
+ },
+ "sessionsRestartWarning": "Działające sesje nie uwzględnią zmian rozszerzeń, dopóki nie zostaną ponownie uruchomione.",
+ "tabs": {
+ "apiKeys": {
+ "description": "Tajne klucze do usług online. Dodaj je tutaj, aby wtyczki, serwery i integracje mogły się połączyć i działać.",
+ "label": "Klucze API"
+ },
+ "mcpServers": {
+ "description": "Połączenia z zewnętrznymi narzędziami i aplikacjami. Pozwalają środowisku uruchomieniowemu odczytywać dane lub wykonywać akcje poza tą aplikacją.",
+ "label": "Serwery MCP"
+ },
+ "plugins": {
+ "description": "Małe dodatki do środowiska uruchomieniowego. W trybie wielomodelowym obecnie obowiązują dla sesji Anthropic, gdy są obsługiwane. Szersze wsparcie dostawców jest w trakcie rozwoju.",
+ "label": "Wtyczki"
+ },
+ "skills": {
+ "description": "Gotowe instrukcje do typowych zadań. Pomagają środowisku uruchomieniowemu obsługiwać powtarzalne zadania bardziej konsekwentnie.",
+ "label": "Umiejętności"
+ }
+ },
+ "title": "Rozszerzenia"
+ },
+ "pluginsPanel": {
+ "activeFilters": "{{count}} aktywnych",
+ "browseByFit": "Przeglądaj wg dopasowania",
+ "capabilities": "Możliwości",
+ "categories": "Kategorie",
+ "clearAllFilters": "Wyczyść wszystkie filtry",
+ "clearFilters": "Wyczyść filtry",
+ "counts": {
+ "capabilities": "{{count}} możliwości",
+ "categories": "{{count}} kategorii",
+ "plugins": "{{count}} wtyczek",
+ "capabilities_few": "{{count}} możliwości",
+ "capabilities_many": "{{count}} możliwości",
+ "capabilities_one": "{{count}} możliwość",
+ "capabilities_other": "{{count}} możliwości",
+ "categories_few": "{{count}} kategorie",
+ "categories_many": "{{count}} kategorii",
+ "categories_one": "{{count}} kategoria",
+ "categories_other": "{{count}} kategorii",
+ "plugins_few": "{{count}} wtyczki",
+ "plugins_many": "{{count}} wtyczek",
+ "plugins_one": "{{count}} wtyczka",
+ "plugins_other": "{{count}} wtyczek"
+ },
+ "empty": {
+ "description": "Sprawdź ponownie później, czy są nowe wtyczki",
+ "filteredDescription": "Spróbuj dostosować wyszukiwanie lub kryteria filtrowania",
+ "filteredTitle": "Żadna wtyczka nie pasuje do filtrów",
+ "title": "Brak dostępnych wtyczek"
+ },
+ "filterDescription": "Zawęź katalog według kategorii, możliwości lub stanu instalacji.",
+ "installedOnly": "Tylko zainstalowane",
+ "providerSupportNotice": "Obsługa wtyczek jest obecnie gwarantowana tylko dla sesji Anthropic (Claude). Pracujemy nad obsługą wtyczek dla wszystkich agentów.",
+ "resultsUpdateInstantly": "Wyniki aktualizują się natychmiast podczas dopracowywania filtrów.",
+ "searchPlaceholder": "Szukaj wtyczek...",
+ "selectedCount": "{{count}} zaznaczonych",
+ "showing": "Wyświetlanie {{shown}} z {{total}} wtyczek",
+ "sort": {
+ "category": "Kategoria",
+ "nameAsc": "Nazwa A-Z",
+ "nameDesc": "Nazwa Z-A",
+ "popular": "Popularne"
+ },
+ "activeFilters_few": "{{count}} aktywne",
+ "activeFilters_many": "{{count}} aktywnych",
+ "activeFilters_one": "{{count}} aktywny",
+ "activeFilters_other": "{{count}} aktywnych",
+ "selectedCount_few": "{{count}} zaznaczone",
+ "selectedCount_many": "{{count}} zaznaczonych",
+ "selectedCount_one": "{{count}} zaznaczona",
+ "selectedCount_other": "{{count}} zaznaczonych"
+ },
+ "customMcp": {
+ "actions": {
+ "add": "Dodaj",
+ "cancel": "Anuluj",
+ "install": "Zainstaluj",
+ "installing": "Instalowanie..."
+ },
+ "description": "Dodaj serwer ręcznie bez katalogu.",
+ "errors": {
+ "installFailed": "Instalacja nie powiodła się",
+ "invalidServerName": "Nieprawidłowa nazwa serwera. Użyj znaków alfanumerycznych, myślników, podkreśleń, kropek.",
+ "npmPackageRequired": "Nazwa pakietu npm jest wymagana",
+ "serverNameRequired": "Nazwa serwera jest wymagana",
+ "serverUrlRequired": "Adres URL serwera jest wymagany"
+ },
+ "fields": {
+ "environmentVariables": "Zmienne środowiskowe",
+ "headers": "Nagłówki",
+ "npmPackage": "Pakiet npm",
+ "scope": "Zakres",
+ "serverName": "Nazwa serwera",
+ "serverUrl": "Adres URL serwera",
+ "transport": "Transport",
+ "transportType": "Typ transportu",
+ "versionOptional": "Wersja (opcjonalnie)"
+ },
+ "title": "Dodaj własny serwer MCP",
+ "transport": {
+ "httpSse": "HTTP / SSE",
+ "stdio": "Stdio (npm)"
+ },
+ "placeholders": {
+ "headerName": "Header-Name",
+ "envVarName": "ENV_VAR_NAME",
+ "serverName": "my-server",
+ "latest": "latest",
+ "value": "wartość",
+ "serverUrl": "https://api.example.com/mcp"
+ }
+ },
+ "mcpDetail": {
+ "auth": {
+ "remoteMayNeedHeaders": "Zdalne serwery MCP mogą nadal wymagać niestandardowych nagłówków lub kluczy API, nawet jeśli rejestr ich nie opisuje. Jeśli połączenie nie powiedzie się po instalacji, sprawdź dokumentację dostawcy.",
+ "required": "Ten serwer wymaga uwierzytelniania"
+ },
+ "diagnostics": {
+ "launchTarget": "Cel uruchomienia"
+ },
+ "form": {
+ "autoFilled": "Wypełnione automatycznie",
+ "environmentVariables": "Zmienne środowiskowe",
+ "headers": "Nagłówki",
+ "scope": "Zakres",
+ "serverName": "Nazwa serwera"
+ },
+ "install": {
+ "httpTransport": "HTTP: {{transport}}",
+ "manualSetupDescription": "Ten serwer wymaga ręcznej konfiguracji. Sprawdź repozytorium, aby uzyskać instrukcje instalacji.",
+ "manualSetupRequired": "Wymagana ręczna konfiguracja",
+ "npmPackage": "npm: {{package}}",
+ "manage": "Zarządzaj instalacją",
+ "install": "Zainstaluj serwer"
+ },
+ "links": {
+ "glama": "Glama",
+ "repository": "Repozytorium",
+ "website": "Strona internetowa"
+ },
+ "metadata": {
+ "author": "Autor",
+ "githubStars": "Gwiazdki GitHub",
+ "hosting": "Hosting",
+ "installType": "Typ instalacji",
+ "license": "Licencja",
+ "published": "Opublikowano",
+ "source": "Źródło",
+ "updated": "Zaktualizowano",
+ "version": "Wersja"
+ },
+ "scope": {
+ "local": "Lokalny",
+ "project": "Projekt"
+ },
+ "tools": {
+ "title": "Narzędzia ({{count}})",
+ "title_few": "Narzędzia ({{count}})",
+ "title_many": "Narzędzia ({{count}})",
+ "title_one": "Narzędzia ({{count}})",
+ "title_other": "Narzędzia ({{count}})"
+ },
+ "placeholders": {
+ "serverName": "my-server"
+ }
+ },
+ "skillEditor": {
+ "actions": {
+ "cancel": "Anuluj",
+ "createSkill": "Utwórz umiejętność",
+ "preparing": "Przygotowywanie...",
+ "reviewAndCreate": "Przejrzyj i utwórz",
+ "reviewAndSave": "Przejrzyj i zapisz",
+ "saveSkill": "Zapisz umiejętność"
+ },
+ "advanced": {
+ "customDescription": "Ta umiejętność używa niestandardowego formatu markdown, więc edytuj ją bezpośrednio tutaj.",
+ "customTitle": "2. Edytor SKILL.md",
+ "description": "Większość osób może to pominąć. Otwórz to tylko wtedy, gdy chcesz mieć bezpośrednią kontrolę nad surowym plikiem markdown.",
+ "hide": "Ukryj edytor zaawansowany",
+ "resetFromStructuredFields": "Resetuj z pól strukturalnych",
+ "show": "Pokaż edytor zaawansowany",
+ "title": "4. Zaawansowany edytor SKILL.md"
+ },
+ "basics": {
+ "description": "Nadaj tej umiejętności jasną nazwę, wybierz, kto może z niej korzystać, i zdecyduj, gdzie powinna się znajdować.",
+ "title": "1. Podstawy"
+ },
+ "description": {
+ "create": "Opisz proces prostym językiem, przejrzyj pliki, które zostaną utworzone, a następnie zapisz go.",
+ "edit": "Zaktualizuj tę umiejętność, przejrzyj wynikowe zmiany plików, a następnie zapisz ją."
+ },
+ "extraFiles": {
+ "addedFiles": "Dodane pliki:",
+ "assets": "Zasoby",
+ "assetsDescription": "Dodaj zrzuty ekranu lub dołączone media tylko wtedy, gdy pomagają wyjaśnić proces.",
+ "description": "Dodaj pomocnicze dokumenty, skrypty lub zasoby tylko wtedy, gdy ta umiejętność naprawdę ich potrzebuje.",
+ "lockedForEdits": "Katalog główny i folder są zablokowane do edycji",
+ "optionalDescription": "Dodaj pliki startowe, które zostaną uwzględnione w przeglądzie i zapisane razem z `SKILL.md`.",
+ "optionalTitle": "Pliki opcjonalne",
+ "references": "Odniesienia",
+ "referencesDescription": "Dodaj pomocnicze dokumenty, linki lub przykłady, z których środowisko uruchomieniowe może korzystać.",
+ "scripts": "Skrypty",
+ "scriptsDescription": "Dodaj polecenia pomocnicze lub notatki konfiguracyjne. Sprawdź dokładnie przed udostępnieniem tej umiejętności.",
+ "title": "3. Dodatkowe pliki"
+ },
+ "fields": {
+ "compatibility": "Zgodność",
+ "description": "Opis",
+ "folderName": "Nazwa folderu",
+ "folderNameHint": "Sugerujemy to automatycznie na podstawie nazwy umiejętności, aby przegląd działał od razu.",
+ "invocation": "Jak powinna być używana",
+ "license": "Licencja",
+ "name": "Nazwa umiejętności",
+ "notes": "Dodatkowe notatki lub zabezpieczenia",
+ "root": "Gdzie ją przechowywać",
+ "scope": "Kto może z niej korzystać",
+ "steps": "Główne kroki do wykonania",
+ "whenToUse": "Kiedy po nią sięgnąć"
+ },
+ "instructions": {
+ "description": "Te sekcje generują plik umiejętności za Ciebie, więc nie musisz edytować markdown, chyba że chcesz.",
+ "locked": "Pola strukturalne są zablokowane, ponieważ przełączyłeś się na ręczną edycję `SKILL.md` poniżej.",
+ "title": "2. Instrukcje"
+ },
+ "invocation": {
+ "auto": "Może być używana automatycznie",
+ "manualOnly": "Tylko wtedy, gdy o nią poprosisz"
+ },
+ "placeholders": {
+ "description": "W czym ta umiejętność pomaga",
+ "name": "Napisz zwięzłą nazwę umiejętności",
+ "notes": "Przykład: Wskaż brakujące testy, regresje i ryzykowne założenia.",
+ "steps": "1. Sprawdź odpowiednie pliki.\n2. Najpierw wyjaśnij główne ryzyko.\n3. Zaproponuj najbezpieczniejszą poprawkę.",
+ "whenToUse": "Przykład: Użyj tego, gdy zadanie to przegląd kodu lub prośba o segregację błędów.",
+ "license": "MIT",
+ "compatibility": "claude-code, cursor"
+ },
+ "review": {
+ "creating": "Tworzenie umiejętności",
+ "hint": "Najpierw przejrzyj zmiany plików, a następnie potwierdź zapis w następnym kroku.",
+ "saving": "Zapisywanie tej umiejętności"
+ },
+ "root": {
+ "codexOnly": " - Tylko Codex",
+ "shared": " - Współdzielone"
+ },
+ "scope": {
+ "project": "Projekt: {{project}}",
+ "projectUnavailable": "Projekt niedostępny",
+ "user": "Użytkownik"
+ },
+ "title": {
+ "create": "Utwórz umiejętność",
+ "edit": "Edytuj umiejętność"
+ }
+ },
+ "skillDetail": {
+ "actions": {
+ "cancel": "Anuluj",
+ "delete": "Usuń",
+ "deleteSkill": "Usuń umiejętność",
+ "deleting": "Usuwanie...",
+ "editSkill": "Edytuj umiejętność",
+ "openFolder": "Otwórz folder",
+ "openSkillFile": "Otwórz SKILL.md",
+ "retry": "Ponów"
+ },
+ "badges": {
+ "assets": "Zasoby",
+ "autoUse": "Użycie automatyczne",
+ "hasScripts": "Zawiera skrypty",
+ "manualUse": "Użycie ręczne",
+ "references": "Odniesienia",
+ "storedIn": "Przechowywane w {{root}}"
+ },
+ "deleteDialog": {
+ "description": "Usunąć tę umiejętność i przenieść ją do kosza?",
+ "descriptionWithName": "Usunąć \"{{name}}\" i przenieść ją do kosza? W razie potrzeby możesz ją później przywrócić z kosza.",
+ "title": "Usunąć umiejętność?"
+ },
+ "descriptionFallback": "Sprawdź wykryte metadane umiejętności i surowe instrukcje.",
+ "errors": {
+ "deleteFailed": "Nie udało się usunąć umiejętności",
+ "loadFailed": "Nie można załadować tej umiejętności."
+ },
+ "files": {
+ "advancedDetails": "Zaawansowane szczegóły pliku",
+ "assets": "Zasoby",
+ "references": "Odniesienia",
+ "scripts": "Skrypty",
+ "storedAt": "Przechowywane w"
+ },
+ "includes": {
+ "assets": "zasoby",
+ "instructionsOnly": "Tylko instrukcje umiejętności",
+ "references": "odniesienia",
+ "scripts": "skrypty"
+ },
+ "invocation": {
+ "auto": "Uruchamia się automatycznie, gdy pasuje do zadania.",
+ "manualOnly": "Uruchamia się tylko wtedy, gdy o to wyraźnie poprosisz."
+ },
+ "issues": {
+ "bundledScripts": "Ta umiejętność zawiera dołączone skrypty",
+ "reviewCarefully": "Sprawdź dokładnie tę umiejętność przed użyciem"
+ },
+ "loading": "Ładowanie szczegółów umiejętności...",
+ "scope": {
+ "personal": "Twoje osobiste umiejętności",
+ "projectOnly": "Tylko ten projekt"
+ },
+ "summary": {
+ "howUsed": "Jak jest używana",
+ "included": "Co jest dołączone",
+ "whoCanUse": "Kto może z niej korzystać"
+ },
+ "titleFallback": "Szczegóły umiejętności"
+ },
+ "skillsPanel": {
+ "actions": {
+ "createSkill": "Utwórz umiejętność",
+ "import": "Importuj"
+ },
+ "badges": {
+ "assets": "Zasoby",
+ "hasScripts": "Zawiera skrypty",
+ "needsAttention": "Wymaga uwagi",
+ "references": "Odniesienia",
+ "storedIn": "Przechowywane w {{root}}"
+ },
+ "configuredRuntime": "skonfigurowane środowisko uruchomieniowe",
+ "counts": {
+ "codexOnly": "{{count}} tylko Codex",
+ "personal": "{{count}} osobistych",
+ "project": "{{count}} projektowych",
+ "shared": "{{count}} współdzielonych",
+ "total": "{{count}} łącznie",
+ "codexOnly_few": "{{count}} tylko Codex",
+ "codexOnly_many": "{{count}} tylko Codex",
+ "codexOnly_one": "{{count}} tylko Codex",
+ "codexOnly_other": "{{count}} tylko Codex",
+ "personal_few": "{{count}} osobiste",
+ "personal_many": "{{count}} osobistych",
+ "personal_one": "{{count}} osobista",
+ "personal_other": "{{count}} osobistych",
+ "project_few": "{{count}} projektowe",
+ "project_many": "{{count}} projektowych",
+ "project_one": "{{count}} projektowa",
+ "project_other": "{{count}} projektowych",
+ "shared_few": "{{count}} współdzielone",
+ "shared_many": "{{count}} współdzielonych",
+ "shared_one": "{{count}} współdzielona",
+ "shared_other": "{{count}} współdzielonych",
+ "total_few": "{{count}} łącznie",
+ "total_many": "{{count}} łącznie",
+ "total_one": "{{count}} łącznie",
+ "total_other": "{{count}} łącznie"
+ },
+ "empty": {
+ "noMatches": "Żadna umiejętność nie pasuje do wyszukiwania",
+ "noMatchesDescription": "Spróbuj innego terminu wyszukiwania lub zmień filtry.",
+ "noSkills": "Brak umiejętności",
+ "noSkillsDescription": "Utwórz swoją pierwszą umiejętność, aby nauczyć powtarzalnego procesu, lub zaimportuj taką, której już używasz."
+ },
+ "filters": {
+ "all": "Wszystkie umiejętności",
+ "codexOnly": "Tylko Codex",
+ "hasScripts": "Zawiera skrypty",
+ "needsAttention": "Wymaga uwagi",
+ "personal": "Osobiste",
+ "project": "Projektowe",
+ "shared": "Współdzielone"
+ },
+ "hero": {
+ "codexAvailable": "Użyj `.codex`, gdy umiejętność powinna pozostać tylko dla Codex.",
+ "codexUnavailable": "Istniejące umiejętności `.codex` pozostają tutaj edytowalne, ale nowe umiejętności tylko dla Codex wymagają włączonego środowiska Codex.",
+ "description": "Umiejętności to instrukcje wielokrotnego użytku, które pomagają środowisku uruchomieniowemu obsługiwać ten sam rodzaj zadania bardziej konsekwentnie.",
+ "guidance": "Używaj umiejętności osobistych dla nawyków, które chcesz mieć wszędzie. Używaj umiejętności projektowych dla procesów, które mają sens tylko w jednym kodzie źródłowym.",
+ "personalContext": "W tej chwili widzisz tylko swoje osobiste umiejętności.",
+ "projectContext": "Widzisz umiejętności dla {{project}} oraz swoje osobiste umiejętności.",
+ "title": "Naucz powtarzalnej pracy"
+ },
+ "invocation": {
+ "auto": "Uruchamia się automatycznie, gdy pasuje",
+ "manualOnly": "Uruchamia się tylko wtedy, gdy o to wyraźnie poprosisz"
+ },
+ "loading": {
+ "loading": "Ładowanie umiejętności...",
+ "refreshing": "Odświeżanie umiejętności..."
+ },
+ "runtimeAudience": "Współdzielone umiejętności w `.claude`, `.cursor` i `.agents` są dostępne dla {{audience}}. Umiejętności przechowywane w `.codex` pozostają tylko dla Codex, gdy obsługa Codex jest dostępna.",
+ "scope": {
+ "project": "Ten projekt",
+ "user": "Osobiste"
+ },
+ "searchPlaceholder": "Szukaj wg nazwy umiejętności lub tego, w czym pomaga...",
+ "sections": {
+ "personal": {
+ "description": "Nawyki i instrukcje, które chcesz mieć dostępne wszędzie.",
+ "title": "Umiejętności osobiste"
+ },
+ "project": {
+ "description": "Procesy, które mają sens tylko dla tego kodu źródłowego.",
+ "title": "Umiejętności projektowe"
+ }
+ },
+ "sort": {
+ "label": "Sortuj umiejętności",
+ "name": "Nazwa",
+ "recent": "Najnowsze"
+ },
+ "status": {
+ "hasScripts": "Zawiera skrypty, więc sprawdź ją dokładnie",
+ "needsAttention": "Wymaga uwagi, zanim na niej polegniesz",
+ "ready": "Gotowa do użycia"
+ },
+ "success": {
+ "created": "Umiejętność utworzona pomyślnie.",
+ "imported": "Umiejętność zaimportowana pomyślnie.",
+ "saved": "Umiejętność zapisana pomyślnie."
+ }
+ },
+ "pluginDetail": {
+ "unknown": "Nieznane",
+ "metadata": {
+ "author": "Autor",
+ "category": "Kategoria",
+ "source": "Źródło",
+ "version": "Wersja",
+ "capabilities": "Możliwości",
+ "installs": "Instalacje"
+ },
+ "scope": {
+ "label": "Zakres:",
+ "options": {
+ "user": "Użytkownik (globalnie)",
+ "project": "Projekt (współdzielony)",
+ "local": "Lokalny (gitignored)"
+ }
+ },
+ "links": {
+ "homepage": "Strona główna",
+ "contact": "Kontakt"
+ },
+ "readme": {
+ "loading": "Ładowanie README...",
+ "empty": "Brak dostępnego README."
+ }
+ },
+ "skillImport": {
+ "title": "Importuj umiejętność",
+ "description": "Wybierz istniejący folder umiejętności, przejrzyj, co zostanie skopiowane, a następnie zaimportuj go do jednej z obsługiwanych lokalizacji umiejętności.",
+ "steps": {
+ "chooseFolder": {
+ "title": "1. Wybierz folder umiejętności",
+ "description": "To powinien być folder, który już zawiera plik `SKILL.md`, `Skill.md` lub `skill.md`."
+ },
+ "location": {
+ "title": "2. Zdecyduj, gdzie należy",
+ "description": "Umiejętności osobiste działają wszędzie. Umiejętności projektowe pojawiają się tylko dla jednego kodu źródłowego."
+ }
+ },
+ "fields": {
+ "sourceFolder": "Folder źródłowy",
+ "destinationFolderName": "Nazwa folderu docelowego",
+ "audience": "Kto może z niej korzystać",
+ "storage": "Gdzie ją przechowywać"
+ },
+ "placeholders": {
+ "defaultFolderName": "Domyślnie nazwa folderu źródłowego"
+ },
+ "actions": {
+ "browse": "Przeglądaj",
+ "cancel": "Anuluj",
+ "preparing": "Przygotowywanie...",
+ "reviewAndImport": "Przejrzyj i importuj",
+ "importSkill": "Importuj umiejętność",
+ "backToImport": "Wróć do importu"
+ },
+ "scope": {
+ "user": "Użytkownik",
+ "project": "Projekt: {{project}}",
+ "projectUnavailable": "Projekt niedostępny"
+ },
+ "rootSuffix": {
+ "codexOnly": " - Tylko Codex",
+ "shared": " - Współdzielone"
+ },
+ "reviewHint": "Najpierw przejrzyj skopiowane pliki, a następnie potwierdź import w następnym kroku.",
+ "reviewLabel": "Importowanie tej umiejętności",
+ "errors": {
+ "missingSkillFile": "Ten folder nie wygląda jeszcze jak umiejętność. Potrzebuje pliku SKILL.md, Skill.md lub skill.md.",
+ "symbolicLinks": "Ten folder zawiera dowiązania symboliczne. Zaimportuj prawdziwe pliki zamiast dowiązań.",
+ "tooManyFiles": "Ten folder umiejętności jest zbyt duży, aby zaimportować go naraz. Usuń dodatkowe pliki i spróbuj ponownie.",
+ "tooLarge": "Ten folder umiejętności jest zbyt duży, aby bezpiecznie go zaimportować. Usuń duże zasoby i spróbuj ponownie.",
+ "invalidFolderName": "Wybierz prostszą nazwę folderu docelowego, używając liter, cyfr, kropek, myślników lub podkreśleń.",
+ "mustBeDirectory": "Wybierz folder do importu, a nie pojedynczy plik.",
+ "reviewFailed": "Nie udało się przejrzeć zmian importu",
+ "importFailed": "Nie udało się zaimportować umiejętności"
+ }
+ },
+ "mcpPanel": {
+ "sort": {
+ "nameAsc": "Nazwa A→Z",
+ "nameDesc": "Nazwa Z→A",
+ "toolsDesc": "Najwięcej narzędzi"
+ },
+ "health": {
+ "title": "Status kondycji MCP",
+ "checkingViaRuntime": "Sprawdzanie zainstalowanych serwerów MCP przez {{runtime}} ...",
+ "lastChecked": "Ostatnio sprawdzono {{time}}",
+ "description": "Uruchom diagnostykę z tej strony, aby zweryfikować łączność zainstalowanych MCP.",
+ "checking": "Sprawdzanie...",
+ "checkStatus": "Sprawdź status"
+ },
+ "diagnostics": {
+ "title": "Diagnostyka MCP środowiska uruchomieniowego",
+ "serversCount": "{{count}} serwerów",
+ "serversCount_one": "{{count}} serwer",
+ "serversCount_other": "{{count}} serwerów",
+ "waiting": "Oczekiwanie na wyniki diagnostyki...",
+ "disableReasons": {
+ "checkingRuntimeStatus": "Sprawdzanie statusu środowiska uruchomieniowego...",
+ "checkingRuntimeAvailability": "Sprawdzanie dostępności środowiska uruchomieniowego...",
+ "runtimeFailedToStart": "Skonfigurowane środowisko uruchomieniowe zostało znalezione, ale nie udało się go uruchomić. Otwórz panel, aby je naprawić lub zainstalować ponownie.",
+ "runtimeRequired": "Skonfigurowane środowisko uruchomieniowe jest wymagane. Zainstaluj je lub napraw z panelu."
+ },
+ "serversCount_few": "{{count}} serwery",
+ "serversCount_many": "{{count}} serwerów"
+ },
+ "searchPlaceholder": "Szukaj serwerów MCP...",
+ "runtime": {
+ "notAvailable": "{{runtime}} niedostępne",
+ "notInstalled": "{{runtime}} nie jest zainstalowane",
+ "requiredDescription": "Kontrole kondycji MCP wymagają {{runtime}}. Przejdź do panelu, aby je zainstalować lub naprawić."
+ },
+ "empty": {
+ "searchTitle": "Nie znaleziono serwerów",
+ "title": "Brak dostępnych serwerów MCP",
+ "searchDescription": "Spróbuj innego terminu wyszukiwania",
+ "description": "Sprawdź ponownie później, czy są nowe serwery"
+ },
+ "loadMore": "Załaduj więcej"
+ },
+ "apiKeys": {
+ "description": "Bezpiecznie przechowuj klucze API do automatycznego wypełniania podczas instalacji serwerów MCP.",
+ "storage": {
+ "osKeychain": "Klucze są szyfrowane przez {{backend}} i przechowywane z ograniczonymi uprawnieniami plików (tylko właściciel).",
+ "localEncryption": "Pęk kluczy systemu operacyjnego niedostępny - klucze są szyfrowane lokalnie za pomocą AES-256. Aby uzyskać silniejszą ochronę, zainstaluj usługę pęku kluczy (gnome-keyring, kwallet)."
+ },
+ "actions": {
+ "add": "Dodaj klucz API",
+ "addFirst": "Dodaj swój pierwszy klucz",
+ "edit": "Edytuj",
+ "copied": "Skopiowano!",
+ "copyEnvVarName": "Kopiuj nazwę zmiennej środowiskowej",
+ "confirmDelete": "Kliknij ponownie, aby potwierdzić",
+ "delete": "Usuń"
+ },
+ "empty": {
+ "title": "Brak zapisanych kluczy API",
+ "description": "Dodaj klucze, aby automatycznie wypełniać zmienne środowiskowe podczas instalacji serwerów MCP."
+ },
+ "form": {
+ "addTitle": "Dodaj klucz API",
+ "editTitle": "Edytuj klucz API",
+ "addDescription": "Przechowuj klucz API do automatycznego wypełniania w instalacjach serwerów MCP.",
+ "editDescription": "Zaktualizuj szczegóły klucza. Musisz ponownie wprowadzić wartość.",
+ "keychainUnavailable": "Pęk kluczy systemu operacyjnego niedostępny - klucze szyfrowane lokalnie za pomocą AES-256. Zainstaluj gnome-keyring dla ochrony na poziomie systemu operacyjnego.",
+ "name": "Nazwa",
+ "namePlaceholder": "np. OpenAI Production",
+ "environmentVariableName": "Nazwa zmiennej środowiskowej",
+ "envVarPlaceholder": "np. OPENAI_API_KEY",
+ "value": "Wartość",
+ "reenterValue": "Wprowadź ponownie wartość klucza",
+ "valuePlaceholder": "sk-...",
+ "scope": "Zakres",
+ "userScopeLabel": "Użytkownik (globalnie)",
+ "projectScopeLabel": "Projekt: {{project}}",
+ "projectUnavailable": "Projekt niedostępny",
+ "boundTo": "Powiązane z {{path}}",
+ "cancel": "Anuluj",
+ "saving": "Zapisywanie...",
+ "update": "Aktualizuj",
+ "save": "Zapisz",
+ "errors": {
+ "invalidEnvVarFormat": "Użyj liter, cyfr, podkreśleń. Musi zaczynać się od litery lub podkreślenia.",
+ "nameRequired": "Nazwa jest wymagana",
+ "envVarRequired": "Nazwa zmiennej środowiskowej jest wymagana",
+ "invalidEnvVar": "Nieprawidłowa nazwa zmiennej środowiskowej",
+ "valueRequired": "Wartość klucza jest wymagana",
+ "projectScopeRequiresProject": "Klucze API o zakresie projektu wymagają aktywnego projektu",
+ "saveFailed": "Nie udało się zapisać"
+ }
+ }
+ },
+ "skillReview": {
+ "title": "Przejrzyj zmiany umiejętności",
+ "description": "{{reviewLabel}} najpierw wyświetla podgląd zmian w systemie plików. Nic nie jest zapisywane, dopóki nie potwierdzisz poniżej.",
+ "noPreview": "Brak dostępnego podglądu.",
+ "confirmPromptPrefix": "Przejrzyj różnice poniżej, a następnie użyj",
+ "confirmPromptSuffix": "aby zastosować te zmiany.",
+ "noChanges": "Nie wykryto jeszcze żadnych zmian plików.",
+ "binaryBadge": "binarny",
+ "binaryPreviewHidden": "Podgląd pliku binarnego nie jest pokazywany. Plik zostanie skopiowany w niezmienionej postaci.",
+ "summary": {
+ "fileChanges": "{{count}} zmian plików",
+ "fileChanges_one": "{{count}} zmiana pliku",
+ "fileChanges_other": "{{count}} zmian plików",
+ "new": "{{count}} nowych",
+ "updated": "{{count}} zaktualizowanych",
+ "removed": "{{count}} usuniętych",
+ "binary": "{{count}} binarnych",
+ "fileChanges_few": "{{count}} zmiany plików",
+ "fileChanges_many": "{{count}} zmian plików"
+ }
+ },
+ "mcpCard": {
+ "toolsCount": "{{count}} narzędzi",
+ "toolsCount_one": "{{count}} narzędzie",
+ "toolsCount_other": "{{count}} narzędzi",
+ "envCount": "{{count}} zmiennych śr.",
+ "envCount_one": "{{count}} zmienna śr.",
+ "envCount_other": "{{count}} zmiennych śr.",
+ "auth": "Uwierzytelnianie",
+ "byAuthor": "autor: {{author}}",
+ "hosting": {
+ "remote": "Zdalny",
+ "local": "Lokalny",
+ "both": "Oba"
+ },
+ "toolsCount_few": "{{count}} narzędzia",
+ "toolsCount_many": "{{count}} narzędzi",
+ "envCount_few": "{{count}} zmienne śr.",
+ "envCount_many": "{{count}} zmiennych śr.",
+ "repository": "Repozytorium",
+ "website": "Strona internetowa"
+ },
+ "installButton": {
+ "installing": "Instalowanie...",
+ "removing": "Usuwanie...",
+ "done": "Gotowe",
+ "retry": "Ponów",
+ "uninstall": "Odinstaluj",
+ "install": "Zainstaluj"
+ },
+ "pluginCard": {
+ "official": "Oficjalna"
+ }
+}
diff --git a/src/features/localization/renderer/locales/pl/report.json b/src/features/localization/renderer/locales/pl/report.json
new file mode 100644
index 00000000..9b6d9766
--- /dev/null
+++ b/src/features/localization/renderer/locales/pl/report.json
@@ -0,0 +1,217 @@
+{
+ "cost": {
+ "breakdownTitle": "Podział kosztów (na 1M tokenów)",
+ "cacheRead": "Odczyt z cache",
+ "cacheWrite": "Zapis do cache",
+ "cost": "Koszt",
+ "input": "Wejście",
+ "noCommits": "brak commitów",
+ "noLinesChanged": "brak zmienionych linii",
+ "output": "Wyjście",
+ "parent": "Nadrzędny: {{cost}}",
+ "parentCost": "Koszt nadrzędny",
+ "perCommit": "Na commit",
+ "perCommitFormula": "całkowity koszt ÷ {{count}} commit",
+ "perCommitFormula_few": "całkowity koszt ÷ {{count}} commity",
+ "perCommitFormula_many": "całkowity koszt ÷ {{count}} commitów",
+ "perCommitFormula_one": "całkowity koszt ÷ {{count}} commit",
+ "perCommitFormula_other": "całkowity koszt ÷ {{count}} commitów",
+ "perLineChanged": "Na zmienioną linię",
+ "perLineFormula": "całkowity koszt ÷ {{count}} linia",
+ "perLineFormula_few": "całkowity koszt ÷ {{count}} linie",
+ "perLineFormula_many": "całkowity koszt ÷ {{count}} linii",
+ "perLineFormula_one": "całkowity koszt ÷ {{count}} linia",
+ "perLineFormula_other": "całkowity koszt ÷ {{count}} linii",
+ "subagent": "Podagent: {{cost}}",
+ "subagentCost": "Koszt podagentów",
+ "title": "Analiza kosztów",
+ "total": "Razem"
+ },
+ "insights": {
+ "agent": "agent",
+ "agent_few": "agenty",
+ "agent_many": "agentów",
+ "agent_one": "agent",
+ "agent_other": "agentów",
+ "agentTree": "Drzewo agentów ({{count}} {{unit}})",
+ "background": "(w tle)",
+ "bashCommands": "Polecenia Bash",
+ "outOfScopeFindings": "Ustalenia poza zakresem ({{count}})",
+ "questionsAsked": "Zadane pytania ({{count}})",
+ "repeated": "Powtórzone",
+ "skillsInvoked": "Wywołane umiejętności ({{count}})",
+ "taskDispatches": "Przydziały zadań ({{count}})",
+ "tasksCreated": "Utworzone zadania ({{count}})",
+ "teamMode": "Tryb zespołowy",
+ "teams": "Zespoły: {{teams}}",
+ "title": "Wnioski z sesji",
+ "total": "Razem",
+ "unique": "Unikalne",
+ "skillsInvoked_few": "Wywołane umiejętności ({{count}})",
+ "skillsInvoked_many": "Wywołane umiejętności ({{count}})",
+ "skillsInvoked_one": "Wywołane umiejętności ({{count}})",
+ "skillsInvoked_other": "Wywołane umiejętności ({{count}})",
+ "taskDispatches_few": "Przydziały zadań ({{count}})",
+ "taskDispatches_many": "Przydziały zadań ({{count}})",
+ "taskDispatches_one": "Przydziały zadań ({{count}})",
+ "taskDispatches_other": "Przydziały zadań ({{count}})",
+ "tasksCreated_few": "Utworzone zadania ({{count}})",
+ "tasksCreated_many": "Utworzone zadania ({{count}})",
+ "tasksCreated_one": "Utworzone zadania ({{count}})",
+ "tasksCreated_other": "Utworzone zadania ({{count}})",
+ "questionsAsked_few": "Zadane pytania ({{count}})",
+ "questionsAsked_many": "Zadane pytania ({{count}})",
+ "questionsAsked_one": "Zadane pytania ({{count}})",
+ "questionsAsked_other": "Zadane pytania ({{count}})",
+ "agentTree_few": "Drzewo agentów ({{count}} {{unit}})",
+ "agentTree_many": "Drzewo agentów ({{count}} {{unit}})",
+ "agentTree_one": "Drzewo agentów ({{count}} {{unit}})",
+ "agentTree_other": "Drzewo agentów ({{count}} {{unit}})",
+ "outOfScopeFindings_few": "Ustalenia poza zakresem ({{count}})",
+ "outOfScopeFindings_many": "Ustalenia poza zakresem ({{count}})",
+ "outOfScopeFindings_one": "Ustalenia poza zakresem ({{count}})",
+ "outOfScopeFindings_other": "Ustalenia poza zakresem ({{count}})",
+ "keyTakeaways": "Kluczowe wnioski"
+ },
+ "quality": {
+ "chars": "znaków",
+ "corrections": "Korekty",
+ "failed": "niepowodzenie",
+ "fileReadRedundancy": "Redundancja odczytów plików",
+ "firstMessage": "Pierwsza wiadomość",
+ "firstRun": "Pierwsze uruchomienie",
+ "frictionRate": "Wskaźnik tarcia",
+ "lastRun": "Ostatnie uruchomienie",
+ "messagesBeforeWork": "Wiadomości przed pracą",
+ "passed": "zaliczono",
+ "promptQuality": "Jakość promptu",
+ "readsPerUniqueFile": "Odczyty/unikalny plik",
+ "snapshot": "migawka",
+ "snapshot_few": "migawki",
+ "snapshot_many": "migawek",
+ "snapshot_one": "migawka",
+ "snapshot_other": "migawek",
+ "startupOverhead": "Narzut przy starcie",
+ "testProgression": "Postęp testów",
+ "title": "Sygnały jakości",
+ "tokensBeforeWork": "Tokeny przed pracą",
+ "totalReads": "Łączna liczba odczytów",
+ "uniqueFiles": "Unikalne pliki",
+ "userMessages": "Wiadomości użytkownika",
+ "percentOfTotal": "% całości"
+ },
+ "tokens": {
+ "apiCalls": "Wywołania API",
+ "cacheCreate": "Utworzenie cache",
+ "cacheEfficiency": "Wydajność cache",
+ "cacheRead": "Odczyt z cache",
+ "cacheReadPct": "% odczytu z cache",
+ "coldStart": "Zimny start",
+ "cost": "Koszt",
+ "input": "Wejście",
+ "model": "Model",
+ "no": "Nie",
+ "output": "Wyjście",
+ "readWriteRatio": "Stosunek O/Z",
+ "title": "Zużycie tokenów",
+ "total": "Razem",
+ "yes": "Tak"
+ },
+ "subagents": {
+ "title": "Podagenci",
+ "metrics": {
+ "count": "Liczba",
+ "totalTokens": "Łączna liczba tokenów",
+ "totalDuration": "Łączny czas trwania",
+ "totalCost": "Koszt całkowity"
+ },
+ "table": {
+ "description": "Opis",
+ "type": "Typ",
+ "tokens": "Tokeny",
+ "duration": "Czas trwania",
+ "cost": "Koszt"
+ }
+ },
+ "overview": {
+ "title": "Przegląd",
+ "yes": "Tak",
+ "no": "Nie",
+ "metrics": {
+ "duration": "Czas trwania",
+ "messages": "Wiadomości",
+ "contextUsage": "Wykorzystanie kontekstu",
+ "compactions": "Kompaktacje",
+ "branch": "Gałąź",
+ "subagents": "Podagenci",
+ "project": "Projekt",
+ "sessionId": "ID sesji"
+ }
+ },
+ "timeline": {
+ "title": "Oś czasu i aktywność",
+ "idleAnalysis": "Analiza bezczynności",
+ "metrics": {
+ "idleGaps": "Przerwy bezczynności",
+ "totalIdle": "Łączna bezczynność",
+ "activeTime": "Czas aktywny",
+ "idlePercent": "% bezczynności"
+ },
+ "modelSwitches": "Zmiany modelu ({{count}})",
+ "modelSwitches_one": "Zmiany modelu ({{count}})",
+ "modelSwitches_other": "Zmiany modelu ({{count}})",
+ "messageNumber": "wiad. #{{number}}",
+ "keyEvents": "Kluczowe zdarzenia",
+ "modelSwitches_few": "Zmiany modelu ({{count}})",
+ "modelSwitches_many": "Zmiany modelu ({{count}})"
+ },
+ "tools": {
+ "title": "Użycie narzędzi",
+ "summary": "{{formattedCount}} łącznych wywołań w {{toolCount}} narzędziach",
+ "columns": {
+ "tool": "Narzędzie",
+ "calls": "Wywołania",
+ "errors": "Błędy",
+ "successPercent": "% sukcesu",
+ "health": "Kondycja"
+ }
+ },
+ "git": {
+ "title": "Aktywność Git",
+ "commits": "Commity",
+ "pushes": "Pushe",
+ "linesAdded": "Dodane linie",
+ "linesRemoved": "Usunięte linie",
+ "branchesCreated": "Utworzone gałęzie"
+ },
+ "friction": {
+ "title": "Sygnały tarcia",
+ "rate": "Wskaźnik tarcia: {{rate}}%",
+ "correctionsCount": "{{count}} korekt",
+ "correctionsCount_one": "{{count}} korekta",
+ "corrections": "Korekty",
+ "thrashingSignals": "Sygnały chaotycznych zmian",
+ "repeatedBashCommands": "Powtórzone polecenia Bash",
+ "reworkedFiles": "Przerabiane pliki (3+ edycje)",
+ "correctionsCount_few": "{{count}} korekty",
+ "correctionsCount_many": "{{count}} korekt",
+ "correctionsCount_other": "{{count}} korekt"
+ },
+ "errors": {
+ "title": "Błędy",
+ "permissionDenied": "Odmowa uprawnień",
+ "messageIndex": "wiad. #{{index}}",
+ "input": "Wejście",
+ "error": "Błąd",
+ "count": "{{count}} błędów",
+ "count_one": "{{count}} błąd",
+ "permissionDenialCount": "{{count}} odmów uprawnień",
+ "permissionDenialCount_one": "{{count}} odmowa uprawnień",
+ "count_few": "{{count}} błędy",
+ "count_many": "{{count}} błędów",
+ "count_other": "{{count}} błędów",
+ "permissionDenialCount_few": "{{count}} odmowy uprawnień",
+ "permissionDenialCount_many": "{{count}} odmów uprawnień",
+ "permissionDenialCount_other": "{{count}} odmów uprawnień"
+ }
+}
diff --git a/src/features/localization/renderer/locales/pl/settings.json b/src/features/localization/renderer/locales/pl/settings.json
new file mode 100644
index 00000000..251f66f6
--- /dev/null
+++ b/src/features/localization/renderer/locales/pl/settings.json
@@ -0,0 +1,994 @@
+{
+ "tabs": {
+ "advanced": {
+ "description": "Opcje dla zaawansowanych użytkowników: eksport/import konfiguracji, przywracanie domyślnych i edycja surowej konfiguracji.",
+ "label": "Zaawansowane"
+ },
+ "general": {
+ "description": "Podstawowe preferencje aplikacji, takie jak motyw, język, gęstość wyświetlania i zachowanie przy starcie.",
+ "label": "Ogólne"
+ },
+ "infoAriaLabel": "Czym jest {{label}}?",
+ "notifications": {
+ "description": "Kontroluj, kiedy i jak otrzymujesz powiadomienia o aktywności agentów, ukończeniu zadań i błędach.",
+ "label": "Powiadomienia"
+ }
+ },
+ "view": {
+ "description": "Zarządzaj preferencjami aplikacji",
+ "loading": "Ładowanie ustawień...",
+ "title": "Ustawienia"
+ },
+ "runtimeProvider": {
+ "actions": {
+ "cancel": "Anuluj",
+ "test": "Testuj"
+ },
+ "defaults": {
+ "allProjects": "Wszystkie projekty",
+ "allProjectsHint": "Testy używają {{project}}. Domyślne obowiązuje, chyba że projekt ma nadpisanie.",
+ "loadingContexts": "Ładowanie kontekstów...",
+ "projectHint": "Zapis nadpisuje tylko {{project}}.",
+ "projectOverrideContext": "Kontekst nadpisania projektu",
+ "scopeDescriptionAllProjects": "Domyślne dla każdego projektu, który nie ma własnego nadpisania OpenCode.",
+ "scopeDescriptionProject": "Nadpisz tylko wybrany projekt. Działające zespoły nie są zmieniane.",
+ "selectProjectContext": "Wybierz kontekst projektu",
+ "selectProjectHint": "Wybierz projekt przed testowaniem modeli lokalnych lub zapisaniem ustawień domyślnych.",
+ "selectValidationContext": "Wybierz kontekst walidacji",
+ "setAllProjectsDefault": "Ustaw domyślne dla wszystkich projektów",
+ "setProjectDefault": "Ustaw domyślne dla projektu",
+ "thisProject": "Ten projekt",
+ "title": "Domyślne OpenCode",
+ "validationContext": "Kontekst walidacji"
+ },
+ "diagnostics": {
+ "copied": "Skopiowano diagnostykę",
+ "copiedShort": "Skopiowano",
+ "copy": "Kopiuj diagnostykę",
+ "hints": "Wskazówki",
+ "likelyCause": "Prawdopodobna przyczyna:",
+ "windowsSymlinkAdminHint": "Windows: uruchom Agent Teams AI jako administrator"
+ },
+ "models": {
+ "alreadyDefault": "To już jest wybrane domyślne OpenCode.",
+ "empty": "Nie znaleziono modeli.",
+ "emptyFree": "Nie znaleziono darmowych modeli.",
+ "emptyRecommended": "Nie znaleziono zalecanych modeli.",
+ "emptyRecommendedFree": "Nie znaleziono zalecanych darmowych modeli.",
+ "freeOnly": "Tylko darmowe",
+ "launchableDescription": "Znane trasy z konfiguracji OpenCode, darmowe wbudowane modele i bieżące domyślne. Trasy lokalne wymagają udanego testu, zanim będą gotowe do uruchamiania zespołów.",
+ "launchableTitle": "Trasy modeli OpenCode",
+ "loadingRoutes": "Ładowanie tras modeli OpenCode...",
+ "noRoutesMatch": "Żadna trasa modelu OpenCode nie pasuje do \"{{query}}\".",
+ "noneReported": "Nie zgłoszono jeszcze żadnych tras modeli OpenCode. Skonfiguruj lokalną trasę w OpenCode lub użyj karty Dostawcy, aby sprawdzić dostawców z katalogu.",
+ "recommendedOnly": "Tylko zalecane",
+ "searchPlaceholder": "Szukaj modeli",
+ "selectProjectBeforeTesting": "Wybierz kontekst projektu przed testowaniem modeli.",
+ "selectProjectBeforeTestingDefaults": "Wybierz kontekst projektu przed testowaniem lub zapisaniem domyślnych OpenCode.",
+ "testInProgress": "Test modelu jest już uruchomiony.",
+ "useInTeamPicker": "Zapisz do selektora zespołu",
+ "validationContextRequired": "Wybierz kontekst walidacji powyżej, aby włączyć Testuj i Ustaw domyślne. Zapis do selektora zespołu przechowuje trasę tylko dla nowych zespołów.",
+ "actionsUnavailable": "Akcje są tymczasowo niedostępne.",
+ "defaultSaveInProgress": "Domyślne OpenCode jest zapisywane.",
+ "routeUnavailableAuth": "Ten dostawca wymaga uwierzytelnienia, zanim ten model będzie mógł być użyty.",
+ "routeUnavailableFailed": "Ta trasa modelu nie przeszła ostatniego testu wykonania.",
+ "routeUnavailableGeneric": "Ta trasa modelu nie może być teraz użyta.",
+ "routeUnavailableUnknown": "Ten model jest bieżącym domyślnym OpenCode, ale nie jest jeszcze dostępny w aktywnym katalogu."
+ },
+ "providers": {
+ "catalog": "Katalog dostawców OpenCode",
+ "countFallback": "Dostawcy OpenCode",
+ "description": "{{count}}. Połączeni i zalecani dostawcy są pokazywani jako pierwsi.",
+ "loadMore": "Załaduj więcej dostawców",
+ "loading": "Ładowanie dostawców OpenCode",
+ "noMatches": "Żaden dostawca nie pasuje do tego wyszukiwania.",
+ "noneReported": "Zarządzane środowisko uruchomieniowe nie zgłosiło żadnych dostawców OpenCode.",
+ "recommended": "Zalecane",
+ "refreshCatalog": "Odśwież katalog",
+ "searchPlaceholder": "Szukaj dostawców",
+ "description_few": "{{count}}. Połączeni i zalecani dostawcy są pokazywani jako pierwsi.",
+ "description_many": "{{count}}. Połączeni i zalecani dostawcy są pokazywani jako pierwsi.",
+ "description_one": "{{count}}. Połączeni i zalecani dostawcy są pokazywani jako pierwsi.",
+ "description_other": "{{count}}. Połączeni i zalecani dostawcy są pokazywani jako pierwsi."
+ },
+ "setup": {
+ "loading": "Ładowanie konfiguracji dostawcy..."
+ },
+ "summary": {
+ "defaultModel": "Domyślny OpenCode: {{model}}",
+ "loading": "Ładowanie zarządzanego środowiska OpenCode, połączonych dostawców i domyślnych modeli...",
+ "source": "Źródło: {{source}}",
+ "title": "Środowisko uruchomieniowe OpenCode"
+ },
+ "tabs": {
+ "models": "Modele",
+ "providers": "Dostawcy"
+ },
+ "modelRoutes": {
+ "searchPlaceholder": "Szukaj tras modeli"
+ },
+ "badges": {
+ "usedInTeamPicker": "Zapisane do selektora zespołu",
+ "free": "darmowe",
+ "local": "lokalne",
+ "configured": "skonfigurowane",
+ "knownRoute": "znana trasa",
+ "connected": "połączone",
+ "verified": "zweryfikowane",
+ "needsTest": "wymaga testu",
+ "failed": "niepowodzenie",
+ "unknown": "nieznane",
+ "default": "domyślne"
+ },
+ "compatibleEndpoint": {
+ "baseUrlPlaceholder": "http://localhost:1234"
+ }
+ },
+ "general": {
+ "agentLanguage": {
+ "description": "Język komunikacji agentów",
+ "descriptionWithDetected": "Język komunikacji agentów (wykryto: {{detected}})",
+ "emptyMessage": "Nie znaleziono języka.",
+ "label": "Język",
+ "searchPlaceholder": "Szukaj języka...",
+ "selectPlaceholder": "Wybierz język...",
+ "title": "Język agentów"
+ },
+ "appLanguage": {
+ "description": "Język interfejsu aplikacji.",
+ "label": "Język",
+ "title": "Język aplikacji"
+ },
+ "appearance": {
+ "autoExpandAIGroups": {
+ "description": "Automatycznie rozwijaj każdą turę odpowiedzi podczas otwierania transkrypcji lub odbierania nowej wiadomości",
+ "label": "Domyślnie rozwijaj odpowiedzi AI"
+ },
+ "nativeTitleBar": {
+ "description": "Użyj domyślnej ramki okna systemowego zamiast niestandardowego paska tytułu",
+ "label": "Użyj natywnego paska tytułu",
+ "restartConfirm": {
+ "confirmLabel": "Uruchom ponownie",
+ "message": "Aplikacja musi zostać uruchomiona ponownie, aby zastosować zmianę paska tytułu. Uruchomić ponownie teraz?",
+ "title": "Wymagane ponowne uruchomienie"
+ }
+ },
+ "theme": {
+ "description": "Wybierz preferowany motyw kolorystyczny",
+ "label": "Motyw",
+ "options": {
+ "dark": "Ciemny",
+ "light": "Jasny",
+ "system": "Systemowy"
+ }
+ },
+ "title": "Wygląd"
+ },
+ "browserAccess": {
+ "serverMode": {
+ "description": "Uruchom serwer HTTP, aby uzyskać dostęp do interfejsu z przeglądarki lub osadzić go w ramkach iframe",
+ "label": "Włącz tryb serwera"
+ },
+ "title": "Dostęp z przeglądarki"
+ },
+ "localClaudeRoot": {
+ "actions": {
+ "selectFolder": "Wybierz folder",
+ "selectFolderManually": "Wybierz folder ręcznie",
+ "useAutoDetect": "Użyj autowykrywania",
+ "useFolder": "Użyj folderu",
+ "usePath": "Użyj ścieżki",
+ "useThisPath": "Użyj tej ścieżki",
+ "useWsl": "Używasz Linux/WSL?"
+ },
+ "confirm": {
+ "noProjectsDir": {
+ "message": "Ten folder nie zawiera katalogu \"projects\". Kontynuować mimo to?",
+ "title": "Nie znaleziono katalogu projektów"
+ },
+ "notClaudeDir": {
+ "message": "Ten folder ma nazwę \"{{folderName}}\", a nie \".claude\". Kontynuować mimo to?",
+ "title": "Wybrany folder nie jest .claude"
+ },
+ "noWslPaths": {
+ "message": "Nie udało się automatycznie znaleźć dystrybucji WSL z danymi Claude. Wybrać folder ręcznie?",
+ "title": "Nie znaleziono ścieżek WSL Claude"
+ },
+ "wslNoProjectsDir": {
+ "message": "\"{{path}}\" nie zawiera katalogu \"projects\". Kontynuować mimo to?",
+ "title": "Brak katalogu projektów w ścieżce WSL"
+ }
+ },
+ "current": {
+ "autoDetected": "Wykryto automatycznie: {{path}}",
+ "autoDetectedPath": "Używanie automatycznie wykrytej ścieżki",
+ "customPath": "Używanie niestandardowej ścieżki",
+ "label": "Bieżący katalog główny lokalny"
+ },
+ "description": "Wybierz, który folder lokalny jest traktowany jako katalog główny danych Claude",
+ "errors": {
+ "detectWslFailed": "Nie udało się wykryć ścieżek katalogu głównego WSL Claude",
+ "loadFailed": "Nie udało się załadować ustawień lokalnego katalogu głównego Claude",
+ "updateFailed": "Nie udało się zaktualizować katalogu głównego Claude"
+ },
+ "title": "Lokalny katalog główny Claude",
+ "wslModal": {
+ "closeAriaLabel": "Zamknij okno ścieżki WSL",
+ "description": "Wykryte dystrybucje WSL i kandydaci na katalog główny Claude",
+ "noProjectsDir": "Nie wykryto katalogu projektów",
+ "title": "Wybierz katalog główny WSL Claude"
+ }
+ },
+ "privacy": {
+ "telemetry": {
+ "description": "Pomóż ulepszyć aplikację, wysyłając anonimowe dane o awariach i wydajności",
+ "label": "Wysyłaj raporty o awariach"
+ },
+ "title": "Prywatność"
+ },
+ "server": {
+ "runningOn": "Działa na",
+ "standaloneModeDescription": "Działa w trybie samodzielnym. Serwer HTTP jest zawsze aktywny. Powiadomienia systemowe nie są dostępne - wyzwalacze powiadomień są rejestrowane tylko w aplikacji.",
+ "title": "Serwer"
+ },
+ "startup": {
+ "launchAtLogin": {
+ "description": "Automatycznie uruchamiaj aplikację przy logowaniu",
+ "label": "Uruchamiaj przy logowaniu"
+ },
+ "showDockIcon": {
+ "description": "Wyświetlaj ikonę aplikacji w docku (macOS)",
+ "label": "Pokaż ikonę w docku"
+ },
+ "title": "Uruchamianie"
+ }
+ },
+ "notifications": {
+ "dev": {
+ "descriptionPrefix": "Powiadomienia mogą nie działać w trybie deweloperskim. macOS identyfikuje aplikację jako \"Electron\" (bundle ID",
+ "descriptionSuffix": ") zamiast produkcyjnej nazwy aplikacji. Sprawdź Ustawienia systemowe > Powiadomienia > Electron, aby zweryfikować uprawnienia.",
+ "title": "Tryb deweloperski"
+ },
+ "ignoredRepositories": {
+ "description": "Powiadomienia z tych repozytoriów będą ignorowane",
+ "empty": "Brak ignorowanych repozytoriów",
+ "selectPlaceholder": "Wybierz repozytorium do zignorowania...",
+ "title": "Ignorowane repozytoria"
+ },
+ "settings": {
+ "enabled": {
+ "description": "Pokazuj powiadomienia systemowe o błędach i zdarzeniach",
+ "label": "Włącz powiadomienia systemowe"
+ },
+ "sound": {
+ "description": "Odtwarzaj dźwięk, gdy pojawiają się powiadomienia",
+ "label": "Odtwarzaj dźwięk"
+ },
+ "subagentErrors": {
+ "description": "Wykrywaj i powiadamiaj o błędach w sesjach podagentów",
+ "label": "Uwzględnij błędy podagentów"
+ },
+ "title": "Ustawienia powiadomień"
+ },
+ "snooze": {
+ "clear": "Wyczyść drzemkę",
+ "description": "Tymczasowo wstrzymaj powiadomienia",
+ "descriptionWithTime": "Uśpione do {{time}}",
+ "label": "Uśpij powiadomienia",
+ "options": {
+ "15": "15 minut",
+ "30": "30 minut",
+ "60": "1 godzina",
+ "120": "2 godziny",
+ "240": "4 godziny",
+ "-1": "Do jutra"
+ },
+ "selectDuration": "Wybierz czas trwania..."
+ },
+ "taskCompletion": {
+ "description": "Otrzymuj natywne powiadomienia systemowe, gdy Claude kończy zadania - dźwięki, banery i plakietki na docku/pasku zadań. Działa na macOS, Linux i Windows.",
+ "installPlugin": "Zainstaluj wtyczkę claude-notifications-go",
+ "title": "Powiadomienia o ukończeniu zadań"
+ },
+ "team": {
+ "allTasksCompleted": {
+ "description": "Powiadamiaj, gdy każde zadanie w zespole osiągnie status ukończone",
+ "label": "Wszystkie zadania ukończone"
+ },
+ "autoResumeOnRateLimit": {
+ "description": "Gdy Claude zgłosi czas resetu, zaplanuj kolejne przypomnienie dla lidera zespołu po zresetowaniu limitu",
+ "label": "Automatyczne wznawianie po limicie zapytań"
+ },
+ "clarifications": {
+ "description": "Pokazuj natywne powiadomienia systemowe, gdy zadanie wymaga Twojej reakcji",
+ "label": "Powiadomienia o doprecyzowaniu zadania"
+ },
+ "crossTeamMessage": {
+ "description": "Powiadamiaj, gdy nadejdzie wiadomość od innego zespołu",
+ "label": "Powiadomienia o wiadomościach między zespołami"
+ },
+ "leadInbox": {
+ "description": "Powiadamiaj, gdy członkowie zespołu wysyłają wiadomości do lidera zespołu",
+ "label": "Powiadomienia o skrzynce lidera"
+ },
+ "statusChange": {
+ "description": "Pokazuj natywne powiadomienia systemowe, gdy zmienia się status zadania",
+ "label": "Powiadomienia o zmianie statusu zadania",
+ "onlySolo": {
+ "description": "Powiadamiaj tylko wtedy, gdy zespół nie ma członków",
+ "label": "Tylko w trybie Solo"
+ },
+ "statuses": {
+ "description": "Które docelowe statusy wyzwalają powiadomienie",
+ "label": "Powiadamiaj o tych statusach",
+ "options": {
+ "approved": "Zatwierdzone",
+ "completed": "Ukończone",
+ "deleted": "Usunięte",
+ "in_progress": "Rozpoczęte",
+ "needsFix": "Wymaga poprawek",
+ "pending": "Oczekujące",
+ "review": "Przegląd"
+ }
+ }
+ },
+ "taskComments": {
+ "description": "Pokazuj natywne powiadomienia systemowe, gdy agenci komentują zadania",
+ "label": "Powiadomienia o komentarzach do zadań"
+ },
+ "taskCreated": {
+ "description": "Pokazuj natywne powiadomienia systemowe, gdy tworzone jest nowe zadanie",
+ "label": "Powiadomienia o utworzeniu zadania"
+ },
+ "teamLaunched": {
+ "description": "Powiadamiaj, gdy zespół zakończy uruchamianie i będzie gotowy",
+ "label": "Powiadomienia o uruchomieniu zespołu"
+ },
+ "title": "Powiadomienia zespołu",
+ "toolApproval": {
+ "description": "Powiadamiaj, gdy narzędzie wymaga Twojej zgody (Zezwól/Odmów), gdy aplikacja nie jest aktywna",
+ "label": "Powiadomienia o zatwierdzaniu narzędzi"
+ },
+ "userInbox": {
+ "description": "Powiadamiaj, gdy członkowie zespołu wysyłają wiadomości do Ciebie",
+ "label": "Powiadomienia o skrzynce użytkownika"
+ }
+ },
+ "test": {
+ "action": "Wyślij test",
+ "description": "Wyślij testowe powiadomienie, aby zweryfikować dostarczanie",
+ "failedToSend": "Nie udało się wysłać testowego powiadomienia",
+ "label": "Powiadomienie testowe",
+ "sending": "Wysyłanie...",
+ "sent": "Wysłano!",
+ "unknownError": "Nieznany błąd"
+ }
+ },
+ "advanced": {
+ "about": {
+ "appIconAlt": "Ikona aplikacji",
+ "description": "Składaj zespoły agentów AI, które pracują autonomicznie i równolegle, komunikują się między zespołami i zarządzają zadaniami na tablicy Kanban - z wbudowanym przeglądem kodu, monitorowaniem procesów na żywo i pełną widocznością narzędzi.",
+ "standalone": "Samodzielny",
+ "title": "O aplikacji",
+ "version": "Wersja {{version}}"
+ },
+ "configuration": {
+ "editConfig": "Edytuj konfigurację",
+ "exportConfig": "Eksportuj konfigurację",
+ "importConfig": "Importuj konfigurację",
+ "openInEditor": "Otwórz w edytorze",
+ "resetToDefaults": "Przywróć domyślne",
+ "title": "Konfiguracja"
+ },
+ "updates": {
+ "available": "Dostępna v{{version}}",
+ "check": "Sprawdź aktualizacje",
+ "checking": "Sprawdzanie...",
+ "ready": "Aktualizacja gotowa",
+ "unknownVersion": "nieznana",
+ "upToDate": "Aktualna"
+ },
+ "appName": "Agent Teams AI"
+ },
+ "configEditor": {
+ "errors": {
+ "loadFailed": "Nie udało się załadować konfiguracji",
+ "saveFailed": "Nie udało się zapisać konfiguracji"
+ },
+ "footer": {
+ "autoSave": "Zmiany są zapisywane automatycznie po edycji",
+ "toClose": "aby zamknąć",
+ "escapeKey": "Esc"
+ },
+ "loading": "Ładowanie konfiguracji...",
+ "status": {
+ "invalidJson": "Nieprawidłowy JSON",
+ "saveFailed": "Zapis nie powiódł się",
+ "saved": "Zapisano",
+ "saving": "Zapisywanie..."
+ },
+ "title": "Edytuj konfigurację"
+ },
+ "notificationTriggers": {
+ "add": {
+ "cancel": "Anuluj",
+ "submit": "Dodaj wyzwalacz",
+ "title": "Dodaj własny wyzwalacz"
+ },
+ "builtin": {
+ "description": "Domyślne wyzwalacze dołączone do aplikacji. Możesz je włączać lub wyłączać i dostosowywać ich wzorce.",
+ "title": "Wbudowane wyzwalacze"
+ },
+ "card": {
+ "builtinBadge": "Wbudowany",
+ "collapseAriaLabel": "Zwiń",
+ "deleteAriaLabel": "Usuń wyzwalacz",
+ "editNameAriaLabel": "Edytuj nazwę",
+ "expandAriaLabel": "Rozwiń"
+ },
+ "color": {
+ "customHexTitle": "Niestandardowy kolor hex",
+ "invalidHex": "Nieprawidłowy hex"
+ },
+ "configuration": {
+ "alertIfGreaterThan": "Alert, jeśli >",
+ "emptyPatternHint": "Pozostaw puste, aby dopasować całą treść. Używa składni wyrażeń regularnych JavaScript.",
+ "errorStatusDescription": "Wyzwala się, gdy wykonanie narzędzia zgłosi błąd (is_error: true).",
+ "tokensUnit": "tokenów",
+ "matchPatternPlaceholder": "np. error|failed|exception"
+ },
+ "custom": {
+ "description": "Twórz własne wyzwalacze, aby otrzymywać powiadomienia o określonych wzorcach lub wynikach narzędzi.",
+ "empty": "Nie skonfigurowano jeszcze żadnych własnych wyzwalaczy.",
+ "title": "Własne wyzwalacze"
+ },
+ "errors": {
+ "invalidRegexPattern": "Nieprawidłowy wzorzec wyrażenia regularnego"
+ },
+ "fields": {
+ "contentType": "Typ treści",
+ "matchField": "Pole dopasowania",
+ "matchPattern": "Wzorzec dopasowania (Regex)",
+ "scopeToolName": "Zakres / Nazwa narzędzia",
+ "scopeToolNameOptional": "Zakres / Nazwa narzędzia (opcjonalnie)",
+ "threshold": "Próg",
+ "tokenType": "Typ tokenów",
+ "triggerNamePlaceholder": "np. Alert niepowodzenia kompilacji",
+ "triggerNameRequired": "Nazwa wyzwalacza *"
+ },
+ "ignorePatterns": {
+ "hint": "Naciśnij Enter, aby dodać. Powiadomienie jest pomijane, jeśli pasuje którykolwiek wzorzec.",
+ "placeholder": "Dodaj regex ignorowania...",
+ "removeAriaLabel": "Usuń wzorzec ignorowania",
+ "summary": "Zaawansowane: Reguły wykluczania",
+ "title": "Wzorce ignorowania (pomiń, jeśli pasuje)"
+ },
+ "options": {
+ "contentTypes": {
+ "text": "Wyjście tekstowe",
+ "thinking": "Myślenie",
+ "tool_result": "Wynik narzędzia",
+ "tool_use": "Użycie narzędzia"
+ },
+ "matchFields": {
+ "args": "Argumenty",
+ "command": "Polecenie",
+ "content": "Treść",
+ "description": "Opis",
+ "file_path": "Ścieżka pliku",
+ "fullInput": "Pełne wejście (JSON)",
+ "glob": "Filtr glob",
+ "new_string": "Nowy ciąg",
+ "old_string": "Stary ciąg",
+ "path": "Ścieżka",
+ "pattern": "Wzorzec",
+ "prompt": "Prompt",
+ "query": "Zapytanie",
+ "skill": "Nazwa umiejętności",
+ "subagent_type": "Typ podagenta",
+ "text": "Treść tekstowa",
+ "thinking": "Treść myślenia",
+ "url": "URL"
+ },
+ "modes": {
+ "content_match": "Wzorzec treści",
+ "error_status": "Błąd wykonania",
+ "token_threshold": "Wysokie zużycie tokenów"
+ },
+ "tokenTypes": {
+ "input": "Tokeny wejściowe",
+ "output": "Tokeny wyjściowe",
+ "total": "Łączna liczba tokenów"
+ },
+ "toolNames": {
+ "anyTool": "Dowolne narzędzie"
+ }
+ },
+ "preview": {
+ "defaultTestTriggerName": "Wyzwalacz testowy",
+ "detectedSuffix": "błędów zostałoby wykrytych",
+ "more": "...i {{count}} więcej",
+ "more_few": "...i {{count}} więcej",
+ "more_many": "...i {{count}} więcej",
+ "more_one": "...i {{count}} więcej",
+ "more_other": "...i {{count}} więcej",
+ "testTrigger": "Testuj wyzwalacz",
+ "testing": "Testowanie...",
+ "title": "Podgląd",
+ "truncatedWarning": "Wyszukiwanie zatrzymano wcześniej (limit czasu lub liczby). Rzeczywista liczba dopasowań może być wyższa.",
+ "viewSession": "Pokaż sesję"
+ },
+ "repositoryScope": {
+ "empty": "Nie wybrano repozytoriów - wyzwalacz dotyczy wszystkich repozytoriów",
+ "hint": "Gdy wybrane są repozytoria, ten wyzwalacz uruchamia się tylko dla błędów w tych repozytoriach.",
+ "placeholder": "Wybierz repozytorium do dodania...",
+ "summary": "Zaawansowane: Zakres repozytoriów",
+ "title": "Ogranicz do repozytoriów (dotyczy tylko wybranych repozytoriów)"
+ },
+ "sections": {
+ "configuration": "Konfiguracja",
+ "dotColor": "Kolor kropki",
+ "generalInfo": "Informacje ogólne",
+ "triggerCondition": "Warunek wyzwalacza"
+ }
+ },
+ "workspaceProfiles": {
+ "actions": {
+ "addProfile": "Dodaj profil",
+ "cancel": "Anuluj",
+ "deleteProfile": "Usuń profil",
+ "editProfile": "Edytuj profil",
+ "save": "Zapisz"
+ },
+ "authMethods": {
+ "agent": "Agent SSH",
+ "auto": "Auto (z konfiguracji SSH)",
+ "password": "Hasło",
+ "privateKey": "Klucz prywatny"
+ },
+ "deleteConfirm": {
+ "confirmLabel": "Usuń",
+ "message": "Czy na pewno chcesz usunąć \"{{name}}\"? Tej operacji nie można cofnąć.",
+ "title": "Usuń profil"
+ },
+ "description": "Zapisuj profile połączeń SSH dla szybkiego ponownego łączenia",
+ "empty": {
+ "description": "Dodaj profil SSH, aby szybko się połączyć",
+ "title": "Brak zapisanych profili"
+ },
+ "form": {
+ "authentication": "Uwierzytelnianie",
+ "host": "Host",
+ "name": "Nazwa",
+ "passwordPrompt": "Podczas łączenia pojawi się prośba o hasło.",
+ "port": "Port",
+ "privateKeyPath": "Ścieżka klucza prywatnego",
+ "username": "Nazwa użytkownika",
+ "namePlaceholder": "Mój serwer",
+ "hostPlaceholder": "nazwa hosta lub IP",
+ "usernamePlaceholder": "użytkownik"
+ },
+ "loading": "Ładowanie profili...",
+ "title": "Profile przestrzeni roboczych"
+ },
+ "connection": {
+ "actions": {
+ "connect": "Połącz",
+ "connecting": "Łączenie...",
+ "disconnect": "Rozłącz",
+ "testConnection": "Testuj połączenie",
+ "testing": "Testowanie..."
+ },
+ "currentMode": {
+ "description": "Źródło danych dla plików sesji",
+ "label": "Bieżący tryb",
+ "local": "Lokalny ({{path}})"
+ },
+ "description": "Połącz się ze zdalną maszyną, aby zobaczyć działające na niej sesje Claude Code",
+ "form": {
+ "authentication": "Uwierzytelnianie",
+ "host": "Host",
+ "password": "Hasło",
+ "port": "Port",
+ "privateKeyPath": "Ścieżka klucza prywatnego",
+ "username": "Nazwa użytkownika",
+ "hostPlaceholder": "nazwa hosta lub alias konfiguracji SSH",
+ "usernamePlaceholder": "użytkownik"
+ },
+ "savedProfiles": {
+ "title": "Zapisane profile"
+ },
+ "ssh": {
+ "title": "Połączenie SSH"
+ },
+ "status": {
+ "connectedTo": "Połączono z {{host}}",
+ "remoteSessions": "Wyświetlanie zdalnych sesji przez SSH"
+ },
+ "test": {
+ "failed": "Połączenie nie powiodło się: {{error}}",
+ "success": "Połączenie udane",
+ "unknownError": "Nieznany błąd"
+ },
+ "title": "Połączenie zdalne"
+ },
+ "providerRuntime": {
+ "actions": {
+ "cancel": "Anuluj",
+ "cancelLogin": "Anuluj logowanie",
+ "connectChatGpt": "Połącz ChatGPT",
+ "delete": "Usuń",
+ "disable": "Wyłącz",
+ "disconnectAccount": "Rozłącz konto",
+ "generateLink": "Wygeneruj link",
+ "openLogin": "Otwórz logowanie",
+ "reconnectAnthropic": "Połącz ponownie Anthropic",
+ "refresh": "Odśwież",
+ "replaceKey": "Zamień klucz",
+ "saveEndpoint": "Zapisz punkt końcowy",
+ "saveKey": "Zapisz klucz",
+ "saving": "Zapisywanie...",
+ "setApiKey": "Ustaw klucz API",
+ "updateKey": "Aktualizuj klucz",
+ "useCode": "Użyj kodu"
+ },
+ "apiKey": {
+ "loadingStoredCredentials": "Ładowanie zapisanych poświadczeń...",
+ "projectScope": "Projekt",
+ "scope": "Zakres",
+ "storedIn": "Przechowywane w {{backend}}",
+ "userScope": "Użytkownik",
+ "storedInApp": "Przechowywane w aplikacji",
+ "providers": {
+ "anthropic": {
+ "name": "Klucz API Anthropic",
+ "title": "Klucz API",
+ "description": "Użyj bezpośredniego klucza API Anthropic dla dostępu rozliczanego przez API. Twoja sesja subskrypcji Anthropic pozostaje dostępna po powrocie.",
+ "placeholder": "sk-ant-..."
+ },
+ "codex": {
+ "name": "Klucz API Codex",
+ "title": "Klucz API",
+ "description": "Użyj klucza API OpenAI jako dodatkowej ścieżki uwierzytelniania Codex. Jeśli przełączysz Codex w tryb klucza API, aplikacja odzwierciedli OPENAI_API_KEY w CODEX_API_KEY dla natywnych uruchomień.",
+ "placeholder": "sk-proj-..."
+ },
+ "gemini": {
+ "name": "Klucz API Gemini",
+ "title": "Dostęp API",
+ "description": "Użyj `GEMINI_API_KEY` dla backendu API Gemini. CLI SDK i ADC go nie wymagają.",
+ "placeholder": "AIza..."
+ }
+ }
+ },
+ "codex": {
+ "account": {
+ "appServer": "Serwer aplikacji: {{state}}",
+ "connected": "Połączono",
+ "description": "Zarządzaj lokalną sesją konta serwera aplikacji Codex, która zasila natywne uruchomienia oparte na subskrypcji.",
+ "loginInProgress": "Logowanie w toku",
+ "plan": "Plan: {{plan}}",
+ "reconnectRequired": "Wymagane ponowne połączenie",
+ "title": "Konto ChatGPT",
+ "hints": {
+ "autoUsesApiKeyUntilChatgpt": "{{message}} Tryb Auto będzie nadal korzystał z wykrytego klucza API do czasu połączenia ChatGPT.",
+ "detectedApiKeyNeedsApiMode": "{{message}} Wykryty klucz API jest używany dopiero po przełączeniu Codex w tryb klucza API.",
+ "localArtifactsNoSession": "Codex CLI obecnie zgłasza brak aktywnego konta ChatGPT. Lokalne dane konta Codex istnieją, ale nie wybrano aktywnej sesji zarządzanej. Limity użycia pojawiają się tutaj dopiero, gdy Codex CLI je wykryje.",
+ "noActiveAccount": "Codex CLI obecnie zgłasza brak aktywnego konta ChatGPT. Limity użycia pojawiają się tutaj dopiero, gdy Codex CLI je wykryje.",
+ "reconnectBeforeUsage": "Codex ma lokalnie wybrane konto ChatGPT, ale bieżąca sesja wymaga ponownego połączenia, zanim limity użycia będą mogły się tutaj załadować.",
+ "usageLimitsAfterReport": "Limity użycia pojawiają się tutaj po tym, jak Codex zgłosi je dla połączonego konta ChatGPT."
+ }
+ },
+ "install": {
+ "checking": "Sprawdzanie",
+ "downloading": "Pobieranie",
+ "installCli": "Zainstaluj Codex CLI",
+ "installing": "Instalowanie",
+ "retryInstall": "Ponów instalację",
+ "title": "Zainstaluj Codex CLI w danych aplikacji"
+ },
+ "rateLimits": {
+ "credits": "Kredyty",
+ "creditsDescription": "Kredyty są pokazywane oddzielnie od opartego na oknach zużycia subskrypcji i mogą być niedostępne dla sesji ChatGPT opartych na planie.",
+ "noSecondaryWindow": "Codex nie zwrócił okna dodatkowego dla tej migawki konta.",
+ "notReported": "Nie zgłoszono",
+ "primaryReset": "Reset podstawowy",
+ "primaryUsed": "Wykorzystano podstawowe",
+ "primaryWindow": "Okno podstawowe",
+ "remainingLeft": "pozostało {{value}}",
+ "remainingUnknown": "Pozostała ilość nieznana",
+ "secondaryReset": "Reset dodatkowy",
+ "secondaryUsed": "Wykorzystano dodatkowe",
+ "secondaryWindow": "Okno dodatkowe",
+ "usedQuotaNote": "Te wartości procentowe pokazują wykorzystany limit, a nie pozostały limit.",
+ "weeklyReset": "Reset tygodniowy",
+ "weeklyUsed": "Wykorzystano tygodniowe",
+ "weeklyUsedOneWeek": "Wykorzystano tygodniowe (1 tydz.)",
+ "weeklyWindow": "Okno tygodniowe",
+ "secondaryFallback": "dodatkowe",
+ "secondaryWindowNote": " Limity tygodniowe są pokazywane oddzielnie w oknie {{window}}.",
+ "usageExplanationGeneric": "Pokazuje wykorzystany limit, a nie pozostały limit.",
+ "usageExplanationWindowOnly": "Pokazuje wykorzystany limit w bieżącym oknie {{window}}, a nie pozostały limit.",
+ "usageExplanationWithRemaining": "Wykorzystano {{used}} - pozostało około {{remaining}} w bieżącym oknie {{window}}."
+ }
+ },
+ "compatibleEndpoint": {
+ "authToken": "Token uwierzytelniający",
+ "authTokenMissing": "Token uwierzytelniający nie jest skonfigurowany.",
+ "baseUrl": "Bazowy URL",
+ "description": "Użyj lokalnego punktu końcowego środowiska uruchomieniowego zgodnego z Anthropic.",
+ "keepSavedToken": "Pozostaw puste, aby zachować zapisany token",
+ "title": "Lokalny / zgodny punkt końcowy",
+ "tokenStatus": "Token {{status}}",
+ "validation": {
+ "baseUrlRequired": "Bazowy URL jest wymagany",
+ "firstPartyAnthropic": "Użyj Auto, Subskrypcji lub klucza API dla natywnego Anthropic",
+ "httpRequired": "Bazowy URL musi używać http:// lub https://",
+ "invalidUrl": "Nieprawidłowy URL",
+ "noCredentials": "Bazowy URL nie może zawierać poświadczeń"
+ },
+ "status": {
+ "endpointDisabledTokenKept": "Punkt końcowy wyłączony. Zapisany token został zachowany.",
+ "endpointSaved": "Punkt końcowy zapisany",
+ "endpointSavedTokenMissing": "Punkt końcowy zapisany. Token uwierzytelniający nie jest skonfigurowany."
+ }
+ },
+ "connection": {
+ "authenticationMethod": "Metoda uwierzytelniania",
+ "descriptions": {
+ "anthropic": "Wybierz, jak sesje Anthropic uruchamiane przez aplikację mają się uwierzytelniać.",
+ "codex": "Wybierz, czy Codex powinien preferować Twoją subskrypcję ChatGPT, czy klucz API, gdy uruchamia się natywne środowisko uruchomieniowe.",
+ "gemini": "Skonfiguruj opcjonalny dostęp API. CLI SDK i ADC są nadal wykrywane automatycznie.",
+ "opencode": "Uwierzytelnianie OpenCode i inwentarz dostawców są zarządzane przez środowisko uruchomieniowe OpenCode."
+ },
+ "method": "Metoda połączenia",
+ "mode": "Tryb: {{mode}}",
+ "selected": "Wybrane",
+ "switching": "Przełączanie...",
+ "title": "Połączenie"
+ },
+ "connectionCards": {
+ "apiKey": {
+ "title": "Klucz API"
+ },
+ "anthropic": {
+ "apiKeyDescription": "Użyj ANTHROPIC_API_KEY i rozliczeń API Anthropic.",
+ "autoDescription": "Użyj domyślnych ustawień środowiska Anthropic i najlepszego dostępnego lokalnego poświadczenia.",
+ "hint": "Auto utrzymuje Anthropic na domyślnym rozwiązywaniu lokalnych poświadczeń.",
+ "subscriptionDescription": "Użyj lokalnej sesji logowania Anthropic i dostępu subskrypcyjnego.",
+ "subscriptionTitle": "Subskrypcja Anthropic"
+ },
+ "auto": {
+ "title": "Auto"
+ },
+ "codex": {
+ "apiKeyDescription": "Użyj rozliczeń OPENAI_API_KEY i CODEX_API_KEY dla natywnych uruchomień Codex.",
+ "autoDescription": "Preferuj konto ChatGPT i subskrypcję. Użyj trybu klucza API tylko w razie potrzeby.",
+ "chatgptDescription": "Użyj połączonego konta ChatGPT i subskrypcji Codex.",
+ "chatgptTitle": "Konto ChatGPT",
+ "hint": "Codex zawsze działa przez natywne środowisko uruchomieniowe. Auto preferuje konto ChatGPT, zanim przejdzie na poświadczenia klucza API."
+ }
+ },
+ "description": "Zarządzaj sposobem łączenia każdego dostawcy oraz, gdy jest to obsługiwane, którego backendu powinno używać środowisko wielomodelowe.",
+ "fastMode": {
+ "defaultOff": "Domyślnie wył.",
+ "description": "Domyślnie stosuj tryb Fast Claude Code dla nowych uruchomień zespołów Anthropic, gdy rozwiązany model i środowisko uruchomieniowe na to pozwalają.",
+ "disabledHint": "Nowe uruchomienia Anthropic pozostają na normalnej prędkości, chyba że zespół wyraźnie włączy tryb Fast.",
+ "enabledHint": "Nowe uruchomienia Anthropic będą domyślnie żądać trybu Fast, gdy rozwiązany model go obsługuje.",
+ "notExposed": "To środowisko uruchomieniowe Anthropic nie udostępnia trybu Fast.",
+ "preferFast": "Preferuj Fast",
+ "title": "Domyślny tryb Fast",
+ "unavailableForRuntime": "Tryb Fast jest obecnie niedostępny dla tego środowiska uruchomieniowego Anthropic."
+ },
+ "alerts": {
+ "anthropicApiKeyMissing": "Wybrano tryb klucza API, ale nie ma jeszcze dostępnego poświadczenia API Anthropic.",
+ "anthropicStoredKeyAvailable": "Dostępny jest zapisany klucz API, ale sesje Anthropic uruchamiane przez aplikację używają go dopiero po przełączeniu w tryb klucza API.",
+ "anthropicSubscriptionMissing": "Wybrano tryb subskrypcji Anthropic. Zaloguj się w Anthropic, aby użyć tego dostawcy.",
+ "authTokenMissing": "Token uwierzytelniający nie jest skonfigurowany. Wiele lokalnych punktów końcowych zgodnych z Anthropic wymaga niepustego tokenu.",
+ "chatgptLoginPending": "Oczekiwanie na zakończenie logowania do konta ChatGPT...",
+ "chatgptLoginStarting": "Rozpoczynanie logowania do ChatGPT...",
+ "codexApiKeyMissing": "Wybrano tryb klucza API, ale nie ma jeszcze dostępnego poświadczenia OPENAI_API_KEY ani CODEX_API_KEY.",
+ "codexLocalArtifactsNoSession": "Codex CLI obecnie nie ma aktywnego konta ChatGPT. Lokalne dane konta Codex istnieją, ale nie wybrano aktywnej sesji zarządzanej.",
+ "codexNeedsReconnect": "Codex ma lokalnie wybrane konto ChatGPT, ale bieżąca sesja wymaga ponownego połączenia.",
+ "codexNoChatgptAccount": "Codex CLI obecnie nie ma aktywnego konta ChatGPT. Połącz ChatGPT, aby użyć swojej subskrypcji.",
+ "codexNoCredential": "Nie ma jeszcze dostępnego konta ChatGPT ani klucza API.",
+ "geminiApiUnavailable": "API Gemini jest obecnie niedostępne. Skonfiguruj tutaj `GEMINI_API_KEY` lub użyj prawidłowych poświadczeń Google ADC.",
+ "withApiKeyFallback": "{{message}} Przełącz w tryb klucza API, aby użyć wykrytego klucza API."
+ },
+ "authModeDescriptions": {
+ "anthropic": {
+ "apiKey": "Wymuś, aby sesje Anthropic uruchamiane przez aplikację używały poświadczenia klucza API.",
+ "auto": "Użyj domyślnego zachowania środowiska uruchomieniowego. Zapisane klucze API w tej aplikacji są używane dopiero po przełączeniu w tryb klucza API.",
+ "oauth": "Wymuś, aby sesje Anthropic uruchamiane przez aplikację używały lokalnej sesji subskrypcji Anthropic."
+ },
+ "codex": {
+ "apiKey": "Wymuś, aby natywne uruchomienia Codex używały rozliczeń OPENAI_API_KEY / CODEX_API_KEY.",
+ "auto": "Preferuj konto ChatGPT, gdy jest dostępne. Przejdź w tryb klucza API tylko w razie potrzeby.",
+ "chatgpt": "Wymuś, aby natywne uruchomienia Codex używały połączonego konta ChatGPT i subskrypcji."
+ }
+ },
+ "progress": {
+ "applyingConnectionChanges": "Stosowanie zmian połączenia...",
+ "refreshingProviderStatus": "Odświeżanie statusu dostawcy...",
+ "savingCompatibleEndpoint": "Zapisywanie zgodnego punktu końcowego...",
+ "switchingAnthropicSubscription": "Przełączanie na subskrypcję Anthropic...",
+ "switchingApiKey": "Przełączanie na klucz API...",
+ "switchingApiKeyMode": "Przełączanie w tryb klucza API...",
+ "switchingAuto": "Przełączanie na Auto...",
+ "switchingChatgpt": "Przełączanie w tryb konta ChatGPT..."
+ },
+ "provider": "Dostawca",
+ "runtime": {
+ "descriptions": {
+ "anthropic": "Anthropic nie ma obecnie oddzielnego selektora backendu środowiska uruchomieniowego.",
+ "codex": "Codex działa teraz tylko przez natywną ścieżkę środowiska uruchomieniowego.",
+ "gemini": "Wybierz, którego backendu środowiska Gemini ma używać tryb wielomodelowy.",
+ "opencode": "OpenCode używa własnego zarządzanego hosta środowiska uruchomieniowego. Wersja desktopowa udostępnia obecnie tylko status."
+ },
+ "title": "Środowisko uruchomieniowe",
+ "updating": "Aktualizowanie środowiska uruchomieniowego..."
+ },
+ "runtimeSummary": "Środowisko uruchomieniowe: {{runtime}}",
+ "status": {
+ "configured": "skonfigurowane",
+ "enabled": "Włączone",
+ "notConfigured": "Nie skonfigurowane",
+ "notSet": "nie ustawione",
+ "off": "Wył.",
+ "unknown": "Nieznane"
+ },
+ "title": "Ustawienia dostawcy",
+ "usage": {
+ "apiKey": "Używanie klucza API",
+ "apiKeyRequired": "Wymagany klucz API",
+ "compatibleEndpoint": "Używanie zgodnego punktu końcowego",
+ "notConnected": "Nie połączono",
+ "usingMethod": "Używanie {{method}}"
+ },
+ "errors": {
+ "apiKeyDeletedRefreshFailed": "Klucz API usunięty, ale nie udało się odświeżyć statusu dostawcy.",
+ "apiKeySavedRefreshFailed": "Klucz API zapisany, ale nie udało się odświeżyć statusu dostawcy.",
+ "connectionUpdatedRefreshFailed": "Połączenie zaktualizowane, ale nie udało się odświeżyć statusu dostawcy.",
+ "deleteApiKey": "Nie udało się usunąć klucza API",
+ "disableEndpoint": "Nie udało się wyłączyć punktu końcowego",
+ "endpointDisabledRefreshFailed": "Punkt końcowy wyłączony, ale nie udało się odświeżyć statusu dostawcy.",
+ "endpointSavedRefreshFailed": "Punkt końcowy zapisany, ale nie udało się odświeżyć statusu dostawcy.",
+ "refreshCodexAccount": "Nie udało się odświeżyć konta Codex",
+ "saveApiKey": "Nie udało się zapisać klucza API",
+ "saveEndpoint": "Nie udało się zapisać punktu końcowego",
+ "updateAnthropicFastMode": "Nie udało się zaktualizować trybu Fast Anthropic",
+ "updateConnection": "Nie udało się zaktualizować połączenia",
+ "updateRuntimeBackend": "Nie udało się zaktualizować backendu środowiska uruchomieniowego",
+ "apiKeyRequired": "Klucz API jest wymagany"
+ },
+ "connectionUi": {
+ "authMode": {
+ "auto": "Auto",
+ "oauth": "Subskrypcja / OAuth",
+ "chatgpt": "Konto ChatGPT",
+ "apiKey": "Klucz API",
+ "anthropicSubscription": "Subskrypcja Anthropic"
+ },
+ "authMethod": {
+ "apiKey": "Klucz API",
+ "apiKeyHelper": "Asystent klucza API",
+ "oauth": "OAuth",
+ "claudeSubscription": "Subskrypcja Claude",
+ "geminiCli": "Gemini CLI",
+ "googleAccount": "Konto Google",
+ "serviceAccount": "konto usługi"
+ },
+ "runtime": {
+ "codexNative": "Codex natywny",
+ "currentRuntime": "Bieżące środowisko uruchomieniowe",
+ "selectedRuntime": "Wybrane środowisko uruchomieniowe",
+ "summary": "{{prefix}}: {{runtime}}"
+ },
+ "status": {
+ "checking": "Sprawdzanie...",
+ "modelsAvailable": "Dostępne modele",
+ "checked": "Sprawdzono",
+ "providerActivity": "Aktywność dostawcy",
+ "notConnected": "Nie połączono",
+ "startingChatGptLogin": "Rozpoczynanie logowania do ChatGPT...",
+ "waitingForChatGptLogin": "Oczekiwanie na logowanie do konta ChatGPT...",
+ "chatGptVerificationDegraded": "Wykryto konto ChatGPT - weryfikacja konta jest obecnie ograniczona.",
+ "chatGptAccountReady": "Konto ChatGPT gotowe",
+ "apiKeyReady": "Klucz API gotowy",
+ "codexLocalAccountNeedsReconnect": "Codex ma lokalnie wybrane konto ChatGPT, ale bieżąca sesja wymaga ponownego połączenia.",
+ "codexNoActiveManagedSession": "Codex CLI zgłasza brak aktywnego logowania do ChatGPT. Lokalne dane konta Codex istnieją, ale nie wybrano aktywnej sesji zarządzanej.",
+ "codexNoActiveChatGptLogin": "Codex CLI zgłasza brak aktywnego logowania do ChatGPT",
+ "connectChatGptForSubscription": "Połącz konto ChatGPT, aby użyć subskrypcji Codex.",
+ "codexNativeReady": "Codex natywny gotowy",
+ "codexNativeUnavailable": "Codex natywny niedostępny",
+ "unavailableInCurrentRuntime": "Niedostępne w bieżącym środowisku uruchomieniowym",
+ "connectedViaApiKey": "Połączono przez klucz API",
+ "apiKeyConfiguredNotVerified": "Klucz API skonfigurowany, ale jeszcze niezweryfikowany",
+ "apiKeyModeMissingCredential": "Wybrano tryb klucza API, ale nie skonfigurowano żadnego klucza API",
+ "connectedVia": "Połączono przez {{method}}",
+ "unableToVerify": "Nie można zweryfikować"
+ },
+ "mode": {
+ "selectedAuth": "Wybrane uwierzytelnianie: {{authMode}}",
+ "preferredAuth": "Preferowane uwierzytelnianie: {{authMode}}"
+ },
+ "credential": {
+ "apiKeyConfigured": "Klucz API jest skonfigurowany",
+ "savedApiKeyAvailable": "Zapisany klucz API dostępny w Zarządzaniu",
+ "apiKeyAlsoConfigured": "Klucz API również skonfigurowany w Zarządzaniu",
+ "apiKeyConfiguredInManage": "Klucz API jest skonfigurowany w Zarządzaniu",
+ "apiKeyFallbackInManage": "Klucz API również dostępny w Zarządzaniu jako rozwiązanie awaryjne",
+ "availableAsFallback": "{{summary}} - dostępne jako rozwiązanie awaryjne",
+ "savedApiKeyAvailableIfSwitch": "Zapisany klucz API dostępny w Zarządzaniu, jeśli przełączysz w tryb klucza API",
+ "availableIfSwitch": "{{summary}} - dostępne, jeśli przełączysz w tryb klucza API",
+ "autoWillUseUntilChatGpt": "{{summary}} - Auto będzie tego używać do czasu połączenia ChatGPT"
+ },
+ "actions": {
+ "connect": "Połącz",
+ "connectAnthropic": "Połącz Anthropic",
+ "connectChatGpt": "Połącz ChatGPT",
+ "disconnect": "Rozłącz",
+ "openLogin": "Otwórz logowanie"
+ },
+ "disconnect": {
+ "anthropicTitle": "Rozłączyć subskrypcję Anthropic?",
+ "anthropic": "Spowoduje to usunięcie lokalnej sesji subskrypcji Anthropic ze środowiska uruchomieniowego Claude CLI.",
+ "anthropicWithApiKey": "Spowoduje to usunięcie lokalnej sesji subskrypcji Anthropic ze środowiska uruchomieniowego Claude CLI. Zapisane klucze API w Zarządzaniu pozostają dostępne.",
+ "geminiTitle": "Rozłączyć Gemini CLI?",
+ "gemini": "Spowoduje to wyczyszczenie metadanych lokalnej sesji Gemini CLI. Zewnętrzne poświadczenia ADC i zapisane klucze API nie są usuwane."
+ }
+ }
+ },
+ "cliRuntime": {
+ "actions": {
+ "checkForUpdates": "Sprawdź aktualizacje",
+ "checking": "Sprawdzanie...",
+ "extensions": "Rozszerzenia",
+ "installRuntime": "Zainstaluj {{runtime}}",
+ "manage": "Zarządzaj",
+ "recheck": "Sprawdź ponownie",
+ "reinstallRuntime": "Zainstaluj ponownie {{runtime}}",
+ "retry": "Ponów",
+ "update": "Aktualizuj"
+ },
+ "installer": {
+ "checkingLatest": "Sprawdzanie najnowszej wersji...",
+ "downloading": "Pobieranie...",
+ "failed": "Instalacja nie powiodła się",
+ "installed": "Zainstalowano v{{version}}",
+ "installing": "Instalowanie...",
+ "latest": "najnowsza",
+ "verifying": "Weryfikacja sumy kontrolnej..."
+ },
+ "labels": {
+ "multimodel": "Wielomodelowy"
+ },
+ "loading": {
+ "aiProviders": "Sprawdzanie dostawców AI...",
+ "claudeCli": "Sprawdzanie Claude CLI..."
+ },
+ "provider": {
+ "backend": "Backend: {{backend}}",
+ "loadingModels": "Ładowanie modeli...",
+ "modelsUnavailable": "Modele niedostępne dla tej kompilacji środowiska uruchomieniowego",
+ "runtime": "Środowisko uruchomieniowe: {{runtime}}"
+ },
+ "providerTerminal": {
+ "authFailed": "Uwierzytelnianie nie powiodło się",
+ "authUpdated": "Uwierzytelnianie zaktualizowane",
+ "loggedOut": "Dostawca wylogowany",
+ "login": "Zaloguj się",
+ "logout": "Wyloguj się",
+ "logoutFailed": "Wylogowanie nie powiodło się"
+ },
+ "status": {
+ "configuredNotFound": "Nie znaleziono skonfigurowanego środowiska {{runtime}}.",
+ "foundButFailed": "Znaleziono {{runtime}}, ale nie udało się go uruchomić",
+ "healthCheckFailed": "Skonfigurowane środowisko {{runtime}} nie przeszło kontroli kondycji przy starcie.",
+ "notInstalled": "{{runtime}} nie jest zainstalowane"
+ },
+ "title": "Środowisko uruchomieniowe CLI"
+ },
+ "cliStatus": {
+ "versionUpgrade": "v{{current}} -> v{{latest}}"
+ }
+}
diff --git a/src/features/localization/renderer/locales/pl/team.json b/src/features/localization/renderer/locales/pl/team.json
new file mode 100644
index 00000000..53b99e72
--- /dev/null
+++ b/src/features/localization/renderer/locales/pl/team.json
@@ -0,0 +1,2487 @@
+{
+ "activity": {
+ "actions": {
+ "createTaskFromMessage": "Utwórz zadanie z wiadomości",
+ "editMessage": "Edytuj wiadomość",
+ "expandMessage": "Rozwiń wiadomość",
+ "replyToMessage": "Odpowiedz na wiadomość",
+ "restartTeam": "Uruchom ponownie zespół"
+ },
+ "authError": {
+ "description": "Uwierzytelnianie nie powiodło się. Ponowne uruchomienie zespołu odświeży sesję i może rozwiązać ten problem. Jeśli problem nie ustępuje, sprawdź swoje poświadczenia API lub spróbuj ponownie później."
+ },
+ "automation": {
+ "reviewPickup": "Poproszono członka zespołu o przejęcie przeglądu",
+ "stallNudge": "Poproszono członka zespołu o kontynuowanie zablokowanego zadania",
+ "workSyncBody": "Poproszono członka zespołu o zsynchronizowanie bieżącej pracy"
+ },
+ "badges": {
+ "automation": "automatyzacja",
+ "bootstrap": "bootstrap",
+ "command": "polecenie",
+ "comment": "Komentarz",
+ "live": "na żywo",
+ "note": "notatka",
+ "rateLimited": "Limit zapytań",
+ "restart": "ponowne uruchomienie",
+ "result": "wynik",
+ "session": "sesja",
+ "stallNudge": "przypomnienie o zablokowaniu",
+ "start": "start",
+ "workSync": "synchronizacja pracy",
+ "agentError": "Błąd agenta",
+ "apiError": "Błąd API"
+ },
+ "bootstrap": {
+ "acknowledged": "Bootstrap potwierdzony",
+ "restarting": "Ponowne uruchamianie członka zespołu",
+ "starting": "Uruchamianie członka zespołu"
+ },
+ "rawJson": "Surowy JSON",
+ "unread": "Nieprzeczytane",
+ "thoughts": {
+ "count": "{{count}} myśli",
+ "count_one": "{{count}} myśl",
+ "expand": "Rozwiń myśli",
+ "showMore": "Pokaż więcej",
+ "showLess": "Pokaż mniej",
+ "count_few": "{{count}} myśli",
+ "count_many": "{{count}} myśli",
+ "count_other": "{{count}} myśli",
+ "toolSummary": "🔧 {{summary}}",
+ "titleForMember": "{{name}} - myśli"
+ },
+ "timeline": {
+ "loadingMessages": "Ładowanie wiadomości...",
+ "noMessages": "Brak wiadomości",
+ "emptyHint": "Wyślij wiadomość do członka, aby zobaczyć aktywność.",
+ "newSession": "Nowa sesja",
+ "olderCount": "+{{count}} starszych",
+ "showMore": "Pokaż {{count}} więcej",
+ "showAll": "Pokaż wszystkie",
+ "olderCount_one": "+{{count}} starsza",
+ "olderCount_few": "+{{count}} starsze",
+ "olderCount_many": "+{{count}} starszych",
+ "olderCount_other": "+{{count}} starszych"
+ },
+ "pendingReplies": {
+ "title": "Oczekiwanie na odpowiedzi",
+ "openMember": "Otwórz członka",
+ "messageSentAwaitingReply": "Wiadomość wysłana, oczekiwanie na odpowiedź",
+ "awaitingReply": "oczekiwanie na odpowiedź",
+ "externalTeam": "zespół zewnętrzny",
+ "crossTeamAwaitingReply": "Wiadomość między zespołami wysłana, oczekiwanie na odpowiedź",
+ "user": "użytkownik",
+ "awaitingApproval": "oczekiwanie na zatwierdzenie"
+ },
+ "reply": {
+ "replyingTo": "Odpowiedź do",
+ "action": "Odpowiedz"
+ },
+ "activeTasks": {
+ "inProgress": "W toku",
+ "expandInProgress": "Rozwiń w toku",
+ "collapseInProgress": "Zwiń w toku",
+ "reviewing": "przeglądanie",
+ "workingOn": "pracuje nad"
+ },
+ "expandDialog": {
+ "description": "Rozwinięty widok wiadomości"
+ }
+ },
+ "create": {
+ "actions": {
+ "create": "Utwórz",
+ "creating": "Tworzenie...",
+ "openExisting": "Otwórz istniejący zespół",
+ "skipPreflightAndCreate": "Pomiń sprawdzenie wstępne i utwórz"
+ },
+ "conflict": {
+ "description": "Uruchamianie dwóch zespołów w tym samym katalogu jest ryzykowne - mogą one kolidować przy edycji tych samych plików. Rozważ użycie innego katalogu lub git worktree dla izolacji.",
+ "title": "Inny zespół \"{{team}}\" już działa dla tego katalogu roboczego",
+ "workingDirectory": "Katalog roboczy:"
+ },
+ "description": {
+ "copy": "Utwórz nowy zespół na podstawie istniejącego.",
+ "create": "Skonfiguruj swój zespół i wybierz, jak się uruchamia."
+ },
+ "errors": {
+ "nameExists": "Nazwa zespołu już istnieje",
+ "nameLaunching": "Zespół o tej nazwie jest obecnie uruchamiany",
+ "createConfigFailed": "Nie udało się utworzyć konfiguracji zespołu",
+ "loadProjectsFailed": "Nie udało się załadować projektów"
+ },
+ "fields": {
+ "color": "Kolor (opcjonalnie)",
+ "description": "Opis (opcjonalnie)",
+ "prompt": "Prompt dla lidera zespołu (opcjonalnie)",
+ "teamName": "Nazwa zespołu"
+ },
+ "launchAfterCreate": {
+ "description": "Uruchom zespół natychmiast przez lokalne Claude CLI.",
+ "label": "Uruchom polecenie po utworzeniu"
+ },
+ "localOnly": "Dostępne tylko w trybie lokalnym Electron.",
+ "onDisk": "Na dysku:",
+ "placeholders": {
+ "description": "Krótki opis celu zespołu",
+ "prompt": "Instrukcje dla lidera zespołu podczas przygotowywania..."
+ },
+ "saved": "Zapisano",
+ "solo": {
+ "description": "Uruchomiony zostanie tylko lider zespołu (proces główny) - żadni członkowie zespołu nie zostaną utworzeni. Działa jak zwykła sesja agenta w wybranym środowisku uruchomieniowym (Claude Code, Codex, OpenCode, Gemini), ale z dostępem do tablicy zadań do planowania. Oszczędza tokeny, unikając narzutu koordynacji członków zespołu. Możesz dodać członków później z ustawień zespołu.",
+ "label": "Zespół solo"
+ },
+ "title": {
+ "copy": "Kopiuj zespół",
+ "create": "Utwórz zespół"
+ },
+ "optional": {
+ "launchSettingsTitle": "Opcjonalne ustawienia uruchamiania",
+ "launchSettingsDescription": "Prompt, bezpieczeństwo i nadpisania CLI znajdują się tutaj, gdy ich potrzebujesz.",
+ "teamDetailsTitle": "Opcjonalne szczegóły zespołu",
+ "teamDetailsDescription": "Utrzymuj domyślny przepływ zwięzłym i otwieraj to tylko wtedy, gdy chcesz dodatkowego kontekstu lub niestandardowego koloru."
+ },
+ "prepare": {
+ "unsupportedPreload": "Bieżąca wersja preload nie obsługuje team:prepareProvisioning. Uruchom ponownie aplikację deweloperską.",
+ "selectWorkingDirectory": "Wybierz katalog roboczy, aby zweryfikować środowisko uruchamiania.",
+ "someProvidersNeedAttention": "Niektórzy wybrani dostawcy wymagają uwagi.",
+ "readyWithNotes": "Wszyscy wybrani dostawcy są gotowi, z uwagami.",
+ "ready": "Wszyscy wybrani dostawcy są gotowi.",
+ "failed": "Nie udało się przygotować wybranych dostawców",
+ "checkingProviders": "Sprawdzanie wybranych dostawców...",
+ "preparingEnvironment": "Przygotowywanie środowiska...",
+ "selectedProvidersReadyWithNotes": "Wybrani dostawcy gotowi (z uwagami)",
+ "selectedProvidersReady": "Wybrani dostawcy gotowi"
+ },
+ "validation": {
+ "nameMustContainLetterOrDigit": "Nazwa musi zawierać co najmniej jedną literę lub cyfrę",
+ "nameTooLong": "Nazwa jest za długa (maks. 128 znaków)",
+ "selectWorkingDirectory": "Wybierz katalog roboczy (cwd)",
+ "memberNameRequired": "Nazwa członka nie może być pusta",
+ "memberNameInvalid": "Nazwa członka musi zaczynać się od znaku alfanumerycznego, używać tylko [a-zA-Z0-9._-], maks. 128 znaków",
+ "memberNamesUnique": "Nazwy członków muszą być unikalne",
+ "openCodeLeadModelRequired": "Lider OpenCode wymaga wybranego modelu.",
+ "openCodeTeammateRequired": "Lider OpenCode wymaga co najmniej jednego członka zespołu OpenCode.",
+ "teamLaunching": "Zespół jest obecnie uruchamiany",
+ "teamNameExists": "Nazwa zespołu już istnieje",
+ "checkFormFields": "Sprawdź pola formularza"
+ }
+ },
+ "editTeam": {
+ "actions": {
+ "cancel": "Anuluj",
+ "save": "Zapisz"
+ },
+ "addMemberLockReason": "Użyj dedykowanego okna Dodaj członka, aby dodać nowych członków zespołu, gdy zespół jest aktywny.",
+ "description": "Zmień nazwę zespołu, opis i kolor",
+ "errors": {
+ "changesSavedRefreshFailed": "Zmiany zespołu zostały zapisane, ale nie udało się odświeżyć najnowszego widoku: {{message}}",
+ "liveRenameBlocked": "Istniejących członków zespołu nie można zmieniać nazwy, gdy zespół jest aktywny. zmieniono nazwę: {{names}}",
+ "memberNameEmpty": "Nazwa członka nie może być pusta",
+ "memberNameInvalid": "Nazwa członka musi zaczynać się od znaku alfanumerycznego, używać tylko [a-zA-Z0-9._-], maks. 128 znaków",
+ "memberNameNumericSuffix": "Nazwa członka \"{{name}}\" jest niedozwolona (zarezerwowana dla auto-sufiksu Claude CLI). Użyj zamiast tego \"{{base}}\".",
+ "memberNameReserved": "Nazwa członka \"{{name}}\" jest zarezerwowana",
+ "memberNamesUnique": "Nazwy członków muszą być unikalne przed zapisaniem",
+ "newLiveTeammates": "Dodawaj nowych członków zespołu z dedykowanego okna Dodaj członka, gdy zespół jest aktywny. Edycja zespołu obsługuje tylko aktualizowanie istniejących członków.",
+ "provisioning": "Ustawień zespołu nie można edytować, gdy przygotowywanie jest wciąż w toku. Poczekaj na zakończenie uruchamiania, a następnie spróbuj ponownie.",
+ "restartFailedMany": "Zespół zapisany, ale nie udało się ponownie uruchomić tych członków zespołu: {{failures}}",
+ "restartFailedOne": "Zespół zapisany, ale nie udało się ponownie uruchomić tego członka zespołu: {{failures}}",
+ "saveFailed": "Nie udało się zapisać",
+ "settingsChanged": "Ustawienia zespołu zmieniły się, gdy to okno było otwarte. Otwórz je ponownie i przejrzyj najnowszy stan przed zapisaniem.",
+ "settingsSavedMembersAndRefreshFailed": "Ustawienia zespołu zostały zapisane, ale zmiany członków nie powiodły się: {{message}}. Odświeżanie również się nie powiodło: {{refreshError}}",
+ "settingsSavedMembersFailed": "Ustawienia zespołu zostały zapisane, ale zmiany członków nie powiodły się: {{message}}",
+ "settingsSavedRefreshFailed": "Ustawienia zespołu zostały zapisane, ale nie udało się odświeżyć najnowszego widoku: {{message}}",
+ "teamNameEmpty": "Nazwa zespołu nie może być pusta",
+ "unsupportedMixedPrimaryMutation": "Edycje na żywo członków zespołu należących do głównego procesu w mieszanych zespołach OpenCode nie są jeszcze obsługiwane. Zatrzymaj zespół, edytuj skład, a następnie uruchom ponownie. Dotyczy: {{names}}"
+ },
+ "fields": {
+ "colorOptional": "Kolor (opcjonalnie)",
+ "description": "Opis",
+ "name": "Nazwa"
+ },
+ "memberRestartWarning": "Zapisanie spowoduje ponowne uruchomienie tego członka zespołu, aby zastosować zmiany roli, przepływu pracy, izolacji worktree, dostawcy, modelu, wysiłku lub dostępu MCP.",
+ "notices": {
+ "liveRenameBlocked": "Zapis na żywo jest zablokowany, ponieważ zmieniono nazwy istniejących członków zespołu. Cofnij te zmiany tożsamości lub najpierw zatrzymaj zespół.",
+ "newLiveTeammates": "Nowych członków zespołu nie można dodawać z Edycji zespołu, gdy zespół jest aktywny. Użyj zamiast tego okna Dodaj członka.",
+ "provisioning": "Przygotowywanie zespołu jest wciąż w toku. Edycja jest tymczasowo zablokowana, dopóki uruchamianie się nie zakończy.",
+ "restartMany": "Zapisanie spowoduje ponowne uruchomienie lub przeładowanie tych członków zespołu, aby zastosować zmiany roli, przepływu pracy, izolacji worktree, dostawcy, modelu, wysiłku lub dostępu MCP: {{names}}.",
+ "restartOne": "Zapisanie spowoduje ponowne uruchomienie lub przeładowanie tego członka zespołu, aby zastosować zmiany roli, przepływu pracy, izolacji worktree, dostawcy, modelu, wysiłku lub dostępu MCP: {{names}}.",
+ "unsupportedMixedPrimaryMutation": "Edycje/usunięcia na żywo dla członków zespołu należących do głównego procesu w mieszanych zespołach OpenCode wymagają zatrzymania i ponownego uruchomienia zespołu: {{names}}."
+ },
+ "placeholders": {
+ "description": "Opis zespołu (opcjonalnie)",
+ "teamName": "Nazwa zespołu"
+ },
+ "teamLead": {
+ "changeRuntime": "Zmień środowisko uruchomieniowe lidera",
+ "changeRuntimeDescription": "Otwórz Uruchom ponownie zespół, aby zmienić dostawcę, model lub wysiłek lidera.",
+ "modelLockReason": "Środowisko uruchomieniowe lidera zespołu jest zarządzane z Uruchom ponownie zespół.",
+ "readOnlyHint": "Nazwa i rola lidera zespołu pozostają tutaj tylko do odczytu. Otwórz panel środowiska uruchomieniowego w wierszu lidera, aby zmienić dostawcę, model lub wysiłek.",
+ "role": "Lider zespołu"
+ },
+ "title": "Edytuj zespół"
+ },
+ "memberDraft": {
+ "actions": {
+ "remove": "Usuń członka",
+ "removeAria": "Usuń {{name}}",
+ "restore": "Przywróć członka",
+ "restoreAria": "Przywróć {{name}}"
+ },
+ "anthropicContext": {
+ "defaultSetting": "domyślne ustawienie kontekstu",
+ "description": "Kontekst Anthropic obowiązuje w całym zespole dla tego uruchomienia: {{mode}}. Użyj pola wyboru Ogranicz kontekst w panelu środowiska uruchomieniowego lidera, aby go zmienić.",
+ "limitEnabled": "Limit 200K włączony"
+ },
+ "mcp": {
+ "buttonInherit": "Dziedziczenie MCP",
+ "buttonScopes": "Zakresy MCP",
+ "chooseScopes": "Wybierz zakresy",
+ "inheritLead": "Dziedzicz od lidera",
+ "lockedInfo": "Tylko Agent Teams MCP jest włączone dla wszystkich członków zespołu. Ten członek zespołu uruchomi się tylko z serwerem Agent Teams.",
+ "mode": "Tryb MCP",
+ "scopes": {
+ "local": "lokalny",
+ "project": "projekt",
+ "user": "użytkownik"
+ },
+ "serverNames": "Nazwy serwerów",
+ "settingInfo": "Agent Teams MCP uruchamia tego członka zespołu tylko z serwerem Agent Teams. Tryby zakresu i listy dozwolonych dotyczą tylko tego uruchomienia członka zespołu.",
+ "strictAllowlist": "Ścisła lista dozwolonych",
+ "tooltip": "{{label}}: Kontroluj politykę dziedziczenia MCP tego członka",
+ "agentTeamsMcp": "Agent Teams MCP"
+ },
+ "model": {
+ "ariaLabel": "dostawca {{provider}}, {{model}}",
+ "currentLeadRuntime": "Bieżące środowisko uruchomieniowe lidera",
+ "default": "Domyślny",
+ "inheritedTooltip": "Dostawca, model i wysiłek są dziedziczone od lidera, gdy synchronizacja jest włączona.",
+ "leadSuffix": "{{label}} (lider)",
+ "liveDisabled": "Zmiany dostawcy, modelu i wysiłku są wyłączone, gdy zespół jest aktywny. Połącz ponownie zespół, aby zastosować je bezpiecznie.",
+ "lockedActionFallback": "Zmiany środowiska uruchomieniowego lidera otwierają Uruchom ponownie zespół, gdzie można zaktualizować dostawcę, model i wysiłek.",
+ "restartWholeTeam": "Zapisanie tych zmian środowiska uruchomieniowego ponownie uruchamia cały zespół."
+ },
+ "nameAria": "Nazwa członka {{index}}",
+ "nameFallback": "członek {{index}}",
+ "noRole": "Brak roli",
+ "removed": "Usunięto",
+ "workflow": {
+ "addTooltip": "Dodaj przepływ pracy członka zespołu",
+ "editTooltip": "Edytuj przepływ pracy członka zespołu",
+ "label": "Przepływ pracy (opcjonalnie)",
+ "placeholder": "Jak ten agent powinien się zachowywać, wchodzić w interakcje z innymi...",
+ "saved": "Zapisano"
+ },
+ "worktree": {
+ "description": "Uruchom tego członka zespołu w oddzielnym git worktree. Zastosowanie/odrzucenie zmian dotyczy tego worktree, a nie przestrzeni roboczej lidera.",
+ "label": "Worktree"
+ },
+ "addMembers": {
+ "title": "Dodaj członków",
+ "description": "Dodaj nowych członków do {{teamName}}"
+ },
+ "placeholders": {
+ "name": "nazwa-czlonka",
+ "mcpServers": "github, sentry"
+ }
+ },
+ "detail": {
+ "actions": {
+ "add": "Dodaj",
+ "cancel": "Anuluj",
+ "delete": "Usuń",
+ "editCode": "Edytuj kod",
+ "launch": "Uruchom",
+ "remove": "Usuń",
+ "stop": "Zatrzymaj",
+ "task": "Zadanie",
+ "visualize": "Wizualizuj"
+ },
+ "deleteTeam": {
+ "description": "Usunąć zespół \"{{team}}\"? Ta akcja jest nieodwracalna. Wszystkie dane zespołu i zadania zostaną usunięte.",
+ "title": "Usuń zespół"
+ },
+ "draft": {
+ "descriptionPrefix": "To jest wersja robocza zespołu -",
+ "descriptionSuffix": "został skonfigurowany z {{count}} {{member}}, ale nie został jeszcze przygotowany przez CLI. Kliknij Uruchom, aby wybrać model i uruchomić zespół.",
+ "descriptionSuffix_few": "został skonfigurowany z {{count}} {{member}}, ale nie został jeszcze przygotowany przez CLI. Kliknij Uruchom, aby wybrać model i uruchomić zespół.",
+ "descriptionSuffix_many": "został skonfigurowany z {{count}} {{member}}, ale nie został jeszcze przygotowany przez CLI. Kliknij Uruchom, aby wybrać model i uruchomić zespół.",
+ "descriptionSuffix_one": "został skonfigurowany z {{count}} {{member}}, ale nie został jeszcze przygotowany przez CLI. Kliknij Uruchom, aby wybrać model i uruchomić zespół.",
+ "descriptionSuffix_other": "został skonfigurowany z {{count}} {{member}}, ale nie został jeszcze przygotowany przez CLI. Kliknij Uruchom, aby wybrać model i uruchomić zespół.",
+ "member": "członkami",
+ "member_few": "członkami",
+ "member_many": "członkami",
+ "member_one": "członkiem",
+ "member_other": "członkami",
+ "title": "Zespół jeszcze nie uruchomiony"
+ },
+ "invalidTab": "Nieprawidłowa karta zespołu",
+ "kanbanSafeData": "Nie udało się w pełni załadować tablicy Kanban. Wyświetlanie bezpiecznych danych.",
+ "loadFailed": "Nie udało się załadować zespołu",
+ "loading": "Ładowanie zespołu",
+ "loadingSidebar": "Ładowanie paska bocznego zespołu",
+ "offline": {
+ "offline": "Zespół jest offline",
+ "partialFailed": "Ostatnie uruchomienie nie powiodło się w trakcie",
+ "partialMissing": "Ostatnie uruchomienie nie powiodło się w trakcie - {{missing}}/{{expected}} członków zespołu nie dołączyło",
+ "reconciling": "Ostatnie uruchomienie wciąż się uzgadnia"
+ },
+ "previous": "Poprzednie: {{paths}}",
+ "removeMember": {
+ "description": "Usunąć \"{{member}}\" z zespołu? Zadania i wiadomości zostaną zachowane, ale tej nazwy nie można użyć ponownie.",
+ "title": "Usuń członka"
+ },
+ "sections": {
+ "team": "Zespół"
+ },
+ "solo": "Solo",
+ "status": {
+ "active": "Aktywny",
+ "launching": "Uruchamianie...",
+ "running": "Działa"
+ },
+ "telemetry": {
+ "cpu": "CPU",
+ "memory": "Pamięć"
+ },
+ "tooltips": {
+ "deleteTeam": "Usuń zespół",
+ "editTeam": "Edytuj zespół",
+ "editUnavailableProvisioning": "Edycja zespołu jest niedostępna, gdy przygotowywanie jest wciąż w toku",
+ "openBuiltInEditor": "Otwórz projekt we wbudowanym edytorze",
+ "openTeamGraph": "Otwórz graf zespołu",
+ "stopTeam": "Zatrzymaj zespół"
+ },
+ "waitingForProvisioning": "Dane zespołu pojawią się po zakończeniu przygotowywania",
+ "context": {
+ "title": "Kontekst",
+ "loading": "Ładowanie...",
+ "noSessionLoaded": "Nie załadowano sesji",
+ "closePanel": "Zamknij panel kontekstu {{team}}",
+ "loadingContext": "Ładowanie kontekstu...",
+ "openLeadSession": "Otwórz sesję lidera zespołu, aby zobaczyć kontekst."
+ }
+ },
+ "review": {
+ "fileHeader": {
+ "actions": {
+ "accept": "Akceptuj",
+ "discard": "Odrzuć",
+ "discardTooltip": "Odrzuć wszystkie edycje dla tego pliku",
+ "keepMyDraft": "Zachowaj moją wersję roboczą",
+ "reject": "Odrzuć",
+ "reloadFromDisk": "Przeładuj z dysku",
+ "restore": "Przywróć",
+ "restoreTooltip": "Utwórz/przywróć ten plik na dysku z podglądu",
+ "saveFile": "Zapisz plik",
+ "saveFileTooltip": "Zapisz plik na dysku"
+ },
+ "badges": {
+ "deleted": "USUNIĘTO",
+ "manualReview": "PRZEGLĄD RĘCZNY",
+ "new": "NOWY",
+ "worktree": "WORKTREE"
+ },
+ "contentSource": {
+ "disk-current": "Bieżący dysk",
+ "file-history": "Historia pliku",
+ "git-fallback": "Awaryjnie Git",
+ "ledger-exact": "Rejestr zadań",
+ "ledger-snapshot": "Migawka rejestru",
+ "snippet-reconstruction": "Zrekonstruowane",
+ "unavailable": "Treść niedostępna"
+ },
+ "contentUnavailable": {
+ "badge": "Treść niedostępna",
+ "description": "Rejestr zapisał metadane tej zmiany, ale pełna treść tekstowa nie jest dostępna. Zwykle oznacza to treść binarną, dużą lub tylko z hashem.",
+ "safety": "Automatyczna akceptacja/odrzucenie jest wyłączona dla tego pliku, aby uniknąć niebezpiecznych zapisów na dysk.",
+ "title": "Treść tekstowa jest niedostępna"
+ },
+ "disabled": {
+ "acceptRejectContentUnavailable": "Akceptacja/Odrzucenie jest wyłączone, ponieważ pełna treść tekstowa jest niedostępna.",
+ "acceptRejectMissingOnDisk": "Akceptacja/Odrzucenie jest wyłączone, gdy plik nie istnieje na dysku.",
+ "rejectBaselineUnavailable": "Odrzucenie jest wyłączone, ponieważ oryginalna wersja bazowa jest niedostępna.",
+ "rejectContentUnavailable": "Odrzucenie jest wyłączone, ponieważ pełna treść tekstowa jest niedostępna.",
+ "rejectManualLedgerReview": "Odrzucenie jest wyłączone, ponieważ ta zmiana w rejestrze ma treść binarną, dużą lub niedostępną."
+ },
+ "externalChange": {
+ "changedOnDisk": "Zmieniono na dysku",
+ "deletedOnDisk": "Usunięto na dysku",
+ "recreatedOnDisk": "Odtworzono na dysku"
+ },
+ "missingOnDisk": {
+ "badge": "Brak na dysku",
+ "description": "Wciąż możemy pokazać podgląd z logów agenta, ale Twój system plików jest niezsynchronizowany.",
+ "restorePrefix": "Użyj",
+ "restoreSuffix": "aby zapisać treść podglądu z powrotem na dysk.",
+ "restoreUnavailable": "Pełna treść pliku nie jest dostępna do automatycznego przywrócenia.",
+ "title": "Plik nie istnieje na dysku"
+ },
+ "pathChange": {
+ "from": "Z {{path}}",
+ "to": "Do {{path}}"
+ },
+ "worktree": {
+ "isolated": "Izolowany worktree"
+ }
+ },
+ "toolbar": {
+ "stats": {
+ "pending": "{{count}} oczekujących",
+ "pending_one": "{{count}} oczekujące",
+ "pending_other": "{{count}} oczekujących",
+ "accepted": "{{count}} zaakceptowanych",
+ "accepted_one": "{{count}} zaakceptowane",
+ "accepted_other": "{{count}} zaakceptowanych",
+ "rejected": "{{count}} odrzuconych",
+ "rejected_one": "{{count}} odrzucone",
+ "rejected_other": "{{count}} odrzuconych",
+ "acrossFiles": "w {{count}} plikach",
+ "acrossFiles_one": "w {{count}} pliku",
+ "acrossFiles_other": "w {{count}} plikach",
+ "edited": "{{count}} edytowanych",
+ "edited_one": "{{count}} edytowany",
+ "edited_other": "{{count}} edytowanych",
+ "pending_few": "{{count}} oczekujące",
+ "pending_many": "{{count}} oczekujących",
+ "accepted_few": "{{count}} zaakceptowane",
+ "accepted_many": "{{count}} zaakceptowanych",
+ "rejected_few": "{{count}} odrzucone",
+ "rejected_many": "{{count}} odrzuconych",
+ "acrossFiles_few": "w {{count}} plikach",
+ "acrossFiles_many": "w {{count}} plikach",
+ "edited_few": "{{count}} edytowane",
+ "edited_many": "{{count}} edytowanych"
+ },
+ "actions": {
+ "auto": "Auto",
+ "undo": "Cofnij",
+ "acceptAll": "Akceptuj wszystkie",
+ "rejectAll": "Odrzuć wszystkie",
+ "applying": "Stosowanie...",
+ "applyRejections": "Zastosuj odrzucenia"
+ },
+ "tooltips": {
+ "autoOn": "Automatycznie oznaczaj pliki jako obejrzane po przewinięciu do końca (WŁ.)",
+ "autoOff": "Automatycznie oznaczaj pliki jako obejrzane po przewinięciu do końca (WYŁ.)",
+ "undo": "Cofnij ostatnią operację przeglądu (Ctrl+Z)",
+ "acceptAll": "Akceptuj wszystkie zmiany we wszystkich plikach",
+ "rejectAll": "Odrzuć wszystkie bezpiecznie odrzucalne zmiany we wszystkich plikach",
+ "rejectAllDisabled": "Żaden oczekujący plik nie ma bezpiecznej oryginalnej wersji bazowej do odrzucenia.",
+ "applyRejections": "Zastosuj odrzucone fragmenty na dysk; zaakceptowane zmiany są zachowywane bez zmian"
+ }
+ },
+ "diffError": {
+ "title": "Nie udało się wyrenderować widoku różnic",
+ "unexpected": "Wystąpił nieoczekiwany błąd podczas renderowania różnic.",
+ "actions": {
+ "retry": "Ponów"
+ },
+ "raw": {
+ "show": "Pokaż surowe dane różnic",
+ "file": "Plik: {{file}}",
+ "original": "--- Oryginał",
+ "modified": "+++ Zmodyfikowany",
+ "charsTotal": "... (łącznie {{count}} znaków)",
+ "charsTotal_one": "... (łącznie {{count}} znak)",
+ "charsTotal_other": "... (łącznie {{count}} znaków)",
+ "charsTotal_few": "... (łącznie {{count}} znaki)",
+ "charsTotal_many": "... (łącznie {{count}} znaków)"
+ }
+ },
+ "fileTree": {
+ "viewed": "Obejrzane",
+ "badges": {
+ "new": "nowy",
+ "deleted": "usunięty"
+ },
+ "collapseFolder": "Zwiń {{name}}",
+ "expandFolder": "Rozwiń {{name}}",
+ "empty": {
+ "noChangedFiles": "Brak zmienionych plików",
+ "noMatchingFiles": "Brak pasujących plików"
+ },
+ "searchPlaceholder": "Szukaj plików…",
+ "filters": {
+ "unresolved": "Nierozwiązane",
+ "rejected": "Odrzucone",
+ "new": "Nowe",
+ "clear": "Wyczyść"
+ }
+ },
+ "diffControls": {
+ "previousChunk": "Poprzedni fragment",
+ "nextChunk": "Następny fragment",
+ "rejectChange": "Odrzuć zmianę (⌘N)",
+ "acceptChange": "Akceptuj zmianę (⌘Y)",
+ "undo": "Cofnij",
+ "keep": "Zachowaj",
+ "rejectShortcut": "⌘N",
+ "acceptShortcut": "⌘Y"
+ },
+ "conflict": {
+ "title": "Wykryto konflikt",
+ "description": "Ten plik został zmodyfikowany od czasu zmian agenta",
+ "cancel": "Anuluj",
+ "saveResolution": "Zapisz rozwiązanie",
+ "editManually": "Edytuj ręcznie",
+ "useOriginal": "Użyj oryginału",
+ "keepCurrent": "Zachowaj bieżący"
+ },
+ "fullDiffLoading": {
+ "titleOne": "Przygotowywanie pełnych różnic",
+ "titleMany": "Przygotowywanie {{count}} pełnych różnic",
+ "subtitleForFile": "Finalizowanie dokładnych różnic edytora dla {{file}}.",
+ "subtitleCurrentFile": "Finalizowanie dokładnych różnic edytora dla bieżącego pliku.",
+ "subtitleMany": "Rozwiązywanie dokładnych wersji bazowych przed/po dla plików aktualnie ładowanych.",
+ "previewsReady": "Gotowych podglądów: {{count}}",
+ "previewsReady_one": "Gotowy podgląd: {{count}}",
+ "editorViewLoading": "Ładowanie widoku edytora",
+ "filesInProgress": "{{count}} plików w toku",
+ "filesInProgress_one": "{{count}} plik w toku",
+ "filesReady": "{{ready}}/{{total}} plików gotowych",
+ "progressDescription": "{{ready}} gotowych, {{loading}} wciąż się ładuje. Podgląd różnic pozostaje widoczny poniżej, gdy rozwiązywane są pozostałe wersje bazowe.",
+ "singleDescription": "Podgląd różnic pozostaje widoczny poniżej, gdy rozwiązywana jest dokładna wersja bazowa.",
+ "previewsReady_few": "Gotowe podglądy: {{count}}",
+ "previewsReady_many": "Gotowych podglądów: {{count}}",
+ "previewsReady_other": "Gotowych podglądów: {{count}}",
+ "filesInProgress_few": "{{count}} pliki w toku",
+ "filesInProgress_many": "{{count}} plików w toku",
+ "filesInProgress_other": "{{count}} plików w toku"
+ },
+ "fileMissingPrefix": "Plik nie istnieje na dysku. Te różnice mogą być tylko podglądem z logów agenta. Użyj",
+ "restore": "Przywróć",
+ "fileMissingSuffix": "aby utworzyć plik na dysku.",
+ "filePlaceholder": {
+ "loading": "Ładowanie",
+ "description": "Przygotowywanie pełnych różnic edytora dla tego pliku."
+ },
+ "loading": {
+ "diff": "RÓŻNICE",
+ "ledgerObjectsProcessed": "Przetworzono {{count}} obiektów rejestru",
+ "ledgerObjectsProcessed_one": "Przetworzono {{count}} obiekt rejestru",
+ "ledgerObjectsProcessed_other": "Przetworzono {{count}} obiektów rejestru",
+ "ledgerObjectsProcessed_few": "Przetworzono {{count}} obiekty rejestru",
+ "ledgerObjectsProcessed_many": "Przetworzono {{count}} obiektów rejestru",
+ "phases": {
+ "readingLedger": "Odczyt rejestru zadań...",
+ "resolvingFiles": "Rozwiązywanie stanów plików...",
+ "checkingWorktree": "Sprawdzanie kontekstu worktree...",
+ "preparingDiffs": "Przygotowywanie różnic do przeglądu..."
+ }
+ },
+ "progress": {
+ "viewed": "{{viewed}}/{{total}} obejrzanych"
+ },
+ "scope": {
+ "readMore": "Czytaj więcej",
+ "tiers": {
+ "exact": {
+ "title": "Zakres zadania określony precyzyjnie",
+ "detail": "W logu sesji znaleziono zarówno znaczniki rozpoczęcia, jak i ukończenia. Różnice obejmują tylko zmiany wprowadzone podczas tego konkretnego zadania - inne zadania, które zmodyfikowały te same pliki, są wykluczone."
+ },
+ "endEstimated": {
+ "title": "Granica końcowa oszacowana",
+ "detail": "Znaleziono tylko znacznik rozpoczęcia - zadanie nie ma jeszcze znacznika ukończenia. Pokazano zmiany od rozpoczęcia zadania do końca sesji. Jeśli inne zadania zostały uruchomione po tym w tej samej sesji, ich zmiany również mogą być uwzględnione."
+ },
+ "startEstimated": {
+ "title": "Granica początkowa oszacowana",
+ "detail": "Znaleziono tylko znacznik ukończenia - początek pracy nie został przechwycony. Jeśli inne zadania zostały uruchomione przed tym w tej samej sesji, ich zmiany w tych samych plikach również mogą być uwzględnione."
+ },
+ "allSession": {
+ "title": "Wyświetlanie wszystkich zmian sesji",
+ "detail": "Nie znaleziono znaczników zadań w logu sesji. Nie można wyizolować tego zadania - pokazano wszystkie zmiany plików z całej sesji, w tym zmiany z innych zadań. Może się to zdarzyć w przypadku starszych wersji CLI lub niestandardowych przepływów pracy."
+ }
+ },
+ "ledger": {
+ "exact": {
+ "title": "Zmiany przechwycone przez rejestr zadań",
+ "detail": "Orkiestrator przechwycił te zmiany plików, gdy agent pracował nad tym zadaniem.",
+ "badge": "Rejestr dokładny"
+ },
+ "limited": {
+ "title": "Zmiany przechwycone z ograniczoną możliwością przeglądu",
+ "detail": "Orkiestrator przechwycił te zmiany plików dla tego zadania, ale co najmniej jedna zmiana została przechwycona z migawki lub źródła zawierającego tylko metadane. Przejrzyj dokładne różnice tekstowe tam, gdzie są dostępne; treść binarna lub niedostępna może wymagać ręcznego przeglądu.",
+ "mixedBadge": "Mieszana możliwość przeglądu",
+ "needsReviewBadge": "Wymaga przeglądu"
+ }
+ },
+ "workInterval": {
+ "title": "Zakres określony przez utrwalony interwał pracy",
+ "detail": "Znacznik rozpoczęcia zadania nie był dostępny w logu sesji, więc zakres różnic jest określony przez interwał pracy zadania zapisany na tablicy.",
+ "badge": "Zakres interwału"
+ },
+ "confidence": {
+ "high": "Wysoka pewność",
+ "medium": "Średnia pewność",
+ "low": "Niska pewność",
+ "bestEffort": "Najlepsze możliwe"
+ }
+ },
+ "shortcuts": {
+ "title": "Skróty klawiszowe",
+ "actions": {
+ "nextChange": "Następna zmiana",
+ "previousChange": "Poprzednia zmiana",
+ "nextFile": "Następny plik",
+ "previousFile": "Poprzedni plik",
+ "acceptChange": "Akceptuj zmianę",
+ "rejectChange": "Odrzuć zmianę",
+ "saveFile": "Zapisz plik",
+ "undo": "Cofnij",
+ "redo": "Ponów",
+ "toggleShortcuts": "Przełącz skróty",
+ "closeDialog": "Zamknij okno dialogowe"
+ }
+ },
+ "timeline": {
+ "empty": "Brak zdarzeń edycji",
+ "titleWithCount": "Oś czasu edycji ({{count}})"
+ },
+ "continuousScroll": {
+ "empty": "Brak zmian plików do przeglądu"
+ },
+ "empty": {
+ "noSafeDiff": "Brak dostępnych bezpiecznych różnic",
+ "noFileChangesRecorded": "Nie zarejestrowano zmian plików",
+ "noSafeDiffDescription": "Rejestr zadań nie udostępnił bezpiecznych różnic plików dla tego zadania.",
+ "noSafeDiffDiagnosticsDescription": "Rejestr zadań nie udostępnił bezpiecznych różnic plików dla tego zadania. Diagnostyka poniżej wyjaśnia dlaczego.",
+ "noFileEventsYet": "Rejestr zadań nie ma jeszcze zdarzeń plików dla tego zadania.",
+ "noFileEvents": "Rejestr zadań nie ma zdarzeń plików dla tego zadania."
+ }
+ },
+ "messages": {
+ "actions": {
+ "bottomSheetActions": "Akcje dolnego arkusza wiadomości",
+ "collapseAll": "Zwiń wszystkie wiadomości",
+ "collapseSheet": "Zwiń arkusz",
+ "expandAll": "Rozwiń wszystkie wiadomości",
+ "expandSheet": "Rozwiń arkusz",
+ "floatComposer": "Odłącz kompozytor",
+ "floatMessagesComposer": "Odłącz kompozytor wiadomości",
+ "hideSearch": "Ukryj wyszukiwanie",
+ "loadOlder": "Załaduj starsze wiadomości",
+ "markAllRead": "Oznacz wszystkie jako przeczytane",
+ "messageActions": "Akcje wiadomości",
+ "moveMessagesToBottomSheet": "Przenieś wiadomości do dolnego arkusza",
+ "moveMessagesToSidebar": "Przenieś wiadomości do paska bocznego",
+ "moveToBottomSheet": "Przenieś do dolnego arkusza",
+ "moveToInline": "Przenieś do wbudowanego",
+ "moveToSidebar": "Przenieś do paska bocznego",
+ "panelActions": "Akcje panelu wiadomości",
+ "searchMessages": "Szukaj wiadomości"
+ },
+ "delivery": {
+ "copied": "Skopiowano",
+ "copyDebugDetails": "Kopiuj szczegóły debugowania",
+ "details": "Szczegóły",
+ "fields": {
+ "acceptanceUnknown": "acceptanceUnknown",
+ "delivered": "delivered",
+ "diagnostics": "diagnostics",
+ "ledgerStatus": "ledgerStatus",
+ "messageId": "messageId",
+ "providerId": "providerId",
+ "queuedBehindMessageId": "queuedBehindMessageId",
+ "reason": "reason",
+ "responsePending": "responsePending",
+ "responseState": "responseState",
+ "statusMessageId": "statusMessageId",
+ "userVisibleMessage": "userVisibleMessage",
+ "userVisibleNextReviewAt": "userVisibleNextReviewAt",
+ "userVisibleReasonCode": "userVisibleReasonCode",
+ "userVisibleState": "userVisibleState",
+ "visibleReplyCorrelation": "visibleReplyCorrelation",
+ "visibleReplyMessageId": "visibleReplyMessageId"
+ }
+ },
+ "panelMode": "Tryb panelu wiadomości",
+ "title": "Wiadomości",
+ "unread": {
+ "new": "{{count}} nowych",
+ "unread": "{{count}} nieprzeczytanych",
+ "new_few": "{{count}} nowe",
+ "new_many": "{{count}} nowych",
+ "new_one": "{{count}} nowa",
+ "new_other": "{{count}} nowych",
+ "unread_few": "{{count}} nieprzeczytane",
+ "unread_many": "{{count}} nieprzeczytanych",
+ "unread_one": "{{count}} nieprzeczytana",
+ "unread_other": "{{count}} nieprzeczytanych"
+ },
+ "filter": {
+ "ariaLabel": "Filtruj wiadomości",
+ "tooltip": "Filtruj wiadomości",
+ "from": "Od",
+ "to": "Do",
+ "noData": "Brak danych",
+ "showStatusUpdates": "Pokaż aktualizacje statusu (bezczynność/wyłączenie)",
+ "actions": {
+ "reset": "Resetuj",
+ "save": "Zapisz"
+ }
+ },
+ "status": {
+ "title": "Status"
+ },
+ "actionMode": {
+ "label": "Tryb akcji"
+ },
+ "search": {
+ "placeholder": "Szukaj..."
+ }
+ },
+ "modelSelector": {
+ "badges": {
+ "configured": "Skonfigurowane",
+ "connected": "Połączone",
+ "failed": "Niepowodzenie",
+ "free": "Darmowe",
+ "local": "Lokalne",
+ "needsTest": "Wymaga testu",
+ "verified": "Zweryfikowane",
+ "unavailable": "Niedostępne",
+ "issue": "Problem"
+ },
+ "customModelId": "Niestandardowe id modelu",
+ "label": "Model (opcjonalnie)",
+ "multimodelRequired": "Codex i Gemini wymagają trybu wielomodelowego.",
+ "openCode": {
+ "allSources": "Wszystkie źródła OpenCode",
+ "filterSource": "Filtruj {{source}}",
+ "filterSources": "Filtruj źródła OpenCode",
+ "freeOnly": "Tylko darmowe",
+ "freeTooltip": "OpenCode oznacza ten model jako darmowy.",
+ "loadingModels": "Ładowanie modeli OpenCode...",
+ "noSourcesFound": "Nie znaleziono źródeł.",
+ "recommendedOnly": "Tylko zalecane",
+ "searchSources": "Szukaj źródeł",
+ "sourcesCount": "{{count}} źródeł OpenCode",
+ "sourcesCount_few": "{{count}} źródła OpenCode",
+ "sourcesCount_many": "{{count}} źródeł OpenCode",
+ "sourcesCount_one": "{{count}} źródło OpenCode",
+ "sourcesCount_other": "{{count}} źródeł OpenCode"
+ },
+ "reason": "Powód: {{reason}}",
+ "runtimeModelsSyncing": "Jawne modele ładują się z bieżącego środowiska uruchomieniowego. Domyślny pozostaje dostępny, gdy lista się synchronizuje.",
+ "fastMode": {
+ "codexLabel": "Tryb Fast (2x kredyty)",
+ "optionalLabel": "Tryb Fast (opcjonalnie)",
+ "defaultOff": "Domyślny (Wył.)",
+ "fast": "Fast",
+ "off": "Wył.",
+ "defaultFast": "Domyślny (Fast)",
+ "defaultResolvesTo": "Domyślny obecnie rozwiązuje się do {{mode}}.",
+ "runtimeBackedHint": "Tryb Fast jest oparty na środowisku uruchomieniowym i odblokowuje się tylko wtedy, gdy rozwiązany model uruchamiania Anthropic go obsługuje."
+ },
+ "anthropicExtraUsage": {
+ "pricingDocs": "Przeczytaj dokumentację cen Anthropic"
+ },
+ "searchModels": "Szukaj modeli",
+ "defaultModel": "Domyślny",
+ "empty": {
+ "noSearchMatches": "Żaden model nie pasuje do tego wyszukiwania.",
+ "recommendedFreeOpenCode": "Brak zalecanych darmowych modeli OpenCode na bieżącej liście środowiska uruchomieniowego.",
+ "freeOpenCode": "Brak darmowych modeli OpenCode na bieżącej liście środowiska uruchomieniowego.",
+ "recommendedOpenCode": "Brak zalecanych modeli OpenCode na bieżącej liście środowiska uruchomieniowego.",
+ "noModels": "Brak dostępnych modeli na bieżącej liście środowiska uruchomieniowego."
+ },
+ "openCodeStatus": {
+ "notReadyTitle": "OpenCode nie jest gotowe do uruchomienia zespołu",
+ "freeModelsAvailableTitle": "Darmowe modele OpenCode są dostępne",
+ "providerNotConnectedTitle": "Dostawca OpenCode nie jest połączony",
+ "readyTitle": "OpenCode jest gotowe",
+ "readyMessage": "OpenCode przeszło sprawdzenie gotowości dostawcy. Wybierz je, aby użyć modeli OpenCode dla tego zespołu.",
+ "useOpenCode": "Użyj OpenCode",
+ "badges": {
+ "check": "Sprawdź",
+ "install": "Zainstaluj",
+ "free": "Darmowe",
+ "setup": "Konfiguracja"
+ },
+ "summary": {
+ "checking": "Status OpenCode: sprawdzanie środowiska uruchomieniowego",
+ "status": "Status OpenCode: {{parts}}"
+ },
+ "summaryParts": {
+ "teamLaunchBlocked": "uruchomienie zespołu zablokowane",
+ "providerOptional": "połączenie z dostawcą opcjonalne",
+ "providerModelsNeedSetup": "modele oparte na dostawcy wymagają konfiguracji",
+ "teamLaunchReady": "uruchomienie zespołu gotowe",
+ "runtimeDetected": "wykryto środowisko uruchomieniowe",
+ "runtimeMissing": "brak środowiska uruchomieniowego",
+ "freeWithoutAuth": "darmowe modele dostępne bez uwierzytelniania",
+ "providerConnected": "dostawca połączony",
+ "providerNotConnected": "dostawca nie połączony"
+ },
+ "messages": {
+ "checking": "Aplikacja wciąż sprawdza środowisko uruchomieniowe OpenCode. Poczekaj na zakończenie sprawdzania statusu dostawcy, a następnie spróbuj ponownie.",
+ "unsupported": "OpenCode nie jest zainstalowane, nie zostało znalezione lub wykryte środowisko uruchomieniowe nie jest obsługiwane. Zainstaluj lub zaktualizuj OpenCode, a następnie odśwież status dostawcy. Możesz też użyć przycisku Zainstaluj na stronie głównej.",
+ "freeAvailable": "OpenCode zostało wykryte. Możesz używać darmowych modeli OpenCode, takich jak Big Pickle, bez łączenia dostawcy. Połącz dostawcę tylko wtedy, gdy chcesz modeli opartych na dostawcy.",
+ "noFreeListed": "OpenCode zostało wykryte, ale nie wymieniono jeszcze żadnego darmowego modelu OpenCode. Odśwież status dostawcy lub połącz dostawcę w OpenCode dla modeli opartych na dostawcy.",
+ "launchBlocked": "OpenCode jest zainstalowane i uwierzytelnione, ale gotowość uruchomienia Agent Teams jest zablokowana.",
+ "ready": "OpenCode jest gotowe do uruchomienia zespołu."
+ },
+ "loadingRuntime": "Status środowiska uruchomieniowego OpenCode wciąż się ładuje."
+ },
+ "advisory": {
+ "pingNotConfirmed": "Ping niepotwierdzony",
+ "note": "Uwaga"
+ },
+ "placeholders": {
+ "customModelId": "openai/gpt-oss-20b"
+ },
+ "routeGroups": {
+ "openCodeConfig": "Konfiguracja OpenCode",
+ "builtinFree": "Darmowe wbudowane",
+ "connectedProviders": "Połączeni dostawcy",
+ "otherCatalog": "Inny katalog OpenCode"
+ },
+ "pricing": {
+ "free": "Darmowe",
+ "inputShort": "wej. {{rate}}",
+ "outputShort": "wyj. {{rate}}",
+ "perMillionSummary": "{{summary}} / 1M",
+ "inputTitle": "Wejście: {{rate}} na 1M tokenów",
+ "outputTitle": "Wyjście: {{rate}} na 1M tokenów",
+ "cacheReadTitle": "Odczyt z cache: {{rate}} na 1M tokenów",
+ "cacheWriteTitle": "Zapis do cache: {{rate}} na 1M tokenów"
+ },
+ "defaultTooltip": {
+ "anthropicCompatibleWithResolved": "Używa domyślnego modelu punktu końcowego zgodnego z Anthropic.\nObecnie rozwiązuje się do {{model}}.",
+ "anthropicCompatible": "Używa domyślnego modelu punktu końcowego zgodnego z Anthropic.",
+ "anthropic": "Używa domyślnego modelu zespołu Claude.\nRozwiązuje się do {{longContextModel}} z kontekstem 1M lub {{limitedContextModel}} z kontekstem 200K, gdy włączone jest Ogranicz kontekst.",
+ "openCodeWithResolved": "Używa domyślnego modelu OpenCode.\nObecnie rozwiązuje się do {{model}}.",
+ "openCode": "Używa domyślnego modelu środowiska uruchomieniowego OpenCode.",
+ "runtime": "Używa domyślnego modelu środowiska uruchomieniowego dla wybranego dostawcy."
+ },
+ "multimodelOff": "Wielomodelowy wył.",
+ "unavailableInRuntime": "Niedostępne w bieżącym środowisku uruchomieniowym"
+ },
+ "taskDetail": {
+ "actions": {
+ "cancel": "Anuluj",
+ "delete": "Usuń",
+ "markResolved": "Oznacz jako rozwiązane",
+ "save": "Zapisz"
+ },
+ "attachments": {
+ "commentAttachment": "Załącznik komentarza",
+ "fromComments": "Z komentarzy",
+ "preview": "Podgląd {{filename}}"
+ },
+ "changes": {
+ "badges": {
+ "attention": "uwaga",
+ "noSafeDiff": "brak bezpiecznych różnic"
+ },
+ "empty": {
+ "noFileChangesRecorded": "Nie zarejestrowano zmian plików",
+ "noFileChangesRecordedYet": "Nie zarejestrowano jeszcze zmian plików",
+ "noReviewableChangesRecovered": "Nie odzyskano zmian plików do przeglądu",
+ "noSafeDiffAvailable": "Brak dostępnych bezpiecznych różnic"
+ },
+ "loadFailed": "Nie udało się załadować podsumowania zmian zadania",
+ "loading": "Ładowanie zmian...",
+ "fileCount": "{{count}} plików",
+ "fileRowsHidden": "{{count}} ukrytych wierszy plików",
+ "moreDiagnostics": "{{count}} więcej diagnostyk",
+ "moreFiles": "{{count}} więcej plików",
+ "openInEditor": "Otwórz w edytorze",
+ "openTask": "Otwórz zadanie {{subject}}",
+ "refresh": "Odśwież zmiany",
+ "refreshFailed": "Odświeżanie nie powiodło się: {{error}}",
+ "refreshing": "Odświeżanie",
+ "refreshingChanges": "Odświeżanie zmian...",
+ "refreshTeamChanges": "Odśwież zmiany zespołu",
+ "refreshShort": "Odśwież",
+ "reviewDiff": "Przejrzyj różnice",
+ "reviewTaskDiff": "Przejrzyj różnice zadania",
+ "scannedCandidateTasks": "Przeskanowano {{requested}} z {{eligible}} zadań kandydujących",
+ "tasksDeferred": "{{count}} zadań odroczonych w tym przebiegu",
+ "title": "Zmiany",
+ "fileCount_few": "{{count}} pliki",
+ "fileCount_many": "{{count}} plików",
+ "fileCount_one": "{{count}} plik",
+ "fileCount_other": "{{count}} plików",
+ "fileRowsHidden_few": "{{count}} ukryte wiersze plików",
+ "fileRowsHidden_many": "{{count}} ukrytych wierszy plików",
+ "fileRowsHidden_one": "{{count}} ukryty wiersz pliku",
+ "fileRowsHidden_other": "{{count}} ukrytych wierszy plików",
+ "moreDiagnostics_few": "{{count}} więcej diagnostyk",
+ "moreDiagnostics_many": "{{count}} więcej diagnostyk",
+ "moreDiagnostics_one": "{{count}} więcej diagnostyki",
+ "moreDiagnostics_other": "{{count}} więcej diagnostyk",
+ "moreFiles_few": "{{count}} więcej plików",
+ "moreFiles_many": "{{count}} więcej plików",
+ "moreFiles_one": "{{count}} więcej pliku",
+ "moreFiles_other": "{{count}} więcej plików",
+ "tasksDeferred_few": "{{count}} zadania odroczone w tym przebiegu",
+ "tasksDeferred_many": "{{count}} zadań odroczonych w tym przebiegu",
+ "tasksDeferred_one": "{{count}} zadanie odroczone w tym przebiegu",
+ "tasksDeferred_other": "{{count}} zadań odroczonych w tym przebiegu"
+ },
+ "clarification": {
+ "awaitingLead": "Oczekiwanie na doprecyzowanie od lidera zespołu",
+ "awaitingUser": "Oczekiwanie na doprecyzowanie od Ciebie"
+ },
+ "description": {
+ "add": "Kliknij, aby dodać opis...",
+ "edit": "Edytuj opis",
+ "placeholder": "Opis zadania (obsługuje markdown)"
+ },
+ "loading": {
+ "fetchingTeamData": "Pobieranie danych zespołu",
+ "title": "Ładowanie zadania..."
+ },
+ "logs": {
+ "newArriving": "Nadchodzą nowe logi zadania"
+ },
+ "notFound": "Nie znaleziono zadania",
+ "related": {
+ "blockedBy": "Zablokowane przez",
+ "blocks": "Blokuje",
+ "linkedFrom": "Powiązane z",
+ "links": "Linki",
+ "title": "Powiązane zadania"
+ },
+ "review": {
+ "reviewer": "Recenzent: {{reviewer}}"
+ },
+ "sections": {
+ "attachments": "Załączniki",
+ "changes": "Zmiany",
+ "comments": "Komentarze",
+ "description": "Opis",
+ "taskLogs": "Logi zadania",
+ "workflowHistory": "Historia przepływu pracy"
+ },
+ "unassigned": "Nieprzypisane",
+ "workflow": {
+ "implementationTimeTitle": "Czas implementacji z utrwalonych interwałów pracy",
+ "inProgressTime": "Czas w toku {{duration}}"
+ },
+ "comments": {
+ "renderLimit": "Wyświetlanie {{formattedCount}} najnowszych komentarzy, aby zachować responsywność interfejsu.",
+ "badges": {
+ "approved": "Zatwierdzone",
+ "reviewRequested": "Poproszono o przegląd"
+ },
+ "unknownTime": "nieznany czas",
+ "actions": {
+ "reply": "Odpowiedz",
+ "replyToComment": "Odpowiedz na komentarz",
+ "showMore": "Pokaż więcej komentarzy ({{visible}}/{{total}})",
+ "cancelReply": "Anuluj odpowiedź",
+ "comment": "Komentarz"
+ },
+ "attachments": {
+ "previewAlt": "Podgląd załącznika",
+ "downloadFailed": "Pobieranie nie powiodło się"
+ },
+ "replyingTo": "Odpowiedź do",
+ "input": {
+ "placeholder": "Dodaj komentarz... (Enter, aby wysłać)",
+ "charsLeft": "Pozostało {{count}} znaków",
+ "charsLeft_one": "Pozostał {{count}} znak",
+ "charsLeft_other": "Pozostało {{count}} znaków",
+ "charsLeft_few": "Pozostały {{count}} znaki",
+ "charsLeft_many": "Pozostało {{count}} znaków"
+ }
+ },
+ "workflowTimeline": {
+ "empty": "Nie zarejestrowano historii przepływu pracy",
+ "currentImplementationInterval": "Bieżący interwał implementacji",
+ "implementationIntervalEnded": "Interwał implementacji zakończył się przy tym przejściu",
+ "runningPrefix": "działa ",
+ "createdAs": "Utworzono jako",
+ "by": "przez",
+ "reassigned": "Przypisano ponownie",
+ "assignedTo": "Przypisano do",
+ "unassignedFrom": "Cofnięto przypisanie z",
+ "ownerChanged": "Zmieniono właściciela",
+ "reviewRequested": "Poproszono o przegląd",
+ "reviewStarted": "Rozpoczęto przegląd",
+ "changesRequested": "Poproszono o zmiany",
+ "approved": "Zatwierdzono",
+ "unknownEvent": "Nieznane zdarzenie"
+ },
+ "reviewStates": {
+ "approved": "Zatwierdzone",
+ "needsFix": "Wymaga poprawki",
+ "inReview": "W przeglądzie"
+ }
+ },
+ "tasks": {
+ "createTask": {
+ "assignee": "Przypisany",
+ "assigneeOptional": "Przypisany (opcjonalnie)",
+ "blockedByOptional": "Zablokowane przez zadania (opcjonalnie)",
+ "blockedBySummary": "Zadanie będzie zablokowane przez: {{tasks}}",
+ "cancel": "Anuluj",
+ "create": "Utwórz",
+ "creating": "Tworzenie...",
+ "description": "Zadanie zostanie utworzone w katalogu tasks/ zespołu i pojawi się na tablicy Kanban.",
+ "descriptionOptional": "Opis (opcjonalnie)",
+ "detailsPlaceholder": "Szczegóły zadania (obsługuje markdown)",
+ "hideOptionalFields": "Ukryj pola opcjonalne",
+ "offlineNotice": {
+ "after": "- uruchom zespół, aby rozpocząć wykonywanie.",
+ "before": "Zespół jest offline. Zadanie zostanie dodane do"
+ },
+ "promptOptional": "Prompt dla przypisanego (opcjonalnie)",
+ "promptPlaceholder": "Niestandardowe instrukcje dla członka zespołu...",
+ "relatedOptional": "Powiązane zadania (opcjonalnie)",
+ "relatedSummary": "Powiązane: {{tasks}}",
+ "saved": "Zapisano",
+ "searchTasks": "Szukaj zadań...",
+ "selectMember": "Wybierz członka",
+ "selectMemberOptional": "Wybierz członka...",
+ "showOptionalFields": "Pokaż pola opcjonalne",
+ "startImmediately": "Rozpocznij natychmiast",
+ "startOfflineHint": "Zespół jest offline. Najpierw uruchom zespół, aby rozpoczynać zadania natychmiast.",
+ "subject": "Temat",
+ "subjectPlaceholder": "Co trzeba zrobić?",
+ "title": "Utwórz zadanie",
+ "todo": "DO ZROBIENIA"
+ },
+ "list": {
+ "columns": {
+ "blockedBy": "Zablokowane przez",
+ "blocks": "Blokuje",
+ "id": "ID",
+ "owner": "Właściciel",
+ "status": "Status",
+ "subject": "Temat"
+ },
+ "empty": "Brak zadań w tym zespole",
+ "filters": {
+ "allOwners": "Wszyscy właściciele",
+ "allStatuses": "Wszystkie statusy",
+ "ownerAria": "Filtruj zadania wg właściciela",
+ "statusAria": "Filtruj zadania wg statusu"
+ },
+ "showing": "Wyświetlanie {{shown}} z {{total}}"
+ },
+ "status": {
+ "completed": "completed",
+ "deleted": "deleted",
+ "inProgress": "in_progress",
+ "pending": "pending"
+ },
+ "statusSummary": {
+ "progressAria": "Zadania {{completed}}/{{total}} ukończone",
+ "inProgress": "{{count}} in_progress",
+ "inProgress_one": "{{count}} in_progress",
+ "inProgress_other": "{{count}} in_progress",
+ "inProgress_few": "{{count}} in_progress",
+ "inProgress_many": "{{count}} in_progress",
+ "pending": "{{count}} pending",
+ "pending_one": "{{count}} pending",
+ "pending_other": "{{count}} pending",
+ "pending_few": "{{count}} pending",
+ "pending_many": "{{count}} pending",
+ "completed": "{{count}} completed",
+ "completed_one": "{{count}} completed",
+ "completed_other": "{{count}} completed",
+ "completed_few": "{{count}} completed",
+ "completed_many": "{{count}} completed"
+ },
+ "unassigned": "Nieprzypisane",
+ "teamPrefix": "Zespół:",
+ "openTask": "Otwórz zadanie",
+ "deleteConfirm": {
+ "title": "Usuń zadanie",
+ "message": "Przenieść zadanie #{{taskId}} do kosza?",
+ "confirmLabel": "Usuń",
+ "cancelLabel": "Anuluj"
+ }
+ },
+ "editor": {
+ "actions": {
+ "cancel": "Anuluj",
+ "closeEditor": "Zamknij edytor",
+ "closeTab": "Zamknij kartę",
+ "closeTooltip": "Zamknij edytor (Esc)",
+ "discard": "Odrzuć",
+ "discardAndClose": "Odrzuć i zamknij",
+ "keep": "Zachowaj",
+ "keepMine": "Zachowaj moje",
+ "keyboardShortcuts": "Skróty klawiszowe",
+ "overwrite": "Nadpisz",
+ "refreshAria": "Odśwież (F5)",
+ "refreshTooltip": "Odśwież status git (F5)",
+ "reload": "Przeładuj",
+ "retry": "Ponów",
+ "save": "Zapisz",
+ "saveAllAndClose": "Zapisz wszystko i zamknij"
+ },
+ "ariaLabel": "Edytor projektu",
+ "dialogs": {
+ "conflictDescription": "Plik został zmodyfikowany zewnętrznie od czasu jego otwarcia. Nadpisać swoimi zmianami?",
+ "conflictTitle": "Konflikt zapisu",
+ "unsavedDescription": "Masz niezapisane zmiany. Co chcesz zrobić?",
+ "unsavedFileDescription": "Ten plik ma niezapisane zmiany. Co chcesz zrobić?",
+ "unsavedTitle": "Niezapisane zmiany"
+ },
+ "newFile": {
+ "validation": {
+ "nameRequired": "Nazwa nie może być pusta",
+ "invalidName": "Nieprawidłowa nazwa",
+ "invalidCharacters": "Nazwa zawiera nieprawidłowe znaki",
+ "nameTooLong": "Nazwa jest za długa"
+ },
+ "placeholders": {
+ "fileName": "Nazwa pliku...",
+ "folderName": "Nazwa folderu..."
+ },
+ "aria": {
+ "newFileName": "Nazwa nowego pliku",
+ "newFolderName": "Nazwa nowego folderu"
+ }
+ },
+ "draftRecovered": "Odzyskano niezapisane zmiany z poprzedniej sesji.",
+ "externalChange": {
+ "changed": "Plik zmieniony na dysku.",
+ "deleted": "Plik już nie istnieje na dysku."
+ },
+ "saveFailed": "Zapis nie powiódł się: {{error}}",
+ "sidebar": {
+ "explorer": "Eksplorator",
+ "hide": "Ukryj pasek boczny",
+ "hideWithShortcut": "Ukryj pasek boczny ({{shortcut}})",
+ "show": "Pokaż pasek boczny",
+ "showWithShortcut": "Pokaż pasek boczny ({{shortcut}})"
+ },
+ "searchInFiles": {
+ "title": "Szukaj w plikach",
+ "closeSearch": "Zamknij wyszukiwanie",
+ "closeSearchShortcut": "Zamknij wyszukiwanie (Esc)",
+ "searchPlaceholder": "Szukaj...",
+ "matchCase": "Uwzględnij wielkość liter",
+ "matchCaseToggle": "Aa",
+ "noResults": "Nie znaleziono wyników",
+ "resultsSummary": "{{count}} dopasowań w {{fileCount}} plikach",
+ "resultsSummary_one": "{{count}} dopasowanie w {{fileCount}} plikach",
+ "truncated": "(skrócone)",
+ "resultsSummary_few": "{{count}} dopasowania w {{fileCount}} plikach",
+ "resultsSummary_many": "{{count}} dopasowań w {{fileCount}} plikach",
+ "resultsSummary_other": "{{count}} dopasowań w {{fileCount}} plikach"
+ },
+ "fileTree": {
+ "failedToLoadFiles": "Nie udało się załadować plików: {{error}}",
+ "loading": "Ładowanie plików...",
+ "empty": "Nie znaleziono plików",
+ "dropForProjectRoot": "Upuść tutaj dla katalogu głównego projektu",
+ "moveToTrash": "Przenieś do kosza",
+ "moveToTrashConfirm": "Przenieść \"{{name}}\" do kosza?",
+ "cancel": "Anuluj"
+ },
+ "goToLine": {
+ "title": "Przejdź do linii",
+ "position": "(bieżąca: {{current}}, łącznie: {{total}})",
+ "placeholder": "Numer linii, +przesunięcie, -przesunięcie lub %",
+ "go": "Przejdź"
+ },
+ "searchPanel": {
+ "previousMatch": "Poprzednie dopasowanie",
+ "nextMatch": "Następne dopasowanie",
+ "close": "Zamknij",
+ "replacePlaceholder": "Zamień",
+ "replace": "Zamień",
+ "replaceNext": "Zamień następne",
+ "all": "Wszystkie",
+ "replaceAll": "Zamień wszystkie"
+ },
+ "statusBar": {
+ "position": "Wiersz {{line}}, kol. {{col}}",
+ "enableWatcher": "Włącz obserwatora plików",
+ "disableWatcher": "Wyłącz obserwatora plików",
+ "watch": "obserwuj",
+ "watching": "obserwowanie",
+ "watchExternalChanges": "Obserwuj zmiany zewnętrzne",
+ "disableExternalWatcher": "Wyłącz obserwatora zmian zewnętrznych",
+ "encodingUtf8": "UTF-8",
+ "spaces": "Spacje: {{count}}"
+ },
+ "imagePreview": {
+ "loading": "Ładowanie podglądu...",
+ "openFullSize": "Otwórz podgląd w pełnym rozmiarze",
+ "openSystemViewer": "Otwórz w przeglądarce systemowej"
+ },
+ "quickOpen": {
+ "title": "Szybkie otwieranie",
+ "searchPlaceholder": "Szukaj plików wg nazwy...",
+ "loading": "Ładowanie plików...",
+ "empty": "Nie znaleziono plików"
+ },
+ "errorBoundary": {
+ "crashed": "Edytor uległ awarii",
+ "unknownError": "Nieznany błąd"
+ },
+ "binaryPlaceholder": {
+ "file": "Plik binarny ({{size}})"
+ },
+ "unsavedChanges": "Niezapisane zmiany",
+ "empty": {
+ "selectFile": "Wybierz plik z drzewa do edycji"
+ },
+ "search": {
+ "toggleReplace": "Przełącz zamianę",
+ "placeholder": "Szukaj"
+ },
+ "shortcuts": {
+ "title": "Skróty klawiszowe",
+ "groups": {
+ "fileOperations": "Operacje na plikach",
+ "search": "Wyszukiwanie",
+ "navigation": "Nawigacja",
+ "editing": "Edycja",
+ "markdown": "Markdown",
+ "general": "Ogólne"
+ },
+ "actions": {
+ "quickOpen": "Szybkie otwieranie",
+ "save": "Zapisz",
+ "saveAll": "Zapisz wszystko",
+ "closeTab": "Zamknij kartę",
+ "findInFile": "Znajdź w pliku",
+ "searchInFiles": "Szukaj w plikach",
+ "goToLine": "Przejdź do linii",
+ "nextTab": "Następna karta",
+ "previousTab": "Poprzednia karta",
+ "cycleTabs": "Przełączaj karty",
+ "toggleSidebar": "Przełącz pasek boczny",
+ "undo": "Cofnij",
+ "redo": "Ponów",
+ "selectNextMatch": "Zaznacz następne dopasowanie",
+ "toggleComment": "Przełącz komentarz",
+ "splitPreview": "Podziel podgląd",
+ "fullPreview": "Pełny podgląd",
+ "closeEditor": "Zamknij edytor"
+ }
+ },
+ "toolbar": {
+ "enableWordWrap": "Włącz zawijanie wierszy",
+ "disableWordWrap": "Wyłącz zawijanie wierszy",
+ "closeSplitPreview": "Zamknij podzielony podgląd",
+ "closePreview": "Zamknij podgląd"
+ }
+ },
+ "launch": {
+ "actions": {
+ "createSchedule": "Utwórz harmonogram",
+ "creating": "Tworzenie...",
+ "goToDashboard": "Przejdź do panelu",
+ "launchTeam": "Uruchom zespół",
+ "launching": "Uruchamianie...",
+ "relaunchTeam": "Uruchom ponownie zespół",
+ "relaunching": "Ponowne uruchamianie...",
+ "saveChanges": "Zapisz zmiany",
+ "saving": "Zapisywanie..."
+ },
+ "billing": {
+ "prefix": "Począwszy od 15 czerwca 2026, Anthropic rozlicza",
+ "readArticle": "Przeczytaj artykuł Anthropic",
+ "suffix": "i użycie Agent SDK z miesięcznego kredytu Agent SDK, oddzielnie od interaktywnych limitów Claude Code. Kredyt resetuje się w każdym cyklu rozliczeniowym, a niewykorzystany kredyt nie przechodzi na kolejny okres."
+ },
+ "conflict": {
+ "description": "Uruchamianie dwóch zespołów w tym samym katalogu jest ryzykowne - mogą one kolidować przy edycji tych samych plików. Rozważ użycie innego katalogu lub git worktree dla izolacji.",
+ "title": "Inny zespół \"{{team}}\" już działa dla tego katalogu roboczego",
+ "workingDirectory": "Katalog roboczy:"
+ },
+ "description": {
+ "createSchedule": "Zaplanuj automatyczne wykonywanie zadań Claude",
+ "createScheduleForTeam": "Zaplanuj automatyczne uruchomienia dla zespołu \"{{team}}\"",
+ "editSchedule": "Edytowanie harmonogramu dla zespołu \"{{team}}\"",
+ "launchPrefix": "Uruchom zespół",
+ "launchSuffix": "przez lokalne Claude CLI.",
+ "relaunchPrefix": "Zatrzymaj bieżący przebieg dla",
+ "relaunchSuffix": "i uruchom go ponownie przez lokalne Claude CLI."
+ },
+ "prepare": {
+ "action": {
+ "launch": "uruchomienie",
+ "relaunch": "ponowne uruchomienie"
+ },
+ "blocked": "Środowisko uruchomieniowe jest niedostępne - {{action}} jest zablokowane",
+ "checkingProviders": "Sprawdzanie wybranych dostawców...",
+ "failed": "Nie udało się przygotować wybranych dostawców",
+ "preflight": "Sprawdzenie wstępne, aby wychwycić błędy przed {{action}}",
+ "preparingEnvironment": "Przygotowywanie środowiska...",
+ "ready": "Wszyscy wybrani dostawcy są gotowi.",
+ "readyWithNotes": "Wszyscy wybrani dostawcy są gotowi, z uwagami.",
+ "unsupportedPreload": "Bieżąca wersja preload nie obsługuje team:prepareProvisioning. Uruchom ponownie aplikację deweloperską.",
+ "selectWorkingDirectory": "Wybierz katalog roboczy, aby zweryfikować środowisko uruchamiania.",
+ "someProvidersNeedAttention": "Niektórzy wybrani dostawcy wymagają uwagi."
+ },
+ "prompt": {
+ "label": "Prompt",
+ "oneShotPrefix": "Ten prompt zostanie przekazany do",
+ "oneShotSuffix": "w celu jednorazowego wykonania",
+ "saved": "Zapisano",
+ "schedulePlaceholder": "Instrukcje dla Claude do wykonania zgodnie z harmonogramem...",
+ "teamLeadOptional": "Prompt dla lidera zespołu (opcjonalnie)",
+ "teamLeadPlaceholder": "Instrukcje dla lidera zespołu..."
+ },
+ "providerChanged": "Dostawca zmieniony z {{from}} na {{to}}. Poprzednia sesja lidera nie zostanie wznowiona, a lider rozpocznie ze świeżym kontekstem, aby nowe środowisko uruchomieniowe zostało zastosowane poprawnie.",
+ "relaunchFreshSession": "Ponowne uruchomienie zespołu rozpoczyna świeżą sesję lidera. Trwały stan zespołu, tablica zadań i konfiguracja członków są ponownie wczytywane do promptu uruchamiania.",
+ "relaunchWarning": {
+ "description": "Zapisanie tych ustawień zatrzyma bieżący proces zespołu, utrwali zaktualizowany skład i uruchomi zespół ponownie z nowym środowiskiem uruchomieniowym.",
+ "title": "Ponowne uruchomienie zrestartuje bieżący przebieg zespołu"
+ },
+ "schedule": {
+ "labelOptional": "Etykieta (opcjonalnie)",
+ "labelPlaceholder": "np. Codzienny przegląd kodu, Nocne testy...",
+ "maxBudgetUsd": "Maks. budżet (USD)",
+ "maxTurns": "Maks. tur",
+ "noLimit": "Bez limitu",
+ "noMatches": "Żaden zespół nie pasuje do Twojego wyszukiwania.",
+ "noTeams": "Brak dostępnych zespołów. Najpierw utwórz zespół.",
+ "searchTeams": "Szukaj zespołów...",
+ "selectTeam": "Wybierz zespół...",
+ "team": "Zespół",
+ "title": "Harmonogram"
+ },
+ "title": {
+ "createSchedule": "Utwórz harmonogram",
+ "editSchedule": "Edytuj harmonogram",
+ "launch": "Uruchom zespół",
+ "relaunch": "Uruchom ponownie zespół"
+ },
+ "errors": {
+ "loadProjectsFailed": "Nie udało się załadować projektów",
+ "saveScheduleFailed": "Nie udało się zapisać harmonogramu",
+ "relaunchFailed": "Nie udało się ponownie uruchomić zespołu",
+ "launchFailed": "Nie udało się uruchomić zespołu"
+ },
+ "validation": {
+ "openCodeLeadModelRequired": "Lider OpenCode wymaga wybranego modelu.",
+ "openCodeTeammateRequired": "Lider OpenCode wymaga co najmniej jednego członka zespołu OpenCode.",
+ "selectWorkingDirectory": "Wybierz katalog roboczy (cwd)",
+ "fixMemberNames": "Popraw nazwy członków przed uruchomieniem",
+ "memberNamesUnique": "Nazwy członków muszą być unikalne przed uruchomieniem"
+ },
+ "optionalSettings": {
+ "relaunchTitle": "Ustawienia ponownego uruchomienia",
+ "title": "Opcjonalne ustawienia uruchamiania",
+ "relaunchDescription": "Przejrzyj skład i środowisko uruchomieniowe lidera przed ponownym uruchomieniem zespołu.",
+ "description": "Utrzymuj przepływ uruchamiania skupiony na ścieżce projektu i rozwijaj to tylko wtedy, gdy chcesz dodatkowej kontroli."
+ }
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Kopiuj zespół",
+ "createTeam": "Utwórz zespół",
+ "deleteForever": "Usuń na zawsze",
+ "deletePermanently": "Usuń trwale",
+ "deleteTeam": "Usuń zespół",
+ "launching": "Uruchamianie...",
+ "launchTeam": "Uruchom zespół",
+ "relaunchTeam": "Uruchom ponownie zespół",
+ "restore": "Przywróć",
+ "restoreTeam": "Przywróć zespół",
+ "retry": "Ponów",
+ "stopTeam": "Zatrzymaj zespół",
+ "stopping": "Zatrzymywanie..."
+ },
+ "electronOnly": {
+ "description": "W trybie przeglądarki dostęp do lokalnych katalogów `~/.claude/teams` nie jest dostępny.",
+ "title": "Zespoły są dostępne tylko w trybie Electron"
+ },
+ "empty": {
+ "description": "Utwórz tutaj zespół, aby rozpocząć. Pojawi się on automatycznie na liście.",
+ "localOnly": "Tworzenie zespołów jest dostępne tylko w trybie lokalnym Electron.",
+ "title": "Nie znaleziono zespołów"
+ },
+ "filter": {
+ "clearAll": "Wyczyść wszystko",
+ "label": "Filtruj zespoły",
+ "projectPriority": "Priorytet projektu",
+ "status": "Status"
+ },
+ "loadFailed": "Nie udało się załadować zespołów",
+ "loading": "Ładowanie zespołów...",
+ "localOnly": "Dostępne tylko w trybie lokalnym Electron.",
+ "membersCount": "Członkowie: {{count}}",
+ "membersCount_few": "Członkowie: {{count}}",
+ "membersCount_many": "Członkowie: {{count}}",
+ "membersCount_one": "Członek: {{count}}",
+ "membersCount_other": "Członkowie: {{count}}",
+ "noDescription": "Brak opisu",
+ "noMatches": "Brak zespołów pasujących do bieżących filtrów",
+ "partial": {
+ "pending": "Ostatnie uruchomienie wciąż się uzgadnia.",
+ "skipped": "Ostatnie uruchomienie pominęło członków zespołu.",
+ "skippedWithCount": "Ostatnie uruchomienie pominęło {{count}}/{{expected}} członka zespołu.",
+ "skippedWithCount_few": "Ostatnie uruchomienie pominęło {{count}}/{{expected}} członków zespołu.",
+ "skippedWithCount_many": "Ostatnie uruchomienie pominęło {{count}}/{{expected}} członków zespołu.",
+ "skippedWithCount_one": "Ostatnie uruchomienie pominęło {{count}}/{{expected}} członka zespołu.",
+ "skippedWithCount_other": "Ostatnie uruchomienie pominęło {{count}}/{{expected}} członków zespołu.",
+ "stopped": "Ostatnie uruchomienie zatrzymano, zanim dołączyli wszyscy członkowie zespołu.",
+ "stoppedWithCount": "Ostatnie uruchomienie zatrzymano, zanim dołączył {{count}}/{{expected}} członek zespołu.",
+ "stoppedWithCount_few": "Ostatnie uruchomienie zatrzymano, zanim dołączyło {{count}}/{{expected}} członków zespołu.",
+ "stoppedWithCount_many": "Ostatnie uruchomienie zatrzymano, zanim dołączyło {{count}}/{{expected}} członków zespołu.",
+ "stoppedWithCount_one": "Ostatnie uruchomienie zatrzymano, zanim dołączył {{count}}/{{expected}} członek zespołu.",
+ "stoppedWithCount_other": "Ostatnie uruchomienie zatrzymano, zanim dołączyło {{count}}/{{expected}} członków zespołu."
+ },
+ "searchPlaceholder": "Szukaj zespołów...",
+ "sections": {
+ "otherTeams": "Inne zespoły",
+ "projectTeams": "Zespoły dla {{project}}",
+ "selectedProject": "wybrany projekt"
+ },
+ "solo": "Solo",
+ "status": {
+ "active": "Aktywny",
+ "deleted": "Usunięty",
+ "launching": "Uruchamianie...",
+ "offline": "Offline",
+ "partialFailure": "Uruchomienie nie powiodło się w trakcie",
+ "partialPending": "Bootstrap w toku",
+ "partialSkipped": "Uruchomienie pominęło członka",
+ "running": "Działa"
+ },
+ "title": "Wybierz zespół",
+ "trash": "Kosz ({{count}})",
+ "trash_few": "Kosz ({{count}})",
+ "trash_many": "Kosz ({{count}})",
+ "trash_one": "Kosz ({{count}})",
+ "trash_other": "Kosz ({{count}})",
+ "deleteDraft": {
+ "title": "Usuń wersję roboczą",
+ "message": "Usunąć roboczy zespół \"{{teamName}}\"? Tej operacji nie można cofnąć.",
+ "confirmLabel": "Usuń",
+ "cancelLabel": "Anuluj"
+ },
+ "moveToTrash": {
+ "title": "Przenieś do kosza",
+ "message": "Przenieść zespół \"{{teamName}}\" do kosza? Możesz go później przywrócić.",
+ "confirmLabel": "Przenieś do kosza",
+ "cancelLabel": "Anuluj"
+ },
+ "deleteForever": {
+ "title": "Usuń trwale",
+ "message": "Usunąć zespół \"{{teamName}}\" trwale? Wszystkie dane zostaną utracone.",
+ "confirmLabel": "Usuń na zawsze",
+ "cancelLabel": "Anuluj"
+ }
+ },
+ "messageComposer": {
+ "crossTeam": {
+ "hint": "Wskazówka: Wiadomości między zespołami trafiają do lidera zespołu docelowego. Jeśli chcesz, aby odpowiedź wróciła do lidera Twojego zespołu, a nie do Ciebie, powiedz to wyraźnie w wiadomości."
+ },
+ "attachments": {
+ "attachFiles": "Załącz pliki (wklej lub przeciągnij i upuść)",
+ "unavailable": "Załączniki są niedostępne",
+ "disabledHint": "Załączniki plików są obsługiwane dla lidera zespołu online i członków zespołu OpenCode online. Usuń załączniki lub zmień odbiorcę.",
+ "restrictions": {
+ "crossTeam": "Załączniki plików nie są obsługiwane dla wiadomości między zespołami",
+ "teamOffline": "Zespół musi być online, aby załączać pliki",
+ "unsupportedRecipient": "Pliki można wysyłać do lidera zespołu lub członków zespołu OpenCode",
+ "openCodeOffline": "Zespół musi być online, aby załączać pliki dla członków zespołu OpenCode",
+ "sending": "Poczekaj na zakończenie wysyłania bieżącej wiadomości przed dodaniem plików",
+ "maximumReached": "Osiągnięto maksymalną liczbę załączników",
+ "leadOnly": "Pliki można wysyłać tylko do lidera zespołu"
+ }
+ },
+ "slash": {
+ "restrictions": {
+ "attachments": "Polecenia slash wymagają aktywnego lidera zespołu i nie mogą być wysyłane z załącznikami",
+ "crossTeam": "Polecenia slash można uruchamiać tylko na bieżącym liderze zespołu",
+ "notLead": "Polecenia slash można wysyłać tylko do lidera zespołu",
+ "leadOffline": "Polecenia slash wymagają, aby lider zespołu był online"
+ }
+ },
+ "status": {
+ "reusedCrossTeamRequest": "Ponownie użyto niedawnego żądania między zespołami",
+ "teamOffline": "Zespół offline"
+ },
+ "revision": {
+ "editing": "Edytowanie poprzedniej wiadomości",
+ "cancel": "Anuluj",
+ "tooltip": "Poproś agenta, aby zignorował poprzednią wiadomość i przywrócił ją do kompozytora."
+ },
+ "input": {
+ "charsLeft": "Pozostało {{count}} znaków",
+ "charsLeft_one": "Pozostał {{count}} znak",
+ "charsLeft_other": "Pozostało {{count}} znaków",
+ "teamLaunchingPlaceholder": "Zespół się uruchamia... wiadomość zostanie umieszczona w kolejce do dostarczenia do skrzynki.",
+ "crossTeamPlaceholder": "Wiadomość między zespołami do {{team}}...",
+ "teamFallback": "zespół",
+ "placeholder": "Napisz wiadomość... (Enter, aby wysłać, Shift+Enter dla nowej linii)",
+ "slashTip": "Wskazówka: Możesz użyć \"/\", aby uruchomić dowolne polecenia Claude.",
+ "charsLeft_few": "Pozostały {{count}} znaki",
+ "charsLeft_many": "Pozostało {{count}} znaków"
+ },
+ "teamSelector": {
+ "thisTeam": "Ten zespół",
+ "current": "bieżący",
+ "online": "online",
+ "offline": "offline",
+ "onlineTitle": "Online",
+ "offlineTitle": "Offline"
+ },
+ "recipient": {
+ "select": "Wybierz...",
+ "searchPlaceholder": "Szukaj...",
+ "noResults": "Brak wyników"
+ },
+ "actions": {
+ "voiceToText": "Głos na tekst",
+ "send": "Wyślij",
+ "sendingUnavailableLaunching": "Wysyłanie niedostępne, gdy zespół się uruchamia"
+ }
+ },
+ "claudeLogs": {
+ "filter": {
+ "ariaLabel": "Filtruj logi",
+ "tooltip": "Filtruj logi",
+ "sections": {
+ "stream": "Strumień",
+ "content": "Treść"
+ },
+ "kinds": {
+ "output": "Wyjście",
+ "thinking": "Myślenie",
+ "tool": "Wywołania narzędzi"
+ },
+ "actions": {
+ "reset": "Resetuj",
+ "save": "Zapisz"
+ },
+ "streams": {
+ "stdout": "stdout",
+ "stderr": "stderr"
+ }
+ },
+ "rawLineCount": "{{formattedCount}} surowych linii",
+ "rawLineCount_one": "{{formattedCount}} surowa linia",
+ "rawLinesCaptured": "przechwycono {{count}}",
+ "emptyRawLogs": "{{count}}; żadna nie jest jeszcze wyjściem asystenta/narzędzia.",
+ "noLogsYet": "Brak logów.",
+ "teamNotRunning": "Zespół nie działa.",
+ "searchPlaceholder": "Szukaj logów...",
+ "clearSearch": "Wyczyść wyszukiwanie",
+ "newCount": "+{{count}} nowych",
+ "loading": "Ładowanie...",
+ "showMore": "Pokaż więcej",
+ "noLogsCaptured": "Nie przechwycono logów.",
+ "noMatchingLogs": "Brak pasujących logów.",
+ "rawLineCount_few": "{{formattedCount}} surowe linie",
+ "rawLineCount_many": "{{formattedCount}} surowych linii",
+ "rawLineCount_other": "{{formattedCount}} surowych linii",
+ "openFullscreen": "Otwórz logi na pełnym ekranie",
+ "fullscreen": "Pełny ekran",
+ "viewingFullscreen": "Wyświetlanie w trybie pełnoekranowym",
+ "logsTitle": "Logi",
+ "sourceSelect": {
+ "placeholder": "Wybierz źródło logów...",
+ "searchPlaceholder": "Szukaj źródeł logów...",
+ "emptyMessage": "Nie znaleziono źródeł logów.",
+ "ariaLabel": "Źródło logów",
+ "leadLabel": "Lider",
+ "selectSourceEmpty": "Wybierz źródło logów.",
+ "leadDescription": "Lider zespołu",
+ "removedLabel": "usunięty",
+ "removedDescription": "Usunięty"
+ }
+ },
+ "agentGraph": {
+ "popover": {
+ "externalTeam": "Zespół zewnętrzny",
+ "process": {
+ "startedBy": "Uruchomiony przez:",
+ "at": "O:",
+ "openUrl": "Otwórz URL"
+ },
+ "overflow": {
+ "hiddenTasks": "Ukryte zadania",
+ "empty": "Brak dostępnych ukrytych zadań."
+ },
+ "member": {
+ "lead": "Lider",
+ "workingOn": "pracuje nad",
+ "recentTools": "Ostatnie narzędzia",
+ "spawn": {
+ "waitingToStart": "oczekiwanie na uruchomienie",
+ "starting": "uruchamianie",
+ "failed": "niepowodzenie"
+ },
+ "state": {
+ "active": "aktywny",
+ "idle": "bezczynny",
+ "offline": "offline",
+ "runningTool": "uruchamia narzędzie"
+ },
+ "activeTool": {
+ "running": "Uruchamianie narzędzia",
+ "failed": "Narzędzie nie powiodło się",
+ "finished": "Narzędzie zakończone"
+ },
+ "actions": {
+ "message": "Wiadomość",
+ "profile": "Profil",
+ "task": "Zadanie"
+ }
+ }
+ },
+ "logPreview": {
+ "logs": "Logi",
+ "loading": "Ładowanie logów",
+ "more": "+{{count}} więcej",
+ "more_one": "+{{count}} więcej",
+ "more_other": "+{{count}} więcej",
+ "more_few": "+{{count}} więcej",
+ "more_many": "+{{count}} więcej",
+ "unsupportedProvider": "Nieobsługiwany dostawca",
+ "openCodeLogsDelayed": "Logi OpenCode opóźnione",
+ "logsUnavailable": "Logi niedostępne",
+ "noRecentLogs": "Brak ostatnich logów",
+ "toolError": "Błąd narzędzia",
+ "toolResult": "Wynik narzędzia",
+ "toolUse": "Użycie narzędzia",
+ "thinking": "Myślenie",
+ "error": "Błąd",
+ "logEvent": "Zdarzenie logu",
+ "noErrorOutput": "Brak wyjścia błędu",
+ "noOutput": "Brak wyjścia",
+ "noInput": "Brak wejścia"
+ },
+ "blockingEdge": {
+ "title": "Blokująca zależność",
+ "blocks": "blokuje",
+ "close": "Zamknij",
+ "blockingHiddenTasks": "Blokujące ukryte zadania",
+ "blockedHiddenTasks": "Zablokowane ukryte zadania",
+ "links_one": "{{count}} link",
+ "links_other": "{{count}} linków",
+ "hiddenBlockingLinks_one": "{{count}} ukryty link blokujący",
+ "hiddenBlockingLinks_other": "{{count}} ukrytych linków blokujących",
+ "hiddenTaskStack": "Stos ukrytych zadań",
+ "hiddenTasks_one": "{{count}} ukryte zadanie",
+ "hiddenTasks_other": "{{count}} ukrytych zadań",
+ "task": "Zadanie",
+ "openBlockerStack": "Otwórz stos blokujących",
+ "openBlockedStack": "Otwórz stos zablokowanych",
+ "openBlockerTask": "Otwórz zadanie blokujące",
+ "openBlockedTask": "Otwórz zablokowane zadanie"
+ },
+ "activityHud": {
+ "activity": "Aktywność",
+ "noRecentActivity": "Brak ostatniej aktywności",
+ "more": "+{{count}} więcej",
+ "more_one": "+{{count}} więcej",
+ "more_other": "+{{count}} więcej",
+ "more_few": "+{{count}} więcej",
+ "more_many": "+{{count}} więcej"
+ },
+ "provisioning": {
+ "launchDetails": "Szczegóły uruchomienia",
+ "launchDetailsDescription": "Szczegółowy postęp uruchamiania zespołu, wyjście na żywo i logi CLI."
+ }
+ },
+ "projectPath": {
+ "label": "Projekt",
+ "source": {
+ "claude": "Znalezione przez Claude",
+ "codex": "Znalezione przez Codex",
+ "mixed": "Znalezione przez Claude i Codex"
+ },
+ "deleted": {
+ "title": "Folder projektu już nie istnieje",
+ "label": "Usunięty"
+ },
+ "mode": {
+ "projectList": "Z listy projektów",
+ "customPath": "Niestandardowa ścieżka"
+ },
+ "loadingProjects": "Ładowanie projektów...",
+ "selectProject": "Wybierz projekt...",
+ "searchPlaceholder": "Szukaj projektu wg nazwy lub ścieżki",
+ "empty": "Nic nie znaleziono",
+ "selectFromList": "Wybierz projekt z listy",
+ "noProjects": "Nie znaleziono projektów, przełącz na niestandardową ścieżkę.",
+ "customWorkingDirectory": "Niestandardowy katalog roboczy",
+ "browse": "Przeglądaj",
+ "createAutomatically": "Jeśli katalog nie istnieje, zostanie utworzony automatycznie."
+ },
+ "members": {
+ "badges": {
+ "worktree": "worktree"
+ },
+ "runtimeTelemetry": {
+ "title": "Lokalne obciążenie środowiska uruchomieniowego",
+ "description": "Tylko procesy nadrzędne i podrzędne. Zdalna inferencja LLM nie jest uwzględniona.",
+ "cpu": "CPU",
+ "memory": "Pamięć",
+ "summedRss": "zsumowany RSS",
+ "sharedHost": "Współdzielona metryka hosta OpenCode. Nie jest wyłączna dla tego członka.",
+ "processTreeCapped": "Drzewo procesów zostało ograniczone dla tej próbki.",
+ "rssHint": "RSS może obejmować współdzielone strony, więc najlepiej traktować go jako sygnał obciążenia, a nie wyłączną pamięć."
+ },
+ "editor": {
+ "title": "Członkowie",
+ "addMember": "Dodaj członka",
+ "editAsJson": "Edytuj jako JSON",
+ "runInSeparateWorktrees": "Uruchamiaj członków zespołu w oddzielnych worktree",
+ "agentTeamsMcpOnly": "Tylko Agent Teams MCP",
+ "removedCount": "Usunięci ({{count}})",
+ "removedModelLockReason": "Usunięci członkowie są zachowywani na potrzeby historii miękkiego usuwania. Przywróć ich, aby edytować ustawienia.",
+ "memberNamesUnique": "Nazwy członków muszą być unikalne"
+ },
+ "stats": {
+ "computing": "Obliczanie statystyk...",
+ "empty": "Brak dostępnych statystyk",
+ "lines": "Linie",
+ "linesInfo": "Przybliżone. Dokładne dla narzędzi Edit i Write. Zapisy plików przez Bash są szacowane na podstawie wzorców poleceń (heredoc, echo, sed) i mogą być niedoszacowane.",
+ "files": "Pliki",
+ "toolCalls": "Wywołania narzędzi",
+ "tokens": "Tokeny",
+ "toolUsage": "Użycie narzędzi",
+ "filesTouched": "Dotknięte pliki ({{count}})",
+ "viewAllChanges": "Zobacz wszystkie zmiany",
+ "showLess": "Pokaż mniej",
+ "moreFiles": "+{{count}} więcej",
+ "footer": "{{count}} sesji · obliczono {{computedAgo}}",
+ "footer_one": "{{count}} sesja · obliczono {{computedAgo}}",
+ "footer_few": "{{count}} sesje · obliczono {{computedAgo}}",
+ "footer_many": "{{count}} sesji · obliczono {{computedAgo}}",
+ "footer_other": "{{count}} sesji · obliczono {{computedAgo}}"
+ },
+ "logs": {
+ "searching": "Wyszukiwanie logów...",
+ "empty": "Nie znaleziono logów",
+ "waitingForTaskActivity": "Zadanie w toku - oczekiwanie na aktywność sesji (automatyczne odświeżanie)...",
+ "noTaskActivity": "Brak aktywności sesji dla tego zadania",
+ "noMemberActivity": "Ten członek nie ma jeszcze zarejestrowanej aktywności sesji",
+ "leadSessionTooltip": "Pełne logi sesji lidera zespołu - przydatne dla globalnego kontekstu orkiestracji, nie specyficzne dla tego agenta",
+ "memberSessionTooltip": "Pełne logi trwałej sesji członka zespołu - przydatne, gdy praca działa w głównej sesji członka zamiast w pliku podagenta",
+ "startedAt": "rozpoczęto {{time}}",
+ "active": "aktywny",
+ "showDetails": "Pokaż szczegóły",
+ "hideDetails": "Ukryj szczegóły",
+ "loadingDetails": "Ładowanie szczegółów...",
+ "failedToLoadDetails": "Nie udało się załadować szczegółów"
+ },
+ "detail": {
+ "relaunchOpenCode": "Uruchom ponownie OpenCode",
+ "restart": "Uruchom ponownie",
+ "legacyLogsFallback": "Awaryjne starsze logi",
+ "copyDiagnostics": "Kopiuj diagnostykę",
+ "pid": "PID {{pid}}",
+ "removedAt": "Usunięto {{date}}",
+ "failedToRestartMember": "Nie udało się ponownie uruchomić członka",
+ "sendMessage": "Wyślij wiadomość",
+ "assignTask": "Przypisz zadanie",
+ "remove": "Usuń"
+ },
+ "list": {
+ "loading": "Ładowanie członków zespołu",
+ "unavailable": "Skład zespołu niedostępny",
+ "unavailableDescription": "{{count}} członków zespołu jest znanych z metadanych zespołu, ale brakuje szczegółów składu.",
+ "unavailableDescription_one": "{{count}} członek zespołu jest znany z metadanych zespołu, ale brakuje szczegółów składu.",
+ "soloLeadOnly": "Zespół solo - tylko lider",
+ "removedCount": "Usunięci ({{count}})",
+ "unavailableDescription_few": "{{count}} członków zespołu jest znanych z metadanych zespołu, ale brakuje szczegółów składu.",
+ "unavailableDescription_many": "{{count}} członków zespołu jest znanych z metadanych zespołu, ale brakuje szczegółów składu.",
+ "unavailableDescription_other": "{{count}} członków zespołu jest znanych z metadanych zespołu, ale brakuje szczegółów składu."
+ },
+ "executionLog": {
+ "empty": "Nic do wyświetlenia",
+ "emptyUserMessage": "{{time}} - (puste)",
+ "agentInstructions": "Instrukcje agenta",
+ "memberTurn": "tura {{member}}",
+ "agentTurn": "Tura agenta",
+ "turn": "tura"
+ },
+ "recentMessages": {
+ "latest": "Najnowsze wiadomości",
+ "latestForMember": "Najnowsze wiadomości - {{member}}",
+ "loadMore": "Załaduj więcej",
+ "expand": "Rozwiń",
+ "collapse": "Zwiń"
+ },
+ "leadModel": {
+ "defaultModel": "Domyślny",
+ "providerModelAria": "dostawca {{provider}}, {{model}}",
+ "leadShort": "lider",
+ "teamLead": "Lider zespołu",
+ "syncWithTeammates": "Synchronizuj model z członkami zespołu",
+ "anthropicTeamWide": "Anthropic dla całego zespołu",
+ "runtimeInheritance": "Środowisko uruchomieniowe lidera dotyczy członków zespołu, chyba że ustawią własnego dostawcę lub model.",
+ "anthropicContextLimit": "Limit kontekstu 200K obowiązuje w całym zespole dla środowisk uruchomieniowych Anthropic w tym uruchomieniu, w tym dla niestandardowych członków zespołu Anthropic."
+ },
+ "runtimeLogs": {
+ "autoRefresh": "Automatyczne odświeżanie",
+ "wrapLines": "Zawijaj linie",
+ "loadingTail": "Ładowanie końcówki logu procesu...",
+ "empty": "Nie przechwycono jeszcze pliku logu procesu dla tego członka.",
+ "copy": "Kopiuj",
+ "fileEmpty": "Plik logu procesu jest pusty.",
+ "showingLast": "Wyświetlanie ostatnich {{bytes}}.",
+ "showing": "Wyświetlanie {{bytes}}."
+ },
+ "tasks": {
+ "empty": "Brak zadań przypisanych do tego członka"
+ },
+ "messages": {
+ "loadOlder": "Załaduj starsze wiadomości",
+ "filters": {
+ "all": "Wszystkie",
+ "messages": "Wiadomości",
+ "comments": "Komentarze"
+ },
+ "empty": {
+ "loading": "Ładowanie aktywności...",
+ "noComments": "Brak komentarzy dla tego członka",
+ "noLoadedMessages": "Brak załadowanych wiadomości dla tego członka",
+ "noMessages": "Brak wiadomości z tym członkiem",
+ "noLoadedActivity": "Brak załadowanej aktywności dla tego członka",
+ "noActivity": "Brak aktywności z tym członkiem"
+ }
+ },
+ "actions": {
+ "openProfile": "Otwórz profil",
+ "editRole": "Edytuj rolę",
+ "sendMessage": "Wyślij wiadomość",
+ "assignTask": "Przypisz zadanie"
+ },
+ "roleSelect": {
+ "customRolePlaceholder": "Wprowadź niestandardową rolę..."
+ }
+ },
+ "schedule": {
+ "count": "{{count}} harmonogramów",
+ "count_one": "{{count}} harmonogram",
+ "count_other": "{{count}} harmonogramów",
+ "nextRun": "Następne: {{next}}",
+ "actions": {
+ "runNow": "Uruchom teraz",
+ "edit": "Edytuj",
+ "pause": "Wstrzymaj",
+ "resume": "Wznów",
+ "delete": "Usuń",
+ "addSchedule": "Dodaj harmonogram"
+ },
+ "runHistory": {
+ "loading": "Ładowanie historii uruchomień...",
+ "empty": "Brak uruchomień"
+ },
+ "count_few": "{{count}} harmonogramy",
+ "count_many": "{{count}} harmonogramów",
+ "runLog": {
+ "title": "Log uruchomienia",
+ "exitCode": "wyjście {{code}}",
+ "retryCount": "ponów {{count}}/{{max}}",
+ "stillRunning": "Zadanie wciąż działa...",
+ "loadingLogs": "Ładowanie logów...",
+ "errors": "Błędy",
+ "close": "Zamknij"
+ },
+ "cron": {
+ "expression": "Wyrażenie cron",
+ "highFrequencyWarning": "Harmonogram o wysokiej częstotliwości (interwał krótszy niż 5 min)",
+ "nextRuns": "Następne uruchomienia:",
+ "timezone": "Strefa czasowa",
+ "selectTimezone": "Wybierz strefę czasową",
+ "warmUpTime": "Czas rozgrzewki",
+ "warmUpDescription": "Przygotowuje wybranych dostawców przed zaplanowanym wykonaniem",
+ "errors": {
+ "enterExpression": "Wprowadź wyrażenie cron",
+ "invalidExpression": "Nieprawidłowe wyrażenie cron"
+ },
+ "presets": {
+ "everyHour": "Co godzinę",
+ "everySixHours": "Co 6 godzin",
+ "dailyAtNine": "Codziennie o 9:00",
+ "weekdaysAtNine": "W dni powszednie o 9:00",
+ "mondayAtNine": "W poniedziałek o 9:00",
+ "everyThirtyMinutes": "Co 30 min"
+ },
+ "warmUpOptions": {
+ "none": "Bez rozgrzewki",
+ "fiveMinutes": "5 min",
+ "tenMinutes": "10 min",
+ "fifteenMinutes": "15 min",
+ "thirtyMinutes": "30 min"
+ }
+ },
+ "empty": {
+ "title": "Brak harmonogramów",
+ "description": "Utwórz harmonogram, aby automatycznie uruchamiać zadania Claude zgodnie z harmonogramem cron."
+ },
+ "title": "Harmonogramy",
+ "status": {
+ "active": "Aktywny",
+ "paused": "Wstrzymany",
+ "disabled": "Wyłączony"
+ },
+ "runStatus": {
+ "pending": "Oczekujące",
+ "warmingUp": "Rozgrzewanie",
+ "warm": "Rozgrzane",
+ "running": "Działa",
+ "completed": "Ukończone",
+ "failed": "Niepowodzenie",
+ "interrupted": "Przerwane",
+ "cancelled": "Anulowane"
+ }
+ },
+ "openCodeContextConfigHint": {
+ "summary": "Lokalne modele OpenCode mogą używać budżetu kontekstu OpenCode zamiast limitów dotyczących tylko promptu.",
+ "description": "Dodaj pasujące limity do konfiguracji OpenCode dla dostawcy i modelu używanego przez tego członka zespołu. Pomaga to OpenCode kompaktować i przycinać, zanim modele lokalne przepełnią swoje okno kontekstu.",
+ "replacePrefix": "Zamień",
+ "and": "i",
+ "replaceSuffix": "na identyfikatory dostawcy i modelu z Twojej konfiguracji OpenCode. Instrukcje w prompcie, takie jak",
+ "promptInstructionsSuffix": "są słabsze, ponieważ żądanie jest składane, zanim model je odczyta.",
+ "providerLimits": "Limity dostawcy",
+ "compactionConfig": "Konfiguracja kompaktacji"
+ },
+ "sessions": {
+ "noProjectPath": "Brak powiązanej ścieżki projektu",
+ "provisioningHint": "Sesje pojawią się po przygotowaniu zespołu",
+ "projectNotFound": "Nie znaleziono projektu",
+ "loading": "Ładowanie sesji...",
+ "empty": "Nie znaleziono sesji",
+ "showAllSessions": "Pokaż dla wszystkich sesji",
+ "lead": "lider",
+ "removeFilter": "Usuń filtr",
+ "filterBySession": "Filtruj wg tej sesji",
+ "openSession": "Otwórz sesję",
+ "title": "Sesje"
+ },
+ "provisioning": {
+ "pid": "PID {{pid}}",
+ "cancel": "Anuluj",
+ "moreWarningsHidden": "{{count}} więcej ukrytych ostrzeżeń",
+ "diagnostics": "Diagnostyka",
+ "liveOutput": "Wyjście na żywo",
+ "diagnosticsCopied": "Skopiowano diagnostykę",
+ "copyDiagnostics": "Kopiuj diagnostykę",
+ "copied": "Skopiowano",
+ "noOutput": "Nie przechwycono jeszcze żadnego wyjścia.",
+ "cliLogs": "Logi CLI",
+ "steps": {
+ "starting": "Uruchamianie",
+ "configuring": "Konfiguracja zespołu",
+ "assembling": "Dołączanie członków",
+ "finalizing": "Finalizowanie"
+ },
+ "providerStatus": {
+ "status": {
+ "checking": "sprawdzanie...",
+ "ready": "OK",
+ "notes": "OK (uwagi)",
+ "failed": "BŁĄD",
+ "pending": "oczekiwanie"
+ },
+ "detailSummary": {
+ "cliBinaryMissing": "Brak pliku binarnego CLI",
+ "openCodeRuntimeMissing": "Brak środowiska uruchomieniowego OpenCode",
+ "openCodeWindowsAccessBlocked": "Dostęp OpenCode w Windows zablokowany",
+ "openCodeNoOutput": "Sprawdzenie środowiska uruchomieniowego OpenCode nie zwróciło wyjścia",
+ "openCodeMcpUnreachable": "MCP aplikacji OpenCode nieosiągalne",
+ "workingDirectoryMissing": "Brak katalogu roboczego",
+ "cliBinaryCouldNotStart": "Nie udało się uruchomić pliku binarnego CLI",
+ "cliPreflightIncomplete": "Sprawdzenie wstępne CLI nie zakończyło się",
+ "authenticationRequired": "Wymagane uwierzytelnianie",
+ "runtimeProviderNotConfigured": "Dostawca środowiska uruchomieniowego nie jest skonfigurowany",
+ "cliPreflightFailed": "Sprawdzenie wstępne CLI nie powiodło się",
+ "selectedModelCompatible": "Wybrany model zgodny",
+ "selectedModelCompatibilityPending": "Zgodność wybranego modelu w toku",
+ "selectedModelAvailable": "Wybrany model dostępny",
+ "selectedModelVerified": "Wybrany model zweryfikowany",
+ "selectedModelUnavailable": "Wybrany model niedostępny",
+ "selectedModelTimedOut": "Weryfikacja wybranego modelu przekroczyła limit czasu",
+ "selectedModelCheckFailed": "Sprawdzenie wybranego modelu nie powiodło się",
+ "selectedModelDeferred": "Weryfikacja wybranego modelu odroczona",
+ "selectedModelPingNotConfirmed": "Ping wybranego modelu niepotwierdzony",
+ "readyWithNotes": "Gotowe z uwagami",
+ "needsAttention": "Wymaga uwagi"
+ },
+ "modelChecksSummary": "Sprawdzenia wybranego modelu - {{details}}",
+ "modelParts": {
+ "unavailable": "{{count}} model niedostępny",
+ "unavailable_one": "{{count}} model niedostępny",
+ "unavailable_other": "{{count}} modeli niedostępnych",
+ "checkFailed": "{{count}} sprawdzenie modelu nie powiodło się",
+ "checkFailed_one": "{{count}} sprawdzenie modelu nie powiodło się",
+ "checkFailed_other": "{{count}} sprawdzeń modeli nie powiodło się",
+ "timedOut": "{{count}} model przekroczył limit czasu",
+ "timedOut_one": "{{count}} model przekroczył limit czasu",
+ "timedOut_other": "{{count}} modeli przekroczyło limit czasu",
+ "deferred": "{{count}} weryfikacja odroczona",
+ "deferred_one": "{{count}} weryfikacja odroczona",
+ "deferred_other": "{{count}} weryfikacji odroczonych",
+ "pingNotConfirmed": "{{count}} ping niepotwierdzony",
+ "pingNotConfirmed_one": "{{count}} ping niepotwierdzony",
+ "pingNotConfirmed_other": "{{count}} pingów niepotwierdzonych",
+ "compatibilityPending": "{{count}} zgodny, głęboka weryfikacja w toku",
+ "compatibilityPending_one": "{{count}} zgodny, głęboka weryfikacja w toku",
+ "compatibilityPending_other": "{{count}} zgodnych, głęboka weryfikacja w toku",
+ "compatible": "{{count}} zgodny",
+ "compatible_one": "{{count}} zgodny",
+ "compatible_other": "{{count}} zgodnych",
+ "checking": "{{count}} sprawdzanie",
+ "checking_one": "{{count}} sprawdzanie",
+ "checking_other": "{{count}} sprawdzanych",
+ "available": "{{count}} dostępny",
+ "available_one": "{{count}} dostępny",
+ "available_other": "{{count}} dostępnych",
+ "verified": "{{count}} zweryfikowany",
+ "verified_one": "{{count}} zweryfikowany",
+ "verified_other": "{{count}} zweryfikowanych",
+ "unavailable_few": "{{count}} modele niedostępne",
+ "unavailable_many": "{{count}} modeli niedostępnych",
+ "checkFailed_few": "{{count}} sprawdzenia modeli nie powiodły się",
+ "checkFailed_many": "{{count}} sprawdzeń modeli nie powiodło się",
+ "timedOut_few": "{{count}} modele przekroczyły limit czasu",
+ "timedOut_many": "{{count}} modeli przekroczyło limit czasu",
+ "deferred_few": "{{count}} weryfikacje odroczone",
+ "deferred_many": "{{count}} weryfikacji odroczonych",
+ "pingNotConfirmed_few": "{{count}} pingi niepotwierdzone",
+ "pingNotConfirmed_many": "{{count}} pingów niepotwierdzonych",
+ "compatibilityPending_few": "{{count}} zgodne, głęboka weryfikacja w toku",
+ "compatibilityPending_many": "{{count}} zgodnych, głęboka weryfikacja w toku",
+ "compatible_few": "{{count}} zgodne",
+ "compatible_many": "{{count}} zgodnych",
+ "checking_few": "{{count}} sprawdzane",
+ "checking_many": "{{count}} sprawdzanych",
+ "available_few": "{{count}} dostępne",
+ "available_many": "{{count}} dostępnych",
+ "verified_few": "{{count}} zweryfikowane",
+ "verified_many": "{{count}} zweryfikowanych"
+ },
+ "openProviderSettings": "Otwórz ustawienia {{provider}}",
+ "copied": "Skopiowano",
+ "copyDiagnostics": "Kopiuj diagnostykę",
+ "deepVerificationPending": "Głęboka weryfikacja wciąż trwa. Darmowe modele OpenCode mogą zająć około 20 sekund.",
+ "progress": {
+ "checkingSelectedProviders": "Sprawdzanie wybranych dostawców równolegle...",
+ "checkingProvider": "Sprawdzanie dostawcy {{provider}}...",
+ "checkingProviders": "Sprawdzanie dostawców {{providers}}..."
+ },
+ "failureHints": {
+ "openCodeAccessDenied": "Napraw uprawnienia folderu lub przenieś projekt do folderu zapisywalnego dla użytkownika. Uruchamianie jako administrator jest tylko tymczasowym obejściem.",
+ "openCodeBridgeNoOutput": "Uruchom ponownie aplikację i środowisko uruchomieniowe OpenCode, a następnie spróbuj ponownie. Jeśli się powtarza, skopiuj diagnostykę.",
+ "workingDirectoryMissing": "Wybierz istniejący katalog roboczy, a następnie otwórz ponownie to okno.",
+ "authenticationRequired": "Uwierzytelnij wymaganego dostawcę w Claude CLI, a następnie otwórz ponownie to okno.",
+ "runtimeProviderNotConfigured": "Skonfiguruj wybrane środowisko uruchomieniowe dostawcy, a następnie otwórz ponownie to okno.",
+ "openCodeRuntimeMissing": "Zainstaluj lub ponów środowisko uruchomieniowe OpenCode z karty statusu dostawcy, a następnie otwórz ponownie to okno.",
+ "openCodeAppMcpUnreachable": "Ponów uruchomienie, aby odświeżyć most MCP aplikacji OpenCode. Jeśli się powtarza, uruchom ponownie aplikację i środowisko uruchomieniowe OpenCode.",
+ "cliBinaryMissing": "Upewnij się, że lokalny plik binarny Claude CLI istnieje i można go uruchomić, a następnie otwórz ponownie to okno.",
+ "default": "Rozwiąż powyższy problem, a następnie otwórz ponownie to okno.",
+ "openCodeNodeModulesSymlinkPermission": "Uruchom Agent Teams AI jako administrator, a następnie ponów uruchomienie."
+ }
+ },
+ "presentation": {
+ "awaitingPermission": "{{count}} członek zespołu oczekuje na zatwierdzenie uprawnień",
+ "nameListWithMore": "{{names}}, +{{count}} więcej",
+ "waitingForOpenCode": "Oczekiwanie na OpenCode: {{names}}",
+ "bootstrapStalled": "Bootstrap zablokowany: {{names}}",
+ "bootstrapStalledWithOpenCodeWait": "{{stalled}}; Oczekiwanie na OpenCode: {{names}}",
+ "namedPendingDiagnostic": "{{label}}: {{names}}",
+ "countPendingDiagnostic": "{{count}} {{label}}",
+ "pendingLabels": {
+ "bootstrapStalled": "Bootstrap zablokowany",
+ "shellOnly": "Tylko powłoka",
+ "waitingForBootstrap": "Oczekiwanie na bootstrap",
+ "bootstrapUnconfirmed": "Bootstrap niepotwierdzony",
+ "awaitingPermission": "Oczekiwanie na uprawnienia",
+ "waitingForRuntime": "Oczekiwanie na środowisko uruchomieniowe",
+ "shellOnlyLower": "tylko powłoka",
+ "waitingForBootstrapLower": "oczekiwanie na bootstrap",
+ "bootstrapUnconfirmedLower": "bootstrap niepotwierdzony",
+ "awaitingPermissionLower": "oczekiwanie na uprawnienia",
+ "waitingForRuntimeLower": "oczekiwanie na środowisko uruchomieniowe"
+ },
+ "failed": {
+ "memberFailedToStart": "{{name}} nie udało się uruchomić",
+ "teammatesFailedToStart": "{{count}} członkom zespołu nie udało się uruchomić",
+ "teammatesFailedRatio": "{{count}}/{{total}} członkom zespołu nie udało się uruchomić"
+ },
+ "skipped": {
+ "memberSkipped": "{{name}} pominięty w tym uruchomieniu",
+ "memberSkippedWithReason": "{{name}} pominięty w tym uruchomieniu - {{reason}}",
+ "memberSkippedCompact": "{{name}} pominięty",
+ "teammatesSkipped": "{{count}} członków zespołu pominiętych",
+ "teammatesSkippedList": "Pominięci członkowie zespołu: {{list}}",
+ "teammatesSkippedRatio": "{{count}}/{{total}} członków zespołu pominiętych w tym uruchomieniu"
+ },
+ "joining": {
+ "teammatesStillJoining": "{{count}} członków zespołu wciąż dołącza",
+ "teammatesStillJoining_one": "{{count}} członek zespołu wciąż dołącza",
+ "teammatesStillJoining_few": "{{count}} członków zespołu wciąż dołącza",
+ "teammatesStillJoining_many": "{{count}} członków zespołu wciąż dołącza",
+ "teammatesStillJoining_other": "{{count}} członków zespołu wciąż dołącza",
+ "teammatesConfirmedRatio": "{{count}}/{{total}} członków zespołu potwierdzonych"
+ },
+ "ready": {
+ "leadOnline": "Lider online",
+ "allTeammatesJoined": "Wszystkich {{count}} członków zespołu dołączyło",
+ "teamProvisionedLeadOnline": "Zespół przygotowany - lider online",
+ "teamProvisionedAllJoined": "Zespół przygotowany - wszystkich {{count}} członków zespołu dołączyło",
+ "teamProvisionedStillJoining": "Zespół przygotowany - członkowie zespołu wciąż dołączają",
+ "launchFinishedWithErrors": "Uruchomienie zakończone z błędami - {{count}}/{{total}} członkom zespołu nie udało się uruchomić",
+ "launchContinuedSkipped": "Uruchomienie kontynuowane - {{count}}/{{total}} członków zespołu pominiętych",
+ "teamLaunchedLeadOnline": "Zespół uruchomiony - lider online",
+ "teamLaunchedAllJoined": "Zespół uruchomiony - wszystkich {{count}} członków zespołu dołączyło"
+ },
+ "panel": {
+ "launchFailed": "Uruchomienie nie powiodło się",
+ "launchDetails": "Szczegóły uruchomienia",
+ "launchFinishedWithErrors": "Uruchomienie zakończone z błędami",
+ "launchContinuedSkipped": "Uruchomienie kontynuowane z pominiętymi członkami zespołu",
+ "coreTeamReady": "Trzon zespołu gotowy",
+ "finishingLaunch": "Kończenie uruchomienia",
+ "teamLaunched": "Zespół uruchomiony",
+ "launchingTeam": "Uruchamianie zespołu"
+ }
+ }
+ },
+ "liveRuntimeStatus": {
+ "title": "Status środowiska uruchomieniowego na żywo",
+ "description": "Tylko wyświetlanie sygnału życia i stanu uruchomienia. Kontrolki procesów pozostają poniżej.",
+ "source": "źródło: {{source}}",
+ "lane": "ścieżka {{lane}}",
+ "diagnosticOnly": "Tylko diagnostyka",
+ "updated": "zaktualizowano {{value}}",
+ "states": {
+ "running": "Działa",
+ "starting": "Uruchamianie",
+ "waiting": "Oczekiwanie",
+ "degraded": "Wymaga uwagi",
+ "stopped": "Zatrzymany",
+ "unknown": "Nieznany"
+ }
+ },
+ "taskLogs": {
+ "exact": {
+ "title": "Dokładne logi zadania",
+ "loading": "Ładowanie dokładnych logów zadania...",
+ "description": "Dokładne wycinki transkrypcji renderowane tymi samymi komponentami logu wykonania, które są używane w Logach.",
+ "emptyTitle": "Brak jeszcze dokładnych logów zadania",
+ "emptyDescription": "Dokładne pakiety transkrypcji pojawią się tutaj, gdy dostępne będą jawne metadane transkrypcji powiązane z zadaniem.",
+ "summaryOnly": "tylko podsumowanie"
+ },
+ "executionSessions": {
+ "title": "Sesje wykonania",
+ "online": "Online",
+ "updating": "Aktualizowanie...",
+ "description": "Starsze przeglądanie i podglądy transkrypcji skoncentrowane na sesjach."
+ },
+ "stream": {
+ "title": "Strumień logów zadania"
+ }
+ },
+ "kanban": {
+ "taskCard": {
+ "cancelTask": "Anuluj zadanie {{taskId}}",
+ "cancel": "Anuluj",
+ "moveBackToTodoConfirm": "Przenieść to zadanie z powrotem do DO ZROBIENIA i powiadomić zespół?",
+ "confirm": "Potwierdź",
+ "keep": "Zachowaj",
+ "changesNeedAttention": "Zmiany wymagają uwagi",
+ "changes": "Zmiany",
+ "deleteTask": "Usuń zadanie",
+ "taskLogsActive": "Logi zadania aktywne",
+ "newTaskLogsArriving": "Nadchodzą nowe logi zadania",
+ "awaitingUser": "Oczekiwanie na użytkownika",
+ "awaitingLead": "Oczekiwanie na lidera",
+ "blockedBy": "Zablokowane przez",
+ "blocks": "Blokuje",
+ "start": "Rozpocznij",
+ "complete": "Ukończ",
+ "approve": "Zatwierdź",
+ "requestReview": "Poproś o przegląd",
+ "manualReview": "Przegląd ręczny",
+ "requestChanges": "Poproś o zmiany"
+ },
+ "filter": {
+ "title": "Filtruj zadania",
+ "session": "Sesja",
+ "allSessions": "Wszystkie sesje",
+ "teammate": "Członek zespołu",
+ "unassigned": "(nieprzypisane)",
+ "column": "Kolumna",
+ "clearAll": "Wyczyść wszystko"
+ },
+ "board": {
+ "addTask": "Dodaj zadanie",
+ "noTasks": "Brak zadań",
+ "showMore": "Pokaż {{count}} więcej",
+ "hiddenCount": "{{count}} ukrytych",
+ "trash": "Kosz",
+ "gridView": "Widok siatki",
+ "columnsView": "Widok kolumn"
+ },
+ "trash": {
+ "title": "Kosz",
+ "empty": "Brak usuniętych zadań",
+ "subject": "Temat",
+ "owner": "Właściciel",
+ "deleted": "Usunięto",
+ "unassigned": "Nieprzypisane",
+ "restoreTask": "Przywróć zadanie",
+ "restore": "Przywróć",
+ "close": "Zamknij"
+ },
+ "sort": {
+ "title": "Sortuj zadania",
+ "sortBy": "Sortuj wg",
+ "reset": "Resetuj",
+ "options": {
+ "updatedAt": {
+ "label": "Ostatnio zaktualizowane",
+ "description": "Najpierw niedawno zaktualizowane"
+ },
+ "createdAt": {
+ "label": "Utworzone",
+ "description": "Najpierw najnowsze"
+ },
+ "owner": {
+ "label": "Właściciel",
+ "description": "Alfabetycznie wg przypisanego"
+ },
+ "manual": {
+ "label": "Ręczne",
+ "description": "Kolejność przeciągnij i upuść"
+ }
+ }
+ },
+ "search": {
+ "clearSearch": "Wyczyść wyszukiwanie",
+ "tasks": "Zadania",
+ "createdAgo": "utworzono {{time}}",
+ "updatedAgo": "zaktualizowano {{time}}",
+ "placeholder": "Szukaj zadań... (#id lub tekst)"
+ },
+ "grid": {
+ "addTask": "Dodaj zadanie",
+ "noTasks": "Brak zadań"
+ },
+ "title": "Kanban",
+ "columns": {
+ "todo": "DO ZROBIENIA",
+ "inProgress": "W TOKU",
+ "review": "PRZEGLĄD",
+ "done": "GOTOWE",
+ "approved": "ZATWIERDZONE"
+ }
+ },
+ "worktreeGitReadiness": {
+ "checking": "Sprawdzanie statusu repozytorium Git dla worktree członków zespołu...",
+ "ready": "Worktree Git są gotowe.",
+ "readyOnBranch": "Worktree Git są gotowe na gałęzi {{branch}}.",
+ "needsSetup": "Izolacja worktree wymaga konfiguracji Git",
+ "initialCommitNotice": "Akcja początkowego commita dodaje do poczekalni i commituje wszystkie bieżące pliki z komunikatem",
+ "initializeRepository": "Zainicjuj repozytorium Git",
+ "createInitialCommit": "Utwórz początkowy commit",
+ "initialCommitMessage": "chore: initial commit"
+ },
+ "toolApproval": {
+ "settings": "Ustawienia",
+ "autoAllowAllTools": "Automatycznie zezwalaj na wszystkie narzędzia",
+ "autoAllowFileEdits": "Automatycznie zezwalaj na edycje plików (Edit, Write, NotebookEdit)",
+ "autoAllowSafeCommands": "Automatycznie zezwalaj na bezpieczne polecenia (git, pnpm, npm, ls...)",
+ "onTimeout": "Po przekroczeniu limitu czasu:",
+ "after": "po",
+ "secondsShort": "sek",
+ "timeoutActions": {
+ "wait": "Czekaj w nieskończoność",
+ "allow": "Zezwól",
+ "deny": "Odmów"
+ },
+ "submit": "Wyślij",
+ "allow": "Zezwól",
+ "deny": "Odmów",
+ "allowAll": "Zezwól na wszystkie",
+ "pendingCount": "{{count}} oczekujących",
+ "autoActionIn": "Auto-{{action}} za {{time}}",
+ "diff": {
+ "previewChanges": "Podgląd zmian",
+ "readingFile": "Odczyt pliku...",
+ "binaryFile": "Plik binarny - nie można wyświetlić podglądu",
+ "truncated": "Plik skrócony na 2MB - różnice mogą być niekompletne",
+ "newFile": "Nowy plik"
+ }
+ },
+ "memberWorkSync": {
+ "details": {
+ "title": "Synchronizacja pracy członka",
+ "actionableItems": "Elementy do działania",
+ "fingerprint": "Odcisk palca",
+ "report": "Raport",
+ "none": "brak",
+ "shadowWouldNudge": "Shadow przypomniałby",
+ "yes": "tak",
+ "no": "nie",
+ "moreActionableItems": "{{count}} więcej elementów do działania",
+ "diagnostics": "Diagnostyka: {{diagnostics}}"
+ },
+ "title": "Synchronizacja pracy członka",
+ "loadingDiagnostics": "Ładowanie diagnostyki synchronizacji pracy członka.",
+ "diagnosticsUnavailable": "Diagnostyka synchronizacji pracy członka jest niedostępna."
+ },
+ "advancedCli": {
+ "title": "Zaawansowane",
+ "useWorktree": "Użyj worktree",
+ "recent": "Ostatnie",
+ "commandPreview": "Podgląd polecenia",
+ "customArguments": "Niestandardowe argumenty",
+ "validate": "Waliduj",
+ "validation": {
+ "allFlagsValid": "Wszystkie flagi prawidłowe",
+ "unknownFlags": "Nieznane: {{flags}}",
+ "protectedFlags": "Chronione: {{flags}}",
+ "failed": "Walidacja nie powiodła się"
+ },
+ "placeholders": {
+ "worktreeName": "worktree-name"
+ }
+ },
+ "processes": {
+ "ago": "{{time}} temu",
+ "stoppedAgo": "zatrzymano {{time}} temu",
+ "running": "Działa",
+ "stopped": "Zatrzymany",
+ "stopProcess": "Zatrzymaj proces (SIGTERM)",
+ "kill": "Zabij",
+ "openInBrowser": "Otwórz w przeglądarce",
+ "open": "Otwórz",
+ "pid": "PID{{pid}}",
+ "title": "Procesy CLI"
+ },
+ "taskActivity": {
+ "loadingDetails": "Ładowanie szczegółów aktywności...",
+ "contextUnavailable": "Szczegółowy kontekst transkrypcji nie jest już dostępny dla tej aktywności.",
+ "loading": "Ładowanie aktywności zadania...",
+ "lowSignalOnly": "Nie znaleziono jeszcze kluczowej aktywności zadania. Niskopoziomowe szczegóły wykonania są dostępne poniżej w Strumieniu logów zadania.",
+ "empty": "Nie znaleziono jeszcze jawnej aktywności zadania w dostępnych transkrypcjach. Starsze lub heurystyczne logi sesji mogą być nadal dostępne poniżej w Sesjach wykonania.",
+ "title": "Aktywność zadania",
+ "description": "Kluczowa jawna aktywność środowiska uruchomieniowego powiązana z tym zadaniem z metadanych transkrypcji."
+ },
+ "sendMessage": {
+ "title": "Wyślij wiadomość",
+ "description": "Wyślij bezpośrednią wiadomość do członka zespołu.",
+ "recipientLabel": "Odbiorca",
+ "selectMemberPlaceholder": "Wybierz członka...",
+ "messageLabel": "Wiadomość",
+ "placeholder": "Napisz swoją wiadomość... (Enter, aby wysłać)",
+ "send": "Wyślij",
+ "sending": "Wysyłanie...",
+ "charsLeft": "Pozostało {{count}} znaków",
+ "saved": "Zapisano",
+ "attachments": {
+ "teamOnlineRequired": "Zespół musi być online, aby załączać pliki",
+ "recipientUnsupported": "Pliki można wysyłać do lidera zespołu lub członków zespołu OpenCode",
+ "openCodeOnlineRequired": "Zespół musi być online, aby załączać pliki dla członków zespołu OpenCode",
+ "disabledHint": "Załączniki plików są obsługiwane dla lidera zespołu online i członków zespołu OpenCode online. Usuń załączniki lub zmień odbiorcę.",
+ "attachFiles": "Załącz pliki (wklej lub przeciągnij i upuść)",
+ "unavailable": "Załączniki są niedostępne"
+ },
+ "quote": {
+ "remove": "Usuń cytat",
+ "replyingTo": "Odpowiedź do"
+ }
+ },
+ "taskComments": {
+ "cancelReply": "Anuluj odpowiedź",
+ "replyingTo": "Odpowiedź do",
+ "placeholder": "Dodaj komentarz... (Enter, aby wysłać)",
+ "attachFile": "Załącz plik (lub wklej)",
+ "voiceToText": "Głos na tekst",
+ "comment": "Komentarz",
+ "charsLeft": "Pozostało {{count}} znaków",
+ "saved": "Zapisano",
+ "awaitingReplyFrom": "Oczekiwanie na odpowiedź od",
+ "or": "lub"
+ },
+ "taskAttachments": {
+ "dropImageHere": "Upuść obraz tutaj",
+ "attachImage": "Załącz obraz",
+ "pasteOrDragDrop": "lub wklej / przeciągnij i upuść",
+ "fromOriginalMessage": "Z oryginalnej wiadomości",
+ "dropFilesHere": "Upuść pliki tutaj",
+ "loading": "Ładowanie załączników..."
+ },
+ "permissions": {
+ "autoApproveAllTools": "Automatycznie zatwierdzaj wszystkie narzędzia",
+ "autonomousModeDescription": "Tryb autonomiczny: narzędzia zespołu wykonują się bez potwierdzenia. Zachowaj ostrożność z niezaufanym kodem.",
+ "manualModeDescription": "Tryb ręczny: będziesz zatwierdzać lub odrzucać każde wywołanie narzędzia w czasie rzeczywistym."
+ },
+ "memberLogStream": {
+ "tabs": {
+ "execution": "Wykonanie",
+ "process": "Proces"
+ },
+ "filters": {
+ "all": "Wszystkie"
+ },
+ "logs": {
+ "title": "Logi",
+ "loading": "Ładowanie strumienia logów członka...",
+ "emptyTitle": "Nie znaleziono jeszcze wpisów strumienia logów dla tego członka.",
+ "emptyDescription": "Logi transkrypcji lub środowiska uruchomieniowego o zakresie członka pojawią się tutaj, gdy będą dostępne."
+ }
+ },
+ "reviewDialog": {
+ "placeholder": "Opisz, co trzeba zmienić... (Enter, aby wysłać)",
+ "submit": "Wyślij",
+ "charsLeft": "Pozostało {{count}} znaków",
+ "saved": "Zapisano",
+ "title": "Poproś o zmiany"
+ },
+ "dialogs": {
+ "actions": {
+ "openDashboard": "Otwórz panel",
+ "openTeam": "Otwórz zespół",
+ "cancel": "Anuluj"
+ },
+ "membersJson": {
+ "hide": "Ukryj JSON"
+ },
+ "optional": {
+ "badge": "Opcjonalne"
+ }
+ },
+ "runningTeams": {
+ "title": "Działające zespoły",
+ "status": {
+ "active": "Aktywny",
+ "provisioning": "Uruchamianie",
+ "idle": "Działa"
+ },
+ "noProject": "Brak projektu"
+ },
+ "layout": {
+ "maxPanesReached": "Osiągnięto maksymalnie {{count}} paneli"
+ },
+ "codexReconnect": {
+ "description": "Twoja sesja Codex wydaje się nieaktualna. Połącz ponownie, aby kontynuować.",
+ "useCode": "Użyj kodu",
+ "generating": "Generowanie...",
+ "openLogin": "Otwórz logowanie",
+ "generateLink": "Wygeneruj link"
+ },
+ "effortLevel": {
+ "label": "Poziom wysiłku (opcjonalnie)",
+ "maxDescription": "Maks. daje modelowi najwięcej czasu na rozumowanie przy trudnych zadaniach."
+ },
+ "contextLimit": {
+ "limitTo200k": "Ogranicz kontekst do 200K tokenów",
+ "always200k": "(zawsze 200K dla tego modelu)",
+ "tooltipContent": "Utrzymuje uruchomienia w oknie kontekstu 200K tokenów, gdy jest to obsługiwane.",
+ "tooltipTitle": "Limit kontekstu"
+ },
+ "roleSelect": {
+ "noRole": "Brak roli",
+ "customRole": "Niestandardowa rola...",
+ "searchPlaceholder": "Szukaj ról...",
+ "empty": "Nie znaleziono ról.",
+ "reservedRole": "Ta rola jest zarezerwowana",
+ "emptyCustomRole": "Rola nie może być pusta"
+ }
+}
diff --git a/src/features/localization/renderer/locales/pt/common.json b/src/features/localization/renderer/locales/pt/common.json
index 74d52a06..e6b67f71 100644
--- a/src/features/localization/renderer/locales/pt/common.json
+++ b/src/features/localization/renderer/locales/pt/common.json
@@ -62,21 +62,36 @@
"locales": {
"emptyMessage": "Nenhum idioma encontrado.",
"names": {
- "en": "Inglês",
- "ru": "Russo",
- "zh": "Chinês",
- "ja": "Japonês",
- "ko": "Coreano",
- "es": "Espanhol",
- "hi": "Hindi",
- "pt": "Português",
- "fr": "Francês",
"ar": "Árabe",
"bn": "Bengali",
- "ur": "Urdu",
- "id": "Indonésio",
"de": "Alemão",
- "system": "Sistema"
+ "en": "Inglês",
+ "es": "Espanhol",
+ "fa": "Persa",
+ "fil": "Filipino",
+ "fr": "Francês",
+ "hi": "Hindi",
+ "id": "Indonésio",
+ "it": "Italiano",
+ "ja": "Japonês",
+ "ko": "Coreano",
+ "mr": "Marata",
+ "ms": "Malaio",
+ "nl": "Holandês",
+ "pl": "Polonês",
+ "pt": "Português",
+ "ro": "Romeno",
+ "ru": "Russo",
+ "sw": "Suaíli",
+ "system": "Sistema",
+ "ta": "Tâmil",
+ "te": "Télugo",
+ "th": "Tailandês",
+ "tr": "Turco",
+ "uk": "Ucraniano",
+ "ur": "Urdu",
+ "vi": "Vietnamita",
+ "zh": "Chinês"
},
"searchPlaceholder": "Buscar idioma...",
"selectPlaceholder": "Selecionar idioma do app...",
diff --git a/src/features/localization/renderer/locales/pt/settings.json b/src/features/localization/renderer/locales/pt/settings.json
index 5a4ef2bb..88711e12 100644
--- a/src/features/localization/renderer/locales/pt/settings.json
+++ b/src/features/localization/renderer/locales/pt/settings.json
@@ -68,12 +68,12 @@
"useInTeamPicker": "Uso no selecionador de equipe",
"testInProgress": "O teste do modelo já está em execução.",
"validationContextRequired": "Selecione um contexto de validação acima para habilitar Test e Set default. Salvar para team picker apenas guarda a route para novas equipes.",
+ "actionsUnavailable": "As ações estão temporariamente indisponíveis.",
"defaultSaveInProgress": "O OpenCode default está sendo salvo.",
"routeUnavailableAuth": "Este provider exige autenticação antes que este modelo possa ser usado.",
"routeUnavailableFailed": "Esta model route falhou no último execution test.",
- "routeUnavailableUnknown": "Este modelo é o OpenCode default atual, mas ainda não está disponível no live catalog.",
- "actionsUnavailable": "As ações estão temporariamente indisponíveis.",
- "routeUnavailableGeneric": "Esta model route não pode ser usada agora."
+ "routeUnavailableGeneric": "Esta model route não pode ser usada agora.",
+ "routeUnavailableUnknown": "Este modelo é o OpenCode default atual, mas ainda não está disponível no live catalog."
},
"providers": {
"catalog": "Catálogo de fornecedores OpenCode",
diff --git a/src/features/localization/renderer/locales/pt/team.json b/src/features/localization/renderer/locales/pt/team.json
index 15d4017d..2d37a111 100644
--- a/src/features/localization/renderer/locales/pt/team.json
+++ b/src/features/localization/renderer/locales/pt/team.json
@@ -1496,7 +1496,7 @@
},
"status": {
"reusedCrossTeamRequest": "Reutilizar o pedido de equipa cruzada recente",
- "teamOffline": "Equipa offline"
+ "teamOffline": "offline"
},
"revision": {
"editing": "A editar a mensagem anterior",
diff --git a/src/features/localization/renderer/locales/ro/common.json b/src/features/localization/renderer/locales/ro/common.json
new file mode 100644
index 00000000..332e0d40
--- /dev/null
+++ b/src/features/localization/renderer/locales/ro/common.json
@@ -0,0 +1,927 @@
+{
+ "actions": {
+ "cancel": "Anulează",
+ "close": "Închide",
+ "copied": "Copiat",
+ "copyUrl": "Copiază URL-ul",
+ "open": "Deschide",
+ "reveal": "Afișează",
+ "retry": "Reîncearcă",
+ "save": "Salvează",
+ "showLess": "Arată mai puțin",
+ "showMore": "Arată mai mult",
+ "refresh": "Reîmprospătează",
+ "reset": "Resetează",
+ "copyToClipboard": "Copiază în clipboard",
+ "moreActions": "Mai multe acțiuni",
+ "closeDialog": "Închide dialogul",
+ "goToDashboard": "Mergi la panou",
+ "or": "sau",
+ "hide": "Ascunde",
+ "resetSelection": "Resetează selecția"
+ },
+ "code": {
+ "line": "linia {{line}}",
+ "lines": "liniile {{from}}-{{to}}",
+ "moreLines": "(încă {{count}} linii...)",
+ "moreLines_few": "(încă {{count}} linii...)",
+ "moreLines_many": "(încă {{count}} linii...)",
+ "moreLines_one": "(încă {{count}} linie...)",
+ "moreLines_other": "(încă {{count}} linii...)",
+ "code": "Cod",
+ "preview": "Previzualizare",
+ "markdownPreview": "Previzualizare Markdown",
+ "linesParenthesized": "(liniile {{from}}-{{to}})",
+ "mermaidSyntaxError": "Eroare de sintaxă Mermaid"
+ },
+ "contextBadge": {
+ "badge": "Context",
+ "breakdown": {
+ "text": "Text",
+ "thinking": "Gândire"
+ },
+ "detailsAria": "Detalii injectare context",
+ "sectionSummary": "{{title}} ({{count}}) ~{{tokens}} tokenuri",
+ "sections": {
+ "claudeMdFiles": "Fișiere CLAUDE.md",
+ "mentionedFiles": "Fișiere menționate",
+ "taskCoordination": "Coordonare sarcini",
+ "thinkingText": "Gândire + Text",
+ "toolOutputs": "Rezultate unelte",
+ "userMessages": "Mesaje utilizator"
+ },
+ "title": "Context nou injectat în acest tur",
+ "tokenCount": "~{{tokens}} tokenuri",
+ "totalNewTokens": "Total tokenuri noi",
+ "turn": "Tur {{turn}}",
+ "sectionSummary_few": "{{title}} ({{count}}) ~{{tokens}} tokenuri",
+ "sectionSummary_many": "{{title}} ({{count}}) ~{{tokens}} tokenuri",
+ "sectionSummary_one": "{{title}} ({{count}}) ~{{tokens}} tokenuri",
+ "sectionSummary_other": "{{title}} ({{count}}) ~{{tokens}} tokenuri"
+ },
+ "locales": {
+ "emptyMessage": "Nicio limbă găsită.",
+ "names": {
+ "ar": "Arabă",
+ "bn": "Bengaleză",
+ "de": "Germană",
+ "en": "Engleză",
+ "es": "Spaniolă",
+ "fa": "Persană",
+ "fil": "Filipineză",
+ "fr": "Franceză",
+ "hi": "Hindi",
+ "id": "Indoneziană",
+ "it": "Italiană",
+ "ja": "Japoneză",
+ "ko": "Coreeană",
+ "mr": "Marathi",
+ "ms": "Malaeză",
+ "nl": "Olandeză",
+ "pl": "Poloneză",
+ "pt": "Portugheză",
+ "ro": "Română",
+ "ru": "Rusă",
+ "sw": "Swahili",
+ "system": "Sistem",
+ "ta": "Tamilă",
+ "te": "Telugu",
+ "th": "Thailandeză",
+ "tr": "Turcă",
+ "uk": "Ucraineană",
+ "ur": "Urdu",
+ "vi": "Vietnameză",
+ "zh": "Chineză"
+ },
+ "searchPlaceholder": "Caută limba...",
+ "selectPlaceholder": "Selectează limba aplicației...",
+ "systemWithResolved": "Sistem - {{locale}}"
+ },
+ "members": {
+ "emptyMessage": "Niciun membru găsit.",
+ "searchPlaceholder": "Caută membri...",
+ "unassigned": "Neatribuit",
+ "teammateFallback": "coechipier"
+ },
+ "providerRuntime": {
+ "codex": {
+ "install": {
+ "checking": "Se verifică",
+ "downloading": "Se descarcă",
+ "installCli": "Instalează Codex CLI",
+ "installing": "Se instalează",
+ "retryInstall": "Reîncearcă instalarea"
+ }
+ }
+ },
+ "search": {
+ "noMatchingSuggestions": "Nicio sugestie corespunzătoare",
+ "searching": "Se caută...",
+ "searchingFiles": "Se caută fișiere...",
+ "findInConversation": "Caută în conversație...",
+ "resultCount": "{{current}} din {{total}}",
+ "resultCountCapped": "{{current}} din {{total}}+",
+ "noResults": "Niciun rezultat",
+ "previousResultShortcut": "Rezultatul anterior (Shift+Enter)",
+ "nextResultShortcut": "Rezultatul următor (Enter)",
+ "closeShortcut": "Închide (Esc)",
+ "nothingFound": "Nimic găsit",
+ "placeholder": "Caută..."
+ },
+ "schedules": {
+ "actions": {
+ "addSchedule": "Adaugă programare",
+ "clearFilters": "Șterge filtrele",
+ "createSchedule": "Creează programare",
+ "delete": "Șterge",
+ "edit": "Editează",
+ "pause": "Întrerupe",
+ "resume": "Reia",
+ "runNow": "Rulează acum"
+ },
+ "empty": {
+ "description": "Creează o programare pe orice echipă pentru a automatiza execuția sarcinilor Claude cu expresii cron. Programările din toate echipele vor apărea aici.",
+ "noMatches": "Nicio programare nu corespunde filtrelor curente",
+ "title": "Nicio sarcină programată"
+ },
+ "filters": {
+ "allTeams": "Toate echipele"
+ },
+ "item": {
+ "loadingRunHistory": "Se încarcă istoricul rulărilor...",
+ "nextRun": "Următoarea: {{value}}",
+ "noRunsYet": "Nicio rulare încă"
+ },
+ "loading": "Se încarcă programările...",
+ "searchPlaceholder": "Caută programări...",
+ "status": {
+ "active": "Activă",
+ "all": "Toate",
+ "disabled": "Dezactivată",
+ "paused": "Întreruptă"
+ },
+ "title": "Programări"
+ },
+ "sessions": {
+ "actions": {
+ "hide": "Ascunde",
+ "pin": "Fixează",
+ "unhide": "Afișează"
+ },
+ "empty": {
+ "noMatchingSessions": "Nicio sesiune corespunzătoare",
+ "noMatchingSessionsDescription": "Acest proiect nu are încă sesiuni corespunzătoare.",
+ "noMatchingSessionsFiltered": "Încearcă o altă interogare sau resetează filtrul de furnizor.",
+ "noSessions": "Nicio sesiune găsită",
+ "noSessionsDescription": "Acest proiect nu are încă sesiuni",
+ "selectProject": "Selectează un proiect pentru a vedea sesiunile"
+ },
+ "errors": {
+ "loading": "Eroare la încărcarea sesiunilor"
+ },
+ "loadedMatchingMore": "{{count}} sesiuni corespunzătoare încărcate până acum - derulează în jos pentru a încărca mai multe.",
+ "loadingMore": "Se încarcă mai multe sesiuni...",
+ "pinned": "Fixate",
+ "scrollToLoadMore": "Derulează pentru a încărca mai multe",
+ "search": {
+ "clear": "Șterge căutarea sesiunilor",
+ "placeholder": "Caută sesiuni..."
+ },
+ "selection": {
+ "cancel": "Anulează selecția",
+ "exitMode": "Ieși din modul de selecție",
+ "hideSelected": "Ascunde sesiunile selectate",
+ "pinSelected": "Fixează sesiunile selectate",
+ "selectSessions": "Selectează sesiuni",
+ "selected": "{{count}} selectate",
+ "unhideSelected": "Afișează sesiunile selectate",
+ "selected_few": "{{count}} selectate",
+ "selected_many": "{{count}} selectate",
+ "selected_one": "{{count}} selectată",
+ "selected_other": "{{count}} selectate"
+ },
+ "sort": {
+ "byContext": "După context",
+ "byContextTooltip": "Sortează după consumul de context",
+ "byRecentTooltip": "Sortează după recent",
+ "contextLoadedOnly": "Sortarea după context clasifică doar sesiunile încărcate."
+ },
+ "title": "Sesiuni",
+ "visibility": {
+ "hideHidden": "Ascunde sesiunile ascunse",
+ "showHidden": "Arată sesiunile ascunse"
+ },
+ "worktree": {
+ "switch": "Comută worktree-ul"
+ },
+ "loadedMatchingMore_few": "{{count}} sesiuni corespunzătoare încărcate până acum - derulează în jos pentru a încărca mai multe.",
+ "loadedMatchingMore_many": "{{count}} sesiuni corespunzătoare încărcate până acum - derulează în jos pentru a încărca mai multe.",
+ "loadedMatchingMore_one": "{{count}} sesiune corespunzătoare încărcată până acum - derulează în jos pentru a încărca mai multe.",
+ "loadedMatchingMore_other": "{{count}} sesiuni corespunzătoare încărcate până acum - derulează în jos pentru a încărca mai multe.",
+ "failedToLoad": "Încărcarea sesiunii a eșuat",
+ "loading": "Se încarcă sesiunea...",
+ "filter": {
+ "title": "Filtrează sesiunile"
+ },
+ "count": "{{count}} sesiuni",
+ "count_one": "{{count}} sesiune",
+ "count_other": "{{count}} sesiuni",
+ "count_few": "{{count}} sesiuni",
+ "count_many": "{{count}} sesiuni",
+ "inProgress": "Sesiunea este în curs..."
+ },
+ "states": {
+ "loading": "Se încarcă...",
+ "offline": "Deconectat",
+ "online": "Conectat",
+ "unknown": "Necunoscut",
+ "error": "Eroare"
+ },
+ "markdown": {
+ "imageFallback": "[Imagine: {{label}}]",
+ "largeContentNotice": "Conținutul este foarte mare ({{count}} caractere). Se afișează previzualizarea brută pentru a menține interfața receptivă.",
+ "largeContentTitle": "Conținutul mare este afișat brut pentru a preveni blocarea interfeței",
+ "raw": "Brut",
+ "rawPreview": "Previzualizare brută",
+ "renderMarkdown": "Randează markdown",
+ "showAll": "Arată tot",
+ "showMore": "Arată mai mult",
+ "showRaw": "Arată brut",
+ "showingChars": "Se afișează {{shown}} / {{total}} caractere",
+ "largeContentNotice_few": "Conținutul este foarte mare ({{count}} caractere). Se afișează previzualizarea brută pentru a menține interfața receptivă.",
+ "largeContentNotice_many": "Conținutul este foarte mare ({{count}} caractere). Se afișează previzualizarea brută pentru a menține interfața receptivă.",
+ "largeContentNotice_one": "Conținutul este foarte mare ({{count}} caracter). Se afișează previzualizarea brută pentru a menține interfața receptivă.",
+ "largeContentNotice_other": "Conținutul este foarte mare ({{count}} caractere). Se afișează previzualizarea brută pentru a menține interfața receptivă."
+ },
+ "terminal": {
+ "checkOutputForDetails": "Verifică ieșirea terminalului de mai sus pentru detalii",
+ "closingInSeconds": "Se închide în {{count}}s...",
+ "closingInSeconds_few": "Se închide în {{count}}s...",
+ "closingInSeconds_many": "Se închide în {{count}}s...",
+ "closingInSeconds_one": "Se închide în {{count}}s...",
+ "closingInSeconds_other": "Se închide în {{count}}s...",
+ "completedSuccessfully": "Finalizat cu succes",
+ "exitCode": "(cod de ieșire {{code}})",
+ "processFailed": "Procesul a eșuat",
+ "title": "Terminal"
+ },
+ "tokens": {
+ "accumulatedWithoutDuplication": "Acumulat pe întreaga sesiune fără duplicare",
+ "cacheRead": "Citire cache",
+ "cacheWrite": "Scriere cache",
+ "costUsd": "Cost (USD)",
+ "inputTokens": "Tokenuri de intrare",
+ "model": "Model",
+ "outputTokens": "Tokenuri de ieșire",
+ "phase": "Faza {{phase}}/{{total}}",
+ "promptInputShare": "{{percent}}% din intrarea promptului",
+ "taskCoordination": "Coordonare sarcini",
+ "thinkingText": "Gândire + Text",
+ "toolOutputs": "Rezultate unelte",
+ "total": "Total",
+ "userMessages": "Mesaje utilizator",
+ "visibleContext": "Context vizibil",
+ "includesClaudeMd": "incl. CLAUDE.md ×{{count}}",
+ "claudeMd": "CLAUDE.md",
+ "mentionedFiles": "@fișiere",
+ "percentValue": "({{percent}}%)",
+ "approxTokens": "~{{tokens}} tokenuri",
+ "approxTokensParenthesized": "(~{{tokens}})"
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Copiază echipa",
+ "createTeam": "Creează echipă",
+ "deleteForever": "Șterge definitiv",
+ "deletePermanently": "Șterge permanent",
+ "deleteTeam": "Șterge echipa",
+ "launching": "Se lansează...",
+ "launchTeam": "Lansează echipa",
+ "relaunchTeam": "Relansează echipa",
+ "restore": "Restaurează",
+ "restoreTeam": "Restaurează echipa",
+ "retry": "Reîncearcă",
+ "stopTeam": "Oprește echipa",
+ "stopping": "Se oprește..."
+ },
+ "status": {
+ "active": "Activă",
+ "deleted": "Ștearsă",
+ "launching": "Se lansează...",
+ "offline": "Deconectată",
+ "partialFailure": "Lansarea a eșuat parțial",
+ "partialPending": "Inițializare în așteptare",
+ "partialSkipped": "Lansarea a omis un membru",
+ "running": "În execuție"
+ },
+ "partial": {
+ "pending": "Ultima lansare încă se reconciliază.",
+ "skipped": "Ultima lansare a omis coechipieri.",
+ "skippedWithCount": "Ultima lansare a omis {{count}}/{{expected}} coechipier.",
+ "skippedWithCount_few": "Ultima lansare a omis {{count}}/{{expected}} coechipieri.",
+ "skippedWithCount_many": "Ultima lansare a omis {{count}}/{{expected}} coechipieri.",
+ "skippedWithCount_one": "Ultima lansare a omis {{count}}/{{expected}} coechipier.",
+ "skippedWithCount_other": "Ultima lansare a omis {{count}}/{{expected}} coechipieri.",
+ "stopped": "Ultima lansare s-a oprit înainte ca toți coechipierii să se alăture.",
+ "stoppedWithCount": "Ultima lansare s-a oprit înainte ca {{count}}/{{expected}} coechipier să se alăture.",
+ "stoppedWithCount_few": "Ultima lansare s-a oprit înainte ca {{count}}/{{expected}} coechipieri să se alăture.",
+ "stoppedWithCount_many": "Ultima lansare s-a oprit înainte ca {{count}}/{{expected}} coechipieri să se alăture.",
+ "stoppedWithCount_one": "Ultima lansare s-a oprit înainte ca {{count}}/{{expected}} coechipier să se alăture.",
+ "stoppedWithCount_other": "Ultima lansare s-a oprit înainte ca {{count}}/{{expected}} coechipieri să se alăture."
+ },
+ "noDescription": "Fără descriere",
+ "solo": "Solo",
+ "membersCount": "Membri: {{count}}",
+ "membersCount_few": "Membri: {{count}}",
+ "membersCount_many": "Membri: {{count}}",
+ "membersCount_one": "Membru: {{count}}",
+ "membersCount_other": "Membri: {{count}}",
+ "all": "Toate",
+ "moreCount": "+{{count}} în plus",
+ "moreCount_one": "+{{count}} în plus",
+ "moreCount_other": "+{{count}} în plus",
+ "moreCount_few": "+{{count}} în plus",
+ "moreCount_many": "+{{count}} în plus"
+ },
+ "runtimeProvider": {
+ "defaults": {
+ "scopeDescriptionAllProjects": "Implicit pentru fiecare proiect care nu are propria suprascriere OpenCode.",
+ "scopeDescriptionProject": "Suprascrie doar proiectul selectat. Echipele în execuție nu sunt modificate.",
+ "setAllProjectsDefault": "Setează implicit pentru toate proiectele",
+ "setProjectDefault": "Setează implicit pentru proiect",
+ "validationContext": "Context de validare",
+ "projectOverrideContext": "Context de suprascriere a proiectului",
+ "selectProjectHint": "Selectează un proiect înainte de a testa modele locale sau de a salva valori implicite.",
+ "allProjectsHint": "Testele folosesc {{project}}. Valoarea implicită se aplică dacă un proiect nu are o suprascriere.",
+ "projectHint": "Salvarea suprascrie doar {{project}}."
+ }
+ },
+ "sessionContext": {
+ "header": {
+ "title": "Context",
+ "closePanel": "Închide panoul",
+ "phase": "Faza:",
+ "current": "Curent",
+ "view": "Vizualizare:",
+ "category": "Categorie",
+ "bySize": "După dimensiune"
+ },
+ "metrics": {
+ "unavailable": "Indisponibil",
+ "contextUsed": "Context utilizat",
+ "promptInput": "Intrare prompt",
+ "visibleContext": "Context vizibil",
+ "ofContext": "din context",
+ "ofPrompt": "din prompt",
+ "codexTelemetryUnavailable": "Utilizarea pe partea de prompt a Codex nu este încă expusă de telemetria runtime-ului curent, așa că Intrare prompt și Context utilizat rămân indisponibile în loc să afișeze un zero fals.",
+ "sessionCost": "Cost sesiune:",
+ "parentPlus": "părinte +",
+ "subagents": "subagenți",
+ "details": "detalii"
+ },
+ "help": {
+ "contextUsed": {
+ "title": "Context utilizat",
+ "description": "Intrarea promptului plus tokenurile de ieșire care ocupă în prezent fereastra de context a modelului."
+ },
+ "promptInput": {
+ "title": "Intrare prompt",
+ "description": "Tokenuri trimise modelului înainte de generare. Pentru Claude aceasta include `input_tokens + cache_creation_input_tokens + cache_read_input_tokens`."
+ },
+ "visibleContext": {
+ "title": "Context vizibil",
+ "description": "Subsetul inspectabil al intrării promptului: fișiere, CLAUDE.md, rezultate ale uneltelor, mesaje utilizator și injectări similare pe care le poți optimiza direct."
+ },
+ "availability": {
+ "title": "Disponibilitate",
+ "description": "Dacă un runtime de furnizor nu expune încă utilizarea pe partea de prompt, panoul afișează metricele ca indisponibile în loc să pretindă că sunt zero."
+ }
+ },
+ "items": {
+ "turn": "@Tur {{turn}}",
+ "tokensApprox": "~{{tokens}} tokenuri",
+ "toolsCount": "{{count}} unelte",
+ "toolsCount_one": "{{count}} unealtă",
+ "toolsCount_other": "{{count}} unelte",
+ "toolsCount_few": "{{count}} unelte",
+ "toolsCount_many": "{{count}} unelte",
+ "itemsCount": "{{count}} elemente",
+ "itemsCount_one": "{{count}} element",
+ "itemsCount_other": "{{count}} elemente",
+ "itemsCount_few": "{{count}} elemente",
+ "itemsCount_many": "{{count}} elemente",
+ "missing": "lipsește",
+ "thinking": "Gândire",
+ "text": "Text"
+ },
+ "empty": "Nicio injectare de context detectată în această sesiune",
+ "view": {
+ "grouped": "Grupat",
+ "flat": "Plat"
+ },
+ "claudeMdFiles": "Fișiere CLAUDE.md",
+ "mentionedFiles": "Fișiere menționate"
+ },
+ "chat": {
+ "subagent": {
+ "fallbackName": "Subagent",
+ "shutdownConfirmed": "Oprire confirmată",
+ "summary": {
+ "tools": "{{count}} unelte",
+ "tools_one": "{{count}} unealtă",
+ "tools_other": "{{count}} unelte",
+ "tools_few": "{{count}} unelte",
+ "tools_many": "{{count}} unelte"
+ },
+ "meta": {
+ "type": "Tip",
+ "duration": "Durată",
+ "model": "Model",
+ "id": "ID"
+ },
+ "metrics": {
+ "contextWindow": "Fereastră de context",
+ "contextUsage": "Utilizare context",
+ "mainContext": "Context principal",
+ "totalOutput": "Ieșire totală",
+ "turns": "({{count}} tururi)",
+ "turns_one": "({{count}} tur)",
+ "turns_other": "({{count}} tururi)",
+ "subagentContext": "Context subagent",
+ "phase": "Faza {{phase}}",
+ "turns_few": "({{count}} tururi)",
+ "turns_many": "({{count}} tururi)"
+ },
+ "trace": {
+ "title": "Urmă de execuție"
+ }
+ },
+ "user": {
+ "you": "Tu",
+ "showMore": "Arată mai mult",
+ "showLess": "Arată mai puțin",
+ "backgroundTask": "Sarcină în fundal",
+ "exitCode": "ieșire {{code}}",
+ "imagesAttached": "{{count}} imagini atașate",
+ "imagesAttached_one": "{{count}} imagine atașată",
+ "imagesAttached_few": "{{count}} imagini atașate",
+ "imagesAttached_many": "{{count}} imagini atașate",
+ "imagesAttached_other": "{{count}} imagini atașate"
+ },
+ "compact": {
+ "toggle": "Comută conținutul compactat",
+ "contextCompacted": "Context compactat",
+ "freedTokens": "({{tokens}} eliberate)",
+ "phase": "Faza {{phase}}",
+ "conversationCompacted": "Conversație compactată",
+ "summary": "Mesajele anterioare au fost rezumate pentru a economisi context. Istoricul complet al conversației este păstrat în fișierul sesiunii.",
+ "compacted": "Compactat"
+ },
+ "executionTrace": {
+ "empty": "Niciun element de execuție",
+ "nested": "Imbricat: {{name}}",
+ "input": "Intrare"
+ },
+ "items": {
+ "empty": "Niciun element de afișat"
+ },
+ "tools": {
+ "teammateSpawned": "Coechipier creat",
+ "shutdownRequested": "Oprire solicitată ->",
+ "noResultReceived": "Niciun rezultat primit",
+ "duration": "Durată: {{duration}}",
+ "result": "Rezultat",
+ "write": {
+ "createdFile": "Fișier creat",
+ "wroteToFile": "Scris în fișier"
+ },
+ "skill": {
+ "instructions": "Instrucțiuni abilitate",
+ "unknown": "Abilitate necunoscută"
+ }
+ },
+ "lastOutput": {
+ "requestInterrupted": "Cerere întreruptă de utilizator",
+ "planReadyForApproval": "Plan gata pentru aprobare"
+ },
+ "empty": {
+ "icon": "💬",
+ "title": "Niciun istoric al conversației",
+ "description": "Această sesiune nu conține încă niciun mesaj."
+ },
+ "context": {
+ "remainingPercent": "({{percent}}% rămas)",
+ "count": "Context ({{count}})",
+ "count_one": "Context ({{count}})",
+ "count_other": "Context ({{count}})",
+ "count_few": "Context ({{count}})",
+ "count_many": "Context ({{count}})"
+ },
+ "scrollToBottom": "Derulează la final",
+ "bottom": "Final",
+ "teammateMessage": {
+ "message": "Mesaj",
+ "resent": "Retrimis",
+ "fallback": "Mesaj de la coechipier"
+ },
+ "system": {
+ "label": "Sistem"
+ }
+ },
+ "tmuxInstaller": {
+ "summaryTitle": "tmux nu este instalat",
+ "detectedOs": "SO detectat: {{os}}",
+ "runtimePath": "Cale runtime: {{path}}",
+ "phase": "Faza: {{phase}}",
+ "actions": {
+ "cancel": "Anulează",
+ "manualGuide": "Ghid manual",
+ "hideSetupSteps": "Ascunde pașii de configurare",
+ "showSetupSteps": "Arată pașii de configurare ({{count}})",
+ "showSetupSteps_one": "Arată pasul de configurare ({{count}})",
+ "showSetupSteps_other": "Arată pașii de configurare ({{count}})",
+ "recheck": "Reverifică",
+ "showSetupSteps_few": "Arată pașii de configurare ({{count}})",
+ "showSetupSteps_many": "Arată pașii de configurare ({{count}})"
+ },
+ "installerProgress": "Progresul instalatorului",
+ "input": {
+ "placeholder": "Trimite o intrare către instalator",
+ "send": "Trimite intrarea",
+ "passwordNotice": "Intrarea parolei este trimisă direct către terminalul instalatorului și nu este adăugată la ieșirea jurnalului."
+ },
+ "details": {
+ "show": "Arată detalii",
+ "hide": "Ascunde detalii"
+ }
+ },
+ "commandPalette": {
+ "noRecentActivity": "Nicio activitate recentă",
+ "sessionsCount": "{{count}} sesiuni",
+ "sessionsCount_one": "{{count}} sesiune",
+ "sessionsCount_other": "{{count}} sesiuni",
+ "mode": {
+ "searchProjects": "Caută proiecte",
+ "searchAcrossProjects": "Caută în toate proiectele",
+ "searchInProject": "Caută în proiect"
+ },
+ "currentProject": "Proiect curent",
+ "global": "Global",
+ "placeholders": {
+ "projects": "Caută proiecte...",
+ "conversations": "Caută conversații..."
+ },
+ "empty": {
+ "noProjectsForQuery": "Niciun proiect găsit pentru \"{{query}}\"",
+ "noProjects": "Niciun proiect găsit",
+ "minChars": "Tastează cel puțin 2 caractere pentru a căuta",
+ "noFastResults": "Niciun rezultat rapid în sesiunile recente pentru \"{{query}}\"",
+ "noResults": "Niciun rezultat găsit pentru \"{{query}}\""
+ },
+ "footer": {
+ "projectsCount": "{{count}} proiecte",
+ "projectsCount_one": "{{count}} proiect",
+ "projectsCount_other": "{{count}} proiecte",
+ "results": "{{count}} {{speed}}rezultate",
+ "results_one": "{{count}} {{speed}}rezultat",
+ "results_other": "{{count}} {{speed}}rezultate",
+ "resultsAcrossProjects": "{{count}} {{speed}}rezultate în toate proiectele",
+ "resultsAcrossProjects_one": "{{count}} {{speed}}rezultat în toate proiectele",
+ "resultsAcrossProjects_other": "{{count}} {{speed}}rezultate în toate proiectele",
+ "fastPrefix": "rapide ",
+ "typeToSearch": "Tastează pentru a căuta",
+ "navigate": "navighează",
+ "select": "selectează",
+ "open": "deschide",
+ "global": "global",
+ "close": "închide",
+ "results_few": "{{count}} {{speed}}rezultate",
+ "results_many": "{{count}} {{speed}}rezultate",
+ "resultsAcrossProjects_few": "{{count}} {{speed}}rezultate în toate proiectele",
+ "resultsAcrossProjects_many": "{{count}} {{speed}}rezultate în toate proiectele",
+ "projectsCount_few": "{{count}} proiecte",
+ "projectsCount_many": "{{count}} proiecte",
+ "upDownKey": "↑↓",
+ "escapeKey": "esc"
+ },
+ "sessionsCount_few": "{{count}} sesiuni",
+ "sessionsCount_many": "{{count}} sesiuni"
+ },
+ "tasksPanel": {
+ "title": "Sarcini",
+ "searchPlaceholder": "Caută sarcini...",
+ "pinned": "Fixate",
+ "groupByLabel": "Grupează după:",
+ "groupByAria": "Grupează după",
+ "groupModes": {
+ "none": "Niciunul",
+ "project": "Proiect",
+ "time": "Timp"
+ },
+ "showArchived": "Arată arhivate",
+ "hideArchived": "Ascunde arhivate",
+ "empty": {
+ "noMatchingTasks": "Nicio sarcină corespunzătoare",
+ "noTasks": "Nicio sarcină găsită"
+ },
+ "teamLabel": "Echipă: {{team}}",
+ "showMore": "Arată mai mult",
+ "showLess": "Arată mai puțin",
+ "deleteConfirm": {
+ "title": "Șterge sarcina",
+ "message": "Muți sarcina #{{taskId}} la coșul de gunoi?",
+ "confirmLabel": "Șterge",
+ "cancelLabel": "Anulează"
+ },
+ "deleteFailed": {
+ "title": "Ștergerea sarcinii a eșuat",
+ "fallbackMessage": "A apărut o eroare neașteptată",
+ "confirmLabel": "OK"
+ },
+ "sort": {
+ "byTime": "După timp",
+ "byUnread": "După necitite",
+ "byProject": "După proiect",
+ "byTeam": "După echipă"
+ }
+ },
+ "toolViewer": {
+ "input": "Intrare",
+ "replaceAll": "(înlocuiește tot)",
+ "noInputRecorded": "Nicio intrare înregistrată pentru acest apel de unealtă.",
+ "agent": {
+ "action": "acțiune",
+ "teammate": "coechipier",
+ "team": "echipă",
+ "runtime": "runtime",
+ "type": "tip",
+ "startupInstructionsHidden": "Instrucțiunile de pornire sunt ascunse în interfață."
+ }
+ },
+ "taskContextMenu": {
+ "unpin": "Anulează fixarea",
+ "pin": "Fixează",
+ "rename": "Redenumește",
+ "markUnread": "Marchează ca necitit",
+ "unarchive": "Dezarhivează",
+ "archive": "Arhivează",
+ "deleteTask": "Șterge sarcina"
+ },
+ "updateDialog": {
+ "closeDialog": "Închide dialogul",
+ "updateAvailable": "Actualizare disponibilă",
+ "updateReady": "Actualizare pregătită",
+ "noReleaseNotes": "Nu sunt disponibile note de lansare.",
+ "viewOnGitHub": "Vezi pe GitHub",
+ "later": "Mai târziu",
+ "restartNow": "Repornește acum",
+ "download": "Descarcă"
+ },
+ "errorBoundary": {
+ "title": "A apărut o eroare",
+ "description": "A apărut o eroare neașteptată în aplicație. Poți încerca să reîncarci pagina sau să resetezi starea de eroare.",
+ "componentStack": "Stivă de componente",
+ "tryAgain": "Încearcă din nou",
+ "copied": "Copiat",
+ "copyErrorDetails": "Copiază detaliile erorii",
+ "reportBugOnGitHub": "Raportează eroarea pe GitHub",
+ "reloadApp": "Reîncarcă aplicația",
+ "diagnosticsNotice": "Rapoartele de erori GitHub și diagnosticele copiate includ mesajul de eroare, urmele de stivă, versiunea aplicației, fila activă, echipa selectată, contextul sarcinii și detaliile de mediu."
+ },
+ "runtimeBackendSelector": {
+ "label": "Backend runtime",
+ "resolved": "Rezolvat: {{backend}}",
+ "current": "Curent",
+ "recommended": "Recomandat",
+ "unavailable": "Indisponibil",
+ "cannotSelectYet": "Acest backend nu poate fi selectat încă.",
+ "auto": "Automat",
+ "autoCurrently": "Automat (în prezent: {{backend}})",
+ "audience": {
+ "internal": "Intern"
+ },
+ "states": {
+ "locked": "Blocat",
+ "disabled": "Dezactivat",
+ "authRequired": "Autentificare necesară",
+ "runtimeMissing": "Runtime lipsă",
+ "degraded": "Degradat",
+ "unavailable": "Indisponibil"
+ }
+ },
+ "providerModelBadges": {
+ "checking": "Se verifică",
+ "unavailable": "Indisponibil",
+ "checkFailed": "Verificarea a eșuat",
+ "free": "Gratuit",
+ "freeTooltip": "Raportat de metadatele OpenCode. Disponibilitatea și limitele se pot schimba."
+ },
+ "taskFilters": {
+ "status": "Stare",
+ "clearAll": "Șterge tot",
+ "selectAll": "Selectează tot",
+ "team": "Echipă",
+ "allTeams": "Toate echipele",
+ "searchTeams": "Caută echipe...",
+ "noTeamsFound": "Nicio echipă găsită",
+ "project": "Proiect",
+ "allProjects": "Toate proiectele",
+ "searchProjects": "Caută proiecte...",
+ "noProjects": "Niciun proiect",
+ "comments": "Comentarii",
+ "apply": "Aplică",
+ "read": {
+ "all": "Toate",
+ "unread": "Necitite",
+ "read": "Citite"
+ },
+ "statusOptions": {
+ "todo": "DE FĂCUT",
+ "inProgress": "ÎN CURS",
+ "needsFix": "NECESITĂ REMEDIERI",
+ "done": "FINALIZAT",
+ "review": "REVIZUIRE",
+ "approved": "APROBAT"
+ }
+ },
+ "sessionItem": {
+ "totalContext": "Context total: {{tokens}} tokenuri",
+ "context": "Context: {{tokens}}",
+ "phase": "Faza {{phase}}:",
+ "compactedTo": "(compactat la {{tokens}})"
+ },
+ "notifications": {
+ "row": {
+ "team": "echipă",
+ "subagent": "subagent",
+ "markAsRead": "Marchează ca citit",
+ "delete": "Șterge",
+ "viewInSession": "Vezi în sesiune"
+ },
+ "title": "Notificări",
+ "loading": "Se încarcă notificările...",
+ "actions": {
+ "markFilteredAsRead": "Marchează cele filtrate ca citite",
+ "markAllAsRead": "Marchează toate ca citite",
+ "markFilteredRead": "Marchează filtrate citite",
+ "markAllRead": "Marchează toate citite",
+ "clearFilteredNotifications": "Șterge notificările filtrate",
+ "clearAllNotifications": "Șterge toate notificările",
+ "clickToConfirm": "Apasă pentru a confirma",
+ "clearFiltered": "Șterge filtrate",
+ "clearAll": "Șterge tot"
+ },
+ "counts": {
+ "unreadInFilter": "{{count}} necitite în filtru",
+ "unreadInFilter_one": "{{count}} necitită în filtru",
+ "unreadInFilter_few": "{{count}} necitite în filtru",
+ "unreadInFilter_many": "{{count}} necitite în filtru",
+ "unreadInFilter_other": "{{count}} necitite în filtru",
+ "inFilter": "{{count}} în filtru",
+ "inFilter_one": "{{count}} în filtru",
+ "inFilter_few": "{{count}} în filtru",
+ "inFilter_many": "{{count}} în filtru",
+ "inFilter_other": "{{count}} în filtru",
+ "unread": "{{count}} necitite",
+ "unread_one": "{{count}} necitită",
+ "unread_few": "{{count}} necitite",
+ "unread_many": "{{count}} necitite",
+ "unread_other": "{{count}} necitite",
+ "total": "{{count}} în total",
+ "total_one": "{{count}} în total",
+ "total_few": "{{count}} în total",
+ "total_many": "{{count}} în total",
+ "total_other": "{{count}} în total"
+ },
+ "filters": {
+ "other": "Altele"
+ },
+ "empty": {
+ "noMatching": "Nicio notificare corespunzătoare",
+ "noNotifications": "Nicio notificare",
+ "tryDifferentFilter": "Încearcă un alt filtru",
+ "allCaughtUp": "Ești la zi!"
+ }
+ },
+ "updates": {
+ "restartToUpdate": "Repornește pentru a actualiza",
+ "updateApp": "Actualizează aplicația",
+ "downloadedRestartTooltip": "Actualizare descărcată, repornește pentru a aplica",
+ "newVersionAvailable": "Versiune nouă disponibilă",
+ "updatingApp": "Se actualizează aplicația",
+ "updateReady": "Actualizare pregătită",
+ "restartNow": "Repornește acum"
+ },
+ "layout": {
+ "github": "GitHub",
+ "discord": "Discord",
+ "expandSidebar": "Extinde bara laterală",
+ "collapseSidebarShortcut": "Restrânge bara laterală ({{shortcut}})",
+ "sidebarView": "Vizualizare bară laterală",
+ "resizeSidebar": "Redimensionează bara laterală",
+ "closeTab": "Închide fila",
+ "openedFromSearch": "Deschis din căutare",
+ "pinnedSession": "Sesiune fixată",
+ "jumpToSection": "Sari la secțiune",
+ "newTab": "Filă nouă",
+ "newTabDashboard": "Filă nouă (Panou)",
+ "refreshSession": "Reîmprospătează sesiunea",
+ "refreshSessionWithShortcut": "Reîmprospătează sesiunea ({{shortcut}})",
+ "loadingTab": "Se încarcă fila",
+ "menu": {
+ "teams": "Echipe",
+ "settings": "Setări",
+ "extensions": "Extensii",
+ "search": "Căutare",
+ "schedules": "Programări",
+ "docs": "Documentație",
+ "exportMarkdown": "Exportă ca Markdown",
+ "exportJson": "Exportă ca JSON",
+ "exportPlainText": "Exportă ca text simplu",
+ "analyzeSession": "Analizează sesiunea"
+ },
+ "tabMenu": {
+ "closeTabs": "Închide {{count}} file",
+ "closeTabs_one": "Închide {{count}} filă",
+ "closeTabs_few": "Închide {{count}} file",
+ "closeTabs_many": "Închide {{count}} file",
+ "closeTabs_other": "Închide {{count}} file",
+ "closeTab": "Închide fila",
+ "closeOtherTabs": "Închide celelalte file",
+ "splitRight": "Împarte la dreapta",
+ "splitLeft": "Împarte la stânga",
+ "pinToSidebar": "Fixează în bara laterală",
+ "unpinFromSidebar": "Anulează fixarea din bara laterală",
+ "hideFromSidebar": "Ascunde din bara laterală",
+ "unhideFromSidebar": "Afișează în bara laterală",
+ "closeAllTabs": "Închide toate filele"
+ },
+ "sections": {
+ "team": "Echipă",
+ "sessions": "Sesiuni",
+ "kanban": "Kanban",
+ "claudeLogs": "Jurnale",
+ "messages": "Mesaje"
+ }
+ },
+ "editorFormatting": {
+ "bold": "Aldin",
+ "italic": "Cursiv",
+ "strike": "Tăiat",
+ "code": "Cod"
+ },
+ "diff": {
+ "changed": "Modificat",
+ "noChangesDetected": "Nicio modificare detectată"
+ },
+ "codexLogin": {
+ "copyLoginLinkAndCode": "Copiază linkul și codul de autentificare ChatGPT",
+ "copyLoginLink": "Copiază linkul de autentificare ChatGPT",
+ "copyFailed": "Copierea a eșuat",
+ "copyLinkAndCode": "Copiază linkul + codul",
+ "copyLink": "Copiază linkul",
+ "enterCodeOnLoginPage": "Introdu acest cod pe pagina de autentificare ChatGPT"
+ },
+ "window": {
+ "minimize": "Minimizează",
+ "maximize": "Maximizează",
+ "restore": "Restaurează"
+ },
+ "context": {
+ "local": "Local",
+ "switchingTo": "Se comută la {{workspace}}",
+ "loadingWorkspace": "Se încarcă spațiul de lucru",
+ "switchWorkspace": "Comută spațiul de lucru"
+ },
+ "repositories": {
+ "noneAvailable": "Niciun depozit disponibil",
+ "remove": "Elimină depozitul"
+ },
+ "export": {
+ "session": "Exportă sesiunea",
+ "sessionTitle": "Exportă sesiunea"
+ },
+ "brand": {
+ "claude": "Claude"
+ },
+ "sessionReport": {
+ "noSessionData": "Niciun date de sesiune disponibile",
+ "title": "Raport sesiune"
+ },
+ "sessionFilters": {
+ "project": {
+ "selectProject": "Selectează proiectul"
+ }
+ },
+ "tasks": {
+ "date": {
+ "updatedPrefix": "act",
+ "updatedYesterday": "act ieri",
+ "yesterday": "Ieri"
+ },
+ "reviewState": {
+ "needsFix": "Necesită remedieri"
+ },
+ "unassigned": "neatribuit"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ro/dashboard.json b/src/features/localization/renderer/locales/ro/dashboard.json
new file mode 100644
index 00000000..d5989a63
--- /dev/null
+++ b/src/features/localization/renderer/locales/ro/dashboard.json
@@ -0,0 +1,197 @@
+{
+ "cliStatus": {
+ "actions": {
+ "alreadyLoggedIn": "Ești deja autentificat?",
+ "becomeSponsor": "Devino sponsor",
+ "cancel": "Anulează",
+ "checkNow": "Verifică acum",
+ "checkUpdates": "Verifică actualizările",
+ "checking": "Se verifică...",
+ "connect": "Conectează",
+ "extensions": "Extensii",
+ "login": "Autentificare",
+ "manage": "Gestionează",
+ "manageProviders": "Gestionează furnizorii",
+ "plan": "Plan",
+ "recheck": "Reverifică",
+ "recheckProvider": "Reverifică {{provider}}",
+ "retry": "Reîncearcă",
+ "updateTo": "Actualizează la v{{version}}",
+ "useCode": "Folosește codul"
+ },
+ "atlas": {
+ "alt": "Atlas Cloud",
+ "description": "Atlas Cloud este o platformă de inferență AI full-modal care oferă dezvoltatorilor un singur API AI pentru a accesa generare de video, generare de imagini și API-uri LLM. În loc să gestionezi mai multe integrări de furnizori, te conectezi o singură dată și obții acces unificat la peste 300 de modele selectate din toate modalitățile. Vezi noua promoție pentru planul de codare Atlas Cloud pentru acces API mai accesibil.",
+ "openCodeProvider": "Furnizor OpenCode",
+ "plan": "Plan de codare Atlas Cloud",
+ "sponsor": "Sponsor"
+ },
+ "errors": {
+ "checkStatusFailed": "Verificarea stării CLI a eșuat",
+ "installationFailed": "Instalarea a eșuat",
+ "refreshFailed": "Verificarea actualizărilor a eșuat. Verifică conexiunea la rețea și încearcă din nou.",
+ "runtimeUpdatedRefreshFailed": "Runtime-ul a fost actualizat, dar reîmprospătarea stării furnizorului a eșuat."
+ },
+ "hints": {
+ "backgroundStatus": "Starea {{runtime}} va fi verificată în fundal.",
+ "codexApiKeyFallback": "{{hint}} Rezerva cu cheie API este disponibilă dacă schimbi modul de autentificare.",
+ "codexAutoApiKey": "{{hint}} Modul automat va continua să folosească cheia API până când ChatGPT este conectat.",
+ "codexFinishLogin": "Finalizează autentificarea ChatGPT în browser. Introdu codul afișat dacă ți se solicită.",
+ "codexNoActiveLogin": "Limitele de utilizare apar doar după ce Codex CLI vede un cont ChatGPT activ. În prezent raportează că nu există o autentificare ChatGPT activă.",
+ "codexNoActiveManagedSession": "Limitele de utilizare apar doar după ce Codex CLI vede un cont ChatGPT activ. Există date locale despre contul Codex, dar nu este selectată nicio sesiune gestionată activă în prezent.",
+ "codexReconnectNeeded": "Limitele de utilizare apar doar după ce Codex reîmprospătează sesiunea ChatGPT selectată în prezent. În acest moment sesiunea locală trebuie reconectată.",
+ "firstCheckSlow": "Prima verificare poate dura până la 30 de secunde",
+ "loginRequiredForTeams": "Navigarea sesiunilor și proiectelor funcționează fără autentificare. Autentificarea este necesară doar pentru a rula echipe de agenți.",
+ "troubleshootTitle": "Dacă ești sigur că ești autentificat, încearcă acești pași:"
+ },
+ "installer": {
+ "checkingLatest": "Se verifică ultima versiune...",
+ "downloading": "Se descarcă {{runtime}}...",
+ "installing": "Se instalează {{runtime}}...",
+ "success": "{{runtime}} v{{version}} a fost instalat cu succes",
+ "verifying": "Se verifică suma de control..."
+ },
+ "labels": {
+ "apiKeyRequired": "Cheie API necesară",
+ "comingSoon": "În curând",
+ "collapseProviderDetails": "Restrânge detaliile furnizorului",
+ "expandProviderDetails": "Extinde detaliile furnizorului",
+ "generateLink": "Generează link",
+ "loadingRateLimits": "Se încarcă limitele de utilizare",
+ "loggedOut": "Furnizor deconectat",
+ "loginAuthFailed": "Autentificarea a eșuat",
+ "loginAuthUpdated": "Autentificare actualizată",
+ "loginComplete": "Autentificare finalizată",
+ "loginFailed": "Autentificarea a eșuat",
+ "loginTitle": "Autentificare",
+ "logoutFailed": "Deconectarea a eșuat",
+ "logoutTitle": "Deconectare",
+ "notLoggedIn": "Neautentificat",
+ "openLogin": "Deschide autentificarea",
+ "providerActionRequired": "Acțiune necesară din partea furnizorului",
+ "resets": "se resetează {{time}}",
+ "runtimeLoginTitle": "Autentificare {{runtime}}"
+ },
+ "loading": {
+ "aiProviders": "Se verifică furnizorii AI...",
+ "claudeCli": "Se verifică Claude CLI..."
+ },
+ "provider": {
+ "authenticated": "Autentificat",
+ "backend": "Backend: {{backend}}",
+ "checkingAuthentication": "Se verifică autentificarea...",
+ "checkingProviders": "Se verifică furnizorii...",
+ "configuredLocalCount": "{{count}} configurate local",
+ "configuredLocalCount_few": "{{count}} configurate local",
+ "configuredLocalCount_many": "{{count}} configurate local",
+ "configuredLocalCount_one": "{{count}} configurat local",
+ "configuredLocalCount_other": "{{count}} configurate local",
+ "configuredLocalTitle": "Rute OpenCode locale importate din configurația ta OpenCode.",
+ "connectedCount": "Furnizori: {{connected}}/{{denominator}} conectați",
+ "freeModels": "Modele gratuite",
+ "freeModelsTitle": "OpenCode include opțiuni de modele gratuite precum Big Pickle când sunt disponibile în configurația ta. OpenRouter prin OpenCode poate de asemenea expune modele gratuite, dar nu fiecare model OpenCode/OpenRouter este gratuit. Disponibilitatea și limitele se pot schimba.",
+ "loadingModels": "Se încarcă modelele...",
+ "modelsUnavailable": "Modele indisponibile pentru această versiune de runtime",
+ "runtime": "Runtime: {{runtime}}",
+ "verifiedCount": "{{count}} verificate",
+ "verifiedCount_few": "{{count}} verificate",
+ "verifiedCount_many": "{{count}} verificate",
+ "verifiedCount_one": "{{count}} verificat",
+ "verifiedCount_other": "{{count}} verificate",
+ "verifiedTitle": "Rute OpenCode cu o dovadă de execuție reușită."
+ },
+ "runtime": {
+ "configuredHealthCheckFailed": "{{runtime}} configurat nu a trecut verificarea de stare la pornire.",
+ "configuredNotFound": "{{runtime}} configurat nu a fost găsit.",
+ "foundButFailed": "{{runtime}} a fost găsit, dar pornirea a eșuat",
+ "healthCheckFailedDescription": "Aplicația a găsit {{runtime}} configurat, dar verificarea de stare la pornire a eșuat. Repară-l sau reinstalează-l, apoi reîncearcă.",
+ "install": "Instalează {{runtime}}",
+ "installRequiredDescription": "{{runtime}} este necesar pentru aprovizionarea echipelor și gestionarea sesiunilor. Instalează-l pentru a începe.",
+ "isRequired": "{{runtime}} este necesar",
+ "reinstall": "Reinstalează {{runtime}}"
+ },
+ "runtimeInstall": {
+ "checking": "Se verifică",
+ "codexTitle": "Instalează Codex CLI în datele aplicației",
+ "downloading": "Se descarcă",
+ "downloadingPercent": "Se descarcă {{percent}}%",
+ "install": "Instalează",
+ "installing": "Se instalează",
+ "openCodeTitle": "Instalează runtime-ul OpenCode în datele aplicației",
+ "retryInstall": "Reîncearcă instalarea"
+ },
+ "troubleshoot": {
+ "again": "din nou",
+ "authStatusCommand": "comanda configurată de verificare a stării de autentificare CLI",
+ "checkLoggedIn": "- verifică dacă afișează \"Autentificat\"",
+ "click": "Apasă",
+ "loginCommand": "comanda de autentificare a runtime-ului",
+ "logoutCommand": "comanda de deconectare a runtime-ului",
+ "openTerminal": "Deschide terminalul și rulează:",
+ "reloginPrefix": "Dacă spune că ești autentificat, dar aplicația nu detectează asta, încearcă:",
+ "sameRuntime": "Asigură-te că CLI-ul din terminal este același runtime pe care îl folosește aplicația",
+ "statusCacheHint": "- uneori starea este stocată în cache pentru câteva secunde",
+ "then": "apoi"
+ },
+ "warnings": {
+ "multipleApiKeysMissing": "Unul sau mai mulți furnizori sunt setați pe modul cheie API, dar nu este configurată nicio cheie API. Deschide Gestionează furnizorii pentru a adăuga chei sau a schimba modul de conectare.",
+ "multipleApiKeysNeedAttention": "Unul sau mai mulți furnizori sunt setați pe modul cheie API și necesită atenție. Deschide Gestionează furnizorii pentru a revizui cheile salvate sau a schimba modul de conectare.",
+ "notAuthenticated": "{{runtime}} este instalat, dar nu ești autentificat. Autentificarea este necesară pentru aprovizionarea echipelor și funcțiile AI.",
+ "singleApiKeyMissing": "{{provider}} este setat pe modul cheie API, dar nu este configurată nicio cheie API. Deschide Gestionează furnizorii pentru a adăuga o cheie sau a schimba modul de conectare.",
+ "singleApiKeyNeedsAttention": "{{provider}} este setat pe modul cheie API, dar nu este conectat. Deschide Gestionează furnizorii pentru a revizui cheia salvată sau a schimba modul de conectare."
+ }
+ },
+ "recentProjects": {
+ "selectFolderTitle": "Selectează un folder de proiect",
+ "selectFolder": "Selectează folder",
+ "failedToLoad": "Încărcarea proiectelor a eșuat",
+ "retry": "Reîncearcă",
+ "noProjects": "Niciun proiect găsit",
+ "noMatches": "Nicio potrivire pentru \"{{query}}\"",
+ "noRecentProjects": "Niciun proiect recent găsit",
+ "emptyDescription": "Activitatea recentă Claude și Codex va apărea aici.",
+ "loadMore": "Încarcă mai multe",
+ "card": {
+ "deleted": "Șters",
+ "projectFolderMissing": "Folderul proiectului nu mai există",
+ "taskCounts": {
+ "active": "{{count}} active",
+ "active_one": "{{count}} activă",
+ "active_other": "{{count}} active",
+ "active_few": "{{count}} active",
+ "active_many": "{{count}} active",
+ "pending": "{{count}} în așteptare",
+ "pending_one": "{{count}} în așteptare",
+ "pending_other": "{{count}} în așteptare",
+ "pending_few": "{{count}} în așteptare",
+ "pending_many": "{{count}} în așteptare",
+ "done": "{{count}} finalizate",
+ "done_one": "{{count}} finalizată",
+ "done_other": "{{count}} finalizate",
+ "done_few": "{{count}} finalizate",
+ "done_many": "{{count}} finalizate"
+ }
+ },
+ "title": "Proiecte recente",
+ "searchResults": "Rezultate căutare",
+ "searchPlaceholder": "Caută proiecte..."
+ },
+ "actions": {
+ "selectTeam": "Selectează echipa",
+ "or": "sau",
+ "clearSearch": "Șterge căutarea"
+ },
+ "windowsAdmin": {
+ "title": "Se recomandă modul Administrator Windows",
+ "description": "Verificările runtime-ului OpenCode pot expira când Agent Teams AI nu rulează cu privilegii ridicate. Repornește aplicația cu Rulează ca administrator înainte de a lansa echipe OpenCode."
+ },
+ "webPreview": {
+ "title": "Deschide aplicația desktop pentru funcționalitate completă",
+ "description": "Versiunea de browser este încă în dezvoltare. Acțiunile de proiect, integrările și actualizările de stare în timp real pot fi limitate aici. Folosește aplicația desktop pentru a accesa toate funcțiile în mod fiabil."
+ },
+ "updateBanner": {
+ "newVersionAvailable": "Versiune nouă disponibilă",
+ "restartNow": "Repornește acum",
+ "viewDetails": "Vezi detalii"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ro/errors.json b/src/features/localization/renderer/locales/ro/errors.json
new file mode 100644
index 00000000..04568002
--- /dev/null
+++ b/src/features/localization/renderer/locales/ro/errors.json
@@ -0,0 +1,3 @@
+{
+ "fallback": "A apărut o eroare."
+}
diff --git a/src/features/localization/renderer/locales/ro/extensions.json b/src/features/localization/renderer/locales/ro/extensions.json
new file mode 100644
index 00000000..d80015ce
--- /dev/null
+++ b/src/features/localization/renderer/locales/ro/extensions.json
@@ -0,0 +1,688 @@
+{
+ "store": {
+ "actions": {
+ "addCustom": "Adaugă personalizat",
+ "openDashboard": "Deschide panoul",
+ "refreshCatalog": "Reîmprospătează catalogul"
+ },
+ "capabilities": {
+ "mcp": "MCP: {{status}}",
+ "plugins": "Pluginuri: {{status}}",
+ "skills": "Abilități: {{status}}"
+ },
+ "desktopOnly": "Disponibil doar în aplicația desktop.",
+ "provider": {
+ "checkingStatus": "Se verifică starea furnizorului...",
+ "connected": "Conectat",
+ "loading": "Se încarcă...",
+ "needsSetup": "Necesită configurare",
+ "readyToConfigure": "Gata de configurare",
+ "unsupported": "Neacceptat"
+ },
+ "runtime": {
+ "checkingAvailabilityDescription": "Extensiile au nevoie de runtime-ul configurat pentru a gestiona pluginuri, servere MCP, abilități și conexiuni cu furnizorii.",
+ "checkingAvailabilityTitle": "Se verifică disponibilitatea runtime-ului pentru extensii",
+ "failedToStartDescription": "Extensiile sunt dezactivate până când runtime-ul trece verificarea de stare la pornire. Deschide panoul pentru a-l repara sau reinstala.",
+ "failedToStartTitle": "Runtime-ul configurat a fost găsit, dar pornirea a eșuat",
+ "multimodelCapabilitiesDescription": "Suportul furnizorilor poate diferi în funcție de secțiune. Pluginurile sunt afișate doar acolo unde runtime-ul declară explicit suport.",
+ "multimodelCapabilitiesTitle": "Capabilități ale runtime-ului multimodel",
+ "needsSignInDescription": "{{runtime}} a fost găsit{{version}}, dar instalările de pluginuri sunt dezactivate până când te autentifici din panou.",
+ "needsSignInTitle": "{{runtime}} necesită autentificare",
+ "notAvailableDescription": "Extensiile sunt dezactivate până când runtime-ul este instalat. Deschide panoul pentru a-l instala și reîncearcă.",
+ "notAvailableTitle": "Runtime-ul configurat nu este disponibil",
+ "readyDescription": "Pluginurile pot fi instalate din această pagină{{versionSuffix}}.",
+ "readyTitle": "{{runtime}} este pregătit",
+ "requiredForMutations": "Runtime-ul configurat este necesar pentru a instala sau dezinstala extensii. Instalează-l sau repară-l din panou."
+ },
+ "sessionsRestartWarning": "Sesiunile în execuție nu vor prelua modificările extensiilor până la repornire.",
+ "tabs": {
+ "apiKeys": {
+ "description": "Chei secrete pentru servicii online. Adaugă-le aici pentru ca pluginurile, serverele și integrările să se poată conecta și funcționa.",
+ "label": "Chei API"
+ },
+ "mcpServers": {
+ "description": "Conexiuni cu unelte și aplicații externe. Permit runtime-ului să citească date sau să execute acțiuni dincolo de această aplicație.",
+ "label": "Servere MCP"
+ },
+ "plugins": {
+ "description": "Suplimente mici pentru runtime. În modul multimodel se aplică în prezent sesiunilor Anthropic când sunt acceptate. Suportul mai larg al furnizorilor este în dezvoltare.",
+ "label": "Pluginuri"
+ },
+ "skills": {
+ "description": "Instrucțiuni gata făcute pentru sarcini comune. Ajută runtime-ul să gestioneze mai consecvent sarcinile repetabile.",
+ "label": "Abilități"
+ }
+ },
+ "title": "Extensii"
+ },
+ "pluginsPanel": {
+ "activeFilters": "{{count}} active",
+ "browseByFit": "Răsfoiește după potrivire",
+ "capabilities": "Capabilități",
+ "categories": "Categorii",
+ "clearAllFilters": "Șterge toate filtrele",
+ "clearFilters": "Șterge filtrele",
+ "counts": {
+ "capabilities": "{{count}} capabilități",
+ "categories": "{{count}} categorii",
+ "plugins": "{{count}} pluginuri",
+ "capabilities_few": "{{count}} capabilități",
+ "capabilities_many": "{{count}} capabilități",
+ "capabilities_one": "{{count}} capabilitate",
+ "capabilities_other": "{{count}} capabilități",
+ "categories_few": "{{count}} categorii",
+ "categories_many": "{{count}} categorii",
+ "categories_one": "{{count}} categorie",
+ "categories_other": "{{count}} categorii",
+ "plugins_few": "{{count}} pluginuri",
+ "plugins_many": "{{count}} pluginuri",
+ "plugins_one": "{{count}} plugin",
+ "plugins_other": "{{count}} pluginuri"
+ },
+ "empty": {
+ "description": "Revino mai târziu pentru pluginuri noi",
+ "filteredDescription": "Încearcă să ajustezi criteriile de căutare sau de filtrare",
+ "filteredTitle": "Niciun plugin nu corespunde filtrelor tale",
+ "title": "Niciun plugin disponibil"
+ },
+ "filterDescription": "Restrânge catalogul după categorie, capabilitate sau stare de instalare.",
+ "installedOnly": "Doar instalate",
+ "providerSupportNotice": "Suportul pentru pluginuri este în prezent garantat doar pentru sesiunile Anthropic (Claude). Lucrăm pentru a accepta pluginuri pentru toți agenții.",
+ "resultsUpdateInstantly": "Rezultatele se actualizează instantaneu pe măsură ce rafinezi filtrele.",
+ "searchPlaceholder": "Caută pluginuri...",
+ "selectedCount": "{{count}} selectate",
+ "showing": "Se afișează {{shown}} din {{total}} pluginuri",
+ "sort": {
+ "category": "Categorie",
+ "nameAsc": "Nume A-Z",
+ "nameDesc": "Nume Z-A",
+ "popular": "Populare"
+ },
+ "activeFilters_few": "{{count}} active",
+ "activeFilters_many": "{{count}} active",
+ "activeFilters_one": "{{count}} activ",
+ "activeFilters_other": "{{count}} active",
+ "selectedCount_few": "{{count}} selectate",
+ "selectedCount_many": "{{count}} selectate",
+ "selectedCount_one": "{{count}} selectat",
+ "selectedCount_other": "{{count}} selectate"
+ },
+ "customMcp": {
+ "actions": {
+ "add": "Adaugă",
+ "cancel": "Anulează",
+ "install": "Instalează",
+ "installing": "Se instalează..."
+ },
+ "description": "Adaugă un server manual fără catalog.",
+ "errors": {
+ "installFailed": "Instalarea a eșuat",
+ "invalidServerName": "Nume de server invalid. Folosește caractere alfanumerice, liniuțe, sublinieri, puncte.",
+ "npmPackageRequired": "Numele pachetului npm este necesar",
+ "serverNameRequired": "Numele serverului este necesar",
+ "serverUrlRequired": "URL-ul serverului este necesar"
+ },
+ "fields": {
+ "environmentVariables": "Variabile de mediu",
+ "headers": "Anteturi",
+ "npmPackage": "Pachet npm",
+ "scope": "Domeniu",
+ "serverName": "Nume server",
+ "serverUrl": "URL server",
+ "transport": "Transport",
+ "transportType": "Tip de transport",
+ "versionOptional": "Versiune (opțional)"
+ },
+ "title": "Adaugă server MCP personalizat",
+ "transport": {
+ "httpSse": "HTTP / SSE",
+ "stdio": "Stdio (npm)"
+ },
+ "placeholders": {
+ "headerName": "Nume-Antet",
+ "envVarName": "NUME_VAR_MEDIU",
+ "serverName": "serverul-meu",
+ "latest": "ultima",
+ "value": "valoare",
+ "serverUrl": "https://api.example.com/mcp"
+ }
+ },
+ "mcpDetail": {
+ "auth": {
+ "remoteMayNeedHeaders": "Serverele MCP la distanță pot încă necesita anteturi personalizate sau chei API chiar și când registrul nu le descrie. Dacă conexiunea eșuează după instalare, verifică documentația furnizorului.",
+ "required": "Acest server necesită autentificare"
+ },
+ "diagnostics": {
+ "launchTarget": "Țintă de lansare"
+ },
+ "form": {
+ "autoFilled": "Completat automat",
+ "environmentVariables": "Variabile de mediu",
+ "headers": "Anteturi",
+ "scope": "Domeniu",
+ "serverName": "Nume server"
+ },
+ "install": {
+ "httpTransport": "HTTP: {{transport}}",
+ "manualSetupDescription": "Acest server necesită configurare manuală. Verifică depozitul pentru instrucțiuni de instalare.",
+ "manualSetupRequired": "Configurare manuală necesară",
+ "npmPackage": "npm: {{package}}",
+ "manage": "Gestionează instalarea",
+ "install": "Instalează serverul"
+ },
+ "links": {
+ "glama": "Glama",
+ "repository": "Depozit",
+ "website": "Site web"
+ },
+ "metadata": {
+ "author": "Autor",
+ "githubStars": "Stele GitHub",
+ "hosting": "Găzduire",
+ "installType": "Tip de instalare",
+ "license": "Licență",
+ "published": "Publicat",
+ "source": "Sursă",
+ "updated": "Actualizat",
+ "version": "Versiune"
+ },
+ "scope": {
+ "local": "Local",
+ "project": "Proiect"
+ },
+ "tools": {
+ "title": "Unelte ({{count}})",
+ "title_few": "Unelte ({{count}})",
+ "title_many": "Unelte ({{count}})",
+ "title_one": "Unealtă ({{count}})",
+ "title_other": "Unelte ({{count}})"
+ },
+ "placeholders": {
+ "serverName": "serverul-meu"
+ }
+ },
+ "skillEditor": {
+ "actions": {
+ "cancel": "Anulează",
+ "createSkill": "Creează abilitate",
+ "preparing": "Se pregătește...",
+ "reviewAndCreate": "Revizuiește și creează",
+ "reviewAndSave": "Revizuiește și salvează",
+ "saveSkill": "Salvează abilitatea"
+ },
+ "advanced": {
+ "customDescription": "Această abilitate folosește un format markdown personalizat, așa că editeaz-o direct aici.",
+ "customTitle": "2. Editor SKILL.md",
+ "description": "Majoritatea oamenilor pot sări peste acest pas. Deschide-l doar dacă vrei control direct asupra fișierului markdown brut.",
+ "hide": "Ascunde editorul avansat",
+ "resetFromStructuredFields": "Resetează din câmpurile structurate",
+ "show": "Arată editorul avansat",
+ "title": "4. Editor SKILL.md avansat"
+ },
+ "basics": {
+ "description": "Dă acestei abilități un nume clar, alege cine o poate folosi și decide unde ar trebui să fie stocată.",
+ "title": "1. Elemente de bază"
+ },
+ "description": {
+ "create": "Descrie fluxul de lucru în limbaj simplu, revizuiește fișierele care vor fi create, apoi salvează-l.",
+ "edit": "Actualizează această abilitate, revizuiește modificările de fișiere rezultate, apoi salvează-l."
+ },
+ "extraFiles": {
+ "addedFiles": "Fișiere adăugate:",
+ "assets": "Resurse",
+ "assetsDescription": "Adaugă capturi de ecran sau media incluse doar dacă ajută la explicarea fluxului de lucru.",
+ "description": "Adaugă documente, scripturi sau resurse de suport doar dacă această abilitate chiar are nevoie de ele.",
+ "lockedForEdits": "Rădăcina și folderul sunt blocate pentru editări",
+ "optionalDescription": "Adaugă fișiere de start care vor fi incluse în revizuire și scrise împreună cu `SKILL.md`.",
+ "optionalTitle": "Fișiere opționale",
+ "references": "Referințe",
+ "referencesDescription": "Adaugă documente, linkuri sau exemple de suport pe care runtime-ul le poate consulta.",
+ "scripts": "Scripturi",
+ "scriptsDescription": "Adaugă comenzi de ajutor sau note de configurare. Revizuiește cu atenție înainte de a partaja această abilitate.",
+ "title": "3. Fișiere suplimentare"
+ },
+ "fields": {
+ "compatibility": "Compatibilitate",
+ "description": "Descriere",
+ "folderName": "Nume folder",
+ "folderNameHint": "Sugerăm acest lucru automat din numele abilității pentru ca revizuirea să funcționeze imediat.",
+ "invocation": "Cum ar trebui folosită",
+ "license": "Licență",
+ "name": "Nume abilitate",
+ "notes": "Note suplimentare sau măsuri de protecție",
+ "root": "Unde să fie stocată",
+ "scope": "Cine o poate folosi",
+ "steps": "Pașii principali de urmat",
+ "whenToUse": "Când să apelezi la aceasta"
+ },
+ "instructions": {
+ "description": "Aceste secțiuni generează fișierul abilității pentru tine, așa că nu trebuie să editezi markdown decât dacă vrei.",
+ "locked": "Câmpurile structurate sunt blocate deoarece ai trecut la editarea manuală a `SKILL.md` mai jos.",
+ "title": "2. Instrucțiuni"
+ },
+ "invocation": {
+ "auto": "Poate fi folosită automat",
+ "manualOnly": "Doar când o ceri"
+ },
+ "placeholders": {
+ "description": "La ce ajută această abilitate",
+ "name": "Scrie un nume concis pentru abilitate",
+ "notes": "Exemplu: Semnalează testele lipsă, regresiile și presupunerile riscante.",
+ "steps": "1. Inspectează fișierele relevante.\n2. Explică mai întâi riscul principal.\n3. Sugerează cea mai sigură remediere.",
+ "whenToUse": "Exemplu: Folosește aceasta când sarcina este o cerere de revizuire de cod sau de triaj al erorilor.",
+ "license": "MIT",
+ "compatibility": "claude-code, cursor"
+ },
+ "review": {
+ "creating": "Se creează o abilitate",
+ "hint": "Revizuiește mai întâi modificările de fișiere, apoi confirmă salvarea în pasul următor.",
+ "saving": "Se salvează această abilitate"
+ },
+ "root": {
+ "codexOnly": " - Doar Codex",
+ "shared": " - Partajat"
+ },
+ "scope": {
+ "project": "Proiect: {{project}}",
+ "projectUnavailable": "Proiect indisponibil",
+ "user": "Utilizator"
+ },
+ "title": {
+ "create": "Creează abilitate",
+ "edit": "Editează abilitatea"
+ }
+ },
+ "skillDetail": {
+ "actions": {
+ "cancel": "Anulează",
+ "delete": "Șterge",
+ "deleteSkill": "Șterge abilitatea",
+ "deleting": "Se șterge...",
+ "editSkill": "Editează abilitatea",
+ "openFolder": "Deschide folderul",
+ "openSkillFile": "Deschide SKILL.md",
+ "retry": "Reîncearcă"
+ },
+ "badges": {
+ "assets": "Resurse",
+ "autoUse": "Utilizare automată",
+ "hasScripts": "Are scripturi",
+ "manualUse": "Utilizare manuală",
+ "references": "Referințe",
+ "storedIn": "Stocat în {{root}}"
+ },
+ "deleteDialog": {
+ "description": "Ștergi această abilitate și o muți la coșul de gunoi?",
+ "descriptionWithName": "Ștergi \"{{name}}\" și o muți la coșul de gunoi? O poți restaura mai târziu din coș dacă este nevoie.",
+ "title": "Ștergi abilitatea?"
+ },
+ "descriptionFallback": "Inspectează metadatele descoperite ale abilității și instrucțiunile brute.",
+ "errors": {
+ "deleteFailed": "Ștergerea abilității a eșuat",
+ "loadFailed": "Imposibil de încărcat această abilitate."
+ },
+ "files": {
+ "advancedDetails": "Detalii avansate de fișier",
+ "assets": "Resurse",
+ "references": "Referințe",
+ "scripts": "Scripturi",
+ "storedAt": "Stocat la"
+ },
+ "includes": {
+ "assets": "resurse",
+ "instructionsOnly": "Doar instrucțiunile abilității",
+ "references": "referințe",
+ "scripts": "scripturi"
+ },
+ "invocation": {
+ "auto": "Rulează automat când se potrivește cu sarcina.",
+ "manualOnly": "Rulează doar când o ceri explicit."
+ },
+ "issues": {
+ "bundledScripts": "Această abilitate include scripturi incluse",
+ "reviewCarefully": "Revizuiește această abilitate cu atenție înainte de a o folosi"
+ },
+ "loading": "Se încarcă detaliile abilității...",
+ "scope": {
+ "personal": "Abilitățile tale personale",
+ "projectOnly": "Doar acest proiect"
+ },
+ "summary": {
+ "howUsed": "Cum este folosită",
+ "included": "Ce vine cu ea",
+ "whoCanUse": "Cine o poate folosi"
+ },
+ "titleFallback": "Detalii abilitate"
+ },
+ "skillsPanel": {
+ "actions": {
+ "createSkill": "Creează abilitate",
+ "import": "Importă"
+ },
+ "badges": {
+ "assets": "Resurse",
+ "hasScripts": "Are scripturi",
+ "needsAttention": "Necesită atenție",
+ "references": "Referințe",
+ "storedIn": "Stocat în {{root}}"
+ },
+ "configuredRuntime": "runtime-ul configurat",
+ "counts": {
+ "codexOnly": "{{count}} doar Codex",
+ "personal": "{{count}} personale",
+ "project": "{{count}} de proiect",
+ "shared": "{{count}} partajate",
+ "total": "{{count}} în total",
+ "codexOnly_few": "{{count}} doar Codex",
+ "codexOnly_many": "{{count}} doar Codex",
+ "codexOnly_one": "{{count}} doar Codex",
+ "codexOnly_other": "{{count}} doar Codex",
+ "personal_few": "{{count}} personale",
+ "personal_many": "{{count}} personale",
+ "personal_one": "{{count}} personală",
+ "personal_other": "{{count}} personale",
+ "project_few": "{{count}} de proiect",
+ "project_many": "{{count}} de proiect",
+ "project_one": "{{count}} de proiect",
+ "project_other": "{{count}} de proiect",
+ "shared_few": "{{count}} partajate",
+ "shared_many": "{{count}} partajate",
+ "shared_one": "{{count}} partajată",
+ "shared_other": "{{count}} partajate",
+ "total_few": "{{count}} în total",
+ "total_many": "{{count}} în total",
+ "total_one": "{{count}} în total",
+ "total_other": "{{count}} în total"
+ },
+ "empty": {
+ "noMatches": "Nicio abilitate nu corespunde căutării tale",
+ "noMatchesDescription": "Încearcă un alt termen de căutare sau schimbă filtrele.",
+ "noSkills": "Nicio abilitate încă",
+ "noSkillsDescription": "Creează-ți prima abilitate pentru a învăța un flux de lucru repetabil sau importă una pe care o folosești deja."
+ },
+ "filters": {
+ "all": "Toate abilitățile",
+ "codexOnly": "Doar Codex",
+ "hasScripts": "Are scripturi",
+ "needsAttention": "Necesită atenție",
+ "personal": "Personale",
+ "project": "De proiect",
+ "shared": "Partajate"
+ },
+ "hero": {
+ "codexAvailable": "Folosește `.codex` când o abilitate ar trebui să rămână doar pentru Codex.",
+ "codexUnavailable": "Abilitățile `.codex` existente rămân editabile aici, dar noile abilități doar pentru Codex necesită runtime-ul Codex activat.",
+ "description": "Abilitățile sunt instrucțiuni reutilizabile care ajută runtime-ul să gestioneze mai consecvent același tip de sarcină.",
+ "guidance": "Folosește abilitățile personale pentru obiceiuri pe care le vrei peste tot. Folosește abilitățile de proiect pentru fluxuri de lucru care au sens doar într-o singură bază de cod.",
+ "personalContext": "Vezi în acest moment doar abilitățile tale personale.",
+ "projectContext": "Vezi abilitățile pentru {{project}} plus abilitățile tale personale.",
+ "title": "Învață munca repetabilă"
+ },
+ "invocation": {
+ "auto": "Rulează automat când se potrivește",
+ "manualOnly": "Rulează doar când o ceri explicit"
+ },
+ "loading": {
+ "loading": "Se încarcă abilitățile...",
+ "refreshing": "Se reîmprospătează abilitățile..."
+ },
+ "runtimeAudience": "Abilitățile partajate din `.claude`, `.cursor` și `.agents` sunt disponibile pentru {{audience}}. Abilitățile stocate în `.codex` rămân doar pentru Codex când suportul Codex este disponibil.",
+ "scope": {
+ "project": "Acest proiect",
+ "user": "Personale"
+ },
+ "searchPlaceholder": "Caută după numele abilității sau la ce ajută...",
+ "sections": {
+ "personal": {
+ "description": "Obiceiuri și instrucțiuni pe care le vrei disponibile peste tot.",
+ "title": "Abilități personale"
+ },
+ "project": {
+ "description": "Fluxuri de lucru care au sens doar pentru această bază de cod.",
+ "title": "Abilități de proiect"
+ }
+ },
+ "sort": {
+ "label": "Sortează abilitățile",
+ "name": "Nume",
+ "recent": "Recente"
+ },
+ "status": {
+ "hasScripts": "Include scripturi, așa că revizuiește-o cu atenție",
+ "needsAttention": "Necesită atenție înainte să te bazezi pe ea",
+ "ready": "Gata de utilizare"
+ },
+ "success": {
+ "created": "Abilitate creată cu succes.",
+ "imported": "Abilitate importată cu succes.",
+ "saved": "Abilitate salvată cu succes."
+ }
+ },
+ "pluginDetail": {
+ "unknown": "Necunoscut",
+ "metadata": {
+ "author": "Autor",
+ "category": "Categorie",
+ "source": "Sursă",
+ "version": "Versiune",
+ "capabilities": "Capabilități",
+ "installs": "Instalări"
+ },
+ "scope": {
+ "label": "Domeniu:",
+ "options": {
+ "user": "Utilizator (global)",
+ "project": "Proiect (partajat)",
+ "local": "Local (ignorat de git)"
+ }
+ },
+ "links": {
+ "homepage": "Pagină principală",
+ "contact": "Contact"
+ },
+ "readme": {
+ "loading": "Se încarcă README...",
+ "empty": "Niciun README disponibil."
+ }
+ },
+ "skillImport": {
+ "title": "Importă abilitate",
+ "description": "Alege un folder de abilitate existent, revizuiește ce va fi copiat, apoi importă-l într-una dintre locațiile tale de abilități acceptate.",
+ "steps": {
+ "chooseFolder": {
+ "title": "1. Alege un folder de abilitate",
+ "description": "Acesta ar trebui să fie un folder care conține deja un fișier `SKILL.md`, `Skill.md` sau `skill.md`."
+ },
+ "location": {
+ "title": "2. Decide unde îi este locul",
+ "description": "Abilitățile personale funcționează peste tot. Abilitățile de proiect apar doar pentru o singură bază de cod."
+ }
+ },
+ "fields": {
+ "sourceFolder": "Folder sursă",
+ "destinationFolderName": "Nume folder de destinație",
+ "audience": "Cine o poate folosi",
+ "storage": "Unde să fie stocată"
+ },
+ "placeholders": {
+ "defaultFolderName": "Implicit la numele folderului sursă"
+ },
+ "actions": {
+ "browse": "Răsfoiește",
+ "cancel": "Anulează",
+ "preparing": "Se pregătește...",
+ "reviewAndImport": "Revizuiește și importă",
+ "importSkill": "Importă abilitatea",
+ "backToImport": "Înapoi la import"
+ },
+ "scope": {
+ "user": "Utilizator",
+ "project": "Proiect: {{project}}",
+ "projectUnavailable": "Proiect indisponibil"
+ },
+ "rootSuffix": {
+ "codexOnly": " - Doar Codex",
+ "shared": " - Partajat"
+ },
+ "reviewHint": "Revizuiește mai întâi fișierele copiate, apoi confirmă importul în pasul următor.",
+ "reviewLabel": "Se importă această abilitate",
+ "errors": {
+ "missingSkillFile": "Acest folder nu pare încă o abilitate. Are nevoie de un fișier SKILL.md, Skill.md sau skill.md.",
+ "symbolicLinks": "Acest folder conține legături simbolice. Importă fișierele reale în loc de legături.",
+ "tooManyFiles": "Acest folder de abilitate este prea mare pentru a fi importat dintr-o dată. Elimină fișierele suplimentare și încearcă din nou.",
+ "tooLarge": "Acest folder de abilitate este prea mare pentru a fi importat în siguranță. Reduce resursele mari și încearcă din nou.",
+ "invalidFolderName": "Alege un nume de folder de destinație mai simplu folosind litere, cifre, puncte, liniuțe sau sublinieri.",
+ "mustBeDirectory": "Alege un folder de importat, nu un singur fișier.",
+ "reviewFailed": "Revizuirea modificărilor de import a eșuat",
+ "importFailed": "Importul abilității a eșuat"
+ }
+ },
+ "mcpPanel": {
+ "sort": {
+ "nameAsc": "Nume A→Z",
+ "nameDesc": "Nume Z→A",
+ "toolsDesc": "Cele mai multe unelte"
+ },
+ "health": {
+ "title": "Stare de sănătate MCP",
+ "checkingViaRuntime": "Se verifică serverele MCP instalate prin {{runtime}} ...",
+ "lastChecked": "Ultima verificare {{time}}",
+ "description": "Rulează diagnostice din această pagină pentru a verifica conectivitatea MCP instalată.",
+ "checking": "Se verifică...",
+ "checkStatus": "Verifică starea"
+ },
+ "diagnostics": {
+ "title": "Diagnostice MCP runtime",
+ "serversCount": "{{count}} servere",
+ "serversCount_one": "{{count}} server",
+ "serversCount_other": "{{count}} servere",
+ "waiting": "Se așteaptă rezultatele diagnosticelor...",
+ "disableReasons": {
+ "checkingRuntimeStatus": "Se verifică starea runtime-ului...",
+ "checkingRuntimeAvailability": "Se verifică disponibilitatea runtime-ului...",
+ "runtimeFailedToStart": "Runtime-ul configurat a fost găsit, dar pornirea a eșuat. Deschide panoul pentru a-l repara sau reinstala.",
+ "runtimeRequired": "Runtime-ul configurat este necesar. Instalează-l sau repară-l din panou."
+ },
+ "serversCount_few": "{{count}} servere",
+ "serversCount_many": "{{count}} servere"
+ },
+ "searchPlaceholder": "Caută servere MCP...",
+ "runtime": {
+ "notAvailable": "{{runtime}} indisponibil",
+ "notInstalled": "{{runtime}} nu este instalat",
+ "requiredDescription": "Verificările de sănătate MCP necesită {{runtime}}. Mergi la panou pentru a-l instala sau repara."
+ },
+ "empty": {
+ "searchTitle": "Niciun server găsit",
+ "title": "Niciun server MCP disponibil",
+ "searchDescription": "Încearcă un alt termen de căutare",
+ "description": "Revino mai târziu pentru servere noi"
+ },
+ "loadMore": "Încarcă mai multe"
+ },
+ "apiKeys": {
+ "description": "Stochează în siguranță chei API pentru completarea automată la instalarea serverelor MCP.",
+ "storage": {
+ "osKeychain": "Cheile sunt criptate prin {{backend}} și stocate cu permisiuni de fișier restricționate (doar proprietarul).",
+ "localEncryption": "Brelocul SO indisponibil - cheile sunt criptate local cu AES-256. Pentru protecție mai puternică, instalează un serviciu de breloc (gnome-keyring, kwallet)."
+ },
+ "actions": {
+ "add": "Adaugă cheie API",
+ "addFirst": "Adaugă prima ta cheie",
+ "edit": "Editează",
+ "copied": "Copiat!",
+ "copyEnvVarName": "Copiază numele variabilei de mediu",
+ "confirmDelete": "Apasă din nou pentru a confirma",
+ "delete": "Șterge"
+ },
+ "empty": {
+ "title": "Nicio cheie API salvată",
+ "description": "Adaugă chei pentru a completa automat variabilele de mediu la instalarea serverelor MCP."
+ },
+ "form": {
+ "addTitle": "Adaugă cheie API",
+ "editTitle": "Editează cheia API",
+ "addDescription": "Stochează o cheie API pentru completarea automată în instalările de servere MCP.",
+ "editDescription": "Actualizează detaliile cheii. Trebuie să reintroduci valoarea.",
+ "keychainUnavailable": "Brelocul SO indisponibil - chei criptate local cu AES-256. Instalează gnome-keyring pentru protecție la nivel de SO.",
+ "name": "Nume",
+ "namePlaceholder": "ex., OpenAI Production",
+ "environmentVariableName": "Numele variabilei de mediu",
+ "envVarPlaceholder": "ex., OPENAI_API_KEY",
+ "value": "Valoare",
+ "reenterValue": "Reintrodu valoarea cheii",
+ "valuePlaceholder": "sk-...",
+ "scope": "Domeniu",
+ "userScopeLabel": "Utilizator (global)",
+ "projectScopeLabel": "Proiect: {{project}}",
+ "projectUnavailable": "Proiect indisponibil",
+ "boundTo": "Legat de {{path}}",
+ "cancel": "Anulează",
+ "saving": "Se salvează...",
+ "update": "Actualizează",
+ "save": "Salvează",
+ "errors": {
+ "invalidEnvVarFormat": "Folosește litere, cifre, sublinieri. Trebuie să înceapă cu o literă sau o subliniere.",
+ "nameRequired": "Numele este necesar",
+ "envVarRequired": "Numele variabilei de mediu este necesar",
+ "invalidEnvVar": "Nume invalid de variabilă de mediu",
+ "valueRequired": "Valoarea cheii este necesară",
+ "projectScopeRequiresProject": "Cheile API la nivel de proiect necesită un proiect activ",
+ "saveFailed": "Salvarea a eșuat"
+ }
+ }
+ },
+ "skillReview": {
+ "title": "Revizuiește modificările abilității",
+ "description": "{{reviewLabel}} previzualizează mai întâi modificările sistemului de fișiere. Nu se scrie nimic până nu confirmi mai jos.",
+ "noPreview": "Nicio previzualizare disponibilă.",
+ "confirmPromptPrefix": "Revizuiește diff-ul de mai jos, apoi folosește",
+ "confirmPromptSuffix": "pentru a aplica aceste modificări.",
+ "noChanges": "Nicio modificare de fișier detectată încă.",
+ "binaryBadge": "binar",
+ "binaryPreviewHidden": "Previzualizarea fișierelor binare nu este afișată. Fișierul va fi copiat ca atare.",
+ "summary": {
+ "fileChanges": "{{count}} modificări de fișiere",
+ "fileChanges_one": "{{count}} modificare de fișier",
+ "fileChanges_other": "{{count}} modificări de fișiere",
+ "new": "{{count}} noi",
+ "updated": "{{count}} actualizate",
+ "removed": "{{count}} eliminate",
+ "binary": "{{count}} binare",
+ "fileChanges_few": "{{count}} modificări de fișiere",
+ "fileChanges_many": "{{count}} modificări de fișiere"
+ }
+ },
+ "mcpCard": {
+ "toolsCount": "{{count}} unelte",
+ "toolsCount_one": "{{count}} unealtă",
+ "toolsCount_other": "{{count}} unelte",
+ "envCount": "{{count}} variabile de mediu",
+ "envCount_one": "{{count}} variabilă de mediu",
+ "envCount_other": "{{count}} variabile de mediu",
+ "auth": "Autentificare",
+ "byAuthor": "de {{author}}",
+ "hosting": {
+ "remote": "La distanță",
+ "local": "Local",
+ "both": "Ambele"
+ },
+ "toolsCount_few": "{{count}} unelte",
+ "toolsCount_many": "{{count}} unelte",
+ "envCount_few": "{{count}} variabile de mediu",
+ "envCount_many": "{{count}} variabile de mediu",
+ "repository": "Depozit",
+ "website": "Site web"
+ },
+ "installButton": {
+ "installing": "Se instalează...",
+ "removing": "Se elimină...",
+ "done": "Gata",
+ "retry": "Reîncearcă",
+ "uninstall": "Dezinstalează",
+ "install": "Instalează"
+ },
+ "pluginCard": {
+ "official": "Oficial"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ro/report.json b/src/features/localization/renderer/locales/ro/report.json
new file mode 100644
index 00000000..9c7103bb
--- /dev/null
+++ b/src/features/localization/renderer/locales/ro/report.json
@@ -0,0 +1,217 @@
+{
+ "cost": {
+ "breakdownTitle": "Defalcare costuri (per 1M tokenuri)",
+ "cacheRead": "Citire cache",
+ "cacheWrite": "Scriere cache",
+ "cost": "Cost",
+ "input": "Intrare",
+ "noCommits": "fără commituri",
+ "noLinesChanged": "nicio linie modificată",
+ "output": "Ieșire",
+ "parent": "Părinte: {{cost}}",
+ "parentCost": "Cost părinte",
+ "perCommit": "Per commit",
+ "perCommitFormula": "cost total ÷ {{count}} commit",
+ "perCommitFormula_few": "cost total ÷ {{count}} commituri",
+ "perCommitFormula_many": "cost total ÷ {{count}} commituri",
+ "perCommitFormula_one": "cost total ÷ {{count}} commit",
+ "perCommitFormula_other": "cost total ÷ {{count}} commituri",
+ "perLineChanged": "Per linie modificată",
+ "perLineFormula": "cost total ÷ {{count}} linie",
+ "perLineFormula_few": "cost total ÷ {{count}} linii",
+ "perLineFormula_many": "cost total ÷ {{count}} linii",
+ "perLineFormula_one": "cost total ÷ {{count}} linie",
+ "perLineFormula_other": "cost total ÷ {{count}} linii",
+ "subagent": "Subagent: {{cost}}",
+ "subagentCost": "Cost subagent",
+ "title": "Analiză costuri",
+ "total": "Total"
+ },
+ "insights": {
+ "agent": "agent",
+ "agent_few": "agenți",
+ "agent_many": "agenți",
+ "agent_one": "agent",
+ "agent_other": "agenți",
+ "agentTree": "Arbore de agenți ({{count}} {{unit}})",
+ "background": "(fundal)",
+ "bashCommands": "Comenzi Bash",
+ "outOfScopeFindings": "Constatări în afara domeniului ({{count}})",
+ "questionsAsked": "Întrebări puse ({{count}})",
+ "repeated": "Repetate",
+ "skillsInvoked": "Abilități invocate ({{count}})",
+ "taskDispatches": "Dispecerizări de sarcini ({{count}})",
+ "tasksCreated": "Sarcini create ({{count}})",
+ "teamMode": "Mod echipă",
+ "teams": "Echipe: {{teams}}",
+ "title": "Perspective sesiune",
+ "total": "Total",
+ "unique": "Unice",
+ "skillsInvoked_few": "Abilități invocate ({{count}})",
+ "skillsInvoked_many": "Abilități invocate ({{count}})",
+ "skillsInvoked_one": "Abilități invocate ({{count}})",
+ "skillsInvoked_other": "Abilități invocate ({{count}})",
+ "taskDispatches_few": "Dispecerizări de sarcini ({{count}})",
+ "taskDispatches_many": "Dispecerizări de sarcini ({{count}})",
+ "taskDispatches_one": "Dispecerizări de sarcini ({{count}})",
+ "taskDispatches_other": "Dispecerizări de sarcini ({{count}})",
+ "tasksCreated_few": "Sarcini create ({{count}})",
+ "tasksCreated_many": "Sarcini create ({{count}})",
+ "tasksCreated_one": "Sarcini create ({{count}})",
+ "tasksCreated_other": "Sarcini create ({{count}})",
+ "questionsAsked_few": "Întrebări puse ({{count}})",
+ "questionsAsked_many": "Întrebări puse ({{count}})",
+ "questionsAsked_one": "Întrebări puse ({{count}})",
+ "questionsAsked_other": "Întrebări puse ({{count}})",
+ "agentTree_few": "Arbore de agenți ({{count}} {{unit}})",
+ "agentTree_many": "Arbore de agenți ({{count}} {{unit}})",
+ "agentTree_one": "Arbore de agenți ({{count}} {{unit}})",
+ "agentTree_other": "Arbore de agenți ({{count}} {{unit}})",
+ "outOfScopeFindings_few": "Constatări în afara domeniului ({{count}})",
+ "outOfScopeFindings_many": "Constatări în afara domeniului ({{count}})",
+ "outOfScopeFindings_one": "Constatări în afara domeniului ({{count}})",
+ "outOfScopeFindings_other": "Constatări în afara domeniului ({{count}})",
+ "keyTakeaways": "Concluzii principale"
+ },
+ "quality": {
+ "chars": "caractere",
+ "corrections": "Corecții",
+ "failed": "eșuat",
+ "fileReadRedundancy": "Redundanță citire fișiere",
+ "firstMessage": "Primul mesaj",
+ "firstRun": "Prima rulare",
+ "frictionRate": "Rată de fricțiune",
+ "lastRun": "Ultima rulare",
+ "messagesBeforeWork": "Mesaje înainte de lucru",
+ "passed": "reușit",
+ "promptQuality": "Calitatea promptului",
+ "readsPerUniqueFile": "Citiri/fișier unic",
+ "snapshot": "instantaneu",
+ "snapshot_few": "instantanee",
+ "snapshot_many": "instantanee",
+ "snapshot_one": "instantaneu",
+ "snapshot_other": "instantanee",
+ "startupOverhead": "Cost de pornire",
+ "testProgression": "Progresia testelor",
+ "title": "Semnale de calitate",
+ "tokensBeforeWork": "Tokenuri înainte de lucru",
+ "totalReads": "Total citiri",
+ "uniqueFiles": "Fișiere unice",
+ "userMessages": "Mesaje utilizator",
+ "percentOfTotal": "% din total"
+ },
+ "tokens": {
+ "apiCalls": "Apeluri API",
+ "cacheCreate": "Creare cache",
+ "cacheEfficiency": "Eficiență cache",
+ "cacheRead": "Citire cache",
+ "cacheReadPct": "% citire cache",
+ "coldStart": "Pornire la rece",
+ "cost": "Cost",
+ "input": "Intrare",
+ "model": "Model",
+ "no": "Nu",
+ "output": "Ieșire",
+ "readWriteRatio": "Raport C/S",
+ "title": "Utilizare tokenuri",
+ "total": "Total",
+ "yes": "Da"
+ },
+ "subagents": {
+ "title": "Subagenți",
+ "metrics": {
+ "count": "Număr",
+ "totalTokens": "Total tokenuri",
+ "totalDuration": "Durată totală",
+ "totalCost": "Cost total"
+ },
+ "table": {
+ "description": "Descriere",
+ "type": "Tip",
+ "tokens": "Tokenuri",
+ "duration": "Durată",
+ "cost": "Cost"
+ }
+ },
+ "overview": {
+ "title": "Prezentare generală",
+ "yes": "Da",
+ "no": "Nu",
+ "metrics": {
+ "duration": "Durată",
+ "messages": "Mesaje",
+ "contextUsage": "Utilizare context",
+ "compactions": "Compactări",
+ "branch": "Ramură",
+ "subagents": "Subagenți",
+ "project": "Proiect",
+ "sessionId": "ID sesiune"
+ }
+ },
+ "timeline": {
+ "title": "Cronologie și activitate",
+ "idleAnalysis": "Analiză inactivitate",
+ "metrics": {
+ "idleGaps": "Pauze de inactivitate",
+ "totalIdle": "Total inactivitate",
+ "activeTime": "Timp activ",
+ "idlePercent": "% inactivitate"
+ },
+ "modelSwitches": "Schimbări de model ({{count}})",
+ "modelSwitches_one": "Schimbări de model ({{count}})",
+ "modelSwitches_other": "Schimbări de model ({{count}})",
+ "messageNumber": "mesaj #{{number}}",
+ "keyEvents": "Evenimente cheie",
+ "modelSwitches_few": "Schimbări de model ({{count}})",
+ "modelSwitches_many": "Schimbări de model ({{count}})"
+ },
+ "tools": {
+ "title": "Utilizare unelte",
+ "summary": "{{formattedCount}} apeluri totale pentru {{toolCount}} unelte",
+ "columns": {
+ "tool": "Unealtă",
+ "calls": "Apeluri",
+ "errors": "Erori",
+ "successPercent": "% succes",
+ "health": "Stare"
+ }
+ },
+ "git": {
+ "title": "Activitate Git",
+ "commits": "Commituri",
+ "pushes": "Push-uri",
+ "linesAdded": "Linii adăugate",
+ "linesRemoved": "Linii eliminate",
+ "branchesCreated": "Ramuri create"
+ },
+ "friction": {
+ "title": "Semnale de fricțiune",
+ "rate": "Rată de fricțiune: {{rate}}%",
+ "correctionsCount": "{{count}} corecții",
+ "correctionsCount_one": "{{count}} corecție",
+ "corrections": "Corecții",
+ "thrashingSignals": "Semnale de blocaj",
+ "repeatedBashCommands": "Comenzi Bash repetate",
+ "reworkedFiles": "Fișiere reluate (3+ editări)",
+ "correctionsCount_few": "{{count}} corecții",
+ "correctionsCount_many": "{{count}} corecții",
+ "correctionsCount_other": "{{count}} corecții"
+ },
+ "errors": {
+ "title": "Erori",
+ "permissionDenied": "Permisiune refuzată",
+ "messageIndex": "mesaj #{{index}}",
+ "input": "Intrare",
+ "error": "Eroare",
+ "count": "{{count}} erori",
+ "count_one": "{{count}} eroare",
+ "permissionDenialCount": "{{count}} refuzuri de permisiune",
+ "permissionDenialCount_one": "{{count}} refuz de permisiune",
+ "count_few": "{{count}} erori",
+ "count_many": "{{count}} erori",
+ "count_other": "{{count}} erori",
+ "permissionDenialCount_few": "{{count}} refuzuri de permisiune",
+ "permissionDenialCount_many": "{{count}} refuzuri de permisiune",
+ "permissionDenialCount_other": "{{count}} refuzuri de permisiune"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ro/settings.json b/src/features/localization/renderer/locales/ro/settings.json
new file mode 100644
index 00000000..e350a7ba
--- /dev/null
+++ b/src/features/localization/renderer/locales/ro/settings.json
@@ -0,0 +1,994 @@
+{
+ "tabs": {
+ "advanced": {
+ "description": "Opțiuni pentru utilizatori avansați: export/import configurație, resetare la valori implicite și editare brută a configurației.",
+ "label": "Avansat"
+ },
+ "general": {
+ "description": "Preferințe de bază ale aplicației precum tema, limba, densitatea afișării și comportamentul la pornire.",
+ "label": "General"
+ },
+ "infoAriaLabel": "Ce este {{label}}?",
+ "notifications": {
+ "description": "Controlează când și cum ești notificat despre activitatea agenților, finalizarea sarcinilor și erori.",
+ "label": "Notificări"
+ }
+ },
+ "view": {
+ "description": "Gestionează preferințele aplicației",
+ "loading": "Se încarcă setările...",
+ "title": "Setări"
+ },
+ "runtimeProvider": {
+ "actions": {
+ "cancel": "Anulează",
+ "test": "Testează"
+ },
+ "defaults": {
+ "allProjects": "Toate proiectele",
+ "allProjectsHint": "Testele folosesc {{project}}. Valoarea implicită se aplică dacă un proiect nu are o suprascriere.",
+ "loadingContexts": "Se încarcă contextele...",
+ "projectHint": "Salvarea suprascrie doar {{project}}.",
+ "projectOverrideContext": "Context de suprascriere a proiectului",
+ "scopeDescriptionAllProjects": "Implicit pentru fiecare proiect care nu are propria suprascriere OpenCode.",
+ "scopeDescriptionProject": "Suprascrie doar proiectul selectat. Echipele în execuție nu sunt modificate.",
+ "selectProjectContext": "Selectează contextul proiectului",
+ "selectProjectHint": "Selectează un proiect înainte de a testa modele locale sau de a salva valori implicite.",
+ "selectValidationContext": "Selectează contextul de validare",
+ "setAllProjectsDefault": "Setează implicit pentru toate proiectele",
+ "setProjectDefault": "Setează implicit pentru proiect",
+ "thisProject": "Acest proiect",
+ "title": "Valori implicite OpenCode",
+ "validationContext": "Context de validare"
+ },
+ "diagnostics": {
+ "copied": "Diagnostice copiate",
+ "copiedShort": "Copiat",
+ "copy": "Copiază diagnosticele",
+ "hints": "Indicii",
+ "likelyCause": "Cauză probabilă:",
+ "windowsSymlinkAdminHint": "Windows: rulează Agent Teams AI ca Administrator"
+ },
+ "models": {
+ "alreadyDefault": "Acesta este deja modelul OpenCode implicit selectat.",
+ "empty": "Niciun model găsit.",
+ "emptyFree": "Niciun model gratuit găsit.",
+ "emptyRecommended": "Niciun model recomandat găsit.",
+ "emptyRecommendedFree": "Niciun model gratuit recomandat găsit.",
+ "freeOnly": "Doar gratuite",
+ "launchableDescription": "Rute cunoscute din configurația OpenCode, modele gratuite încorporate și valoarea implicită curentă. Rutele locale necesită un test reușit înainte de a fi pregătite pentru lansările de echipă.",
+ "launchableTitle": "Rute de model OpenCode",
+ "loadingRoutes": "Se încarcă rutele de model OpenCode...",
+ "noRoutesMatch": "Nicio rută de model OpenCode nu corespunde cu \"{{query}}\".",
+ "noneReported": "Nicio rută de model OpenCode nu a fost raportată încă. Configurează o rută locală în OpenCode sau folosește fila Furnizori pentru a inspecta furnizorii din catalog.",
+ "recommendedOnly": "Doar recomandate",
+ "searchPlaceholder": "Caută modele",
+ "selectProjectBeforeTesting": "Selectează un context de proiect înainte de a testa modele.",
+ "selectProjectBeforeTestingDefaults": "Selectează un context de proiect înainte de a testa sau salva valori implicite OpenCode.",
+ "testInProgress": "Testul modelului este deja în curs.",
+ "useInTeamPicker": "Salvează pentru selectorul de echipă",
+ "validationContextRequired": "Selectează un context de validare mai sus pentru a activa Testează și Setează implicit. Salvarea pentru selectorul de echipă doar stochează ruta pentru echipele noi.",
+ "actionsUnavailable": "Acțiunile sunt temporar indisponibile.",
+ "defaultSaveInProgress": "Valoarea implicită OpenCode se salvează.",
+ "routeUnavailableAuth": "Acest furnizor necesită autentificare înainte ca acest model să poată fi folosit.",
+ "routeUnavailableFailed": "Această rută de model a eșuat la ultimul test de execuție.",
+ "routeUnavailableGeneric": "Această rută de model nu poate fi folosită în acest moment.",
+ "routeUnavailableUnknown": "Acest model este valoarea implicită OpenCode curentă, dar nu este încă disponibil în catalogul live."
+ },
+ "providers": {
+ "catalog": "Catalog de furnizori OpenCode",
+ "countFallback": "Furnizori OpenCode",
+ "description": "{{count}}. Furnizorii conectați și recomandați sunt afișați primii.",
+ "loadMore": "Încarcă mai mulți furnizori",
+ "loading": "Se încarcă furnizorii OpenCode",
+ "noMatches": "Niciun furnizor nu corespunde acelei căutări.",
+ "noneReported": "Niciun furnizor OpenCode raportat de runtime-ul gestionat.",
+ "recommended": "Recomandat",
+ "refreshCatalog": "Reîmprospătează catalogul",
+ "searchPlaceholder": "Caută furnizori",
+ "description_few": "{{count}}. Furnizorii conectați și recomandați sunt afișați primii.",
+ "description_many": "{{count}}. Furnizorii conectați și recomandați sunt afișați primii.",
+ "description_one": "{{count}}. Furnizorii conectați și recomandați sunt afișați primii.",
+ "description_other": "{{count}}. Furnizorii conectați și recomandați sunt afișați primii."
+ },
+ "setup": {
+ "loading": "Se încarcă configurarea furnizorului..."
+ },
+ "summary": {
+ "defaultModel": "Implicit OpenCode: {{model}}",
+ "loading": "Se încarcă runtime-ul OpenCode gestionat, furnizorii conectați și valorile implicite ale modelelor...",
+ "source": "Sursă: {{source}}",
+ "title": "Runtime OpenCode"
+ },
+ "tabs": {
+ "models": "Modele",
+ "providers": "Furnizori"
+ },
+ "modelRoutes": {
+ "searchPlaceholder": "Caută rute de model"
+ },
+ "badges": {
+ "usedInTeamPicker": "Salvat pentru selectorul de echipă",
+ "free": "gratuit",
+ "local": "local",
+ "configured": "configurat",
+ "knownRoute": "rută cunoscută",
+ "connected": "conectat",
+ "verified": "verificat",
+ "needsTest": "necesită test",
+ "failed": "eșuat",
+ "unknown": "necunoscut",
+ "default": "implicit"
+ },
+ "compatibleEndpoint": {
+ "baseUrlPlaceholder": "http://localhost:1234"
+ }
+ },
+ "general": {
+ "agentLanguage": {
+ "description": "Limba pentru comunicarea agenților",
+ "descriptionWithDetected": "Limba pentru comunicarea agenților (detectată: {{detected}})",
+ "emptyMessage": "Nicio limbă găsită.",
+ "label": "Limbă",
+ "searchPlaceholder": "Caută limba...",
+ "selectPlaceholder": "Selectează limba...",
+ "title": "Limba agenților"
+ },
+ "appLanguage": {
+ "description": "Limba pentru interfața aplicației.",
+ "label": "Limbă",
+ "title": "Limba aplicației"
+ },
+ "appearance": {
+ "autoExpandAIGroups": {
+ "description": "Extinde automat fiecare tur de răspuns la deschiderea unui transcript sau la primirea unui mesaj nou",
+ "label": "Extinde răspunsurile AI în mod implicit"
+ },
+ "nativeTitleBar": {
+ "description": "Folosește cadrul de fereastră implicit al sistemului în loc de bara de titlu personalizată",
+ "label": "Folosește bara de titlu nativă",
+ "restartConfirm": {
+ "confirmLabel": "Repornește",
+ "message": "Aplicația trebuie repornită pentru a aplica modificarea barei de titlu. Repornești acum?",
+ "title": "Repornire necesară"
+ }
+ },
+ "theme": {
+ "description": "Alege tema de culori preferată",
+ "label": "Temă",
+ "options": {
+ "dark": "Întunecat",
+ "light": "Luminos",
+ "system": "Sistem"
+ }
+ },
+ "title": "Aspect"
+ },
+ "browserAccess": {
+ "serverMode": {
+ "description": "Pornește un server HTTP pentru a accesa interfața dintr-un browser sau pentru a o încorpora în iframe-uri",
+ "label": "Activează modul server"
+ },
+ "title": "Acces din browser"
+ },
+ "localClaudeRoot": {
+ "actions": {
+ "selectFolder": "Selectează folder",
+ "selectFolderManually": "Selectează folderul manual",
+ "useAutoDetect": "Folosește detectarea automată",
+ "useFolder": "Folosește folderul",
+ "usePath": "Folosește calea",
+ "useThisPath": "Folosește această cale",
+ "useWsl": "Folosești Linux/WSL?"
+ },
+ "confirm": {
+ "noProjectsDir": {
+ "message": "Acest folder nu conține un director \"projects\". Continui oricum?",
+ "title": "Niciun director projects găsit"
+ },
+ "notClaudeDir": {
+ "message": "Acest folder se numește \"{{folderName}}\", nu \".claude\". Continui oricum?",
+ "title": "Folderul selectat nu este .claude"
+ },
+ "noWslPaths": {
+ "message": "Nu s-au putut găsi automat distribuții WSL cu date Claude. Selectezi folderul manual?",
+ "title": "Nicio cale WSL Claude găsită"
+ },
+ "wslNoProjectsDir": {
+ "message": "\"{{path}}\" nu conține un director \"projects\". Continui oricum?",
+ "title": "Calea WSL nu are director projects"
+ }
+ },
+ "current": {
+ "autoDetected": "Detectat automat: {{path}}",
+ "autoDetectedPath": "Se folosește calea detectată automat",
+ "customPath": "Se folosește calea personalizată",
+ "label": "Rădăcina locală curentă"
+ },
+ "description": "Alege care folder local este tratat ca rădăcină a datelor tale Claude",
+ "errors": {
+ "detectWslFailed": "Detectarea căilor rădăcină WSL Claude a eșuat",
+ "loadFailed": "Încărcarea setărilor rădăcinii locale Claude a eșuat",
+ "updateFailed": "Actualizarea rădăcinii Claude a eșuat"
+ },
+ "title": "Rădăcina locală Claude",
+ "wslModal": {
+ "closeAriaLabel": "Închide fereastra de cale WSL",
+ "description": "Distribuții WSL detectate și candidați pentru rădăcina Claude",
+ "noProjectsDir": "Niciun director projects detectat",
+ "title": "Selectează rădăcina WSL Claude"
+ }
+ },
+ "privacy": {
+ "telemetry": {
+ "description": "Ajută la îmbunătățirea aplicației trimițând date anonime despre erori și performanță",
+ "label": "Trimite rapoarte de erori"
+ },
+ "title": "Confidențialitate"
+ },
+ "server": {
+ "runningOn": "Rulează pe",
+ "standaloneModeDescription": "Rulează în mod autonom. Serverul HTTP este întotdeauna activ. Notificările de sistem nu sunt disponibile - declanșatoarele de notificare sunt înregistrate doar în aplicație.",
+ "title": "Server"
+ },
+ "startup": {
+ "launchAtLogin": {
+ "description": "Pornește automat aplicația când te autentifici",
+ "label": "Pornește la autentificare"
+ },
+ "showDockIcon": {
+ "description": "Afișează pictograma aplicației în dock (macOS)",
+ "label": "Afișează pictograma în dock"
+ },
+ "title": "Pornire"
+ }
+ },
+ "notifications": {
+ "dev": {
+ "descriptionPrefix": "Notificările s-ar putea să nu funcționeze în modul de dezvoltare. macOS identifică aplicația ca \"Electron\" (bundle ID",
+ "descriptionSuffix": ") în loc de numele aplicației de producție. Verifică Setări sistem > Notificări > Electron pentru a confirma permisiunile.",
+ "title": "Mod dezvoltare"
+ },
+ "ignoredRepositories": {
+ "description": "Notificările de la aceste depozite vor fi ignorate",
+ "empty": "Niciun depozit ignorat",
+ "selectPlaceholder": "Selectează depozitul de ignorat...",
+ "title": "Depozite ignorate"
+ },
+ "settings": {
+ "enabled": {
+ "description": "Afișează notificări de sistem pentru erori și evenimente",
+ "label": "Activează notificările de sistem"
+ },
+ "sound": {
+ "description": "Redă un sunet când apar notificările",
+ "label": "Redă sunet"
+ },
+ "subagentErrors": {
+ "description": "Detectează și notifică despre erori în sesiunile subagenților",
+ "label": "Include erorile subagenților"
+ },
+ "title": "Setări notificări"
+ },
+ "snooze": {
+ "clear": "Anulează amânarea",
+ "description": "Întrerupe temporar notificările",
+ "descriptionWithTime": "Amânat până la {{time}}",
+ "label": "Amână notificările",
+ "options": {
+ "15": "15 minute",
+ "30": "30 de minute",
+ "60": "1 oră",
+ "120": "2 ore",
+ "240": "4 ore",
+ "-1": "Până mâine"
+ },
+ "selectDuration": "Selectează durata..."
+ },
+ "taskCompletion": {
+ "description": "Primește notificări native ale SO când Claude termină sarcini - sunete, bannere și insigne în Dock/bara de activități. Funcționează pe macOS, Linux și Windows.",
+ "installPlugin": "Instalează pluginul claude-notifications-go",
+ "title": "Notificări de finalizare a sarcinilor"
+ },
+ "team": {
+ "allTasksCompleted": {
+ "description": "Notifică atunci când fiecare sarcină dintr-o echipă ajunge la starea finalizată",
+ "label": "Toate sarcinile finalizate"
+ },
+ "autoResumeOnRateLimit": {
+ "description": "Când Claude raportează un moment de resetare, programează un memento de urmărire pentru liderul echipei după resetarea limitei",
+ "label": "Reia automat după limita de utilizare"
+ },
+ "clarifications": {
+ "description": "Afișează notificări native ale SO când o sarcină necesită contribuția ta",
+ "label": "Notificări de clarificare a sarcinilor"
+ },
+ "crossTeamMessage": {
+ "description": "Notifică atunci când sosește un mesaj de la o altă echipă",
+ "label": "Notificări de mesaje între echipe"
+ },
+ "leadInbox": {
+ "description": "Notifică atunci când coechipierii trimit mesaje liderului echipei",
+ "label": "Notificări pentru căsuța liderului"
+ },
+ "statusChange": {
+ "description": "Afișează notificări native ale SO când se schimbă starea unei sarcini",
+ "label": "Notificări de schimbare a stării sarcinilor",
+ "onlySolo": {
+ "description": "Notifică doar atunci când echipa nu are coechipieri",
+ "label": "Doar în modul Solo"
+ },
+ "statuses": {
+ "description": "Care stări țintă declanșează o notificare",
+ "label": "Notifică la aceste stări",
+ "options": {
+ "approved": "Aprobată",
+ "completed": "Finalizată",
+ "deleted": "Ștearsă",
+ "in_progress": "Începută",
+ "needsFix": "Necesită remedieri",
+ "pending": "În așteptare",
+ "review": "Revizuire"
+ }
+ }
+ },
+ "taskComments": {
+ "description": "Afișează notificări native ale SO când agenții comentează la sarcini",
+ "label": "Notificări de comentarii la sarcini"
+ },
+ "taskCreated": {
+ "description": "Afișează notificări native ale SO când se creează o sarcină nouă",
+ "label": "Notificări de creare a sarcinilor"
+ },
+ "teamLaunched": {
+ "description": "Notifică atunci când o echipă termină de lansat și este pregătită",
+ "label": "Notificări de lansare a echipei"
+ },
+ "title": "Notificări de echipă",
+ "toolApproval": {
+ "description": "Notifică atunci când o unealtă necesită aprobarea ta (Permite/Refuză) când aplicația nu este în prim-plan",
+ "label": "Notificări de aprobare a uneltelor"
+ },
+ "userInbox": {
+ "description": "Notifică atunci când coechipierii îți trimit mesaje",
+ "label": "Notificări pentru căsuța utilizatorului"
+ }
+ },
+ "test": {
+ "action": "Trimite test",
+ "description": "Trimite o notificare de test pentru a verifica livrarea",
+ "failedToSend": "Trimiterea notificării de test a eșuat",
+ "label": "Notificare de test",
+ "sending": "Se trimite...",
+ "sent": "Trimis!",
+ "unknownError": "Eroare necunoscută"
+ }
+ },
+ "advanced": {
+ "about": {
+ "appIconAlt": "Pictograma aplicației",
+ "description": "Asamblează echipe de agenți AI care lucrează autonom în paralel, comunică între echipe și gestionează sarcini pe o tablă kanban - cu revizuire de cod integrată, monitorizare a proceselor live și vizibilitate completă a uneltelor.",
+ "standalone": "Autonom",
+ "title": "Despre",
+ "version": "Versiunea {{version}}"
+ },
+ "configuration": {
+ "editConfig": "Editează configurația",
+ "exportConfig": "Exportă configurația",
+ "importConfig": "Importă configurația",
+ "openInEditor": "Deschide în editor",
+ "resetToDefaults": "Resetează la valorile implicite",
+ "title": "Configurație"
+ },
+ "updates": {
+ "available": "v{{version}} disponibilă",
+ "check": "Verifică actualizările",
+ "checking": "Se verifică...",
+ "ready": "Actualizare pregătită",
+ "unknownVersion": "necunoscută",
+ "upToDate": "La zi"
+ },
+ "appName": "Agent Teams AI"
+ },
+ "configEditor": {
+ "errors": {
+ "loadFailed": "Încărcarea configurației a eșuat",
+ "saveFailed": "Salvarea configurației a eșuat"
+ },
+ "footer": {
+ "autoSave": "Modificările se salvează automat după editare",
+ "toClose": "pentru a închide",
+ "escapeKey": "Esc"
+ },
+ "loading": "Se încarcă configurația...",
+ "status": {
+ "invalidJson": "JSON invalid",
+ "saveFailed": "Salvarea a eșuat",
+ "saved": "Salvat",
+ "saving": "Se salvează..."
+ },
+ "title": "Editează configurația"
+ },
+ "notificationTriggers": {
+ "add": {
+ "cancel": "Anulează",
+ "submit": "Adaugă declanșator",
+ "title": "Adaugă declanșator personalizat"
+ },
+ "builtin": {
+ "description": "Declanșatoare implicite care vin cu aplicația. Le poți activa sau dezactiva și le poți personaliza tiparele.",
+ "title": "Declanșatoare încorporate"
+ },
+ "card": {
+ "builtinBadge": "Încorporat",
+ "collapseAriaLabel": "Restrânge",
+ "deleteAriaLabel": "Șterge declanșatorul",
+ "editNameAriaLabel": "Editează numele",
+ "expandAriaLabel": "Extinde"
+ },
+ "color": {
+ "customHexTitle": "Culoare hex personalizată",
+ "invalidHex": "Hex invalid"
+ },
+ "configuration": {
+ "alertIfGreaterThan": "Alertează dacă >",
+ "emptyPatternHint": "Lasă gol pentru a potrivi tot conținutul. Folosește sintaxa regex JavaScript.",
+ "errorStatusDescription": "Se declanșează când execuția unei unelte raportează o eroare (is_error: true).",
+ "tokensUnit": "tokenuri",
+ "matchPatternPlaceholder": "ex., error|failed|exception"
+ },
+ "custom": {
+ "description": "Creează-ți propriile declanșatoare pentru a fi notificat pentru tipare specifice sau rezultate ale uneltelor.",
+ "empty": "Niciun declanșator personalizat configurat încă.",
+ "title": "Declanșatoare personalizate"
+ },
+ "errors": {
+ "invalidRegexPattern": "Tipar regex invalid"
+ },
+ "fields": {
+ "contentType": "Tip de conținut",
+ "matchField": "Câmp de potrivire",
+ "matchPattern": "Tipar de potrivire (Regex)",
+ "scopeToolName": "Domeniu / Nume unealtă",
+ "scopeToolNameOptional": "Domeniu / Nume unealtă (opțional)",
+ "threshold": "Prag",
+ "tokenType": "Tip de token",
+ "triggerNamePlaceholder": "ex., Alertă eșec build",
+ "triggerNameRequired": "Nume declanșator *"
+ },
+ "ignorePatterns": {
+ "hint": "Apasă Enter pentru a adăuga. Notificarea este omisă dacă vreun tipar se potrivește.",
+ "placeholder": "Adaugă regex de ignorare...",
+ "removeAriaLabel": "Elimină tiparul de ignorare",
+ "summary": "Avansat: Reguli de excludere",
+ "title": "Tipare de ignorare (omite dacă se potrivește)"
+ },
+ "options": {
+ "contentTypes": {
+ "text": "Ieșire text",
+ "thinking": "Gândire",
+ "tool_result": "Rezultat unealtă",
+ "tool_use": "Utilizare unealtă"
+ },
+ "matchFields": {
+ "args": "Argumente",
+ "command": "Comandă",
+ "content": "Conținut",
+ "description": "Descriere",
+ "file_path": "Cale fișier",
+ "fullInput": "Intrare completă (JSON)",
+ "glob": "Filtru glob",
+ "new_string": "Șir nou",
+ "old_string": "Șir vechi",
+ "path": "Cale",
+ "pattern": "Tipar",
+ "prompt": "Prompt",
+ "query": "Interogare",
+ "skill": "Nume abilitate",
+ "subagent_type": "Tip subagent",
+ "text": "Conținut text",
+ "thinking": "Conținut gândire",
+ "url": "URL"
+ },
+ "modes": {
+ "content_match": "Tipar de conținut",
+ "error_status": "Eroare de execuție",
+ "token_threshold": "Utilizare mare de tokenuri"
+ },
+ "tokenTypes": {
+ "input": "Tokenuri de intrare",
+ "output": "Tokenuri de ieșire",
+ "total": "Total tokenuri"
+ },
+ "toolNames": {
+ "anyTool": "Orice unealtă"
+ }
+ },
+ "preview": {
+ "defaultTestTriggerName": "Declanșator de test",
+ "detectedSuffix": "erori ar fi fost detectate",
+ "more": "...și încă {{count}}",
+ "more_few": "...și încă {{count}}",
+ "more_many": "...și încă {{count}}",
+ "more_one": "...și încă {{count}}",
+ "more_other": "...și încă {{count}}",
+ "testTrigger": "Testează declanșatorul",
+ "testing": "Se testează...",
+ "title": "Previzualizare",
+ "truncatedWarning": "Căutarea s-a oprit devreme (expirare sau limită de număr). Potrivirile reale pot fi mai multe.",
+ "viewSession": "Vezi sesiunea"
+ },
+ "repositoryScope": {
+ "empty": "Niciun depozit selectat - declanșatorul se aplică tuturor depozitelor",
+ "hint": "Când sunt selectate depozite, acest declanșator se activează doar pentru erori din acele depozite.",
+ "placeholder": "Selectează depozitul de adăugat...",
+ "summary": "Avansat: Domeniu depozite",
+ "title": "Limitează la depozite (se aplică doar depozitelor selectate)"
+ },
+ "sections": {
+ "configuration": "Configurație",
+ "dotColor": "Culoare punct",
+ "generalInfo": "Informații generale",
+ "triggerCondition": "Condiție de declanșare"
+ }
+ },
+ "workspaceProfiles": {
+ "actions": {
+ "addProfile": "Adaugă profil",
+ "cancel": "Anulează",
+ "deleteProfile": "Șterge profilul",
+ "editProfile": "Editează profilul",
+ "save": "Salvează"
+ },
+ "authMethods": {
+ "agent": "Agent SSH",
+ "auto": "Automat (din configurația SSH)",
+ "password": "Parolă",
+ "privateKey": "Cheie privată"
+ },
+ "deleteConfirm": {
+ "confirmLabel": "Șterge",
+ "message": "Ești sigur că vrei să ștergi \"{{name}}\"? Această acțiune nu poate fi anulată.",
+ "title": "Șterge profilul"
+ },
+ "description": "Salvează profiluri de conexiune SSH pentru reconectare rapidă",
+ "empty": {
+ "description": "Adaugă un profil SSH pentru a te conecta rapid",
+ "title": "Niciun profil salvat"
+ },
+ "form": {
+ "authentication": "Autentificare",
+ "host": "Gazdă",
+ "name": "Nume",
+ "passwordPrompt": "Ți se va solicita parola la conectare.",
+ "port": "Port",
+ "privateKeyPath": "Calea cheii private",
+ "username": "Nume de utilizator",
+ "namePlaceholder": "Serverul meu",
+ "hostPlaceholder": "nume gazdă sau IP",
+ "usernamePlaceholder": "utilizator"
+ },
+ "loading": "Se încarcă profilurile...",
+ "title": "Profiluri spațiu de lucru"
+ },
+ "connection": {
+ "actions": {
+ "connect": "Conectează",
+ "connecting": "Se conectează...",
+ "disconnect": "Deconectează",
+ "testConnection": "Testează conexiunea",
+ "testing": "Se testează..."
+ },
+ "currentMode": {
+ "description": "Sursa de date pentru fișierele de sesiune",
+ "label": "Mod curent",
+ "local": "Local ({{path}})"
+ },
+ "description": "Conectează-te la o mașină la distanță pentru a vedea sesiunile Claude Code care rulează acolo",
+ "form": {
+ "authentication": "Autentificare",
+ "host": "Gazdă",
+ "password": "Parolă",
+ "port": "Port",
+ "privateKeyPath": "Calea cheii private",
+ "username": "Nume de utilizator",
+ "hostPlaceholder": "nume gazdă sau alias de configurație SSH",
+ "usernamePlaceholder": "utilizator"
+ },
+ "savedProfiles": {
+ "title": "Profiluri salvate"
+ },
+ "ssh": {
+ "title": "Conexiune SSH"
+ },
+ "status": {
+ "connectedTo": "Conectat la {{host}}",
+ "remoteSessions": "Se vizualizează sesiuni la distanță prin SSH"
+ },
+ "test": {
+ "failed": "Conexiunea a eșuat: {{error}}",
+ "success": "Conexiune reușită",
+ "unknownError": "Eroare necunoscută"
+ },
+ "title": "Conexiune la distanță"
+ },
+ "providerRuntime": {
+ "actions": {
+ "cancel": "Anulează",
+ "cancelLogin": "Anulează autentificarea",
+ "connectChatGpt": "Conectează ChatGPT",
+ "delete": "Șterge",
+ "disable": "Dezactivează",
+ "disconnectAccount": "Deconectează contul",
+ "generateLink": "Generează link",
+ "openLogin": "Deschide autentificarea",
+ "reconnectAnthropic": "Reconectează Anthropic",
+ "refresh": "Reîmprospătează",
+ "replaceKey": "Înlocuiește cheia",
+ "saveEndpoint": "Salvează endpoint-ul",
+ "saveKey": "Salvează cheia",
+ "saving": "Se salvează...",
+ "setApiKey": "Setează cheia API",
+ "updateKey": "Actualizează cheia",
+ "useCode": "Folosește codul"
+ },
+ "apiKey": {
+ "loadingStoredCredentials": "Se încarcă credențialele stocate...",
+ "projectScope": "Proiect",
+ "scope": "Domeniu",
+ "storedIn": "Stocat în {{backend}}",
+ "userScope": "Utilizator",
+ "storedInApp": "Stocat în aplicație",
+ "providers": {
+ "anthropic": {
+ "name": "Cheie API Anthropic",
+ "title": "Cheie API",
+ "description": "Folosește o cheie API Anthropic directă pentru acces facturat prin API. Sesiunea abonamentului tău Anthropic rămâne disponibilă când revii la ea.",
+ "placeholder": "sk-ant-..."
+ },
+ "codex": {
+ "name": "Cheie API Codex",
+ "title": "Cheie API",
+ "description": "Folosește o cheie API OpenAI ca o cale secundară de autentificare Codex. Dacă schimbi Codex în modul cheie API, aplicația va reflecta OPENAI_API_KEY în CODEX_API_KEY pentru lansările native.",
+ "placeholder": "sk-proj-..."
+ },
+ "gemini": {
+ "name": "Cheie API Gemini",
+ "title": "Acces API",
+ "description": "Folosește `GEMINI_API_KEY` pentru backend-ul API Gemini. CLI SDK și ADC nu o necesită.",
+ "placeholder": "AIza..."
+ }
+ }
+ },
+ "codex": {
+ "account": {
+ "appServer": "Server aplicație: {{state}}",
+ "connected": "Conectat",
+ "description": "Gestionează sesiunea locală a contului server-aplicație Codex care alimentează lansările native susținute de abonament.",
+ "loginInProgress": "Autentificare în curs",
+ "plan": "Plan: {{plan}}",
+ "reconnectRequired": "Reconectare necesară",
+ "title": "Cont ChatGPT",
+ "hints": {
+ "autoUsesApiKeyUntilChatgpt": "{{message}} Modul automat va continua să folosească cheia API detectată până când ChatGPT este conectat.",
+ "detectedApiKeyNeedsApiMode": "{{message}} Cheia API detectată este folosită doar după ce schimbi Codex în modul cheie API.",
+ "localArtifactsNoSession": "Codex CLI raportează în prezent niciun cont ChatGPT activ. Există date locale despre contul Codex, dar nu este selectată nicio sesiune gestionată activă. Limitele de utilizare apar aici doar după ce Codex CLI vede una.",
+ "noActiveAccount": "Codex CLI raportează în prezent niciun cont ChatGPT activ. Limitele de utilizare apar aici doar după ce Codex CLI vede unul.",
+ "reconnectBeforeUsage": "Codex are un cont ChatGPT selectat local, dar sesiunea curentă trebuie reconectată înainte ca limitele de utilizare să se poată încărca aici.",
+ "usageLimitsAfterReport": "Limitele de utilizare apar aici după ce Codex le raportează pentru contul ChatGPT conectat."
+ }
+ },
+ "install": {
+ "checking": "Se verifică",
+ "downloading": "Se descarcă",
+ "installCli": "Instalează Codex CLI",
+ "installing": "Se instalează",
+ "retryInstall": "Reîncearcă instalarea",
+ "title": "Instalează Codex CLI în datele aplicației"
+ },
+ "rateLimits": {
+ "credits": "Credite",
+ "creditsDescription": "Creditele sunt afișate separat de utilizarea abonamentului pe bază de fereastră și pot fi indisponibile pentru sesiunile ChatGPT susținute de plan.",
+ "noSecondaryWindow": "Codex nu a returnat o fereastră secundară pentru acest instantaneu de cont.",
+ "notReported": "Neraportat",
+ "primaryReset": "Resetare primară",
+ "primaryUsed": "Primar utilizat",
+ "primaryWindow": "Fereastră primară",
+ "remainingLeft": "{{value}} rămas",
+ "remainingUnknown": "Rămas necunoscut",
+ "secondaryReset": "Resetare secundară",
+ "secondaryUsed": "Secundar utilizat",
+ "secondaryWindow": "Fereastră secundară",
+ "usedQuotaNote": "Aceste procente arată cota utilizată, nu cota rămasă.",
+ "weeklyReset": "Resetare săptămânală",
+ "weeklyUsed": "Utilizat săptămânal",
+ "weeklyUsedOneWeek": "Utilizat săptămânal (1săpt)",
+ "weeklyWindow": "Fereastră săptămânală",
+ "secondaryFallback": "secundar",
+ "secondaryWindowNote": " Limitele săptămânale sunt afișate separat în fereastra {{window}}.",
+ "usageExplanationGeneric": "Arată cota utilizată, nu cota rămasă.",
+ "usageExplanationWindowOnly": "Arată cota utilizată în fereastra {{window}} curentă, nu cota rămasă.",
+ "usageExplanationWithRemaining": "{{used}} utilizat - aproximativ {{remaining}} rămas în fereastra {{window}} curentă."
+ }
+ },
+ "compatibleEndpoint": {
+ "authToken": "Token de autentificare",
+ "authTokenMissing": "Tokenul de autentificare nu este configurat.",
+ "baseUrl": "URL de bază",
+ "description": "Folosește un endpoint runtime local compatibil cu Anthropic.",
+ "keepSavedToken": "Lasă gol pentru a păstra tokenul salvat",
+ "title": "Endpoint local / compatibil",
+ "tokenStatus": "Token {{status}}",
+ "validation": {
+ "baseUrlRequired": "URL-ul de bază este necesar",
+ "firstPartyAnthropic": "Folosește Automat, Abonament sau cheie API pentru Anthropic de la prima parte",
+ "httpRequired": "URL-ul de bază trebuie să folosească http:// sau https://",
+ "invalidUrl": "URL invalid",
+ "noCredentials": "URL-ul de bază nu trebuie să includă credențiale"
+ },
+ "status": {
+ "endpointDisabledTokenKept": "Endpoint dezactivat. Tokenul salvat a fost păstrat.",
+ "endpointSaved": "Endpoint salvat",
+ "endpointSavedTokenMissing": "Endpoint salvat. Tokenul de autentificare nu este configurat."
+ }
+ },
+ "connection": {
+ "authenticationMethod": "Metodă de autentificare",
+ "descriptions": {
+ "anthropic": "Alege cum se autentifică sesiunile Anthropic lansate de aplicație.",
+ "codex": "Alege dacă Codex ar trebui să prefere abonamentul tău ChatGPT sau o cheie API când se lansează runtime-ul nativ.",
+ "gemini": "Configurează accesul API opțional. CLI SDK și ADC sunt în continuare descoperite automat.",
+ "opencode": "Autentificarea OpenCode și inventarul de furnizori sunt gestionate de runtime-ul OpenCode."
+ },
+ "method": "Metodă de conectare",
+ "mode": "Mod: {{mode}}",
+ "selected": "Selectat",
+ "switching": "Se comută...",
+ "title": "Conexiune"
+ },
+ "connectionCards": {
+ "apiKey": {
+ "title": "Cheie API"
+ },
+ "anthropic": {
+ "apiKeyDescription": "Folosește ANTHROPIC_API_KEY și facturarea API Anthropic.",
+ "autoDescription": "Folosește valorile implicite ale runtime-ului Anthropic și cea mai bună credențială locală disponibilă.",
+ "hint": "Modul automat menține Anthropic pe rezolvarea sa implicită a credențialelor locale.",
+ "subscriptionDescription": "Folosește sesiunea ta locală de autentificare Anthropic și accesul prin abonament.",
+ "subscriptionTitle": "Abonament Anthropic"
+ },
+ "auto": {
+ "title": "Automat"
+ },
+ "codex": {
+ "apiKeyDescription": "Folosește facturarea OPENAI_API_KEY și CODEX_API_KEY pentru lansările native Codex.",
+ "autoDescription": "Preferă contul și abonamentul tău ChatGPT. Folosește modul cheie API doar dacă este necesar.",
+ "chatgptDescription": "Folosește contul ChatGPT conectat și abonamentul Codex.",
+ "chatgptTitle": "Cont ChatGPT",
+ "hint": "Codex rulează întotdeauna prin runtime-ul nativ. Modul automat preferă contul tău ChatGPT înainte de a reveni la credențialele cu cheie API."
+ }
+ },
+ "description": "Gestionează cum se conectează fiecare furnizor și, când este compatibil, ce backend ar trebui să folosească runtime-ul multimodel.",
+ "fastMode": {
+ "defaultOff": "Dezactivat implicit",
+ "description": "Aplică modul Claude Code Fast în mod implicit pentru noile lansări de echipă Anthropic când modelul și runtime-ul rezolvate permit acest lucru.",
+ "disabledHint": "Noile lansări Anthropic rămân la viteză normală dacă o echipă nu activează explicit modul Fast.",
+ "enabledHint": "Noile lansări Anthropic vor solicita modul Fast în mod implicit când modelul rezolvat îl acceptă.",
+ "notExposed": "Acest runtime Anthropic nu expune modul Fast.",
+ "preferFast": "Preferă Fast",
+ "title": "Mod Fast implicit",
+ "unavailableForRuntime": "Modul Fast este în prezent indisponibil pentru acest runtime Anthropic."
+ },
+ "alerts": {
+ "anthropicApiKeyMissing": "Modul cheie API este selectat, dar nicio credențială API Anthropic nu este disponibilă încă.",
+ "anthropicStoredKeyAvailable": "O cheie API salvată este disponibilă, dar sesiunile Anthropic lansate de aplicație o folosesc doar după ce comuți în modul cheie API.",
+ "anthropicSubscriptionMissing": "Modul abonament Anthropic este selectat. Autentifică-te cu Anthropic pentru a folosi acest furnizor.",
+ "authTokenMissing": "Tokenul de autentificare nu este configurat. Multe endpoint-uri locale compatibile cu Anthropic necesită un token nevid.",
+ "chatgptLoginPending": "Se așteaptă finalizarea autentificării contului ChatGPT...",
+ "chatgptLoginStarting": "Se pornește autentificarea ChatGPT...",
+ "codexApiKeyMissing": "Modul cheie API este selectat, dar nicio credențială OPENAI_API_KEY sau CODEX_API_KEY nu este disponibilă încă.",
+ "codexLocalArtifactsNoSession": "Codex CLI nu are în prezent niciun cont ChatGPT activ. Există date locale despre contul Codex, dar nu este selectată nicio sesiune gestionată activă.",
+ "codexNeedsReconnect": "Codex are un cont ChatGPT selectat local, dar sesiunea curentă trebuie reconectată.",
+ "codexNoChatgptAccount": "Codex CLI nu are în prezent niciun cont ChatGPT activ. Conectează ChatGPT pentru a-ți folosi abonamentul.",
+ "codexNoCredential": "Niciun cont ChatGPT sau cheie API nu este disponibil încă.",
+ "geminiApiUnavailable": "API-ul Gemini este în prezent indisponibil. Configurează `GEMINI_API_KEY` aici sau folosește credențiale Google ADC valide.",
+ "withApiKeyFallback": "{{message}} Comută în modul cheie API pentru a folosi cheia API detectată."
+ },
+ "authModeDescriptions": {
+ "anthropic": {
+ "apiKey": "Forțează sesiunile Anthropic lansate de aplicație să folosească o credențială cu cheie API.",
+ "auto": "Folosește comportamentul implicit al runtime-ului. Cheile API salvate în această aplicație sunt folosite doar după ce comuți în modul cheie API.",
+ "oauth": "Forțează sesiunile Anthropic lansate de aplicație să folosească sesiunea locală de abonament Anthropic."
+ },
+ "codex": {
+ "apiKey": "Forțează lansările native Codex să folosească facturarea OPENAI_API_KEY / CODEX_API_KEY.",
+ "auto": "Preferă contul tău ChatGPT când este disponibil. Revino la modul cheie API doar când este necesar.",
+ "chatgpt": "Forțează lansările native Codex să folosească contul ChatGPT conectat și abonamentul."
+ }
+ },
+ "progress": {
+ "applyingConnectionChanges": "Se aplică modificările conexiunii...",
+ "refreshingProviderStatus": "Se reîmprospătează starea furnizorului...",
+ "savingCompatibleEndpoint": "Se salvează endpoint-ul compatibil...",
+ "switchingAnthropicSubscription": "Se comută la abonamentul Anthropic...",
+ "switchingApiKey": "Se comută la cheia API...",
+ "switchingApiKeyMode": "Se comută în modul cheie API...",
+ "switchingAuto": "Se comută la Automat...",
+ "switchingChatgpt": "Se comută în modul cont ChatGPT..."
+ },
+ "provider": "Furnizor",
+ "runtime": {
+ "descriptions": {
+ "anthropic": "Anthropic nu are în prezent un selector separat de backend runtime.",
+ "codex": "Codex rulează acum doar prin calea runtime nativă.",
+ "gemini": "Alege ce backend runtime Gemini ar trebui să folosească multimodel.",
+ "opencode": "OpenCode folosește propria gazdă runtime gestionată. Desktopul expune în prezent doar starea."
+ },
+ "title": "Runtime",
+ "updating": "Se actualizează runtime-ul..."
+ },
+ "runtimeSummary": "Runtime: {{runtime}}",
+ "status": {
+ "configured": "configurat",
+ "enabled": "Activat",
+ "notConfigured": "Neconfigurat",
+ "notSet": "nesetat",
+ "off": "Dezactivat",
+ "unknown": "Necunoscut"
+ },
+ "title": "Setări furnizor",
+ "usage": {
+ "apiKey": "Se folosește cheia API",
+ "apiKeyRequired": "Cheie API necesară",
+ "compatibleEndpoint": "Se folosește endpoint-ul compatibil",
+ "notConnected": "Neconectat",
+ "usingMethod": "Se folosește {{method}}"
+ },
+ "errors": {
+ "apiKeyDeletedRefreshFailed": "Cheie API ștearsă, dar reîmprospătarea stării furnizorului a eșuat.",
+ "apiKeySavedRefreshFailed": "Cheie API salvată, dar reîmprospătarea stării furnizorului a eșuat.",
+ "connectionUpdatedRefreshFailed": "Conexiune actualizată, dar reîmprospătarea stării furnizorului a eșuat.",
+ "deleteApiKey": "Ștergerea cheii API a eșuat",
+ "disableEndpoint": "Dezactivarea endpoint-ului a eșuat",
+ "endpointDisabledRefreshFailed": "Endpoint dezactivat, dar reîmprospătarea stării furnizorului a eșuat.",
+ "endpointSavedRefreshFailed": "Endpoint salvat, dar reîmprospătarea stării furnizorului a eșuat.",
+ "refreshCodexAccount": "Reîmprospătarea contului Codex a eșuat",
+ "saveApiKey": "Salvarea cheii API a eșuat",
+ "saveEndpoint": "Salvarea endpoint-ului a eșuat",
+ "updateAnthropicFastMode": "Actualizarea modului Fast Anthropic a eșuat",
+ "updateConnection": "Actualizarea conexiunii a eșuat",
+ "updateRuntimeBackend": "Actualizarea backend-ului runtime a eșuat",
+ "apiKeyRequired": "Cheia API este necesară"
+ },
+ "connectionUi": {
+ "authMode": {
+ "auto": "Automat",
+ "oauth": "Abonament / OAuth",
+ "chatgpt": "Cont ChatGPT",
+ "apiKey": "Cheie API",
+ "anthropicSubscription": "Abonament Anthropic"
+ },
+ "authMethod": {
+ "apiKey": "Cheie API",
+ "apiKeyHelper": "Ajutor cheie API",
+ "oauth": "OAuth",
+ "claudeSubscription": "Abonament Claude",
+ "geminiCli": "Gemini CLI",
+ "googleAccount": "Cont Google",
+ "serviceAccount": "cont de serviciu"
+ },
+ "runtime": {
+ "codexNative": "Codex nativ",
+ "currentRuntime": "Runtime curent",
+ "selectedRuntime": "Runtime selectat",
+ "summary": "{{prefix}}: {{runtime}}"
+ },
+ "status": {
+ "checking": "Se verifică...",
+ "modelsAvailable": "Modele disponibile",
+ "checked": "Verificat",
+ "providerActivity": "Activitate furnizor",
+ "notConnected": "Neconectat",
+ "startingChatGptLogin": "Se pornește autentificarea ChatGPT...",
+ "waitingForChatGptLogin": "Se așteaptă autentificarea contului ChatGPT...",
+ "chatGptVerificationDegraded": "Cont ChatGPT detectat - verificarea contului este în prezent degradată.",
+ "chatGptAccountReady": "Cont ChatGPT pregătit",
+ "apiKeyReady": "Cheie API pregătită",
+ "codexLocalAccountNeedsReconnect": "Codex are un cont ChatGPT selectat local, dar sesiunea curentă trebuie reconectată.",
+ "codexNoActiveManagedSession": "Codex CLI raportează nicio autentificare ChatGPT activă. Există date locale despre contul Codex, dar nu este selectată nicio sesiune gestionată activă.",
+ "codexNoActiveChatGptLogin": "Codex CLI raportează nicio autentificare ChatGPT activă",
+ "connectChatGptForSubscription": "Conectează un cont ChatGPT pentru a-ți folosi abonamentul Codex.",
+ "codexNativeReady": "Codex nativ pregătit",
+ "codexNativeUnavailable": "Codex nativ indisponibil",
+ "unavailableInCurrentRuntime": "Indisponibil în runtime-ul curent",
+ "connectedViaApiKey": "Conectat prin cheie API",
+ "apiKeyConfiguredNotVerified": "Cheie API configurată, dar neverificată încă",
+ "apiKeyModeMissingCredential": "Mod cheie API selectat, dar nicio cheie API nu este configurată",
+ "connectedVia": "Conectat prin {{method}}",
+ "unableToVerify": "Imposibil de verificat"
+ },
+ "mode": {
+ "selectedAuth": "Autentificare selectată: {{authMode}}",
+ "preferredAuth": "Autentificare preferată: {{authMode}}"
+ },
+ "credential": {
+ "apiKeyConfigured": "Cheia API este configurată",
+ "savedApiKeyAvailable": "Cheie API salvată disponibilă în Gestionează",
+ "apiKeyAlsoConfigured": "Cheie API configurată și în Gestionează",
+ "apiKeyConfiguredInManage": "Cheia API este configurată în Gestionează",
+ "apiKeyFallbackInManage": "Cheie API disponibilă și în Gestionează ca rezervă",
+ "availableAsFallback": "{{summary}} - disponibilă ca rezervă",
+ "savedApiKeyAvailableIfSwitch": "Cheie API salvată disponibilă în Gestionează dacă comuți în modul cheie API",
+ "availableIfSwitch": "{{summary}} - disponibilă dacă comuți în modul cheie API",
+ "autoWillUseUntilChatGpt": "{{summary}} - Modul automat o va folosi până când ChatGPT este conectat"
+ },
+ "actions": {
+ "connect": "Conectează",
+ "connectAnthropic": "Conectează Anthropic",
+ "connectChatGpt": "Conectează ChatGPT",
+ "disconnect": "Deconectează",
+ "openLogin": "Deschide autentificarea"
+ },
+ "disconnect": {
+ "anthropicTitle": "Deconectezi abonamentul Anthropic?",
+ "anthropic": "Aceasta elimină sesiunea locală de abonament Anthropic din runtime-ul Claude CLI.",
+ "anthropicWithApiKey": "Aceasta elimină sesiunea locală de abonament Anthropic din runtime-ul Claude CLI. Cheile API salvate în Gestionează rămân disponibile.",
+ "geminiTitle": "Deconectezi Gemini CLI?",
+ "gemini": "Aceasta șterge metadatele sesiunii locale Gemini CLI. Credențialele ADC externe și cheile API salvate nu sunt eliminate."
+ }
+ }
+ },
+ "cliRuntime": {
+ "actions": {
+ "checkForUpdates": "Verifică actualizările",
+ "checking": "Se verifică...",
+ "extensions": "Extensii",
+ "installRuntime": "Instalează {{runtime}}",
+ "manage": "Gestionează",
+ "recheck": "Reverifică",
+ "reinstallRuntime": "Reinstalează {{runtime}}",
+ "retry": "Reîncearcă",
+ "update": "Actualizează"
+ },
+ "installer": {
+ "checkingLatest": "Se verifică ultima versiune...",
+ "downloading": "Se descarcă...",
+ "failed": "Instalarea a eșuat",
+ "installed": "Instalat v{{version}}",
+ "installing": "Se instalează...",
+ "latest": "ultima",
+ "verifying": "Se verifică suma de control..."
+ },
+ "labels": {
+ "multimodel": "Multimodel"
+ },
+ "loading": {
+ "aiProviders": "Se verifică furnizorii AI...",
+ "claudeCli": "Se verifică Claude CLI..."
+ },
+ "provider": {
+ "backend": "Backend: {{backend}}",
+ "loadingModels": "Se încarcă modelele...",
+ "modelsUnavailable": "Modele indisponibile pentru această versiune de runtime",
+ "runtime": "Runtime: {{runtime}}"
+ },
+ "providerTerminal": {
+ "authFailed": "Autentificarea a eșuat",
+ "authUpdated": "Autentificare actualizată",
+ "loggedOut": "Furnizor deconectat",
+ "login": "Autentificare",
+ "logout": "Deconectare",
+ "logoutFailed": "Deconectarea a eșuat"
+ },
+ "status": {
+ "configuredNotFound": "{{runtime}} configurat nu a fost găsit.",
+ "foundButFailed": "{{runtime}} a fost găsit, dar pornirea a eșuat",
+ "healthCheckFailed": "{{runtime}} configurat nu a trecut verificarea de stare la pornire.",
+ "notInstalled": "{{runtime}} nu este instalat"
+ },
+ "title": "Runtime CLI"
+ },
+ "cliStatus": {
+ "versionUpgrade": "v{{current}} -> v{{latest}}"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ro/team.json b/src/features/localization/renderer/locales/ro/team.json
new file mode 100644
index 00000000..9bb2ec4a
--- /dev/null
+++ b/src/features/localization/renderer/locales/ro/team.json
@@ -0,0 +1,2487 @@
+{
+ "activity": {
+ "actions": {
+ "createTaskFromMessage": "Creează sarcină din mesaj",
+ "editMessage": "Editează mesajul",
+ "expandMessage": "Extinde mesajul",
+ "replyToMessage": "Răspunde la mesaj",
+ "restartTeam": "Repornește echipa"
+ },
+ "authError": {
+ "description": "Autentificarea a eșuat. Repornirea echipei va reîmprospăta sesiunea și poate rezolva această problemă. Dacă problema persistă, verifică credențialele API sau încearcă din nou mai târziu."
+ },
+ "automation": {
+ "reviewPickup": "I s-a cerut coechipierului să preia revizuirea",
+ "stallNudge": "I s-a cerut coechipierului să continue sarcina blocată",
+ "workSyncBody": "I s-a cerut coechipierului să sincronizeze munca curentă"
+ },
+ "badges": {
+ "automation": "automatizare",
+ "bootstrap": "inițializare",
+ "command": "comandă",
+ "comment": "Comentariu",
+ "live": "live",
+ "note": "notă",
+ "rateLimited": "Limită de utilizare atinsă",
+ "restart": "repornire",
+ "result": "rezultat",
+ "session": "sesiune",
+ "stallNudge": "memento blocaj",
+ "start": "pornire",
+ "workSync": "sincronizare muncă",
+ "agentError": "Eroare agent",
+ "apiError": "Eroare API"
+ },
+ "bootstrap": {
+ "acknowledged": "Inițializare confirmată",
+ "restarting": "Se repornește coechipierul",
+ "starting": "Se pornește coechipierul"
+ },
+ "rawJson": "JSON brut",
+ "unread": "Necitit",
+ "thoughts": {
+ "count": "{{count}} gânduri",
+ "count_one": "{{count}} gând",
+ "expand": "Extinde gândurile",
+ "showMore": "Arată mai mult",
+ "showLess": "Arată mai puțin",
+ "count_few": "{{count}} gânduri",
+ "count_many": "{{count}} gânduri",
+ "count_other": "{{count}} gânduri",
+ "toolSummary": "🔧 {{summary}}",
+ "titleForMember": "{{name}} - gânduri"
+ },
+ "timeline": {
+ "loadingMessages": "Se încarcă mesajele...",
+ "noMessages": "Niciun mesaj",
+ "emptyHint": "Trimite un mesaj unui membru pentru a vedea activitatea.",
+ "newSession": "Sesiune nouă",
+ "olderCount": "+{{count}} mai vechi",
+ "showMore": "Arată încă {{count}}",
+ "showAll": "Arată tot",
+ "olderCount_one": "+{{count}} mai vechi",
+ "olderCount_few": "+{{count}} mai vechi",
+ "olderCount_many": "+{{count}} mai vechi",
+ "olderCount_other": "+{{count}} mai vechi"
+ },
+ "pendingReplies": {
+ "title": "În așteptarea răspunsurilor",
+ "openMember": "Deschide membrul",
+ "messageSentAwaitingReply": "Mesaj trimis, se așteaptă răspunsul",
+ "awaitingReply": "se așteaptă răspunsul",
+ "externalTeam": "echipă externă",
+ "crossTeamAwaitingReply": "Mesaj între echipe trimis, se așteaptă răspunsul",
+ "user": "utilizator",
+ "awaitingApproval": "se așteaptă aprobarea"
+ },
+ "reply": {
+ "replyingTo": "Se răspunde la",
+ "action": "Răspunde"
+ },
+ "activeTasks": {
+ "inProgress": "În curs",
+ "expandInProgress": "Extinde cele în curs",
+ "collapseInProgress": "Restrânge cele în curs",
+ "reviewing": "revizuiește",
+ "workingOn": "lucrează la"
+ },
+ "expandDialog": {
+ "description": "Vizualizare extinsă a mesajului"
+ }
+ },
+ "create": {
+ "actions": {
+ "create": "Creează",
+ "creating": "Se creează...",
+ "openExisting": "Deschide o echipă existentă",
+ "skipPreflightAndCreate": "Omite verificarea preliminară și creează"
+ },
+ "conflict": {
+ "description": "Rularea a două echipe în același director este riscantă - pot intra în conflict editând aceleași fișiere. Ia în considerare folosirea unui director diferit sau a unui git worktree pentru izolare.",
+ "title": "O altă echipă \"{{team}}\" rulează deja pentru acest director de lucru",
+ "workingDirectory": "Director de lucru:"
+ },
+ "description": {
+ "copy": "Creează o echipă nouă pe baza uneia existente.",
+ "create": "Configurează-ți echipa și alege cum pornește."
+ },
+ "errors": {
+ "nameExists": "Numele echipei există deja",
+ "nameLaunching": "O echipă cu acest nume se lansează în prezent",
+ "createConfigFailed": "Crearea configurației echipei a eșuat",
+ "loadProjectsFailed": "Încărcarea proiectelor a eșuat"
+ },
+ "fields": {
+ "color": "Culoare (opțional)",
+ "description": "Descriere (opțional)",
+ "prompt": "Prompt pentru liderul echipei (opțional)",
+ "teamName": "Nume echipă"
+ },
+ "launchAfterCreate": {
+ "description": "Pornește echipa imediat prin Claude CLI local.",
+ "label": "Rulează comanda după creare"
+ },
+ "localOnly": "Disponibil doar în modul local Electron.",
+ "onDisk": "Pe disc:",
+ "placeholders": {
+ "description": "Descriere scurtă a scopului echipei",
+ "prompt": "Instrucțiuni pentru liderul echipei în timpul aprovizionării..."
+ },
+ "saved": "Salvat",
+ "solo": {
+ "description": "Va fi pornit doar liderul echipei (procesul principal) - niciun coechipier nu va fi creat. Funcționează ca o sesiune obișnuită de agent în runtime-ul ales (Claude Code, Codex, OpenCode, Gemini), dar cu acces la panoul de sarcini pentru planificare. Economisește tokenuri evitând costul de coordonare a coechipierilor. Poți adăuga membri mai târziu din setările echipei.",
+ "label": "Echipă solo"
+ },
+ "title": {
+ "copy": "Copiază echipa",
+ "create": "Creează echipă"
+ },
+ "optional": {
+ "launchSettingsTitle": "Setări opționale de lansare",
+ "launchSettingsDescription": "Promptul, siguranța și suprascrierile CLI se află aici când ai nevoie de ele.",
+ "teamDetailsTitle": "Detalii opționale ale echipei",
+ "teamDetailsDescription": "Menține fluxul implicit compact și deschide acest lucru doar când vrei context suplimentar sau o culoare personalizată."
+ },
+ "prepare": {
+ "unsupportedPreload": "Versiunea curentă de preload nu acceptă team:prepareProvisioning. Repornește aplicația de dezvoltare.",
+ "selectWorkingDirectory": "Selectează un director de lucru pentru a valida mediul de lansare.",
+ "someProvidersNeedAttention": "Unii furnizori selectați necesită atenție.",
+ "readyWithNotes": "Toți furnizorii selectați sunt pregătiți, cu observații.",
+ "ready": "Toți furnizorii selectați sunt pregătiți.",
+ "failed": "Pregătirea furnizorilor selectați a eșuat",
+ "checkingProviders": "Se verifică furnizorii selectați...",
+ "preparingEnvironment": "Se pregătește mediul...",
+ "selectedProvidersReadyWithNotes": "Furnizorii selectați sunt pregătiți (cu observații)",
+ "selectedProvidersReady": "Furnizorii selectați sunt pregătiți"
+ },
+ "validation": {
+ "nameMustContainLetterOrDigit": "Numele trebuie să conțină cel puțin o literă sau o cifră",
+ "nameTooLong": "Numele este prea lung (max 128 de caractere)",
+ "selectWorkingDirectory": "Selectează directorul de lucru (cwd)",
+ "memberNameRequired": "Numele membrului nu poate fi gol",
+ "memberNameInvalid": "Numele membrului trebuie să înceapă cu un caracter alfanumeric, să folosească doar [a-zA-Z0-9._-], max 128 de caractere",
+ "memberNamesUnique": "Numele membrilor trebuie să fie unice",
+ "openCodeLeadModelRequired": "Liderul OpenCode necesită un model selectat.",
+ "openCodeTeammateRequired": "Liderul OpenCode necesită cel puțin un coechipier OpenCode.",
+ "teamLaunching": "Echipa se lansează în prezent",
+ "teamNameExists": "Numele echipei există deja",
+ "checkFormFields": "Verifică câmpurile formularului"
+ }
+ },
+ "editTeam": {
+ "actions": {
+ "cancel": "Anulează",
+ "save": "Salvează"
+ },
+ "addMemberLockReason": "Folosește dialogul dedicat Adaugă membru pentru a adăuga coechipieri noi cât timp echipa este live.",
+ "description": "Schimbă numele, descrierea și culoarea echipei",
+ "errors": {
+ "changesSavedRefreshFailed": "Modificările echipei au fost salvate, dar reîmprospătarea celei mai recente vizualizări a eșuat: {{message}}",
+ "liveRenameBlocked": "Coechipierii existenți nu pot fi redenumiți cât timp echipa este live. redenumiți: {{names}}",
+ "memberNameEmpty": "Numele membrului nu poate fi gol",
+ "memberNameInvalid": "Numele membrului trebuie să înceapă cu un caracter alfanumeric, să folosească doar [a-zA-Z0-9._-], max 128 de caractere",
+ "memberNameNumericSuffix": "Numele membrului \"{{name}}\" nu este permis (rezervat pentru sufixul automat al Claude CLI). Folosește \"{{base}}\" în schimb.",
+ "memberNameReserved": "Numele membrului \"{{name}}\" este rezervat",
+ "memberNamesUnique": "Numele membrilor trebuie să fie unice înainte de salvare",
+ "newLiveTeammates": "Adaugă coechipieri noi din dialogul dedicat Adaugă membru cât timp echipa este live. Editează echipa acceptă doar actualizarea coechipierilor existenți.",
+ "provisioning": "Setările echipei nu pot fi editate cât timp aprovizionarea este încă în curs. Așteaptă finalizarea lansării, apoi încearcă din nou.",
+ "restartFailedMany": "Echipa a fost salvată, dar repornirea acestor coechipieri a eșuat: {{failures}}",
+ "restartFailedOne": "Echipa a fost salvată, dar repornirea acestui coechipier a eșuat: {{failures}}",
+ "saveFailed": "Salvarea a eșuat",
+ "settingsChanged": "Setările echipei s-au schimbat cât timp acest dialog era deschis. Redeschide-l și revizuiește cea mai recentă stare înainte de salvare.",
+ "settingsSavedMembersAndRefreshFailed": "Setările echipei au fost salvate, dar modificările membrilor au eșuat: {{message}}. Reîmprospătarea a eșuat și ea: {{refreshError}}",
+ "settingsSavedMembersFailed": "Setările echipei au fost salvate, dar modificările membrilor au eșuat: {{message}}",
+ "settingsSavedRefreshFailed": "Setările echipei au fost salvate, dar reîmprospătarea celei mai recente vizualizări a eșuat: {{message}}",
+ "teamNameEmpty": "Numele echipei nu poate fi gol",
+ "unsupportedMixedPrimaryMutation": "Editările live ale coechipierilor deținuți de procesul primar în echipele OpenCode mixte nu sunt încă acceptate. Oprește echipa, editează lista, apoi relansează. Afectați: {{names}}"
+ },
+ "fields": {
+ "colorOptional": "Culoare (opțional)",
+ "description": "Descriere",
+ "name": "Nume"
+ },
+ "memberRestartWarning": "Salvarea va reporni acest coechipier pentru a aplica modificările de rol, flux de lucru, izolare worktree, furnizor, model, efort sau acces MCP.",
+ "notices": {
+ "liveRenameBlocked": "Salvarea live este blocată deoarece coechipierii existenți au fost redenumiți. Anulează acele modificări de identitate sau oprește mai întâi echipa.",
+ "newLiveTeammates": "Coechipierii noi nu pot fi adăugați din Editează echipa cât timp echipa este live. Folosește în schimb dialogul Adaugă membru.",
+ "provisioning": "Aprovizionarea echipei este încă în curs. Editarea este blocată temporar până la finalizarea lansării.",
+ "restartMany": "Salvarea va reporni sau relansa acești coechipieri pentru a aplica modificările de rol, flux de lucru, izolare worktree, furnizor, model, efort sau acces MCP: {{names}}.",
+ "restartOne": "Salvarea va reporni sau relansa acest coechipier pentru a aplica modificările de rol, flux de lucru, izolare worktree, furnizor, model, efort sau acces MCP: {{names}}.",
+ "unsupportedMixedPrimaryMutation": "Editările/eliminările live pentru coechipierii deținuți de procesul primar în echipele OpenCode mixte necesită oprirea și relansarea echipei: {{names}}."
+ },
+ "placeholders": {
+ "description": "Descrierea echipei (opțional)",
+ "teamName": "Nume echipă"
+ },
+ "teamLead": {
+ "changeRuntime": "Schimbă runtime-ul liderului",
+ "changeRuntimeDescription": "Deschide Relansează echipa pentru a schimba furnizorul, modelul sau efortul liderului.",
+ "modelLockReason": "Runtime-ul liderului echipei este gestionat din Relansează echipa.",
+ "readOnlyHint": "Numele și rolul liderului echipei rămân doar pentru citire aici. Deschide panoul runtime din rândul liderului pentru a schimba furnizorul, modelul sau efortul.",
+ "role": "Lider echipă"
+ },
+ "title": "Editează echipa"
+ },
+ "memberDraft": {
+ "actions": {
+ "remove": "Elimină membrul",
+ "removeAria": "Elimină {{name}}",
+ "restore": "Restaurează membrul",
+ "restoreAria": "Restaurează {{name}}"
+ },
+ "anthropicContext": {
+ "defaultSetting": "setare implicită a contextului",
+ "description": "Contextul Anthropic este la nivelul întregii echipe pentru această lansare: {{mode}}. Folosește caseta Limitează contextul din panoul runtime al liderului pentru a-l schimba.",
+ "limitEnabled": "Limită de 200K activată"
+ },
+ "mcp": {
+ "buttonInherit": "Moștenire MCP",
+ "buttonScopes": "Domenii MCP",
+ "chooseScopes": "Alege domeniile",
+ "inheritLead": "Moștenește de la lider",
+ "lockedInfo": "Doar Agent Teams MCP este activat pentru toți coechipierii. Acest coechipier se va lansa doar cu serverul Agent Teams.",
+ "mode": "Mod MCP",
+ "scopes": {
+ "local": "local",
+ "project": "proiect",
+ "user": "utilizator"
+ },
+ "serverNames": "Nume servere",
+ "settingInfo": "Agent Teams MCP lansează acest coechipier doar cu serverul Agent Teams. Modurile de domeniu și listă de permisiuni se aplică doar acestei lansări de coechipier.",
+ "strictAllowlist": "Listă de permisiuni strictă",
+ "tooltip": "{{label}}: Controlează politica de moștenire MCP a acestui membru",
+ "agentTeamsMcp": "Agent Teams MCP"
+ },
+ "model": {
+ "ariaLabel": "Furnizor {{provider}}, {{model}}",
+ "currentLeadRuntime": "Runtime curent al liderului",
+ "default": "Implicit",
+ "inheritedTooltip": "Furnizorul, modelul și efortul sunt moștenite de la lider cât timp sincronizarea este activată.",
+ "leadSuffix": "{{label}} (lider)",
+ "liveDisabled": "Modificările de furnizor, model și efort sunt dezactivate cât timp echipa este live. Reconectează echipa pentru a le aplica în siguranță.",
+ "lockedActionFallback": "Modificările runtime-ului liderului deschid Relansează echipa, unde furnizorul, modelul și efortul pot fi actualizate.",
+ "restartWholeTeam": "Salvarea acelor modificări de runtime repornește întreaga echipă."
+ },
+ "nameAria": "Nume membru {{index}}",
+ "nameFallback": "membru {{index}}",
+ "noRole": "Niciun rol",
+ "removed": "Eliminat",
+ "workflow": {
+ "addTooltip": "Adaugă flux de lucru coechipier",
+ "editTooltip": "Editează fluxul de lucru al coechipierului",
+ "label": "Flux de lucru (opțional)",
+ "placeholder": "Cum ar trebui să se comporte acest agent, să interacționeze cu ceilalți...",
+ "saved": "Salvat"
+ },
+ "worktree": {
+ "description": "Rulează acest coechipier într-un git worktree separat. Aplicarea/respingerea modificărilor vizează acel worktree, nu spațiul de lucru al liderului.",
+ "label": "Worktree"
+ },
+ "addMembers": {
+ "title": "Adaugă membri",
+ "description": "Adaugă membri noi la {{teamName}}"
+ },
+ "placeholders": {
+ "name": "nume-membru",
+ "mcpServers": "github, sentry"
+ }
+ },
+ "detail": {
+ "actions": {
+ "add": "Adaugă",
+ "cancel": "Anulează",
+ "delete": "Șterge",
+ "editCode": "Editează codul",
+ "launch": "Lansează",
+ "remove": "Elimină",
+ "stop": "Oprește",
+ "task": "Sarcină",
+ "visualize": "Vizualizează"
+ },
+ "deleteTeam": {
+ "description": "Ștergi echipa \"{{team}}\"? Această acțiune este ireversibilă. Toate datele și sarcinile echipei vor fi șterse.",
+ "title": "Șterge echipa"
+ },
+ "draft": {
+ "descriptionPrefix": "Aceasta este o echipă în lucru -",
+ "descriptionSuffix": "a fost configurată cu {{count}} {{member}}, dar nu a fost încă aprovizionată de CLI. Apasă Lansează pentru a selecta un model și a porni echipa.",
+ "descriptionSuffix_few": "a fost configurată cu {{count}} {{member}}, dar nu a fost încă aprovizionată de CLI. Apasă Lansează pentru a selecta un model și a porni echipa.",
+ "descriptionSuffix_many": "a fost configurată cu {{count}} {{member}}, dar nu a fost încă aprovizionată de CLI. Apasă Lansează pentru a selecta un model și a porni echipa.",
+ "descriptionSuffix_one": "a fost configurată cu {{count}} {{member}}, dar nu a fost încă aprovizionată de CLI. Apasă Lansează pentru a selecta un model și a porni echipa.",
+ "descriptionSuffix_other": "a fost configurată cu {{count}} {{member}}, dar nu a fost încă aprovizionată de CLI. Apasă Lansează pentru a selecta un model și a porni echipa.",
+ "member": "membri",
+ "member_few": "membri",
+ "member_many": "membri",
+ "member_one": "membru",
+ "member_other": "membri",
+ "title": "Echipa nu a fost încă lansată"
+ },
+ "invalidTab": "Filă de echipă invalidă",
+ "kanbanSafeData": "Încărcarea completă a kanban-ului a eșuat. Se afișează date sigure.",
+ "loadFailed": "Încărcarea echipei a eșuat",
+ "loading": "Se încarcă echipa",
+ "loadingSidebar": "Se încarcă bara laterală a echipei",
+ "offline": {
+ "offline": "Echipa este deconectată",
+ "partialFailed": "Ultima lansare a eșuat parțial",
+ "partialMissing": "Ultima lansare a eșuat parțial - {{missing}}/{{expected}} coechipieri nu s-au alăturat",
+ "reconciling": "Ultima lansare încă se reconciliază"
+ },
+ "previous": "Anterior: {{paths}}",
+ "removeMember": {
+ "description": "Elimini \"{{member}}\" din echipă? Sarcinile și mesajele vor fi păstrate, dar acest nume nu poate fi reutilizat.",
+ "title": "Elimină membrul"
+ },
+ "sections": {
+ "team": "Echipă"
+ },
+ "solo": "Solo",
+ "status": {
+ "active": "Activă",
+ "launching": "Se lansează...",
+ "running": "În execuție"
+ },
+ "telemetry": {
+ "cpu": "CPU",
+ "memory": "Memorie"
+ },
+ "tooltips": {
+ "deleteTeam": "Șterge echipa",
+ "editTeam": "Editează echipa",
+ "editUnavailableProvisioning": "Editarea echipei este indisponibilă cât timp aprovizionarea este încă în curs",
+ "openBuiltInEditor": "Deschide proiectul în editorul integrat",
+ "openTeamGraph": "Deschide graficul echipei",
+ "stopTeam": "Oprește echipa"
+ },
+ "waitingForProvisioning": "Datele echipei vor apărea după finalizarea aprovizionării",
+ "context": {
+ "title": "Context",
+ "loading": "Se încarcă...",
+ "noSessionLoaded": "Nicio sesiune încărcată",
+ "closePanel": "Închide panoul de context {{team}}",
+ "loadingContext": "Se încarcă contextul...",
+ "openLeadSession": "Deschide sesiunea liderului echipei pentru a vedea contextul."
+ }
+ },
+ "review": {
+ "fileHeader": {
+ "actions": {
+ "accept": "Acceptă",
+ "discard": "Renunță",
+ "discardTooltip": "Renunță la toate editările pentru acest fișier",
+ "keepMyDraft": "Păstrează ciorna mea",
+ "reject": "Respinge",
+ "reloadFromDisk": "Reîncarcă de pe disc",
+ "restore": "Restaurează",
+ "restoreTooltip": "Creează/restaurează acest fișier pe disc din previzualizare",
+ "saveFile": "Salvează fișierul",
+ "saveFileTooltip": "Salvează fișierul pe disc"
+ },
+ "badges": {
+ "deleted": "ȘTERS",
+ "manualReview": "REVIZUIRE MANUALĂ",
+ "new": "NOU",
+ "worktree": "WORKTREE"
+ },
+ "contentSource": {
+ "disk-current": "Disc curent",
+ "file-history": "Istoric fișier",
+ "git-fallback": "Rezervă Git",
+ "ledger-exact": "Registru sarcină",
+ "ledger-snapshot": "Instantaneu registru",
+ "snippet-reconstruction": "Reconstruit",
+ "unavailable": "Conținut indisponibil"
+ },
+ "contentUnavailable": {
+ "badge": "Conținut indisponibil",
+ "description": "Registrul a înregistrat metadate pentru această modificare, dar conținutul text complet nu este disponibil. Aceasta înseamnă de obicei conținut binar, mare sau doar de tip hash.",
+ "safety": "Acceptarea/respingerea automată este dezactivată pentru acest fișier pentru a evita scrieri pe disc nesigure.",
+ "title": "Conținutul text este indisponibil"
+ },
+ "disabled": {
+ "acceptRejectContentUnavailable": "Acceptarea/respingerea este dezactivată deoarece conținutul text complet este indisponibil.",
+ "acceptRejectMissingOnDisk": "Acceptarea/respingerea este dezactivată cât timp fișierul lipsește de pe disc.",
+ "rejectBaselineUnavailable": "Respingerea este dezactivată deoarece linia de bază originală este indisponibilă.",
+ "rejectContentUnavailable": "Respingerea este dezactivată deoarece conținutul text complet este indisponibil.",
+ "rejectManualLedgerReview": "Respingerea este dezactivată deoarece această modificare din registru are conținut binar, mare sau indisponibil."
+ },
+ "externalChange": {
+ "changedOnDisk": "Modificat pe disc",
+ "deletedOnDisk": "Șters de pe disc",
+ "recreatedOnDisk": "Recreat pe disc"
+ },
+ "missingOnDisk": {
+ "badge": "Lipsește de pe disc",
+ "description": "Putem totuși afișa o previzualizare din jurnalele agentului, dar sistemul tău de fișiere este desincronizat.",
+ "restorePrefix": "Folosește",
+ "restoreSuffix": "pentru a scrie conținutul previzualizării înapoi pe disc.",
+ "restoreUnavailable": "Conținutul complet al fișierului nu este disponibil pentru restaurare automată.",
+ "title": "Fișierul lipsește de pe disc"
+ },
+ "pathChange": {
+ "from": "De la {{path}}",
+ "to": "La {{path}}"
+ },
+ "worktree": {
+ "isolated": "Worktree izolat"
+ }
+ },
+ "toolbar": {
+ "stats": {
+ "pending": "{{count}} în așteptare",
+ "pending_one": "{{count}} în așteptare",
+ "pending_other": "{{count}} în așteptare",
+ "accepted": "{{count}} acceptate",
+ "accepted_one": "{{count}} acceptată",
+ "accepted_other": "{{count}} acceptate",
+ "rejected": "{{count}} respinse",
+ "rejected_one": "{{count}} respinsă",
+ "rejected_other": "{{count}} respinse",
+ "acrossFiles": "în {{count}} fișiere",
+ "acrossFiles_one": "în {{count}} fișier",
+ "acrossFiles_other": "în {{count}} fișiere",
+ "edited": "{{count}} editate",
+ "edited_one": "{{count}} editată",
+ "edited_other": "{{count}} editate",
+ "pending_few": "{{count}} în așteptare",
+ "pending_many": "{{count}} în așteptare",
+ "accepted_few": "{{count}} acceptate",
+ "accepted_many": "{{count}} acceptate",
+ "rejected_few": "{{count}} respinse",
+ "rejected_many": "{{count}} respinse",
+ "acrossFiles_few": "în {{count}} fișiere",
+ "acrossFiles_many": "în {{count}} fișiere",
+ "edited_few": "{{count}} editate",
+ "edited_many": "{{count}} editate"
+ },
+ "actions": {
+ "auto": "Automat",
+ "undo": "Anulează",
+ "acceptAll": "Acceptă tot",
+ "rejectAll": "Respinge tot",
+ "applying": "Se aplică...",
+ "applyRejections": "Aplică respingerile"
+ },
+ "tooltips": {
+ "autoOn": "Marchează automat fișierele ca vizualizate la derularea până la final (ACTIVAT)",
+ "autoOff": "Marchează automat fișierele ca vizualizate la derularea până la final (DEZACTIVAT)",
+ "undo": "Anulează ultima operație de revizuire (Ctrl+Z)",
+ "acceptAll": "Acceptă toate modificările din toate fișierele",
+ "rejectAll": "Respinge toate modificările care pot fi respinse în siguranță din toate fișierele",
+ "rejectAllDisabled": "Niciun fișier în așteptare nu are o linie de bază originală sigură de respins.",
+ "applyRejections": "Aplică fragmentele respinse pe disc; modificările acceptate sunt păstrate ca atare"
+ }
+ },
+ "diffError": {
+ "title": "Randarea vizualizării diff a eșuat",
+ "unexpected": "A apărut o eroare neașteptată la randarea diff-ului.",
+ "actions": {
+ "retry": "Reîncearcă"
+ },
+ "raw": {
+ "show": "Arată datele brute ale diff-ului",
+ "file": "Fișier: {{file}}",
+ "original": "--- Original",
+ "modified": "+++ Modificat",
+ "charsTotal": "... ({{count}} caractere în total)",
+ "charsTotal_one": "... ({{count}} caracter în total)",
+ "charsTotal_other": "... ({{count}} caractere în total)",
+ "charsTotal_few": "... ({{count}} caractere în total)",
+ "charsTotal_many": "... ({{count}} caractere în total)"
+ }
+ },
+ "fileTree": {
+ "viewed": "Vizualizat",
+ "badges": {
+ "new": "nou",
+ "deleted": "șters"
+ },
+ "collapseFolder": "Restrânge {{name}}",
+ "expandFolder": "Extinde {{name}}",
+ "empty": {
+ "noChangedFiles": "Niciun fișier modificat",
+ "noMatchingFiles": "Niciun fișier corespunzător"
+ },
+ "searchPlaceholder": "Caută fișiere…",
+ "filters": {
+ "unresolved": "Nerezolvate",
+ "rejected": "Respinse",
+ "new": "Noi",
+ "clear": "Șterge"
+ }
+ },
+ "diffControls": {
+ "previousChunk": "Bloc anterior",
+ "nextChunk": "Bloc următor",
+ "rejectChange": "Respinge modificarea (⌘N)",
+ "acceptChange": "Acceptă modificarea (⌘Y)",
+ "undo": "Anulează",
+ "keep": "Păstrează",
+ "rejectShortcut": "⌘N",
+ "acceptShortcut": "⌘Y"
+ },
+ "conflict": {
+ "title": "Conflict detectat",
+ "description": "Acest fișier a fost modificat de la modificările agentului",
+ "cancel": "Anulează",
+ "saveResolution": "Salvează rezolvarea",
+ "editManually": "Editează manual",
+ "useOriginal": "Folosește originalul",
+ "keepCurrent": "Păstrează versiunea curentă"
+ },
+ "fullDiffLoading": {
+ "titleOne": "Se pregătește diff-ul complet",
+ "titleMany": "Se pregătesc {{count}} diff-uri complete",
+ "subtitleForFile": "Se finalizează diff-ul exact al editorului pentru {{file}}.",
+ "subtitleCurrentFile": "Se finalizează diff-ul exact al editorului pentru fișierul curent.",
+ "subtitleMany": "Se rezolvă liniile de bază exacte înainte/după pentru fișierele care se încarcă în prezent.",
+ "previewsReady": "{{count}} previzualizări pregătite",
+ "previewsReady_one": "{{count}} previzualizare pregătită",
+ "editorViewLoading": "Se încarcă vizualizarea editorului",
+ "filesInProgress": "{{count}} fișiere în curs",
+ "filesInProgress_one": "{{count}} fișier în curs",
+ "filesReady": "{{ready}}/{{total}} fișiere pregătite",
+ "progressDescription": "{{ready}} pregătite, {{loading}} încă se încarcă. Diff-urile de previzualizare rămân vizibile mai jos cât timp liniile de bază rămase sunt rezolvate.",
+ "singleDescription": "Diff-urile de previzualizare rămân vizibile mai jos cât timp linia de bază exactă este rezolvată.",
+ "previewsReady_few": "{{count}} previzualizări pregătite",
+ "previewsReady_many": "{{count}} previzualizări pregătite",
+ "previewsReady_other": "{{count}} previzualizări pregătite",
+ "filesInProgress_few": "{{count}} fișiere în curs",
+ "filesInProgress_many": "{{count}} fișiere în curs",
+ "filesInProgress_other": "{{count}} fișiere în curs"
+ },
+ "fileMissingPrefix": "Fișierul lipsește de pe disc. Acest diff poate fi doar o previzualizare din jurnalele agentului. Folosește",
+ "restore": "Restaurează",
+ "fileMissingSuffix": "pentru a crea fișierul pe disc.",
+ "filePlaceholder": {
+ "loading": "Se încarcă",
+ "description": "Se pregătește un diff complet al editorului pentru acest fișier."
+ },
+ "loading": {
+ "diff": "DIFF",
+ "ledgerObjectsProcessed": "{{count}} obiecte din registru procesate",
+ "ledgerObjectsProcessed_one": "{{count}} obiect din registru procesat",
+ "ledgerObjectsProcessed_other": "{{count}} obiecte din registru procesate",
+ "ledgerObjectsProcessed_few": "{{count}} obiecte din registru procesate",
+ "ledgerObjectsProcessed_many": "{{count}} obiecte din registru procesate",
+ "phases": {
+ "readingLedger": "Se citește registrul sarcinilor...",
+ "resolvingFiles": "Se rezolvă stările fișierelor...",
+ "checkingWorktree": "Se verifică contextul worktree...",
+ "preparingDiffs": "Se pregătesc diff-urile de revizuire..."
+ }
+ },
+ "progress": {
+ "viewed": "{{viewed}}/{{total}} vizualizate"
+ },
+ "scope": {
+ "readMore": "Citește mai mult",
+ "tiers": {
+ "exact": {
+ "title": "Domeniul sarcinii determinat precis",
+ "detail": "Atât marcajul de început, cât și cel de finalizare au fost găsite în jurnalul sesiunii. Diff-ul include doar modificările făcute în timpul acestei sarcini specifice - alte sarcini care au modificat aceleași fișiere sunt excluse."
+ },
+ "endEstimated": {
+ "title": "Limita de sfârșit estimată",
+ "detail": "A fost găsit doar marcajul de început - sarcina nu are încă un marcaj de finalizare. Modificările afișate de la începutul sarcinii până la sfârșitul sesiunii. Dacă alte sarcini au rulat după aceasta în aceeași sesiune, modificările lor pot fi de asemenea incluse."
+ },
+ "startEstimated": {
+ "title": "Limita de început estimată",
+ "detail": "A fost găsit doar marcajul de finalizare - începutul muncii nu a fost capturat. Dacă alte sarcini au rulat înaintea acesteia în aceeași sesiune, modificările lor asupra acelorași fișiere pot fi de asemenea incluse."
+ },
+ "allSession": {
+ "title": "Se afișează toate modificările sesiunii",
+ "detail": "Niciun marcaj de sarcină nu a fost găsit în jurnalul sesiunii. Această sarcină nu poate fi izolată - sunt afișate toate modificările de fișiere din întreaga sesiune, inclusiv modificările din alte sarcini. Acest lucru se poate întâmpla cu versiuni mai vechi de CLI sau fluxuri de lucru nestandard."
+ }
+ },
+ "ledger": {
+ "exact": {
+ "title": "Modificări capturate de registrul sarcinilor",
+ "detail": "Orchestratorul a capturat aceste modificări de fișiere cât timp agentul lucra la această sarcină.",
+ "badge": "Registru exact"
+ },
+ "limited": {
+ "title": "Modificări capturate cu posibilitate limitată de revizuire",
+ "detail": "Orchestratorul a capturat aceste modificări de fișiere pentru această sarcină, dar cel puțin o modificare a fost capturată dintr-un instantaneu sau o sursă doar cu metadate. Revizuiește diff-urile de text exacte acolo unde sunt disponibile; conținutul binar sau indisponibil poate necesita revizuire manuală.",
+ "mixedBadge": "Posibilitate mixtă de revizuire",
+ "needsReviewBadge": "Necesită revizuire"
+ }
+ },
+ "workInterval": {
+ "title": "Delimitat după intervalul de lucru persistat",
+ "detail": "Marcajul de început al sarcinii nu a fost disponibil în jurnalul sesiunii, așa că diff-ul este delimitat după intervalul de lucru al sarcinii stocat pe panou.",
+ "badge": "Delimitat după interval"
+ },
+ "confidence": {
+ "high": "Încredere ridicată",
+ "medium": "Încredere medie",
+ "low": "Încredere scăzută",
+ "bestEffort": "Cea mai bună estimare"
+ }
+ },
+ "shortcuts": {
+ "title": "Scurtături de tastatură",
+ "actions": {
+ "nextChange": "Modificarea următoare",
+ "previousChange": "Modificarea anterioară",
+ "nextFile": "Fișierul următor",
+ "previousFile": "Fișierul anterior",
+ "acceptChange": "Acceptă modificarea",
+ "rejectChange": "Respinge modificarea",
+ "saveFile": "Salvează fișierul",
+ "undo": "Anulează",
+ "redo": "Refă",
+ "toggleShortcuts": "Comută scurtăturile",
+ "closeDialog": "Închide dialogul"
+ }
+ },
+ "timeline": {
+ "empty": "Niciun eveniment de editare",
+ "titleWithCount": "Cronologie editări ({{count}})"
+ },
+ "continuousScroll": {
+ "empty": "Nicio modificare de fișier revizuibilă"
+ },
+ "empty": {
+ "noSafeDiff": "Niciun diff sigur disponibil",
+ "noFileChangesRecorded": "Nicio modificare de fișier înregistrată",
+ "noSafeDiffDescription": "Registrul sarcinilor nu a expus un diff sigur de fișier pentru această sarcină.",
+ "noSafeDiffDiagnosticsDescription": "Registrul sarcinilor nu a expus un diff sigur de fișier pentru această sarcină. Diagnosticele de mai jos explică de ce.",
+ "noFileEventsYet": "Registrul sarcinilor nu are încă evenimente de fișier pentru această sarcină.",
+ "noFileEvents": "Registrul sarcinilor nu are evenimente de fișier pentru această sarcină."
+ }
+ },
+ "messages": {
+ "actions": {
+ "bottomSheetActions": "Acțiuni panou inferior pentru mesaje",
+ "collapseAll": "Restrânge toate mesajele",
+ "collapseSheet": "Restrânge panoul",
+ "expandAll": "Extinde toate mesajele",
+ "expandSheet": "Extinde panoul",
+ "floatComposer": "Detașează compozitorul",
+ "floatMessagesComposer": "Detașează compozitorul de mesaje",
+ "hideSearch": "Ascunde căutarea",
+ "loadOlder": "Încarcă mesaje mai vechi",
+ "markAllRead": "Marchează toate ca citite",
+ "messageActions": "Acțiuni mesaj",
+ "moveMessagesToBottomSheet": "Mută mesajele în panoul inferior",
+ "moveMessagesToSidebar": "Mută mesajele în bara laterală",
+ "moveToBottomSheet": "Mută în panoul inferior",
+ "moveToInline": "Mută în linie",
+ "moveToSidebar": "Mută în bara laterală",
+ "panelActions": "Acțiuni panou de mesaje",
+ "searchMessages": "Caută mesaje"
+ },
+ "delivery": {
+ "copied": "Copiat",
+ "copyDebugDetails": "Copiază detaliile de depanare",
+ "details": "Detalii",
+ "fields": {
+ "acceptanceUnknown": "acceptanceUnknown",
+ "delivered": "delivered",
+ "diagnostics": "diagnostics",
+ "ledgerStatus": "ledgerStatus",
+ "messageId": "messageId",
+ "providerId": "providerId",
+ "queuedBehindMessageId": "queuedBehindMessageId",
+ "reason": "reason",
+ "responsePending": "responsePending",
+ "responseState": "responseState",
+ "statusMessageId": "statusMessageId",
+ "userVisibleMessage": "userVisibleMessage",
+ "userVisibleNextReviewAt": "userVisibleNextReviewAt",
+ "userVisibleReasonCode": "userVisibleReasonCode",
+ "userVisibleState": "userVisibleState",
+ "visibleReplyCorrelation": "visibleReplyCorrelation",
+ "visibleReplyMessageId": "visibleReplyMessageId"
+ }
+ },
+ "panelMode": "Mod panou de mesaje",
+ "title": "Mesaje",
+ "unread": {
+ "new": "{{count}} noi",
+ "unread": "{{count}} necitite",
+ "new_few": "{{count}} noi",
+ "new_many": "{{count}} noi",
+ "new_one": "{{count}} nou",
+ "new_other": "{{count}} noi",
+ "unread_few": "{{count}} necitite",
+ "unread_many": "{{count}} necitite",
+ "unread_one": "{{count}} necitit",
+ "unread_other": "{{count}} necitite"
+ },
+ "filter": {
+ "ariaLabel": "Filtrează mesajele",
+ "tooltip": "Filtrează mesajele",
+ "from": "De la",
+ "to": "Către",
+ "noData": "Niciun date",
+ "showStatusUpdates": "Arată actualizările de stare (inactiv/oprire)",
+ "actions": {
+ "reset": "Resetează",
+ "save": "Salvează"
+ }
+ },
+ "status": {
+ "title": "Stare"
+ },
+ "actionMode": {
+ "label": "Mod acțiune"
+ },
+ "search": {
+ "placeholder": "Caută..."
+ }
+ },
+ "modelSelector": {
+ "badges": {
+ "configured": "Configurat",
+ "connected": "Conectat",
+ "failed": "Eșuat",
+ "free": "Gratuit",
+ "local": "Local",
+ "needsTest": "Necesită test",
+ "verified": "Verificat",
+ "unavailable": "Indisponibil",
+ "issue": "Problemă"
+ },
+ "customModelId": "ID model personalizat",
+ "label": "Model (opțional)",
+ "multimodelRequired": "Codex și Gemini necesită modul Multimodel.",
+ "openCode": {
+ "allSources": "Toate sursele OpenCode",
+ "filterSource": "Filtrează {{source}}",
+ "filterSources": "Filtrează sursele OpenCode",
+ "freeOnly": "Doar gratuite",
+ "freeTooltip": "OpenCode marchează acest model ca gratuit.",
+ "loadingModels": "Se încarcă modelele OpenCode...",
+ "noSourcesFound": "Nicio sursă găsită.",
+ "recommendedOnly": "Doar recomandate",
+ "searchSources": "Caută surse",
+ "sourcesCount": "{{count}} surse OpenCode",
+ "sourcesCount_few": "{{count}} surse OpenCode",
+ "sourcesCount_many": "{{count}} surse OpenCode",
+ "sourcesCount_one": "{{count}} sursă OpenCode",
+ "sourcesCount_other": "{{count}} surse OpenCode"
+ },
+ "reason": "Motiv: {{reason}}",
+ "runtimeModelsSyncing": "Modelele explicite se încarcă din runtime-ul curent. Implicitul rămâne disponibil cât timp lista se sincronizează.",
+ "fastMode": {
+ "codexLabel": "Mod Fast (2x credite)",
+ "optionalLabel": "Mod Fast (opțional)",
+ "defaultOff": "Implicit (Dezactivat)",
+ "fast": "Fast",
+ "off": "Dezactivat",
+ "defaultFast": "Implicit (Fast)",
+ "defaultResolvesTo": "Implicitul se rezolvă în prezent la {{mode}}.",
+ "runtimeBackedHint": "Modul Fast este susținut de runtime și se deblochează doar când modelul de lansare Anthropic rezolvat îl acceptă."
+ },
+ "anthropicExtraUsage": {
+ "pricingDocs": "Citește documentația de prețuri Anthropic"
+ },
+ "searchModels": "Caută modele",
+ "defaultModel": "Implicit",
+ "empty": {
+ "noSearchMatches": "Niciun model nu corespunde acestei căutări.",
+ "recommendedFreeOpenCode": "Niciun model OpenCode gratuit recomandat nu este disponibil în lista runtime-ului curent.",
+ "freeOpenCode": "Niciun model OpenCode gratuit nu este disponibil în lista runtime-ului curent.",
+ "recommendedOpenCode": "Niciun model OpenCode recomandat nu este disponibil în lista runtime-ului curent.",
+ "noModels": "Niciun model nu este disponibil în lista runtime-ului curent."
+ },
+ "openCodeStatus": {
+ "notReadyTitle": "OpenCode nu este pregătit pentru lansarea echipei",
+ "freeModelsAvailableTitle": "Modelele gratuite OpenCode sunt disponibile",
+ "providerNotConnectedTitle": "Furnizorul OpenCode nu este conectat",
+ "readyTitle": "OpenCode este pregătit",
+ "readyMessage": "OpenCode a trecut verificarea de pregătire a furnizorului. Selectează-l pentru a folosi modele OpenCode pentru această echipă.",
+ "useOpenCode": "Folosește OpenCode",
+ "badges": {
+ "check": "Verifică",
+ "install": "Instalează",
+ "free": "Gratuit",
+ "setup": "Configurare"
+ },
+ "summary": {
+ "checking": "Stare OpenCode: se verifică runtime-ul",
+ "status": "Stare OpenCode: {{parts}}"
+ },
+ "summaryParts": {
+ "teamLaunchBlocked": "lansarea echipei blocată",
+ "providerOptional": "conectarea furnizorului opțională",
+ "providerModelsNeedSetup": "modelele susținute de furnizor necesită configurare",
+ "teamLaunchReady": "lansarea echipei pregătită",
+ "runtimeDetected": "runtime detectat",
+ "runtimeMissing": "runtime lipsă",
+ "freeWithoutAuth": "modele gratuite disponibile fără autentificare",
+ "providerConnected": "furnizor conectat",
+ "providerNotConnected": "furnizor neconectat"
+ },
+ "messages": {
+ "checking": "Aplicația încă verifică runtime-ul OpenCode. Așteaptă finalizarea stării furnizorului, apoi încearcă din nou.",
+ "unsupported": "OpenCode nu este instalat, nu a fost găsit sau runtime-ul detectat nu este acceptat. Instalează sau actualizează OpenCode, apoi reîmprospătează starea furnizorului. Poți folosi și butonul Instalează de pe pagina principală.",
+ "freeAvailable": "OpenCode este detectat. Poți folosi modele OpenCode gratuite precum Big Pickle fără a conecta un furnizor. Conectează un furnizor doar când vrei modele susținute de furnizor.",
+ "noFreeListed": "OpenCode este detectat, dar niciun model OpenCode gratuit nu este încă listat. Reîmprospătează starea furnizorului sau conectează un furnizor în OpenCode pentru modele susținute de furnizor.",
+ "launchBlocked": "OpenCode este instalat și autentificat, dar pregătirea pentru lansarea Agent Teams este blocată.",
+ "ready": "OpenCode este pregătit pentru lansarea echipei."
+ },
+ "loadingRuntime": "Starea runtime-ului OpenCode încă se încarcă."
+ },
+ "advisory": {
+ "pingNotConfirmed": "Ping neconfirmat",
+ "note": "Notă"
+ },
+ "placeholders": {
+ "customModelId": "openai/gpt-oss-20b"
+ },
+ "routeGroups": {
+ "openCodeConfig": "Configurație OpenCode",
+ "builtinFree": "Gratuit încorporat",
+ "connectedProviders": "Furnizori conectați",
+ "otherCatalog": "Alt catalog OpenCode"
+ },
+ "pricing": {
+ "free": "Gratuit",
+ "inputShort": "intrare {{rate}}",
+ "outputShort": "ieșire {{rate}}",
+ "perMillionSummary": "{{summary}} / 1M",
+ "inputTitle": "Intrare: {{rate}} per 1M tokenuri",
+ "outputTitle": "Ieșire: {{rate}} per 1M tokenuri",
+ "cacheReadTitle": "Citire cache: {{rate}} per 1M tokenuri",
+ "cacheWriteTitle": "Scriere cache: {{rate}} per 1M tokenuri"
+ },
+ "defaultTooltip": {
+ "anthropicCompatibleWithResolved": "Folosește modelul implicit al endpoint-ului compatibil cu Anthropic.\nÎn prezent se rezolvă la {{model}}.",
+ "anthropicCompatible": "Folosește modelul implicit al endpoint-ului compatibil cu Anthropic.",
+ "anthropic": "Folosește modelul implicit al echipei Claude.\nSe rezolvă la {{longContextModel}} cu context de 1M sau {{limitedContextModel}} cu context de 200K când Limitează contextul este activat.",
+ "openCodeWithResolved": "Folosește modelul implicit OpenCode.\nÎn prezent se rezolvă la {{model}}.",
+ "openCode": "Folosește modelul implicit al runtime-ului OpenCode.",
+ "runtime": "Folosește valoarea implicită a runtime-ului pentru furnizorul selectat."
+ },
+ "multimodelOff": "Multimodel dezactivat",
+ "unavailableInRuntime": "Indisponibil în runtime-ul curent"
+ },
+ "taskDetail": {
+ "actions": {
+ "cancel": "Anulează",
+ "delete": "Șterge",
+ "markResolved": "Marchează ca rezolvată",
+ "save": "Salvează"
+ },
+ "attachments": {
+ "commentAttachment": "Atașament comentariu",
+ "fromComments": "Din comentarii",
+ "preview": "Previzualizează {{filename}}"
+ },
+ "changes": {
+ "badges": {
+ "attention": "atenție",
+ "noSafeDiff": "niciun diff sigur"
+ },
+ "empty": {
+ "noFileChangesRecorded": "Nicio modificare de fișier înregistrată",
+ "noFileChangesRecordedYet": "Nicio modificare de fișier înregistrată încă",
+ "noReviewableChangesRecovered": "Nicio modificare de fișier revizuibilă recuperată",
+ "noSafeDiffAvailable": "Niciun diff sigur disponibil"
+ },
+ "loadFailed": "Încărcarea rezumatului modificărilor sarcinii a eșuat",
+ "loading": "Se încarcă modificările...",
+ "fileCount": "{{count}} fișiere",
+ "fileRowsHidden": "{{count}} rânduri de fișiere ascunse",
+ "moreDiagnostics": "încă {{count}} diagnostice",
+ "moreFiles": "încă {{count}} fișiere",
+ "openInEditor": "Deschide în editor",
+ "openTask": "Deschide sarcina {{subject}}",
+ "refresh": "Reîmprospătează modificările",
+ "refreshFailed": "Reîmprospătarea a eșuat: {{error}}",
+ "refreshing": "Se reîmprospătează",
+ "refreshingChanges": "Se reîmprospătează modificările...",
+ "refreshTeamChanges": "Reîmprospătează modificările echipei",
+ "refreshShort": "Reîmprospătează",
+ "reviewDiff": "Revizuiește diff-ul",
+ "reviewTaskDiff": "Revizuiește diff-ul sarcinii",
+ "scannedCandidateTasks": "S-au scanat {{requested}} din {{eligible}} sarcini candidate",
+ "tasksDeferred": "{{count}} sarcini amânate în acest pas",
+ "title": "Modificări",
+ "fileCount_few": "{{count}} fișiere",
+ "fileCount_many": "{{count}} fișiere",
+ "fileCount_one": "{{count}} fișier",
+ "fileCount_other": "{{count}} fișiere",
+ "fileRowsHidden_few": "{{count}} rânduri de fișiere ascunse",
+ "fileRowsHidden_many": "{{count}} rânduri de fișiere ascunse",
+ "fileRowsHidden_one": "{{count}} rând de fișier ascuns",
+ "fileRowsHidden_other": "{{count}} rânduri de fișiere ascunse",
+ "moreDiagnostics_few": "încă {{count}} diagnostice",
+ "moreDiagnostics_many": "încă {{count}} diagnostice",
+ "moreDiagnostics_one": "încă {{count}} diagnostic",
+ "moreDiagnostics_other": "încă {{count}} diagnostice",
+ "moreFiles_few": "încă {{count}} fișiere",
+ "moreFiles_many": "încă {{count}} fișiere",
+ "moreFiles_one": "încă {{count}} fișier",
+ "moreFiles_other": "încă {{count}} fișiere",
+ "tasksDeferred_few": "{{count}} sarcini amânate în acest pas",
+ "tasksDeferred_many": "{{count}} sarcini amânate în acest pas",
+ "tasksDeferred_one": "{{count}} sarcină amânată în acest pas",
+ "tasksDeferred_other": "{{count}} sarcini amânate în acest pas"
+ },
+ "clarification": {
+ "awaitingLead": "Se așteaptă clarificarea de la liderul echipei",
+ "awaitingUser": "Se așteaptă clarificarea de la tine"
+ },
+ "description": {
+ "add": "Apasă pentru a adăuga descriere...",
+ "edit": "Editează descrierea",
+ "placeholder": "Descrierea sarcinii (acceptă markdown)"
+ },
+ "loading": {
+ "fetchingTeamData": "Se preiau datele echipei",
+ "title": "Se încarcă sarcina..."
+ },
+ "logs": {
+ "newArriving": "Sosesc jurnale noi de sarcină"
+ },
+ "notFound": "Sarcina nu a fost găsită",
+ "related": {
+ "blockedBy": "Blocată de",
+ "blocks": "Blochează",
+ "linkedFrom": "Legată de la",
+ "links": "Legături",
+ "title": "Sarcini conexe"
+ },
+ "review": {
+ "reviewer": "Recenzent: {{reviewer}}"
+ },
+ "sections": {
+ "attachments": "Atașamente",
+ "changes": "Modificări",
+ "comments": "Comentarii",
+ "description": "Descriere",
+ "taskLogs": "Jurnale sarcină",
+ "workflowHistory": "Istoric flux de lucru"
+ },
+ "unassigned": "Neatribuit",
+ "workflow": {
+ "implementationTimeTitle": "Timp de implementare din intervalele de lucru persistate",
+ "inProgressTime": "Timp în curs {{duration}}"
+ },
+ "comments": {
+ "renderLimit": "Se afișează cele mai recente {{formattedCount}} comentarii pentru a menține interfața receptivă.",
+ "badges": {
+ "approved": "Aprobat",
+ "reviewRequested": "Revizuire solicitată"
+ },
+ "unknownTime": "timp necunoscut",
+ "actions": {
+ "reply": "Răspunde",
+ "replyToComment": "Răspunde la comentariu",
+ "showMore": "Arată mai multe comentarii ({{visible}}/{{total}})",
+ "cancelReply": "Anulează răspunsul",
+ "comment": "Comentariu"
+ },
+ "attachments": {
+ "previewAlt": "Previzualizare atașament",
+ "downloadFailed": "Descărcarea a eșuat"
+ },
+ "replyingTo": "Se răspunde la",
+ "input": {
+ "placeholder": "Adaugă un comentariu... (Enter pentru a trimite)",
+ "charsLeft": "{{count}} caractere rămase",
+ "charsLeft_one": "{{count}} caracter rămas",
+ "charsLeft_other": "{{count}} caractere rămase",
+ "charsLeft_few": "{{count}} caractere rămase",
+ "charsLeft_many": "{{count}} caractere rămase"
+ }
+ },
+ "workflowTimeline": {
+ "empty": "Niciun istoric al fluxului de lucru înregistrat",
+ "currentImplementationInterval": "Interval de implementare curent",
+ "implementationIntervalEnded": "Intervalul de implementare s-a încheiat la această tranziție",
+ "runningPrefix": "rulează ",
+ "createdAs": "Creată ca",
+ "by": "de",
+ "reassigned": "Reatribuită",
+ "assignedTo": "Atribuită lui",
+ "unassignedFrom": "Neatribuită de la",
+ "ownerChanged": "Proprietar schimbat",
+ "reviewRequested": "Revizuire solicitată",
+ "reviewStarted": "Revizuire începută",
+ "changesRequested": "Modificări solicitate",
+ "approved": "Aprobată",
+ "unknownEvent": "Eveniment necunoscut"
+ },
+ "reviewStates": {
+ "approved": "Aprobată",
+ "needsFix": "Necesită remediere",
+ "inReview": "În revizuire"
+ }
+ },
+ "tasks": {
+ "createTask": {
+ "assignee": "Responsabil",
+ "assigneeOptional": "Responsabil (opțional)",
+ "blockedByOptional": "Blocată de sarcini (opțional)",
+ "blockedBySummary": "Sarcina va fi blocată de: {{tasks}}",
+ "cancel": "Anulează",
+ "create": "Creează",
+ "creating": "Se creează...",
+ "description": "Sarcina va fi creată în directorul tasks/ al echipei și va apărea pe tabla Kanban.",
+ "descriptionOptional": "Descriere (opțional)",
+ "detailsPlaceholder": "Detalii sarcină (acceptă markdown)",
+ "hideOptionalFields": "Ascunde câmpurile opționale",
+ "offlineNotice": {
+ "after": "- lansează echipa pentru a începe execuția.",
+ "before": "Echipa este deconectată. Sarcina va fi adăugată în"
+ },
+ "promptOptional": "Prompt pentru responsabil (opțional)",
+ "promptPlaceholder": "Instrucțiuni personalizate pentru membrul echipei...",
+ "relatedOptional": "Sarcini conexe (opțional)",
+ "relatedSummary": "Conexe: {{tasks}}",
+ "saved": "Salvat",
+ "searchTasks": "Caută sarcini...",
+ "selectMember": "Selectează un membru",
+ "selectMemberOptional": "Selectează membrul...",
+ "showOptionalFields": "Arată câmpurile opționale",
+ "startImmediately": "Pornește imediat",
+ "startOfflineHint": "Echipa este deconectată. Lansează mai întâi echipa pentru a porni sarcinile imediat.",
+ "subject": "Subiect",
+ "subjectPlaceholder": "Ce trebuie făcut?",
+ "title": "Creează sarcină",
+ "todo": "DE FĂCUT"
+ },
+ "list": {
+ "columns": {
+ "blockedBy": "Blocată de",
+ "blocks": "Blochează",
+ "id": "ID",
+ "owner": "Proprietar",
+ "status": "Stare",
+ "subject": "Subiect"
+ },
+ "empty": "Nicio sarcină în această echipă",
+ "filters": {
+ "allOwners": "Toți proprietarii",
+ "allStatuses": "Toate stările",
+ "ownerAria": "Filtrează sarcinile după proprietar",
+ "statusAria": "Filtrează sarcinile după stare"
+ },
+ "showing": "Se afișează {{shown}} din {{total}}"
+ },
+ "status": {
+ "completed": "finalizată",
+ "deleted": "ștearsă",
+ "inProgress": "in_progress",
+ "pending": "în așteptare"
+ },
+ "statusSummary": {
+ "progressAria": "Sarcini {{completed}}/{{total}} finalizate",
+ "inProgress": "{{count}} in_progress",
+ "inProgress_one": "{{count}} in_progress",
+ "inProgress_other": "{{count}} in_progress",
+ "inProgress_few": "{{count}} in_progress",
+ "inProgress_many": "{{count}} in_progress",
+ "pending": "{{count}} în așteptare",
+ "pending_one": "{{count}} în așteptare",
+ "pending_other": "{{count}} în așteptare",
+ "pending_few": "{{count}} în așteptare",
+ "pending_many": "{{count}} în așteptare",
+ "completed": "{{count}} finalizate",
+ "completed_one": "{{count}} finalizată",
+ "completed_other": "{{count}} finalizate",
+ "completed_few": "{{count}} finalizate",
+ "completed_many": "{{count}} finalizate"
+ },
+ "unassigned": "Neatribuit",
+ "teamPrefix": "Echipă:",
+ "openTask": "Deschide sarcina",
+ "deleteConfirm": {
+ "title": "Șterge sarcina",
+ "message": "Muți sarcina #{{taskId}} la coșul de gunoi?",
+ "confirmLabel": "Șterge",
+ "cancelLabel": "Anulează"
+ }
+ },
+ "editor": {
+ "actions": {
+ "cancel": "Anulează",
+ "closeEditor": "Închide editorul",
+ "closeTab": "Închide fila",
+ "closeTooltip": "Închide editorul (Esc)",
+ "discard": "Renunță",
+ "discardAndClose": "Renunță și închide",
+ "keep": "Păstrează",
+ "keepMine": "Păstrează versiunea mea",
+ "keyboardShortcuts": "Scurtături de tastatură",
+ "overwrite": "Suprascrie",
+ "refreshAria": "Reîmprospătează (F5)",
+ "refreshTooltip": "Reîmprospătează starea git (F5)",
+ "reload": "Reîncarcă",
+ "retry": "Reîncearcă",
+ "save": "Salvează",
+ "saveAllAndClose": "Salvează tot și închide"
+ },
+ "ariaLabel": "Editor proiect",
+ "dialogs": {
+ "conflictDescription": "Fișierul a fost modificat extern de când l-ai deschis. Suprascrii cu modificările tale?",
+ "conflictTitle": "Conflict de salvare",
+ "unsavedDescription": "Ai modificări nesalvate. Ce ai vrea să faci?",
+ "unsavedFileDescription": "Acest fișier are modificări nesalvate. Ce ai vrea să faci?",
+ "unsavedTitle": "Modificări nesalvate"
+ },
+ "newFile": {
+ "validation": {
+ "nameRequired": "Numele nu poate fi gol",
+ "invalidName": "Nume invalid",
+ "invalidCharacters": "Numele conține caractere invalide",
+ "nameTooLong": "Numele este prea lung"
+ },
+ "placeholders": {
+ "fileName": "Nume fișier...",
+ "folderName": "Nume folder..."
+ },
+ "aria": {
+ "newFileName": "Nume fișier nou",
+ "newFolderName": "Nume folder nou"
+ }
+ },
+ "draftRecovered": "S-au recuperat modificări nesalvate dintr-o sesiune anterioară.",
+ "externalChange": {
+ "changed": "Fișierul s-a modificat pe disc.",
+ "deleted": "Fișierul nu mai există pe disc."
+ },
+ "saveFailed": "Salvarea a eșuat: {{error}}",
+ "sidebar": {
+ "explorer": "Explorator",
+ "hide": "Ascunde bara laterală",
+ "hideWithShortcut": "Ascunde bara laterală ({{shortcut}})",
+ "show": "Arată bara laterală",
+ "showWithShortcut": "Arată bara laterală ({{shortcut}})"
+ },
+ "searchInFiles": {
+ "title": "Caută în fișiere",
+ "closeSearch": "Închide căutarea",
+ "closeSearchShortcut": "Închide căutarea (Esc)",
+ "searchPlaceholder": "Caută...",
+ "matchCase": "Potrivește majusculele",
+ "matchCaseToggle": "Aa",
+ "noResults": "Niciun rezultat găsit",
+ "resultsSummary": "{{count}} potriviri în {{fileCount}} fișiere",
+ "resultsSummary_one": "{{count}} potrivire în {{fileCount}} fișiere",
+ "truncated": "(trunchiat)",
+ "resultsSummary_few": "{{count}} potriviri în {{fileCount}} fișiere",
+ "resultsSummary_many": "{{count}} potriviri în {{fileCount}} fișiere",
+ "resultsSummary_other": "{{count}} potriviri în {{fileCount}} fișiere"
+ },
+ "fileTree": {
+ "failedToLoadFiles": "Încărcarea fișierelor a eșuat: {{error}}",
+ "loading": "Se încarcă fișierele...",
+ "empty": "Niciun fișier găsit",
+ "dropForProjectRoot": "Plasează aici pentru rădăcina proiectului",
+ "moveToTrash": "Mută la coșul de gunoi",
+ "moveToTrashConfirm": "Muți \"{{name}}\" la coșul de gunoi?",
+ "cancel": "Anulează"
+ },
+ "goToLine": {
+ "title": "Mergi la linie",
+ "position": "(curent: {{current}}, total: {{total}})",
+ "placeholder": "Număr de linie, +decalaj, -decalaj sau %",
+ "go": "Mergi"
+ },
+ "searchPanel": {
+ "previousMatch": "Potrivirea anterioară",
+ "nextMatch": "Potrivirea următoare",
+ "close": "Închide",
+ "replacePlaceholder": "Înlocuiește",
+ "replace": "Înlocuiește",
+ "replaceNext": "Înlocuiește următorul",
+ "all": "Tot",
+ "replaceAll": "Înlocuiește tot"
+ },
+ "statusBar": {
+ "position": "Ln {{line}}, Col {{col}}",
+ "enableWatcher": "Activează monitorul de fișiere",
+ "disableWatcher": "Dezactivează monitorul de fișiere",
+ "watch": "monitorizare",
+ "watching": "se monitorizează",
+ "watchExternalChanges": "Monitorizează modificările externe",
+ "disableExternalWatcher": "Dezactivează monitorul de modificări externe",
+ "encodingUtf8": "UTF-8",
+ "spaces": "Spații: {{count}}"
+ },
+ "imagePreview": {
+ "loading": "Se încarcă previzualizarea...",
+ "openFullSize": "Deschide previzualizarea la dimensiune completă",
+ "openSystemViewer": "Deschide în vizualizatorul de sistem"
+ },
+ "quickOpen": {
+ "title": "Deschidere rapidă",
+ "searchPlaceholder": "Caută fișiere după nume...",
+ "loading": "Se încarcă fișierele...",
+ "empty": "Niciun fișier găsit"
+ },
+ "errorBoundary": {
+ "crashed": "Editorul s-a blocat",
+ "unknownError": "Eroare necunoscută"
+ },
+ "binaryPlaceholder": {
+ "file": "Fișier binar ({{size}})"
+ },
+ "unsavedChanges": "Modificări nesalvate",
+ "empty": {
+ "selectFile": "Selectează un fișier din arbore pentru a-l edita"
+ },
+ "search": {
+ "toggleReplace": "Comută înlocuirea",
+ "placeholder": "Caută"
+ },
+ "shortcuts": {
+ "title": "Scurtături de tastatură",
+ "groups": {
+ "fileOperations": "Operații cu fișiere",
+ "search": "Căutare",
+ "navigation": "Navigare",
+ "editing": "Editare",
+ "markdown": "Markdown",
+ "general": "General"
+ },
+ "actions": {
+ "quickOpen": "Deschidere rapidă",
+ "save": "Salvează",
+ "saveAll": "Salvează tot",
+ "closeTab": "Închide fila",
+ "findInFile": "Caută în fișier",
+ "searchInFiles": "Caută în fișiere",
+ "goToLine": "Mergi la linie",
+ "nextTab": "Fila următoare",
+ "previousTab": "Fila anterioară",
+ "cycleTabs": "Comută între file",
+ "toggleSidebar": "Comută bara laterală",
+ "undo": "Anulează",
+ "redo": "Refă",
+ "selectNextMatch": "Selectează potrivirea următoare",
+ "toggleComment": "Comută comentariul",
+ "splitPreview": "Previzualizare împărțită",
+ "fullPreview": "Previzualizare completă",
+ "closeEditor": "Închide editorul"
+ }
+ },
+ "toolbar": {
+ "enableWordWrap": "Activează încadrarea cuvintelor",
+ "disableWordWrap": "Dezactivează încadrarea cuvintelor",
+ "closeSplitPreview": "Închide previzualizarea împărțită",
+ "closePreview": "Închide previzualizarea"
+ }
+ },
+ "launch": {
+ "actions": {
+ "createSchedule": "Creează programare",
+ "creating": "Se creează...",
+ "goToDashboard": "Mergi la panou",
+ "launchTeam": "Lansează echipa",
+ "launching": "Se lansează...",
+ "relaunchTeam": "Relansează echipa",
+ "relaunching": "Se relansează...",
+ "saveChanges": "Salvează modificările",
+ "saving": "Se salvează..."
+ },
+ "billing": {
+ "prefix": "Începând cu 15 iunie 2026, Anthropic facturează",
+ "readArticle": "Citește articolul Anthropic",
+ "suffix": "iar utilizarea Agent SDK din creditul lunar Agent SDK, separat de limitele interactive Claude Code. Creditul se resetează la fiecare ciclu de facturare, iar creditul neutilizat nu se reportează."
+ },
+ "conflict": {
+ "description": "Rularea a două echipe în același director este riscantă - pot intra în conflict editând aceleași fișiere. Ia în considerare folosirea unui director diferit sau a unui git worktree pentru izolare.",
+ "title": "O altă echipă \"{{team}}\" rulează deja pentru acest director de lucru",
+ "workingDirectory": "Director de lucru:"
+ },
+ "description": {
+ "createSchedule": "Programează execuția automată a sarcinilor Claude",
+ "createScheduleForTeam": "Programează rulări automate pentru echipa \"{{team}}\"",
+ "editSchedule": "Se editează programarea pentru echipa \"{{team}}\"",
+ "launchPrefix": "Pornește echipa",
+ "launchSuffix": "prin Claude CLI local.",
+ "relaunchPrefix": "Oprește rularea curentă pentru",
+ "relaunchSuffix": "și pornește-o din nou prin Claude CLI local."
+ },
+ "prepare": {
+ "action": {
+ "launch": "lansare",
+ "relaunch": "relansare"
+ },
+ "blocked": "Mediul runtime nu este disponibil - {{action}} este blocată",
+ "checkingProviders": "Se verifică furnizorii selectați...",
+ "failed": "Pregătirea furnizorilor selectați a eșuat",
+ "preflight": "Verificare preliminară pentru a depista erori înainte de {{action}}",
+ "preparingEnvironment": "Se pregătește mediul...",
+ "ready": "Toți furnizorii selectați sunt pregătiți.",
+ "readyWithNotes": "Toți furnizorii selectați sunt pregătiți, cu observații.",
+ "unsupportedPreload": "Versiunea curentă de preload nu acceptă team:prepareProvisioning. Repornește aplicația de dezvoltare.",
+ "selectWorkingDirectory": "Selectează un director de lucru pentru a valida mediul de lansare.",
+ "someProvidersNeedAttention": "Unii furnizori selectați necesită atenție."
+ },
+ "prompt": {
+ "label": "Prompt",
+ "oneShotPrefix": "Acest prompt va fi transmis către",
+ "oneShotSuffix": "pentru execuție într-o singură rulare",
+ "saved": "Salvat",
+ "schedulePlaceholder": "Instrucțiuni pe care Claude să le execute conform programării...",
+ "teamLeadOptional": "Prompt pentru liderul echipei (opțional)",
+ "teamLeadPlaceholder": "Instrucțiuni pentru liderul echipei..."
+ },
+ "providerChanged": "Furnizorul s-a schimbat de la {{from}} la {{to}}. Sesiunea anterioară a liderului nu va fi reluată, iar liderul va porni cu context proaspăt pentru ca noul runtime să fie aplicat corect.",
+ "relaunchFreshSession": "Relansarea echipei pornește o sesiune nouă a liderului. Starea durabilă a echipei, tabla de sarcini și configurația membrilor sunt rehidratate în promptul de lansare.",
+ "relaunchWarning": {
+ "description": "Salvarea acestor setări va opri procesul curent al echipei, va persista lista actualizată și va lansa echipa din nou cu noul runtime.",
+ "title": "Relansarea va reporni rularea curentă a echipei"
+ },
+ "schedule": {
+ "labelOptional": "Etichetă (opțional)",
+ "labelPlaceholder": "ex., Revizuire zilnică de cod, Teste nocturne...",
+ "maxBudgetUsd": "Buget maxim (USD)",
+ "maxTurns": "Tururi maxime",
+ "noLimit": "Fără limită",
+ "noMatches": "Nicio echipă nu corespunde căutării tale.",
+ "noTeams": "Nicio echipă disponibilă. Creează mai întâi o echipă.",
+ "searchTeams": "Caută echipe...",
+ "selectTeam": "Selectează o echipă...",
+ "team": "Echipă",
+ "title": "Programare"
+ },
+ "title": {
+ "createSchedule": "Creează programare",
+ "editSchedule": "Editează programarea",
+ "launch": "Lansează echipa",
+ "relaunch": "Relansează echipa"
+ },
+ "errors": {
+ "loadProjectsFailed": "Încărcarea proiectelor a eșuat",
+ "saveScheduleFailed": "Salvarea programării a eșuat",
+ "relaunchFailed": "Relansarea echipei a eșuat",
+ "launchFailed": "Lansarea echipei a eșuat"
+ },
+ "validation": {
+ "openCodeLeadModelRequired": "Liderul OpenCode necesită un model selectat.",
+ "openCodeTeammateRequired": "Liderul OpenCode necesită cel puțin un coechipier OpenCode.",
+ "selectWorkingDirectory": "Selectează directorul de lucru (cwd)",
+ "fixMemberNames": "Corectează numele membrilor înainte de lansare",
+ "memberNamesUnique": "Numele membrilor trebuie să fie unice înainte de lansare"
+ },
+ "optionalSettings": {
+ "relaunchTitle": "Setări de relansare",
+ "title": "Setări opționale de lansare",
+ "relaunchDescription": "Revizuiește lista și runtime-ul liderului înainte de a reporni echipa.",
+ "description": "Menține fluxul de lansare concentrat pe calea proiectului și extinde acest lucru doar când vrei control suplimentar."
+ }
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Copiază echipa",
+ "createTeam": "Creează echipă",
+ "deleteForever": "Șterge definitiv",
+ "deletePermanently": "Șterge permanent",
+ "deleteTeam": "Șterge echipa",
+ "launching": "Se lansează...",
+ "launchTeam": "Lansează echipa",
+ "relaunchTeam": "Relansează echipa",
+ "restore": "Restaurează",
+ "restoreTeam": "Restaurează echipa",
+ "retry": "Reîncearcă",
+ "stopTeam": "Oprește echipa",
+ "stopping": "Se oprește..."
+ },
+ "electronOnly": {
+ "description": "În modul browser, accesul la directoarele locale `~/.claude/teams` nu este disponibil.",
+ "title": "Echipele sunt disponibile doar în modul Electron"
+ },
+ "empty": {
+ "description": "Creează o echipă aici pentru a începe. Va apărea automat în listă.",
+ "localOnly": "Crearea echipelor este disponibilă doar în modul local Electron.",
+ "title": "Nicio echipă găsită"
+ },
+ "filter": {
+ "clearAll": "Șterge tot",
+ "label": "Filtrează echipele",
+ "projectPriority": "Prioritate proiect",
+ "status": "Stare"
+ },
+ "loadFailed": "Încărcarea echipelor a eșuat",
+ "loading": "Se încarcă echipele...",
+ "localOnly": "Disponibil doar în modul local Electron.",
+ "membersCount": "Membri: {{count}}",
+ "membersCount_few": "Membri: {{count}}",
+ "membersCount_many": "Membri: {{count}}",
+ "membersCount_one": "Membru: {{count}}",
+ "membersCount_other": "Membri: {{count}}",
+ "noDescription": "Fără descriere",
+ "noMatches": "Nicio echipă care să corespundă filtrelor curente",
+ "partial": {
+ "pending": "Ultima lansare încă se reconciliază.",
+ "skipped": "Ultima lansare a omis coechipieri.",
+ "skippedWithCount": "Ultima lansare a omis {{count}}/{{expected}} coechipier.",
+ "skippedWithCount_few": "Ultima lansare a omis {{count}}/{{expected}} coechipieri.",
+ "skippedWithCount_many": "Ultima lansare a omis {{count}}/{{expected}} coechipieri.",
+ "skippedWithCount_one": "Ultima lansare a omis {{count}}/{{expected}} coechipier.",
+ "skippedWithCount_other": "Ultima lansare a omis {{count}}/{{expected}} coechipieri.",
+ "stopped": "Ultima lansare s-a oprit înainte ca toți coechipierii să se alăture.",
+ "stoppedWithCount": "Ultima lansare s-a oprit înainte ca {{count}}/{{expected}} coechipier să se alăture.",
+ "stoppedWithCount_few": "Ultima lansare s-a oprit înainte ca {{count}}/{{expected}} coechipieri să se alăture.",
+ "stoppedWithCount_many": "Ultima lansare s-a oprit înainte ca {{count}}/{{expected}} coechipieri să se alăture.",
+ "stoppedWithCount_one": "Ultima lansare s-a oprit înainte ca {{count}}/{{expected}} coechipier să se alăture.",
+ "stoppedWithCount_other": "Ultima lansare s-a oprit înainte ca {{count}}/{{expected}} coechipieri să se alăture."
+ },
+ "searchPlaceholder": "Caută echipe...",
+ "sections": {
+ "otherTeams": "Alte echipe",
+ "projectTeams": "Echipe pentru {{project}}",
+ "selectedProject": "proiect selectat"
+ },
+ "solo": "Solo",
+ "status": {
+ "active": "Activă",
+ "deleted": "Ștearsă",
+ "launching": "Se lansează...",
+ "offline": "Deconectată",
+ "partialFailure": "Lansarea a eșuat parțial",
+ "partialPending": "Inițializare în așteptare",
+ "partialSkipped": "Lansarea a omis un membru",
+ "running": "În execuție"
+ },
+ "title": "Selectează echipa",
+ "trash": "Coș de gunoi ({{count}})",
+ "trash_few": "Coș de gunoi ({{count}})",
+ "trash_many": "Coș de gunoi ({{count}})",
+ "trash_one": "Coș de gunoi ({{count}})",
+ "trash_other": "Coș de gunoi ({{count}})",
+ "deleteDraft": {
+ "title": "Șterge ciorna",
+ "message": "Ștergi echipa în lucru \"{{teamName}}\"? Această acțiune nu poate fi anulată.",
+ "confirmLabel": "Șterge",
+ "cancelLabel": "Anulează"
+ },
+ "moveToTrash": {
+ "title": "Mută la coșul de gunoi",
+ "message": "Muți echipa \"{{teamName}}\" la coșul de gunoi? O poți restaura mai târziu.",
+ "confirmLabel": "Mută la coșul de gunoi",
+ "cancelLabel": "Anulează"
+ },
+ "deleteForever": {
+ "title": "Șterge permanent",
+ "message": "Ștergi echipa \"{{teamName}}\" permanent? Toate datele vor fi pierdute.",
+ "confirmLabel": "Șterge definitiv",
+ "cancelLabel": "Anulează"
+ }
+ },
+ "messageComposer": {
+ "crossTeam": {
+ "hint": "Sfat: Mesajele între echipe ajung la liderul echipei țintă. Dacă vrei ca răspunsul să revină la liderul echipei tale în loc de tine, spune asta explicit în mesaj."
+ },
+ "attachments": {
+ "attachFiles": "Atașează fișiere (lipește sau trage și plasează)",
+ "unavailable": "Atașamentele sunt indisponibile",
+ "disabledHint": "Atașamentele de fișiere sunt acceptate pentru liderul echipei online și pentru coechipierii OpenCode online. Elimină atașamentele sau schimbă destinatarul.",
+ "restrictions": {
+ "crossTeam": "Atașamentele de fișiere nu sunt acceptate pentru mesajele între echipe",
+ "teamOffline": "Echipa trebuie să fie online pentru a atașa fișiere",
+ "unsupportedRecipient": "Fișierele pot fi trimise liderului echipei sau coechipierilor OpenCode",
+ "openCodeOffline": "Echipa trebuie să fie online pentru a atașa fișiere pentru coechipierii OpenCode",
+ "sending": "Așteaptă finalizarea trimiterii mesajului curent înainte de a adăuga fișiere",
+ "maximumReached": "Numărul maxim de atașamente atins",
+ "leadOnly": "Fișierele pot fi trimise doar liderului echipei"
+ }
+ },
+ "slash": {
+ "restrictions": {
+ "attachments": "Comenzile slash necesită un lider de echipă live și nu pot fi trimise cu atașamente",
+ "crossTeam": "Comenzile slash pot fi rulate doar pe liderul echipei curente",
+ "notLead": "Comenzile slash pot fi trimise doar liderului echipei",
+ "leadOffline": "Comenzile slash necesită ca liderul echipei să fie online"
+ }
+ },
+ "status": {
+ "reusedCrossTeamRequest": "S-a reutilizat o cerere recentă între echipe",
+ "teamOffline": "Echipă deconectată"
+ },
+ "revision": {
+ "editing": "Se editează mesajul anterior",
+ "cancel": "Anulează",
+ "tooltip": "Cere agentului să ignore mesajul anterior și să-l restaureze în compozitor."
+ },
+ "input": {
+ "charsLeft": "{{count}} caractere rămase",
+ "charsLeft_one": "{{count}} caracter rămas",
+ "charsLeft_other": "{{count}} caractere rămase",
+ "teamLaunchingPlaceholder": "Echipa se lansează... mesajul va fi pus în coadă pentru livrare în căsuță.",
+ "crossTeamPlaceholder": "Mesaj între echipe către {{team}}...",
+ "teamFallback": "echipă",
+ "placeholder": "Scrie un mesaj... (Enter pentru a trimite, Shift+Enter pentru linie nouă)",
+ "slashTip": "Sfat: Poți folosi \"/\" pentru a rula orice comandă Claude.",
+ "charsLeft_few": "{{count}} caractere rămase",
+ "charsLeft_many": "{{count}} caractere rămase"
+ },
+ "teamSelector": {
+ "thisTeam": "Această echipă",
+ "current": "curentă",
+ "online": "online",
+ "offline": "offline",
+ "onlineTitle": "Online",
+ "offlineTitle": "Offline"
+ },
+ "recipient": {
+ "select": "Selectează...",
+ "searchPlaceholder": "Caută...",
+ "noResults": "Niciun rezultat"
+ },
+ "actions": {
+ "voiceToText": "Voce în text",
+ "send": "Trimite",
+ "sendingUnavailableLaunching": "Trimiterea este indisponibilă cât timp echipa se lansează"
+ }
+ },
+ "claudeLogs": {
+ "filter": {
+ "ariaLabel": "Filtrează jurnalele",
+ "tooltip": "Filtrează jurnalele",
+ "sections": {
+ "stream": "Flux",
+ "content": "Conținut"
+ },
+ "kinds": {
+ "output": "Ieșire",
+ "thinking": "Gândire",
+ "tool": "Apeluri unelte"
+ },
+ "actions": {
+ "reset": "Resetează",
+ "save": "Salvează"
+ },
+ "streams": {
+ "stdout": "stdout",
+ "stderr": "stderr"
+ }
+ },
+ "rawLineCount": "{{formattedCount}} linii brute",
+ "rawLineCount_one": "{{formattedCount}} linie brută",
+ "rawLinesCaptured": "{{count}} capturate",
+ "emptyRawLogs": "{{count}}; niciuna nu este încă ieșire de asistent/unealtă.",
+ "noLogsYet": "Niciun jurnal încă.",
+ "teamNotRunning": "Echipa nu rulează.",
+ "searchPlaceholder": "Caută jurnale...",
+ "clearSearch": "Șterge căutarea",
+ "newCount": "+{{count}} noi",
+ "loading": "Se încarcă...",
+ "showMore": "Arată mai mult",
+ "noLogsCaptured": "Niciun jurnal capturat.",
+ "noMatchingLogs": "Niciun jurnal corespunzător.",
+ "rawLineCount_few": "{{formattedCount}} linii brute",
+ "rawLineCount_many": "{{formattedCount}} linii brute",
+ "rawLineCount_other": "{{formattedCount}} linii brute",
+ "openFullscreen": "Deschide jurnalele pe tot ecranul",
+ "fullscreen": "Tot ecranul",
+ "viewingFullscreen": "Se vizualizează în modul pe tot ecranul",
+ "logsTitle": "Jurnale",
+ "sourceSelect": {
+ "placeholder": "Selectează sursa jurnalelor...",
+ "searchPlaceholder": "Caută surse de jurnale...",
+ "emptyMessage": "Nicio sursă de jurnale găsită.",
+ "ariaLabel": "Sursă jurnale",
+ "leadLabel": "Lider",
+ "selectSourceEmpty": "Selectează o sursă de jurnale.",
+ "leadDescription": "Lider echipă",
+ "removedLabel": "eliminat",
+ "removedDescription": "Eliminat"
+ }
+ },
+ "agentGraph": {
+ "popover": {
+ "externalTeam": "Echipă externă",
+ "process": {
+ "startedBy": "Pornit de:",
+ "at": "La:",
+ "openUrl": "Deschide URL"
+ },
+ "overflow": {
+ "hiddenTasks": "Sarcini ascunse",
+ "empty": "Nicio sarcină ascunsă disponibilă."
+ },
+ "member": {
+ "lead": "Lider",
+ "workingOn": "lucrează la",
+ "recentTools": "Unelte recente",
+ "spawn": {
+ "waitingToStart": "așteaptă să pornească",
+ "starting": "pornește",
+ "failed": "eșuat"
+ },
+ "state": {
+ "active": "activ",
+ "idle": "inactiv",
+ "offline": "deconectat",
+ "runningTool": "rulează unealtă"
+ },
+ "activeTool": {
+ "running": "Rulează unealta",
+ "failed": "Unealta a eșuat",
+ "finished": "Unealta a terminat"
+ },
+ "actions": {
+ "message": "Mesaj",
+ "profile": "Profil",
+ "task": "Sarcină"
+ }
+ }
+ },
+ "logPreview": {
+ "logs": "Jurnale",
+ "loading": "Se încarcă jurnalele",
+ "more": "+{{count}} în plus",
+ "more_one": "+{{count}} în plus",
+ "more_other": "+{{count}} în plus",
+ "more_few": "+{{count}} în plus",
+ "more_many": "+{{count}} în plus",
+ "unsupportedProvider": "Furnizor neacceptat",
+ "openCodeLogsDelayed": "Jurnalele OpenCode întârziate",
+ "logsUnavailable": "Jurnale indisponibile",
+ "noRecentLogs": "Niciun jurnal recent",
+ "toolError": "Eroare unealtă",
+ "toolResult": "Rezultat unealtă",
+ "toolUse": "Utilizare unealtă",
+ "thinking": "Gândire",
+ "error": "Eroare",
+ "logEvent": "Eveniment jurnal",
+ "noErrorOutput": "Nicio ieșire de eroare",
+ "noOutput": "Nicio ieșire",
+ "noInput": "Nicio intrare"
+ },
+ "blockingEdge": {
+ "title": "Dependență blocantă",
+ "blocks": "blochează",
+ "close": "Închide",
+ "blockingHiddenTasks": "Sarcini ascunse blocante",
+ "blockedHiddenTasks": "Sarcini ascunse blocate",
+ "links_one": "{{count}} legătură",
+ "links_other": "{{count}} legături",
+ "hiddenBlockingLinks_one": "{{count}} legătură blocantă ascunsă",
+ "hiddenBlockingLinks_other": "{{count}} legături blocante ascunse",
+ "hiddenTaskStack": "Stivă de sarcini ascunse",
+ "hiddenTasks_one": "{{count}} sarcină ascunsă",
+ "hiddenTasks_other": "{{count}} sarcini ascunse",
+ "task": "Sarcină",
+ "openBlockerStack": "Deschide stiva de blocaje",
+ "openBlockedStack": "Deschide stiva de sarcini blocate",
+ "openBlockerTask": "Deschide sarcina blocantă",
+ "openBlockedTask": "Deschide sarcina blocată"
+ },
+ "activityHud": {
+ "activity": "Activitate",
+ "noRecentActivity": "Nicio activitate recentă",
+ "more": "+{{count}} în plus",
+ "more_one": "+{{count}} în plus",
+ "more_other": "+{{count}} în plus",
+ "more_few": "+{{count}} în plus",
+ "more_many": "+{{count}} în plus"
+ },
+ "provisioning": {
+ "launchDetails": "Detalii lansare",
+ "launchDetailsDescription": "Progres detaliat al lansării echipei, ieșire live și jurnale CLI."
+ }
+ },
+ "projectPath": {
+ "label": "Proiect",
+ "source": {
+ "claude": "Găsit de Claude",
+ "codex": "Găsit de Codex",
+ "mixed": "Găsit de Claude și Codex"
+ },
+ "deleted": {
+ "title": "Folderul proiectului nu mai există",
+ "label": "Șters"
+ },
+ "mode": {
+ "projectList": "Din lista de proiecte",
+ "customPath": "Cale personalizată"
+ },
+ "loadingProjects": "Se încarcă proiectele...",
+ "selectProject": "Selectează un proiect...",
+ "searchPlaceholder": "Caută proiectul după nume sau cale",
+ "empty": "Nimic găsit",
+ "selectFromList": "Selectează un proiect din listă",
+ "noProjects": "Niciun proiect găsit, comută la cale personalizată.",
+ "customWorkingDirectory": "Director de lucru personalizat",
+ "browse": "Răsfoiește",
+ "createAutomatically": "Dacă directorul nu există, va fi creat automat."
+ },
+ "members": {
+ "badges": {
+ "worktree": "worktree"
+ },
+ "runtimeTelemetry": {
+ "title": "Încărcare runtime local",
+ "description": "Doar procesele părinte și copil. Inferența LLM la distanță nu este inclusă.",
+ "cpu": "CPU",
+ "memory": "Memorie",
+ "summedRss": "RSS însumat",
+ "sharedHost": "Metrică partajată a gazdei OpenCode. Nu este exclusivă acestui membru.",
+ "processTreeCapped": "Arborele de procese a fost plafonat pentru acest eșantion.",
+ "rssHint": "RSS poate include pagini partajate, așa că este cel mai bine citit ca semnal de încărcare, nu ca memorie exclusivă."
+ },
+ "editor": {
+ "title": "Membri",
+ "addMember": "Adaugă membru",
+ "editAsJson": "Editează ca JSON",
+ "runInSeparateWorktrees": "Rulează coechipierii în worktree-uri separate",
+ "agentTeamsMcpOnly": "Doar Agent Teams MCP",
+ "removedCount": "Eliminați ({{count}})",
+ "removedModelLockReason": "Membrii eliminați sunt păstrați pentru istoricul de ștergere temporară. Restaurează-i pentru a edita setările.",
+ "memberNamesUnique": "Numele membrilor trebuie să fie unice"
+ },
+ "stats": {
+ "computing": "Se calculează statisticile...",
+ "empty": "Nicio statistică disponibilă",
+ "lines": "Linii",
+ "linesInfo": "Aproximativ. Exact pentru uneltele Edit și Write. Scrierile de fișiere prin Bash sunt estimate din tiparele de comenzi (heredoc, echo, sed) și pot fi subraportate.",
+ "files": "Fișiere",
+ "toolCalls": "Apeluri unelte",
+ "tokens": "Tokenuri",
+ "toolUsage": "Utilizare unelte",
+ "filesTouched": "Fișiere atinse ({{count}})",
+ "viewAllChanges": "Vezi toate modificările",
+ "showLess": "Arată mai puțin",
+ "moreFiles": "+{{count}} în plus",
+ "footer": "{{count}} sesiuni · calculat {{computedAgo}}",
+ "footer_one": "{{count}} sesiune · calculat {{computedAgo}}",
+ "footer_few": "{{count}} sesiuni · calculat {{computedAgo}}",
+ "footer_many": "{{count}} sesiuni · calculat {{computedAgo}}",
+ "footer_other": "{{count}} sesiuni · calculat {{computedAgo}}"
+ },
+ "logs": {
+ "searching": "Se caută jurnalele...",
+ "empty": "Niciun jurnal găsit",
+ "waitingForTaskActivity": "Sarcina este în curs - se așteaptă activitatea sesiunii (reîmprospătare automată)...",
+ "noTaskActivity": "Nicio activitate de sesiune pentru această sarcină încă",
+ "noMemberActivity": "Acest membru nu are încă activitate de sesiune înregistrată",
+ "leadSessionTooltip": "Jurnalele complete ale sesiunii liderului echipei - utile pentru contextul de orchestrare globală, nu specifice acestui agent",
+ "memberSessionTooltip": "Jurnalele complete ale sesiunii persistente a coechipierului - utile când munca rulează într-o sesiune de membru rădăcină în loc de un fișier de subagent",
+ "startedAt": "început {{time}}",
+ "active": "activ",
+ "showDetails": "Arată detalii",
+ "hideDetails": "Ascunde detalii",
+ "loadingDetails": "Se încarcă detaliile...",
+ "failedToLoadDetails": "Încărcarea detaliilor a eșuat"
+ },
+ "detail": {
+ "relaunchOpenCode": "Relansează OpenCode",
+ "restart": "Repornește",
+ "legacyLogsFallback": "Rezervă jurnale vechi",
+ "copyDiagnostics": "Copiază diagnosticele",
+ "pid": "PID {{pid}}",
+ "removedAt": "Eliminat {{date}}",
+ "failedToRestartMember": "Repornirea membrului a eșuat",
+ "sendMessage": "Trimite mesaj",
+ "assignTask": "Atribuie sarcină",
+ "remove": "Elimină"
+ },
+ "list": {
+ "loading": "Se încarcă membrii echipei",
+ "unavailable": "Lista membrilor indisponibilă",
+ "unavailableDescription": "{{count}} coechipieri sunt cunoscuți din metadatele echipei, dar detaliile listei lipsesc.",
+ "unavailableDescription_one": "{{count}} coechipier este cunoscut din metadatele echipei, dar detaliile listei lipsesc.",
+ "soloLeadOnly": "Echipă solo - doar lider",
+ "removedCount": "Eliminați ({{count}})",
+ "unavailableDescription_few": "{{count}} coechipieri sunt cunoscuți din metadatele echipei, dar detaliile listei lipsesc.",
+ "unavailableDescription_many": "{{count}} coechipieri sunt cunoscuți din metadatele echipei, dar detaliile listei lipsesc.",
+ "unavailableDescription_other": "{{count}} coechipieri sunt cunoscuți din metadatele echipei, dar detaliile listei lipsesc."
+ },
+ "executionLog": {
+ "empty": "Nimic de afișat",
+ "emptyUserMessage": "{{time}} - (gol)",
+ "agentInstructions": "Instrucțiuni agent",
+ "memberTurn": "Turul lui {{member}}",
+ "agentTurn": "Turul agentului",
+ "turn": "tur"
+ },
+ "recentMessages": {
+ "latest": "Cele mai recente mesaje",
+ "latestForMember": "Cele mai recente mesaje - {{member}}",
+ "loadMore": "Încarcă mai multe",
+ "expand": "Extinde",
+ "collapse": "Restrânge"
+ },
+ "leadModel": {
+ "defaultModel": "Implicit",
+ "providerModelAria": "Furnizor {{provider}}, {{model}}",
+ "leadShort": "lider",
+ "teamLead": "Lider echipă",
+ "syncWithTeammates": "Sincronizează modelul cu coechipierii",
+ "anthropicTeamWide": "Anthropic la nivelul întregii echipe",
+ "runtimeInheritance": "Runtime-ul liderului se aplică coechipierilor dacă nu își setează propriul furnizor sau model.",
+ "anthropicContextLimit": "Limita de context de 200K este la nivelul întregii echipe pentru runtime-urile Anthropic în această lansare, inclusiv coechipierii Anthropic personalizați."
+ },
+ "runtimeLogs": {
+ "autoRefresh": "Reîmprospătare automată",
+ "wrapLines": "Încadrează liniile",
+ "loadingTail": "Se încarcă coada jurnalului procesului...",
+ "empty": "Niciun fișier de jurnal de proces capturat pentru acest membru încă.",
+ "copy": "Copiază",
+ "fileEmpty": "Fișierul de jurnal al procesului este gol.",
+ "showingLast": "Se afișează ultimii {{bytes}}.",
+ "showing": "Se afișează {{bytes}}."
+ },
+ "tasks": {
+ "empty": "Nicio sarcină atribuită acestui membru"
+ },
+ "messages": {
+ "loadOlder": "Încarcă mesaje mai vechi",
+ "filters": {
+ "all": "Toate",
+ "messages": "Mesaje",
+ "comments": "Comentarii"
+ },
+ "empty": {
+ "loading": "Se încarcă activitatea...",
+ "noComments": "Niciun comentariu pentru acest membru",
+ "noLoadedMessages": "Niciun mesaj încărcat pentru acest membru încă",
+ "noMessages": "Niciun mesaj cu acest membru",
+ "noLoadedActivity": "Nicio activitate încărcată pentru acest membru încă",
+ "noActivity": "Nicio activitate cu acest membru"
+ }
+ },
+ "actions": {
+ "openProfile": "Deschide profilul",
+ "editRole": "Editează rolul",
+ "sendMessage": "Trimite mesaj",
+ "assignTask": "Atribuie sarcină"
+ },
+ "roleSelect": {
+ "customRolePlaceholder": "Introdu rol personalizat..."
+ }
+ },
+ "schedule": {
+ "count": "{{count}} programări",
+ "count_one": "{{count}} programare",
+ "count_other": "{{count}} programări",
+ "nextRun": "Următoarea: {{next}}",
+ "actions": {
+ "runNow": "Rulează acum",
+ "edit": "Editează",
+ "pause": "Întrerupe",
+ "resume": "Reia",
+ "delete": "Șterge",
+ "addSchedule": "Adaugă programare"
+ },
+ "runHistory": {
+ "loading": "Se încarcă istoricul rulărilor...",
+ "empty": "Nicio rulare încă"
+ },
+ "count_few": "{{count}} programări",
+ "count_many": "{{count}} programări",
+ "runLog": {
+ "title": "Jurnal de rulare",
+ "exitCode": "ieșire {{code}}",
+ "retryCount": "reîncercare {{count}}/{{max}}",
+ "stillRunning": "Sarcina încă rulează...",
+ "loadingLogs": "Se încarcă jurnalele...",
+ "errors": "Erori",
+ "close": "Închide"
+ },
+ "cron": {
+ "expression": "Expresie cron",
+ "highFrequencyWarning": "Programare de frecvență ridicată (interval mai mic de 5 min)",
+ "nextRuns": "Următoarele rulări:",
+ "timezone": "Fus orar",
+ "selectTimezone": "Selectează fusul orar",
+ "warmUpTime": "Timp de încălzire",
+ "warmUpDescription": "Pregătește furnizorii selectați înainte de execuția programată",
+ "errors": {
+ "enterExpression": "Introdu o expresie cron",
+ "invalidExpression": "Expresie cron invalidă"
+ },
+ "presets": {
+ "everyHour": "În fiecare oră",
+ "everySixHours": "La fiecare 6 ore",
+ "dailyAtNine": "Zilnic la 9 dimineața",
+ "weekdaysAtNine": "În zilele lucrătoare la 9 dimineața",
+ "mondayAtNine": "Luni la 9 dimineața",
+ "everyThirtyMinutes": "La fiecare 30 min"
+ },
+ "warmUpOptions": {
+ "none": "Fără încălzire",
+ "fiveMinutes": "5 min",
+ "tenMinutes": "10 min",
+ "fifteenMinutes": "15 min",
+ "thirtyMinutes": "30 min"
+ }
+ },
+ "empty": {
+ "title": "Nicio programare încă",
+ "description": "Creează o programare pentru a rula sarcini Claude automat conform unei programări cron."
+ },
+ "title": "Programări",
+ "status": {
+ "active": "Activă",
+ "paused": "Întreruptă",
+ "disabled": "Dezactivată"
+ },
+ "runStatus": {
+ "pending": "În așteptare",
+ "warmingUp": "Se încălzește",
+ "warm": "Caldă",
+ "running": "În execuție",
+ "completed": "Finalizată",
+ "failed": "Eșuată",
+ "interrupted": "Întreruptă",
+ "cancelled": "Anulată"
+ }
+ },
+ "openCodeContextConfigHint": {
+ "summary": "Modelele locale OpenCode pot folosi un buget de context OpenCode în loc de limite doar pentru prompt.",
+ "description": "Adaugă limite corespunzătoare la configurația OpenCode pentru furnizorul și modelul folosit de acest coechipier. Acest lucru ajută OpenCode să compacteze și să elimine înainte ca modelele locale să-și depășească fereastra de context.",
+ "replacePrefix": "Înlocuiește",
+ "and": "și",
+ "replaceSuffix": "cu ID-urile furnizorului și modelului din configurația ta OpenCode. Instrucțiunile din prompt precum",
+ "promptInstructionsSuffix": "sunt mai slabe deoarece cererea este asamblată înainte ca modelul să le citească.",
+ "providerLimits": "Limite furnizor",
+ "compactionConfig": "Configurație compactare"
+ },
+ "sessions": {
+ "noProjectPath": "Nicio cale de proiect legată",
+ "provisioningHint": "Sesiunile vor apărea după aprovizionarea echipei",
+ "projectNotFound": "Proiectul nu a fost găsit",
+ "loading": "Se încarcă sesiunile...",
+ "empty": "Nicio sesiune găsită",
+ "showAllSessions": "Arată pentru toate sesiunile",
+ "lead": "lider",
+ "removeFilter": "Elimină filtrul",
+ "filterBySession": "Filtrează după această sesiune",
+ "openSession": "Deschide sesiunea",
+ "title": "Sesiuni"
+ },
+ "provisioning": {
+ "pid": "PID {{pid}}",
+ "cancel": "Anulează",
+ "moreWarningsHidden": "{{count}} avertismente suplimentare ascunse",
+ "diagnostics": "Diagnostice",
+ "liveOutput": "Ieșire live",
+ "diagnosticsCopied": "Diagnostice copiate",
+ "copyDiagnostics": "Copiază diagnosticele",
+ "copied": "Copiat",
+ "noOutput": "Nicio ieșire capturată încă.",
+ "cliLogs": "Jurnale CLI",
+ "steps": {
+ "starting": "Se pornește",
+ "configuring": "Configurarea echipei",
+ "assembling": "Membrii se alătură",
+ "finalizing": "Se finalizează"
+ },
+ "providerStatus": {
+ "status": {
+ "checking": "se verifică...",
+ "ready": "OK",
+ "notes": "OK (observații)",
+ "failed": "ERR",
+ "pending": "în așteptare"
+ },
+ "detailSummary": {
+ "cliBinaryMissing": "Binarul CLI lipsește",
+ "openCodeRuntimeMissing": "Runtime-ul OpenCode lipsește",
+ "openCodeWindowsAccessBlocked": "Accesul OpenCode pe Windows blocat",
+ "openCodeNoOutput": "Verificarea runtime-ului OpenCode nu a returnat nicio ieșire",
+ "openCodeMcpUnreachable": "MCP-ul aplicației OpenCode inaccesibil",
+ "workingDirectoryMissing": "Directorul de lucru lipsește",
+ "cliBinaryCouldNotStart": "Binarul CLI nu a putut fi pornit",
+ "cliPreflightIncomplete": "Verificarea preliminară CLI nu s-a finalizat",
+ "authenticationRequired": "Autentificare necesară",
+ "runtimeProviderNotConfigured": "Furnizorul de runtime nu este configurat",
+ "cliPreflightFailed": "Verificarea preliminară CLI a eșuat",
+ "selectedModelCompatible": "Modelul selectat compatibil",
+ "selectedModelCompatibilityPending": "Compatibilitatea modelului selectat în așteptare",
+ "selectedModelAvailable": "Modelul selectat disponibil",
+ "selectedModelVerified": "Modelul selectat verificat",
+ "selectedModelUnavailable": "Modelul selectat indisponibil",
+ "selectedModelTimedOut": "Verificarea modelului selectat a expirat",
+ "selectedModelCheckFailed": "Verificarea modelului selectat a eșuat",
+ "selectedModelDeferred": "Verificarea modelului selectat amânată",
+ "selectedModelPingNotConfirmed": "Ping-ul modelului selectat neconfirmat",
+ "readyWithNotes": "Pregătit cu observații",
+ "needsAttention": "Necesită atenție"
+ },
+ "modelChecksSummary": "Verificările modelului selectat - {{details}}",
+ "modelParts": {
+ "unavailable": "{{count}} model indisponibil",
+ "unavailable_one": "{{count}} model indisponibil",
+ "unavailable_other": "{{count}} modele indisponibile",
+ "checkFailed": "{{count}} verificare de model a eșuat",
+ "checkFailed_one": "{{count}} verificare de model a eșuat",
+ "checkFailed_other": "{{count}} verificări de modele au eșuat",
+ "timedOut": "{{count}} model a expirat",
+ "timedOut_one": "{{count}} model a expirat",
+ "timedOut_other": "{{count}} modele au expirat",
+ "deferred": "{{count}} verificare amânată",
+ "deferred_one": "{{count}} verificare amânată",
+ "deferred_other": "{{count}} verificări amânate",
+ "pingNotConfirmed": "{{count}} ping neconfirmat",
+ "pingNotConfirmed_one": "{{count}} ping neconfirmat",
+ "pingNotConfirmed_other": "{{count}} ping-uri neconfirmate",
+ "compatibilityPending": "{{count}} compatibil, verificare aprofundată în așteptare",
+ "compatibilityPending_one": "{{count}} compatibil, verificare aprofundată în așteptare",
+ "compatibilityPending_other": "{{count}} compatibile, verificare aprofundată în așteptare",
+ "compatible": "{{count}} compatibil",
+ "compatible_one": "{{count}} compatibil",
+ "compatible_other": "{{count}} compatibile",
+ "checking": "{{count}} se verifică",
+ "checking_one": "{{count}} se verifică",
+ "checking_other": "{{count}} se verifică",
+ "available": "{{count}} disponibil",
+ "available_one": "{{count}} disponibil",
+ "available_other": "{{count}} disponibile",
+ "verified": "{{count}} verificat",
+ "verified_one": "{{count}} verificat",
+ "verified_other": "{{count}} verificate",
+ "unavailable_few": "{{count}} modele indisponibile",
+ "unavailable_many": "{{count}} modele indisponibile",
+ "checkFailed_few": "{{count}} verificări de modele au eșuat",
+ "checkFailed_many": "{{count}} verificări de modele au eșuat",
+ "timedOut_few": "{{count}} modele au expirat",
+ "timedOut_many": "{{count}} modele au expirat",
+ "deferred_few": "{{count}} verificări amânate",
+ "deferred_many": "{{count}} verificări amânate",
+ "pingNotConfirmed_few": "{{count}} ping-uri neconfirmate",
+ "pingNotConfirmed_many": "{{count}} ping-uri neconfirmate",
+ "compatibilityPending_few": "{{count}} compatibile, verificare aprofundată în așteptare",
+ "compatibilityPending_many": "{{count}} compatibile, verificare aprofundată în așteptare",
+ "compatible_few": "{{count}} compatibile",
+ "compatible_many": "{{count}} compatibile",
+ "checking_few": "{{count}} se verifică",
+ "checking_many": "{{count}} se verifică",
+ "available_few": "{{count}} disponibile",
+ "available_many": "{{count}} disponibile",
+ "verified_few": "{{count}} verificate",
+ "verified_many": "{{count}} verificate"
+ },
+ "openProviderSettings": "Deschide setările {{provider}}",
+ "copied": "Copiat",
+ "copyDiagnostics": "Copiază diagnosticele",
+ "deepVerificationPending": "Verificarea aprofundată încă rulează. Modelele gratuite OpenCode pot dura în jur de 20 de secunde.",
+ "progress": {
+ "checkingSelectedProviders": "Se verifică furnizorii selectați în paralel...",
+ "checkingProvider": "Se verifică furnizorul {{provider}}...",
+ "checkingProviders": "Se verifică {{providers}} furnizori..."
+ },
+ "failureHints": {
+ "openCodeAccessDenied": "Corectează permisiunile folderului sau mută proiectul într-un folder cu drept de scriere pentru utilizator. Rularea ca administrator este doar o soluție temporară.",
+ "openCodeBridgeNoOutput": "Repornește aplicația și runtime-ul OpenCode, apoi reîncearcă. Dacă se repetă, copiază diagnosticele.",
+ "workingDirectoryMissing": "Alege un director de lucru existent, apoi redeschide acest dialog.",
+ "authenticationRequired": "Autentifică furnizorul necesar în Claude CLI, apoi redeschide acest dialog.",
+ "runtimeProviderNotConfigured": "Configurează runtime-ul furnizorului selectat, apoi redeschide acest dialog.",
+ "openCodeRuntimeMissing": "Instalează sau reîncearcă runtime-ul OpenCode din cardul de stare al furnizorului, apoi redeschide acest dialog.",
+ "openCodeAppMcpUnreachable": "Reîncearcă lansarea pentru a reîmprospăta puntea MCP a aplicației OpenCode. Dacă se repetă, repornește aplicația și runtime-ul OpenCode.",
+ "cliBinaryMissing": "Asigură-te că binarul Claude CLI local există și poate fi pornit, apoi redeschide acest dialog.",
+ "default": "Rezolvă problema de mai sus, apoi redeschide acest dialog.",
+ "openCodeNodeModulesSymlinkPermission": "Rulează Agent Teams AI ca Administrator, apoi reîncearcă lansarea."
+ }
+ },
+ "presentation": {
+ "awaitingPermission": "{{count}} coechipier așteaptă aprobarea permisiunii",
+ "nameListWithMore": "{{names}}, +{{count}} în plus",
+ "waitingForOpenCode": "Se așteaptă OpenCode: {{names}}",
+ "bootstrapStalled": "Inițializare blocată: {{names}}",
+ "bootstrapStalledWithOpenCodeWait": "{{stalled}}; Se așteaptă OpenCode: {{names}}",
+ "namedPendingDiagnostic": "{{label}}: {{names}}",
+ "countPendingDiagnostic": "{{count}} {{label}}",
+ "pendingLabels": {
+ "bootstrapStalled": "Inițializare blocată",
+ "shellOnly": "Doar shell",
+ "waitingForBootstrap": "Se așteaptă inițializarea",
+ "bootstrapUnconfirmed": "Inițializare neconfirmată",
+ "awaitingPermission": "Se așteaptă permisiunea",
+ "waitingForRuntime": "Se așteaptă runtime-ul",
+ "shellOnlyLower": "doar shell",
+ "waitingForBootstrapLower": "se așteaptă inițializarea",
+ "bootstrapUnconfirmedLower": "inițializare neconfirmată",
+ "awaitingPermissionLower": "se așteaptă permisiunea",
+ "waitingForRuntimeLower": "se așteaptă runtime-ul"
+ },
+ "failed": {
+ "memberFailedToStart": "{{name}} nu a reușit să pornească",
+ "teammatesFailedToStart": "{{count}} coechipieri nu au reușit să pornească",
+ "teammatesFailedRatio": "{{count}}/{{total}} coechipieri nu au reușit să pornească"
+ },
+ "skipped": {
+ "memberSkipped": "{{name}} omis pentru această lansare",
+ "memberSkippedWithReason": "{{name}} omis pentru această lansare - {{reason}}",
+ "memberSkippedCompact": "{{name}} omis",
+ "teammatesSkipped": "{{count}} coechipieri omiși",
+ "teammatesSkippedList": "Coechipieri omiși: {{list}}",
+ "teammatesSkippedRatio": "{{count}}/{{total}} coechipieri omiși pentru această lansare"
+ },
+ "joining": {
+ "teammatesStillJoining": "{{count}} coechipieri încă se alătură",
+ "teammatesStillJoining_one": "{{count}} coechipier încă se alătură",
+ "teammatesStillJoining_few": "{{count}} coechipieri încă se alătură",
+ "teammatesStillJoining_many": "{{count}} coechipieri încă se alătură",
+ "teammatesStillJoining_other": "{{count}} coechipieri încă se alătură",
+ "teammatesConfirmedRatio": "{{count}}/{{total}} coechipieri confirmați"
+ },
+ "ready": {
+ "leadOnline": "Lider online",
+ "allTeammatesJoined": "Toți cei {{count}} coechipieri s-au alăturat",
+ "teamProvisionedLeadOnline": "Echipă aprovizionată - lider online",
+ "teamProvisionedAllJoined": "Echipă aprovizionată - toți cei {{count}} coechipieri s-au alăturat",
+ "teamProvisionedStillJoining": "Echipă aprovizionată - coechipierii încă se alătură",
+ "launchFinishedWithErrors": "Lansare finalizată cu erori - {{count}}/{{total}} coechipieri nu au reușit să pornească",
+ "launchContinuedSkipped": "Lansare continuată - {{count}}/{{total}} coechipieri omiși",
+ "teamLaunchedLeadOnline": "Echipă lansată - lider online",
+ "teamLaunchedAllJoined": "Echipă lansată - toți cei {{count}} coechipieri s-au alăturat"
+ },
+ "panel": {
+ "launchFailed": "Lansarea a eșuat",
+ "launchDetails": "Detalii lansare",
+ "launchFinishedWithErrors": "Lansare finalizată cu erori",
+ "launchContinuedSkipped": "Lansare continuată cu coechipieri omiși",
+ "coreTeamReady": "Echipa de bază pregătită",
+ "finishingLaunch": "Se finalizează lansarea",
+ "teamLaunched": "Echipă lansată",
+ "launchingTeam": "Se lansează echipa"
+ }
+ }
+ },
+ "liveRuntimeStatus": {
+ "title": "Stare runtime live",
+ "description": "Bătaie de inimă și stare de lansare doar pentru afișare. Controalele procesului rămân mai jos.",
+ "source": "sursă: {{source}}",
+ "lane": "lanul {{lane}}",
+ "diagnosticOnly": "Doar diagnostic",
+ "updated": "actualizat {{value}}",
+ "states": {
+ "running": "În execuție",
+ "starting": "Se pornește",
+ "waiting": "Se așteaptă",
+ "degraded": "Necesită atenție",
+ "stopped": "Oprit",
+ "unknown": "Necunoscut"
+ }
+ },
+ "taskLogs": {
+ "exact": {
+ "title": "Jurnale exacte de sarcină",
+ "loading": "Se încarcă jurnalele exacte de sarcină...",
+ "description": "Fragmente exacte de transcript randate cu aceleași componente de jurnal de execuție folosite în Jurnale.",
+ "emptyTitle": "Niciun jurnal exact de sarcină încă",
+ "emptyDescription": "Pachetele exacte de transcript vor apărea aici când sunt disponibile metadate explicite de transcript legate de sarcină.",
+ "summaryOnly": "doar rezumat"
+ },
+ "executionSessions": {
+ "title": "Sesiuni de execuție",
+ "online": "Online",
+ "updating": "Se actualizează...",
+ "description": "Răsfoire și previzualizări de transcript centrate pe sesiune (versiune veche)."
+ },
+ "stream": {
+ "title": "Flux de jurnale de sarcină"
+ }
+ },
+ "kanban": {
+ "taskCard": {
+ "cancelTask": "Anulează sarcina {{taskId}}",
+ "cancel": "Anulează",
+ "moveBackToTodoConfirm": "Muți această sarcină înapoi la DE FĂCUT și notifici echipa?",
+ "confirm": "Confirmă",
+ "keep": "Păstrează",
+ "changesNeedAttention": "Modificările necesită atenție",
+ "changes": "Modificări",
+ "deleteTask": "Șterge sarcina",
+ "taskLogsActive": "Jurnale de sarcină active",
+ "newTaskLogsArriving": "Sosesc jurnale noi de sarcină",
+ "awaitingUser": "Se așteaptă utilizatorul",
+ "awaitingLead": "Se așteaptă liderul",
+ "blockedBy": "Blocată de",
+ "blocks": "Blochează",
+ "start": "Pornește",
+ "complete": "Finalizează",
+ "approve": "Aprobă",
+ "requestReview": "Solicită revizuire",
+ "manualReview": "Revizuire manuală",
+ "requestChanges": "Solicită modificări"
+ },
+ "filter": {
+ "title": "Filtrează sarcinile",
+ "session": "Sesiune",
+ "allSessions": "Toate sesiunile",
+ "teammate": "Coechipier",
+ "unassigned": "(neatribuit)",
+ "column": "Coloană",
+ "clearAll": "Șterge tot"
+ },
+ "board": {
+ "addTask": "Adaugă sarcină",
+ "noTasks": "Nicio sarcină",
+ "showMore": "Arată încă {{count}}",
+ "hiddenCount": "{{count}} ascunse",
+ "trash": "Coș de gunoi",
+ "gridView": "Vizualizare grilă",
+ "columnsView": "Vizualizare coloane"
+ },
+ "trash": {
+ "title": "Coș de gunoi",
+ "empty": "Nicio sarcină ștearsă",
+ "subject": "Subiect",
+ "owner": "Proprietar",
+ "deleted": "Ștearsă",
+ "unassigned": "Neatribuit",
+ "restoreTask": "Restaurează sarcina",
+ "restore": "Restaurează",
+ "close": "Închide"
+ },
+ "sort": {
+ "title": "Sortează sarcinile",
+ "sortBy": "Sortează după",
+ "reset": "Resetează",
+ "options": {
+ "updatedAt": {
+ "label": "Ultima actualizare",
+ "description": "Cele actualizate recent primele"
+ },
+ "createdAt": {
+ "label": "Creată",
+ "description": "Cele mai noi primele"
+ },
+ "owner": {
+ "label": "Proprietar",
+ "description": "Alfabetic după responsabil"
+ },
+ "manual": {
+ "label": "Manual",
+ "description": "Ordine prin trage și plasează"
+ }
+ }
+ },
+ "search": {
+ "clearSearch": "Șterge căutarea",
+ "tasks": "Sarcini",
+ "createdAgo": "creată {{time}}",
+ "updatedAgo": "actualizată {{time}}",
+ "placeholder": "Caută sarcini... (#id sau text)"
+ },
+ "grid": {
+ "addTask": "Adaugă sarcină",
+ "noTasks": "Nicio sarcină"
+ },
+ "title": "Kanban",
+ "columns": {
+ "todo": "DE FĂCUT",
+ "inProgress": "ÎN CURS",
+ "review": "REVIZUIRE",
+ "done": "FINALIZAT",
+ "approved": "APROBAT"
+ }
+ },
+ "worktreeGitReadiness": {
+ "checking": "Se verifică starea depozitului Git pentru worktree-urile coechipierilor...",
+ "ready": "Worktree-urile Git sunt pregătite.",
+ "readyOnBranch": "Worktree-urile Git sunt pregătite pe ramura {{branch}}.",
+ "needsSetup": "Izolarea worktree necesită configurare Git",
+ "initialCommitNotice": "Acțiunea de commit inițial pregătește și comite toate fișierele curente cu mesajul",
+ "initializeRepository": "Inițializează depozitul Git",
+ "createInitialCommit": "Creează commit-ul inițial",
+ "initialCommitMessage": "chore: initial commit"
+ },
+ "toolApproval": {
+ "settings": "Setări",
+ "autoAllowAllTools": "Permite automat toate uneltele",
+ "autoAllowFileEdits": "Permite automat editările de fișiere (Edit, Write, NotebookEdit)",
+ "autoAllowSafeCommands": "Permite automat comenzile sigure (git, pnpm, npm, ls...)",
+ "onTimeout": "La expirare:",
+ "after": "după",
+ "secondsShort": "sec",
+ "timeoutActions": {
+ "wait": "Așteaptă la nesfârșit",
+ "allow": "Permite",
+ "deny": "Refuză"
+ },
+ "submit": "Trimite",
+ "allow": "Permite",
+ "deny": "Refuză",
+ "allowAll": "Permite tot",
+ "pendingCount": "{{count}} în așteptare",
+ "autoActionIn": "{{action}} automat în {{time}}",
+ "diff": {
+ "previewChanges": "Previzualizează modificările",
+ "readingFile": "Se citește fișierul...",
+ "binaryFile": "Fișier binar - nu se poate previzualiza",
+ "truncated": "Fișier trunchiat la 2MB - diff-ul poate fi incomplet",
+ "newFile": "Fișier nou"
+ }
+ },
+ "memberWorkSync": {
+ "details": {
+ "title": "Sincronizare muncă membru",
+ "actionableItems": "Elemente acționabile",
+ "fingerprint": "Amprentă",
+ "report": "Raport",
+ "none": "niciunul",
+ "shadowWouldNudge": "Shadow ar trimite memento",
+ "yes": "da",
+ "no": "nu",
+ "moreActionableItems": "încă {{count}} element(e) acționabil(e)",
+ "diagnostics": "Diagnostice: {{diagnostics}}"
+ },
+ "title": "Sincronizare muncă membru",
+ "loadingDiagnostics": "Se încarcă diagnosticele de sincronizare a muncii membrului.",
+ "diagnosticsUnavailable": "Diagnosticele de sincronizare a muncii membrului sunt indisponibile."
+ },
+ "advancedCli": {
+ "title": "Avansat",
+ "useWorktree": "Folosește worktree",
+ "recent": "Recente",
+ "commandPreview": "Previzualizare comandă",
+ "customArguments": "Argumente personalizate",
+ "validate": "Validează",
+ "validation": {
+ "allFlagsValid": "Toate flag-urile valide",
+ "unknownFlags": "Necunoscute: {{flags}}",
+ "protectedFlags": "Protejate: {{flags}}",
+ "failed": "Validarea a eșuat"
+ },
+ "placeholders": {
+ "worktreeName": "nume-worktree"
+ }
+ },
+ "processes": {
+ "ago": "acum {{time}}",
+ "stoppedAgo": "oprit acum {{time}}",
+ "running": "În execuție",
+ "stopped": "Oprit",
+ "stopProcess": "Oprește procesul (SIGTERM)",
+ "kill": "Termină forțat",
+ "openInBrowser": "Deschide în browser",
+ "open": "Deschide",
+ "pid": "PID{{pid}}",
+ "title": "Procese CLI"
+ },
+ "taskActivity": {
+ "loadingDetails": "Se încarcă detaliile activității...",
+ "contextUnavailable": "Contextul detaliat al transcriptului nu mai este disponibil pentru această activitate.",
+ "loading": "Se încarcă activitatea sarcinii...",
+ "lowSignalOnly": "Nicio activitate cheie de sarcină nu a fost găsită încă. Detaliile de execuție de nivel scăzut sunt disponibile mai jos în Flux de jurnale de sarcină.",
+ "empty": "Nicio activitate explicită de sarcină nu a fost găsită încă în transcripturile disponibile. Jurnalele de sesiune mai vechi sau euristice pot fi totuși disponibile mai jos în Sesiuni de execuție.",
+ "title": "Activitate sarcină",
+ "description": "Activitate runtime explicită cheie legată de această sarcină din metadatele transcriptului."
+ },
+ "sendMessage": {
+ "title": "Trimite mesaj",
+ "description": "Trimite un mesaj direct unui membru al echipei.",
+ "recipientLabel": "Destinatar",
+ "selectMemberPlaceholder": "Selectează membrul...",
+ "messageLabel": "Mesaj",
+ "placeholder": "Scrie mesajul tău... (Enter pentru a trimite)",
+ "send": "Trimite",
+ "sending": "Se trimite...",
+ "charsLeft": "{{count}} caractere rămase",
+ "saved": "Salvat",
+ "attachments": {
+ "teamOnlineRequired": "Echipa trebuie să fie online pentru a atașa fișiere",
+ "recipientUnsupported": "Fișierele pot fi trimise liderului echipei sau coechipierilor OpenCode",
+ "openCodeOnlineRequired": "Echipa trebuie să fie online pentru a atașa fișiere pentru coechipierii OpenCode",
+ "disabledHint": "Atașamentele de fișiere sunt acceptate pentru liderul echipei online și pentru coechipierii OpenCode online. Elimină atașamentele sau schimbă destinatarul.",
+ "attachFiles": "Atașează fișiere (lipește sau trage și plasează)",
+ "unavailable": "Atașamentele sunt indisponibile"
+ },
+ "quote": {
+ "remove": "Elimină citatul",
+ "replyingTo": "Se răspunde la"
+ }
+ },
+ "taskComments": {
+ "cancelReply": "Anulează răspunsul",
+ "replyingTo": "Se răspunde la",
+ "placeholder": "Adaugă un comentariu... (Enter pentru a trimite)",
+ "attachFile": "Atașează fișier (sau lipește)",
+ "voiceToText": "Voce în text",
+ "comment": "Comentariu",
+ "charsLeft": "{{count}} caractere rămase",
+ "saved": "Salvat",
+ "awaitingReplyFrom": "Se așteaptă răspunsul de la",
+ "or": "sau"
+ },
+ "taskAttachments": {
+ "dropImageHere": "Plasează imaginea aici",
+ "attachImage": "Atașează imagine",
+ "pasteOrDragDrop": "sau lipește / trage și plasează",
+ "fromOriginalMessage": "Din mesajul original",
+ "dropFilesHere": "Plasează fișierele aici",
+ "loading": "Se încarcă atașamentele..."
+ },
+ "permissions": {
+ "autoApproveAllTools": "Aprobă automat toate uneltele",
+ "autonomousModeDescription": "Mod autonom: uneltele echipei se execută fără confirmare. Fii precaut cu codul nesigur.",
+ "manualModeDescription": "Mod manual: vei aproba sau refuza fiecare apel de unealtă în timp real."
+ },
+ "memberLogStream": {
+ "tabs": {
+ "execution": "Execuție",
+ "process": "Proces"
+ },
+ "filters": {
+ "all": "Toate"
+ },
+ "logs": {
+ "title": "Jurnale",
+ "loading": "Se încarcă fluxul de jurnale al membrului...",
+ "emptyTitle": "Nicio intrare în fluxul de jurnale nu a fost găsită pentru acest membru încă.",
+ "emptyDescription": "Jurnalele de transcript sau runtime la nivel de membru vor apărea aici când sunt disponibile."
+ }
+ },
+ "reviewDialog": {
+ "placeholder": "Descrie ce trebuie schimbat... (Enter pentru a trimite)",
+ "submit": "Trimite",
+ "charsLeft": "{{count}} caractere rămase",
+ "saved": "Salvat",
+ "title": "Solicită modificări"
+ },
+ "dialogs": {
+ "actions": {
+ "openDashboard": "Deschide panoul",
+ "openTeam": "Deschide echipa",
+ "cancel": "Anulează"
+ },
+ "membersJson": {
+ "hide": "Ascunde JSON"
+ },
+ "optional": {
+ "badge": "Opțional"
+ }
+ },
+ "runningTeams": {
+ "title": "Echipe în execuție",
+ "status": {
+ "active": "Activă",
+ "provisioning": "Se lansează",
+ "idle": "În execuție"
+ },
+ "noProject": "Niciun proiect"
+ },
+ "layout": {
+ "maxPanesReached": "S-a atins maximul de {{count}} panouri"
+ },
+ "codexReconnect": {
+ "description": "Sesiunea ta Codex pare învechită. Reconectează-te pentru a continua.",
+ "useCode": "Folosește codul",
+ "generating": "Se generează...",
+ "openLogin": "Deschide autentificarea",
+ "generateLink": "Generează link"
+ },
+ "effortLevel": {
+ "label": "Nivel de efort (opțional)",
+ "maxDescription": "Max oferă modelului cel mai mult timp de raționament pentru sarcini dificile."
+ },
+ "contextLimit": {
+ "limitTo200k": "Limitează contextul la 200K tokenuri",
+ "always200k": "(întotdeauna 200K pentru acest model)",
+ "tooltipContent": "Menține lansările într-o fereastră de context de 200K tokenuri când este acceptat.",
+ "tooltipTitle": "Limită de context"
+ },
+ "roleSelect": {
+ "noRole": "Niciun rol",
+ "customRole": "Rol personalizat...",
+ "searchPlaceholder": "Caută roluri...",
+ "empty": "Niciun rol găsit.",
+ "reservedRole": "Acest rol este rezervat",
+ "emptyCustomRole": "Rolul nu poate fi gol"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ru/common.json b/src/features/localization/renderer/locales/ru/common.json
index c10e65dd..bc2093cc 100644
--- a/src/features/localization/renderer/locales/ru/common.json
+++ b/src/features/localization/renderer/locales/ru/common.json
@@ -62,21 +62,36 @@
"locales": {
"emptyMessage": "Язык не найден.",
"names": {
- "en": "Английский",
- "ru": "Русский",
- "zh": "Китайский",
- "ja": "Японский",
- "ko": "Корейский",
- "es": "Испанский",
- "hi": "Хинди",
- "pt": "Португальский",
- "fr": "Французский",
"ar": "Арабский",
"bn": "Бенгальский",
- "ur": "Урду",
- "id": "Индонезийский",
"de": "Немецкий",
- "system": "Системный"
+ "en": "Английский",
+ "es": "Испанский",
+ "fa": "Персидский",
+ "fil": "Филиппинский",
+ "fr": "Французский",
+ "hi": "Хинди",
+ "id": "Индонезийский",
+ "it": "Итальянский",
+ "ja": "Японский",
+ "ko": "Корейский",
+ "mr": "Маратхи",
+ "ms": "Малайский",
+ "nl": "Нидерландский",
+ "pl": "Польский",
+ "pt": "Португальский",
+ "ro": "Румынский",
+ "ru": "Русский",
+ "sw": "Суахили",
+ "system": "Системный",
+ "ta": "Тамильский",
+ "te": "Телугу",
+ "th": "Тайский",
+ "tr": "Турецкий",
+ "uk": "Украинский",
+ "ur": "Урду",
+ "vi": "Вьетнамский",
+ "zh": "Китайский"
},
"searchPlaceholder": "Поиск языка...",
"selectPlaceholder": "Выберите язык интерфейса...",
diff --git a/src/features/localization/renderer/locales/ru/team.json b/src/features/localization/renderer/locales/ru/team.json
index 8c978993..cf104da6 100644
--- a/src/features/localization/renderer/locales/ru/team.json
+++ b/src/features/localization/renderer/locales/ru/team.json
@@ -1496,7 +1496,7 @@
},
"status": {
"reusedCrossTeamRequest": "Повторно использован недавний cross-team request",
- "teamOffline": "Команда offline"
+ "teamOffline": "оффлайн"
},
"revision": {
"editing": "Редактируется предыдущее сообщение",
diff --git a/src/features/localization/renderer/locales/sw/common.json b/src/features/localization/renderer/locales/sw/common.json
new file mode 100644
index 00000000..13b38a6e
--- /dev/null
+++ b/src/features/localization/renderer/locales/sw/common.json
@@ -0,0 +1,927 @@
+{
+ "actions": {
+ "cancel": "Ghairi",
+ "close": "Funga",
+ "copied": "Imenakiliwa",
+ "copyUrl": "Nakili URL",
+ "open": "Fungua",
+ "reveal": "Onyesha",
+ "retry": "Jaribu tena",
+ "save": "Hifadhi",
+ "showLess": "Onyesha kidogo",
+ "showMore": "Onyesha zaidi",
+ "refresh": "Onyesha upya",
+ "reset": "Weka upya",
+ "copyToClipboard": "Nakili kwenye ubao wa kunakili",
+ "moreActions": "Vitendo zaidi",
+ "closeDialog": "Funga kidirisha",
+ "goToDashboard": "Nenda kwenye Dashibodi",
+ "or": "au",
+ "hide": "Ficha",
+ "resetSelection": "Weka upya uteuzi"
+ },
+ "code": {
+ "line": "mstari {{line}}",
+ "lines": "mistari {{from}}-{{to}}",
+ "moreLines": "(mistari {{count}} zaidi...)",
+ "moreLines_few": "(mistari {{count}} zaidi...)",
+ "moreLines_many": "(mistari {{count}} zaidi...)",
+ "moreLines_one": "(mstari {{count}} zaidi...)",
+ "moreLines_other": "(mistari {{count}} zaidi...)",
+ "code": "Msimbo",
+ "preview": "Hakikisho",
+ "markdownPreview": "Hakikisho la Markdown",
+ "linesParenthesized": "(mistari {{from}}-{{to}})",
+ "mermaidSyntaxError": "Hitilafu ya sintaksia ya Mermaid"
+ },
+ "contextBadge": {
+ "badge": "Muktadha",
+ "breakdown": {
+ "text": "Maandishi",
+ "thinking": "Kufikiri"
+ },
+ "detailsAria": "Maelezo ya udungaji wa muktadha",
+ "sectionSummary": "{{title}} ({{count}}) ~tokeni {{tokens}}",
+ "sections": {
+ "claudeMdFiles": "Faili za CLAUDE.md",
+ "mentionedFiles": "Faili Zilizotajwa",
+ "taskCoordination": "Uratibu wa Kazi",
+ "thinkingText": "Kufikiri + Maandishi",
+ "toolOutputs": "Matokeo ya Zana",
+ "userMessages": "Ujumbe wa Mtumiaji"
+ },
+ "title": "Muktadha Mpya Uliodungwa Katika Zamu Hii",
+ "tokenCount": "~tokeni {{tokens}}",
+ "totalNewTokens": "Jumla ya tokeni mpya",
+ "turn": "Zamu {{turn}}",
+ "sectionSummary_few": "{{title}} ({{count}}) ~tokeni {{tokens}}",
+ "sectionSummary_many": "{{title}} ({{count}}) ~tokeni {{tokens}}",
+ "sectionSummary_one": "{{title}} ({{count}}) ~tokeni {{tokens}}",
+ "sectionSummary_other": "{{title}} ({{count}}) ~tokeni {{tokens}}"
+ },
+ "locales": {
+ "emptyMessage": "Hakuna lugha iliyopatikana.",
+ "names": {
+ "ar": "Kiarabu",
+ "bn": "Kibengali",
+ "de": "Kijerumani",
+ "en": "Kiingereza",
+ "es": "Kihispania",
+ "fa": "Kiajemi",
+ "fil": "Kifilipino",
+ "fr": "Kifaransa",
+ "hi": "Kihindi",
+ "id": "Kiindonesia",
+ "it": "Kiitaliano",
+ "ja": "Kijapani",
+ "ko": "Kikorea",
+ "mr": "Kimarathi",
+ "ms": "Kimalei",
+ "nl": "Kiholanzi",
+ "pl": "Kipolandi",
+ "pt": "Kireno",
+ "ro": "Kiromania",
+ "ru": "Kirusi",
+ "sw": "Kiswahili",
+ "system": "Mfumo",
+ "ta": "Kitamil",
+ "te": "Kitelugu",
+ "th": "Kithai",
+ "tr": "Kituruki",
+ "uk": "Kiukreni",
+ "ur": "Kiurdu",
+ "vi": "Kivietinamu",
+ "zh": "Kichina"
+ },
+ "searchPlaceholder": "Tafuta lugha...",
+ "selectPlaceholder": "Chagua lugha ya programu...",
+ "systemWithResolved": "Mfumo - {{locale}}"
+ },
+ "members": {
+ "emptyMessage": "Hakuna wanachama waliopatikana.",
+ "searchPlaceholder": "Tafuta wanachama...",
+ "unassigned": "Hawajakabidhiwa",
+ "teammateFallback": "mwenzako wa timu"
+ },
+ "providerRuntime": {
+ "codex": {
+ "install": {
+ "checking": "Inakagua",
+ "downloading": "Inapakua",
+ "installCli": "Sakinisha Codex CLI",
+ "installing": "Inasakinisha",
+ "retryInstall": "Jaribu tena kusakinisha"
+ }
+ }
+ },
+ "search": {
+ "noMatchingSuggestions": "Hakuna mapendekezo yanayolingana",
+ "searching": "Inatafuta...",
+ "searchingFiles": "Inatafuta faili...",
+ "findInConversation": "Tafuta katika mazungumzo...",
+ "resultCount": "{{current}} kati ya {{total}}",
+ "resultCountCapped": "{{current}} kati ya {{total}}+",
+ "noResults": "Hakuna matokeo",
+ "previousResultShortcut": "Matokeo yaliyotangulia (Shift+Enter)",
+ "nextResultShortcut": "Matokeo yanayofuata (Enter)",
+ "closeShortcut": "Funga (Esc)",
+ "nothingFound": "Hakuna kilichopatikana",
+ "placeholder": "Tafuta..."
+ },
+ "schedules": {
+ "actions": {
+ "addSchedule": "Ongeza Ratiba",
+ "clearFilters": "Futa vichujio",
+ "createSchedule": "Unda Ratiba",
+ "delete": "Futa",
+ "edit": "Hariri",
+ "pause": "Sitisha",
+ "resume": "Endelea",
+ "runNow": "Endesha sasa"
+ },
+ "empty": {
+ "description": "Unda ratiba kwenye timu yoyote ili kuotomatisha utekelezaji wa kazi za Claude kwa kutumia maneno ya cron. Ratiba kutoka timu zote zitaonekana hapa.",
+ "noMatches": "Hakuna ratiba zinazolingana na vichujio vya sasa",
+ "title": "Hakuna kazi zilizopangwa"
+ },
+ "filters": {
+ "allTeams": "Timu zote"
+ },
+ "item": {
+ "loadingRunHistory": "Inapakia historia ya mwendo...",
+ "nextRun": "Inayofuata: {{value}}",
+ "noRunsYet": "Bado hakuna mwendo"
+ },
+ "loading": "Inapakia ratiba...",
+ "searchPlaceholder": "Tafuta ratiba...",
+ "status": {
+ "active": "Hai",
+ "all": "Zote",
+ "disabled": "Imezimwa",
+ "paused": "Imesitishwa"
+ },
+ "title": "Ratiba"
+ },
+ "sessions": {
+ "actions": {
+ "hide": "Ficha",
+ "pin": "Bandika",
+ "unhide": "Ondoa kuficha"
+ },
+ "empty": {
+ "noMatchingSessions": "Hakuna vipindi vinavyolingana",
+ "noMatchingSessionsDescription": "Mradi huu bado hauna vipindi vinavyolingana.",
+ "noMatchingSessionsFiltered": "Jaribu hoja nyingine au weka upya kichujio cha mtoa huduma.",
+ "noSessions": "Hakuna vipindi vilivyopatikana",
+ "noSessionsDescription": "Mradi huu bado hauna vipindi",
+ "selectProject": "Chagua mradi ili kuona vipindi"
+ },
+ "errors": {
+ "loading": "Hitilafu kupakia vipindi"
+ },
+ "loadedMatchingMore": "Vipindi {{count}} vinavyolingana vimepakiwa hadi sasa - sogeza chini kupakia zaidi.",
+ "loadingMore": "Inapakia vipindi zaidi...",
+ "pinned": "Imebandikwa",
+ "scrollToLoadMore": "Sogeza kupakia zaidi",
+ "search": {
+ "clear": "Futa utafutaji wa kipindi",
+ "placeholder": "Tafuta vipindi..."
+ },
+ "selection": {
+ "cancel": "Ghairi uteuzi",
+ "exitMode": "Toka hali ya uteuzi",
+ "hideSelected": "Ficha vipindi vilivyochaguliwa",
+ "pinSelected": "Bandika vipindi vilivyochaguliwa",
+ "selectSessions": "Chagua vipindi",
+ "selected": "{{count}} vimechaguliwa",
+ "unhideSelected": "Ondoa kuficha vipindi vilivyochaguliwa",
+ "selected_few": "{{count}} vimechaguliwa",
+ "selected_many": "{{count}} vimechaguliwa",
+ "selected_one": "{{count}} kimechaguliwa",
+ "selected_other": "{{count}} vimechaguliwa"
+ },
+ "sort": {
+ "byContext": "Kwa Muktadha",
+ "byContextTooltip": "Panga kwa matumizi ya muktadha",
+ "byRecentTooltip": "Panga kwa hivi karibuni",
+ "contextLoadedOnly": "Upangaji wa muktadha hupanga tu vipindi vilivyopakiwa."
+ },
+ "title": "Vipindi",
+ "visibility": {
+ "hideHidden": "Ficha vipindi vilivyofichwa",
+ "showHidden": "Onyesha vipindi vilivyofichwa"
+ },
+ "worktree": {
+ "switch": "Badilisha Worktree"
+ },
+ "loadedMatchingMore_few": "Vipindi {{count}} vinavyolingana vimepakiwa hadi sasa - sogeza chini kupakia zaidi.",
+ "loadedMatchingMore_many": "Vipindi {{count}} vinavyolingana vimepakiwa hadi sasa - sogeza chini kupakia zaidi.",
+ "loadedMatchingMore_one": "Kipindi {{count}} kinacholingana kimepakiwa hadi sasa - sogeza chini kupakia zaidi.",
+ "loadedMatchingMore_other": "Vipindi {{count}} vinavyolingana vimepakiwa hadi sasa - sogeza chini kupakia zaidi.",
+ "failedToLoad": "Imeshindwa kupakia kipindi",
+ "loading": "Inapakia kipindi...",
+ "filter": {
+ "title": "Chuja vipindi"
+ },
+ "count": "vipindi {{count}}",
+ "count_one": "kipindi {{count}}",
+ "count_other": "vipindi {{count}}",
+ "count_few": "vipindi {{count}}",
+ "count_many": "vipindi {{count}}",
+ "inProgress": "Kipindi kinaendelea..."
+ },
+ "states": {
+ "loading": "Inapakia...",
+ "offline": "Nje ya mtandao",
+ "online": "Mtandaoni",
+ "unknown": "Haijulikani",
+ "error": "Hitilafu"
+ },
+ "markdown": {
+ "imageFallback": "[Picha: {{label}}]",
+ "largeContentNotice": "Maudhui ni makubwa sana (herufi {{count}}). Inaonyesha hakikisho ghafi ili kuweka UI ikiwa nadhifu.",
+ "largeContentTitle": "Maudhui makubwa yanaonyeshwa kama ghafi ili kuzuia UI kuganda",
+ "raw": "Ghafi",
+ "rawPreview": "Hakikisho ghafi",
+ "renderMarkdown": "Onyesha markdown",
+ "showAll": "Onyesha vyote",
+ "showMore": "Onyesha zaidi",
+ "showRaw": "Onyesha ghafi",
+ "showingChars": "Inaonyesha herufi {{shown}} / {{total}}",
+ "largeContentNotice_few": "Maudhui ni makubwa sana (herufi {{count}}). Inaonyesha hakikisho ghafi ili kuweka UI ikiwa nadhifu.",
+ "largeContentNotice_many": "Maudhui ni makubwa sana (herufi {{count}}). Inaonyesha hakikisho ghafi ili kuweka UI ikiwa nadhifu.",
+ "largeContentNotice_one": "Maudhui ni makubwa sana (herufi {{count}}). Inaonyesha hakikisho ghafi ili kuweka UI ikiwa nadhifu.",
+ "largeContentNotice_other": "Maudhui ni makubwa sana (herufi {{count}}). Inaonyesha hakikisho ghafi ili kuweka UI ikiwa nadhifu."
+ },
+ "terminal": {
+ "checkOutputForDetails": "Kagua matokeo ya terminal hapo juu kwa maelezo",
+ "closingInSeconds": "Inafunga baada ya sekunde {{count}}...",
+ "closingInSeconds_few": "Inafunga baada ya sekunde {{count}}...",
+ "closingInSeconds_many": "Inafunga baada ya sekunde {{count}}...",
+ "closingInSeconds_one": "Inafunga baada ya sekunde {{count}}...",
+ "closingInSeconds_other": "Inafunga baada ya sekunde {{count}}...",
+ "completedSuccessfully": "Imekamilika kwa mafanikio",
+ "exitCode": "(msimbo wa kutoka {{code}})",
+ "processFailed": "Mchakato umeshindwa",
+ "title": "Terminal"
+ },
+ "tokens": {
+ "accumulatedWithoutDuplication": "Imekusanywa katika kipindi kizima bila kurudufu",
+ "cacheRead": "Usomaji wa Akiba",
+ "cacheWrite": "Uandishi wa Akiba",
+ "costUsd": "Gharama (USD)",
+ "inputTokens": "Tokeni za Ingizo",
+ "model": "Modeli",
+ "outputTokens": "Tokeni za Towe",
+ "phase": "Awamu {{phase}}/{{total}}",
+ "promptInputShare": "{{percent}}% ya ingizo la kidokezo",
+ "taskCoordination": "Uratibu wa Kazi",
+ "thinkingText": "Kufikiri + Maandishi",
+ "toolOutputs": "Matokeo ya Zana",
+ "total": "Jumla",
+ "userMessages": "Ujumbe wa Mtumiaji",
+ "visibleContext": "Muktadha Unaoonekana",
+ "includesClaudeMd": "ikiwa na CLAUDE.md ×{{count}}",
+ "claudeMd": "CLAUDE.md",
+ "mentionedFiles": "@files",
+ "percentValue": "({{percent}}%)",
+ "approxTokens": "~tokeni {{tokens}}",
+ "approxTokensParenthesized": "(~{{tokens}})"
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Nakili timu",
+ "createTeam": "Unda Timu",
+ "deleteForever": "Futa kabisa",
+ "deletePermanently": "Futa kwa kudumu",
+ "deleteTeam": "Futa timu",
+ "launching": "Inazindua...",
+ "launchTeam": "Zindua timu",
+ "relaunchTeam": "Zindua tena timu",
+ "restore": "Rejesha",
+ "restoreTeam": "Rejesha timu",
+ "retry": "Jaribu tena",
+ "stopTeam": "Simamisha timu",
+ "stopping": "Inasimamisha..."
+ },
+ "status": {
+ "active": "Hai",
+ "deleted": "Imefutwa",
+ "launching": "Inazindua...",
+ "offline": "Nje ya mtandao",
+ "partialFailure": "Uzinduzi umeshindwa katikati",
+ "partialPending": "Bootstrap inasubiri",
+ "partialSkipped": "Uzinduzi umeruka mwanachama",
+ "running": "Inaendeshwa"
+ },
+ "partial": {
+ "pending": "Uzinduzi wa mwisho bado unapatanishwa.",
+ "skipped": "Uzinduzi wa mwisho umeruka wenzako wa timu.",
+ "skippedWithCount": "Uzinduzi wa mwisho uliruka mwenzako wa timu {{count}}/{{expected}}.",
+ "skippedWithCount_few": "Uzinduzi wa mwisho uliruka wenzako wa timu {{count}}/{{expected}}.",
+ "skippedWithCount_many": "Uzinduzi wa mwisho uliruka wenzako wa timu {{count}}/{{expected}}.",
+ "skippedWithCount_one": "Uzinduzi wa mwisho uliruka mwenzako wa timu {{count}}/{{expected}}.",
+ "skippedWithCount_other": "Uzinduzi wa mwisho uliruka wenzako wa timu {{count}}/{{expected}}.",
+ "stopped": "Uzinduzi wa mwisho ulisimama kabla ya wenzako wote wa timu kujiunga.",
+ "stoppedWithCount": "Uzinduzi wa mwisho ulisimama kabla ya mwenzako wa timu {{count}}/{{expected}} kujiunga.",
+ "stoppedWithCount_few": "Uzinduzi wa mwisho ulisimama kabla ya wenzako wa timu {{count}}/{{expected}} kujiunga.",
+ "stoppedWithCount_many": "Uzinduzi wa mwisho ulisimama kabla ya wenzako wa timu {{count}}/{{expected}} kujiunga.",
+ "stoppedWithCount_one": "Uzinduzi wa mwisho ulisimama kabla ya mwenzako wa timu {{count}}/{{expected}} kujiunga.",
+ "stoppedWithCount_other": "Uzinduzi wa mwisho ulisimama kabla ya wenzako wa timu {{count}}/{{expected}} kujiunga."
+ },
+ "noDescription": "Hakuna maelezo",
+ "solo": "Peke yake",
+ "membersCount": "Wanachama: {{count}}",
+ "membersCount_few": "Wanachama: {{count}}",
+ "membersCount_many": "Wanachama: {{count}}",
+ "membersCount_one": "Mwanachama: {{count}}",
+ "membersCount_other": "Wanachama: {{count}}",
+ "all": "Zote",
+ "moreCount": "+{{count}} zaidi",
+ "moreCount_one": "+{{count}} zaidi",
+ "moreCount_other": "+{{count}} zaidi",
+ "moreCount_few": "+{{count}} zaidi",
+ "moreCount_many": "+{{count}} zaidi"
+ },
+ "runtimeProvider": {
+ "defaults": {
+ "scopeDescriptionAllProjects": "Chaguo-msingi kwa kila mradi usio na ubatilishaji wake wa OpenCode.",
+ "scopeDescriptionProject": "Batilisha mradi uliochaguliwa pekee. Timu zinazoendeshwa hazibadilishwi.",
+ "setAllProjectsDefault": "Weka chaguo-msingi cha miradi yote",
+ "setProjectDefault": "Weka chaguo-msingi cha mradi",
+ "validationContext": "Muktadha wa uthibitishaji",
+ "projectOverrideContext": "Muktadha wa ubatilishaji wa mradi",
+ "selectProjectHint": "Chagua mradi kabla ya kujaribu modeli za ndani au kuhifadhi chaguo-msingi.",
+ "allProjectsHint": "Majaribio hutumia {{project}}. Chaguo-msingi hutumika isipokuwa mradi una ubatilishaji.",
+ "projectHint": "Kuhifadhi kunabatilisha {{project}} pekee."
+ }
+ },
+ "sessionContext": {
+ "header": {
+ "title": "Muktadha",
+ "closePanel": "Funga paneli",
+ "phase": "Awamu:",
+ "current": "Sasa",
+ "view": "Mwonekano:",
+ "category": "Kategoria",
+ "bySize": "Kwa Ukubwa"
+ },
+ "metrics": {
+ "unavailable": "Haipatikani",
+ "contextUsed": "Muktadha Uliotumika",
+ "promptInput": "Ingizo la Kidokezo",
+ "visibleContext": "Muktadha Unaoonekana",
+ "ofContext": "ya muktadha",
+ "ofPrompt": "ya kidokezo",
+ "codexTelemetryUnavailable": "Matumizi ya upande wa kidokezo wa Codex bado hayajaonyeshwa na telemetria ya runtime ya sasa, kwa hivyo Ingizo la Kidokezo na Muktadha Uliotumika hubaki kutopatikana badala ya kuonyesha sufuri ya uongo.",
+ "sessionCost": "Gharama ya Kipindi:",
+ "parentPlus": "mzazi +",
+ "subagents": "mawakala wadogo",
+ "details": "maelezo"
+ },
+ "help": {
+ "contextUsed": {
+ "title": "Muktadha Uliotumika",
+ "description": "Ingizo la kidokezo pamoja na tokeni za towe zinazochukua dirisha la muktadha la modeli kwa sasa."
+ },
+ "promptInput": {
+ "title": "Ingizo la Kidokezo",
+ "description": "Tokeni zilizotumwa kwa modeli kabla ya uzalishaji. Kwa Claude hii inajumuisha `input_tokens + cache_creation_input_tokens + cache_read_input_tokens`."
+ },
+ "visibleContext": {
+ "title": "Muktadha Unaoonekana",
+ "description": "Sehemu inayoweza kukaguliwa ya ingizo la kidokezo: faili, CLAUDE.md, matokeo ya zana, ujumbe wa mtumiaji, na udungaji kama huo unaoweza kuboresha moja kwa moja."
+ },
+ "availability": {
+ "title": "Upatikanaji",
+ "description": "Iwapo runtime ya mtoa huduma bado haionyeshi matumizi ya upande wa kidokezo, paneli huonyesha vipimo kama visivyopatikana badala ya kujifanya kuwa ni sufuri."
+ }
+ },
+ "items": {
+ "turn": "@Zamu {{turn}}",
+ "tokensApprox": "~tokeni {{tokens}}",
+ "toolsCount": "zana {{count}}",
+ "toolsCount_one": "zana {{count}}",
+ "toolsCount_other": "zana {{count}}",
+ "toolsCount_few": "zana {{count}}",
+ "toolsCount_many": "zana {{count}}",
+ "itemsCount": "vipengee {{count}}",
+ "itemsCount_one": "kipengee {{count}}",
+ "itemsCount_other": "vipengee {{count}}",
+ "itemsCount_few": "vipengee {{count}}",
+ "itemsCount_many": "vipengee {{count}}",
+ "missing": "haipo",
+ "thinking": "Kufikiri",
+ "text": "Maandishi"
+ },
+ "empty": "Hakuna udungaji wa muktadha uliogunduliwa katika kipindi hiki",
+ "view": {
+ "grouped": "Zilizopangwa",
+ "flat": "Tambarare"
+ },
+ "claudeMdFiles": "Faili za CLAUDE.md",
+ "mentionedFiles": "Faili Zilizotajwa"
+ },
+ "chat": {
+ "subagent": {
+ "fallbackName": "Wakala mdogo",
+ "shutdownConfirmed": "Kuzima kumethibitishwa",
+ "summary": {
+ "tools": "zana {{count}}",
+ "tools_one": "zana {{count}}",
+ "tools_other": "zana {{count}}",
+ "tools_few": "zana {{count}}",
+ "tools_many": "zana {{count}}"
+ },
+ "meta": {
+ "type": "Aina",
+ "duration": "Muda",
+ "model": "Modeli",
+ "id": "ID"
+ },
+ "metrics": {
+ "contextWindow": "Dirisha la Muktadha",
+ "contextUsage": "Matumizi ya Muktadha",
+ "mainContext": "Muktadha Mkuu",
+ "totalOutput": "Jumla ya Towe",
+ "turns": "(zamu {{count}})",
+ "turns_one": "(zamu {{count}})",
+ "turns_other": "(zamu {{count}})",
+ "subagentContext": "Muktadha wa Wakala Mdogo",
+ "phase": "Awamu {{phase}}",
+ "turns_few": "(zamu {{count}})",
+ "turns_many": "(zamu {{count}})"
+ },
+ "trace": {
+ "title": "Ufuatiliaji wa Utekelezaji"
+ }
+ },
+ "user": {
+ "you": "Wewe",
+ "showMore": "Onyesha zaidi",
+ "showLess": "Onyesha kidogo",
+ "backgroundTask": "Kazi ya usuli",
+ "exitCode": "kutoka {{code}}",
+ "imagesAttached": "picha {{count}} zimeambatishwa",
+ "imagesAttached_one": "picha {{count}} imeambatishwa",
+ "imagesAttached_few": "picha {{count}} zimeambatishwa",
+ "imagesAttached_many": "picha {{count}} zimeambatishwa",
+ "imagesAttached_other": "picha {{count}} zimeambatishwa"
+ },
+ "compact": {
+ "toggle": "Geuza maudhui yaliyobanwa",
+ "contextCompacted": "Muktadha umebanwa",
+ "freedTokens": "({{tokens}} zimeachiliwa)",
+ "phase": "Awamu {{phase}}",
+ "conversationCompacted": "Mazungumzo Yamebanwa",
+ "summary": "Ujumbe wa awali ulifupishwa ili kuhifadhi muktadha. Historia kamili ya mazungumzo imehifadhiwa katika faili ya kipindi.",
+ "compacted": "Imebanwa"
+ },
+ "executionTrace": {
+ "empty": "Hakuna vipengee vya utekelezaji",
+ "nested": "Iliyowekwa ndani: {{name}}",
+ "input": "Ingizo"
+ },
+ "items": {
+ "empty": "Hakuna vipengee vya kuonyesha"
+ },
+ "tools": {
+ "teammateSpawned": "Mwenzako wa timu ameundwa",
+ "shutdownRequested": "Kuzima kumeombwa ->",
+ "noResultReceived": "Hakuna matokeo yaliyopokelewa",
+ "duration": "Muda: {{duration}}",
+ "result": "Matokeo",
+ "write": {
+ "createdFile": "Faili imeundwa",
+ "wroteToFile": "Imeandikwa kwenye faili"
+ },
+ "skill": {
+ "instructions": "Maagizo ya Ujuzi",
+ "unknown": "Ujuzi Usiojulikana"
+ }
+ },
+ "lastOutput": {
+ "requestInterrupted": "Ombi limekatizwa na mtumiaji",
+ "planReadyForApproval": "Mpango Uko Tayari kwa Idhini"
+ },
+ "empty": {
+ "icon": "💬",
+ "title": "Hakuna historia ya mazungumzo",
+ "description": "Kipindi hiki bado hakina ujumbe wowote."
+ },
+ "context": {
+ "remainingPercent": "({{percent}}% zimebaki)",
+ "count": "Muktadha ({{count}})",
+ "count_one": "Muktadha ({{count}})",
+ "count_other": "Muktadha ({{count}})",
+ "count_few": "Muktadha ({{count}})",
+ "count_many": "Muktadha ({{count}})"
+ },
+ "scrollToBottom": "Sogeza chini kabisa",
+ "bottom": "Chini",
+ "teammateMessage": {
+ "message": "Ujumbe",
+ "resent": "Umetumwa tena",
+ "fallback": "Ujumbe wa mwenzako wa timu"
+ },
+ "system": {
+ "label": "Mfumo"
+ }
+ },
+ "tmuxInstaller": {
+ "summaryTitle": "tmux haijasakinishwa",
+ "detectedOs": "OS iliyogunduliwa: {{os}}",
+ "runtimePath": "Njia ya runtime: {{path}}",
+ "phase": "Awamu: {{phase}}",
+ "actions": {
+ "cancel": "Ghairi",
+ "manualGuide": "Mwongozo wa mkono",
+ "hideSetupSteps": "Ficha hatua za usanidi",
+ "showSetupSteps": "Onyesha hatua za usanidi ({{count}})",
+ "showSetupSteps_one": "Onyesha hatua ya usanidi ({{count}})",
+ "showSetupSteps_other": "Onyesha hatua za usanidi ({{count}})",
+ "recheck": "Kagua tena",
+ "showSetupSteps_few": "Onyesha hatua za usanidi ({{count}})",
+ "showSetupSteps_many": "Onyesha hatua za usanidi ({{count}})"
+ },
+ "installerProgress": "Maendeleo ya kisakinishi",
+ "input": {
+ "placeholder": "Tuma ingizo kwa kisakinishi",
+ "send": "Tuma ingizo",
+ "passwordNotice": "Ingizo la nenosiri linatumwa moja kwa moja kwa terminal ya kisakinishi na haliongezwi kwenye matokeo ya kumbukumbu."
+ },
+ "details": {
+ "show": "Onyesha maelezo",
+ "hide": "Ficha maelezo"
+ }
+ },
+ "commandPalette": {
+ "noRecentActivity": "Hakuna shughuli za hivi karibuni",
+ "sessionsCount": "vipindi {{count}}",
+ "sessionsCount_one": "kipindi {{count}}",
+ "sessionsCount_other": "vipindi {{count}}",
+ "mode": {
+ "searchProjects": "Tafuta miradi",
+ "searchAcrossProjects": "Tafuta katika miradi yote",
+ "searchInProject": "Tafuta katika mradi"
+ },
+ "currentProject": "Mradi wa sasa",
+ "global": "Kimataifa",
+ "placeholders": {
+ "projects": "Tafuta miradi...",
+ "conversations": "Tafuta mazungumzo..."
+ },
+ "empty": {
+ "noProjectsForQuery": "Hakuna miradi iliyopatikana kwa \"{{query}}\"",
+ "noProjects": "Hakuna miradi iliyopatikana",
+ "minChars": "Andika angalau herufi 2 ili kutafuta",
+ "noFastResults": "Hakuna matokeo ya haraka katika vipindi vya hivi karibuni kwa \"{{query}}\"",
+ "noResults": "Hakuna matokeo yaliyopatikana kwa \"{{query}}\""
+ },
+ "footer": {
+ "projectsCount": "miradi {{count}}",
+ "projectsCount_one": "mradi {{count}}",
+ "projectsCount_other": "miradi {{count}}",
+ "results": "matokeo {{count}} {{speed}}",
+ "results_one": "matokeo {{count}} {{speed}}",
+ "results_other": "matokeo {{count}} {{speed}}",
+ "resultsAcrossProjects": "matokeo {{count}} {{speed}}katika miradi yote",
+ "resultsAcrossProjects_one": "matokeo {{count}} {{speed}}katika miradi yote",
+ "resultsAcrossProjects_other": "matokeo {{count}} {{speed}}katika miradi yote",
+ "fastPrefix": "haraka ",
+ "typeToSearch": "Andika ili kutafuta",
+ "navigate": "nenda",
+ "select": "chagua",
+ "open": "fungua",
+ "global": "kimataifa",
+ "close": "funga",
+ "results_few": "matokeo {{count}} {{speed}}",
+ "results_many": "matokeo {{count}} {{speed}}",
+ "resultsAcrossProjects_few": "matokeo {{count}} {{speed}}katika miradi yote",
+ "resultsAcrossProjects_many": "matokeo {{count}} {{speed}}katika miradi yote",
+ "projectsCount_few": "miradi {{count}}",
+ "projectsCount_many": "miradi {{count}}",
+ "upDownKey": "↑↓",
+ "escapeKey": "esc"
+ },
+ "sessionsCount_few": "vipindi {{count}}",
+ "sessionsCount_many": "vipindi {{count}}"
+ },
+ "tasksPanel": {
+ "title": "Kazi",
+ "searchPlaceholder": "Tafuta kazi...",
+ "pinned": "Imebandikwa",
+ "groupByLabel": "Panga kwa:",
+ "groupByAria": "Panga kwa",
+ "groupModes": {
+ "none": "Hakuna",
+ "project": "Mradi",
+ "time": "Wakati"
+ },
+ "showArchived": "Onyesha zilizohifadhiwa kumbukumbu",
+ "hideArchived": "Ficha zilizohifadhiwa kumbukumbu",
+ "empty": {
+ "noMatchingTasks": "Hakuna kazi zinazolingana",
+ "noTasks": "Hakuna kazi zilizopatikana"
+ },
+ "teamLabel": "Timu: {{team}}",
+ "showMore": "Onyesha zaidi",
+ "showLess": "Onyesha kidogo",
+ "deleteConfirm": {
+ "title": "Futa kazi",
+ "message": "Hamisha kazi #{{taskId}} kwenye tupio?",
+ "confirmLabel": "Futa",
+ "cancelLabel": "Ghairi"
+ },
+ "deleteFailed": {
+ "title": "Imeshindwa kufuta kazi",
+ "fallbackMessage": "Hitilafu isiyotarajiwa imetokea",
+ "confirmLabel": "Sawa"
+ },
+ "sort": {
+ "byTime": "Kwa wakati",
+ "byUnread": "Kwa zisizosomwa",
+ "byProject": "Kwa mradi",
+ "byTeam": "Kwa timu"
+ }
+ },
+ "toolViewer": {
+ "input": "Ingizo",
+ "replaceAll": "(badilisha vyote)",
+ "noInputRecorded": "Hakuna ingizo lililorekodiwa kwa wito huu wa zana.",
+ "agent": {
+ "action": "kitendo",
+ "teammate": "mwenzako wa timu",
+ "team": "timu",
+ "runtime": "runtime",
+ "type": "aina",
+ "startupInstructionsHidden": "Maagizo ya uanzishaji yamefichwa katika UI."
+ }
+ },
+ "taskContextMenu": {
+ "unpin": "Ondoa kubandika",
+ "pin": "Bandika",
+ "rename": "Badilisha jina",
+ "markUnread": "Weka alama kuwa haijasomwa",
+ "unarchive": "Ondoa kwenye kumbukumbu",
+ "archive": "Hifadhi kumbukumbu",
+ "deleteTask": "Futa kazi"
+ },
+ "updateDialog": {
+ "closeDialog": "Funga kidirisha",
+ "updateAvailable": "Sasisho linapatikana",
+ "updateReady": "Sasisho Liko Tayari",
+ "noReleaseNotes": "Hakuna maelezo ya toleo yanayopatikana.",
+ "viewOnGitHub": "Tazama kwenye GitHub",
+ "later": "Baadaye",
+ "restartNow": "Anzisha upya sasa",
+ "download": "Pakua"
+ },
+ "errorBoundary": {
+ "title": "Hitilafu fulani imetokea",
+ "description": "Hitilafu isiyotarajiwa imetokea katika programu. Unaweza kujaribu kupakia upya ukurasa au kuweka upya hali ya hitilafu.",
+ "componentStack": "Rundo la Kijenzi",
+ "tryAgain": "Jaribu Tena",
+ "copied": "Imenakiliwa",
+ "copyErrorDetails": "Nakili Maelezo ya Hitilafu",
+ "reportBugOnGitHub": "Ripoti Hitilafu kwenye GitHub",
+ "reloadApp": "Pakia Upya Programu",
+ "diagnosticsNotice": "Ripoti za hitilafu za GitHub na utambuzi uliyonakiliwa zinajumuisha ujumbe wa hitilafu, ufuatiliaji wa rundo, toleo la programu, kichupo hai, timu iliyochaguliwa, muktadha wa kazi, na maelezo ya mazingira."
+ },
+ "runtimeBackendSelector": {
+ "label": "Backend ya runtime",
+ "resolved": "Imesuluhishwa: {{backend}}",
+ "current": "Sasa",
+ "recommended": "Inapendekezwa",
+ "unavailable": "Haipatikani",
+ "cannotSelectYet": "Backend hii haiwezi kuchaguliwa bado.",
+ "auto": "Otomatiki",
+ "autoCurrently": "Otomatiki (kwa sasa: {{backend}})",
+ "audience": {
+ "internal": "Ndani"
+ },
+ "states": {
+ "locked": "Imefungwa",
+ "disabled": "Imezimwa",
+ "authRequired": "Uthibitishaji unahitajika",
+ "runtimeMissing": "Runtime haipo",
+ "degraded": "Imedhoofika",
+ "unavailable": "Haipatikani"
+ }
+ },
+ "providerModelBadges": {
+ "checking": "Inakagua",
+ "unavailable": "Haipatikani",
+ "checkFailed": "Ukaguzi umeshindwa",
+ "free": "Bure",
+ "freeTooltip": "Imeripotiwa na metadata ya OpenCode. Upatikanaji na vikomo vinaweza kubadilika."
+ },
+ "taskFilters": {
+ "status": "Hali",
+ "clearAll": "Futa vyote",
+ "selectAll": "Chagua vyote",
+ "team": "Timu",
+ "allTeams": "Timu zote",
+ "searchTeams": "Tafuta timu...",
+ "noTeamsFound": "Hakuna timu zilizopatikana",
+ "project": "Mradi",
+ "allProjects": "Miradi Yote",
+ "searchProjects": "Tafuta miradi...",
+ "noProjects": "Hakuna miradi",
+ "comments": "Maoni",
+ "apply": "Tumia",
+ "read": {
+ "all": "Zote",
+ "unread": "Hazijasomwa",
+ "read": "Zilizosomwa"
+ },
+ "statusOptions": {
+ "todo": "YA KUFANYA",
+ "inProgress": "INAENDELEA",
+ "needsFix": "INAHITAJI MAREKEBISHO",
+ "done": "IMEKAMILIKA",
+ "review": "MAPITIO",
+ "approved": "IMEIDHINISHWA"
+ }
+ },
+ "sessionItem": {
+ "totalContext": "Jumla ya Muktadha: tokeni {{tokens}}",
+ "context": "Muktadha: {{tokens}}",
+ "phase": "Awamu {{phase}}:",
+ "compactedTo": "(imebanwa hadi {{tokens}})"
+ },
+ "notifications": {
+ "row": {
+ "team": "timu",
+ "subagent": "wakala mdogo",
+ "markAsRead": "Weka alama kuwa imesomwa",
+ "delete": "Futa",
+ "viewInSession": "Tazama katika kipindi"
+ },
+ "title": "Arifa",
+ "loading": "Inapakia arifa...",
+ "actions": {
+ "markFilteredAsRead": "Weka alama zilizochujwa kuwa zimesomwa",
+ "markAllAsRead": "Weka alama zote kuwa zimesomwa",
+ "markFilteredRead": "Weka zilizochujwa kuwa zimesomwa",
+ "markAllRead": "Weka zote kuwa zimesomwa",
+ "clearFilteredNotifications": "Futa arifa zilizochujwa",
+ "clearAllNotifications": "Futa arifa zote",
+ "clickToConfirm": "Bofya ili kuthibitisha",
+ "clearFiltered": "Futa zilizochujwa",
+ "clearAll": "Futa zote"
+ },
+ "counts": {
+ "unreadInFilter": "{{count}} hazijasomwa katika kichujio",
+ "unreadInFilter_one": "{{count}} haijasomwa katika kichujio",
+ "unreadInFilter_few": "{{count}} hazijasomwa katika kichujio",
+ "unreadInFilter_many": "{{count}} hazijasomwa katika kichujio",
+ "unreadInFilter_other": "{{count}} hazijasomwa katika kichujio",
+ "inFilter": "{{count}} katika kichujio",
+ "inFilter_one": "{{count}} katika kichujio",
+ "inFilter_few": "{{count}} katika kichujio",
+ "inFilter_many": "{{count}} katika kichujio",
+ "inFilter_other": "{{count}} katika kichujio",
+ "unread": "{{count}} hazijasomwa",
+ "unread_one": "{{count}} haijasomwa",
+ "unread_few": "{{count}} hazijasomwa",
+ "unread_many": "{{count}} hazijasomwa",
+ "unread_other": "{{count}} hazijasomwa",
+ "total": "{{count}} jumla",
+ "total_one": "{{count}} jumla",
+ "total_few": "{{count}} jumla",
+ "total_many": "{{count}} jumla",
+ "total_other": "{{count}} jumla"
+ },
+ "filters": {
+ "other": "Nyingine"
+ },
+ "empty": {
+ "noMatching": "Hakuna arifa zinazolingana",
+ "noNotifications": "Hakuna arifa",
+ "tryDifferentFilter": "Jaribu kichujio tofauti",
+ "allCaughtUp": "Umemaliza zote!"
+ }
+ },
+ "updates": {
+ "restartToUpdate": "Anzisha upya ili kusasisha",
+ "updateApp": "Sasisha programu",
+ "downloadedRestartTooltip": "Sasisho limepakuliwa, anzisha upya ili kutumia",
+ "newVersionAvailable": "Toleo jipya linapatikana",
+ "updatingApp": "Inasasisha programu",
+ "updateReady": "Sasisho liko tayari",
+ "restartNow": "Anzisha upya sasa"
+ },
+ "layout": {
+ "github": "GitHub",
+ "discord": "Discord",
+ "expandSidebar": "Panua utepe wa kando",
+ "collapseSidebarShortcut": "Kunja utepe wa kando ({{shortcut}})",
+ "sidebarView": "Mwonekano wa utepe wa kando",
+ "resizeSidebar": "Badilisha ukubwa wa utepe wa kando",
+ "closeTab": "Funga kichupo",
+ "openedFromSearch": "Imefunguliwa kutoka utafutaji",
+ "pinnedSession": "Kipindi kilichobandikwa",
+ "jumpToSection": "Rukia sehemu",
+ "newTab": "Kichupo kipya",
+ "newTabDashboard": "Kichupo kipya (Dashibodi)",
+ "refreshSession": "Onyesha upya kipindi",
+ "refreshSessionWithShortcut": "Onyesha Upya Kipindi ({{shortcut}})",
+ "loadingTab": "Inapakia kichupo",
+ "menu": {
+ "teams": "Timu",
+ "settings": "Mipangilio",
+ "extensions": "Viendelezi",
+ "search": "Tafuta",
+ "schedules": "Ratiba",
+ "docs": "Hati",
+ "exportMarkdown": "Hamisha kama Markdown",
+ "exportJson": "Hamisha kama JSON",
+ "exportPlainText": "Hamisha kama Maandishi Tupu",
+ "analyzeSession": "Changanua Kipindi"
+ },
+ "tabMenu": {
+ "closeTabs": "Funga Vichupo {{count}}",
+ "closeTabs_one": "Funga Kichupo {{count}}",
+ "closeTabs_few": "Funga Vichupo {{count}}",
+ "closeTabs_many": "Funga Vichupo {{count}}",
+ "closeTabs_other": "Funga Vichupo {{count}}",
+ "closeTab": "Funga Kichupo",
+ "closeOtherTabs": "Funga Vichupo Vingine",
+ "splitRight": "Gawanya Kulia",
+ "splitLeft": "Gawanya Kushoto",
+ "pinToSidebar": "Bandika kwenye Utepe wa Kando",
+ "unpinFromSidebar": "Ondoa Kubandika kutoka Utepe wa Kando",
+ "hideFromSidebar": "Ficha kutoka Utepe wa Kando",
+ "unhideFromSidebar": "Ondoa Kuficha kutoka Utepe wa Kando",
+ "closeAllTabs": "Funga Vichupo Vyote"
+ },
+ "sections": {
+ "team": "Timu",
+ "sessions": "Vipindi",
+ "kanban": "Kanban",
+ "claudeLogs": "Kumbukumbu",
+ "messages": "Ujumbe"
+ }
+ },
+ "editorFormatting": {
+ "bold": "Nene",
+ "italic": "Italiki",
+ "strike": "Mstari kati",
+ "code": "Msimbo"
+ },
+ "diff": {
+ "changed": "Imebadilishwa",
+ "noChangesDetected": "Hakuna mabadiliko yaliyogunduliwa"
+ },
+ "codexLogin": {
+ "copyLoginLinkAndCode": "Nakili kiungo cha kuingia cha ChatGPT na msimbo",
+ "copyLoginLink": "Nakili kiungo cha kuingia cha ChatGPT",
+ "copyFailed": "Kunakili kumeshindwa",
+ "copyLinkAndCode": "Nakili kiungo + msimbo",
+ "copyLink": "Nakili kiungo",
+ "enterCodeOnLoginPage": "Weka msimbo huu kwenye ukurasa wa kuingia wa ChatGPT"
+ },
+ "window": {
+ "minimize": "Punguza",
+ "maximize": "Kuza",
+ "restore": "Rejesha"
+ },
+ "context": {
+ "local": "Ya ndani",
+ "switchingTo": "Inabadilisha hadi {{workspace}}",
+ "loadingWorkspace": "Inapakia eneo-kazi",
+ "switchWorkspace": "Badilisha Eneo-kazi"
+ },
+ "repositories": {
+ "noneAvailable": "Hakuna hazina zinazopatikana",
+ "remove": "Ondoa hazina"
+ },
+ "export": {
+ "session": "Hamisha kipindi",
+ "sessionTitle": "Hamisha Kipindi"
+ },
+ "brand": {
+ "claude": "Claude"
+ },
+ "sessionReport": {
+ "noSessionData": "Hakuna data ya kipindi inayopatikana",
+ "title": "Ripoti ya Kipindi"
+ },
+ "sessionFilters": {
+ "project": {
+ "selectProject": "Chagua Mradi"
+ }
+ },
+ "tasks": {
+ "date": {
+ "updatedPrefix": "imesasishwa",
+ "updatedYesterday": "imesasishwa jana",
+ "yesterday": "Jana"
+ },
+ "reviewState": {
+ "needsFix": "Inahitaji Marekebisho"
+ },
+ "unassigned": "hawajakabidhiwa"
+ }
+}
diff --git a/src/features/localization/renderer/locales/sw/dashboard.json b/src/features/localization/renderer/locales/sw/dashboard.json
new file mode 100644
index 00000000..4224b0e9
--- /dev/null
+++ b/src/features/localization/renderer/locales/sw/dashboard.json
@@ -0,0 +1,197 @@
+{
+ "cliStatus": {
+ "actions": {
+ "alreadyLoggedIn": "Tayari umeingia?",
+ "becomeSponsor": "Kuwa mfadhili",
+ "cancel": "Ghairi",
+ "checkNow": "Kagua sasa",
+ "checkUpdates": "Kagua Masasisho",
+ "checking": "Inakagua...",
+ "connect": "Unganisha",
+ "extensions": "Viendelezi",
+ "login": "Ingia",
+ "manage": "Dhibiti",
+ "manageProviders": "Dhibiti Watoa Huduma",
+ "plan": "Mpango",
+ "recheck": "Kagua tena",
+ "recheckProvider": "Kagua tena {{provider}}",
+ "retry": "Jaribu tena",
+ "updateTo": "Sasisha hadi v{{version}}",
+ "useCode": "Tumia msimbo"
+ },
+ "atlas": {
+ "alt": "Atlas Cloud",
+ "description": "Atlas Cloud ni jukwaa la utabiri wa AI lenye modali kamili linalowapa watengenezaji API moja ya AI kufikia uzalishaji wa video, uzalishaji wa picha, na API za LLM. Badala ya kudhibiti uunganishaji wa wachuuzi wengi, unaunganisha mara moja na kupata ufikiaji wa pamoja wa modeli 300+ zilizoteuliwa katika modali zote. Angalia ofa mpya ya mpango wa uandishi wa msimbo wa Atlas Cloud kwa ufikiaji wa API wa bei nafuu zaidi.",
+ "openCodeProvider": "Mtoa huduma wa OpenCode",
+ "plan": "Mpango wa uandishi wa msimbo wa Atlas Cloud",
+ "sponsor": "Mfadhili"
+ },
+ "errors": {
+ "checkStatusFailed": "Imeshindwa kukagua hali ya CLI",
+ "installationFailed": "Usakinishaji umeshindwa",
+ "refreshFailed": "Imeshindwa kukagua masasisho. Kagua muunganisho wako wa mtandao na ujaribu tena.",
+ "runtimeUpdatedRefreshFailed": "Runtime imesasishwa, lakini imeshindwa kuonyesha upya hali ya mtoa huduma."
+ },
+ "hints": {
+ "backgroundStatus": "Hali ya {{runtime}} itakaguliwa kwenye usuli.",
+ "codexApiKeyFallback": "{{hint}} Mbadala wa ufunguo wa API unapatikana ukibadilisha hali ya uthibitishaji.",
+ "codexAutoApiKey": "{{hint}} Otomatiki itaendelea kutumia ufunguo wa API hadi ChatGPT iunganishwe.",
+ "codexFinishLogin": "Maliza kuingia kwa ChatGPT kwenye kivinjari. Weka msimbo unaoonyeshwa ukiulizwa.",
+ "codexNoActiveLogin": "Vikomo vya matumizi vinaonekana tu baada ya Codex CLI kuona akaunti hai ya ChatGPT. Sasa hivi inaripoti hakuna kuingia hai kwa ChatGPT.",
+ "codexNoActiveManagedSession": "Vikomo vya matumizi vinaonekana tu baada ya Codex CLI kuona akaunti hai ya ChatGPT. Data ya akaunti ya Codex ya ndani ipo, lakini hakuna kipindi hai kilichodhibitiwa kilichochaguliwa sasa hivi.",
+ "codexReconnectNeeded": "Vikomo vya matumizi vinaonekana tu baada ya Codex kuonyesha upya kipindi cha ChatGPT kilichochaguliwa kwa sasa. Sasa hivi kipindi cha ndani kinahitaji kuunganishwa tena.",
+ "firstCheckSlow": "Ukaguzi wa kwanza unaweza kuchukua hadi sekunde 30",
+ "loginRequiredForTeams": "Kuvinjari vipindi na miradi hufanya kazi bila kuingia. Kuingia kunahitajika tu kuendesha timu za wakala.",
+ "troubleshootTitle": "Ikiwa una uhakika umeingia, jaribu hatua hizi:"
+ },
+ "installer": {
+ "checkingLatest": "Inakagua toleo jipya zaidi...",
+ "downloading": "Inapakua {{runtime}}...",
+ "installing": "Inasakinisha {{runtime}}...",
+ "success": "Imesakinisha {{runtime}} v{{version}} kwa mafanikio",
+ "verifying": "Inathibitisha checksum..."
+ },
+ "labels": {
+ "apiKeyRequired": "Ufunguo wa API unahitajika",
+ "comingSoon": "Inakuja hivi karibuni",
+ "collapseProviderDetails": "Kunja maelezo ya mtoa huduma",
+ "expandProviderDetails": "Panua maelezo ya mtoa huduma",
+ "generateLink": "Tengeneza kiungo",
+ "loadingRateLimits": "Vikomo vya kiwango vinapakia",
+ "loggedOut": "Mtoa huduma ametoka",
+ "loginAuthFailed": "Uthibitishaji umeshindwa",
+ "loginAuthUpdated": "Uthibitishaji umesasishwa",
+ "loginComplete": "Kuingia kumekamilika",
+ "loginFailed": "Kuingia kumeshindwa",
+ "loginTitle": "Ingia",
+ "logoutFailed": "Kutoka kumeshindwa",
+ "logoutTitle": "Toka",
+ "notLoggedIn": "Hujaingia",
+ "openLogin": "Fungua kuingia",
+ "providerActionRequired": "Hatua ya mtoa huduma inahitajika",
+ "resets": "inaweka upya {{time}}",
+ "runtimeLoginTitle": "Kuingia kwa {{runtime}}"
+ },
+ "loading": {
+ "aiProviders": "Inakagua Watoa Huduma wa AI...",
+ "claudeCli": "Inakagua Claude CLI..."
+ },
+ "provider": {
+ "authenticated": "Imethibitishwa",
+ "backend": "Backend: {{backend}}",
+ "checkingAuthentication": "Inakagua uthibitishaji...",
+ "checkingProviders": "Inakagua watoa huduma...",
+ "configuredLocalCount": "{{count}} ya ndani imesanidiwa",
+ "configuredLocalCount_few": "{{count}} za ndani zimesanidiwa",
+ "configuredLocalCount_many": "{{count}} za ndani zimesanidiwa",
+ "configuredLocalCount_one": "{{count}} ya ndani imesanidiwa",
+ "configuredLocalCount_other": "{{count}} za ndani zimesanidiwa",
+ "configuredLocalTitle": "Njia za OpenCode za ndani zilizoletwa kutoka usanidi wako wa OpenCode.",
+ "connectedCount": "Watoa huduma: {{connected}}/{{denominator}} wameunganishwa",
+ "freeModels": "Modeli za bure",
+ "freeModelsTitle": "OpenCode inajumuisha chaguo za modeli za bure kama vile Big Pickle zinapopatikana katika usanidi wako. OpenRouter kupitia OpenCode inaweza pia kuonyesha modeli za bure, lakini si kila modeli ya OpenCode/OpenRouter ni bure. Upatikanaji na vikomo vinaweza kubadilika.",
+ "loadingModels": "Inapakia modeli...",
+ "modelsUnavailable": "Modeli hazipatikani kwa toleo hili la runtime",
+ "runtime": "Runtime: {{runtime}}",
+ "verifiedCount": "{{count}} imethibitishwa",
+ "verifiedCount_few": "{{count}} zimethibitishwa",
+ "verifiedCount_many": "{{count}} zimethibitishwa",
+ "verifiedCount_one": "{{count}} imethibitishwa",
+ "verifiedCount_other": "{{count}} zimethibitishwa",
+ "verifiedTitle": "Njia za OpenCode zenye uthibitisho wa utekelezaji uliofaulu."
+ },
+ "runtime": {
+ "configuredHealthCheckFailed": "{{runtime}} iliyosanidiwa imeshindwa ukaguzi wake wa afya wa uanzishaji.",
+ "configuredNotFound": "{{runtime}} iliyosanidiwa haikupatikana.",
+ "foundButFailed": "{{runtime}} ilipatikana lakini imeshindwa kuanza",
+ "healthCheckFailedDescription": "Programu ilipata {{runtime}} iliyosanidiwa, lakini ukaguzi wake wa afya wa uanzishaji umeshindwa. Irekebishe au isakinishe upya, kisha ujaribu tena.",
+ "install": "Sakinisha {{runtime}}",
+ "installRequiredDescription": "{{runtime}} inahitajika kwa ugavi wa timu na usimamizi wa vipindi. Isakinishe ili kuanza.",
+ "isRequired": "{{runtime}} inahitajika",
+ "reinstall": "Sakinisha tena {{runtime}}"
+ },
+ "runtimeInstall": {
+ "checking": "Inakagua",
+ "codexTitle": "Sakinisha Codex CLI ndani ya data ya programu",
+ "downloading": "Inapakua",
+ "downloadingPercent": "Inapakua {{percent}}%",
+ "install": "Sakinisha",
+ "installing": "Inasakinisha",
+ "openCodeTitle": "Sakinisha runtime ya OpenCode ndani ya data ya programu",
+ "retryInstall": "Jaribu tena kusakinisha"
+ },
+ "troubleshoot": {
+ "again": "tena",
+ "authStatusCommand": "amri yako ya hali ya uthibitishaji ya CLI iliyosanidiwa",
+ "checkLoggedIn": "- kagua kama inaonyesha \"Umeingia\"",
+ "click": "Bofya",
+ "loginCommand": "amri ya kuingia ya runtime",
+ "logoutCommand": "amri ya kutoka ya runtime",
+ "openTerminal": "Fungua terminal yako na uendeshe:",
+ "reloginPrefix": "Ikiwa inasema umeingia lakini programu haioni, jaribu:",
+ "sameRuntime": "Hakikisha CLI katika terminal yako ni runtime ile ile inayotumiwa na programu",
+ "statusCacheHint": "- wakati mwingine hali huhifadhiwa akibani kwa sekunde chache",
+ "then": "kisha"
+ },
+ "warnings": {
+ "multipleApiKeysMissing": "Mtoa huduma mmoja au zaidi umewekwa kwenye hali ya ufunguo wa API, lakini hakuna ufunguo wa API uliosanidiwa. Fungua Dhibiti Watoa Huduma ili kuongeza funguo au kubadilisha hali ya muunganisho.",
+ "multipleApiKeysNeedAttention": "Mtoa huduma mmoja au zaidi umewekwa kwenye hali ya ufunguo wa API na unahitaji uangalifu. Fungua Dhibiti Watoa Huduma ili kukagua funguo zilizohifadhiwa au kubadilisha hali ya muunganisho.",
+ "notAuthenticated": "{{runtime}} imesakinishwa lakini hujathibitishwa. Kuingia kunahitajika kwa ugavi wa timu na vipengele vya AI.",
+ "singleApiKeyMissing": "{{provider}} amewekwa kwenye hali ya ufunguo wa API, lakini hakuna ufunguo wa API uliosanidiwa. Fungua Dhibiti Watoa Huduma ili kuongeza ufunguo au kubadilisha hali ya muunganisho.",
+ "singleApiKeyNeedsAttention": "{{provider}} amewekwa kwenye hali ya ufunguo wa API, lakini hajaunganishwa. Fungua Dhibiti Watoa Huduma ili kukagua ufunguo uliohifadhiwa au kubadilisha hali ya muunganisho."
+ }
+ },
+ "recentProjects": {
+ "selectFolderTitle": "Chagua folda ya mradi",
+ "selectFolder": "Chagua Folda",
+ "failedToLoad": "Imeshindwa kupakia miradi",
+ "retry": "Jaribu tena",
+ "noProjects": "Hakuna miradi iliyopatikana",
+ "noMatches": "Hakuna inayolingana na \"{{query}}\"",
+ "noRecentProjects": "Hakuna miradi ya hivi karibuni iliyopatikana",
+ "emptyDescription": "Shughuli za hivi karibuni za Claude na Codex zitaonekana hapa.",
+ "loadMore": "Pakia zaidi",
+ "card": {
+ "deleted": "Imefutwa",
+ "projectFolderMissing": "Folda ya mradi haipo tena",
+ "taskCounts": {
+ "active": "{{count}} inaendelea",
+ "active_one": "{{count}} inaendelea",
+ "active_other": "{{count}} zinaendelea",
+ "active_few": "{{count}} zinaendelea",
+ "active_many": "{{count}} zinaendelea",
+ "pending": "{{count}} inasubiri",
+ "pending_one": "{{count}} inasubiri",
+ "pending_other": "{{count}} zinasubiri",
+ "pending_few": "{{count}} zinasubiri",
+ "pending_many": "{{count}} zinasubiri",
+ "done": "{{count}} imekamilika",
+ "done_one": "{{count}} imekamilika",
+ "done_other": "{{count}} zimekamilika",
+ "done_few": "{{count}} zimekamilika",
+ "done_many": "{{count}} zimekamilika"
+ }
+ },
+ "title": "Miradi ya Hivi Karibuni",
+ "searchResults": "Matokeo ya Utafutaji",
+ "searchPlaceholder": "Tafuta miradi..."
+ },
+ "actions": {
+ "selectTeam": "Chagua Timu",
+ "or": "au",
+ "clearSearch": "Futa utafutaji"
+ },
+ "windowsAdmin": {
+ "title": "Hali ya Msimamizi wa Windows inapendekezwa",
+ "description": "Ukaguzi wa runtime ya OpenCode unaweza kuisha muda Agent Teams AI isipopandishwa hadhi. Anzisha upya programu kwa Endesha kama msimamizi kabla ya kuzindua timu za OpenCode."
+ },
+ "webPreview": {
+ "title": "Fungua programu ya eneo-kazi kwa utendaji kamili",
+ "description": "Toleo la kivinjari bado liko katika maendeleo. Vitendo vya mradi, miunganisho, na masasisho ya hali ya moja kwa moja vinaweza kuwa na vikomo hapa. Tumia programu ya eneo-kazi kufikia vipengele vyote kwa uhakika."
+ },
+ "updateBanner": {
+ "newVersionAvailable": "Toleo jipya linapatikana",
+ "restartNow": "Anzisha upya sasa",
+ "viewDetails": "Tazama maelezo"
+ }
+}
diff --git a/src/features/localization/renderer/locales/sw/errors.json b/src/features/localization/renderer/locales/sw/errors.json
new file mode 100644
index 00000000..daf13d22
--- /dev/null
+++ b/src/features/localization/renderer/locales/sw/errors.json
@@ -0,0 +1,3 @@
+{
+ "fallback": "Hitilafu fulani imetokea."
+}
diff --git a/src/features/localization/renderer/locales/sw/extensions.json b/src/features/localization/renderer/locales/sw/extensions.json
new file mode 100644
index 00000000..6077ba7c
--- /dev/null
+++ b/src/features/localization/renderer/locales/sw/extensions.json
@@ -0,0 +1,688 @@
+{
+ "store": {
+ "actions": {
+ "addCustom": "Ongeza Maalum",
+ "openDashboard": "Fungua Dashibodi",
+ "refreshCatalog": "Onyesha upya katalogi"
+ },
+ "capabilities": {
+ "mcp": "MCP: {{status}}",
+ "plugins": "Programu-jalizi: {{status}}",
+ "skills": "Ujuzi: {{status}}"
+ },
+ "desktopOnly": "Inapatikana katika programu ya eneo-kazi pekee.",
+ "provider": {
+ "checkingStatus": "Inakagua hali ya mtoa huduma...",
+ "connected": "Imeunganishwa",
+ "loading": "Inapakia...",
+ "needsSetup": "Inahitaji usanidi",
+ "readyToConfigure": "Tayari kusanidi",
+ "unsupported": "Haungwi mkono"
+ },
+ "runtime": {
+ "checkingAvailabilityDescription": "Viendelezi vinahitaji runtime iliyosanidiwa ili kudhibiti programu-jalizi, seva za MCP, ujuzi, na miunganisho ya watoa huduma.",
+ "checkingAvailabilityTitle": "Inakagua upatikanaji wa runtime ya viendelezi",
+ "failedToStartDescription": "Viendelezi vimezimwa hadi runtime ipite ukaguzi wake wa afya wa uanzishaji. Fungua Dashibodi ili kuirekebisha au kuisakinisha upya.",
+ "failedToStartTitle": "Runtime iliyosanidiwa ilipatikana lakini imeshindwa kuanza",
+ "multimodelCapabilitiesDescription": "Usaidizi wa mtoa huduma unaweza kutofautiana kwa sehemu. Programu-jalizi zinaonyeshwa tu pale runtime inapotangaza usaidizi kwa uwazi.",
+ "multimodelCapabilitiesTitle": "Uwezo wa runtime ya modeli nyingi",
+ "needsSignInDescription": "{{runtime}} ilipatikana{{version}}, lakini usakinishaji wa programu-jalizi umezimwa hadi uingie kutoka Dashibodi.",
+ "needsSignInTitle": "{{runtime}} inahitaji kuingia",
+ "notAvailableDescription": "Viendelezi vimezimwa hadi runtime isakinishwe. Fungua Dashibodi ili kuisakinisha na ujaribu tena.",
+ "notAvailableTitle": "Runtime iliyosanidiwa haipatikani",
+ "readyDescription": "Programu-jalizi zinaweza kusakinishwa kutoka ukurasa huu{{versionSuffix}}.",
+ "readyTitle": "{{runtime}} iko tayari",
+ "requiredForMutations": "Runtime iliyosanidiwa inahitajika ili kusakinisha au kuondoa viendelezi. Isakinishe au irekebishe kutoka Dashibodi."
+ },
+ "sessionsRestartWarning": "Vipindi vinavyoendeshwa havitachukua mabadiliko ya viendelezi hadi vianzishwe upya.",
+ "tabs": {
+ "apiKeys": {
+ "description": "Funguo za siri za huduma za mtandaoni. Ziongeze hapa ili programu-jalizi, seva, na miunganisho viweze kuunganisha na kufanya kazi.",
+ "label": "Funguo za API"
+ },
+ "mcpServers": {
+ "description": "Miunganisho na zana na programu za nje. Inaruhusu runtime kusoma data au kufanya vitendo zaidi ya programu hii.",
+ "label": "Seva za MCP"
+ },
+ "plugins": {
+ "description": "Viongezi vidogo vya runtime. Katika hali ya modeli nyingi kwa sasa vinatumika kwa vipindi vya Anthropic vinapoungwa mkono. Usaidizi mpana wa watoa huduma uko katika maendeleo.",
+ "label": "Programu-jalizi"
+ },
+ "skills": {
+ "description": "Maagizo yaliyotengenezwa tayari kwa kazi za kawaida. Yanasaidia runtime kushughulikia kazi zinazorudiwarudiwa kwa uthabiti zaidi.",
+ "label": "Ujuzi"
+ }
+ },
+ "title": "Viendelezi"
+ },
+ "pluginsPanel": {
+ "activeFilters": "{{count}} hai",
+ "browseByFit": "Vinjari kwa ulinganifu",
+ "capabilities": "Uwezo",
+ "categories": "Kategoria",
+ "clearAllFilters": "Futa vichujio vyote",
+ "clearFilters": "Futa vichujio",
+ "counts": {
+ "capabilities": "uwezo {{count}}",
+ "categories": "kategoria {{count}}",
+ "plugins": "programu-jalizi {{count}}",
+ "capabilities_few": "uwezo {{count}}",
+ "capabilities_many": "uwezo {{count}}",
+ "capabilities_one": "uwezo {{count}}",
+ "capabilities_other": "uwezo {{count}}",
+ "categories_few": "kategoria {{count}}",
+ "categories_many": "kategoria {{count}}",
+ "categories_one": "kategoria {{count}}",
+ "categories_other": "kategoria {{count}}",
+ "plugins_few": "programu-jalizi {{count}}",
+ "plugins_many": "programu-jalizi {{count}}",
+ "plugins_one": "programu-jalizi {{count}}",
+ "plugins_other": "programu-jalizi {{count}}"
+ },
+ "empty": {
+ "description": "Rudi baadaye kwa programu-jalizi mpya",
+ "filteredDescription": "Jaribu kurekebisha utafutaji wako au vigezo vya kichujio",
+ "filteredTitle": "Hakuna programu-jalizi zinazolingana na vichujio vyako",
+ "title": "Hakuna programu-jalizi zinazopatikana"
+ },
+ "filterDescription": "Punguza katalogi kwa kategoria, uwezo, au hali ya usakinishaji.",
+ "installedOnly": "Zilizosakinishwa pekee",
+ "providerSupportNotice": "Usaidizi wa programu-jalizi kwa sasa unahakikishwa kwa vipindi vya Anthropic (Claude) pekee. Tunafanya kazi kuunga mkono programu-jalizi katika mawakala wote.",
+ "resultsUpdateInstantly": "Matokeo yanasasishwa papo hapo unaporekebisha vichujio.",
+ "searchPlaceholder": "Tafuta programu-jalizi...",
+ "selectedCount": "{{count}} zimechaguliwa",
+ "showing": "Inaonyesha programu-jalizi {{shown}} kati ya {{total}}",
+ "sort": {
+ "category": "Kategoria",
+ "nameAsc": "Jina A-Z",
+ "nameDesc": "Jina Z-A",
+ "popular": "Maarufu"
+ },
+ "activeFilters_few": "{{count}} hai",
+ "activeFilters_many": "{{count}} hai",
+ "activeFilters_one": "{{count}} hai",
+ "activeFilters_other": "{{count}} hai",
+ "selectedCount_few": "{{count}} zimechaguliwa",
+ "selectedCount_many": "{{count}} zimechaguliwa",
+ "selectedCount_one": "{{count}} imechaguliwa",
+ "selectedCount_other": "{{count}} zimechaguliwa"
+ },
+ "customMcp": {
+ "actions": {
+ "add": "Ongeza",
+ "cancel": "Ghairi",
+ "install": "Sakinisha",
+ "installing": "Inasakinisha..."
+ },
+ "description": "Ongeza seva kwa mkono bila katalogi.",
+ "errors": {
+ "installFailed": "Usakinishaji umeshindwa",
+ "invalidServerName": "Jina la seva batili. Tumia herufi za alfanumeriki, mistari, vibambo vya chini, nukta.",
+ "npmPackageRequired": "Jina la kifurushi cha npm linahitajika",
+ "serverNameRequired": "Jina la seva linahitajika",
+ "serverUrlRequired": "URL ya seva inahitajika"
+ },
+ "fields": {
+ "environmentVariables": "Vigeu vya Mazingira",
+ "headers": "Vichwa",
+ "npmPackage": "Kifurushi cha npm",
+ "scope": "Wigo",
+ "serverName": "Jina la Seva",
+ "serverUrl": "URL ya Seva",
+ "transport": "Usafirishaji",
+ "transportType": "Aina ya Usafirishaji",
+ "versionOptional": "Toleo (hiari)"
+ },
+ "title": "Ongeza Seva Maalum ya MCP",
+ "transport": {
+ "httpSse": "HTTP / SSE",
+ "stdio": "Stdio (npm)"
+ },
+ "placeholders": {
+ "headerName": "Header-Name",
+ "envVarName": "ENV_VAR_NAME",
+ "serverName": "my-server",
+ "latest": "latest",
+ "value": "value",
+ "serverUrl": "https://api.example.com/mcp"
+ }
+ },
+ "mcpDetail": {
+ "auth": {
+ "remoteMayNeedHeaders": "Seva za mbali za MCP zinaweza bado kuhitaji vichwa maalum au funguo za API hata wakati rejista hazizielezi. Iwapo muunganisho utashindwa baada ya usakinishaji, kagua hati za mtoa huduma.",
+ "required": "Seva hii inahitaji uthibitishaji"
+ },
+ "diagnostics": {
+ "launchTarget": "Lengo la Uzinduzi"
+ },
+ "form": {
+ "autoFilled": "Imejazwa kiotomatiki",
+ "environmentVariables": "Vigeu vya Mazingira",
+ "headers": "Vichwa",
+ "scope": "Wigo",
+ "serverName": "Jina la Seva"
+ },
+ "install": {
+ "httpTransport": "HTTP: {{transport}}",
+ "manualSetupDescription": "Seva hii inahitaji usanidi wa mkono. Kagua hazina kwa maagizo ya usakinishaji.",
+ "manualSetupRequired": "Usanidi wa mkono unahitajika",
+ "npmPackage": "npm: {{package}}",
+ "manage": "Dhibiti Usakinishaji",
+ "install": "Sakinisha Seva"
+ },
+ "links": {
+ "glama": "Glama",
+ "repository": "Hazina",
+ "website": "Tovuti"
+ },
+ "metadata": {
+ "author": "Mwandishi",
+ "githubStars": "Nyota za GitHub",
+ "hosting": "Mwenyeji",
+ "installType": "Aina ya Usakinishaji",
+ "license": "Leseni",
+ "published": "Imechapishwa",
+ "source": "Chanzo",
+ "updated": "Imesasishwa",
+ "version": "Toleo"
+ },
+ "scope": {
+ "local": "Ya ndani",
+ "project": "Mradi"
+ },
+ "tools": {
+ "title": "Zana ({{count}})",
+ "title_few": "Zana ({{count}})",
+ "title_many": "Zana ({{count}})",
+ "title_one": "Zana ({{count}})",
+ "title_other": "Zana ({{count}})"
+ },
+ "placeholders": {
+ "serverName": "my-server"
+ }
+ },
+ "skillEditor": {
+ "actions": {
+ "cancel": "Ghairi",
+ "createSkill": "Unda Ujuzi",
+ "preparing": "Inaandaa...",
+ "reviewAndCreate": "Pitia Na Unda",
+ "reviewAndSave": "Pitia Na Hifadhi",
+ "saveSkill": "Hifadhi Ujuzi"
+ },
+ "advanced": {
+ "customDescription": "Ujuzi huu unatumia muundo maalum wa markdown, kwa hivyo uhariri moja kwa moja hapa.",
+ "customTitle": "2. Kihariri cha SKILL.md",
+ "description": "Watu wengi wanaweza kuruka hii. Ifungue tu ikiwa unataka udhibiti wa moja kwa moja juu ya faili ghafi ya markdown.",
+ "hide": "Ficha Kihariri cha Kina",
+ "resetFromStructuredFields": "Weka Upya Kutoka Sehemu Zilizopangwa",
+ "show": "Onyesha Kihariri cha Kina",
+ "title": "4. Kihariri cha kina cha SKILL.md"
+ },
+ "basics": {
+ "description": "Mpe ujuzi huu jina wazi, chagua nani anaweza kuutumia, na uamue mahali unapaswa kukaa.",
+ "title": "1. Misingi"
+ },
+ "description": {
+ "create": "Eleza mtiririko wa kazi kwa lugha rahisi, pitia faili zitakazoundwa, kisha uhifadhi.",
+ "edit": "Sasisha ujuzi huu, pitia mabadiliko ya faili yanayotokana, kisha uhifadhi."
+ },
+ "extraFiles": {
+ "addedFiles": "Faili zilizoongezwa:",
+ "assets": "Rasilimali",
+ "assetsDescription": "Ongeza picha za skrini au midia iliyofungashwa tu ikiwa zinasaidia kueleza mtiririko wa kazi.",
+ "description": "Ongeza hati za usaidizi, hati za maandishi, au rasilimali tu ikiwa ujuzi huu unazihitaji kweli.",
+ "lockedForEdits": "Mzizi na folda vimefungwa kwa marekebisho",
+ "optionalDescription": "Ongeza faili za kuanzia ambazo zitajumuishwa katika mapitio na kuandikwa pamoja na `SKILL.md`.",
+ "optionalTitle": "Faili za hiari",
+ "references": "Marejeleo",
+ "referencesDescription": "Ongeza hati za usaidizi, viungo, au mifano ambayo runtime inaweza kuangalia.",
+ "scripts": "Hati za Maandishi",
+ "scriptsDescription": "Ongeza amri za usaidizi au madokezo ya usanidi. Pitia kwa makini kabla ya kushiriki ujuzi huu.",
+ "title": "3. Faili za ziada"
+ },
+ "fields": {
+ "compatibility": "Uoanifu",
+ "description": "Maelezo",
+ "folderName": "Jina la folda",
+ "folderNameHint": "Tunapendekeza hili kiotomatiki kutoka jina la ujuzi ili mapitio yafanye kazi mara moja.",
+ "invocation": "Jinsi unavyopaswa kutumika",
+ "license": "Leseni",
+ "name": "Jina la ujuzi",
+ "notes": "Madokezo ya ziada au ulinzi",
+ "root": "Mahali pa kuihifadhi",
+ "scope": "Nani anaweza kuutumia",
+ "steps": "Hatua kuu za kufuata",
+ "whenToUse": "Wakati wa kutumia huu"
+ },
+ "instructions": {
+ "description": "Sehemu hizi huzalisha faili ya ujuzi kwa ajili yako, kwa hivyo hauhitaji kuhariri markdown isipokuwa unataka.",
+ "locked": "Sehemu zilizopangwa zimefungwa kwa sababu umebadilisha kuwa uhariri wa mkono wa `SKILL.md` hapa chini.",
+ "title": "2. Maagizo"
+ },
+ "invocation": {
+ "auto": "Inaweza kutumika kiotomatiki",
+ "manualOnly": "Tu unapoiomba"
+ },
+ "placeholders": {
+ "description": "Ujuzi huu unasaidia na nini",
+ "name": "Andika jina fupi la ujuzi",
+ "notes": "Mfano: Onyesha majaribio yanayokosekana, kurudi nyuma, na dhana hatari.",
+ "steps": "1. Kagua faili husika.\n2. Eleza hatari kuu kwanza.\n3. Pendekeza suluhisho salama zaidi.",
+ "whenToUse": "Mfano: Tumia hii wakati kazi ni ombi la mapitio ya msimbo au utatuzi wa hitilafu.",
+ "license": "MIT",
+ "compatibility": "claude-code, cursor"
+ },
+ "review": {
+ "creating": "Inaunda ujuzi",
+ "hint": "Pitia mabadiliko ya faili kwanza, kisha thibitisha kuhifadhi katika hatua inayofuata.",
+ "saving": "Inahifadhi ujuzi huu"
+ },
+ "root": {
+ "codexOnly": " - Codex pekee",
+ "shared": " - Inashirikiwa"
+ },
+ "scope": {
+ "project": "Mradi: {{project}}",
+ "projectUnavailable": "Mradi haupatikani",
+ "user": "Mtumiaji"
+ },
+ "title": {
+ "create": "Unda ujuzi",
+ "edit": "Hariri ujuzi"
+ }
+ },
+ "skillDetail": {
+ "actions": {
+ "cancel": "Ghairi",
+ "delete": "Futa",
+ "deleteSkill": "Futa Ujuzi",
+ "deleting": "Inafuta...",
+ "editSkill": "Hariri Ujuzi",
+ "openFolder": "Fungua Folda",
+ "openSkillFile": "Fungua SKILL.md",
+ "retry": "Jaribu tena"
+ },
+ "badges": {
+ "assets": "Rasilimali",
+ "autoUse": "Matumizi otomatiki",
+ "hasScripts": "Ina hati za maandishi",
+ "manualUse": "Matumizi ya mkono",
+ "references": "Marejeleo",
+ "storedIn": "Imehifadhiwa katika {{root}}"
+ },
+ "deleteDialog": {
+ "description": "Futa ujuzi huu na uuhamishe kwenye Tupio?",
+ "descriptionWithName": "Futa \"{{name}}\" na uuhamishe kwenye Tupio? Unaweza kuurejesha baadaye kutoka Tupio ikihitajika.",
+ "title": "Futa ujuzi?"
+ },
+ "descriptionFallback": "Kagua metadata ya ujuzi uliogunduliwa na maagizo ghafi.",
+ "errors": {
+ "deleteFailed": "Imeshindwa kufuta ujuzi",
+ "loadFailed": "Haiwezi kupakia ujuzi huu."
+ },
+ "files": {
+ "advancedDetails": "Maelezo ya kina ya faili",
+ "assets": "Rasilimali",
+ "references": "Marejeleo",
+ "scripts": "Hati za Maandishi",
+ "storedAt": "Imehifadhiwa katika"
+ },
+ "includes": {
+ "assets": "rasilimali",
+ "instructionsOnly": "Maagizo ya ujuzi pekee",
+ "references": "marejeleo",
+ "scripts": "hati za maandishi"
+ },
+ "invocation": {
+ "auto": "Inaendeshwa kiotomatiki inapolingana na kazi.",
+ "manualOnly": "Inaendeshwa tu unapoiomba kwa uwazi."
+ },
+ "issues": {
+ "bundledScripts": "Ujuzi huu unajumuisha hati za maandishi zilizofungashwa",
+ "reviewCarefully": "Pitia ujuzi huu kwa makini kabla ya kuutumia"
+ },
+ "loading": "Inapakia maelezo ya ujuzi...",
+ "scope": {
+ "personal": "Ujuzi wako binafsi",
+ "projectOnly": "Mradi huu pekee"
+ },
+ "summary": {
+ "howUsed": "Jinsi unavyotumika",
+ "included": "Kinachokuja nacho",
+ "whoCanUse": "Nani anaweza kuutumia"
+ },
+ "titleFallback": "Maelezo ya ujuzi"
+ },
+ "skillsPanel": {
+ "actions": {
+ "createSkill": "Unda Ujuzi",
+ "import": "Leta"
+ },
+ "badges": {
+ "assets": "Rasilimali",
+ "hasScripts": "Ina hati za maandishi",
+ "needsAttention": "Inahitaji uangalifu",
+ "references": "Marejeleo",
+ "storedIn": "Imehifadhiwa katika {{root}}"
+ },
+ "configuredRuntime": "runtime iliyosanidiwa",
+ "counts": {
+ "codexOnly": "{{count}} Codex pekee",
+ "personal": "{{count}} binafsi",
+ "project": "{{count}} mradi",
+ "shared": "{{count}} inashirikiwa",
+ "total": "{{count}} jumla",
+ "codexOnly_few": "{{count}} Codex pekee",
+ "codexOnly_many": "{{count}} Codex pekee",
+ "codexOnly_one": "{{count}} Codex pekee",
+ "codexOnly_other": "{{count}} Codex pekee",
+ "personal_few": "{{count}} binafsi",
+ "personal_many": "{{count}} binafsi",
+ "personal_one": "{{count}} binafsi",
+ "personal_other": "{{count}} binafsi",
+ "project_few": "{{count}} mradi",
+ "project_many": "{{count}} mradi",
+ "project_one": "{{count}} mradi",
+ "project_other": "{{count}} mradi",
+ "shared_few": "{{count}} inashirikiwa",
+ "shared_many": "{{count}} inashirikiwa",
+ "shared_one": "{{count}} inashirikiwa",
+ "shared_other": "{{count}} inashirikiwa",
+ "total_few": "{{count}} jumla",
+ "total_many": "{{count}} jumla",
+ "total_one": "{{count}} jumla",
+ "total_other": "{{count}} jumla"
+ },
+ "empty": {
+ "noMatches": "Hakuna ujuzi unaolingana na utafutaji wako",
+ "noMatchesDescription": "Jaribu neno lingine la utafutaji au ubadilishe vichujio.",
+ "noSkills": "Bado hakuna ujuzi",
+ "noSkillsDescription": "Unda ujuzi wako wa kwanza ili kufundisha mtiririko wa kazi unaorudiwarudiwa, au leta uliokwisha kutumia."
+ },
+ "filters": {
+ "all": "Ujuzi wote",
+ "codexOnly": "Codex pekee",
+ "hasScripts": "Ina hati za maandishi",
+ "needsAttention": "Inahitaji uangalifu",
+ "personal": "Binafsi",
+ "project": "Mradi",
+ "shared": "Inashirikiwa"
+ },
+ "hero": {
+ "codexAvailable": "Tumia `.codex` wakati ujuzi unapaswa kubaki Codex pekee.",
+ "codexUnavailable": "Ujuzi uliopo wa `.codex` unabaki unaohariri hapa, lakini ujuzi mpya wa Codex pekee unahitaji runtime ya Codex iwezeshwe.",
+ "description": "Ujuzi ni maagizo yanayoweza kutumika tena yanayosaidia runtime kushughulikia aina ile ile ya kazi kwa uthabiti zaidi.",
+ "guidance": "Tumia ujuzi binafsi kwa tabia unazotaka kila mahali. Tumia ujuzi wa mradi kwa mitiririko ya kazi inayoeleweka tu ndani ya msingi mmoja wa msimbo.",
+ "personalContext": "Unaona ujuzi wako binafsi pekee sasa hivi.",
+ "projectContext": "Unaona ujuzi wa {{project}} pamoja na ujuzi wako binafsi.",
+ "title": "Fundisha kazi inayorudiwarudiwa"
+ },
+ "invocation": {
+ "auto": "Inaendeshwa kiotomatiki inapofaa",
+ "manualOnly": "Inaendeshwa tu unapoiomba kwa uwazi"
+ },
+ "loading": {
+ "loading": "Inapakia ujuzi...",
+ "refreshing": "Inaonyesha upya ujuzi..."
+ },
+ "runtimeAudience": "Ujuzi unaoshirikiwa katika `.claude`, `.cursor`, na `.agents` unapatikana kwa {{audience}}. Ujuzi uliohifadhiwa katika `.codex` unabaki Codex pekee wakati usaidizi wa Codex unapatikana.",
+ "scope": {
+ "project": "Mradi huu",
+ "user": "Binafsi"
+ },
+ "searchPlaceholder": "Tafuta kwa jina la ujuzi au unachosaidia...",
+ "sections": {
+ "personal": {
+ "description": "Tabia na maagizo unayotaka yapatikane kila mahali.",
+ "title": "Ujuzi binafsi"
+ },
+ "project": {
+ "description": "Mitiririko ya kazi inayoeleweka tu kwa msingi huu wa msimbo.",
+ "title": "Ujuzi wa mradi"
+ }
+ },
+ "sort": {
+ "label": "Panga ujuzi",
+ "name": "Jina",
+ "recent": "Hivi karibuni"
+ },
+ "status": {
+ "hasScripts": "Inajumuisha hati za maandishi, kwa hivyo ipitie kwa makini",
+ "needsAttention": "Inahitaji uangalifu kabla ya kuitegemea",
+ "ready": "Tayari kutumia"
+ },
+ "success": {
+ "created": "Ujuzi umeundwa kwa mafanikio.",
+ "imported": "Ujuzi umeletwa kwa mafanikio.",
+ "saved": "Ujuzi umehifadhiwa kwa mafanikio."
+ }
+ },
+ "pluginDetail": {
+ "unknown": "Haijulikani",
+ "metadata": {
+ "author": "Mwandishi",
+ "category": "Kategoria",
+ "source": "Chanzo",
+ "version": "Toleo",
+ "capabilities": "Uwezo",
+ "installs": "Usakinishaji"
+ },
+ "scope": {
+ "label": "Wigo:",
+ "options": {
+ "user": "Mtumiaji (kimataifa)",
+ "project": "Mradi (inashirikiwa)",
+ "local": "Ya ndani (imepuuzwa na git)"
+ }
+ },
+ "links": {
+ "homepage": "Ukurasa wa nyumbani",
+ "contact": "Wasiliana"
+ },
+ "readme": {
+ "loading": "Inapakia README...",
+ "empty": "Hakuna README inayopatikana."
+ }
+ },
+ "skillImport": {
+ "title": "Leta ujuzi",
+ "description": "Chagua folda ya ujuzi iliyopo, pitia kitakachonakiliwa, kisha uilete katika moja ya maeneo yako ya ujuzi yanayoungwa mkono.",
+ "steps": {
+ "chooseFolder": {
+ "title": "1. Chagua folda ya ujuzi",
+ "description": "Hii inapaswa kuwa folda ambayo tayari ina faili ya `SKILL.md`, `Skill.md`, au `skill.md`."
+ },
+ "location": {
+ "title": "2. Amua mahali inapostahili",
+ "description": "Ujuzi binafsi hufanya kazi kila mahali. Ujuzi wa mradi huonekana tu kwa msingi mmoja wa msimbo."
+ }
+ },
+ "fields": {
+ "sourceFolder": "Folda ya chanzo",
+ "destinationFolderName": "Jina la folda lengwa",
+ "audience": "Nani anaweza kuutumia",
+ "storage": "Mahali pa kuihifadhi"
+ },
+ "placeholders": {
+ "defaultFolderName": "Chaguo-msingi ni jina la folda ya chanzo"
+ },
+ "actions": {
+ "browse": "Vinjari",
+ "cancel": "Ghairi",
+ "preparing": "Inaandaa...",
+ "reviewAndImport": "Pitia Na Lete",
+ "importSkill": "Leta Ujuzi",
+ "backToImport": "Rudi Kwenye Kuleta"
+ },
+ "scope": {
+ "user": "Mtumiaji",
+ "project": "Mradi: {{project}}",
+ "projectUnavailable": "Mradi haupatikani"
+ },
+ "rootSuffix": {
+ "codexOnly": " - Codex pekee",
+ "shared": " - Inashirikiwa"
+ },
+ "reviewHint": "Pitia faili zilizonakiliwa kwanza, kisha thibitisha kuleta katika hatua inayofuata.",
+ "reviewLabel": "Inaleta ujuzi huu",
+ "errors": {
+ "missingSkillFile": "Folda hii bado haionekani kama ujuzi. Inahitaji faili ya SKILL.md, Skill.md, au skill.md.",
+ "symbolicLinks": "Folda hii ina viungo vya kiishara. Leta faili halisi badala ya viungo.",
+ "tooManyFiles": "Folda hii ya ujuzi ni kubwa mno kuleta kwa wakati mmoja. Ondoa faili za ziada na ujaribu tena.",
+ "tooLarge": "Folda hii ya ujuzi ni kubwa mno kuleta kwa usalama. Punguza rasilimali kubwa na ujaribu tena.",
+ "invalidFolderName": "Chagua jina rahisi zaidi la folda lengwa ukitumia herufi, namba, nukta, mistari, au vibambo vya chini.",
+ "mustBeDirectory": "Chagua folda ya kuleta, si faili moja.",
+ "reviewFailed": "Imeshindwa kupitia mabadiliko ya kuleta",
+ "importFailed": "Imeshindwa kuleta ujuzi"
+ }
+ },
+ "mcpPanel": {
+ "sort": {
+ "nameAsc": "Jina A→Z",
+ "nameDesc": "Jina Z→A",
+ "toolsDesc": "Zana nyingi zaidi"
+ },
+ "health": {
+ "title": "Hali ya Afya ya MCP",
+ "checkingViaRuntime": "Inakagua seva za MCP zilizosakinishwa kupitia {{runtime}} ...",
+ "lastChecked": "Imekaguliwa mwisho {{time}}",
+ "description": "Endesha utambuzi kutoka ukurasa huu ili kuthibitisha muunganisho wa MCP uliosakinishwa.",
+ "checking": "Inakagua...",
+ "checkStatus": "Kagua Hali"
+ },
+ "diagnostics": {
+ "title": "Utambuzi wa MCP wa Runtime",
+ "serversCount": "seva {{count}}",
+ "serversCount_one": "seva {{count}}",
+ "serversCount_other": "seva {{count}}",
+ "waiting": "Inasubiri matokeo ya utambuzi...",
+ "disableReasons": {
+ "checkingRuntimeStatus": "Inakagua hali ya runtime...",
+ "checkingRuntimeAvailability": "Inakagua upatikanaji wa runtime...",
+ "runtimeFailedToStart": "Runtime iliyosanidiwa ilipatikana lakini imeshindwa kuanza. Fungua Dashibodi ili kuirekebisha au kuisakinisha upya.",
+ "runtimeRequired": "Runtime iliyosanidiwa inahitajika. Isakinishe au irekebishe kutoka Dashibodi."
+ },
+ "serversCount_few": "seva {{count}}",
+ "serversCount_many": "seva {{count}}"
+ },
+ "searchPlaceholder": "Tafuta seva za MCP...",
+ "runtime": {
+ "notAvailable": "{{runtime}} haipatikani",
+ "notInstalled": "{{runtime}} haijasakinishwa",
+ "requiredDescription": "Ukaguzi wa afya wa MCP unahitaji {{runtime}}. Nenda kwenye Dashibodi ili kuisakinisha au kuirekebisha."
+ },
+ "empty": {
+ "searchTitle": "Hakuna seva zilizopatikana",
+ "title": "Hakuna seva za MCP zinazopatikana",
+ "searchDescription": "Jaribu neno lingine la utafutaji",
+ "description": "Rudi baadaye kwa seva mpya"
+ },
+ "loadMore": "Pakia zaidi"
+ },
+ "apiKeys": {
+ "description": "Hifadhi funguo za API kwa usalama ili kujaza kiotomatiki unaposakinisha seva za MCP.",
+ "storage": {
+ "osKeychain": "Funguo zimesimbwa kupitia {{backend}} na kuhifadhiwa kwa ruhusa za faili zilizozuiwa (mmiliki pekee).",
+ "localEncryption": "Mnyororo wa funguo wa OS haupatikani - funguo zimesimbwa kwa ndani kwa AES-256. Kwa ulinzi imara zaidi, sakinisha huduma ya keyring (gnome-keyring, kwallet)."
+ },
+ "actions": {
+ "add": "Ongeza Ufunguo wa API",
+ "addFirst": "Ongeza ufunguo wako wa kwanza",
+ "edit": "Hariri",
+ "copied": "Imenakiliwa!",
+ "copyEnvVarName": "Nakili jina la kigeu cha mazingira",
+ "confirmDelete": "Bofya tena ili kuthibitisha",
+ "delete": "Futa"
+ },
+ "empty": {
+ "title": "Hakuna funguo za API zilizohifadhiwa",
+ "description": "Ongeza funguo ili kujaza kiotomatiki vigeu vya mazingira unaposakinisha seva za MCP."
+ },
+ "form": {
+ "addTitle": "Ongeza Ufunguo wa API",
+ "editTitle": "Hariri Ufunguo wa API",
+ "addDescription": "Hifadhi ufunguo wa API kwa kujaza kiotomatiki katika usakinishaji wa seva za MCP.",
+ "editDescription": "Sasisha maelezo ya ufunguo. Lazima uweke tena thamani.",
+ "keychainUnavailable": "Mnyororo wa funguo wa OS haupatikani - funguo zimesimbwa kwa AES-256 kwa ndani. Sakinisha gnome-keyring kwa ulinzi wa kiwango cha OS.",
+ "name": "Jina",
+ "namePlaceholder": "k.m. OpenAI Production",
+ "environmentVariableName": "Jina la Kigeu cha Mazingira",
+ "envVarPlaceholder": "k.m. OPENAI_API_KEY",
+ "value": "Thamani",
+ "reenterValue": "Weka tena thamani ya ufunguo",
+ "valuePlaceholder": "sk-...",
+ "scope": "Wigo",
+ "userScopeLabel": "Mtumiaji (kimataifa)",
+ "projectScopeLabel": "Mradi: {{project}}",
+ "projectUnavailable": "Mradi haupatikani",
+ "boundTo": "Imefungwa kwa {{path}}",
+ "cancel": "Ghairi",
+ "saving": "Inahifadhi...",
+ "update": "Sasisha",
+ "save": "Hifadhi",
+ "errors": {
+ "invalidEnvVarFormat": "Tumia herufi, tarakimu, vibambo vya chini. Lazima ianze na herufi au kibambo cha chini.",
+ "nameRequired": "Jina linahitajika",
+ "envVarRequired": "Jina la kigeu cha mazingira linahitajika",
+ "invalidEnvVar": "Jina la kigeu cha mazingira batili",
+ "valueRequired": "Thamani ya ufunguo inahitajika",
+ "projectScopeRequiresProject": "Funguo za API zenye wigo wa mradi zinahitaji mradi hai",
+ "saveFailed": "Imeshindwa kuhifadhi"
+ }
+ }
+ },
+ "skillReview": {
+ "title": "Pitia mabadiliko ya ujuzi",
+ "description": "{{reviewLabel}} huhakiki mabadiliko ya mfumo wa faili kwanza. Hakuna kinachoandikwa hadi uthibitishe hapa chini.",
+ "noPreview": "Hakuna hakikisho linalopatikana.",
+ "confirmPromptPrefix": "Pitia tofauti hapa chini, kisha tumia",
+ "confirmPromptSuffix": "kutumia mabadiliko haya.",
+ "noChanges": "Bado hakuna mabadiliko ya faili yaliyogunduliwa.",
+ "binaryBadge": "binari",
+ "binaryPreviewHidden": "Hakikisho la faili ya binari halionyeshwi. Faili itanakiliwa kama ilivyo.",
+ "summary": {
+ "fileChanges": "mabadiliko {{count}} ya faili",
+ "fileChanges_one": "badiliko {{count}} la faili",
+ "fileChanges_other": "mabadiliko {{count}} ya faili",
+ "new": "{{count}} mpya",
+ "updated": "{{count}} zimesasishwa",
+ "removed": "{{count}} zimeondolewa",
+ "binary": "{{count}} binari",
+ "fileChanges_few": "mabadiliko {{count}} ya faili",
+ "fileChanges_many": "mabadiliko {{count}} ya faili"
+ }
+ },
+ "mcpCard": {
+ "toolsCount": "zana {{count}}",
+ "toolsCount_one": "zana {{count}}",
+ "toolsCount_other": "zana {{count}}",
+ "envCount": "vigeu {{count}}",
+ "envCount_one": "kigeu {{count}}",
+ "envCount_other": "vigeu {{count}}",
+ "auth": "Uthibitishaji",
+ "byAuthor": "na {{author}}",
+ "hosting": {
+ "remote": "Mbali",
+ "local": "Ya ndani",
+ "both": "Vyote viwili"
+ },
+ "toolsCount_few": "zana {{count}}",
+ "toolsCount_many": "zana {{count}}",
+ "envCount_few": "vigeu {{count}}",
+ "envCount_many": "vigeu {{count}}",
+ "repository": "Hazina",
+ "website": "Tovuti"
+ },
+ "installButton": {
+ "installing": "Inasakinisha...",
+ "removing": "Inaondoa...",
+ "done": "Imekamilika",
+ "retry": "Jaribu tena",
+ "uninstall": "Ondoa usakinishaji",
+ "install": "Sakinisha"
+ },
+ "pluginCard": {
+ "official": "Rasmi"
+ }
+}
diff --git a/src/features/localization/renderer/locales/sw/report.json b/src/features/localization/renderer/locales/sw/report.json
new file mode 100644
index 00000000..69225363
--- /dev/null
+++ b/src/features/localization/renderer/locales/sw/report.json
@@ -0,0 +1,217 @@
+{
+ "cost": {
+ "breakdownTitle": "Mchanganuo wa Gharama (kwa tokeni 1M)",
+ "cacheRead": "Usomaji wa Akiba",
+ "cacheWrite": "Uandishi wa Akiba",
+ "cost": "Gharama",
+ "input": "Ingizo",
+ "noCommits": "hakuna commit",
+ "noLinesChanged": "hakuna mistari iliyobadilishwa",
+ "output": "Towe",
+ "parent": "Mzazi: {{cost}}",
+ "parentCost": "Gharama ya Mzazi",
+ "perCommit": "Kwa Commit",
+ "perCommitFormula": "gharama jumla ÷ commit {{count}}",
+ "perCommitFormula_few": "gharama jumla ÷ commit {{count}}",
+ "perCommitFormula_many": "gharama jumla ÷ commit {{count}}",
+ "perCommitFormula_one": "gharama jumla ÷ commit {{count}}",
+ "perCommitFormula_other": "gharama jumla ÷ commit {{count}}",
+ "perLineChanged": "Kwa Mstari Uliobadilishwa",
+ "perLineFormula": "gharama jumla ÷ mstari {{count}}",
+ "perLineFormula_few": "gharama jumla ÷ mistari {{count}}",
+ "perLineFormula_many": "gharama jumla ÷ mistari {{count}}",
+ "perLineFormula_one": "gharama jumla ÷ mstari {{count}}",
+ "perLineFormula_other": "gharama jumla ÷ mistari {{count}}",
+ "subagent": "Wakala mdogo: {{cost}}",
+ "subagentCost": "Gharama ya Wakala Mdogo",
+ "title": "Uchambuzi wa Gharama",
+ "total": "Jumla"
+ },
+ "insights": {
+ "agent": "wakala",
+ "agent_few": "mawakala",
+ "agent_many": "mawakala",
+ "agent_one": "wakala",
+ "agent_other": "mawakala",
+ "agentTree": "Mti wa Wakala ({{count}} {{unit}})",
+ "background": "(usuli)",
+ "bashCommands": "Amri za Bash",
+ "outOfScopeFindings": "Matokeo Nje ya Wigo ({{count}})",
+ "questionsAsked": "Maswali Yaliyoulizwa ({{count}})",
+ "repeated": "Yamerudiwa",
+ "skillsInvoked": "Ujuzi Uliotumiwa ({{count}})",
+ "taskDispatches": "Utumaji wa Kazi ({{count}})",
+ "tasksCreated": "Kazi Zilizoundwa ({{count}})",
+ "teamMode": "Hali ya Timu",
+ "teams": "Timu: {{teams}}",
+ "title": "Maarifa ya Kipindi",
+ "total": "Jumla",
+ "unique": "Ya Kipekee",
+ "skillsInvoked_few": "Ujuzi Uliotumiwa ({{count}})",
+ "skillsInvoked_many": "Ujuzi Uliotumiwa ({{count}})",
+ "skillsInvoked_one": "Ujuzi Uliotumiwa ({{count}})",
+ "skillsInvoked_other": "Ujuzi Uliotumiwa ({{count}})",
+ "taskDispatches_few": "Utumaji wa Kazi ({{count}})",
+ "taskDispatches_many": "Utumaji wa Kazi ({{count}})",
+ "taskDispatches_one": "Utumaji wa Kazi ({{count}})",
+ "taskDispatches_other": "Utumaji wa Kazi ({{count}})",
+ "tasksCreated_few": "Kazi Zilizoundwa ({{count}})",
+ "tasksCreated_many": "Kazi Zilizoundwa ({{count}})",
+ "tasksCreated_one": "Kazi Zilizoundwa ({{count}})",
+ "tasksCreated_other": "Kazi Zilizoundwa ({{count}})",
+ "questionsAsked_few": "Maswali Yaliyoulizwa ({{count}})",
+ "questionsAsked_many": "Maswali Yaliyoulizwa ({{count}})",
+ "questionsAsked_one": "Maswali Yaliyoulizwa ({{count}})",
+ "questionsAsked_other": "Maswali Yaliyoulizwa ({{count}})",
+ "agentTree_few": "Mti wa Wakala ({{count}} {{unit}})",
+ "agentTree_many": "Mti wa Wakala ({{count}} {{unit}})",
+ "agentTree_one": "Mti wa Wakala ({{count}} {{unit}})",
+ "agentTree_other": "Mti wa Wakala ({{count}} {{unit}})",
+ "outOfScopeFindings_few": "Matokeo Nje ya Wigo ({{count}})",
+ "outOfScopeFindings_many": "Matokeo Nje ya Wigo ({{count}})",
+ "outOfScopeFindings_one": "Matokeo Nje ya Wigo ({{count}})",
+ "outOfScopeFindings_other": "Matokeo Nje ya Wigo ({{count}})",
+ "keyTakeaways": "Mambo Muhimu"
+ },
+ "quality": {
+ "chars": "herufi",
+ "corrections": "Marekebisho",
+ "failed": "imeshindwa",
+ "fileReadRedundancy": "Urudufu wa Usomaji wa Faili",
+ "firstMessage": "Ujumbe wa Kwanza",
+ "firstRun": "Mwendo wa Kwanza",
+ "frictionRate": "Kiwango cha Msuguano",
+ "lastRun": "Mwendo wa Mwisho",
+ "messagesBeforeWork": "Ujumbe Kabla ya Kazi",
+ "passed": "imefaulu",
+ "promptQuality": "Ubora wa Kidokezo",
+ "readsPerUniqueFile": "Usomaji/Faili ya Kipekee",
+ "snapshot": "picha",
+ "snapshot_few": "picha",
+ "snapshot_many": "picha",
+ "snapshot_one": "picha",
+ "snapshot_other": "picha",
+ "startupOverhead": "Gharama ya Uanzishaji",
+ "testProgression": "Maendeleo ya Majaribio",
+ "title": "Ishara za Ubora",
+ "tokensBeforeWork": "Tokeni Kabla ya Kazi",
+ "totalReads": "Jumla ya Usomaji",
+ "uniqueFiles": "Faili za Kipekee",
+ "userMessages": "Ujumbe wa Mtumiaji",
+ "percentOfTotal": "% ya Jumla"
+ },
+ "tokens": {
+ "apiCalls": "Miito ya API",
+ "cacheCreate": "Uundaji wa Akiba",
+ "cacheEfficiency": "Ufanisi wa Akiba",
+ "cacheRead": "Usomaji wa Akiba",
+ "cacheReadPct": "% ya Usomaji wa Akiba",
+ "coldStart": "Mwanzo wa Baridi",
+ "cost": "Gharama",
+ "input": "Ingizo",
+ "model": "Modeli",
+ "no": "Hapana",
+ "output": "Towe",
+ "readWriteRatio": "Uwiano wa R/W",
+ "title": "Matumizi ya Tokeni",
+ "total": "Jumla",
+ "yes": "Ndiyo"
+ },
+ "subagents": {
+ "title": "Mawakala Wadogo",
+ "metrics": {
+ "count": "Idadi",
+ "totalTokens": "Jumla ya Tokeni",
+ "totalDuration": "Jumla ya Muda",
+ "totalCost": "Jumla ya Gharama"
+ },
+ "table": {
+ "description": "Maelezo",
+ "type": "Aina",
+ "tokens": "Tokeni",
+ "duration": "Muda",
+ "cost": "Gharama"
+ }
+ },
+ "overview": {
+ "title": "Muhtasari",
+ "yes": "Ndiyo",
+ "no": "Hapana",
+ "metrics": {
+ "duration": "Muda",
+ "messages": "Ujumbe",
+ "contextUsage": "Matumizi ya Muktadha",
+ "compactions": "Mibanano",
+ "branch": "Tawi",
+ "subagents": "Mawakala Wadogo",
+ "project": "Mradi",
+ "sessionId": "Kitambulisho cha Kipindi"
+ }
+ },
+ "timeline": {
+ "title": "Ratiba na Shughuli",
+ "idleAnalysis": "Uchambuzi wa Kutotumika",
+ "metrics": {
+ "idleGaps": "Mapengo ya Kutotumika",
+ "totalIdle": "Jumla ya Kutotumika",
+ "activeTime": "Muda Hai",
+ "idlePercent": "% ya Kutotumika"
+ },
+ "modelSwitches": "Mibadiliko ya Modeli ({{count}})",
+ "modelSwitches_one": "Mibadiliko ya Modeli ({{count}})",
+ "modelSwitches_other": "Mibadiliko ya Modeli ({{count}})",
+ "messageNumber": "ujumbe #{{number}}",
+ "keyEvents": "Matukio Muhimu",
+ "modelSwitches_few": "Mibadiliko ya Modeli ({{count}})",
+ "modelSwitches_many": "Mibadiliko ya Modeli ({{count}})"
+ },
+ "tools": {
+ "title": "Matumizi ya Zana",
+ "summary": "miito {{formattedCount}} jumla katika zana {{toolCount}}",
+ "columns": {
+ "tool": "Zana",
+ "calls": "Miito",
+ "errors": "Hitilafu",
+ "successPercent": "% ya Mafanikio",
+ "health": "Afya"
+ }
+ },
+ "git": {
+ "title": "Shughuli za Git",
+ "commits": "Commit",
+ "pushes": "Push",
+ "linesAdded": "Mistari Iliyoongezwa",
+ "linesRemoved": "Mistari Iliyoondolewa",
+ "branchesCreated": "Matawi Yaliyoundwa"
+ },
+ "friction": {
+ "title": "Ishara za Msuguano",
+ "rate": "Kiwango cha Msuguano: {{rate}}%",
+ "correctionsCount": "marekebisho {{count}}",
+ "correctionsCount_one": "marekebisho {{count}}",
+ "corrections": "Marekebisho",
+ "thrashingSignals": "Ishara za Kuhangaika",
+ "repeatedBashCommands": "Amri za Bash Zilizorudiwa",
+ "reworkedFiles": "Faili Zilizofanyiwa Kazi Upya (mabadiliko 3+)",
+ "correctionsCount_few": "marekebisho {{count}}",
+ "correctionsCount_many": "marekebisho {{count}}",
+ "correctionsCount_other": "marekebisho {{count}}"
+ },
+ "errors": {
+ "title": "Hitilafu",
+ "permissionDenied": "Ruhusa Imekataliwa",
+ "messageIndex": "ujumbe #{{index}}",
+ "input": "Ingizo",
+ "error": "Hitilafu",
+ "count": "hitilafu {{count}}",
+ "count_one": "hitilafu {{count}}",
+ "permissionDenialCount": "ukataaji wa ruhusa {{count}}",
+ "permissionDenialCount_one": "ukataaji wa ruhusa {{count}}",
+ "count_few": "hitilafu {{count}}",
+ "count_many": "hitilafu {{count}}",
+ "count_other": "hitilafu {{count}}",
+ "permissionDenialCount_few": "ukataaji wa ruhusa {{count}}",
+ "permissionDenialCount_many": "ukataaji wa ruhusa {{count}}",
+ "permissionDenialCount_other": "ukataaji wa ruhusa {{count}}"
+ }
+}
diff --git a/src/features/localization/renderer/locales/sw/settings.json b/src/features/localization/renderer/locales/sw/settings.json
new file mode 100644
index 00000000..e3817e9a
--- /dev/null
+++ b/src/features/localization/renderer/locales/sw/settings.json
@@ -0,0 +1,994 @@
+{
+ "tabs": {
+ "advanced": {
+ "description": "Chaguo za watumiaji wabobezi: hamisha/leta usanidi, weka upya chaguo-msingi, na uhariri usanidi ghafi.",
+ "label": "Kina"
+ },
+ "general": {
+ "description": "Mapendeleo ya msingi ya programu kama mandhari, lugha, msongamano wa onyesho, na tabia ya uanzishaji.",
+ "label": "Jumla"
+ },
+ "infoAriaLabel": "{{label}} ni nini?",
+ "notifications": {
+ "description": "Dhibiti wakati na jinsi unavyoarifiwa kuhusu shughuli za wakala, ukamilishaji wa kazi, na hitilafu.",
+ "label": "Arifa"
+ }
+ },
+ "view": {
+ "description": "Dhibiti mapendeleo yako ya programu",
+ "loading": "Inapakia mipangilio...",
+ "title": "Mipangilio"
+ },
+ "runtimeProvider": {
+ "actions": {
+ "cancel": "Ghairi",
+ "test": "Jaribu"
+ },
+ "defaults": {
+ "allProjects": "Miradi yote",
+ "allProjectsHint": "Majaribio hutumia {{project}}. Chaguo-msingi hutumika isipokuwa mradi una ubatilishaji.",
+ "loadingContexts": "Inapakia miktadha...",
+ "projectHint": "Kuhifadhi kunabatilisha {{project}} pekee.",
+ "projectOverrideContext": "Muktadha wa ubatilishaji wa mradi",
+ "scopeDescriptionAllProjects": "Chaguo-msingi kwa kila mradi usio na ubatilishaji wake wa OpenCode.",
+ "scopeDescriptionProject": "Batilisha mradi uliochaguliwa pekee. Timu zinazoendeshwa hazibadilishwi.",
+ "selectProjectContext": "Chagua muktadha wa mradi",
+ "selectProjectHint": "Chagua mradi kabla ya kujaribu modeli za ndani au kuhifadhi chaguo-msingi.",
+ "selectValidationContext": "Chagua muktadha wa uthibitishaji",
+ "setAllProjectsDefault": "Weka chaguo-msingi cha miradi yote",
+ "setProjectDefault": "Weka chaguo-msingi cha mradi",
+ "thisProject": "Mradi huu",
+ "title": "Chaguo-msingi za OpenCode",
+ "validationContext": "Muktadha wa uthibitishaji"
+ },
+ "diagnostics": {
+ "copied": "Utambuzi umenakiliwa",
+ "copiedShort": "Imenakiliwa",
+ "copy": "Nakili utambuzi",
+ "hints": "Vidokezo",
+ "likelyCause": "Sababu inayowezekana:",
+ "windowsSymlinkAdminHint": "Windows: endesha Agent Teams AI kama Msimamizi"
+ },
+ "models": {
+ "alreadyDefault": "Hii tayari ni chaguo-msingi la OpenCode lililochaguliwa.",
+ "empty": "Hakuna modeli zilizopatikana.",
+ "emptyFree": "Hakuna modeli za bure zilizopatikana.",
+ "emptyRecommended": "Hakuna modeli zilizopendekezwa zilizopatikana.",
+ "emptyRecommendedFree": "Hakuna modeli za bure zilizopendekezwa zilizopatikana.",
+ "freeOnly": "Bure pekee",
+ "launchableDescription": "Njia zinazojulikana kutoka usanidi wa OpenCode, modeli za bure zilizojengwa ndani, na chaguo-msingi la sasa. Njia za ndani zinahitaji jaribio lililofaulu kabla ya kuwa tayari kwa uzinduzi wa timu.",
+ "launchableTitle": "Njia za modeli za OpenCode",
+ "loadingRoutes": "Inapakia njia za modeli za OpenCode...",
+ "noRoutesMatch": "Hakuna njia za modeli za OpenCode zinazolingana na \"{{query}}\".",
+ "noneReported": "Bado hakuna njia za modeli za OpenCode zilizoripotiwa. Sanidi njia ya ndani katika OpenCode au tumia kichupo cha Watoa Huduma kukagua watoa huduma wa katalogi.",
+ "recommendedOnly": "Zilizopendekezwa pekee",
+ "searchPlaceholder": "Tafuta modeli",
+ "selectProjectBeforeTesting": "Chagua muktadha wa mradi kabla ya kujaribu modeli.",
+ "selectProjectBeforeTestingDefaults": "Chagua muktadha wa mradi kabla ya kujaribu au kuhifadhi chaguo-msingi za OpenCode.",
+ "testInProgress": "Jaribio la modeli tayari linaendeshwa.",
+ "useInTeamPicker": "Hifadhi kwa kichaguzi cha timu",
+ "validationContextRequired": "Chagua muktadha wa uthibitishaji hapo juu ili kuwezesha Jaribu na Weka chaguo-msingi. Kuhifadhi kwa kichaguzi cha timu huhifadhi njia kwa timu mpya pekee.",
+ "actionsUnavailable": "Vitendo havipatikani kwa muda.",
+ "defaultSaveInProgress": "Chaguo-msingi la OpenCode linahifadhiwa.",
+ "routeUnavailableAuth": "Mtoa huduma huyu anahitaji uthibitishaji kabla ya modeli hii kutumika.",
+ "routeUnavailableFailed": "Njia hii ya modeli imeshindwa jaribio lake la mwisho la utekelezaji.",
+ "routeUnavailableGeneric": "Njia hii ya modeli haiwezi kutumika sasa hivi.",
+ "routeUnavailableUnknown": "Modeli hii ni chaguo-msingi la sasa la OpenCode, lakini bado haipatikani katika katalogi hai."
+ },
+ "providers": {
+ "catalog": "Katalogi ya watoa huduma wa OpenCode",
+ "countFallback": "Watoa huduma wa OpenCode",
+ "description": "{{count}}. Watoa huduma walioungana na waliopendekezwa wanaonyeshwa kwanza.",
+ "loadMore": "Pakia watoa huduma zaidi",
+ "loading": "Inapakia watoa huduma wa OpenCode",
+ "noMatches": "Hakuna watoa huduma wanaolingana na utafutaji huo.",
+ "noneReported": "Hakuna watoa huduma wa OpenCode walioripotiwa na runtime iliyodhibitiwa.",
+ "recommended": "Inapendekezwa",
+ "refreshCatalog": "Onyesha upya katalogi",
+ "searchPlaceholder": "Tafuta watoa huduma",
+ "description_few": "{{count}}. Watoa huduma walioungana na waliopendekezwa wanaonyeshwa kwanza.",
+ "description_many": "{{count}}. Watoa huduma walioungana na waliopendekezwa wanaonyeshwa kwanza.",
+ "description_one": "{{count}}. Watoa huduma walioungana na waliopendekezwa wanaonyeshwa kwanza.",
+ "description_other": "{{count}}. Watoa huduma walioungana na waliopendekezwa wanaonyeshwa kwanza."
+ },
+ "setup": {
+ "loading": "Inapakia usanidi wa mtoa huduma..."
+ },
+ "summary": {
+ "defaultModel": "Chaguo-msingi la OpenCode: {{model}}",
+ "loading": "Inapakia runtime ya OpenCode iliyodhibitiwa, watoa huduma walioungana, na chaguo-msingi za modeli...",
+ "source": "Chanzo: {{source}}",
+ "title": "Runtime ya OpenCode"
+ },
+ "tabs": {
+ "models": "Modeli",
+ "providers": "Watoa Huduma"
+ },
+ "modelRoutes": {
+ "searchPlaceholder": "Tafuta njia za modeli"
+ },
+ "badges": {
+ "usedInTeamPicker": "Imehifadhiwa kwa kichaguzi cha timu",
+ "free": "bure",
+ "local": "ya ndani",
+ "configured": "imesanidiwa",
+ "knownRoute": "njia inayojulikana",
+ "connected": "imeungana",
+ "verified": "imethibitishwa",
+ "needsTest": "inahitaji jaribio",
+ "failed": "imeshindwa",
+ "unknown": "haijulikani",
+ "default": "chaguo-msingi"
+ },
+ "compatibleEndpoint": {
+ "baseUrlPlaceholder": "http://localhost:1234"
+ }
+ },
+ "general": {
+ "agentLanguage": {
+ "description": "Lugha ya mawasiliano ya wakala",
+ "descriptionWithDetected": "Lugha ya mawasiliano ya wakala (imegunduliwa: {{detected}})",
+ "emptyMessage": "Hakuna lugha iliyopatikana.",
+ "label": "Lugha",
+ "searchPlaceholder": "Tafuta lugha...",
+ "selectPlaceholder": "Chagua lugha...",
+ "title": "Lugha ya Wakala"
+ },
+ "appLanguage": {
+ "description": "Lugha ya kiolesura cha programu.",
+ "label": "Lugha",
+ "title": "Lugha ya Programu"
+ },
+ "appearance": {
+ "autoExpandAIGroups": {
+ "description": "Panua kiotomatiki kila zamu ya majibu unapofungua nakala au kupokea ujumbe mpya",
+ "label": "Panua majibu ya AI kwa chaguo-msingi"
+ },
+ "nativeTitleBar": {
+ "description": "Tumia fremu ya dirisha ya mfumo ya chaguo-msingi badala ya upau wa kichwa maalum",
+ "label": "Tumia upau wa kichwa asili",
+ "restartConfirm": {
+ "confirmLabel": "Anzisha upya",
+ "message": "Programu inahitaji kuanzishwa upya ili kutumia mabadiliko ya upau wa kichwa. Anzisha upya sasa?",
+ "title": "Kuanzisha upya kunahitajika"
+ }
+ },
+ "theme": {
+ "description": "Chagua mandhari ya rangi unayopendelea",
+ "label": "Mandhari",
+ "options": {
+ "dark": "Giza",
+ "light": "Mwanga",
+ "system": "Mfumo"
+ }
+ },
+ "title": "Muonekano"
+ },
+ "browserAccess": {
+ "serverMode": {
+ "description": "Anzisha seva ya HTTP ili kufikia UI kutoka kivinjari au kupachika katika iframe",
+ "label": "Wezesha hali ya seva"
+ },
+ "title": "Ufikiaji wa Kivinjari"
+ },
+ "localClaudeRoot": {
+ "actions": {
+ "selectFolder": "Chagua Folda",
+ "selectFolderManually": "Chagua Folda kwa Mkono",
+ "useAutoDetect": "Tumia Ugunduzi Otomatiki",
+ "useFolder": "Tumia Folda",
+ "usePath": "Tumia Njia",
+ "useThisPath": "Tumia Njia Hii",
+ "useWsl": "Unatumia Linux/WSL?"
+ },
+ "confirm": {
+ "noProjectsDir": {
+ "message": "Folda hii haina saraka ya \"projects\". Endelea hata hivyo?",
+ "title": "Hakuna saraka ya projects iliyopatikana"
+ },
+ "notClaudeDir": {
+ "message": "Folda hii imeitwa \"{{folderName}}\", si \".claude\". Endelea hata hivyo?",
+ "title": "Folda iliyochaguliwa si .claude"
+ },
+ "noWslPaths": {
+ "message": "Haikuweza kupata distros za WSL zenye data ya Claude kiotomatiki. Chagua folda kwa mkono?",
+ "title": "Hakuna njia za WSL za Claude zilizopatikana"
+ },
+ "wslNoProjectsDir": {
+ "message": "\"{{path}}\" haina saraka ya \"projects\". Endelea hata hivyo?",
+ "title": "Njia ya WSL haina saraka ya projects"
+ }
+ },
+ "current": {
+ "autoDetected": "Imegunduliwa kiotomatiki: {{path}}",
+ "autoDetectedPath": "Inatumia njia iliyogunduliwa kiotomatiki",
+ "customPath": "Inatumia njia maalum",
+ "label": "Mzizi wa Sasa wa Ndani"
+ },
+ "description": "Chagua ni folda gani ya ndani inayochukuliwa kama mzizi wa data yako ya Claude",
+ "errors": {
+ "detectWslFailed": "Imeshindwa kugundua njia za mzizi wa WSL za Claude",
+ "loadFailed": "Imeshindwa kupakia mipangilio ya mzizi wa Claude wa ndani",
+ "updateFailed": "Imeshindwa kusasisha mzizi wa Claude"
+ },
+ "title": "Mzizi wa Claude wa Ndani",
+ "wslModal": {
+ "closeAriaLabel": "Funga kidirisha cha njia ya WSL",
+ "description": "Usambazaji wa WSL uliogunduliwa na watahiniwa wa mzizi wa Claude",
+ "noProjectsDir": "Hakuna saraka ya projects iliyogunduliwa",
+ "title": "Chagua Mzizi wa Claude wa WSL"
+ }
+ },
+ "privacy": {
+ "telemetry": {
+ "description": "Saidia kuboresha programu kwa kutuma data isiyojulikana ya hitilafu na utendaji",
+ "label": "Tuma ripoti za hitilafu"
+ },
+ "title": "Faragha"
+ },
+ "server": {
+ "runningOn": "Inaendeshwa kwenye",
+ "standaloneModeDescription": "Inaendeshwa katika hali ya kujitegemea. Seva ya HTTP huwa hai kila wakati. Arifa za mfumo hazipatikani - vichochezi vya arifa vinarekodiwa ndani ya programu pekee.",
+ "title": "Seva"
+ },
+ "startup": {
+ "launchAtLogin": {
+ "description": "Anzisha programu kiotomatiki unapoingia",
+ "label": "Zindua wakati wa kuingia"
+ },
+ "showDockIcon": {
+ "description": "Onyesha aikoni ya programu kwenye dock (macOS)",
+ "label": "Onyesha aikoni ya dock"
+ },
+ "title": "Uanzishaji"
+ }
+ },
+ "notifications": {
+ "dev": {
+ "descriptionPrefix": "Arifa zinaweza zisifanye kazi katika hali ya maendeleo. macOS inatambua programu kama \"Electron\" (kitambulisho cha bundle",
+ "descriptionSuffix": ") badala ya jina la programu ya uzalishaji. Kagua Mipangilio ya Mfumo > Arifa > Electron ili kuthibitisha ruhusa.",
+ "title": "Hali ya Maendeleo"
+ },
+ "ignoredRepositories": {
+ "description": "Arifa kutoka kwa hazina hizi zitapuuzwa",
+ "empty": "Hakuna hazina zilizopuuzwa",
+ "selectPlaceholder": "Chagua hazina ya kupuuza...",
+ "title": "Hazina Zilizopuuzwa"
+ },
+ "settings": {
+ "enabled": {
+ "description": "Onyesha arifa za mfumo kwa hitilafu na matukio",
+ "label": "Wezesha Arifa za Mfumo"
+ },
+ "sound": {
+ "description": "Cheza sauti arifa zinapotokea",
+ "label": "Cheza sauti"
+ },
+ "subagentErrors": {
+ "description": "Gundua na arifu kuhusu hitilafu katika vipindi vya wakala mdogo",
+ "label": "Jumuisha hitilafu za wakala mdogo"
+ },
+ "title": "Mipangilio ya Arifa"
+ },
+ "snooze": {
+ "clear": "Futa Usitishaji",
+ "description": "Sitisha arifa kwa muda",
+ "descriptionWithTime": "Imesitishwa hadi {{time}}",
+ "label": "Sitisha arifa",
+ "options": {
+ "15": "dakika 15",
+ "30": "dakika 30",
+ "60": "saa 1",
+ "120": "saa 2",
+ "240": "saa 4",
+ "-1": "Hadi kesho"
+ },
+ "selectDuration": "Chagua muda..."
+ },
+ "taskCompletion": {
+ "description": "Pata arifa asili za OS Claude inapomaliza kazi - sauti, mabango, na beji za Dock/upau wa kazi. Hufanya kazi kwenye macOS, Linux, na Windows.",
+ "installPlugin": "Sakinisha programu-jalizi ya claude-notifications-go",
+ "title": "Arifa za Ukamilishaji wa Kazi"
+ },
+ "team": {
+ "allTasksCompleted": {
+ "description": "Arifu wakati kila kazi katika timu inafikia hali ya imekamilika",
+ "label": "Kazi zote zimekamilika"
+ },
+ "autoResumeOnRateLimit": {
+ "description": "Claude inaporipoti muda wa kuweka upya, ratibu kidokezo cha ufuatiliaji kwa kiongozi wa timu baada ya kikomo kuweka upya",
+ "label": "Endelea kiotomatiki baada ya kikomo cha kiwango"
+ },
+ "clarifications": {
+ "description": "Onyesha arifa asili za OS wakati kazi inahitaji ingizo lako",
+ "label": "Arifa za ufafanuzi wa kazi"
+ },
+ "crossTeamMessage": {
+ "description": "Arifu wakati ujumbe unafika kutoka timu nyingine",
+ "label": "Arifa za ujumbe wa timu mtambuka"
+ },
+ "leadInbox": {
+ "description": "Arifu wakati wenzako wa timu wanatuma ujumbe kwa kiongozi wa timu",
+ "label": "Arifa za kikasha cha kiongozi"
+ },
+ "statusChange": {
+ "description": "Onyesha arifa asili za OS wakati hali ya kazi inabadilika",
+ "label": "Arifa za mabadiliko ya hali ya kazi",
+ "onlySolo": {
+ "description": "Arifu tu wakati timu haina wenzako wa timu",
+ "label": "Katika hali ya Peke yake pekee"
+ },
+ "statuses": {
+ "description": "Ni hali zipi lengwa zinazochochea arifa",
+ "label": "Arifu kwenye hali hizi",
+ "options": {
+ "approved": "Imeidhinishwa",
+ "completed": "Imekamilika",
+ "deleted": "Imefutwa",
+ "in_progress": "Imeanza",
+ "needsFix": "Inahitaji Marekebisho",
+ "pending": "Inasubiri",
+ "review": "Mapitio"
+ }
+ }
+ },
+ "taskComments": {
+ "description": "Onyesha arifa asili za OS wakati mawakala wanatoa maoni kwenye kazi",
+ "label": "Arifa za maoni ya kazi"
+ },
+ "taskCreated": {
+ "description": "Onyesha arifa asili za OS wakati kazi mpya inaundwa",
+ "label": "Arifa za kazi iliyoundwa"
+ },
+ "teamLaunched": {
+ "description": "Arifu wakati timu inamaliza kuzinduliwa na iko tayari",
+ "label": "Arifa za timu iliyozinduliwa"
+ },
+ "title": "Arifa za Timu",
+ "toolApproval": {
+ "description": "Arifu wakati zana inahitaji idhini yako (Ruhusu/Kataa) wakati programu haijalengwa",
+ "label": "Arifa za idhini ya zana"
+ },
+ "userInbox": {
+ "description": "Arifu wakati wenzako wa timu wanakutumia ujumbe",
+ "label": "Arifa za kikasha cha mtumiaji"
+ }
+ },
+ "test": {
+ "action": "Tuma Jaribio",
+ "description": "Tuma arifa ya jaribio ili kuthibitisha uwasilishaji",
+ "failedToSend": "Imeshindwa kutuma arifa ya jaribio",
+ "label": "Arifa ya jaribio",
+ "sending": "Inatuma...",
+ "sent": "Imetumwa!",
+ "unknownError": "Hitilafu isiyojulikana"
+ }
+ },
+ "advanced": {
+ "about": {
+ "appIconAlt": "Aikoni ya programu",
+ "description": "Kusanya timu za wakala wa AI zinazofanya kazi kwa kujitegemea sambamba, kuwasiliana kati ya timu, na kudhibiti kazi kwenye ubao wa kanban - zikiwa na mapitio ya msimbo yaliyojengwa ndani, ufuatiliaji wa michakato wa moja kwa moja, na uonekano kamili wa zana.",
+ "standalone": "Kujitegemea",
+ "title": "Kuhusu",
+ "version": "Toleo {{version}}"
+ },
+ "configuration": {
+ "editConfig": "Hariri Usanidi",
+ "exportConfig": "Hamisha Usanidi",
+ "importConfig": "Leta Usanidi",
+ "openInEditor": "Fungua katika Kihariri",
+ "resetToDefaults": "Weka upya kuwa Chaguo-msingi",
+ "title": "Usanidi"
+ },
+ "updates": {
+ "available": "v{{version}} linapatikana",
+ "check": "Kagua Masasisho",
+ "checking": "Inakagua...",
+ "ready": "Sasisho liko tayari",
+ "unknownVersion": "haijulikani",
+ "upToDate": "Limesasishwa"
+ },
+ "appName": "Agent Teams AI"
+ },
+ "configEditor": {
+ "errors": {
+ "loadFailed": "Imeshindwa kupakia usanidi",
+ "saveFailed": "Imeshindwa kuhifadhi usanidi"
+ },
+ "footer": {
+ "autoSave": "Mabadiliko yanahifadhiwa kiotomatiki baada ya kuhariri",
+ "toClose": "kufunga",
+ "escapeKey": "Esc"
+ },
+ "loading": "Inapakia usanidi...",
+ "status": {
+ "invalidJson": "JSON batili",
+ "saveFailed": "Kuhifadhi kumeshindwa",
+ "saved": "Imehifadhiwa",
+ "saving": "Inahifadhi..."
+ },
+ "title": "Hariri Usanidi"
+ },
+ "notificationTriggers": {
+ "add": {
+ "cancel": "Ghairi",
+ "submit": "Ongeza Kichochezi",
+ "title": "Ongeza Kichochezi Maalum"
+ },
+ "builtin": {
+ "description": "Vichochezi vya chaguo-msingi vinavyokuja na programu. Unaweza kuviwezesha au kuvizima na kubinafsisha mifumo yake.",
+ "title": "Vichochezi Vilivyojengwa Ndani"
+ },
+ "card": {
+ "builtinBadge": "Imejengwa Ndani",
+ "collapseAriaLabel": "Kunja",
+ "deleteAriaLabel": "Futa kichochezi",
+ "editNameAriaLabel": "Hariri jina",
+ "expandAriaLabel": "Panua"
+ },
+ "color": {
+ "customHexTitle": "Rangi maalum ya hex",
+ "invalidHex": "Hex batili"
+ },
+ "configuration": {
+ "alertIfGreaterThan": "Tahadharisha ikiwa >",
+ "emptyPatternHint": "Acha tupu ili kulingana na maudhui yote. Hutumia sintaksia ya regex ya JavaScript.",
+ "errorStatusDescription": "Huchochewa wakati utekelezaji wa zana unaporipoti hitilafu (is_error: true).",
+ "tokensUnit": "tokeni",
+ "matchPatternPlaceholder": "k.m., error|failed|exception"
+ },
+ "custom": {
+ "description": "Unda vichochezi vyako ili kuarifiwa kuhusu mifumo maalum au matokeo ya zana.",
+ "empty": "Bado hakuna vichochezi maalum vilivyosanidiwa.",
+ "title": "Vichochezi Maalum"
+ },
+ "errors": {
+ "invalidRegexPattern": "Mfumo wa regex batili"
+ },
+ "fields": {
+ "contentType": "Aina ya Maudhui",
+ "matchField": "Sehemu ya Kulinganisha",
+ "matchPattern": "Mfumo wa Kulinganisha (Regex)",
+ "scopeToolName": "Wigo / Jina la Zana",
+ "scopeToolNameOptional": "Wigo / Jina la Zana (hiari)",
+ "threshold": "Kizingiti",
+ "tokenType": "Aina ya Tokeni",
+ "triggerNamePlaceholder": "k.m., Tahadhari ya Kushindwa kwa Build",
+ "triggerNameRequired": "Jina la Kichochezi *"
+ },
+ "ignorePatterns": {
+ "hint": "Bonyeza Enter ili kuongeza. Arifa hurukwa ikiwa mfumo wowote unalingana.",
+ "placeholder": "Ongeza regex ya kupuuza...",
+ "removeAriaLabel": "Ondoa mfumo wa kupuuza",
+ "summary": "Kina: Sheria za Kutenga",
+ "title": "Mifumo ya Kupuuza (ruka ikiwa inalingana)"
+ },
+ "options": {
+ "contentTypes": {
+ "text": "Towe la Maandishi",
+ "thinking": "Kufikiri",
+ "tool_result": "Matokeo ya Zana",
+ "tool_use": "Matumizi ya Zana"
+ },
+ "matchFields": {
+ "args": "Hoja",
+ "command": "Amri",
+ "content": "Maudhui",
+ "description": "Maelezo",
+ "file_path": "Njia ya Faili",
+ "fullInput": "Ingizo Kamili (JSON)",
+ "glob": "Kichujio cha Glob",
+ "new_string": "Mfuatano Mpya",
+ "old_string": "Mfuatano wa Zamani",
+ "path": "Njia",
+ "pattern": "Mfumo",
+ "prompt": "Kidokezo",
+ "query": "Hoja",
+ "skill": "Jina la Ujuzi",
+ "subagent_type": "Aina ya Wakala Mdogo",
+ "text": "Maudhui ya Maandishi",
+ "thinking": "Maudhui ya Kufikiri",
+ "url": "URL"
+ },
+ "modes": {
+ "content_match": "Mfumo wa Maudhui",
+ "error_status": "Hitilafu ya Utekelezaji",
+ "token_threshold": "Matumizi Makubwa ya Tokeni"
+ },
+ "tokenTypes": {
+ "input": "Tokeni za Ingizo",
+ "output": "Tokeni za Towe",
+ "total": "Jumla ya Tokeni"
+ },
+ "toolNames": {
+ "anyTool": "Zana Yoyote"
+ }
+ },
+ "preview": {
+ "defaultTestTriggerName": "Kichochezi cha Jaribio",
+ "detectedSuffix": "hitilafu zingegunduliwa",
+ "more": "...na {{count}} zaidi",
+ "more_few": "...na {{count}} zaidi",
+ "more_many": "...na {{count}} zaidi",
+ "more_one": "...na {{count}} zaidi",
+ "more_other": "...na {{count}} zaidi",
+ "testTrigger": "Jaribu Kichochezi",
+ "testing": "Inajaribu...",
+ "title": "Hakikisho",
+ "truncatedWarning": "Utafutaji ulisimama mapema (muda umeisha au kikomo cha idadi). Vilingani halisi vinaweza kuwa vingi zaidi.",
+ "viewSession": "Tazama Kipindi"
+ },
+ "repositoryScope": {
+ "empty": "Hakuna hazina zilizochaguliwa - kichochezi kinatumika kwa hazina zote",
+ "hint": "Hazina zinapochaguliwa, kichochezi hiki huchochewa tu kwa hitilafu katika hazina hizo.",
+ "placeholder": "Chagua hazina ya kuongeza...",
+ "summary": "Kina: Wigo wa Hazina",
+ "title": "Punguza kwa Hazina (inatumika kwa hazina zilizochaguliwa pekee)"
+ },
+ "sections": {
+ "configuration": "Usanidi",
+ "dotColor": "Rangi ya Nukta",
+ "generalInfo": "Taarifa za Jumla",
+ "triggerCondition": "Sharti la Kichochezi"
+ }
+ },
+ "workspaceProfiles": {
+ "actions": {
+ "addProfile": "Ongeza Wasifu",
+ "cancel": "Ghairi",
+ "deleteProfile": "Futa wasifu",
+ "editProfile": "Hariri wasifu",
+ "save": "Hifadhi"
+ },
+ "authMethods": {
+ "agent": "Wakala wa SSH",
+ "auto": "Otomatiki (kutoka Usanidi wa SSH)",
+ "password": "Nenosiri",
+ "privateKey": "Ufunguo wa Faragha"
+ },
+ "deleteConfirm": {
+ "confirmLabel": "Futa",
+ "message": "Una uhakika unataka kufuta \"{{name}}\"? Hii haiwezi kutenduliwa.",
+ "title": "Futa Wasifu"
+ },
+ "description": "Hifadhi wasifu wa muunganisho wa SSH kwa kuunganisha upya haraka",
+ "empty": {
+ "description": "Ongeza wasifu wa SSH ili kuunganisha haraka",
+ "title": "Hakuna wasifu uliohifadhiwa"
+ },
+ "form": {
+ "authentication": "Uthibitishaji",
+ "host": "Seva pangishi",
+ "name": "Jina",
+ "passwordPrompt": "Utaulizwa nenosiri unapounganisha.",
+ "port": "Mlango",
+ "privateKeyPath": "Njia ya Ufunguo wa Faragha",
+ "username": "Jina la mtumiaji",
+ "namePlaceholder": "Seva Yangu",
+ "hostPlaceholder": "jina la seva pangishi au IP",
+ "usernamePlaceholder": "mtumiaji"
+ },
+ "loading": "Inapakia wasifu...",
+ "title": "Wasifu wa Eneo-kazi"
+ },
+ "connection": {
+ "actions": {
+ "connect": "Unganisha",
+ "connecting": "Inaunganisha...",
+ "disconnect": "Tenganisha",
+ "testConnection": "Jaribu Muunganisho",
+ "testing": "Inajaribu..."
+ },
+ "currentMode": {
+ "description": "Chanzo cha data kwa faili za kipindi",
+ "label": "Hali ya Sasa",
+ "local": "Ya ndani ({{path}})"
+ },
+ "description": "Unganisha kwa mashine ya mbali ili kuona vipindi vya Claude Code vinavyoendeshwa hapo",
+ "form": {
+ "authentication": "Uthibitishaji",
+ "host": "Seva pangishi",
+ "password": "Nenosiri",
+ "port": "Mlango",
+ "privateKeyPath": "Njia ya Ufunguo wa Faragha",
+ "username": "Jina la mtumiaji",
+ "hostPlaceholder": "jina la seva pangishi au lakabu ya usanidi wa SSH",
+ "usernamePlaceholder": "mtumiaji"
+ },
+ "savedProfiles": {
+ "title": "Wasifu Uliohifadhiwa"
+ },
+ "ssh": {
+ "title": "Muunganisho wa SSH"
+ },
+ "status": {
+ "connectedTo": "Imeunganishwa kwa {{host}}",
+ "remoteSessions": "Inatazama vipindi vya mbali kupitia SSH"
+ },
+ "test": {
+ "failed": "Muunganisho umeshindwa: {{error}}",
+ "success": "Muunganisho umefaulu",
+ "unknownError": "Hitilafu isiyojulikana"
+ },
+ "title": "Muunganisho wa Mbali"
+ },
+ "providerRuntime": {
+ "actions": {
+ "cancel": "Ghairi",
+ "cancelLogin": "Ghairi kuingia",
+ "connectChatGpt": "Unganisha ChatGPT",
+ "delete": "Futa",
+ "disable": "Zima",
+ "disconnectAccount": "Tenganisha akaunti",
+ "generateLink": "Tengeneza kiungo",
+ "openLogin": "Fungua kuingia",
+ "reconnectAnthropic": "Unganisha tena Anthropic",
+ "refresh": "Onyesha upya",
+ "replaceKey": "Badilisha ufunguo",
+ "saveEndpoint": "Hifadhi endpoint",
+ "saveKey": "Hifadhi ufunguo",
+ "saving": "Inahifadhi...",
+ "setApiKey": "Weka ufunguo wa API",
+ "updateKey": "Sasisha ufunguo",
+ "useCode": "Tumia msimbo"
+ },
+ "apiKey": {
+ "loadingStoredCredentials": "Inapakia hati za utambulisho zilizohifadhiwa...",
+ "projectScope": "Mradi",
+ "scope": "Wigo",
+ "storedIn": "Imehifadhiwa katika {{backend}}",
+ "userScope": "Mtumiaji",
+ "storedInApp": "Imehifadhiwa katika programu",
+ "providers": {
+ "anthropic": {
+ "name": "Ufunguo wa API wa Anthropic",
+ "title": "Ufunguo wa API",
+ "description": "Tumia ufunguo wa API wa moja kwa moja wa Anthropic kwa ufikiaji unaolipiwa kwa API. Kipindi cha usajili wako wa Anthropic kinabaki kupatikana unaporudi.",
+ "placeholder": "sk-ant-..."
+ },
+ "codex": {
+ "name": "Ufunguo wa API wa Codex",
+ "title": "Ufunguo wa API",
+ "description": "Tumia ufunguo wa API wa OpenAI kama njia ya pili ya uthibitishaji wa Codex. Ukibadilisha Codex hadi hali ya ufunguo wa API, programu itaakisi OPENAI_API_KEY kwenye CODEX_API_KEY kwa uzinduzi asili.",
+ "placeholder": "sk-proj-..."
+ },
+ "gemini": {
+ "name": "Ufunguo wa API wa Gemini",
+ "title": "Ufikiaji wa API",
+ "description": "Tumia `GEMINI_API_KEY` kwa backend ya API ya Gemini. CLI SDK na ADC haziuhitaji.",
+ "placeholder": "AIza..."
+ }
+ }
+ },
+ "codex": {
+ "account": {
+ "appServer": "Seva ya programu: {{state}}",
+ "connected": "Imeunganishwa",
+ "description": "Dhibiti kipindi cha akaunti ya seva ya programu ya Codex ya ndani kinachowezesha uzinduzi asili unaoungwa mkono na usajili.",
+ "loginInProgress": "Kuingia kunaendelea",
+ "plan": "Mpango: {{plan}}",
+ "reconnectRequired": "Kuunganisha tena kunahitajika",
+ "title": "Akaunti ya ChatGPT",
+ "hints": {
+ "autoUsesApiKeyUntilChatgpt": "{{message}} Otomatiki itaendelea kutumia ufunguo wa API uliogunduliwa hadi ChatGPT iunganishwe.",
+ "detectedApiKeyNeedsApiMode": "{{message}} Ufunguo wa API uliogunduliwa hutumika tu baada ya kubadilisha Codex hadi hali ya ufunguo wa API.",
+ "localArtifactsNoSession": "Codex CLI kwa sasa inaripoti hakuna akaunti hai ya ChatGPT. Data ya akaunti ya Codex ya ndani ipo, lakini hakuna kipindi hai kilichodhibitiwa kilichochaguliwa. Vikomo vya matumizi vinaonekana hapa tu baada ya Codex CLI kuona kimoja.",
+ "noActiveAccount": "Codex CLI kwa sasa inaripoti hakuna akaunti hai ya ChatGPT. Vikomo vya matumizi vinaonekana hapa tu baada ya Codex CLI kuona kimoja.",
+ "reconnectBeforeUsage": "Codex ina akaunti ya ChatGPT iliyochaguliwa ndani, lakini kipindi cha sasa kinahitaji kuunganishwa tena kabla vikomo vya matumizi vinaweza kupakia hapa.",
+ "usageLimitsAfterReport": "Vikomo vya matumizi vinaonekana hapa baada ya Codex kuviripoti kwa akaunti ya ChatGPT iliyounganishwa."
+ }
+ },
+ "install": {
+ "checking": "Inakagua",
+ "downloading": "Inapakua",
+ "installCli": "Sakinisha Codex CLI",
+ "installing": "Inasakinisha",
+ "retryInstall": "Jaribu tena kusakinisha",
+ "title": "Sakinisha Codex CLI ndani ya data ya programu"
+ },
+ "rateLimits": {
+ "credits": "Krediti",
+ "creditsDescription": "Krediti zinaonyeshwa kando na matumizi ya usajili yanayotegemea dirisha na zinaweza zisipatikane kwa vipindi vya ChatGPT vinavyoungwa mkono na mpango.",
+ "noSecondaryWindow": "Codex haikurudisha dirisha la pili kwa picha hii ya akaunti.",
+ "notReported": "Haijaripotiwa",
+ "primaryReset": "Kuweka upya kwa msingi",
+ "primaryUsed": "Iliyotumika ya msingi",
+ "primaryWindow": "Dirisha la msingi",
+ "remainingLeft": "{{value}} zimebaki",
+ "remainingUnknown": "Zilizobaki hazijulikani",
+ "secondaryReset": "Kuweka upya kwa pili",
+ "secondaryUsed": "Iliyotumika ya pili",
+ "secondaryWindow": "Dirisha la pili",
+ "usedQuotaNote": "Asilimia hizi zinaonyesha mgao uliotumika, si mgao uliobaki.",
+ "weeklyReset": "Kuweka upya kwa wiki",
+ "weeklyUsed": "Iliyotumika ya wiki",
+ "weeklyUsedOneWeek": "Iliyotumika ya wiki (w1)",
+ "weeklyWindow": "Dirisha la wiki",
+ "secondaryFallback": "ya pili",
+ "secondaryWindowNote": " Vikomo vya wiki vinaonyeshwa kando katika dirisha la {{window}}.",
+ "usageExplanationGeneric": "Inaonyesha mgao uliotumika, si mgao uliobaki.",
+ "usageExplanationWindowOnly": "Inaonyesha mgao uliotumika katika dirisha la sasa la {{window}}, si mgao uliobaki.",
+ "usageExplanationWithRemaining": "{{used}} zimetumika - takriban {{remaining}} zimebaki katika dirisha la sasa la {{window}}."
+ }
+ },
+ "compatibleEndpoint": {
+ "authToken": "Tokeni ya uthibitishaji",
+ "authTokenMissing": "Tokeni ya uthibitishaji haijasanidiwa.",
+ "baseUrl": "URL ya msingi",
+ "description": "Tumia endpoint ya runtime ya ndani inayooana na Anthropic.",
+ "keepSavedToken": "Acha tupu ili kuhifadhi tokeni iliyohifadhiwa",
+ "title": "Endpoint ya ndani / inayooana",
+ "tokenStatus": "Tokeni {{status}}",
+ "validation": {
+ "baseUrlRequired": "URL ya msingi inahitajika",
+ "firstPartyAnthropic": "Tumia Otomatiki, Usajili, au ufunguo wa API kwa Anthropic ya moja kwa moja",
+ "httpRequired": "URL ya msingi lazima itumie http:// au https://",
+ "invalidUrl": "URL batili",
+ "noCredentials": "URL ya msingi haipaswi kujumuisha hati za utambulisho"
+ },
+ "status": {
+ "endpointDisabledTokenKept": "Endpoint imezimwa. Tokeni iliyohifadhiwa imewekwa.",
+ "endpointSaved": "Endpoint imehifadhiwa",
+ "endpointSavedTokenMissing": "Endpoint imehifadhiwa. Tokeni ya uthibitishaji haijasanidiwa."
+ }
+ },
+ "connection": {
+ "authenticationMethod": "Mbinu ya uthibitishaji",
+ "descriptions": {
+ "anthropic": "Chagua jinsi vipindi vya Anthropic vilivyozinduliwa na programu vinavyothibitishwa.",
+ "codex": "Chagua kama Codex inapaswa kupendelea usajili wako wa ChatGPT au ufunguo wa API wakati runtime asili inazinduliwa.",
+ "gemini": "Sanidi ufikiaji wa hiari wa API. CLI SDK na ADC bado hugunduliwa kiotomatiki.",
+ "opencode": "Uthibitishaji wa OpenCode na orodha ya watoa huduma vinadhibitiwa na runtime ya OpenCode."
+ },
+ "method": "Mbinu ya muunganisho",
+ "mode": "Hali: {{mode}}",
+ "selected": "Imechaguliwa",
+ "switching": "Inabadilisha...",
+ "title": "Muunganisho"
+ },
+ "connectionCards": {
+ "apiKey": {
+ "title": "Ufunguo wa API"
+ },
+ "anthropic": {
+ "apiKeyDescription": "Tumia ANTHROPIC_API_KEY na malipo ya API ya Anthropic.",
+ "autoDescription": "Tumia chaguo-msingi za runtime za Anthropic na hati bora ya utambulisho ya ndani inayopatikana.",
+ "hint": "Otomatiki huweka Anthropic kwenye usuluhishi wake wa chaguo-msingi wa hati ya utambulisho ya ndani.",
+ "subscriptionDescription": "Tumia kipindi chako cha kuingia cha Anthropic cha ndani na ufikiaji wa usajili.",
+ "subscriptionTitle": "Usajili wa Anthropic"
+ },
+ "auto": {
+ "title": "Otomatiki"
+ },
+ "codex": {
+ "apiKeyDescription": "Tumia malipo ya OPENAI_API_KEY na CODEX_API_KEY kwa uzinduzi asili wa Codex.",
+ "autoDescription": "Pendelea akaunti yako ya ChatGPT na usajili. Tumia hali ya ufunguo wa API tu ikihitajika.",
+ "chatgptDescription": "Tumia akaunti yako iliyounganishwa ya ChatGPT na usajili wa Codex.",
+ "chatgptTitle": "Akaunti ya ChatGPT",
+ "hint": "Codex huwa inaendeshwa kupitia runtime asili. Otomatiki hupendelea akaunti yako ya ChatGPT kabla ya kurudi kwa hati za utambulisho za ufunguo wa API."
+ }
+ },
+ "description": "Dhibiti jinsi kila mtoa huduma anavyounganisha na, inapoungwa mkono, ni backend gani ambayo runtime ya modeli nyingi inapaswa kutumia.",
+ "fastMode": {
+ "defaultOff": "Chaguo-msingi Imezimwa",
+ "description": "Tumia hali ya Claude Code Fast kwa chaguo-msingi kwa uzinduzi mpya wa timu za Anthropic wakati modeli na runtime iliyosuluhishwa zinaruhusu.",
+ "disabledHint": "Uzinduzi mpya wa Anthropic unabaki kwenye kasi ya kawaida isipokuwa timu inawezesha hali ya Fast kwa uwazi.",
+ "enabledHint": "Uzinduzi mpya wa Anthropic utaomba hali ya Fast kwa chaguo-msingi wakati modeli iliyosuluhishwa inaiunga mkono.",
+ "notExposed": "Runtime hii ya Anthropic haionyeshi hali ya Fast.",
+ "preferFast": "Pendelea Fast",
+ "title": "Chaguo-msingi la hali ya Fast",
+ "unavailableForRuntime": "Hali ya Fast kwa sasa haipatikani kwa runtime hii ya Anthropic."
+ },
+ "alerts": {
+ "anthropicApiKeyMissing": "Hali ya ufunguo wa API imechaguliwa, lakini bado hakuna hati ya utambulisho ya API ya Anthropic inayopatikana.",
+ "anthropicStoredKeyAvailable": "Ufunguo wa API uliohifadhiwa unapatikana, lakini vipindi vya Anthropic vilivyozinduliwa na programu huutumia tu baada ya kubadilisha hadi hali ya ufunguo wa API.",
+ "anthropicSubscriptionMissing": "Hali ya usajili wa Anthropic imechaguliwa. Ingia na Anthropic ili kutumia mtoa huduma huyu.",
+ "authTokenMissing": "Tokeni ya uthibitishaji haijasanidiwa. Endpoint nyingi za ndani zinazooana na Anthropic zinahitaji tokeni isiyo tupu.",
+ "chatgptLoginPending": "Inasubiri kuingia kwa akaunti ya ChatGPT kumalize...",
+ "chatgptLoginStarting": "Inaanzisha kuingia kwa ChatGPT...",
+ "codexApiKeyMissing": "Hali ya ufunguo wa API imechaguliwa, lakini bado hakuna hati ya utambulisho ya OPENAI_API_KEY au CODEX_API_KEY inayopatikana.",
+ "codexLocalArtifactsNoSession": "Codex CLI kwa sasa haina akaunti hai ya ChatGPT. Data ya akaunti ya Codex ya ndani ipo, lakini hakuna kipindi hai kilichodhibitiwa kilichochaguliwa.",
+ "codexNeedsReconnect": "Codex ina akaunti ya ChatGPT iliyochaguliwa ndani, lakini kipindi cha sasa kinahitaji kuunganishwa tena.",
+ "codexNoChatgptAccount": "Codex CLI kwa sasa haina akaunti hai ya ChatGPT. Unganisha ChatGPT ili kutumia usajili wako.",
+ "codexNoCredential": "Bado hakuna akaunti ya ChatGPT au ufunguo wa API unaopatikana.",
+ "geminiApiUnavailable": "API ya Gemini kwa sasa haipatikani. Sanidi `GEMINI_API_KEY` hapa au tumia hati halali za Google ADC.",
+ "withApiKeyFallback": "{{message}} Badilisha hadi hali ya ufunguo wa API ili kutumia ufunguo wa API uliogunduliwa."
+ },
+ "authModeDescriptions": {
+ "anthropic": {
+ "apiKey": "Lazimisha vipindi vya Anthropic vilivyozinduliwa na programu kutumia hati ya utambulisho ya ufunguo wa API.",
+ "auto": "Tumia tabia ya chaguo-msingi ya runtime. Funguo za API zilizohifadhiwa katika programu hii hutumika tu baada ya kubadilisha hadi hali ya ufunguo wa API.",
+ "oauth": "Lazimisha vipindi vya Anthropic vilivyozinduliwa na programu kutumia kipindi cha usajili wa Anthropic cha ndani."
+ },
+ "codex": {
+ "apiKey": "Lazimisha uzinduzi asili wa Codex kutumia malipo ya OPENAI_API_KEY / CODEX_API_KEY.",
+ "auto": "Pendelea akaunti yako ya ChatGPT inapopatikana. Rudi kwa hali ya ufunguo wa API tu inapohitajika.",
+ "chatgpt": "Lazimisha uzinduzi asili wa Codex kutumia akaunti yako iliyounganishwa ya ChatGPT na usajili."
+ }
+ },
+ "progress": {
+ "applyingConnectionChanges": "Inatumia mabadiliko ya muunganisho...",
+ "refreshingProviderStatus": "Inaonyesha upya hali ya mtoa huduma...",
+ "savingCompatibleEndpoint": "Inahifadhi endpoint inayooana...",
+ "switchingAnthropicSubscription": "Inabadilisha hadi usajili wa Anthropic...",
+ "switchingApiKey": "Inabadilisha hadi ufunguo wa API...",
+ "switchingApiKeyMode": "Inabadilisha hadi hali ya ufunguo wa API...",
+ "switchingAuto": "Inabadilisha hadi Otomatiki...",
+ "switchingChatgpt": "Inabadilisha hadi hali ya akaunti ya ChatGPT..."
+ },
+ "provider": "Mtoa Huduma",
+ "runtime": {
+ "descriptions": {
+ "anthropic": "Anthropic kwa sasa haina kichaguzi tofauti cha backend ya runtime.",
+ "codex": "Codex sasa inaendeshwa tu kupitia njia ya runtime asili.",
+ "gemini": "Chagua ni backend gani ya runtime ya Gemini ambayo modeli nyingi inapaswa kutumia.",
+ "opencode": "OpenCode hutumia seva pangishi yake ya runtime iliyodhibitiwa. Eneo-kazi kwa sasa linaonyesha hali pekee."
+ },
+ "title": "Runtime",
+ "updating": "Inasasisha runtime..."
+ },
+ "runtimeSummary": "Runtime: {{runtime}}",
+ "status": {
+ "configured": "imesanidiwa",
+ "enabled": "Imewezeshwa",
+ "notConfigured": "Haijasanidiwa",
+ "notSet": "haijawekwa",
+ "off": "Imezimwa",
+ "unknown": "Haijulikani"
+ },
+ "title": "Mipangilio ya Mtoa Huduma",
+ "usage": {
+ "apiKey": "Inatumia ufunguo wa API",
+ "apiKeyRequired": "Ufunguo wa API unahitajika",
+ "compatibleEndpoint": "Inatumia endpoint inayooana",
+ "notConnected": "Haijaunganishwa",
+ "usingMethod": "Inatumia {{method}}"
+ },
+ "errors": {
+ "apiKeyDeletedRefreshFailed": "Ufunguo wa API umefutwa, lakini imeshindwa kuonyesha upya hali ya mtoa huduma.",
+ "apiKeySavedRefreshFailed": "Ufunguo wa API umehifadhiwa, lakini imeshindwa kuonyesha upya hali ya mtoa huduma.",
+ "connectionUpdatedRefreshFailed": "Muunganisho umesasishwa, lakini imeshindwa kuonyesha upya hali ya mtoa huduma.",
+ "deleteApiKey": "Imeshindwa kufuta ufunguo wa API",
+ "disableEndpoint": "Imeshindwa kuzima endpoint",
+ "endpointDisabledRefreshFailed": "Endpoint imezimwa, lakini imeshindwa kuonyesha upya hali ya mtoa huduma.",
+ "endpointSavedRefreshFailed": "Endpoint imehifadhiwa, lakini imeshindwa kuonyesha upya hali ya mtoa huduma.",
+ "refreshCodexAccount": "Imeshindwa kuonyesha upya akaunti ya Codex",
+ "saveApiKey": "Imeshindwa kuhifadhi ufunguo wa API",
+ "saveEndpoint": "Imeshindwa kuhifadhi endpoint",
+ "updateAnthropicFastMode": "Imeshindwa kusasisha hali ya Fast ya Anthropic",
+ "updateConnection": "Imeshindwa kusasisha muunganisho",
+ "updateRuntimeBackend": "Imeshindwa kusasisha backend ya runtime",
+ "apiKeyRequired": "Ufunguo wa API unahitajika"
+ },
+ "connectionUi": {
+ "authMode": {
+ "auto": "Otomatiki",
+ "oauth": "Usajili / OAuth",
+ "chatgpt": "Akaunti ya ChatGPT",
+ "apiKey": "Ufunguo wa API",
+ "anthropicSubscription": "Usajili wa Anthropic"
+ },
+ "authMethod": {
+ "apiKey": "Ufunguo wa API",
+ "apiKeyHelper": "Msaidizi wa ufunguo wa API",
+ "oauth": "OAuth",
+ "claudeSubscription": "Usajili wa Claude",
+ "geminiCli": "Gemini CLI",
+ "googleAccount": "Akaunti ya Google",
+ "serviceAccount": "akaunti ya huduma"
+ },
+ "runtime": {
+ "codexNative": "Codex asili",
+ "currentRuntime": "Runtime ya sasa",
+ "selectedRuntime": "Runtime iliyochaguliwa",
+ "summary": "{{prefix}}: {{runtime}}"
+ },
+ "status": {
+ "checking": "Inakagua...",
+ "modelsAvailable": "Modeli zinapatikana",
+ "checked": "Imekaguliwa",
+ "providerActivity": "Shughuli za Mtoa Huduma",
+ "notConnected": "Haijaunganishwa",
+ "startingChatGptLogin": "Inaanzisha kuingia kwa ChatGPT...",
+ "waitingForChatGptLogin": "Inasubiri kuingia kwa akaunti ya ChatGPT...",
+ "chatGptVerificationDegraded": "Akaunti ya ChatGPT imegunduliwa - uthibitishaji wa akaunti kwa sasa umedhoofika.",
+ "chatGptAccountReady": "Akaunti ya ChatGPT iko tayari",
+ "apiKeyReady": "Ufunguo wa API uko tayari",
+ "codexLocalAccountNeedsReconnect": "Codex ina akaunti ya ChatGPT iliyochaguliwa ndani, lakini kipindi cha sasa kinahitaji kuunganishwa tena.",
+ "codexNoActiveManagedSession": "Codex CLI inaripoti hakuna kuingia hai kwa ChatGPT. Data ya akaunti ya Codex ya ndani ipo, lakini hakuna kipindi hai kilichodhibitiwa kilichochaguliwa.",
+ "codexNoActiveChatGptLogin": "Codex CLI inaripoti hakuna kuingia hai kwa ChatGPT",
+ "connectChatGptForSubscription": "Unganisha akaunti ya ChatGPT ili kutumia usajili wako wa Codex.",
+ "codexNativeReady": "Codex asili iko tayari",
+ "codexNativeUnavailable": "Codex asili haipatikani",
+ "unavailableInCurrentRuntime": "Haipatikani katika runtime ya sasa",
+ "connectedViaApiKey": "Imeunganishwa kupitia ufunguo wa API",
+ "apiKeyConfiguredNotVerified": "Ufunguo wa API umesanidiwa, lakini bado haujathibitishwa",
+ "apiKeyModeMissingCredential": "Hali ya ufunguo wa API imechaguliwa, lakini hakuna ufunguo wa API uliosanidiwa",
+ "connectedVia": "Imeunganishwa kupitia {{method}}",
+ "unableToVerify": "Haiwezi kuthibitisha"
+ },
+ "mode": {
+ "selectedAuth": "Uthibitishaji uliochaguliwa: {{authMode}}",
+ "preferredAuth": "Uthibitishaji unaopendelewa: {{authMode}}"
+ },
+ "credential": {
+ "apiKeyConfigured": "Ufunguo wa API umesanidiwa",
+ "savedApiKeyAvailable": "Ufunguo wa API uliohifadhiwa unapatikana katika Dhibiti",
+ "apiKeyAlsoConfigured": "Ufunguo wa API pia umesanidiwa katika Dhibiti",
+ "apiKeyConfiguredInManage": "Ufunguo wa API umesanidiwa katika Dhibiti",
+ "apiKeyFallbackInManage": "Ufunguo wa API pia unapatikana katika Dhibiti kama mbadala",
+ "availableAsFallback": "{{summary}} - unapatikana kama mbadala",
+ "savedApiKeyAvailableIfSwitch": "Ufunguo wa API uliohifadhiwa unapatikana katika Dhibiti ukibadilisha hadi hali ya ufunguo wa API",
+ "availableIfSwitch": "{{summary}} - unapatikana ukibadilisha hadi hali ya ufunguo wa API",
+ "autoWillUseUntilChatGpt": "{{summary}} - Otomatiki itatumia huu hadi ChatGPT iunganishwe"
+ },
+ "actions": {
+ "connect": "Unganisha",
+ "connectAnthropic": "Unganisha Anthropic",
+ "connectChatGpt": "Unganisha ChatGPT",
+ "disconnect": "Tenganisha",
+ "openLogin": "Fungua Kuingia"
+ },
+ "disconnect": {
+ "anthropicTitle": "Tenganisha usajili wa Anthropic?",
+ "anthropic": "Hii inaondoa kipindi cha usajili wa Anthropic cha ndani kutoka runtime ya Claude CLI.",
+ "anthropicWithApiKey": "Hii inaondoa kipindi cha usajili wa Anthropic cha ndani kutoka runtime ya Claude CLI. Funguo za API zilizohifadhiwa katika Dhibiti zinabaki kupatikana.",
+ "geminiTitle": "Tenganisha Gemini CLI?",
+ "gemini": "Hii inafuta metadata ya kipindi cha Gemini CLI cha ndani. Hati za nje za ADC na funguo za API zilizohifadhiwa hazitaondolewa."
+ }
+ }
+ },
+ "cliRuntime": {
+ "actions": {
+ "checkForUpdates": "Kagua Masasisho",
+ "checking": "Inakagua...",
+ "extensions": "Viendelezi",
+ "installRuntime": "Sakinisha {{runtime}}",
+ "manage": "Dhibiti",
+ "recheck": "Kagua tena",
+ "reinstallRuntime": "Sakinisha tena {{runtime}}",
+ "retry": "Jaribu tena",
+ "update": "Sasisha"
+ },
+ "installer": {
+ "checkingLatest": "Inakagua toleo jipya zaidi...",
+ "downloading": "Inapakua...",
+ "failed": "Usakinishaji umeshindwa",
+ "installed": "Imesakinisha v{{version}}",
+ "installing": "Inasakinisha...",
+ "latest": "jipya zaidi",
+ "verifying": "Inathibitisha checksum..."
+ },
+ "labels": {
+ "multimodel": "Modeli nyingi"
+ },
+ "loading": {
+ "aiProviders": "Inakagua Watoa Huduma wa AI...",
+ "claudeCli": "Inakagua Claude CLI..."
+ },
+ "provider": {
+ "backend": "Backend: {{backend}}",
+ "loadingModels": "Inapakia modeli...",
+ "modelsUnavailable": "Modeli hazipatikani kwa toleo hili la runtime",
+ "runtime": "Runtime: {{runtime}}"
+ },
+ "providerTerminal": {
+ "authFailed": "Uthibitishaji umeshindwa",
+ "authUpdated": "Uthibitishaji umesasishwa",
+ "loggedOut": "Mtoa huduma ametoka",
+ "login": "Ingia",
+ "logout": "Toka",
+ "logoutFailed": "Kutoka kumeshindwa"
+ },
+ "status": {
+ "configuredNotFound": "{{runtime}} iliyosanidiwa haikupatikana.",
+ "foundButFailed": "{{runtime}} ilipatikana lakini imeshindwa kuanza",
+ "healthCheckFailed": "{{runtime}} iliyosanidiwa imeshindwa ukaguzi wake wa afya wa uanzishaji.",
+ "notInstalled": "{{runtime}} haijasakinishwa"
+ },
+ "title": "Runtime ya CLI"
+ },
+ "cliStatus": {
+ "versionUpgrade": "v{{current}} -> v{{latest}}"
+ }
+}
diff --git a/src/features/localization/renderer/locales/sw/team.json b/src/features/localization/renderer/locales/sw/team.json
new file mode 100644
index 00000000..ba47d9f9
--- /dev/null
+++ b/src/features/localization/renderer/locales/sw/team.json
@@ -0,0 +1,2487 @@
+{
+ "activity": {
+ "actions": {
+ "createTaskFromMessage": "Unda kazi kutoka ujumbe",
+ "editMessage": "Hariri ujumbe",
+ "expandMessage": "Panua ujumbe",
+ "replyToMessage": "Jibu ujumbe",
+ "restartTeam": "Anzisha upya timu"
+ },
+ "authError": {
+ "description": "Uthibitishaji umeshindwa. Kuanzisha upya timu kutaonyesha upya kipindi na kunaweza kutatua tatizo hili. Iwapo tatizo litaendelea, kagua hati zako za utambulisho za API au ujaribu tena baadaye."
+ },
+ "automation": {
+ "reviewPickup": "Mwenzako wa timu ameombwa kuchukua mapitio",
+ "stallNudge": "Mwenzako wa timu ameombwa kuendelea na kazi iliyokwama",
+ "workSyncBody": "Mwenzako wa timu ameombwa kusawazisha kazi ya sasa"
+ },
+ "badges": {
+ "automation": "otomatiki",
+ "bootstrap": "bootstrap",
+ "command": "amri",
+ "comment": "Maoni",
+ "live": "moja kwa moja",
+ "note": "dokezo",
+ "rateLimited": "Imefikia Kikomo cha Kiwango",
+ "restart": "anzisha upya",
+ "result": "matokeo",
+ "session": "kipindi",
+ "stallNudge": "kidokezo cha kukwama",
+ "start": "anza",
+ "workSync": "usawazishaji wa kazi",
+ "agentError": "Hitilafu ya Wakala",
+ "apiError": "Hitilafu ya API"
+ },
+ "bootstrap": {
+ "acknowledged": "Bootstrap imethibitishwa",
+ "restarting": "Inaanzisha upya mwenzako wa timu",
+ "starting": "Inaanzisha mwenzako wa timu"
+ },
+ "rawJson": "JSON Ghafi",
+ "unread": "Haijasomwa",
+ "thoughts": {
+ "count": "mawazo {{count}}",
+ "count_one": "wazo {{count}}",
+ "expand": "Panua mawazo",
+ "showMore": "Onyesha zaidi",
+ "showLess": "Onyesha kidogo",
+ "count_few": "mawazo {{count}}",
+ "count_many": "mawazo {{count}}",
+ "count_other": "mawazo {{count}}",
+ "toolSummary": "🔧 {{summary}}",
+ "titleForMember": "{{name}} - mawazo"
+ },
+ "timeline": {
+ "loadingMessages": "Inapakia ujumbe...",
+ "noMessages": "Hakuna ujumbe",
+ "emptyHint": "Tuma ujumbe kwa mwanachama ili kuona shughuli.",
+ "newSession": "Kipindi kipya",
+ "olderCount": "+{{count}} za zamani",
+ "showMore": "Onyesha {{count}} zaidi",
+ "showAll": "Onyesha vyote",
+ "olderCount_one": "+{{count}} ya zamani",
+ "olderCount_few": "+{{count}} za zamani",
+ "olderCount_many": "+{{count}} za zamani",
+ "olderCount_other": "+{{count}} za zamani"
+ },
+ "pendingReplies": {
+ "title": "Inasubiri majibu",
+ "openMember": "Fungua mwanachama",
+ "messageSentAwaitingReply": "Ujumbe umetumwa, inasubiri jibu",
+ "awaitingReply": "inasubiri jibu",
+ "externalTeam": "timu ya nje",
+ "crossTeamAwaitingReply": "Ujumbe wa timu mtambuka umetumwa, inasubiri jibu",
+ "user": "mtumiaji",
+ "awaitingApproval": "inasubiri idhini"
+ },
+ "reply": {
+ "replyingTo": "Inajibu",
+ "action": "Jibu"
+ },
+ "activeTasks": {
+ "inProgress": "Inaendelea",
+ "expandInProgress": "Panua zinazoendelea",
+ "collapseInProgress": "Kunja zinazoendelea",
+ "reviewing": "inapitia",
+ "workingOn": "inafanyia kazi"
+ },
+ "expandDialog": {
+ "description": "Mwonekano wa ujumbe uliopanuliwa"
+ }
+ },
+ "create": {
+ "actions": {
+ "create": "Unda",
+ "creating": "Inaunda...",
+ "openExisting": "Fungua Timu Iliyopo",
+ "skipPreflightAndCreate": "Ruka ukaguzi wa awali na uunde"
+ },
+ "conflict": {
+ "description": "Kuendesha timu mbili katika saraka ile ile ni hatari - zinaweza kugongana zikihariri faili zile zile. Fikiria kutumia saraka tofauti au git worktree kwa kutengana.",
+ "title": "Timu nyingine \"{{team}}\" tayari inaendeshwa kwa saraka hii ya kazi",
+ "workingDirectory": "Saraka ya kazi:"
+ },
+ "description": {
+ "copy": "Unda timu mpya kulingana na iliyopo.",
+ "create": "Sanidi timu yako na uchague jinsi inavyoanza."
+ },
+ "errors": {
+ "nameExists": "Jina la timu tayari lipo",
+ "nameLaunching": "Timu yenye jina hili kwa sasa inazinduliwa",
+ "createConfigFailed": "Imeshindwa kuunda usanidi wa timu",
+ "loadProjectsFailed": "Imeshindwa kupakia miradi"
+ },
+ "fields": {
+ "color": "Rangi (hiari)",
+ "description": "Maelezo (hiari)",
+ "prompt": "Kidokezo kwa kiongozi wa timu (hiari)",
+ "teamName": "Jina la timu"
+ },
+ "launchAfterCreate": {
+ "description": "Anzisha timu mara moja kupitia Claude CLI ya ndani.",
+ "label": "Endesha amri baada ya kuunda"
+ },
+ "localOnly": "Inapatikana katika hali ya Electron ya ndani pekee.",
+ "onDisk": "Kwenye diski:",
+ "placeholders": {
+ "description": "Maelezo mafupi ya kusudi la timu",
+ "prompt": "Maagizo kwa kiongozi wa timu wakati wa ugavi..."
+ },
+ "saved": "Imehifadhiwa",
+ "solo": {
+ "description": "Kiongozi wa timu pekee (mchakato mkuu) ndiye atakayeanzishwa - hakuna wenzako wa timu watakaoundwa. Hufanya kazi kama kipindi cha kawaida cha wakala katika runtime uliyochagua (Claude Code, Codex, OpenCode, Gemini) lakini kikiwa na ufikiaji wa ubao wa kazi kwa kupanga. Huokoa tokeni kwa kuepuka gharama ya uratibu wa wenzako wa timu. Unaweza kuongeza wanachama baadaye kutoka mipangilio ya timu.",
+ "label": "Timu ya peke yake"
+ },
+ "title": {
+ "copy": "Nakili Timu",
+ "create": "Unda Timu"
+ },
+ "optional": {
+ "launchSettingsTitle": "Mipangilio ya uzinduzi ya hiari",
+ "launchSettingsDescription": "Kidokezo, usalama, na ubatilishaji wa CLI vinakaa hapa unapovihitaji.",
+ "teamDetailsTitle": "Maelezo ya timu ya hiari",
+ "teamDetailsDescription": "Weka mtiririko wa chaguo-msingi ukiwa mfupi na ufungue hii tu unapotaka muktadha wa ziada au rangi maalum."
+ },
+ "prepare": {
+ "unsupportedPreload": "Toleo la sasa la preload haliungi mkono team:prepareProvisioning. Anzisha upya programu ya maendeleo.",
+ "selectWorkingDirectory": "Chagua saraka ya kazi ili kuthibitisha mazingira ya uzinduzi.",
+ "someProvidersNeedAttention": "Baadhi ya watoa huduma waliochaguliwa wanahitaji uangalifu.",
+ "readyWithNotes": "Watoa huduma wote waliochaguliwa wako tayari, wakiwa na madokezo.",
+ "ready": "Watoa huduma wote waliochaguliwa wako tayari.",
+ "failed": "Imeshindwa kuandaa watoa huduma waliochaguliwa",
+ "checkingProviders": "Inakagua watoa huduma waliochaguliwa...",
+ "preparingEnvironment": "Inaandaa mazingira...",
+ "selectedProvidersReadyWithNotes": "Watoa huduma waliochaguliwa wako tayari (wakiwa na madokezo)",
+ "selectedProvidersReady": "Watoa huduma waliochaguliwa wako tayari"
+ },
+ "validation": {
+ "nameMustContainLetterOrDigit": "Jina lazima liwe na angalau herufi moja au tarakimu moja",
+ "nameTooLong": "Jina ni refu mno (kiwango cha juu herufi 128)",
+ "selectWorkingDirectory": "Chagua saraka ya kazi (cwd)",
+ "memberNameRequired": "Jina la mwanachama haliwezi kuwa tupu",
+ "memberNameInvalid": "Jina la mwanachama lazima lianze na alfanumeriki, litumie [a-zA-Z0-9._-] pekee, kiwango cha juu herufi 128",
+ "memberNamesUnique": "Majina ya wanachama lazima yawe ya kipekee",
+ "openCodeLeadModelRequired": "Kiongozi wa OpenCode anahitaji modeli iliyochaguliwa.",
+ "openCodeTeammateRequired": "Kiongozi wa OpenCode anahitaji angalau mwenzako mmoja wa timu wa OpenCode.",
+ "teamLaunching": "Timu kwa sasa inazinduliwa",
+ "teamNameExists": "Jina la timu tayari lipo",
+ "checkFormFields": "Kagua sehemu za fomu"
+ }
+ },
+ "editTeam": {
+ "actions": {
+ "cancel": "Ghairi",
+ "save": "Hifadhi"
+ },
+ "addMemberLockReason": "Tumia kidirisha maalum cha Ongeza mwanachama ili kuongeza wenzako wapya wa timu wakati timu iko hai.",
+ "description": "Badilisha jina la timu, maelezo na rangi",
+ "errors": {
+ "changesSavedRefreshFailed": "Mabadiliko ya timu yalihifadhiwa, lakini imeshindwa kuonyesha upya mwonekano wa hivi karibuni: {{message}}",
+ "liveRenameBlocked": "Wenzako waliopo wa timu hawawezi kubadilishwa jina wakati timu iko hai. waliobadilishwa jina: {{names}}",
+ "memberNameEmpty": "Jina la mwanachama haliwezi kuwa tupu",
+ "memberNameInvalid": "Jina la mwanachama lazima lianze na alfanumeriki, litumie [a-zA-Z0-9._-] pekee, kiwango cha juu herufi 128",
+ "memberNameNumericSuffix": "Jina la mwanachama \"{{name}}\" haliruhusiwi (limehifadhiwa kwa kiambishi-otomatiki cha Claude CLI). Tumia \"{{base}}\" badala yake.",
+ "memberNameReserved": "Jina la mwanachama \"{{name}}\" limehifadhiwa",
+ "memberNamesUnique": "Majina ya wanachama lazima yawe ya kipekee kabla ya kuhifadhi",
+ "newLiveTeammates": "Ongeza wenzako wapya wa timu kutoka kidirisha maalum cha Ongeza mwanachama wakati timu iko hai. Hariri Timu inaunga mkono tu kusasisha wenzako waliopo wa timu.",
+ "provisioning": "Mipangilio ya timu haiwezi kuhaririwa wakati ugavi bado unaendelea. Subiri uzinduzi umalize, kisha ujaribu tena.",
+ "restartFailedMany": "Timu imehifadhiwa, lakini imeshindwa kuanzisha upya wenzako hawa wa timu: {{failures}}",
+ "restartFailedOne": "Timu imehifadhiwa, lakini imeshindwa kuanzisha upya mwenzako huyu wa timu: {{failures}}",
+ "saveFailed": "Imeshindwa kuhifadhi",
+ "settingsChanged": "Mipangilio ya timu ilibadilika wakati kidirisha hiki kilikuwa wazi. Kifungue tena na upitie hali ya hivi karibuni kabla ya kuhifadhi.",
+ "settingsSavedMembersAndRefreshFailed": "Mipangilio ya timu ilihifadhiwa, lakini mabadiliko ya mwanachama yameshindwa: {{message}}. Kuonyesha upya pia kumeshindwa: {{refreshError}}",
+ "settingsSavedMembersFailed": "Mipangilio ya timu ilihifadhiwa, lakini mabadiliko ya mwanachama yameshindwa: {{message}}",
+ "settingsSavedRefreshFailed": "Mipangilio ya timu ilihifadhiwa, lakini imeshindwa kuonyesha upya mwonekano wa hivi karibuni: {{message}}",
+ "teamNameEmpty": "Jina la timu haliwezi kuwa tupu",
+ "unsupportedMixedPrimaryMutation": "Uhariri wa moja kwa moja kwa wenzako wa timu wanaomilikiwa na msingi katika timu mchanganyiko za OpenCode bado hauungwi mkono. Simamisha timu, hariri orodha, kisha uzindue tena. Walioathiriwa: {{names}}"
+ },
+ "fields": {
+ "colorOptional": "Rangi (hiari)",
+ "description": "Maelezo",
+ "name": "Jina"
+ },
+ "memberRestartWarning": "Kuhifadhi kutaanzisha upya mwenzako huyu wa timu ili kutumia mabadiliko ya jukumu, mtiririko wa kazi, kutengana kwa worktree, mtoa huduma, modeli, juhudi, au ufikiaji wa MCP.",
+ "notices": {
+ "liveRenameBlocked": "Kuhifadhi kwa moja kwa moja kumezuiwa kwa sababu wenzako waliopo wa timu walibadilishwa jina. Tendua mabadiliko hayo ya utambulisho au simamisha timu kwanza.",
+ "newLiveTeammates": "Wenzako wapya wa timu hawawezi kuongezwa kutoka Hariri Timu wakati timu iko hai. Tumia kidirisha cha Ongeza mwanachama badala yake.",
+ "provisioning": "Ugavi wa timu bado unaendelea. Uhariri umefungwa kwa muda hadi uzinduzi umalize.",
+ "restartMany": "Kuhifadhi kutaanzisha upya au kuzindua upya wenzako hawa wa timu ili kutumia mabadiliko ya jukumu, mtiririko wa kazi, kutengana kwa worktree, mtoa huduma, modeli, juhudi, au ufikiaji wa MCP: {{names}}.",
+ "restartOne": "Kuhifadhi kutaanzisha upya au kuzindua upya mwenzako huyu wa timu ili kutumia mabadiliko ya jukumu, mtiririko wa kazi, kutengana kwa worktree, mtoa huduma, modeli, juhudi, au ufikiaji wa MCP: {{names}}.",
+ "unsupportedMixedPrimaryMutation": "Uhariri/uondoaji wa moja kwa moja kwa wenzako wa timu wanaomilikiwa na msingi katika timu mchanganyiko za OpenCode unahitaji kusimamisha na kuzindua tena timu: {{names}}."
+ },
+ "placeholders": {
+ "description": "Maelezo ya timu (hiari)",
+ "teamName": "Jina la timu"
+ },
+ "teamLead": {
+ "changeRuntime": "Badilisha runtime ya kiongozi",
+ "changeRuntimeDescription": "Fungua Zindua Tena Timu ili kubadilisha mtoa huduma, modeli, au juhudi za kiongozi.",
+ "modelLockReason": "Runtime ya kiongozi wa timu inadhibitiwa kutoka Zindua Tena Timu.",
+ "readOnlyHint": "Jina na jukumu la kiongozi wa timu vinabaki vya kusoma tu hapa. Fungua paneli ya runtime kwenye safu ya kiongozi ili kubadilisha mtoa huduma, modeli, au juhudi.",
+ "role": "Kiongozi wa Timu"
+ },
+ "title": "Hariri Timu"
+ },
+ "memberDraft": {
+ "actions": {
+ "remove": "Ondoa mwanachama",
+ "removeAria": "Ondoa {{name}}",
+ "restore": "Rejesha mwanachama",
+ "restoreAria": "Rejesha {{name}}"
+ },
+ "anthropicContext": {
+ "defaultSetting": "mpangilio wa muktadha wa chaguo-msingi",
+ "description": "Muktadha wa Anthropic ni wa timu nzima kwa uzinduzi huu: {{mode}}. Tumia kisanduku cha kuteua cha Punguza muktadha cha paneli ya runtime ya kiongozi ili kubadilisha.",
+ "limitEnabled": "Kikomo cha 200K kimewezeshwa"
+ },
+ "mcp": {
+ "buttonInherit": "Rithi MCP",
+ "buttonScopes": "Wigo wa MCP",
+ "chooseScopes": "Chagua wigo",
+ "inheritLead": "Rithi kiongozi",
+ "lockedInfo": "Agent Teams MCP pekee imewezeshwa kwa wenzako wote wa timu. Mwenzako huyu wa timu atazinduliwa na seva ya Agent Teams pekee.",
+ "mode": "Hali ya MCP",
+ "scopes": {
+ "local": "ya ndani",
+ "project": "mradi",
+ "user": "mtumiaji"
+ },
+ "serverNames": "Majina ya seva",
+ "settingInfo": "Agent Teams MCP inazindua mwenzako huyu wa timu na seva ya Agent Teams pekee. Hali za wigo na orodha ya kuruhusu zinatumika kwa uzinduzi huu wa mwenzako wa timu pekee.",
+ "strictAllowlist": "Orodha ya kuruhusu kali",
+ "tooltip": "{{label}}: Dhibiti sera ya urithi wa MCP ya mwanachama huyu",
+ "agentTeamsMcp": "Agent Teams MCP"
+ },
+ "model": {
+ "ariaLabel": "Mtoa huduma {{provider}}, {{model}}",
+ "currentLeadRuntime": "Runtime ya sasa ya kiongozi",
+ "default": "Chaguo-msingi",
+ "inheritedTooltip": "Mtoa huduma, modeli, na juhudi vinarithiwa kutoka kwa kiongozi wakati usawazishaji umewezeshwa.",
+ "leadSuffix": "{{label}} (kiongozi)",
+ "liveDisabled": "Mabadiliko ya mtoa huduma, modeli, na juhudi yamezimwa wakati timu iko hai. Unganisha tena timu ili kuyatumia kwa usalama.",
+ "lockedActionFallback": "Mabadiliko ya runtime ya kiongozi hufungua Zindua Tena Timu, ambapo mtoa huduma, modeli, na juhudi vinaweza kusasishwa.",
+ "restartWholeTeam": "Kuhifadhi mabadiliko hayo ya runtime kunaanzisha upya timu nzima."
+ },
+ "nameAria": "Jina la mwanachama {{index}}",
+ "nameFallback": "mwanachama {{index}}",
+ "noRole": "Hakuna jukumu",
+ "removed": "Imeondolewa",
+ "workflow": {
+ "addTooltip": "Ongeza mtiririko wa kazi wa mwenzako wa timu",
+ "editTooltip": "Hariri mtiririko wa kazi wa mwenzako wa timu",
+ "label": "Mtiririko wa kazi (hiari)",
+ "placeholder": "Jinsi wakala huyu anavyopaswa kuishi, kuingiliana na wengine...",
+ "saved": "Imehifadhiwa"
+ },
+ "worktree": {
+ "description": "Endesha mwenzako huyu wa timu katika git worktree tofauti. Kukubali/kukataa mabadiliko kunalenga worktree hiyo, si eneo-kazi la kiongozi.",
+ "label": "Worktree"
+ },
+ "addMembers": {
+ "title": "Ongeza Wanachama",
+ "description": "Ongeza wanachama wapya kwa {{teamName}}"
+ },
+ "placeholders": {
+ "name": "member-name",
+ "mcpServers": "github, sentry"
+ }
+ },
+ "detail": {
+ "actions": {
+ "add": "Ongeza",
+ "cancel": "Ghairi",
+ "delete": "Futa",
+ "editCode": "Hariri msimbo",
+ "launch": "Zindua",
+ "remove": "Ondoa",
+ "stop": "Simamisha",
+ "task": "Kazi",
+ "visualize": "Onyesha kwa picha"
+ },
+ "deleteTeam": {
+ "description": "Futa timu \"{{team}}\"? Kitendo hiki hakiwezi kutenduliwa. Data zote za timu na kazi zitafutwa.",
+ "title": "Futa timu"
+ },
+ "draft": {
+ "descriptionPrefix": "Hii ni timu ya rasimu -",
+ "descriptionSuffix": "imesanidiwa na {{count}} {{member}} lakini bado haijapewa ugavi na CLI. Bofya Zindua ili kuchagua modeli na kuanzisha timu.",
+ "descriptionSuffix_few": "imesanidiwa na {{count}} {{member}} lakini bado haijapewa ugavi na CLI. Bofya Zindua ili kuchagua modeli na kuanzisha timu.",
+ "descriptionSuffix_many": "imesanidiwa na {{count}} {{member}} lakini bado haijapewa ugavi na CLI. Bofya Zindua ili kuchagua modeli na kuanzisha timu.",
+ "descriptionSuffix_one": "imesanidiwa na {{count}} {{member}} lakini bado haijapewa ugavi na CLI. Bofya Zindua ili kuchagua modeli na kuanzisha timu.",
+ "descriptionSuffix_other": "imesanidiwa na {{count}} {{member}} lakini bado haijapewa ugavi na CLI. Bofya Zindua ili kuchagua modeli na kuanzisha timu.",
+ "member": "wanachama",
+ "member_few": "wanachama",
+ "member_many": "wanachama",
+ "member_one": "mwanachama",
+ "member_other": "wanachama",
+ "title": "Timu bado haijazinduliwa"
+ },
+ "invalidTab": "Kichupo batili cha timu",
+ "kanbanSafeData": "Imeshindwa kupakia kanban kikamilifu. Inaonyesha data salama.",
+ "loadFailed": "Imeshindwa kupakia timu",
+ "loading": "Inapakia timu",
+ "loadingSidebar": "Inapakia utepe wa kando wa timu",
+ "offline": {
+ "offline": "Timu iko nje ya mtandao",
+ "partialFailed": "Uzinduzi wa mwisho umeshindwa katikati",
+ "partialMissing": "Uzinduzi wa mwisho umeshindwa katikati - wenzako {{missing}}/{{expected}} wa timu hawakujiunga",
+ "reconciling": "Uzinduzi wa mwisho bado unapatanishwa"
+ },
+ "previous": "Iliyotangulia: {{paths}}",
+ "removeMember": {
+ "description": "Ondoa \"{{member}}\" kutoka timu? Kazi na ujumbe vitahifadhiwa, lakini jina hili haliwezi kutumika tena.",
+ "title": "Ondoa mwanachama"
+ },
+ "sections": {
+ "team": "Timu"
+ },
+ "solo": "Peke yake",
+ "status": {
+ "active": "Hai",
+ "launching": "Inazindua...",
+ "running": "Inaendeshwa"
+ },
+ "telemetry": {
+ "cpu": "CPU",
+ "memory": "Kumbukumbu"
+ },
+ "tooltips": {
+ "deleteTeam": "Futa timu",
+ "editTeam": "Hariri timu",
+ "editUnavailableProvisioning": "Hariri timu haipatikani wakati ugavi bado unaendelea",
+ "openBuiltInEditor": "Fungua mradi katika kihariri kilichojengwa ndani",
+ "openTeamGraph": "Fungua grafu ya timu",
+ "stopTeam": "Simamisha timu"
+ },
+ "waitingForProvisioning": "Data ya timu itaonekana mara ugavi utakapokamilika",
+ "context": {
+ "title": "Muktadha",
+ "loading": "Inapakia...",
+ "noSessionLoaded": "Hakuna kipindi kilichopakiwa",
+ "closePanel": "Funga paneli ya muktadha ya {{team}}",
+ "loadingContext": "Inapakia muktadha...",
+ "openLeadSession": "Fungua kipindi cha kiongozi wa timu ili kuona muktadha."
+ }
+ },
+ "review": {
+ "fileHeader": {
+ "actions": {
+ "accept": "Kubali",
+ "discard": "Tupa",
+ "discardTooltip": "Tupa marekebisho yote ya faili hii",
+ "keepMyDraft": "Weka rasimu yangu",
+ "reject": "Kataa",
+ "reloadFromDisk": "Pakia tena kutoka diski",
+ "restore": "Rejesha",
+ "restoreTooltip": "Unda/rejesha faili hii kwenye diski kutoka hakikisho",
+ "saveFile": "Hifadhi Faili",
+ "saveFileTooltip": "Hifadhi faili kwenye diski"
+ },
+ "badges": {
+ "deleted": "IMEFUTWA",
+ "manualReview": "MAPITIO YA MKONO",
+ "new": "MPYA",
+ "worktree": "WORKTREE"
+ },
+ "contentSource": {
+ "disk-current": "Diski ya Sasa",
+ "file-history": "Historia ya Faili",
+ "git-fallback": "Mbadala wa Git",
+ "ledger-exact": "Leja ya Kazi",
+ "ledger-snapshot": "Picha ya Leja",
+ "snippet-reconstruction": "Imejengwa Upya",
+ "unavailable": "Maudhui hayapatikani"
+ },
+ "contentUnavailable": {
+ "badge": "Maudhui hayapatikani",
+ "description": "Leja ilirekodi metadata kwa mabadiliko haya, lakini maudhui kamili ya maandishi hayapatikani. Hii kwa kawaida humaanisha maudhui ya binari, makubwa, au ya hashi pekee.",
+ "safety": "Kukubali/kukataa kiotomatiki kumezimwa kwa faili hii ili kuepuka uandishi wa diski usio salama.",
+ "title": "Maudhui ya maandishi hayapatikani"
+ },
+ "disabled": {
+ "acceptRejectContentUnavailable": "Kukubali/Kukataa kumezimwa kwa sababu maudhui kamili ya maandishi hayapatikani.",
+ "acceptRejectMissingOnDisk": "Kukubali/Kukataa kumezimwa wakati faili haipo kwenye diski.",
+ "rejectBaselineUnavailable": "Kukataa kumezimwa kwa sababu msingi wa awali haupatikani.",
+ "rejectContentUnavailable": "Kukataa kumezimwa kwa sababu maudhui kamili ya maandishi hayapatikani.",
+ "rejectManualLedgerReview": "Kukataa kumezimwa kwa sababu mabadiliko haya ya leja yana maudhui ya binari, makubwa, au yasiyopatikana."
+ },
+ "externalChange": {
+ "changedOnDisk": "Imebadilishwa kwenye diski",
+ "deletedOnDisk": "Imefutwa kwenye diski",
+ "recreatedOnDisk": "Imeundwa upya kwenye diski"
+ },
+ "missingOnDisk": {
+ "badge": "Haipo kwenye diski",
+ "description": "Bado tunaweza kuonyesha hakikisho kutoka kumbukumbu za wakala, lakini mfumo wako wa faili haujasawazishwa.",
+ "restorePrefix": "Tumia",
+ "restoreSuffix": "kuandika maudhui ya hakikisho tena kwenye diski.",
+ "restoreUnavailable": "Maudhui kamili ya faili hayapatikani ili kurejesha kiotomatiki.",
+ "title": "Faili haipo kwenye diski"
+ },
+ "pathChange": {
+ "from": "Kutoka {{path}}",
+ "to": "Hadi {{path}}"
+ },
+ "worktree": {
+ "isolated": "Worktree iliyotengwa"
+ }
+ },
+ "toolbar": {
+ "stats": {
+ "pending": "{{count}} zinasubiri",
+ "pending_one": "{{count}} inasubiri",
+ "pending_other": "{{count}} zinasubiri",
+ "accepted": "{{count}} zimekubaliwa",
+ "accepted_one": "{{count}} imekubaliwa",
+ "accepted_other": "{{count}} zimekubaliwa",
+ "rejected": "{{count}} zimekataliwa",
+ "rejected_one": "{{count}} imekataliwa",
+ "rejected_other": "{{count}} zimekataliwa",
+ "acrossFiles": "katika faili {{count}}",
+ "acrossFiles_one": "katika faili {{count}}",
+ "acrossFiles_other": "katika faili {{count}}",
+ "edited": "{{count}} zimehaririwa",
+ "edited_one": "{{count}} imehaririwa",
+ "edited_other": "{{count}} zimehaririwa",
+ "pending_few": "{{count}} zinasubiri",
+ "pending_many": "{{count}} zinasubiri",
+ "accepted_few": "{{count}} zimekubaliwa",
+ "accepted_many": "{{count}} zimekubaliwa",
+ "rejected_few": "{{count}} zimekataliwa",
+ "rejected_many": "{{count}} zimekataliwa",
+ "acrossFiles_few": "katika faili {{count}}",
+ "acrossFiles_many": "katika faili {{count}}",
+ "edited_few": "{{count}} zimehaririwa",
+ "edited_many": "{{count}} zimehaririwa"
+ },
+ "actions": {
+ "auto": "Otomatiki",
+ "undo": "Tendua",
+ "acceptAll": "Kubali Zote",
+ "rejectAll": "Kataa Zote",
+ "applying": "Inatumia...",
+ "applyRejections": "Tumia Ukataaji"
+ },
+ "tooltips": {
+ "autoOn": "Weka alama faili kiotomatiki kuwa zimeonekana zikisogezwa hadi mwisho (IMEWASHWA)",
+ "autoOff": "Weka alama faili kiotomatiki kuwa zimeonekana zikisogezwa hadi mwisho (IMEZIMWA)",
+ "undo": "Tendua operesheni ya mwisho ya mapitio (Ctrl+Z)",
+ "acceptAll": "Kubali mabadiliko yote katika faili zote",
+ "rejectAll": "Kataa kwa usalama mabadiliko yote yanayoweza kukataliwa katika faili zote",
+ "rejectAllDisabled": "Hakuna faili zinazosubiri zenye msingi salama wa awali wa kukataa.",
+ "applyRejections": "Tumia vipande vilivyokataliwa kwenye diski; mabadiliko yaliyokubaliwa yanawekwa kama yalivyo"
+ }
+ },
+ "diffError": {
+ "title": "Imeshindwa kuonyesha mwonekano wa tofauti",
+ "unexpected": "Hitilafu isiyotarajiwa imetokea wakati wa kuonyesha tofauti.",
+ "actions": {
+ "retry": "Jaribu tena"
+ },
+ "raw": {
+ "show": "Onyesha data ghafi ya tofauti",
+ "file": "Faili: {{file}}",
+ "original": "--- Asili",
+ "modified": "+++ Iliyobadilishwa",
+ "charsTotal": "... (herufi {{count}} jumla)",
+ "charsTotal_one": "... (herufi {{count}} jumla)",
+ "charsTotal_other": "... (herufi {{count}} jumla)",
+ "charsTotal_few": "... (herufi {{count}} jumla)",
+ "charsTotal_many": "... (herufi {{count}} jumla)"
+ }
+ },
+ "fileTree": {
+ "viewed": "Imeonekana",
+ "badges": {
+ "new": "mpya",
+ "deleted": "imefutwa"
+ },
+ "collapseFolder": "Kunja {{name}}",
+ "expandFolder": "Panua {{name}}",
+ "empty": {
+ "noChangedFiles": "Hakuna faili zilizobadilishwa",
+ "noMatchingFiles": "Hakuna faili zinazolingana"
+ },
+ "searchPlaceholder": "Tafuta faili…",
+ "filters": {
+ "unresolved": "Hazijasuluhishwa",
+ "rejected": "Zilizokataliwa",
+ "new": "Mpya",
+ "clear": "Futa"
+ }
+ },
+ "diffControls": {
+ "previousChunk": "Kipande kilichotangulia",
+ "nextChunk": "Kipande kinachofuata",
+ "rejectChange": "Kataa badiliko (⌘N)",
+ "acceptChange": "Kubali badiliko (⌘Y)",
+ "undo": "Tendua",
+ "keep": "Weka",
+ "rejectShortcut": "⌘N",
+ "acceptShortcut": "⌘Y"
+ },
+ "conflict": {
+ "title": "Mgongano Umegunduliwa",
+ "description": "Faili hii imebadilishwa tangu mabadiliko ya wakala",
+ "cancel": "Ghairi",
+ "saveResolution": "Hifadhi Suluhisho",
+ "editManually": "Hariri kwa Mkono",
+ "useOriginal": "Tumia Asili",
+ "keepCurrent": "Weka ya Sasa"
+ },
+ "fullDiffLoading": {
+ "titleOne": "Inaandaa Tofauti Kamili",
+ "titleMany": "Inaandaa Tofauti Kamili {{count}}",
+ "subtitleForFile": "Inakamilisha tofauti kamili ya kihariri kwa {{file}}.",
+ "subtitleCurrentFile": "Inakamilisha tofauti kamili ya kihariri kwa faili ya sasa.",
+ "subtitleMany": "Inasuluhisha misingi kamili ya kabla/baada kwa faili zinazopakiwa kwa sasa.",
+ "previewsReady": "hakikisho {{count}} ziko tayari",
+ "previewsReady_one": "hakikisho {{count}} liko tayari",
+ "editorViewLoading": "Mwonekano wa kihariri unapakia",
+ "filesInProgress": "faili {{count}} zinaendelea",
+ "filesInProgress_one": "faili {{count}} inaendelea",
+ "filesReady": "faili {{ready}}/{{total}} ziko tayari",
+ "progressDescription": "{{ready}} ziko tayari, {{loading}} bado zinapakia. Tofauti za hakikisho zinabaki zikionekana hapa chini wakati misingi iliyobaki inasuluhishwa.",
+ "singleDescription": "Tofauti za hakikisho zinabaki zikionekana hapa chini wakati msingi kamili unasuluhishwa.",
+ "previewsReady_few": "hakikisho {{count}} ziko tayari",
+ "previewsReady_many": "hakikisho {{count}} ziko tayari",
+ "previewsReady_other": "hakikisho {{count}} ziko tayari",
+ "filesInProgress_few": "faili {{count}} zinaendelea",
+ "filesInProgress_many": "faili {{count}} zinaendelea",
+ "filesInProgress_other": "faili {{count}} zinaendelea"
+ },
+ "fileMissingPrefix": "Faili haipo kwenye diski. Tofauti hii inaweza kuwa hakikisho tu kutoka kumbukumbu za wakala. Tumia",
+ "restore": "Rejesha",
+ "fileMissingSuffix": "kuunda faili kwenye diski.",
+ "filePlaceholder": {
+ "loading": "Inapakia",
+ "description": "Inaandaa tofauti kamili ya kihariri kwa faili hii."
+ },
+ "loading": {
+ "diff": "TOFAUTI",
+ "ledgerObjectsProcessed": "vitu {{count}} vya leja vimechakatwa",
+ "ledgerObjectsProcessed_one": "kitu {{count}} cha leja kimechakatwa",
+ "ledgerObjectsProcessed_other": "vitu {{count}} vya leja vimechakatwa",
+ "ledgerObjectsProcessed_few": "vitu {{count}} vya leja vimechakatwa",
+ "ledgerObjectsProcessed_many": "vitu {{count}} vya leja vimechakatwa",
+ "phases": {
+ "readingLedger": "Inasoma leja ya kazi...",
+ "resolvingFiles": "Inasuluhisha hali za faili...",
+ "checkingWorktree": "Inakagua muktadha wa worktree...",
+ "preparingDiffs": "Inaandaa tofauti za mapitio..."
+ }
+ },
+ "progress": {
+ "viewed": "{{viewed}}/{{total}} zimeonekana"
+ },
+ "scope": {
+ "readMore": "Soma zaidi",
+ "tiers": {
+ "exact": {
+ "title": "Wigo wa kazi umebainishwa kwa usahihi",
+ "detail": "Alama za kuanza na kukamilika zote zilipatikana katika kumbukumbu ya kipindi. Tofauti inajumuisha mabadiliko yaliyofanywa wakati wa kazi hii mahususi pekee - kazi nyingine zilizobadilisha faili zile zile zimetengwa."
+ },
+ "endEstimated": {
+ "title": "Mpaka wa mwisho umekadiriwa",
+ "detail": "Alama ya kuanza pekee ilipatikana - kazi bado haina alama ya kukamilika. Mabadiliko yanaonyeshwa kutoka mwanzo wa kazi hadi mwisho wa kipindi. Iwapo kazi nyingine ziliendeshwa baada ya hii katika kipindi kile kile, mabadiliko yake yanaweza pia kujumuishwa."
+ },
+ "startEstimated": {
+ "title": "Mpaka wa kuanza umekadiriwa",
+ "detail": "Alama ya kukamilika pekee ilipatikana - mwanzo wa kazi haukunaswa. Iwapo kazi nyingine ziliendeshwa kabla ya hii katika kipindi kile kile, mabadiliko yake kwa faili zile zile yanaweza pia kujumuishwa."
+ },
+ "allSession": {
+ "title": "Inaonyesha mabadiliko yote ya kipindi",
+ "detail": "Hakuna alama za kazi zilizopatikana katika kumbukumbu ya kipindi. Haiwezi kutenga kazi hii - mabadiliko yote ya faili kutoka kipindi kizima yanaonyeshwa, ikiwa ni pamoja na mabadiliko kutoka kazi nyingine. Hii inaweza kutokea na matoleo ya zamani ya CLI au mitiririko ya kazi isiyo ya kawaida."
+ }
+ },
+ "ledger": {
+ "exact": {
+ "title": "Mabadiliko yaliyonaswa na leja ya kazi",
+ "detail": "Mratibu alinasa mabadiliko haya ya faili wakati wakala alikuwa akifanyia kazi kazi hii.",
+ "badge": "Leja kamili"
+ },
+ "limited": {
+ "title": "Mabadiliko yaliyonaswa yenye uwezekano mdogo wa kupitiwa",
+ "detail": "Mratibu alinasa mabadiliko haya ya faili kwa kazi hii, lakini angalau badiliko moja lilinaswa kutoka picha au chanzo cha metadata pekee. Pitia tofauti kamili za maandishi pale zinapopatikana; maudhui ya binari au yasiyopatikana yanaweza kuhitaji mapitio ya mkono.",
+ "mixedBadge": "Uwezo mchanganyiko wa kupitiwa",
+ "needsReviewBadge": "Inahitaji mapitio"
+ }
+ },
+ "workInterval": {
+ "title": "Imewekwa wigo na muda wa kazi uliohifadhiwa",
+ "detail": "Alama ya kuanza kwa kazi haikupatikana katika kumbukumbu ya kipindi, kwa hivyo tofauti imewekwa wigo na muda wa kazi uliohifadhiwa kwenye ubao.",
+ "badge": "Imewekwa wigo kwa muda"
+ },
+ "confidence": {
+ "high": "Imani ya juu",
+ "medium": "Imani ya wastani",
+ "low": "Imani ya chini",
+ "bestEffort": "Juhudi bora"
+ }
+ },
+ "shortcuts": {
+ "title": "Njia za Mkato za Kibodi",
+ "actions": {
+ "nextChange": "Badiliko linalofuata",
+ "previousChange": "Badiliko lililotangulia",
+ "nextFile": "Faili inayofuata",
+ "previousFile": "Faili iliyotangulia",
+ "acceptChange": "Kubali badiliko",
+ "rejectChange": "Kataa badiliko",
+ "saveFile": "Hifadhi faili",
+ "undo": "Tendua",
+ "redo": "Rudia",
+ "toggleShortcuts": "Geuza njia za mkato",
+ "closeDialog": "Funga kidirisha"
+ }
+ },
+ "timeline": {
+ "empty": "Hakuna matukio ya uhariri",
+ "titleWithCount": "Ratiba ya Uhariri ({{count}})"
+ },
+ "continuousScroll": {
+ "empty": "Hakuna mabadiliko ya faili yanayoweza kupitiwa"
+ },
+ "empty": {
+ "noSafeDiff": "Hakuna tofauti salama inayopatikana",
+ "noFileChangesRecorded": "Hakuna mabadiliko ya faili yaliyorekodiwa",
+ "noSafeDiffDescription": "Leja ya kazi haikuonyesha tofauti salama ya faili kwa kazi hii.",
+ "noSafeDiffDiagnosticsDescription": "Leja ya kazi haikuonyesha tofauti salama ya faili kwa kazi hii. Utambuzi hapa chini unaeleza kwa nini.",
+ "noFileEventsYet": "Leja ya kazi bado haina matukio ya faili kwa kazi hii.",
+ "noFileEvents": "Leja ya kazi haina matukio ya faili kwa kazi hii."
+ }
+ },
+ "messages": {
+ "actions": {
+ "bottomSheetActions": "Vitendo vya karatasi ya chini ya ujumbe",
+ "collapseAll": "Kunja ujumbe wote",
+ "collapseSheet": "Kunja karatasi",
+ "expandAll": "Panua ujumbe wote",
+ "expandSheet": "Panua karatasi",
+ "floatComposer": "Elea kitunzi",
+ "floatMessagesComposer": "Elea kitunzi cha ujumbe",
+ "hideSearch": "Ficha utafutaji",
+ "loadOlder": "Pakia ujumbe wa zamani",
+ "markAllRead": "Weka alama zote kuwa zimesomwa",
+ "messageActions": "Vitendo vya ujumbe",
+ "moveMessagesToBottomSheet": "Hamisha ujumbe kwenye karatasi ya chini",
+ "moveMessagesToSidebar": "Hamisha ujumbe kwenye utepe wa kando",
+ "moveToBottomSheet": "Hamisha kwenye karatasi ya chini",
+ "moveToInline": "Hamisha hadi ndani ya mstari",
+ "moveToSidebar": "Hamisha kwenye utepe wa kando",
+ "panelActions": "Vitendo vya paneli ya ujumbe",
+ "searchMessages": "Tafuta ujumbe"
+ },
+ "delivery": {
+ "copied": "Imenakiliwa",
+ "copyDebugDetails": "Nakili maelezo ya utatuzi",
+ "details": "Maelezo",
+ "fields": {
+ "acceptanceUnknown": "acceptanceUnknown",
+ "delivered": "delivered",
+ "diagnostics": "diagnostics",
+ "ledgerStatus": "ledgerStatus",
+ "messageId": "messageId",
+ "providerId": "providerId",
+ "queuedBehindMessageId": "queuedBehindMessageId",
+ "reason": "reason",
+ "responsePending": "responsePending",
+ "responseState": "responseState",
+ "statusMessageId": "statusMessageId",
+ "userVisibleMessage": "userVisibleMessage",
+ "userVisibleNextReviewAt": "userVisibleNextReviewAt",
+ "userVisibleReasonCode": "userVisibleReasonCode",
+ "userVisibleState": "userVisibleState",
+ "visibleReplyCorrelation": "visibleReplyCorrelation",
+ "visibleReplyMessageId": "visibleReplyMessageId"
+ }
+ },
+ "panelMode": "Hali ya paneli ya ujumbe",
+ "title": "Ujumbe",
+ "unread": {
+ "new": "{{count}} mpya",
+ "unread": "{{count}} hazijasomwa",
+ "new_few": "{{count}} mpya",
+ "new_many": "{{count}} mpya",
+ "new_one": "{{count}} mpya",
+ "new_other": "{{count}} mpya",
+ "unread_few": "{{count}} hazijasomwa",
+ "unread_many": "{{count}} hazijasomwa",
+ "unread_one": "{{count}} haijasomwa",
+ "unread_other": "{{count}} hazijasomwa"
+ },
+ "filter": {
+ "ariaLabel": "Chuja ujumbe",
+ "tooltip": "Chuja ujumbe",
+ "from": "Kutoka",
+ "to": "Kwa",
+ "noData": "Hakuna data",
+ "showStatusUpdates": "Onyesha masasisho ya hali (kutotumika/kuzima)",
+ "actions": {
+ "reset": "Weka upya",
+ "save": "Hifadhi"
+ }
+ },
+ "status": {
+ "title": "Hali"
+ },
+ "actionMode": {
+ "label": "Hali ya kitendo"
+ },
+ "search": {
+ "placeholder": "Tafuta..."
+ }
+ },
+ "modelSelector": {
+ "badges": {
+ "configured": "Imesanidiwa",
+ "connected": "Imeunganishwa",
+ "failed": "Imeshindwa",
+ "free": "Bure",
+ "local": "Ya ndani",
+ "needsTest": "Inahitaji jaribio",
+ "verified": "Imethibitishwa",
+ "unavailable": "Haipatikani",
+ "issue": "Tatizo"
+ },
+ "customModelId": "Kitambulisho cha modeli maalum",
+ "label": "Modeli (hiari)",
+ "multimodelRequired": "Codex na Gemini zinahitaji hali ya Modeli nyingi.",
+ "openCode": {
+ "allSources": "Vyanzo vyote vya OpenCode",
+ "filterSource": "Chuja {{source}}",
+ "filterSources": "Chuja vyanzo vya OpenCode",
+ "freeOnly": "Bure pekee",
+ "freeTooltip": "OpenCode inaweka alama modeli hii kuwa bure.",
+ "loadingModels": "Inapakia modeli za OpenCode...",
+ "noSourcesFound": "Hakuna vyanzo vilivyopatikana.",
+ "recommendedOnly": "Zilizopendekezwa pekee",
+ "searchSources": "Tafuta vyanzo",
+ "sourcesCount": "vyanzo {{count}} vya OpenCode",
+ "sourcesCount_few": "vyanzo {{count}} vya OpenCode",
+ "sourcesCount_many": "vyanzo {{count}} vya OpenCode",
+ "sourcesCount_one": "chanzo {{count}} cha OpenCode",
+ "sourcesCount_other": "vyanzo {{count}} vya OpenCode"
+ },
+ "reason": "Sababu: {{reason}}",
+ "runtimeModelsSyncing": "Modeli za wazi zinapakia kutoka runtime ya sasa. Chaguo-msingi inabaki inapatikana wakati orodha inasawazishwa.",
+ "fastMode": {
+ "codexLabel": "Hali ya Fast (krediti 2x)",
+ "optionalLabel": "Hali ya Fast (hiari)",
+ "defaultOff": "Chaguo-msingi (Imezimwa)",
+ "fast": "Fast",
+ "off": "Imezimwa",
+ "defaultFast": "Chaguo-msingi (Fast)",
+ "defaultResolvesTo": "Chaguo-msingi kwa sasa inasuluhishwa kuwa {{mode}}.",
+ "runtimeBackedHint": "Hali ya Fast inaungwa mkono na runtime na inafunguka tu wakati modeli ya uzinduzi ya Anthropic iliyosuluhishwa inaiunga mkono."
+ },
+ "anthropicExtraUsage": {
+ "pricingDocs": "Soma hati za bei za Anthropic"
+ },
+ "searchModels": "Tafuta modeli",
+ "defaultModel": "Chaguo-msingi",
+ "empty": {
+ "noSearchMatches": "Hakuna modeli zinazolingana na utafutaji huu.",
+ "recommendedFreeOpenCode": "Hakuna modeli za bure zilizopendekezwa za OpenCode zinazopatikana katika orodha ya runtime ya sasa.",
+ "freeOpenCode": "Hakuna modeli za bure za OpenCode zinazopatikana katika orodha ya runtime ya sasa.",
+ "recommendedOpenCode": "Hakuna modeli zilizopendekezwa za OpenCode zinazopatikana katika orodha ya runtime ya sasa.",
+ "noModels": "Hakuna modeli zinazopatikana katika orodha ya runtime ya sasa."
+ },
+ "openCodeStatus": {
+ "notReadyTitle": "OpenCode haiko tayari kwa uzinduzi wa timu",
+ "freeModelsAvailableTitle": "Modeli za bure za OpenCode zinapatikana",
+ "providerNotConnectedTitle": "Mtoa huduma wa OpenCode hajaunganishwa",
+ "readyTitle": "OpenCode iko tayari",
+ "readyMessage": "OpenCode imepita utayari wa mtoa huduma. Ichague ili kutumia modeli za OpenCode kwa timu hii.",
+ "useOpenCode": "Tumia OpenCode",
+ "badges": {
+ "check": "Kagua",
+ "install": "Sakinisha",
+ "free": "Bure",
+ "setup": "Sanidi"
+ },
+ "summary": {
+ "checking": "Hali ya OpenCode: inakagua runtime",
+ "status": "Hali ya OpenCode: {{parts}}"
+ },
+ "summaryParts": {
+ "teamLaunchBlocked": "uzinduzi wa timu umezuiwa",
+ "providerOptional": "muunganisho wa mtoa huduma ni wa hiari",
+ "providerModelsNeedSetup": "modeli zinazoungwa mkono na mtoa huduma zinahitaji usanidi",
+ "teamLaunchReady": "uzinduzi wa timu uko tayari",
+ "runtimeDetected": "runtime imegunduliwa",
+ "runtimeMissing": "runtime haipo",
+ "freeWithoutAuth": "modeli za bure zinapatikana bila uthibitishaji",
+ "providerConnected": "mtoa huduma ameunganishwa",
+ "providerNotConnected": "mtoa huduma hajaunganishwa"
+ },
+ "messages": {
+ "checking": "Programu bado inakagua runtime ya OpenCode. Subiri hali ya mtoa huduma imalize, kisha ujaribu tena.",
+ "unsupported": "OpenCode haijasakinishwa, haikupatikana, au runtime iliyogunduliwa haiungwi mkono. Sakinisha au sasisha OpenCode, kisha uonyeshe upya hali ya mtoa huduma. Unaweza pia kutumia kitufe cha Sakinisha kwenye ukurasa wa nyumbani.",
+ "freeAvailable": "OpenCode imegunduliwa. Unaweza kutumia modeli za bure za OpenCode kama vile Big Pickle bila kuunganisha mtoa huduma. Unganisha mtoa huduma tu unapotaka modeli zinazoungwa mkono na mtoa huduma.",
+ "noFreeListed": "OpenCode imegunduliwa, lakini bado hakuna modeli ya bure ya OpenCode iliyoorodheshwa. Onyesha upya hali ya mtoa huduma, au unganisha mtoa huduma katika OpenCode kwa modeli zinazoungwa mkono na mtoa huduma.",
+ "launchBlocked": "OpenCode imesakinishwa na imethibitishwa, lakini utayari wa uzinduzi wa Agent Teams umezuiwa.",
+ "ready": "OpenCode iko tayari kwa uzinduzi wa timu."
+ },
+ "loadingRuntime": "Hali ya runtime ya OpenCode bado inapakia."
+ },
+ "advisory": {
+ "pingNotConfirmed": "Ping haijathibitishwa",
+ "note": "Dokezo"
+ },
+ "placeholders": {
+ "customModelId": "openai/gpt-oss-20b"
+ },
+ "routeGroups": {
+ "openCodeConfig": "Usanidi wa OpenCode",
+ "builtinFree": "Bure iliyojengwa ndani",
+ "connectedProviders": "Watoa huduma walioungana",
+ "otherCatalog": "Katalogi nyingine ya OpenCode"
+ },
+ "pricing": {
+ "free": "Bure",
+ "inputShort": "ingizo {{rate}}",
+ "outputShort": "towe {{rate}}",
+ "perMillionSummary": "{{summary}} / 1M",
+ "inputTitle": "Ingizo: {{rate}} kwa tokeni 1M",
+ "outputTitle": "Towe: {{rate}} kwa tokeni 1M",
+ "cacheReadTitle": "Usomaji wa akiba: {{rate}} kwa tokeni 1M",
+ "cacheWriteTitle": "Uandishi wa akiba: {{rate}} kwa tokeni 1M"
+ },
+ "defaultTooltip": {
+ "anthropicCompatibleWithResolved": "Inatumia modeli ya chaguo-msingi ya endpoint inayooana na Anthropic.\nKwa sasa inasuluhishwa kuwa {{model}}.",
+ "anthropicCompatible": "Inatumia modeli ya chaguo-msingi ya endpoint inayooana na Anthropic.",
+ "anthropic": "Inatumia modeli ya chaguo-msingi ya timu ya Claude.\nInasuluhishwa kuwa {{longContextModel}} yenye muktadha wa 1M, au {{limitedContextModel}} yenye muktadha wa 200K wakati Punguza muktadha imewezeshwa.",
+ "openCodeWithResolved": "Inatumia modeli ya chaguo-msingi ya OpenCode.\nKwa sasa inasuluhishwa kuwa {{model}}.",
+ "openCode": "Inatumia modeli ya chaguo-msingi ya runtime ya OpenCode.",
+ "runtime": "Inatumia chaguo-msingi ya runtime kwa mtoa huduma aliyechaguliwa."
+ },
+ "multimodelOff": "Modeli nyingi imezimwa",
+ "unavailableInRuntime": "Haipatikani katika runtime ya sasa"
+ },
+ "taskDetail": {
+ "actions": {
+ "cancel": "Ghairi",
+ "delete": "Futa",
+ "markResolved": "Weka alama kuwa imesuluhishwa",
+ "save": "Hifadhi"
+ },
+ "attachments": {
+ "commentAttachment": "Kiambatisho cha maoni",
+ "fromComments": "Kutoka maoni",
+ "preview": "Hakikisho {{filename}}"
+ },
+ "changes": {
+ "badges": {
+ "attention": "uangalifu",
+ "noSafeDiff": "hakuna tofauti salama"
+ },
+ "empty": {
+ "noFileChangesRecorded": "Hakuna mabadiliko ya faili yaliyorekodiwa",
+ "noFileChangesRecordedYet": "Bado hakuna mabadiliko ya faili yaliyorekodiwa",
+ "noReviewableChangesRecovered": "Hakuna mabadiliko ya faili yanayoweza kupitiwa yaliyorejeshwa",
+ "noSafeDiffAvailable": "Hakuna tofauti salama inayopatikana"
+ },
+ "loadFailed": "Imeshindwa kupakia muhtasari wa mabadiliko ya kazi",
+ "loading": "Inapakia mabadiliko...",
+ "fileCount": "faili {{count}}",
+ "fileRowsHidden": "safu {{count}} za faili zimefichwa",
+ "moreDiagnostics": "utambuzi {{count}} zaidi",
+ "moreFiles": "faili {{count}} zaidi",
+ "openInEditor": "Fungua katika kihariri",
+ "openTask": "Fungua kazi {{subject}}",
+ "refresh": "Onyesha upya mabadiliko",
+ "refreshFailed": "Kuonyesha upya kumeshindwa: {{error}}",
+ "refreshing": "Inaonyesha upya",
+ "refreshingChanges": "Inaonyesha upya mabadiliko...",
+ "refreshTeamChanges": "Onyesha upya mabadiliko ya timu",
+ "refreshShort": "Onyesha upya",
+ "reviewDiff": "Pitia tofauti",
+ "reviewTaskDiff": "Pitia tofauti ya kazi",
+ "scannedCandidateTasks": "Imechanganua {{requested}} kati ya {{eligible}} kazi tahiniwa",
+ "tasksDeferred": "kazi {{count}} zimeahirishwa katika pasi hii",
+ "title": "Mabadiliko",
+ "fileCount_few": "faili {{count}}",
+ "fileCount_many": "faili {{count}}",
+ "fileCount_one": "faili {{count}}",
+ "fileCount_other": "faili {{count}}",
+ "fileRowsHidden_few": "safu {{count}} za faili zimefichwa",
+ "fileRowsHidden_many": "safu {{count}} za faili zimefichwa",
+ "fileRowsHidden_one": "safu {{count}} ya faili imefichwa",
+ "fileRowsHidden_other": "safu {{count}} za faili zimefichwa",
+ "moreDiagnostics_few": "utambuzi {{count}} zaidi",
+ "moreDiagnostics_many": "utambuzi {{count}} zaidi",
+ "moreDiagnostics_one": "utambuzi {{count}} zaidi",
+ "moreDiagnostics_other": "utambuzi {{count}} zaidi",
+ "moreFiles_few": "faili {{count}} zaidi",
+ "moreFiles_many": "faili {{count}} zaidi",
+ "moreFiles_one": "faili {{count}} zaidi",
+ "moreFiles_other": "faili {{count}} zaidi",
+ "tasksDeferred_few": "kazi {{count}} zimeahirishwa katika pasi hii",
+ "tasksDeferred_many": "kazi {{count}} zimeahirishwa katika pasi hii",
+ "tasksDeferred_one": "kazi {{count}} imeahirishwa katika pasi hii",
+ "tasksDeferred_other": "kazi {{count}} zimeahirishwa katika pasi hii"
+ },
+ "clarification": {
+ "awaitingLead": "Inasubiri ufafanuzi kutoka kwa kiongozi wa timu",
+ "awaitingUser": "Inasubiri ufafanuzi kutoka kwako"
+ },
+ "description": {
+ "add": "Bofya kuongeza maelezo...",
+ "edit": "Hariri maelezo",
+ "placeholder": "Maelezo ya kazi (inaunga mkono markdown)"
+ },
+ "loading": {
+ "fetchingTeamData": "Inaleta data ya timu",
+ "title": "Inapakia kazi..."
+ },
+ "logs": {
+ "newArriving": "Kumbukumbu mpya za kazi zinafika"
+ },
+ "notFound": "Kazi haikupatikana",
+ "related": {
+ "blockedBy": "Imezuiwa na",
+ "blocks": "Inazuia",
+ "linkedFrom": "Imeunganishwa kutoka",
+ "links": "Viungo",
+ "title": "Kazi zinazohusiana"
+ },
+ "review": {
+ "reviewer": "Mkaguzi: {{reviewer}}"
+ },
+ "sections": {
+ "attachments": "Viambatisho",
+ "changes": "Mabadiliko",
+ "comments": "Maoni",
+ "description": "Maelezo",
+ "taskLogs": "Kumbukumbu za Kazi",
+ "workflowHistory": "Historia ya Mtiririko wa Kazi"
+ },
+ "unassigned": "Hawajakabidhiwa",
+ "workflow": {
+ "implementationTimeTitle": "Muda wa utekelezaji kutoka muda wa kazi uliohifadhiwa",
+ "inProgressTime": "Muda wa kuendelea {{duration}}"
+ },
+ "comments": {
+ "renderLimit": "Inaonyesha maoni {{formattedCount}} ya hivi karibuni zaidi ili kuweka UI ikiwa nadhifu.",
+ "badges": {
+ "approved": "Imeidhinishwa",
+ "reviewRequested": "Mapitio yameombwa"
+ },
+ "unknownTime": "wakati haujulikani",
+ "actions": {
+ "reply": "Jibu",
+ "replyToComment": "Jibu maoni",
+ "showMore": "Onyesha maoni zaidi ({{visible}}/{{total}})",
+ "cancelReply": "Ghairi jibu",
+ "comment": "Maoni"
+ },
+ "attachments": {
+ "previewAlt": "Hakikisho la kiambatisho",
+ "downloadFailed": "Upakuaji umeshindwa"
+ },
+ "replyingTo": "Inajibu",
+ "input": {
+ "placeholder": "Ongeza maoni... (Enter kutuma)",
+ "charsLeft": "herufi {{count}} zimebaki",
+ "charsLeft_one": "herufi {{count}} imebaki",
+ "charsLeft_other": "herufi {{count}} zimebaki",
+ "charsLeft_few": "herufi {{count}} zimebaki",
+ "charsLeft_many": "herufi {{count}} zimebaki"
+ }
+ },
+ "workflowTimeline": {
+ "empty": "Hakuna historia ya mtiririko wa kazi iliyorekodiwa",
+ "currentImplementationInterval": "Muda wa sasa wa utekelezaji",
+ "implementationIntervalEnded": "Muda wa utekelezaji uliisha katika mpito huu",
+ "runningPrefix": "inaendeshwa ",
+ "createdAs": "Iliundwa kama",
+ "by": "na",
+ "reassigned": "Imekabidhiwa upya",
+ "assignedTo": "Imekabidhiwa kwa",
+ "unassignedFrom": "Imeondolewa kabidhi kutoka",
+ "ownerChanged": "Mmiliki amebadilika",
+ "reviewRequested": "Mapitio yameombwa",
+ "reviewStarted": "Mapitio yameanza",
+ "changesRequested": "Mabadiliko yameombwa",
+ "approved": "Imeidhinishwa",
+ "unknownEvent": "Tukio lisilojulikana"
+ },
+ "reviewStates": {
+ "approved": "Imeidhinishwa",
+ "needsFix": "Inahitaji marekebisho",
+ "inReview": "Katika mapitio"
+ }
+ },
+ "tasks": {
+ "createTask": {
+ "assignee": "Aliyekabidhiwa",
+ "assigneeOptional": "Aliyekabidhiwa (hiari)",
+ "blockedByOptional": "Kazi zinazozuia (hiari)",
+ "blockedBySummary": "Kazi itazuiwa na: {{tasks}}",
+ "cancel": "Ghairi",
+ "create": "Unda",
+ "creating": "Inaunda...",
+ "description": "Kazi itaundwa katika saraka ya tasks/ ya timu na kuonekana kwenye ubao wa Kanban.",
+ "descriptionOptional": "Maelezo (hiari)",
+ "detailsPlaceholder": "Maelezo ya kazi (inaunga mkono markdown)",
+ "hideOptionalFields": "Ficha sehemu za hiari",
+ "offlineNotice": {
+ "after": "- zindua timu ili kuanza utekelezaji.",
+ "before": "Timu iko nje ya mtandao. Kazi itaongezwa kwa"
+ },
+ "promptOptional": "Kidokezo kwa aliyekabidhiwa (hiari)",
+ "promptPlaceholder": "Maagizo maalum kwa mwanachama wa timu...",
+ "relatedOptional": "Kazi zinazohusiana (hiari)",
+ "relatedSummary": "Zinazohusiana: {{tasks}}",
+ "saved": "Imehifadhiwa",
+ "searchTasks": "Tafuta kazi...",
+ "selectMember": "Chagua mwanachama",
+ "selectMemberOptional": "Chagua mwanachama...",
+ "showOptionalFields": "Onyesha sehemu za hiari",
+ "startImmediately": "Anza mara moja",
+ "startOfflineHint": "Timu iko nje ya mtandao. Zindua timu kwanza ili kuanza kazi mara moja.",
+ "subject": "Mada",
+ "subjectPlaceholder": "Nini kinahitaji kufanywa?",
+ "title": "Unda Kazi",
+ "todo": "YA KUFANYA"
+ },
+ "list": {
+ "columns": {
+ "blockedBy": "Imezuiwa Na",
+ "blocks": "Inazuia",
+ "id": "ID",
+ "owner": "Mmiliki",
+ "status": "Hali",
+ "subject": "Mada"
+ },
+ "empty": "Hakuna kazi katika timu hii",
+ "filters": {
+ "allOwners": "Wamiliki wote",
+ "allStatuses": "Hali zote",
+ "ownerAria": "Chuja kazi kwa mmiliki",
+ "statusAria": "Chuja kazi kwa hali"
+ },
+ "showing": "Inaonyesha {{shown}} kati ya {{total}}"
+ },
+ "status": {
+ "completed": "imekamilika",
+ "deleted": "imefutwa",
+ "inProgress": "inaendelea",
+ "pending": "inasubiri"
+ },
+ "statusSummary": {
+ "progressAria": "Kazi {{completed}}/{{total}} zimekamilika",
+ "inProgress": "{{count}} zinaendelea",
+ "inProgress_one": "{{count}} inaendelea",
+ "inProgress_other": "{{count}} zinaendelea",
+ "inProgress_few": "{{count}} zinaendelea",
+ "inProgress_many": "{{count}} zinaendelea",
+ "pending": "{{count}} zinasubiri",
+ "pending_one": "{{count}} inasubiri",
+ "pending_other": "{{count}} zinasubiri",
+ "pending_few": "{{count}} zinasubiri",
+ "pending_many": "{{count}} zinasubiri",
+ "completed": "{{count}} zimekamilika",
+ "completed_one": "{{count}} imekamilika",
+ "completed_other": "{{count}} zimekamilika",
+ "completed_few": "{{count}} zimekamilika",
+ "completed_many": "{{count}} zimekamilika"
+ },
+ "unassigned": "Hawajakabidhiwa",
+ "teamPrefix": "Timu:",
+ "openTask": "Fungua kazi",
+ "deleteConfirm": {
+ "title": "Futa kazi",
+ "message": "Hamisha kazi #{{taskId}} kwenye tupio?",
+ "confirmLabel": "Futa",
+ "cancelLabel": "Ghairi"
+ }
+ },
+ "editor": {
+ "actions": {
+ "cancel": "Ghairi",
+ "closeEditor": "Funga kihariri",
+ "closeTab": "Funga kichupo",
+ "closeTooltip": "Funga kihariri (Esc)",
+ "discard": "Tupa",
+ "discardAndClose": "Tupa na Funga",
+ "keep": "Weka",
+ "keepMine": "Weka yangu",
+ "keyboardShortcuts": "Njia za mkato za kibodi",
+ "overwrite": "Andika juu",
+ "refreshAria": "Onyesha upya (F5)",
+ "refreshTooltip": "Onyesha upya hali ya git (F5)",
+ "reload": "Pakia tena",
+ "retry": "Jaribu tena",
+ "save": "Hifadhi",
+ "saveAllAndClose": "Hifadhi Zote na Funga"
+ },
+ "ariaLabel": "Kihariri cha Mradi",
+ "dialogs": {
+ "conflictDescription": "Faili imebadilishwa kwa nje tangu ulipoifungua. Andika juu na mabadiliko yako?",
+ "conflictTitle": "Mgongano wa Kuhifadhi",
+ "unsavedDescription": "Una mabadiliko ambayo hayajahifadhiwa. Ungependa kufanya nini?",
+ "unsavedFileDescription": "Faili hii ina mabadiliko ambayo hayajahifadhiwa. Ungependa kufanya nini?",
+ "unsavedTitle": "Mabadiliko Yasiyohifadhiwa"
+ },
+ "newFile": {
+ "validation": {
+ "nameRequired": "Jina haliwezi kuwa tupu",
+ "invalidName": "Jina batili",
+ "invalidCharacters": "Jina lina herufi batili",
+ "nameTooLong": "Jina ni refu mno"
+ },
+ "placeholders": {
+ "fileName": "Jina la faili...",
+ "folderName": "Jina la folda..."
+ },
+ "aria": {
+ "newFileName": "Jina jipya la faili",
+ "newFolderName": "Jina jipya la folda"
+ }
+ },
+ "draftRecovered": "Yamerejeshwa mabadiliko yasiyohifadhiwa kutoka kipindi kilichotangulia.",
+ "externalChange": {
+ "changed": "Faili imebadilishwa kwenye diski.",
+ "deleted": "Faili haipo tena kwenye diski."
+ },
+ "saveFailed": "Kuhifadhi kumeshindwa: {{error}}",
+ "sidebar": {
+ "explorer": "Kichunguzi",
+ "hide": "Ficha utepe wa kando",
+ "hideWithShortcut": "Ficha utepe wa kando ({{shortcut}})",
+ "show": "Onyesha utepe wa kando",
+ "showWithShortcut": "Onyesha utepe wa kando ({{shortcut}})"
+ },
+ "searchInFiles": {
+ "title": "Tafuta katika Faili",
+ "closeSearch": "Funga utafutaji",
+ "closeSearchShortcut": "Funga utafutaji (Esc)",
+ "searchPlaceholder": "Tafuta...",
+ "matchCase": "Linganisha Herufi Kubwa/Ndogo",
+ "matchCaseToggle": "Aa",
+ "noResults": "Hakuna matokeo yaliyopatikana",
+ "resultsSummary": "vilingani {{count}} katika faili {{fileCount}}",
+ "resultsSummary_one": "kilingani {{count}} katika faili {{fileCount}}",
+ "truncated": "(imepunguzwa)",
+ "resultsSummary_few": "vilingani {{count}} katika faili {{fileCount}}",
+ "resultsSummary_many": "vilingani {{count}} katika faili {{fileCount}}",
+ "resultsSummary_other": "vilingani {{count}} katika faili {{fileCount}}"
+ },
+ "fileTree": {
+ "failedToLoadFiles": "Imeshindwa kupakia faili: {{error}}",
+ "loading": "Inapakia faili...",
+ "empty": "Hakuna faili zilizopatikana",
+ "dropForProjectRoot": "Dondosha hapa kwa mzizi wa mradi",
+ "moveToTrash": "Hamisha kwenye Tupio",
+ "moveToTrashConfirm": "Hamisha \"{{name}}\" kwenye Tupio?",
+ "cancel": "Ghairi"
+ },
+ "goToLine": {
+ "title": "Nenda kwenye Mstari",
+ "position": "(sasa: {{current}}, jumla: {{total}})",
+ "placeholder": "Nambari ya mstari, +ofseti, -ofseti, au %",
+ "go": "Nenda"
+ },
+ "searchPanel": {
+ "previousMatch": "Kilingani Kilichotangulia",
+ "nextMatch": "Kilingani Kinachofuata",
+ "close": "Funga",
+ "replacePlaceholder": "Badilisha",
+ "replace": "Badilisha",
+ "replaceNext": "Badilisha Kinachofuata",
+ "all": "Zote",
+ "replaceAll": "Badilisha Zote"
+ },
+ "statusBar": {
+ "position": "Mst {{line}}, Saf {{col}}",
+ "enableWatcher": "Wezesha mfuatiliaji wa faili",
+ "disableWatcher": "Zima mfuatiliaji wa faili",
+ "watch": "fuatilia",
+ "watching": "inafuatilia",
+ "watchExternalChanges": "Fuatilia mabadiliko ya nje",
+ "disableExternalWatcher": "Zima mfuatiliaji wa mabadiliko ya nje",
+ "encodingUtf8": "UTF-8",
+ "spaces": "Nafasi: {{count}}"
+ },
+ "imagePreview": {
+ "loading": "Inapakia hakikisho...",
+ "openFullSize": "Fungua hakikisho la ukubwa kamili",
+ "openSystemViewer": "Fungua katika Kionyeshi cha Mfumo"
+ },
+ "quickOpen": {
+ "title": "Fungua Haraka",
+ "searchPlaceholder": "Tafuta faili kwa jina...",
+ "loading": "Inapakia faili...",
+ "empty": "Hakuna faili zilizopatikana"
+ },
+ "errorBoundary": {
+ "crashed": "Kihariri kimeharibika",
+ "unknownError": "Hitilafu isiyojulikana"
+ },
+ "binaryPlaceholder": {
+ "file": "Faili ya binari ({{size}})"
+ },
+ "unsavedChanges": "Mabadiliko yasiyohifadhiwa",
+ "empty": {
+ "selectFile": "Chagua faili kutoka mti ili kuhariri"
+ },
+ "search": {
+ "toggleReplace": "Geuza Kubadilisha",
+ "placeholder": "Tafuta"
+ },
+ "shortcuts": {
+ "title": "Njia za Mkato za Kibodi",
+ "groups": {
+ "fileOperations": "Operesheni za Faili",
+ "search": "Tafuta",
+ "navigation": "Usogezaji",
+ "editing": "Uhariri",
+ "markdown": "Markdown",
+ "general": "Jumla"
+ },
+ "actions": {
+ "quickOpen": "Fungua Haraka",
+ "save": "Hifadhi",
+ "saveAll": "Hifadhi Zote",
+ "closeTab": "Funga Kichupo",
+ "findInFile": "Tafuta katika Faili",
+ "searchInFiles": "Tafuta katika Faili",
+ "goToLine": "Nenda kwenye Mstari",
+ "nextTab": "Kichupo Kinachofuata",
+ "previousTab": "Kichupo Kilichotangulia",
+ "cycleTabs": "Zungusha Vichupo",
+ "toggleSidebar": "Geuza Utepe wa Kando",
+ "undo": "Tendua",
+ "redo": "Rudia",
+ "selectNextMatch": "Chagua Kilingani Kinachofuata",
+ "toggleComment": "Geuza Maoni",
+ "splitPreview": "Gawanya Hakikisho",
+ "fullPreview": "Hakikisho Kamili",
+ "closeEditor": "Funga Kihariri"
+ }
+ },
+ "toolbar": {
+ "enableWordWrap": "Wezesha kufunga maneno",
+ "disableWordWrap": "Zima kufunga maneno",
+ "closeSplitPreview": "Funga hakikisho lililogawanywa",
+ "closePreview": "Funga hakikisho"
+ }
+ },
+ "launch": {
+ "actions": {
+ "createSchedule": "Unda Ratiba",
+ "creating": "Inaunda...",
+ "goToDashboard": "Nenda kwenye Dashibodi",
+ "launchTeam": "Zindua timu",
+ "launching": "Inazindua...",
+ "relaunchTeam": "Zindua tena timu",
+ "relaunching": "Inazindua tena...",
+ "saveChanges": "Hifadhi Mabadiliko",
+ "saving": "Inahifadhi..."
+ },
+ "billing": {
+ "prefix": "Kuanzia Juni 15, 2026, Anthropic inalipia",
+ "readArticle": "Soma makala ya Anthropic",
+ "suffix": "na matumizi ya Agent SDK kutoka krediti ya kila mwezi ya Agent SDK, kando na vikomo vya Claude Code vya kuingiliana. Krediti hiyo inaweka upya kila mzunguko wa malipo na krediti isiyotumika haibebwi mbele."
+ },
+ "conflict": {
+ "description": "Kuendesha timu mbili katika saraka ile ile ni hatari - zinaweza kugongana zikihariri faili zile zile. Fikiria kutumia saraka tofauti au git worktree kwa kutengana.",
+ "title": "Timu nyingine \"{{team}}\" tayari inaendeshwa kwa saraka hii ya kazi",
+ "workingDirectory": "Saraka ya kazi:"
+ },
+ "description": {
+ "createSchedule": "Ratibu utekelezaji otomatiki wa kazi za Claude",
+ "createScheduleForTeam": "Ratibu mwendo otomatiki kwa timu \"{{team}}\"",
+ "editSchedule": "Inahariri ratiba ya timu \"{{team}}\"",
+ "launchPrefix": "Anzisha timu",
+ "launchSuffix": "kupitia Claude CLI ya ndani.",
+ "relaunchPrefix": "Simamisha mwendo wa sasa kwa",
+ "relaunchSuffix": "na uianzishe tena kupitia Claude CLI ya ndani."
+ },
+ "prepare": {
+ "action": {
+ "launch": "zindua",
+ "relaunch": "zindua tena"
+ },
+ "blocked": "Mazingira ya runtime hayapatikani - {{action}} kumezuiwa",
+ "checkingProviders": "Inakagua watoa huduma waliochaguliwa...",
+ "failed": "Imeshindwa kuandaa watoa huduma waliochaguliwa",
+ "preflight": "Ukaguzi wa awali ili kunasa hitilafu kabla ya {{action}}",
+ "preparingEnvironment": "Inaandaa mazingira...",
+ "ready": "Watoa huduma wote waliochaguliwa wako tayari.",
+ "readyWithNotes": "Watoa huduma wote waliochaguliwa wako tayari, wakiwa na madokezo.",
+ "unsupportedPreload": "Toleo la sasa la preload haliungi mkono team:prepareProvisioning. Anzisha upya programu ya maendeleo.",
+ "selectWorkingDirectory": "Chagua saraka ya kazi ili kuthibitisha mazingira ya uzinduzi.",
+ "someProvidersNeedAttention": "Baadhi ya watoa huduma waliochaguliwa wanahitaji uangalifu."
+ },
+ "prompt": {
+ "label": "Kidokezo",
+ "oneShotPrefix": "Kidokezo hiki kitapitishwa kwa",
+ "oneShotSuffix": "kwa utekelezaji wa mara moja",
+ "saved": "Imehifadhiwa",
+ "schedulePlaceholder": "Maagizo kwa Claude kutekeleza kulingana na ratiba...",
+ "teamLeadOptional": "Kidokezo kwa kiongozi wa timu (hiari)",
+ "teamLeadPlaceholder": "Maagizo kwa kiongozi wa timu..."
+ },
+ "providerChanged": "Mtoa huduma amebadilishwa kutoka {{from}} hadi {{to}}. Kipindi cha awali cha kiongozi hakitaendelezwa, na kiongozi atanza na muktadha mpya ili runtime mpya itumike kwa usahihi.",
+ "relaunchFreshSession": "Kuzindua tena timu kunaanzisha kipindi kipya cha kiongozi. Hali ya timu ya kudumu, ubao wa kazi, na usanidi wa mwanachama vinarejeshwa kwenye kidokezo cha uzinduzi.",
+ "relaunchWarning": {
+ "description": "Kuhifadhi mipangilio hii kutasimamisha mchakato wa sasa wa timu, kuhifadhi orodha iliyosasishwa, na kuzindua timu tena na runtime mpya.",
+ "title": "Kuzindua tena kutaanzisha upya mwendo wa sasa wa timu"
+ },
+ "schedule": {
+ "labelOptional": "Lebo (hiari)",
+ "labelPlaceholder": "k.m., Mapitio ya msimbo ya kila siku, Majaribio ya usiku...",
+ "maxBudgetUsd": "Bajeti ya juu (USD)",
+ "maxTurns": "Zamu za juu",
+ "noLimit": "Hakuna kikomo",
+ "noMatches": "Hakuna timu zinazolingana na utafutaji wako.",
+ "noTeams": "Hakuna timu zinazopatikana. Unda timu kwanza.",
+ "searchTeams": "Tafuta timu...",
+ "selectTeam": "Chagua timu...",
+ "team": "Timu",
+ "title": "Ratiba"
+ },
+ "title": {
+ "createSchedule": "Unda Ratiba",
+ "editSchedule": "Hariri Ratiba",
+ "launch": "Zindua Timu",
+ "relaunch": "Zindua Tena Timu"
+ },
+ "errors": {
+ "loadProjectsFailed": "Imeshindwa kupakia miradi",
+ "saveScheduleFailed": "Imeshindwa kuhifadhi ratiba",
+ "relaunchFailed": "Imeshindwa kuzindua tena timu",
+ "launchFailed": "Imeshindwa kuzindua timu"
+ },
+ "validation": {
+ "openCodeLeadModelRequired": "Kiongozi wa OpenCode anahitaji modeli iliyochaguliwa.",
+ "openCodeTeammateRequired": "Kiongozi wa OpenCode anahitaji angalau mwenzako mmoja wa timu wa OpenCode.",
+ "selectWorkingDirectory": "Chagua saraka ya kazi (cwd)",
+ "fixMemberNames": "Rekebisha majina ya wanachama kabla ya uzinduzi",
+ "memberNamesUnique": "Majina ya wanachama lazima yawe ya kipekee kabla ya uzinduzi"
+ },
+ "optionalSettings": {
+ "relaunchTitle": "Mipangilio ya kuzindua tena",
+ "title": "Mipangilio ya uzinduzi ya hiari",
+ "relaunchDescription": "Pitia orodha na runtime ya kiongozi kabla ya kuanzisha upya timu.",
+ "description": "Weka mtiririko wa uzinduzi ukilenga njia ya mradi na ufungue hii tu unapotaka udhibiti wa ziada."
+ }
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Nakili timu",
+ "createTeam": "Unda Timu",
+ "deleteForever": "Futa kabisa",
+ "deletePermanently": "Futa kwa kudumu",
+ "deleteTeam": "Futa timu",
+ "launching": "Inazindua...",
+ "launchTeam": "Zindua timu",
+ "relaunchTeam": "Zindua tena timu",
+ "restore": "Rejesha",
+ "restoreTeam": "Rejesha timu",
+ "retry": "Jaribu tena",
+ "stopTeam": "Simamisha timu",
+ "stopping": "Inasimamisha..."
+ },
+ "electronOnly": {
+ "description": "Katika hali ya kivinjari, ufikiaji wa saraka za ndani za `~/.claude/teams` haupatikani.",
+ "title": "Timu zinapatikana tu katika hali ya Electron"
+ },
+ "empty": {
+ "description": "Unda timu hapa ili kuanza. Itaonekana kwenye orodha kiotomatiki.",
+ "localOnly": "Uundaji wa timu unapatikana tu katika hali ya Electron ya ndani.",
+ "title": "Hakuna timu zilizopatikana"
+ },
+ "filter": {
+ "clearAll": "Futa zote",
+ "label": "Chuja timu",
+ "projectPriority": "Kipaumbele cha mradi",
+ "status": "Hali"
+ },
+ "loadFailed": "Imeshindwa kupakia timu",
+ "loading": "Inapakia timu...",
+ "localOnly": "Inapatikana tu katika hali ya Electron ya ndani.",
+ "membersCount": "Wanachama: {{count}}",
+ "membersCount_few": "Wanachama: {{count}}",
+ "membersCount_many": "Wanachama: {{count}}",
+ "membersCount_one": "Mwanachama: {{count}}",
+ "membersCount_other": "Wanachama: {{count}}",
+ "noDescription": "Hakuna maelezo",
+ "noMatches": "Hakuna timu zinazolingana na vichujio vya sasa",
+ "partial": {
+ "pending": "Uzinduzi wa mwisho bado unapatanishwa.",
+ "skipped": "Uzinduzi wa mwisho umeruka wenzako wa timu.",
+ "skippedWithCount": "Uzinduzi wa mwisho uliruka mwenzako wa timu {{count}}/{{expected}}.",
+ "skippedWithCount_few": "Uzinduzi wa mwisho uliruka wenzako wa timu {{count}}/{{expected}}.",
+ "skippedWithCount_many": "Uzinduzi wa mwisho uliruka wenzako wa timu {{count}}/{{expected}}.",
+ "skippedWithCount_one": "Uzinduzi wa mwisho uliruka mwenzako wa timu {{count}}/{{expected}}.",
+ "skippedWithCount_other": "Uzinduzi wa mwisho uliruka wenzako wa timu {{count}}/{{expected}}.",
+ "stopped": "Uzinduzi wa mwisho ulisimama kabla ya wenzako wote wa timu kujiunga.",
+ "stoppedWithCount": "Uzinduzi wa mwisho ulisimama kabla ya mwenzako wa timu {{count}}/{{expected}} kujiunga.",
+ "stoppedWithCount_few": "Uzinduzi wa mwisho ulisimama kabla ya wenzako wa timu {{count}}/{{expected}} kujiunga.",
+ "stoppedWithCount_many": "Uzinduzi wa mwisho ulisimama kabla ya wenzako wa timu {{count}}/{{expected}} kujiunga.",
+ "stoppedWithCount_one": "Uzinduzi wa mwisho ulisimama kabla ya mwenzako wa timu {{count}}/{{expected}} kujiunga.",
+ "stoppedWithCount_other": "Uzinduzi wa mwisho ulisimama kabla ya wenzako wa timu {{count}}/{{expected}} kujiunga."
+ },
+ "searchPlaceholder": "Tafuta timu...",
+ "sections": {
+ "otherTeams": "Timu nyingine",
+ "projectTeams": "Timu za {{project}}",
+ "selectedProject": "mradi uliochaguliwa"
+ },
+ "solo": "Peke yake",
+ "status": {
+ "active": "Hai",
+ "deleted": "Imefutwa",
+ "launching": "Inazindua...",
+ "offline": "Nje ya mtandao",
+ "partialFailure": "Uzinduzi umeshindwa katikati",
+ "partialPending": "Bootstrap inasubiri",
+ "partialSkipped": "Uzinduzi umeruka mwanachama",
+ "running": "Inaendeshwa"
+ },
+ "title": "Chagua Timu",
+ "trash": "Tupio ({{count}})",
+ "trash_few": "Tupio ({{count}})",
+ "trash_many": "Tupio ({{count}})",
+ "trash_one": "Tupio ({{count}})",
+ "trash_other": "Tupio ({{count}})",
+ "deleteDraft": {
+ "title": "Futa rasimu",
+ "message": "Futa timu ya rasimu \"{{teamName}}\"? Hii haiwezi kutenduliwa.",
+ "confirmLabel": "Futa",
+ "cancelLabel": "Ghairi"
+ },
+ "moveToTrash": {
+ "title": "Hamisha kwenye tupio",
+ "message": "Hamisha timu \"{{teamName}}\" kwenye tupio? Unaweza kuirejesha baadaye.",
+ "confirmLabel": "Hamisha kwenye tupio",
+ "cancelLabel": "Ghairi"
+ },
+ "deleteForever": {
+ "title": "Futa kwa kudumu",
+ "message": "Futa timu \"{{teamName}}\" kwa kudumu? Data zote zitapotea.",
+ "confirmLabel": "Futa kabisa",
+ "cancelLabel": "Ghairi"
+ }
+ },
+ "messageComposer": {
+ "crossTeam": {
+ "hint": "Kidokezo: Ujumbe wa timu mtambuka huenda kwa kiongozi wa timu lengwa. Ukitaka jibu lirudi kwa kiongozi wa timu yako badala ya kwako, sema hivyo kwa uwazi katika ujumbe."
+ },
+ "attachments": {
+ "attachFiles": "Ambatisha faili (bandika au buruta na dondosha)",
+ "unavailable": "Viambatisho havipatikani",
+ "disabledHint": "Viambatisho vya faili vinaungwa mkono kwa kiongozi wa timu wa mtandaoni na wenzako wa timu wa OpenCode wa mtandaoni. Ondoa viambatisho au ubadilishe mpokeaji.",
+ "restrictions": {
+ "crossTeam": "Viambatisho vya faili haviungwi mkono kwa ujumbe wa timu mtambuka",
+ "teamOffline": "Timu lazima iwe mtandaoni ili kuambatisha faili",
+ "unsupportedRecipient": "Faili zinaweza kutumwa kwa kiongozi wa timu au wenzako wa timu wa OpenCode",
+ "openCodeOffline": "Timu lazima iwe mtandaoni ili kuambatisha faili kwa wenzako wa timu wa OpenCode",
+ "sending": "Subiri ujumbe wa sasa umalize kutumwa kabla ya kuongeza faili",
+ "maximumReached": "Kiwango cha juu cha viambatisho kimefikiwa",
+ "leadOnly": "Faili zinaweza kutumwa kwa kiongozi wa timu pekee"
+ }
+ },
+ "slash": {
+ "restrictions": {
+ "attachments": "Amri za slesh zinahitaji kiongozi wa timu hai na haziwezi kutumwa na viambatisho",
+ "crossTeam": "Amri za slesh zinaweza kuendeshwa tu kwa kiongozi wa timu wa sasa",
+ "notLead": "Amri za slesh zinaweza kutumwa tu kwa kiongozi wa timu",
+ "leadOffline": "Amri za slesh zinahitaji kiongozi wa timu kuwa mtandaoni"
+ }
+ },
+ "status": {
+ "reusedCrossTeamRequest": "Ombi la timu mtambuka la hivi karibuni limetumika tena",
+ "teamOffline": "Timu iko nje ya mtandao"
+ },
+ "revision": {
+ "editing": "Inahariri ujumbe uliotangulia",
+ "cancel": "Ghairi",
+ "tooltip": "Omba wakala kupuuza ujumbe uliotangulia na kuurejesha kwenye kitunzi."
+ },
+ "input": {
+ "charsLeft": "herufi {{count}} zimebaki",
+ "charsLeft_one": "herufi {{count}} imebaki",
+ "charsLeft_other": "herufi {{count}} zimebaki",
+ "teamLaunchingPlaceholder": "Timu inazinduliwa... ujumbe utawekwa kwenye foleni kwa uwasilishaji wa kikasha.",
+ "crossTeamPlaceholder": "Ujumbe wa timu mtambuka kwa {{team}}...",
+ "teamFallback": "timu",
+ "placeholder": "Andika ujumbe... (Enter kutuma, Shift+Enter kwa mstari mpya)",
+ "slashTip": "Kidokezo: Unaweza kutumia \"/\" kuendesha amri yoyote ya Claude.",
+ "charsLeft_few": "herufi {{count}} zimebaki",
+ "charsLeft_many": "herufi {{count}} zimebaki"
+ },
+ "teamSelector": {
+ "thisTeam": "Timu hii",
+ "current": "sasa",
+ "online": "mtandaoni",
+ "offline": "nje ya mtandao",
+ "onlineTitle": "Mtandaoni",
+ "offlineTitle": "Nje ya mtandao"
+ },
+ "recipient": {
+ "select": "Chagua...",
+ "searchPlaceholder": "Tafuta...",
+ "noResults": "Hakuna matokeo"
+ },
+ "actions": {
+ "voiceToText": "Sauti hadi maandishi",
+ "send": "Tuma",
+ "sendingUnavailableLaunching": "Kutuma hakupatikani wakati timu inazinduliwa"
+ }
+ },
+ "claudeLogs": {
+ "filter": {
+ "ariaLabel": "Chuja kumbukumbu",
+ "tooltip": "Chuja kumbukumbu",
+ "sections": {
+ "stream": "Mtiririko",
+ "content": "Maudhui"
+ },
+ "kinds": {
+ "output": "Towe",
+ "thinking": "Kufikiri",
+ "tool": "Miito ya zana"
+ },
+ "actions": {
+ "reset": "Weka upya",
+ "save": "Hifadhi"
+ },
+ "streams": {
+ "stdout": "stdout",
+ "stderr": "stderr"
+ }
+ },
+ "rawLineCount": "mistari ghafi {{formattedCount}}",
+ "rawLineCount_one": "mstari ghafi {{formattedCount}}",
+ "rawLinesCaptured": "{{count}} zimenaswa",
+ "emptyRawLogs": "{{count}}; bado hakuna ni towe la msaidizi/zana.",
+ "noLogsYet": "Bado hakuna kumbukumbu.",
+ "teamNotRunning": "Timu haiendeshwi.",
+ "searchPlaceholder": "Tafuta kumbukumbu...",
+ "clearSearch": "Futa utafutaji",
+ "newCount": "+{{count}} mpya",
+ "loading": "Inapakia...",
+ "showMore": "Onyesha zaidi",
+ "noLogsCaptured": "Hakuna kumbukumbu zilizonaswa.",
+ "noMatchingLogs": "Hakuna kumbukumbu zinazolingana.",
+ "rawLineCount_few": "mistari ghafi {{formattedCount}}",
+ "rawLineCount_many": "mistari ghafi {{formattedCount}}",
+ "rawLineCount_other": "mistari ghafi {{formattedCount}}",
+ "openFullscreen": "Fungua kumbukumbu za skrini nzima",
+ "fullscreen": "Skrini nzima",
+ "viewingFullscreen": "Inatazama katika hali ya skrini nzima",
+ "logsTitle": "Kumbukumbu",
+ "sourceSelect": {
+ "placeholder": "Chagua chanzo cha kumbukumbu...",
+ "searchPlaceholder": "Tafuta vyanzo vya kumbukumbu...",
+ "emptyMessage": "Hakuna vyanzo vya kumbukumbu vilivyopatikana.",
+ "ariaLabel": "Chanzo cha kumbukumbu",
+ "leadLabel": "Kiongozi",
+ "selectSourceEmpty": "Chagua chanzo cha kumbukumbu.",
+ "leadDescription": "Kiongozi wa Timu",
+ "removedLabel": "imeondolewa",
+ "removedDescription": "Imeondolewa"
+ }
+ },
+ "agentGraph": {
+ "popover": {
+ "externalTeam": "Timu ya nje",
+ "process": {
+ "startedBy": "Imeanzishwa na:",
+ "at": "Saa:",
+ "openUrl": "Fungua URL"
+ },
+ "overflow": {
+ "hiddenTasks": "Kazi zilizofichwa",
+ "empty": "Hakuna kazi zilizofichwa zinazopatikana."
+ },
+ "member": {
+ "lead": "Kiongozi",
+ "workingOn": "inafanyia kazi",
+ "recentTools": "Zana za hivi karibuni",
+ "spawn": {
+ "waitingToStart": "inasubiri kuanza",
+ "starting": "inaanza",
+ "failed": "imeshindwa"
+ },
+ "state": {
+ "active": "hai",
+ "idle": "haijatumika",
+ "offline": "nje ya mtandao",
+ "runningTool": "inaendesha zana"
+ },
+ "activeTool": {
+ "running": "Inaendesha zana",
+ "failed": "Zana imeshindwa",
+ "finished": "Zana imemaliza"
+ },
+ "actions": {
+ "message": "Ujumbe",
+ "profile": "Wasifu",
+ "task": "Kazi"
+ }
+ }
+ },
+ "logPreview": {
+ "logs": "Kumbukumbu",
+ "loading": "Inapakia kumbukumbu",
+ "more": "+{{count}} zaidi",
+ "more_one": "+{{count}} zaidi",
+ "more_other": "+{{count}} zaidi",
+ "more_few": "+{{count}} zaidi",
+ "more_many": "+{{count}} zaidi",
+ "unsupportedProvider": "Mtoa huduma asiyeungwa mkono",
+ "openCodeLogsDelayed": "Kumbukumbu za OpenCode zimecheleweshwa",
+ "logsUnavailable": "Kumbukumbu hazipatikani",
+ "noRecentLogs": "Hakuna kumbukumbu za hivi karibuni",
+ "toolError": "Hitilafu ya zana",
+ "toolResult": "Matokeo ya zana",
+ "toolUse": "Matumizi ya zana",
+ "thinking": "Kufikiri",
+ "error": "Hitilafu",
+ "logEvent": "Tukio la kumbukumbu",
+ "noErrorOutput": "Hakuna towe la hitilafu",
+ "noOutput": "Hakuna towe",
+ "noInput": "Hakuna ingizo"
+ },
+ "blockingEdge": {
+ "title": "Utegemezi wa Kuzuia",
+ "blocks": "inazuia",
+ "close": "Funga",
+ "blockingHiddenTasks": "Kazi zilizofichwa za kuzuia",
+ "blockedHiddenTasks": "Kazi zilizofichwa zilizozuiwa",
+ "links_one": "kiungo {{count}}",
+ "links_other": "viungo {{count}}",
+ "hiddenBlockingLinks_one": "kiungo {{count}} kilichofichwa cha kuzuia",
+ "hiddenBlockingLinks_other": "viungo {{count}} vilivyofichwa vya kuzuia",
+ "hiddenTaskStack": "Rundo la kazi zilizofichwa",
+ "hiddenTasks_one": "kazi {{count}} iliyofichwa",
+ "hiddenTasks_other": "kazi {{count}} zilizofichwa",
+ "task": "Kazi",
+ "openBlockerStack": "Fungua rundo la kuzuia",
+ "openBlockedStack": "Fungua rundo lililozuiwa",
+ "openBlockerTask": "Fungua kazi ya kuzuia",
+ "openBlockedTask": "Fungua kazi iliyozuiwa"
+ },
+ "activityHud": {
+ "activity": "Shughuli",
+ "noRecentActivity": "Hakuna shughuli za hivi karibuni",
+ "more": "+{{count}} zaidi",
+ "more_one": "+{{count}} zaidi",
+ "more_other": "+{{count}} zaidi",
+ "more_few": "+{{count}} zaidi",
+ "more_many": "+{{count}} zaidi"
+ },
+ "provisioning": {
+ "launchDetails": "Maelezo ya uzinduzi",
+ "launchDetailsDescription": "Maendeleo ya kina ya uzinduzi wa timu, towe la moja kwa moja na kumbukumbu za CLI."
+ }
+ },
+ "projectPath": {
+ "label": "Mradi",
+ "source": {
+ "claude": "Imepatikana na Claude",
+ "codex": "Imepatikana na Codex",
+ "mixed": "Imepatikana na Claude na Codex"
+ },
+ "deleted": {
+ "title": "Folda ya mradi haipo tena",
+ "label": "Imefutwa"
+ },
+ "mode": {
+ "projectList": "Kutoka orodha ya miradi",
+ "customPath": "Njia maalum"
+ },
+ "loadingProjects": "Inapakia miradi...",
+ "selectProject": "Chagua mradi...",
+ "searchPlaceholder": "Tafuta mradi kwa jina au njia",
+ "empty": "Hakuna kilichopatikana",
+ "selectFromList": "Chagua mradi kutoka orodha",
+ "noProjects": "Hakuna miradi iliyopatikana, badilisha hadi njia maalum.",
+ "customWorkingDirectory": "Saraka ya kazi maalum",
+ "browse": "Vinjari",
+ "createAutomatically": "Iwapo saraka haipo, itaundwa kiotomatiki."
+ },
+ "members": {
+ "badges": {
+ "worktree": "worktree"
+ },
+ "runtimeTelemetry": {
+ "title": "Mzigo wa runtime ya ndani",
+ "description": "Michakato ya mzazi na mtoto pekee. Utabiri wa LLM wa mbali haujumuishwi.",
+ "cpu": "CPU",
+ "memory": "Kumbukumbu",
+ "summedRss": "RSS iliyojumlishwa",
+ "sharedHost": "Kipimo cha seva pangishi ya OpenCode kinachoshirikiwa. Si cha mwanachama huyu pekee.",
+ "processTreeCapped": "Mti wa michakato uliwekwa kikomo kwa sampuli hii.",
+ "rssHint": "RSS inaweza kujumuisha kurasa zinazoshirikiwa, kwa hivyo ni bora kuisoma kama ishara ya mzigo, si kumbukumbu ya kipekee."
+ },
+ "editor": {
+ "title": "Wanachama",
+ "addMember": "Ongeza mwanachama",
+ "editAsJson": "Hariri kama JSON",
+ "runInSeparateWorktrees": "Endesha wenzako wa timu katika worktree tofauti",
+ "agentTeamsMcpOnly": "Agent Teams MCP pekee",
+ "removedCount": "Waliondolewa ({{count}})",
+ "removedModelLockReason": "Wanachama walioondolewa wanahifadhiwa kwa historia ya ufutaji laini. Warejeshe ili kuhariri mipangilio.",
+ "memberNamesUnique": "Majina ya wanachama lazima yawe ya kipekee"
+ },
+ "stats": {
+ "computing": "Inakokotoa takwimu...",
+ "empty": "Hakuna takwimu zinazopatikana",
+ "lines": "Mistari",
+ "linesInfo": "Takriban. Sahihi kwa zana za Edit na Write. Uandishi wa faili wa Bash unakadiriwa kutoka mifumo ya amri (heredoc, echo, sed) na unaweza kuripotiwa pungufu.",
+ "files": "Faili",
+ "toolCalls": "Miito ya Zana",
+ "tokens": "Tokeni",
+ "toolUsage": "Matumizi ya Zana",
+ "filesTouched": "Faili Zilizoguswa ({{count}})",
+ "viewAllChanges": "Tazama Mabadiliko Yote",
+ "showLess": "Onyesha kidogo",
+ "moreFiles": "+{{count}} zaidi",
+ "footer": "vipindi {{count}} · vimekokotolewa {{computedAgo}}",
+ "footer_one": "kipindi {{count}} · kimekokotolewa {{computedAgo}}",
+ "footer_few": "vipindi {{count}} · vimekokotolewa {{computedAgo}}",
+ "footer_many": "vipindi {{count}} · vimekokotolewa {{computedAgo}}",
+ "footer_other": "vipindi {{count}} · vimekokotolewa {{computedAgo}}"
+ },
+ "logs": {
+ "searching": "Inatafuta kumbukumbu...",
+ "empty": "Hakuna kumbukumbu zilizopatikana",
+ "waitingForTaskActivity": "Kazi inaendelea - inasubiri shughuli za kipindi (inaonyesha upya kiotomatiki)...",
+ "noTaskActivity": "Bado hakuna shughuli za kipindi kwa kazi hii",
+ "noMemberActivity": "Mwanachama huyu bado hana shughuli za kipindi zilizorekodiwa",
+ "leadSessionTooltip": "Kumbukumbu kamili za kipindi cha kiongozi wa timu - muhimu kwa muktadha wa uratibu wa kimataifa, si mahususi kwa wakala huyu",
+ "memberSessionTooltip": "Kumbukumbu kamili za kipindi cha kudumu cha mwenzako wa timu - muhimu wakati kazi inaendeshwa katika kipindi cha mwanachama wa msingi badala ya faili ya wakala mdogo",
+ "startedAt": "imeanza {{time}}",
+ "active": "hai",
+ "showDetails": "Onyesha maelezo",
+ "hideDetails": "Ficha maelezo",
+ "loadingDetails": "Inapakia maelezo...",
+ "failedToLoadDetails": "Imeshindwa kupakia maelezo"
+ },
+ "detail": {
+ "relaunchOpenCode": "Zindua tena OpenCode",
+ "restart": "Anzisha upya",
+ "legacyLogsFallback": "Mbadala wa Kumbukumbu za Zamani",
+ "copyDiagnostics": "Nakili utambuzi",
+ "pid": "PID {{pid}}",
+ "removedAt": "Imeondolewa {{date}}",
+ "failedToRestartMember": "Imeshindwa kuanzisha upya mwanachama",
+ "sendMessage": "Tuma Ujumbe",
+ "assignTask": "Kabidhi Kazi",
+ "remove": "Ondoa"
+ },
+ "list": {
+ "loading": "Inapakia wanachama wa timu",
+ "unavailable": "Orodha ya wanachama haipatikani",
+ "unavailableDescription": "Wenzako {{count}} wa timu wanajulikana kutoka metadata ya timu, lakini maelezo ya orodha hayapo.",
+ "unavailableDescription_one": "Mwenzako {{count}} wa timu anajulikana kutoka metadata ya timu, lakini maelezo ya orodha hayapo.",
+ "soloLeadOnly": "Timu ya peke yake - kiongozi pekee",
+ "removedCount": "Waliondolewa ({{count}})",
+ "unavailableDescription_few": "Wenzako {{count}} wa timu wanajulikana kutoka metadata ya timu, lakini maelezo ya orodha hayapo.",
+ "unavailableDescription_many": "Wenzako {{count}} wa timu wanajulikana kutoka metadata ya timu, lakini maelezo ya orodha hayapo.",
+ "unavailableDescription_other": "Wenzako {{count}} wa timu wanajulikana kutoka metadata ya timu, lakini maelezo ya orodha hayapo."
+ },
+ "executionLog": {
+ "empty": "Hakuna cha kuonyesha",
+ "emptyUserMessage": "{{time}} - (tupu)",
+ "agentInstructions": "Maagizo ya wakala",
+ "memberTurn": "Zamu ya {{member}}",
+ "agentTurn": "Zamu ya wakala",
+ "turn": "zamu"
+ },
+ "recentMessages": {
+ "latest": "Ujumbe wa hivi karibuni",
+ "latestForMember": "Ujumbe wa hivi karibuni - {{member}}",
+ "loadMore": "Pakia zaidi",
+ "expand": "Panua",
+ "collapse": "Kunja"
+ },
+ "leadModel": {
+ "defaultModel": "Chaguo-msingi",
+ "providerModelAria": "Mtoa huduma {{provider}}, {{model}}",
+ "leadShort": "kiongozi",
+ "teamLead": "Kiongozi wa Timu",
+ "syncWithTeammates": "Sawazisha modeli na wenzako wa timu",
+ "anthropicTeamWide": "Anthropic ya timu nzima",
+ "runtimeInheritance": "Runtime ya kiongozi inatumika kwa wenzako wa timu isipokuwa wakiweka mtoa huduma au modeli yao wenyewe.",
+ "anthropicContextLimit": "Kikomo cha muktadha cha 200K ni cha timu nzima kwa runtime za Anthropic katika uzinduzi huu, ikiwa ni pamoja na wenzako wa timu wa Anthropic maalum."
+ },
+ "runtimeLogs": {
+ "autoRefresh": "Onyesha upya kiotomatiki",
+ "wrapLines": "Funga mistari",
+ "loadingTail": "Inapakia mkia wa kumbukumbu za mchakato...",
+ "empty": "Bado hakuna faili ya kumbukumbu ya mchakato iliyonaswa kwa mwanachama huyu.",
+ "copy": "Nakili",
+ "fileEmpty": "Faili ya kumbukumbu ya mchakato ni tupu.",
+ "showingLast": "Inaonyesha {{bytes}} za mwisho.",
+ "showing": "Inaonyesha {{bytes}}."
+ },
+ "tasks": {
+ "empty": "Hakuna kazi zilizokabidhiwa kwa mwanachama huyu"
+ },
+ "messages": {
+ "loadOlder": "Pakia ujumbe wa zamani",
+ "filters": {
+ "all": "Zote",
+ "messages": "Ujumbe",
+ "comments": "Maoni"
+ },
+ "empty": {
+ "loading": "Inapakia shughuli...",
+ "noComments": "Hakuna maoni kwa mwanachama huyu",
+ "noLoadedMessages": "Bado hakuna ujumbe uliopakiwa kwa mwanachama huyu",
+ "noMessages": "Hakuna ujumbe na mwanachama huyu",
+ "noLoadedActivity": "Bado hakuna shughuli zilizopakiwa kwa mwanachama huyu",
+ "noActivity": "Hakuna shughuli na mwanachama huyu"
+ }
+ },
+ "actions": {
+ "openProfile": "Fungua wasifu",
+ "editRole": "Hariri jukumu",
+ "sendMessage": "Tuma ujumbe",
+ "assignTask": "Kabidhi kazi"
+ },
+ "roleSelect": {
+ "customRolePlaceholder": "Weka jukumu maalum..."
+ }
+ },
+ "schedule": {
+ "count": "ratiba {{count}}",
+ "count_one": "ratiba {{count}}",
+ "count_other": "ratiba {{count}}",
+ "nextRun": "Inayofuata: {{next}}",
+ "actions": {
+ "runNow": "Endesha sasa",
+ "edit": "Hariri",
+ "pause": "Sitisha",
+ "resume": "Endelea",
+ "delete": "Futa",
+ "addSchedule": "Ongeza Ratiba"
+ },
+ "runHistory": {
+ "loading": "Inapakia historia ya mwendo...",
+ "empty": "Bado hakuna mwendo"
+ },
+ "count_few": "ratiba {{count}}",
+ "count_many": "ratiba {{count}}",
+ "runLog": {
+ "title": "Kumbukumbu ya Mwendo",
+ "exitCode": "kutoka {{code}}",
+ "retryCount": "jaribu tena {{count}}/{{max}}",
+ "stillRunning": "Kazi bado inaendeshwa...",
+ "loadingLogs": "Inapakia kumbukumbu...",
+ "errors": "Hitilafu",
+ "close": "Funga"
+ },
+ "cron": {
+ "expression": "Usemi wa cron",
+ "highFrequencyWarning": "Ratiba ya marudio ya juu (chini ya muda wa dakika 5)",
+ "nextRuns": "Miendo inayofuata:",
+ "timezone": "Saa za eneo",
+ "selectTimezone": "Chagua saa za eneo",
+ "warmUpTime": "Muda wa kupasha joto",
+ "warmUpDescription": "Huandaa watoa huduma waliochaguliwa kabla ya utekelezaji wa ratiba",
+ "errors": {
+ "enterExpression": "Weka usemi wa cron",
+ "invalidExpression": "Usemi wa cron batili"
+ },
+ "presets": {
+ "everyHour": "Kila saa",
+ "everySixHours": "Kila saa 6",
+ "dailyAtNine": "Kila siku saa 9 asubuhi",
+ "weekdaysAtNine": "Siku za kazi saa 9 asubuhi",
+ "mondayAtNine": "Jumatatu saa 9 asubuhi",
+ "everyThirtyMinutes": "Kila dakika 30"
+ },
+ "warmUpOptions": {
+ "none": "Hakuna kupasha joto",
+ "fiveMinutes": "dakika 5",
+ "tenMinutes": "dakika 10",
+ "fifteenMinutes": "dakika 15",
+ "thirtyMinutes": "dakika 30"
+ }
+ },
+ "empty": {
+ "title": "Bado hakuna ratiba",
+ "description": "Unda ratiba ili kuendesha kazi za Claude kiotomatiki kulingana na ratiba ya cron."
+ },
+ "title": "Ratiba",
+ "status": {
+ "active": "Hai",
+ "paused": "Imesitishwa",
+ "disabled": "Imezimwa"
+ },
+ "runStatus": {
+ "pending": "Inasubiri",
+ "warmingUp": "Inapasha joto",
+ "warm": "Imepashwa joto",
+ "running": "Inaendeshwa",
+ "completed": "Imekamilika",
+ "failed": "Imeshindwa",
+ "interrupted": "Imekatizwa",
+ "cancelled": "Imeghairiwa"
+ }
+ },
+ "openCodeContextConfigHint": {
+ "summary": "Modeli za ndani za OpenCode zinaweza kutumia bajeti ya muktadha ya OpenCode badala ya vikomo vya kidokezo pekee.",
+ "description": "Ongeza vikomo vinavyolingana kwenye usanidi wa OpenCode kwa mtoa huduma na modeli inayotumiwa na mwenzako huyu wa timu. Hii husaidia OpenCode kubana na kupogoa kabla modeli za ndani kufurika dirisha lao la muktadha.",
+ "replacePrefix": "Badilisha",
+ "and": "na",
+ "replaceSuffix": "na vitambulisho vya mtoa huduma na modeli kutoka usanidi wako wa OpenCode. Maagizo ya kidokezo kama vile",
+ "promptInstructionsSuffix": "ni dhaifu kwa sababu ombi linakusanywa kabla modeli kuyasoma.",
+ "providerLimits": "Vikomo vya mtoa huduma",
+ "compactionConfig": "Usanidi wa ubanaji"
+ },
+ "sessions": {
+ "noProjectPath": "Hakuna njia ya mradi iliyounganishwa",
+ "provisioningHint": "Vipindi vitaonekana baada ya ugavi wa timu",
+ "projectNotFound": "Mradi haukupatikana",
+ "loading": "Inapakia vipindi...",
+ "empty": "Hakuna vipindi vilivyopatikana",
+ "showAllSessions": "Onyesha kwa vipindi vyote",
+ "lead": "kiongozi",
+ "removeFilter": "Ondoa kichujio",
+ "filterBySession": "Chuja kwa kipindi hiki",
+ "openSession": "Fungua kipindi",
+ "title": "Vipindi"
+ },
+ "provisioning": {
+ "pid": "PID {{pid}}",
+ "cancel": "Ghairi",
+ "moreWarningsHidden": "maonyo {{count}} zaidi yamefichwa",
+ "diagnostics": "Utambuzi",
+ "liveOutput": "Towe la moja kwa moja",
+ "diagnosticsCopied": "Utambuzi umenakiliwa",
+ "copyDiagnostics": "Nakili utambuzi",
+ "copied": "Imenakiliwa",
+ "noOutput": "Bado hakuna towe lililonaswa.",
+ "cliLogs": "Kumbukumbu za CLI",
+ "steps": {
+ "starting": "Inaanza",
+ "configuring": "Usanidi wa timu",
+ "assembling": "Wanachama wanajiunga",
+ "finalizing": "Inakamilisha"
+ },
+ "providerStatus": {
+ "status": {
+ "checking": "inakagua...",
+ "ready": "SAWA",
+ "notes": "SAWA (madokezo)",
+ "failed": "HITILAFU",
+ "pending": "inasubiri"
+ },
+ "detailSummary": {
+ "cliBinaryMissing": "Binari ya CLI haipo",
+ "openCodeRuntimeMissing": "Runtime ya OpenCode haipo",
+ "openCodeWindowsAccessBlocked": "Ufikiaji wa OpenCode wa Windows umezuiwa",
+ "openCodeNoOutput": "Ukaguzi wa runtime ya OpenCode haukurudisha towe",
+ "openCodeMcpUnreachable": "MCP ya programu ya OpenCode haifikiki",
+ "workingDirectoryMissing": "Saraka ya kazi haipo",
+ "cliBinaryCouldNotStart": "Binari ya CLI haikuweza kuanzishwa",
+ "cliPreflightIncomplete": "Ukaguzi wa awali wa CLI haukukamilika",
+ "authenticationRequired": "Uthibitishaji unahitajika",
+ "runtimeProviderNotConfigured": "Mtoa huduma wa runtime hajasanidiwa",
+ "cliPreflightFailed": "Ukaguzi wa awali wa CLI umeshindwa",
+ "selectedModelCompatible": "Modeli iliyochaguliwa inaoana",
+ "selectedModelCompatibilityPending": "Uoanifu wa modeli iliyochaguliwa unasubiri",
+ "selectedModelAvailable": "Modeli iliyochaguliwa inapatikana",
+ "selectedModelVerified": "Modeli iliyochaguliwa imethibitishwa",
+ "selectedModelUnavailable": "Modeli iliyochaguliwa haipatikani",
+ "selectedModelTimedOut": "Uthibitishaji wa modeli iliyochaguliwa muda umeisha",
+ "selectedModelCheckFailed": "Ukaguzi wa modeli iliyochaguliwa umeshindwa",
+ "selectedModelDeferred": "Uthibitishaji wa modeli iliyochaguliwa umeahirishwa",
+ "selectedModelPingNotConfirmed": "Ping ya modeli iliyochaguliwa haijathibitishwa",
+ "readyWithNotes": "Tayari ikiwa na madokezo",
+ "needsAttention": "Inahitaji uangalifu"
+ },
+ "modelChecksSummary": "Ukaguzi wa modeli iliyochaguliwa - {{details}}",
+ "modelParts": {
+ "unavailable": "modeli {{count}} haipatikani",
+ "unavailable_one": "modeli {{count}} haipatikani",
+ "unavailable_other": "modeli {{count}} hazipatikani",
+ "checkFailed": "ukaguzi wa modeli {{count}} umeshindwa",
+ "checkFailed_one": "ukaguzi wa modeli {{count}} umeshindwa",
+ "checkFailed_other": "ukaguzi wa modeli {{count}} umeshindwa",
+ "timedOut": "modeli {{count}} muda umeisha",
+ "timedOut_one": "modeli {{count}} muda umeisha",
+ "timedOut_other": "modeli {{count}} muda umeisha",
+ "deferred": "uthibitishaji {{count}} umeahirishwa",
+ "deferred_one": "uthibitishaji {{count}} umeahirishwa",
+ "deferred_other": "uthibitishaji {{count}} umeahirishwa",
+ "pingNotConfirmed": "ping {{count}} haijathibitishwa",
+ "pingNotConfirmed_one": "ping {{count}} haijathibitishwa",
+ "pingNotConfirmed_other": "ping {{count}} hazijathibitishwa",
+ "compatibilityPending": "{{count}} zinaoana, uthibitishaji wa kina unasubiri",
+ "compatibilityPending_one": "{{count}} inaoana, uthibitishaji wa kina unasubiri",
+ "compatibilityPending_other": "{{count}} zinaoana, uthibitishaji wa kina unasubiri",
+ "compatible": "{{count}} zinaoana",
+ "compatible_one": "{{count}} inaoana",
+ "compatible_other": "{{count}} zinaoana",
+ "checking": "{{count}} zinakaguliwa",
+ "checking_one": "{{count}} inakaguliwa",
+ "checking_other": "{{count}} zinakaguliwa",
+ "available": "{{count}} zinapatikana",
+ "available_one": "{{count}} inapatikana",
+ "available_other": "{{count}} zinapatikana",
+ "verified": "{{count}} zimethibitishwa",
+ "verified_one": "{{count}} imethibitishwa",
+ "verified_other": "{{count}} zimethibitishwa",
+ "unavailable_few": "modeli {{count}} hazipatikani",
+ "unavailable_many": "modeli {{count}} hazipatikani",
+ "checkFailed_few": "ukaguzi wa modeli {{count}} umeshindwa",
+ "checkFailed_many": "ukaguzi wa modeli {{count}} umeshindwa",
+ "timedOut_few": "modeli {{count}} muda umeisha",
+ "timedOut_many": "modeli {{count}} muda umeisha",
+ "deferred_few": "uthibitishaji {{count}} umeahirishwa",
+ "deferred_many": "uthibitishaji {{count}} umeahirishwa",
+ "pingNotConfirmed_few": "ping {{count}} hazijathibitishwa",
+ "pingNotConfirmed_many": "ping {{count}} hazijathibitishwa",
+ "compatibilityPending_few": "{{count}} zinaoana, uthibitishaji wa kina unasubiri",
+ "compatibilityPending_many": "{{count}} zinaoana, uthibitishaji wa kina unasubiri",
+ "compatible_few": "{{count}} zinaoana",
+ "compatible_many": "{{count}} zinaoana",
+ "checking_few": "{{count}} zinakaguliwa",
+ "checking_many": "{{count}} zinakaguliwa",
+ "available_few": "{{count}} zinapatikana",
+ "available_many": "{{count}} zinapatikana",
+ "verified_few": "{{count}} zimethibitishwa",
+ "verified_many": "{{count}} zimethibitishwa"
+ },
+ "openProviderSettings": "Fungua mipangilio ya {{provider}}",
+ "copied": "Imenakiliwa",
+ "copyDiagnostics": "Nakili utambuzi",
+ "deepVerificationPending": "Uthibitishaji wa kina bado unaendeshwa. Modeli za bure za OpenCode zinaweza kuchukua karibu sekunde 20.",
+ "progress": {
+ "checkingSelectedProviders": "Inakagua watoa huduma waliochaguliwa sambamba...",
+ "checkingProvider": "Inakagua mtoa huduma {{provider}}...",
+ "checkingProviders": "Inakagua watoa huduma {{providers}}..."
+ },
+ "failureHints": {
+ "openCodeAccessDenied": "Rekebisha ruhusa za folda au uhamishe mradi kwenye folda inayoandikika na mtumiaji. Kuendesha kama msimamizi ni suluhisho la muda pekee.",
+ "openCodeBridgeNoOutput": "Anzisha upya programu na runtime ya OpenCode, kisha ujaribu tena. Ikijirudia, nakili utambuzi.",
+ "workingDirectoryMissing": "Chagua saraka ya kazi iliyopo, kisha ufungue tena kidirisha hiki.",
+ "authenticationRequired": "Thibitisha mtoa huduma anayehitajika katika Claude CLI, kisha ufungue tena kidirisha hiki.",
+ "runtimeProviderNotConfigured": "Sanidi runtime ya mtoa huduma uliyechagua, kisha ufungue tena kidirisha hiki.",
+ "openCodeRuntimeMissing": "Sakinisha au jaribu tena runtime ya OpenCode kutoka kadi ya hali ya mtoa huduma, kisha ufungue tena kidirisha hiki.",
+ "openCodeAppMcpUnreachable": "Jaribu tena uzinduzi ili kuonyesha upya daraja la MCP la programu ya OpenCode. Ikijirudia, anzisha upya programu na runtime ya OpenCode.",
+ "cliBinaryMissing": "Hakikisha binari ya Claude CLI ya ndani ipo na inaweza kuanzishwa, kisha ufungue tena kidirisha hiki.",
+ "default": "Suluhisha tatizo hapo juu, kisha ufungue tena kidirisha hiki.",
+ "openCodeNodeModulesSymlinkPermission": "Endesha Agent Teams AI kama Msimamizi, kisha ujaribu tena uzinduzi."
+ }
+ },
+ "presentation": {
+ "awaitingPermission": "mwenzako {{count}} wa timu anasubiri idhini",
+ "nameListWithMore": "{{names}}, +{{count}} zaidi",
+ "waitingForOpenCode": "Inasubiri OpenCode: {{names}}",
+ "bootstrapStalled": "Bootstrap imekwama: {{names}}",
+ "bootstrapStalledWithOpenCodeWait": "{{stalled}}; Inasubiri OpenCode: {{names}}",
+ "namedPendingDiagnostic": "{{label}}: {{names}}",
+ "countPendingDiagnostic": "{{count}} {{label}}",
+ "pendingLabels": {
+ "bootstrapStalled": "Bootstrap imekwama",
+ "shellOnly": "Shell-pekee",
+ "waitingForBootstrap": "Inasubiri bootstrap",
+ "bootstrapUnconfirmed": "Bootstrap haijathibitishwa",
+ "awaitingPermission": "Inasubiri idhini",
+ "waitingForRuntime": "Inasubiri runtime",
+ "shellOnlyLower": "shell-pekee",
+ "waitingForBootstrapLower": "inasubiri bootstrap",
+ "bootstrapUnconfirmedLower": "bootstrap haijathibitishwa",
+ "awaitingPermissionLower": "inasubiri idhini",
+ "waitingForRuntimeLower": "inasubiri runtime"
+ },
+ "failed": {
+ "memberFailedToStart": "{{name}} ameshindwa kuanza",
+ "teammatesFailedToStart": "wenzako {{count}} wa timu wameshindwa kuanza",
+ "teammatesFailedRatio": "wenzako {{count}}/{{total}} wa timu wameshindwa kuanza"
+ },
+ "skipped": {
+ "memberSkipped": "{{name}} ameruka kwa uzinduzi huu",
+ "memberSkippedWithReason": "{{name}} ameruka kwa uzinduzi huu - {{reason}}",
+ "memberSkippedCompact": "{{name}} ameruka",
+ "teammatesSkipped": "wenzako {{count}} wa timu wameruka",
+ "teammatesSkippedList": "Wenzako wa timu walioruka: {{list}}",
+ "teammatesSkippedRatio": "wenzako {{count}}/{{total}} wa timu wameruka kwa uzinduzi huu"
+ },
+ "joining": {
+ "teammatesStillJoining": "wenzako {{count}} wa timu bado wanajiunga",
+ "teammatesStillJoining_one": "mwenzako {{count}} wa timu bado anajiunga",
+ "teammatesStillJoining_few": "wenzako {{count}} wa timu bado wanajiunga",
+ "teammatesStillJoining_many": "wenzako {{count}} wa timu bado wanajiunga",
+ "teammatesStillJoining_other": "wenzako {{count}} wa timu bado wanajiunga",
+ "teammatesConfirmedRatio": "wenzako {{count}}/{{total}} wa timu wamethibitishwa"
+ },
+ "ready": {
+ "leadOnline": "Kiongozi mtandaoni",
+ "allTeammatesJoined": "Wenzako wote {{count}} wa timu wamejiunga",
+ "teamProvisionedLeadOnline": "Timu imepewa ugavi - kiongozi mtandaoni",
+ "teamProvisionedAllJoined": "Timu imepewa ugavi - wenzako wote {{count}} wa timu wamejiunga",
+ "teamProvisionedStillJoining": "Timu imepewa ugavi - wenzako wa timu bado wanajiunga",
+ "launchFinishedWithErrors": "Uzinduzi umemalizika na hitilafu - wenzako {{count}}/{{total}} wa timu wameshindwa kuanza",
+ "launchContinuedSkipped": "Uzinduzi umeendelea - wenzako {{count}}/{{total}} wa timu wameruka",
+ "teamLaunchedLeadOnline": "Timu imezinduliwa - kiongozi mtandaoni",
+ "teamLaunchedAllJoined": "Timu imezinduliwa - wenzako wote {{count}} wa timu wamejiunga"
+ },
+ "panel": {
+ "launchFailed": "Uzinduzi umeshindwa",
+ "launchDetails": "Maelezo ya uzinduzi",
+ "launchFinishedWithErrors": "Uzinduzi umemalizika na hitilafu",
+ "launchContinuedSkipped": "Uzinduzi umeendelea na wenzako wa timu walioruka",
+ "coreTeamReady": "Timu kuu iko tayari",
+ "finishingLaunch": "Inamaliza uzinduzi",
+ "teamLaunched": "Timu imezinduliwa",
+ "launchingTeam": "Inazindua timu"
+ }
+ }
+ },
+ "liveRuntimeStatus": {
+ "title": "Hali ya runtime ya moja kwa moja",
+ "description": "Mpigo wa moyo na hali ya uzinduzi ya kuonyesha tu. Vidhibiti vya mchakato vinabaki hapa chini.",
+ "source": "chanzo: {{source}}",
+ "lane": "njia ya {{lane}}",
+ "diagnosticOnly": "Utambuzi pekee",
+ "updated": "imesasishwa {{value}}",
+ "states": {
+ "running": "Inaendeshwa",
+ "starting": "Inaanza",
+ "waiting": "Inasubiri",
+ "degraded": "Inahitaji uangalifu",
+ "stopped": "Imesimamishwa",
+ "unknown": "Haijulikani"
+ }
+ },
+ "taskLogs": {
+ "exact": {
+ "title": "Kumbukumbu Kamili za Kazi",
+ "loading": "Inapakia kumbukumbu kamili za kazi...",
+ "description": "Vipande kamili vya nakala vinavyoonyeshwa na vijenzi vile vile vya kumbukumbu za utekelezaji vinavyotumiwa katika Kumbukumbu.",
+ "emptyTitle": "Bado hakuna kumbukumbu kamili za kazi",
+ "emptyDescription": "Vifurushi vya nakala kamili vitaonekana hapa wakati metadata ya nakala iliyounganishwa na kazi kwa uwazi inapatikana.",
+ "summaryOnly": "muhtasari pekee"
+ },
+ "executionSessions": {
+ "title": "Vipindi vya Utekelezaji",
+ "online": "Mtandaoni",
+ "updating": "Inasasisha...",
+ "description": "Uvinjari na hakikisho la nakala lenye kuzingatia kipindi cha zamani."
+ },
+ "stream": {
+ "title": "Mtiririko wa Kumbukumbu za Kazi"
+ }
+ },
+ "kanban": {
+ "taskCard": {
+ "cancelTask": "Ghairi kazi {{taskId}}",
+ "cancel": "Ghairi",
+ "moveBackToTodoConfirm": "Rudisha kazi hii kwa YA KUFANYA na uarifu timu?",
+ "confirm": "Thibitisha",
+ "keep": "Weka",
+ "changesNeedAttention": "Mabadiliko yanahitaji uangalifu",
+ "changes": "Mabadiliko",
+ "deleteTask": "Futa kazi",
+ "taskLogsActive": "Kumbukumbu za kazi hai",
+ "newTaskLogsArriving": "Kumbukumbu mpya za kazi zinafika",
+ "awaitingUser": "Inasubiri mtumiaji",
+ "awaitingLead": "Inasubiri kiongozi",
+ "blockedBy": "Imezuiwa na",
+ "blocks": "Inazuia",
+ "start": "Anza",
+ "complete": "Kamilisha",
+ "approve": "Idhinisha",
+ "requestReview": "Omba mapitio",
+ "manualReview": "Mapitio ya mkono",
+ "requestChanges": "Omba mabadiliko"
+ },
+ "filter": {
+ "title": "Chuja kazi",
+ "session": "Kipindi",
+ "allSessions": "Vipindi vyote",
+ "teammate": "Mwenzako wa timu",
+ "unassigned": "(hawajakabidhiwa)",
+ "column": "Safu",
+ "clearAll": "Futa zote"
+ },
+ "board": {
+ "addTask": "Ongeza kazi",
+ "noTasks": "Hakuna kazi",
+ "showMore": "Onyesha {{count}} zaidi",
+ "hiddenCount": "{{count}} zimefichwa",
+ "trash": "Tupio",
+ "gridView": "Mwonekano wa gridi",
+ "columnsView": "Mwonekano wa safu"
+ },
+ "trash": {
+ "title": "Tupio",
+ "empty": "Hakuna kazi zilizofutwa",
+ "subject": "Mada",
+ "owner": "Mmiliki",
+ "deleted": "Imefutwa",
+ "unassigned": "Hawajakabidhiwa",
+ "restoreTask": "Rejesha kazi",
+ "restore": "Rejesha",
+ "close": "Funga"
+ },
+ "sort": {
+ "title": "Panga kazi",
+ "sortBy": "Panga kwa",
+ "reset": "Weka upya",
+ "options": {
+ "updatedAt": {
+ "label": "Iliyosasishwa mwisho",
+ "description": "Zilizosasishwa hivi karibuni kwanza"
+ },
+ "createdAt": {
+ "label": "Iliyoundwa",
+ "description": "Mpya zaidi kwanza"
+ },
+ "owner": {
+ "label": "Mmiliki",
+ "description": "Kialfabeti kwa aliyekabidhiwa"
+ },
+ "manual": {
+ "label": "Mkono",
+ "description": "Mpangilio wa buruta-na-dondosha"
+ }
+ }
+ },
+ "search": {
+ "clearSearch": "Futa utafutaji",
+ "tasks": "Kazi",
+ "createdAgo": "imeundwa {{time}}",
+ "updatedAgo": "imesasishwa {{time}}",
+ "placeholder": "Tafuta kazi... (#id au maandishi)"
+ },
+ "grid": {
+ "addTask": "Ongeza kazi",
+ "noTasks": "Hakuna kazi"
+ },
+ "title": "Kanban",
+ "columns": {
+ "todo": "YA KUFANYA",
+ "inProgress": "INAENDELEA",
+ "review": "MAPITIO",
+ "done": "IMEKAMILIKA",
+ "approved": "IMEIDHINISHWA"
+ }
+ },
+ "worktreeGitReadiness": {
+ "checking": "Inakagua hali ya hazina ya Git kwa worktree za wenzako wa timu...",
+ "ready": "Worktree za Git ziko tayari.",
+ "readyOnBranch": "Worktree za Git ziko tayari kwenye tawi {{branch}}.",
+ "needsSetup": "Kutengana kwa worktree kunahitaji usanidi wa Git",
+ "initialCommitNotice": "Kitendo cha commit ya awali kinaweka na kufanya commit ya faili zote za sasa kwa ujumbe",
+ "initializeRepository": "Anzisha hazina ya Git",
+ "createInitialCommit": "Unda commit ya awali",
+ "initialCommitMessage": "chore: initial commit"
+ },
+ "toolApproval": {
+ "settings": "Mipangilio",
+ "autoAllowAllTools": "Ruhusu kiotomatiki zana zote",
+ "autoAllowFileEdits": "Ruhusu kiotomatiki uhariri wa faili (Edit, Write, NotebookEdit)",
+ "autoAllowSafeCommands": "Ruhusu kiotomatiki amri salama (git, pnpm, npm, ls...)",
+ "onTimeout": "Wakati muda unaisha:",
+ "after": "baada ya",
+ "secondsShort": "sek",
+ "timeoutActions": {
+ "wait": "Subiri milele",
+ "allow": "Ruhusu",
+ "deny": "Kataa"
+ },
+ "submit": "Wasilisha",
+ "allow": "Ruhusu",
+ "deny": "Kataa",
+ "allowAll": "Ruhusu zote",
+ "pendingCount": "{{count}} zinasubiri",
+ "autoActionIn": "Otomatiki-{{action}} baada ya {{time}}",
+ "diff": {
+ "previewChanges": "Hakiki mabadiliko",
+ "readingFile": "Inasoma faili...",
+ "binaryFile": "Faili ya binari - haiwezi kuhakikiwa",
+ "truncated": "Faili imepunguzwa kwa 2MB - tofauti inaweza kuwa haijakamilika",
+ "newFile": "Faili mpya"
+ }
+ },
+ "memberWorkSync": {
+ "details": {
+ "title": "Usawazishaji wa kazi ya mwanachama",
+ "actionableItems": "Vipengee vinavyoweza kutekelezwa",
+ "fingerprint": "Alama ya kidole",
+ "report": "Ripoti",
+ "none": "hakuna",
+ "shadowWouldNudge": "Kivuli kingedokeza",
+ "yes": "ndiyo",
+ "no": "hapana",
+ "moreActionableItems": "kipengee {{count}} zaidi kinachoweza kutekelezwa",
+ "diagnostics": "Utambuzi: {{diagnostics}}"
+ },
+ "title": "Usawazishaji wa kazi ya mwanachama",
+ "loadingDiagnostics": "Inapakia utambuzi wa usawazishaji wa kazi ya mwanachama.",
+ "diagnosticsUnavailable": "Utambuzi wa usawazishaji wa kazi ya mwanachama haupatikani."
+ },
+ "advancedCli": {
+ "title": "Kina",
+ "useWorktree": "Tumia worktree",
+ "recent": "Hivi karibuni",
+ "commandPreview": "Hakikisho la amri",
+ "customArguments": "Hoja maalum",
+ "validate": "Thibitisha",
+ "validation": {
+ "allFlagsValid": "Bendera zote halali",
+ "unknownFlags": "Zisizojulikana: {{flags}}",
+ "protectedFlags": "Zilizolindwa: {{flags}}",
+ "failed": "Uthibitishaji umeshindwa"
+ },
+ "placeholders": {
+ "worktreeName": "worktree-name"
+ }
+ },
+ "processes": {
+ "ago": "{{time}} iliyopita",
+ "stoppedAgo": "imesimamishwa {{time}} iliyopita",
+ "running": "Inaendeshwa",
+ "stopped": "Imesimamishwa",
+ "stopProcess": "Simamisha mchakato (SIGTERM)",
+ "kill": "Ua",
+ "openInBrowser": "Fungua katika kivinjari",
+ "open": "Fungua",
+ "pid": "PID{{pid}}",
+ "title": "Michakato ya CLI"
+ },
+ "taskActivity": {
+ "loadingDetails": "Inapakia maelezo ya shughuli...",
+ "contextUnavailable": "Muktadha wa kina wa nakala haupatikani tena kwa shughuli hii.",
+ "loading": "Inapakia shughuli za kazi...",
+ "lowSignalOnly": "Bado hakuna shughuli muhimu za kazi zilizopatikana. Maelezo ya kiwango cha chini ya utekelezaji yanapatikana hapa chini katika Mtiririko wa Kumbukumbu za Kazi.",
+ "empty": "Bado hakuna shughuli za kazi za wazi zilizopatikana katika nakala zinazopatikana. Kumbukumbu za kipindi za zamani au za kiheuristiki zinaweza bado kupatikana hapa chini katika Vipindi vya Utekelezaji.",
+ "title": "Shughuli za Kazi",
+ "description": "Shughuli muhimu za wazi za runtime zilizounganishwa na kazi hii kutoka metadata ya nakala."
+ },
+ "sendMessage": {
+ "title": "Tuma Ujumbe",
+ "description": "Tuma ujumbe wa moja kwa moja kwa mwanachama wa timu.",
+ "recipientLabel": "Mpokeaji",
+ "selectMemberPlaceholder": "Chagua mwanachama...",
+ "messageLabel": "Ujumbe",
+ "placeholder": "Andika ujumbe wako... (Enter kutuma)",
+ "send": "Tuma",
+ "sending": "Inatuma...",
+ "charsLeft": "herufi {{count}} zimebaki",
+ "saved": "Imehifadhiwa",
+ "attachments": {
+ "teamOnlineRequired": "Timu lazima iwe mtandaoni ili kuambatisha faili",
+ "recipientUnsupported": "Faili zinaweza kutumwa kwa kiongozi wa timu au wenzako wa timu wa OpenCode",
+ "openCodeOnlineRequired": "Timu lazima iwe mtandaoni ili kuambatisha faili kwa wenzako wa timu wa OpenCode",
+ "disabledHint": "Viambatisho vya faili vinaungwa mkono kwa kiongozi wa timu wa mtandaoni na wenzako wa timu wa OpenCode wa mtandaoni. Ondoa viambatisho au ubadilishe mpokeaji.",
+ "attachFiles": "Ambatisha faili (bandika au buruta na dondosha)",
+ "unavailable": "Viambatisho havipatikani"
+ },
+ "quote": {
+ "remove": "Ondoa nukuu",
+ "replyingTo": "Inajibu"
+ }
+ },
+ "taskComments": {
+ "cancelReply": "Ghairi jibu",
+ "replyingTo": "Inajibu",
+ "placeholder": "Ongeza maoni... (Enter kutuma)",
+ "attachFile": "Ambatisha faili (au bandika)",
+ "voiceToText": "Sauti hadi maandishi",
+ "comment": "Maoni",
+ "charsLeft": "herufi {{count}} zimebaki",
+ "saved": "Imehifadhiwa",
+ "awaitingReplyFrom": "Inasubiri jibu kutoka",
+ "or": "au"
+ },
+ "taskAttachments": {
+ "dropImageHere": "Dondosha picha hapa",
+ "attachImage": "Ambatisha picha",
+ "pasteOrDragDrop": "au bandika / buruta-dondosha",
+ "fromOriginalMessage": "Kutoka ujumbe wa awali",
+ "dropFilesHere": "Dondosha faili hapa",
+ "loading": "Inapakia viambatisho..."
+ },
+ "permissions": {
+ "autoApproveAllTools": "Idhinisha kiotomatiki zana zote",
+ "autonomousModeDescription": "Hali ya kujitegemea: zana za timu zinatekelezwa bila uthibitisho. Kuwa makini na msimbo usioaminika.",
+ "manualModeDescription": "Hali ya mkono: utaidhinisha au kukataa kila wito wa zana kwa wakati halisi."
+ },
+ "memberLogStream": {
+ "tabs": {
+ "execution": "Utekelezaji",
+ "process": "Mchakato"
+ },
+ "filters": {
+ "all": "Zote"
+ },
+ "logs": {
+ "title": "Kumbukumbu",
+ "loading": "Inapakia mtiririko wa kumbukumbu za mwanachama...",
+ "emptyTitle": "Bado hakuna vipengee vya mtiririko wa kumbukumbu vilivyopatikana kwa mwanachama huyu.",
+ "emptyDescription": "Kumbukumbu za nakala au runtime zenye kuzingatia mwanachama zitaonekana hapa zinapopatikana."
+ }
+ },
+ "reviewDialog": {
+ "placeholder": "Eleza kinachohitaji kubadilika... (Enter kuwasilisha)",
+ "submit": "Wasilisha",
+ "charsLeft": "herufi {{count}} zimebaki",
+ "saved": "Imehifadhiwa",
+ "title": "Omba Mabadiliko"
+ },
+ "dialogs": {
+ "actions": {
+ "openDashboard": "Fungua Dashibodi",
+ "openTeam": "Fungua timu",
+ "cancel": "Ghairi"
+ },
+ "membersJson": {
+ "hide": "Ficha JSON"
+ },
+ "optional": {
+ "badge": "Hiari"
+ }
+ },
+ "runningTeams": {
+ "title": "Timu Zinazoendeshwa",
+ "status": {
+ "active": "Hai",
+ "provisioning": "Inazindua",
+ "idle": "Inaendeshwa"
+ },
+ "noProject": "Hakuna mradi"
+ },
+ "layout": {
+ "maxPanesReached": "Kiwango cha juu cha vidirisha {{count}} kimefikiwa"
+ },
+ "codexReconnect": {
+ "description": "Kipindi chako cha Codex kinaonekana kimepitwa na wakati. Unganisha tena ili kuendelea.",
+ "useCode": "Tumia msimbo",
+ "generating": "Inatengeneza...",
+ "openLogin": "Fungua kuingia",
+ "generateLink": "Tengeneza kiungo"
+ },
+ "effortLevel": {
+ "label": "Kiwango cha juhudi (hiari)",
+ "maxDescription": "Max inampa modeli muda mwingi zaidi wa kufikiri kwa kazi ngumu."
+ },
+ "contextLimit": {
+ "limitTo200k": "Punguza muktadha hadi tokeni 200K",
+ "always200k": "(daima 200K kwa modeli hii)",
+ "tooltipContent": "Huweka uzinduzi ndani ya dirisha la muktadha la tokeni 200K linapoungwa mkono.",
+ "tooltipTitle": "Kikomo cha muktadha"
+ },
+ "roleSelect": {
+ "noRole": "Hakuna jukumu",
+ "customRole": "Jukumu maalum...",
+ "searchPlaceholder": "Tafuta majukumu...",
+ "empty": "Hakuna majukumu yaliyopatikana.",
+ "reservedRole": "Jukumu hili limehifadhiwa",
+ "emptyCustomRole": "Jukumu haliwezi kuwa tupu"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ta/common.json b/src/features/localization/renderer/locales/ta/common.json
new file mode 100644
index 00000000..f45f8a10
--- /dev/null
+++ b/src/features/localization/renderer/locales/ta/common.json
@@ -0,0 +1,927 @@
+{
+ "actions": {
+ "cancel": "ரத்துசெய்",
+ "close": "மூடு",
+ "copied": "நகலெடுக்கப்பட்டது",
+ "copyUrl": "URL ஐ நகலெடு",
+ "open": "திற",
+ "reveal": "காட்டு",
+ "retry": "மீண்டும் முயற்சி",
+ "save": "சேமி",
+ "showLess": "குறைவாகக் காட்டு",
+ "showMore": "மேலும் காட்டு",
+ "refresh": "புதுப்பி",
+ "reset": "மீட்டமை",
+ "copyToClipboard": "clipboard க்கு நகலெடு",
+ "moreActions": "மேலும் நடவடிக்கைகள்",
+ "closeDialog": "உரையாடலை மூடு",
+ "goToDashboard": "Dashboard க்குச் செல்",
+ "or": "அல்லது",
+ "hide": "மறை",
+ "resetSelection": "தேர்வை மீட்டமை"
+ },
+ "code": {
+ "line": "வரி {{line}}",
+ "lines": "வரிகள் {{from}}-{{to}}",
+ "moreLines": "({{count}} மேலும் வரிகள்...)",
+ "moreLines_few": "({{count}} மேலும் வரிகள்...)",
+ "moreLines_many": "({{count}} மேலும் வரிகள்...)",
+ "moreLines_one": "({{count}} மேலும் வரி...)",
+ "moreLines_other": "({{count}} மேலும் வரிகள்...)",
+ "code": "Code",
+ "preview": "முன்னோட்டம்",
+ "markdownPreview": "Markdown முன்னோட்டம்",
+ "linesParenthesized": "(வரிகள் {{from}}-{{to}})",
+ "mermaidSyntaxError": "Mermaid தொடரியல் பிழை"
+ },
+ "contextBadge": {
+ "badge": "Context",
+ "breakdown": {
+ "text": "Text",
+ "thinking": "Thinking"
+ },
+ "detailsAria": "Context injection விவரங்கள்",
+ "sectionSummary": "{{title}} ({{count}}) ~{{tokens}} tokens",
+ "sections": {
+ "claudeMdFiles": "CLAUDE.md கோப்புகள்",
+ "mentionedFiles": "குறிப்பிடப்பட்ட கோப்புகள்",
+ "taskCoordination": "Task ஒருங்கிணைப்பு",
+ "thinkingText": "Thinking + Text",
+ "toolOutputs": "Tool வெளியீடுகள்",
+ "userMessages": "பயனர் செய்திகள்"
+ },
+ "title": "இந்த turn இல் சேர்க்கப்பட்ட புதிய Context",
+ "tokenCount": "~{{tokens}} tokens",
+ "totalNewTokens": "மொத்த புதிய tokens",
+ "turn": "Turn {{turn}}",
+ "sectionSummary_few": "{{title}} ({{count}}) ~{{tokens}} tokens",
+ "sectionSummary_many": "{{title}} ({{count}}) ~{{tokens}} tokens",
+ "sectionSummary_one": "{{title}} ({{count}}) ~{{tokens}} tokens",
+ "sectionSummary_other": "{{title}} ({{count}}) ~{{tokens}} tokens"
+ },
+ "locales": {
+ "emptyMessage": "மொழி எதுவும் கிடைக்கவில்லை.",
+ "names": {
+ "ar": "அரபு",
+ "bn": "வங்காளம்",
+ "de": "ஜெர்மன்",
+ "en": "ஆங்கிலம்",
+ "es": "ஸ்பானிஷ்",
+ "fa": "பாரசீகம்",
+ "fil": "பிலிப்பினோ",
+ "fr": "பிரெஞ்சு",
+ "hi": "இந்தி",
+ "id": "இந்தோனேசியன்",
+ "it": "இத்தாலியன்",
+ "ja": "ஜப்பானிய",
+ "ko": "கொரியன்",
+ "mr": "மராத்தி",
+ "ms": "மலாய்",
+ "nl": "டச்சு",
+ "pl": "போலிஷ்",
+ "pt": "போர்த்துகீசியம்",
+ "ro": "ருமேனியன்",
+ "ru": "ரஷ்யன்",
+ "sw": "சுவாஹிலி",
+ "system": "கணினி",
+ "ta": "தமிழ்",
+ "te": "தெலுங்கு",
+ "th": "தாய்",
+ "tr": "துருக்கி",
+ "uk": "உக்ரேனியன்",
+ "ur": "உருது",
+ "vi": "வியட்நாமீஸ்",
+ "zh": "சீனம்"
+ },
+ "searchPlaceholder": "மொழியைத் தேடு...",
+ "selectPlaceholder": "பயன்பாட்டு மொழியைத் தேர்ந்தெடு...",
+ "systemWithResolved": "கணினி - {{locale}}"
+ },
+ "members": {
+ "emptyMessage": "உறுப்பினர்கள் எவரும் கிடைக்கவில்லை.",
+ "searchPlaceholder": "உறுப்பினர்களைத் தேடு...",
+ "unassigned": "ஒதுக்கப்படாதது",
+ "teammateFallback": "teammate"
+ },
+ "providerRuntime": {
+ "codex": {
+ "install": {
+ "checking": "சரிபார்க்கிறது",
+ "downloading": "பதிவிறக்குகிறது",
+ "installCli": "Codex CLI ஐ நிறுவு",
+ "installing": "நிறுவுகிறது",
+ "retryInstall": "நிறுவலை மீண்டும் முயற்சி"
+ }
+ }
+ },
+ "search": {
+ "noMatchingSuggestions": "பொருந்தும் பரிந்துரைகள் இல்லை",
+ "searching": "தேடுகிறது...",
+ "searchingFiles": "கோப்புகளைத் தேடுகிறது...",
+ "findInConversation": "உரையாடலில் கண்டறி...",
+ "resultCount": "{{total}} இல் {{current}}",
+ "resultCountCapped": "{{total}}+ இல் {{current}}",
+ "noResults": "முடிவுகள் இல்லை",
+ "previousResultShortcut": "முந்தைய முடிவு (Shift+Enter)",
+ "nextResultShortcut": "அடுத்த முடிவு (Enter)",
+ "closeShortcut": "மூடு (Esc)",
+ "nothingFound": "எதுவும் கிடைக்கவில்லை",
+ "placeholder": "தேடு..."
+ },
+ "schedules": {
+ "actions": {
+ "addSchedule": "அட்டவணை சேர்",
+ "clearFilters": "வடிப்பான்களை அழி",
+ "createSchedule": "அட்டவணையை உருவாக்கு",
+ "delete": "நீக்கு",
+ "edit": "திருத்து",
+ "pause": "இடைநிறுத்து",
+ "resume": "தொடர்",
+ "runNow": "இப்போது இயக்கு"
+ },
+ "empty": {
+ "description": "cron expressions உடன் Claude task இயக்கத்தை தானியக்கமாக்க எந்தவொரு team இலும் ஒரு அட்டவணையை உருவாக்கவும். அனைத்து teams இன் அட்டவணைகளும் இங்கே தோன்றும்.",
+ "noMatches": "தற்போதைய வடிப்பான்களுக்குப் பொருந்தும் அட்டவணைகள் இல்லை",
+ "title": "அட்டவணையிடப்பட்ட tasks இல்லை"
+ },
+ "filters": {
+ "allTeams": "அனைத்து teams"
+ },
+ "item": {
+ "loadingRunHistory": "இயக்க வரலாற்றை ஏற்றுகிறது...",
+ "nextRun": "அடுத்தது: {{value}}",
+ "noRunsYet": "இன்னும் இயக்கங்கள் இல்லை"
+ },
+ "loading": "அட்டவணைகளை ஏற்றுகிறது...",
+ "searchPlaceholder": "அட்டவணைகளைத் தேடு...",
+ "status": {
+ "active": "செயலில்",
+ "all": "அனைத்தும்",
+ "disabled": "முடக்கப்பட்டது",
+ "paused": "இடைநிறுத்தப்பட்டது"
+ },
+ "title": "அட்டவணைகள்"
+ },
+ "sessions": {
+ "actions": {
+ "hide": "மறை",
+ "pin": "Pin",
+ "unhide": "மறையாக்கம் நீக்கு"
+ },
+ "empty": {
+ "noMatchingSessions": "பொருந்தும் sessions இல்லை",
+ "noMatchingSessionsDescription": "இந்த project இல் இன்னும் பொருந்தும் sessions இல்லை.",
+ "noMatchingSessionsFiltered": "வேறு வினவலை முயற்சிக்கவும் அல்லது வழங்குநர் வடிப்பானை மீட்டமைக்கவும்.",
+ "noSessions": "sessions எதுவும் கிடைக்கவில்லை",
+ "noSessionsDescription": "இந்த project இல் இன்னும் sessions இல்லை",
+ "selectProject": "sessions ஐக் காண ஒரு project ஐத் தேர்ந்தெடு"
+ },
+ "errors": {
+ "loading": "sessions ஐ ஏற்றுவதில் பிழை"
+ },
+ "loadedMatchingMore": "இதுவரை {{count}} பொருந்தும் sessions ஏற்றப்பட்டன - மேலும் ஏற்ற கீழே உருட்டவும்.",
+ "loadingMore": "மேலும் sessions ஐ ஏற்றுகிறது...",
+ "pinned": "Pinned",
+ "scrollToLoadMore": "மேலும் ஏற்ற உருட்டவும்",
+ "search": {
+ "clear": "session தேடலை அழி",
+ "placeholder": "sessions ஐத் தேடு..."
+ },
+ "selection": {
+ "cancel": "தேர்வை ரத்துசெய்",
+ "exitMode": "தேர்வு பயன்முறையிலிருந்து வெளியேறு",
+ "hideSelected": "தேர்ந்தெடுத்த sessions ஐ மறை",
+ "pinSelected": "தேர்ந்தெடுத்த sessions ஐ pin செய்",
+ "selectSessions": "sessions ஐத் தேர்ந்தெடு",
+ "selected": "{{count}} தேர்ந்தெடுக்கப்பட்டது",
+ "unhideSelected": "தேர்ந்தெடுத்த sessions இன் மறையாக்கம் நீக்கு",
+ "selected_few": "{{count}} தேர்ந்தெடுக்கப்பட்டது",
+ "selected_many": "{{count}} தேர்ந்தெடுக்கப்பட்டது",
+ "selected_one": "{{count}} தேர்ந்தெடுக்கப்பட்டது",
+ "selected_other": "{{count}} தேர்ந்தெடுக்கப்பட்டது"
+ },
+ "sort": {
+ "byContext": "Context வாரியாக",
+ "byContextTooltip": "context நுகர்வு வாரியாக வரிசைப்படுத்து",
+ "byRecentTooltip": "சமீபத்தியது வாரியாக வரிசைப்படுத்து",
+ "contextLoadedOnly": "Context வரிசைப்படுத்தல் ஏற்றப்பட்ட sessions ஐ மட்டுமே தரப்படுத்துகிறது."
+ },
+ "title": "Sessions",
+ "visibility": {
+ "hideHidden": "மறைக்கப்பட்ட sessions ஐ மறை",
+ "showHidden": "மறைக்கப்பட்ட sessions ஐக் காட்டு"
+ },
+ "worktree": {
+ "switch": "Worktree ஐ மாற்று"
+ },
+ "loadedMatchingMore_few": "இதுவரை {{count}} பொருந்தும் sessions ஏற்றப்பட்டன - மேலும் ஏற்ற கீழே உருட்டவும்.",
+ "loadedMatchingMore_many": "இதுவரை {{count}} பொருந்தும் sessions ஏற்றப்பட்டன - மேலும் ஏற்ற கீழே உருட்டவும்.",
+ "loadedMatchingMore_one": "இதுவரை {{count}} பொருந்தும் sessions ஏற்றப்பட்டன - மேலும் ஏற்ற கீழே உருட்டவும்.",
+ "loadedMatchingMore_other": "இதுவரை {{count}} பொருந்தும் sessions ஏற்றப்பட்டன - மேலும் ஏற்ற கீழே உருட்டவும்.",
+ "failedToLoad": "session ஐ ஏற்ற முடியவில்லை",
+ "loading": "session ஐ ஏற்றுகிறது...",
+ "filter": {
+ "title": "sessions ஐ வடிகட்டு"
+ },
+ "count": "{{count}} sessions",
+ "count_one": "{{count}} session",
+ "count_other": "{{count}} sessions",
+ "count_few": "{{count}} sessions",
+ "count_many": "{{count}} sessions",
+ "inProgress": "Session முன்னேற்றத்தில் உள்ளது..."
+ },
+ "states": {
+ "loading": "ஏற்றுகிறது...",
+ "offline": "ஆஃப்லைன்",
+ "online": "ஆன்லைன்",
+ "unknown": "தெரியாதது",
+ "error": "பிழை"
+ },
+ "markdown": {
+ "imageFallback": "[படம்: {{label}}]",
+ "largeContentNotice": "உள்ளடக்கம் மிகப் பெரியது ({{count}} எழுத்துகள்). UI ஐ துரிதமாக வைத்திருக்க raw முன்னோட்டத்தைக் காட்டுகிறது.",
+ "largeContentTitle": "UI முடங்குவதைத் தடுக்க பெரிய உள்ளடக்கம் raw ஆகக் காட்டப்படுகிறது",
+ "raw": "Raw",
+ "rawPreview": "Raw முன்னோட்டம்",
+ "renderMarkdown": "Markdown ஐ வழங்கு",
+ "showAll": "அனைத்தையும் காட்டு",
+ "showMore": "மேலும் காட்டு",
+ "showRaw": "Raw ஆகக் காட்டு",
+ "showingChars": "{{shown}} / {{total}} எழுத்துகள் காட்டப்படுகின்றன",
+ "largeContentNotice_few": "உள்ளடக்கம் மிகப் பெரியது ({{count}} எழுத்துகள்). UI ஐ துரிதமாக வைத்திருக்க raw முன்னோட்டத்தைக் காட்டுகிறது.",
+ "largeContentNotice_many": "உள்ளடக்கம் மிகப் பெரியது ({{count}} எழுத்துகள்). UI ஐ துரிதமாக வைத்திருக்க raw முன்னோட்டத்தைக் காட்டுகிறது.",
+ "largeContentNotice_one": "உள்ளடக்கம் மிகப் பெரியது ({{count}} எழுத்துகள்). UI ஐ துரிதமாக வைத்திருக்க raw முன்னோட்டத்தைக் காட்டுகிறது.",
+ "largeContentNotice_other": "உள்ளடக்கம் மிகப் பெரியது ({{count}} எழுத்துகள்). UI ஐ துரிதமாக வைத்திருக்க raw முன்னோட்டத்தைக் காட்டுகிறது."
+ },
+ "terminal": {
+ "checkOutputForDetails": "விவரங்களுக்கு மேலே உள்ள terminal வெளியீட்டைச் சரிபார்க்கவும்",
+ "closingInSeconds": "{{count}}s இல் மூடப்படுகிறது...",
+ "closingInSeconds_few": "{{count}}s இல் மூடப்படுகிறது...",
+ "closingInSeconds_many": "{{count}}s இல் மூடப்படுகிறது...",
+ "closingInSeconds_one": "{{count}}s இல் மூடப்படுகிறது...",
+ "closingInSeconds_other": "{{count}}s இல் மூடப்படுகிறது...",
+ "completedSuccessfully": "வெற்றிகரமாக முடிந்தது",
+ "exitCode": "(exit code {{code}})",
+ "processFailed": "Process தோல்வியடைந்தது",
+ "title": "Terminal"
+ },
+ "tokens": {
+ "accumulatedWithoutDuplication": "முழு session முழுவதும் நகல் இல்லாமல் திரட்டப்பட்டது",
+ "cacheRead": "Cache படிப்பு",
+ "cacheWrite": "Cache எழுதுதல்",
+ "costUsd": "செலவு (USD)",
+ "inputTokens": "Input Tokens",
+ "model": "Model",
+ "outputTokens": "Output Tokens",
+ "phase": "Phase {{phase}}/{{total}}",
+ "promptInputShare": "prompt input இல் {{percent}}%",
+ "taskCoordination": "Task ஒருங்கிணைப்பு",
+ "thinkingText": "Thinking + Text",
+ "toolOutputs": "Tool வெளியீடுகள்",
+ "total": "மொத்தம்",
+ "userMessages": "பயனர் செய்திகள்",
+ "visibleContext": "தெரியும் Context",
+ "includesClaudeMd": "உட்பட CLAUDE.md ×{{count}}",
+ "claudeMd": "CLAUDE.md",
+ "mentionedFiles": "@files",
+ "percentValue": "({{percent}}%)",
+ "approxTokens": "~{{tokens}} tokens",
+ "approxTokensParenthesized": "(~{{tokens}})"
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "team ஐ நகலெடு",
+ "createTeam": "Team ஐ உருவாக்கு",
+ "deleteForever": "நிரந்தரமாக நீக்கு",
+ "deletePermanently": "நிரந்தரமாக நீக்கு",
+ "deleteTeam": "team ஐ நீக்கு",
+ "launching": "தொடங்குகிறது...",
+ "launchTeam": "team ஐ தொடங்கு",
+ "relaunchTeam": "team ஐ மீண்டும் தொடங்கு",
+ "restore": "மீட்டெடு",
+ "restoreTeam": "team ஐ மீட்டெடு",
+ "retry": "மீண்டும் முயற்சி",
+ "stopTeam": "team ஐ நிறுத்து",
+ "stopping": "நிறுத்துகிறது..."
+ },
+ "status": {
+ "active": "செயலில்",
+ "deleted": "நீக்கப்பட்டது",
+ "launching": "தொடங்குகிறது...",
+ "offline": "ஆஃப்லைன்",
+ "partialFailure": "தொடக்கம் பாதியில் தோல்வியடைந்தது",
+ "partialPending": "Bootstrap நிலுவையில்",
+ "partialSkipped": "தொடக்கம் உறுப்பினரைத் தவிர்த்தது",
+ "running": "இயங்குகிறது"
+ },
+ "partial": {
+ "pending": "கடைசி தொடக்கம் இன்னும் சரிசெய்கிறது.",
+ "skipped": "கடைசி தொடக்கம் சில teammates ஐத் தவிர்த்தது.",
+ "skippedWithCount": "கடைசி தொடக்கம் {{count}}/{{expected}} teammate ஐத் தவிர்த்தது.",
+ "skippedWithCount_few": "கடைசி தொடக்கம் {{count}}/{{expected}} teammates ஐத் தவிர்த்தது.",
+ "skippedWithCount_many": "கடைசி தொடக்கம் {{count}}/{{expected}} teammates ஐத் தவிர்த்தது.",
+ "skippedWithCount_one": "கடைசி தொடக்கம் {{count}}/{{expected}} teammate ஐத் தவிர்த்தது.",
+ "skippedWithCount_other": "கடைசி தொடக்கம் {{count}}/{{expected}} teammates ஐத் தவிர்த்தது.",
+ "stopped": "அனைத்து teammates சேருவதற்கு முன் கடைசி தொடக்கம் நிறுத்தப்பட்டது.",
+ "stoppedWithCount": "{{count}}/{{expected}} teammate சேருவதற்கு முன் கடைசி தொடக்கம் நிறுத்தப்பட்டது.",
+ "stoppedWithCount_few": "{{count}}/{{expected}} teammates சேருவதற்கு முன் கடைசி தொடக்கம் நிறுத்தப்பட்டது.",
+ "stoppedWithCount_many": "{{count}}/{{expected}} teammates சேருவதற்கு முன் கடைசி தொடக்கம் நிறுத்தப்பட்டது.",
+ "stoppedWithCount_one": "{{count}}/{{expected}} teammate சேருவதற்கு முன் கடைசி தொடக்கம் நிறுத்தப்பட்டது.",
+ "stoppedWithCount_other": "{{count}}/{{expected}} teammates சேருவதற்கு முன் கடைசி தொடக்கம் நிறுத்தப்பட்டது."
+ },
+ "noDescription": "விளக்கம் இல்லை",
+ "solo": "Solo",
+ "membersCount": "உறுப்பினர்கள்: {{count}}",
+ "membersCount_few": "உறுப்பினர்கள்: {{count}}",
+ "membersCount_many": "உறுப்பினர்கள்: {{count}}",
+ "membersCount_one": "உறுப்பினர்: {{count}}",
+ "membersCount_other": "உறுப்பினர்கள்: {{count}}",
+ "all": "அனைத்தும்",
+ "moreCount": "+{{count}} மேலும்",
+ "moreCount_one": "+{{count}} மேலும்",
+ "moreCount_other": "+{{count}} மேலும்",
+ "moreCount_few": "+{{count}} மேலும்",
+ "moreCount_many": "+{{count}} மேலும்"
+ },
+ "runtimeProvider": {
+ "defaults": {
+ "scopeDescriptionAllProjects": "தனது சொந்த OpenCode override இல்லாத ஒவ்வொரு project க்கும் இயல்புநிலை.",
+ "scopeDescriptionProject": "தேர்ந்தெடுத்த project ஐ மட்டும் override செய்யவும். இயங்கும் teams மாற்றப்படாது.",
+ "setAllProjectsDefault": "அனைத்து-projects இயல்புநிலையை அமை",
+ "setProjectDefault": "project இயல்புநிலையை அமை",
+ "validationContext": "சரிபார்ப்பு context",
+ "projectOverrideContext": "project override context",
+ "selectProjectHint": "உள்ளூர் மாதிரிகளைச் சோதிப்பதற்கு அல்லது இயல்புநிலைகளைச் சேமிப்பதற்கு முன் ஒரு project ஐத் தேர்ந்தெடுக்கவும்.",
+ "allProjectsHint": "சோதனைகள் {{project}} ஐப் பயன்படுத்துகின்றன. ஒரு project இல் override இல்லாவிட்டால் இயல்புநிலை பொருந்தும்.",
+ "projectHint": "சேமித்தல் {{project}} ஐ மட்டும் override செய்கிறது."
+ }
+ },
+ "sessionContext": {
+ "header": {
+ "title": "Context",
+ "closePanel": "panel ஐ மூடு",
+ "phase": "Phase:",
+ "current": "தற்போதைய",
+ "view": "காட்சி:",
+ "category": "வகை",
+ "bySize": "அளவு வாரியாக"
+ },
+ "metrics": {
+ "unavailable": "கிடைக்கவில்லை",
+ "contextUsed": "பயன்படுத்தப்பட்ட Context",
+ "promptInput": "Prompt Input",
+ "visibleContext": "தெரியும் Context",
+ "ofContext": "context இல்",
+ "ofPrompt": "prompt இல்",
+ "codexTelemetryUnavailable": "தற்போதைய runtime telemetry இன்னும் Codex prompt-side பயன்பாட்டை வெளிப்படுத்தவில்லை, எனவே Prompt Input மற்றும் Context Used ஒரு போலி பூஜ்ஜியத்தைக் காட்டுவதற்குப் பதிலாக கிடைக்காதவையாக இருக்கின்றன.",
+ "sessionCost": "Session செலவு:",
+ "parentPlus": "parent +",
+ "subagents": "subagents",
+ "details": "விவரங்கள்"
+ },
+ "help": {
+ "contextUsed": {
+ "title": "பயன்படுத்தப்பட்ட Context",
+ "description": "தற்போது model இன் context window ஐ ஆக்கிரமித்துள்ள prompt input மற்றும் output tokens."
+ },
+ "promptInput": {
+ "title": "Prompt Input",
+ "description": "உருவாக்கத்திற்கு முன் model க்கு அனுப்பப்பட்ட tokens. Claude க்கு இதில் `input_tokens + cache_creation_input_tokens + cache_read_input_tokens` அடங்கும்."
+ },
+ "visibleContext": {
+ "title": "தெரியும் Context",
+ "description": "prompt input இன் ஆராயக்கூடிய துணைக்கூறு: கோப்புகள், CLAUDE.md, tool வெளியீடுகள், பயனர் செய்திகள் மற்றும் நீங்கள் நேரடியாக மேம்படுத்தக்கூடிய ஒத்த injections."
+ },
+ "availability": {
+ "title": "கிடைக்கும்தன்மை",
+ "description": "ஒரு வழங்குநர் runtime இன்னும் prompt-side பயன்பாட்டை வெளிப்படுத்தவில்லை எனில், அளவீடுகள் பூஜ்ஜியம் என்று பாசாங்கு செய்வதற்குப் பதிலாக panel அவற்றைக் கிடைக்காதவையாகக் காட்டுகிறது."
+ }
+ },
+ "items": {
+ "turn": "@Turn {{turn}}",
+ "tokensApprox": "~{{tokens}} tokens",
+ "toolsCount": "{{count}} tools",
+ "toolsCount_one": "{{count}} tool",
+ "toolsCount_other": "{{count}} tools",
+ "toolsCount_few": "{{count}} tools",
+ "toolsCount_many": "{{count}} tools",
+ "itemsCount": "{{count}} உருப்படிகள்",
+ "itemsCount_one": "{{count}} உருப்படி",
+ "itemsCount_other": "{{count}} உருப்படிகள்",
+ "itemsCount_few": "{{count}} உருப்படிகள்",
+ "itemsCount_many": "{{count}} உருப்படிகள்",
+ "missing": "காணவில்லை",
+ "thinking": "Thinking",
+ "text": "Text"
+ },
+ "empty": "இந்த session இல் context injections எதுவும் கண்டறியப்படவில்லை",
+ "view": {
+ "grouped": "தொகுக்கப்பட்டது",
+ "flat": "தட்டை"
+ },
+ "claudeMdFiles": "CLAUDE.md கோப்புகள்",
+ "mentionedFiles": "குறிப்பிடப்பட்ட கோப்புகள்"
+ },
+ "chat": {
+ "subagent": {
+ "fallbackName": "Subagent",
+ "shutdownConfirmed": "Shutdown உறுதிப்படுத்தப்பட்டது",
+ "summary": {
+ "tools": "{{count}} tools",
+ "tools_one": "{{count}} tool",
+ "tools_other": "{{count}} tools",
+ "tools_few": "{{count}} tools",
+ "tools_many": "{{count}} tools"
+ },
+ "meta": {
+ "type": "வகை",
+ "duration": "கால அளவு",
+ "model": "Model",
+ "id": "ID"
+ },
+ "metrics": {
+ "contextWindow": "Context Window",
+ "contextUsage": "Context பயன்பாடு",
+ "mainContext": "முதன்மை Context",
+ "totalOutput": "மொத்த வெளியீடு",
+ "turns": "({{count}} turns)",
+ "turns_one": "({{count}} turn)",
+ "turns_other": "({{count}} turns)",
+ "subagentContext": "Subagent Context",
+ "phase": "Phase {{phase}}",
+ "turns_few": "({{count}} turns)",
+ "turns_many": "({{count}} turns)"
+ },
+ "trace": {
+ "title": "Execution Trace"
+ }
+ },
+ "user": {
+ "you": "நீங்கள்",
+ "showMore": "மேலும் காட்டு",
+ "showLess": "குறைவாகக் காட்டு",
+ "backgroundTask": "பின்னணி task",
+ "exitCode": "exit {{code}}",
+ "imagesAttached": "{{count}} படங்கள் இணைக்கப்பட்டன",
+ "imagesAttached_one": "{{count}} படம் இணைக்கப்பட்டது",
+ "imagesAttached_few": "{{count}} படங்கள் இணைக்கப்பட்டன",
+ "imagesAttached_many": "{{count}} படங்கள் இணைக்கப்பட்டன",
+ "imagesAttached_other": "{{count}} படங்கள் இணைக்கப்பட்டன"
+ },
+ "compact": {
+ "toggle": "compacted உள்ளடக்கத்தை மாற்று",
+ "contextCompacted": "Context compacted ஆனது",
+ "freedTokens": "({{tokens}} விடுவிக்கப்பட்டது)",
+ "phase": "Phase {{phase}}",
+ "conversationCompacted": "உரையாடல் Compacted ஆனது",
+ "summary": "context ஐ சேமிக்க முந்தைய செய்திகள் சுருக்கப்பட்டன. முழு உரையாடல் வரலாறு session கோப்பில் பாதுகாக்கப்படுகிறது.",
+ "compacted": "Compacted"
+ },
+ "executionTrace": {
+ "empty": "execution உருப்படிகள் இல்லை",
+ "nested": "Nested: {{name}}",
+ "input": "Input"
+ },
+ "items": {
+ "empty": "காட்ட உருப்படிகள் இல்லை"
+ },
+ "tools": {
+ "teammateSpawned": "Teammate spawn செய்யப்பட்டது",
+ "shutdownRequested": "Shutdown கோரப்பட்டது ->",
+ "noResultReceived": "முடிவு எதுவும் பெறப்படவில்லை",
+ "duration": "கால அளவு: {{duration}}",
+ "result": "முடிவு",
+ "write": {
+ "createdFile": "கோப்பு உருவாக்கப்பட்டது",
+ "wroteToFile": "கோப்பிற்கு எழுதப்பட்டது"
+ },
+ "skill": {
+ "instructions": "Skill வழிமுறைகள்",
+ "unknown": "தெரியாத Skill"
+ }
+ },
+ "lastOutput": {
+ "requestInterrupted": "பயனரால் கோரிக்கை இடைநிறுத்தப்பட்டது",
+ "planReadyForApproval": "திட்டம் ஒப்புதலுக்குத் தயார்"
+ },
+ "empty": {
+ "icon": "💬",
+ "title": "உரையாடல் வரலாறு இல்லை",
+ "description": "இந்த session இல் இன்னும் எந்த செய்திகளும் இல்லை."
+ },
+ "context": {
+ "remainingPercent": "({{percent}}% மீதம்)",
+ "count": "Context ({{count}})",
+ "count_one": "Context ({{count}})",
+ "count_other": "Context ({{count}})",
+ "count_few": "Context ({{count}})",
+ "count_many": "Context ({{count}})"
+ },
+ "scrollToBottom": "கீழே உருட்டு",
+ "bottom": "கீழ்",
+ "teammateMessage": {
+ "message": "செய்தி",
+ "resent": "மீண்டும் அனுப்பப்பட்டது",
+ "fallback": "Teammate செய்தி"
+ },
+ "system": {
+ "label": "System"
+ }
+ },
+ "tmuxInstaller": {
+ "summaryTitle": "tmux நிறுவப்படவில்லை",
+ "detectedOs": "கண்டறியப்பட்ட OS: {{os}}",
+ "runtimePath": "Runtime path: {{path}}",
+ "phase": "Phase: {{phase}}",
+ "actions": {
+ "cancel": "ரத்துசெய்",
+ "manualGuide": "கைமுறை வழிகாட்டி",
+ "hideSetupSteps": "அமைப்பு படிகளை மறை",
+ "showSetupSteps": "அமைப்பு படிகளைக் காட்டு ({{count}})",
+ "showSetupSteps_one": "அமைப்பு படியைக் காட்டு ({{count}})",
+ "showSetupSteps_other": "அமைப்பு படிகளைக் காட்டு ({{count}})",
+ "recheck": "மீண்டும் சரிபார்",
+ "showSetupSteps_few": "அமைப்பு படிகளைக் காட்டு ({{count}})",
+ "showSetupSteps_many": "அமைப்பு படிகளைக் காட்டு ({{count}})"
+ },
+ "installerProgress": "நிறுவி முன்னேற்றம்",
+ "input": {
+ "placeholder": "நிறுவிக்கு உள்ளீடு அனுப்பு",
+ "send": "உள்ளீடு அனுப்பு",
+ "passwordNotice": "கடவுச்சொல் உள்ளீடு நேரடியாக நிறுவி terminal க்கு அனுப்பப்படுகிறது மற்றும் log வெளியீட்டில் சேர்க்கப்படவில்லை."
+ },
+ "details": {
+ "show": "விவரங்களைக் காட்டு",
+ "hide": "விவரங்களை மறை"
+ }
+ },
+ "commandPalette": {
+ "noRecentActivity": "சமீபத்திய செயல்பாடு இல்லை",
+ "sessionsCount": "{{count}} sessions",
+ "sessionsCount_one": "{{count}} session",
+ "sessionsCount_other": "{{count}} sessions",
+ "mode": {
+ "searchProjects": "projects ஐத் தேடு",
+ "searchAcrossProjects": "அனைத்து projects இலும் தேடு",
+ "searchInProject": "project இல் தேடு"
+ },
+ "currentProject": "தற்போதைய project",
+ "global": "Global",
+ "placeholders": {
+ "projects": "projects ஐத் தேடு...",
+ "conversations": "உரையாடல்களைத் தேடு..."
+ },
+ "empty": {
+ "noProjectsForQuery": "\"{{query}}\" க்கு projects எதுவும் கிடைக்கவில்லை",
+ "noProjects": "projects எதுவும் கிடைக்கவில்லை",
+ "minChars": "தேட குறைந்தது 2 எழுத்துகளைத் தட்டச்சு செய்யவும்",
+ "noFastResults": "சமீபத்திய sessions இல் \"{{query}}\" க்கு வேகமான முடிவுகள் இல்லை",
+ "noResults": "\"{{query}}\" க்கு முடிவுகள் எதுவும் கிடைக்கவில்லை"
+ },
+ "footer": {
+ "projectsCount": "{{count}} projects",
+ "projectsCount_one": "{{count}} project",
+ "projectsCount_other": "{{count}} projects",
+ "results": "{{count}} {{speed}}முடிவுகள்",
+ "results_one": "{{count}} {{speed}}முடிவு",
+ "results_other": "{{count}} {{speed}}முடிவுகள்",
+ "resultsAcrossProjects": "அனைத்து projects இலும் {{count}} {{speed}}முடிவுகள்",
+ "resultsAcrossProjects_one": "அனைத்து projects இலும் {{count}} {{speed}}முடிவு",
+ "resultsAcrossProjects_other": "அனைத்து projects இலும் {{count}} {{speed}}முடிவுகள்",
+ "fastPrefix": "வேகமான ",
+ "typeToSearch": "தேட தட்டச்சு செய்யவும்",
+ "navigate": "வழிசெலுத்து",
+ "select": "தேர்ந்தெடு",
+ "open": "திற",
+ "global": "global",
+ "close": "மூடு",
+ "results_few": "{{count}} {{speed}}முடிவுகள்",
+ "results_many": "{{count}} {{speed}}முடிவுகள்",
+ "resultsAcrossProjects_few": "அனைத்து projects இலும் {{count}} {{speed}}முடிவுகள்",
+ "resultsAcrossProjects_many": "அனைத்து projects இலும் {{count}} {{speed}}முடிவுகள்",
+ "projectsCount_few": "{{count}} projects",
+ "projectsCount_many": "{{count}} projects",
+ "upDownKey": "↑↓",
+ "escapeKey": "esc"
+ },
+ "sessionsCount_few": "{{count}} sessions",
+ "sessionsCount_many": "{{count}} sessions"
+ },
+ "tasksPanel": {
+ "title": "Tasks",
+ "searchPlaceholder": "tasks ஐத் தேடு...",
+ "pinned": "Pinned",
+ "groupByLabel": "வாரியாக தொகு:",
+ "groupByAria": "வாரியாக தொகு",
+ "groupModes": {
+ "none": "எதுவுமில்லை",
+ "project": "Project",
+ "time": "நேரம்"
+ },
+ "showArchived": "காப்பகப்படுத்தியதைக் காட்டு",
+ "hideArchived": "காப்பகப்படுத்தியதை மறை",
+ "empty": {
+ "noMatchingTasks": "பொருந்தும் tasks இல்லை",
+ "noTasks": "tasks எதுவும் கிடைக்கவில்லை"
+ },
+ "teamLabel": "Team: {{team}}",
+ "showMore": "மேலும் காட்டு",
+ "showLess": "குறைவாகக் காட்டு",
+ "deleteConfirm": {
+ "title": "task ஐ நீக்கு",
+ "message": "task #{{taskId}} ஐ குப்பைக்கு நகர்த்தவா?",
+ "confirmLabel": "நீக்கு",
+ "cancelLabel": "ரத்துசெய்"
+ },
+ "deleteFailed": {
+ "title": "task ஐ நீக்க முடியவில்லை",
+ "fallbackMessage": "எதிர்பாராத பிழை ஏற்பட்டது",
+ "confirmLabel": "சரி"
+ },
+ "sort": {
+ "byTime": "நேரம் வாரியாக",
+ "byUnread": "படிக்காதது வாரியாக",
+ "byProject": "project வாரியாக",
+ "byTeam": "team வாரியாக"
+ }
+ },
+ "toolViewer": {
+ "input": "Input",
+ "replaceAll": "(அனைத்தையும் மாற்று)",
+ "noInputRecorded": "இந்த tool அழைப்புக்கு உள்ளீடு எதுவும் பதிவு செய்யப்படவில்லை.",
+ "agent": {
+ "action": "action",
+ "teammate": "teammate",
+ "team": "team",
+ "runtime": "runtime",
+ "type": "type",
+ "startupInstructionsHidden": "தொடக்க வழிமுறைகள் UI இல் மறைக்கப்பட்டுள்ளன."
+ }
+ },
+ "taskContextMenu": {
+ "unpin": "Unpin",
+ "pin": "Pin",
+ "rename": "மறுபெயரிடு",
+ "markUnread": "படிக்காததாகக் குறி",
+ "unarchive": "காப்பகத்திலிருந்து மீட்டெடு",
+ "archive": "காப்பகப்படுத்து",
+ "deleteTask": "task ஐ நீக்கு"
+ },
+ "updateDialog": {
+ "closeDialog": "உரையாடலை மூடு",
+ "updateAvailable": "புதுப்பிப்பு கிடைக்கிறது",
+ "updateReady": "புதுப்பிப்பு தயார்",
+ "noReleaseNotes": "release notes எதுவும் கிடைக்கவில்லை.",
+ "viewOnGitHub": "GitHub இல் காண்",
+ "later": "பிறகு",
+ "restartNow": "இப்போது மறுதொடக்கம்",
+ "download": "பதிவிறக்கு"
+ },
+ "errorBoundary": {
+ "title": "ஏதோ தவறு நடந்தது",
+ "description": "பயன்பாட்டில் எதிர்பாராத பிழை ஏற்பட்டது. நீங்கள் பக்கத்தை மீண்டும் ஏற்றலாம் அல்லது பிழை நிலையை மீட்டமைக்கலாம்.",
+ "componentStack": "Component Stack",
+ "tryAgain": "மீண்டும் முயற்சி",
+ "copied": "நகலெடுக்கப்பட்டது",
+ "copyErrorDetails": "பிழை விவரங்களை நகலெடு",
+ "reportBugOnGitHub": "GitHub இல் பிழையைப் புகாரளி",
+ "reloadApp": "பயன்பாட்டை மீண்டும் ஏற்று",
+ "diagnosticsNotice": "GitHub பிழை அறிக்கைகள் மற்றும் நகலெடுக்கப்பட்ட diagnostics இல் பிழைச் செய்தி, stack traces, பயன்பாட்டு பதிப்பு, செயலில் உள்ள tab, தேர்ந்தெடுத்த team, task context மற்றும் சூழல் விவரங்கள் அடங்கும்."
+ },
+ "runtimeBackendSelector": {
+ "label": "Runtime backend",
+ "resolved": "Resolved: {{backend}}",
+ "current": "தற்போதைய",
+ "recommended": "பரிந்துரைக்கப்பட்டது",
+ "unavailable": "கிடைக்கவில்லை",
+ "cannotSelectYet": "இந்த backend ஐ இன்னும் தேர்ந்தெடுக்க முடியாது.",
+ "auto": "Auto",
+ "autoCurrently": "Auto (தற்போது: {{backend}})",
+ "audience": {
+ "internal": "உள்ளக"
+ },
+ "states": {
+ "locked": "பூட்டப்பட்டது",
+ "disabled": "முடக்கப்பட்டது",
+ "authRequired": "Auth தேவை",
+ "runtimeMissing": "Runtime காணவில்லை",
+ "degraded": "தரம் குறைந்தது",
+ "unavailable": "கிடைக்கவில்லை"
+ }
+ },
+ "providerModelBadges": {
+ "checking": "சரிபார்க்கிறது",
+ "unavailable": "கிடைக்கவில்லை",
+ "checkFailed": "சரிபார்ப்பு தோல்வியடைந்தது",
+ "free": "இலவசம்",
+ "freeTooltip": "OpenCode metadata மூலம் புகாரளிக்கப்பட்டது. கிடைக்கும்தன்மை மற்றும் வரம்புகள் மாறலாம்."
+ },
+ "taskFilters": {
+ "status": "நிலை",
+ "clearAll": "அனைத்தையும் அழி",
+ "selectAll": "அனைத்தையும் தேர்ந்தெடு",
+ "team": "Team",
+ "allTeams": "அனைத்து teams",
+ "searchTeams": "teams ஐத் தேடு...",
+ "noTeamsFound": "teams எதுவும் கிடைக்கவில்லை",
+ "project": "Project",
+ "allProjects": "அனைத்து Projects",
+ "searchProjects": "projects ஐத் தேடு...",
+ "noProjects": "projects இல்லை",
+ "comments": "கருத்துகள்",
+ "apply": "பயன்படுத்து",
+ "read": {
+ "all": "அனைத்தும்",
+ "unread": "படிக்காதது",
+ "read": "படித்தது"
+ },
+ "statusOptions": {
+ "todo": "TODO",
+ "inProgress": "IN PROGRESS",
+ "needsFix": "NEEDS FIXES",
+ "done": "DONE",
+ "review": "REVIEW",
+ "approved": "APPROVED"
+ }
+ },
+ "sessionItem": {
+ "totalContext": "மொத்த Context: {{tokens}} tokens",
+ "context": "Context: {{tokens}}",
+ "phase": "Phase {{phase}}:",
+ "compactedTo": "({{tokens}} க்கு compacted ஆனது)"
+ },
+ "notifications": {
+ "row": {
+ "team": "team",
+ "subagent": "subagent",
+ "markAsRead": "படித்ததாகக் குறி",
+ "delete": "நீக்கு",
+ "viewInSession": "session இல் காண்"
+ },
+ "title": "அறிவிப்புகள்",
+ "loading": "அறிவிப்புகளை ஏற்றுகிறது...",
+ "actions": {
+ "markFilteredAsRead": "வடிகட்டியதைப் படித்ததாகக் குறி",
+ "markAllAsRead": "அனைத்தையும் படித்ததாகக் குறி",
+ "markFilteredRead": "வடிகட்டியதைப் படித்ததாகக் குறி",
+ "markAllRead": "அனைத்தையும் படித்ததாகக் குறி",
+ "clearFilteredNotifications": "வடிகட்டிய அறிவிப்புகளை அழி",
+ "clearAllNotifications": "அனைத்து அறிவிப்புகளையும் அழி",
+ "clickToConfirm": "உறுதிப்படுத்த கிளிக் செய்",
+ "clearFiltered": "வடிகட்டியதை அழி",
+ "clearAll": "அனைத்தையும் அழி"
+ },
+ "counts": {
+ "unreadInFilter": "வடிப்பானில் {{count}} படிக்காதவை",
+ "unreadInFilter_one": "வடிப்பானில் {{count}} படிக்காதது",
+ "unreadInFilter_few": "வடிப்பானில் {{count}} படிக்காதவை",
+ "unreadInFilter_many": "வடிப்பானில் {{count}} படிக்காதவை",
+ "unreadInFilter_other": "வடிப்பானில் {{count}} படிக்காதவை",
+ "inFilter": "வடிப்பானில் {{count}}",
+ "inFilter_one": "வடிப்பானில் {{count}}",
+ "inFilter_few": "வடிப்பானில் {{count}}",
+ "inFilter_many": "வடிப்பானில் {{count}}",
+ "inFilter_other": "வடிப்பானில் {{count}}",
+ "unread": "{{count}} படிக்காதவை",
+ "unread_one": "{{count}} படிக்காதது",
+ "unread_few": "{{count}} படிக்காதவை",
+ "unread_many": "{{count}} படிக்காதவை",
+ "unread_other": "{{count}} படிக்காதவை",
+ "total": "மொத்தம் {{count}}",
+ "total_one": "மொத்தம் {{count}}",
+ "total_few": "மொத்தம் {{count}}",
+ "total_many": "மொத்தம் {{count}}",
+ "total_other": "மொத்தம் {{count}}"
+ },
+ "filters": {
+ "other": "மற்றவை"
+ },
+ "empty": {
+ "noMatching": "பொருந்தும் அறிவிப்புகள் இல்லை",
+ "noNotifications": "அறிவிப்புகள் இல்லை",
+ "tryDifferentFilter": "வேறு வடிப்பானை முயற்சிக்கவும்",
+ "allCaughtUp": "நீங்கள் அனைத்தையும் பார்த்துவிட்டீர்கள்!"
+ }
+ },
+ "updates": {
+ "restartToUpdate": "புதுப்பிக்க மறுதொடக்கம் செய்",
+ "updateApp": "பயன்பாட்டைப் புதுப்பி",
+ "downloadedRestartTooltip": "புதுப்பிப்பு பதிவிறக்கப்பட்டது, பயன்படுத்த மறுதொடக்கம் செய்",
+ "newVersionAvailable": "புதிய பதிப்பு கிடைக்கிறது",
+ "updatingApp": "பயன்பாட்டைப் புதுப்பிக்கிறது",
+ "updateReady": "புதுப்பிப்பு தயார்",
+ "restartNow": "இப்போது மறுதொடக்கம்"
+ },
+ "layout": {
+ "github": "GitHub",
+ "discord": "Discord",
+ "expandSidebar": "sidebar ஐ விரிவாக்கு",
+ "collapseSidebarShortcut": "sidebar ஐ சுருக்கு ({{shortcut}})",
+ "sidebarView": "Sidebar காட்சி",
+ "resizeSidebar": "sidebar அளவை மாற்று",
+ "closeTab": "tab ஐ மூடு",
+ "openedFromSearch": "தேடலிலிருந்து திறக்கப்பட்டது",
+ "pinnedSession": "Pinned session",
+ "jumpToSection": "பிரிவுக்குச் செல்",
+ "newTab": "புதிய tab",
+ "newTabDashboard": "புதிய tab (Dashboard)",
+ "refreshSession": "session ஐ புதுப்பி",
+ "refreshSessionWithShortcut": "Session ஐ புதுப்பி ({{shortcut}})",
+ "loadingTab": "tab ஐ ஏற்றுகிறது",
+ "menu": {
+ "teams": "Teams",
+ "settings": "அமைப்புகள்",
+ "extensions": "நீட்டிப்புகள்",
+ "search": "தேடு",
+ "schedules": "அட்டவணைகள்",
+ "docs": "Docs",
+ "exportMarkdown": "Markdown ஆக ஏற்றுமதி செய்",
+ "exportJson": "JSON ஆக ஏற்றுமதி செய்",
+ "exportPlainText": "வெற்று உரையாக ஏற்றுமதி செய்",
+ "analyzeSession": "Session ஐ பகுப்பாய்வு செய்"
+ },
+ "tabMenu": {
+ "closeTabs": "{{count}} Tabs ஐ மூடு",
+ "closeTabs_one": "{{count}} Tab ஐ மூடு",
+ "closeTabs_few": "{{count}} Tabs ஐ மூடு",
+ "closeTabs_many": "{{count}} Tabs ஐ மூடு",
+ "closeTabs_other": "{{count}} Tabs ஐ மூடு",
+ "closeTab": "Tab ஐ மூடு",
+ "closeOtherTabs": "மற்ற Tabs ஐ மூடு",
+ "splitRight": "வலதுபுறம் பிரி",
+ "splitLeft": "இடதுபுறம் பிரி",
+ "pinToSidebar": "Sidebar க்கு Pin செய்",
+ "unpinFromSidebar": "Sidebar இலிருந்து Unpin செய்",
+ "hideFromSidebar": "Sidebar இலிருந்து மறை",
+ "unhideFromSidebar": "Sidebar இல் மறையாக்கம் நீக்கு",
+ "closeAllTabs": "அனைத்து Tabs ஐ மூடு"
+ },
+ "sections": {
+ "team": "Team",
+ "sessions": "Sessions",
+ "kanban": "Kanban",
+ "claudeLogs": "Logs",
+ "messages": "செய்திகள்"
+ }
+ },
+ "editorFormatting": {
+ "bold": "தடிமன்",
+ "italic": "சாய்வு",
+ "strike": "குறுக்குக்கோடு",
+ "code": "Code"
+ },
+ "diff": {
+ "changed": "மாற்றப்பட்டது",
+ "noChangesDetected": "மாற்றங்கள் எதுவும் கண்டறியப்படவில்லை"
+ },
+ "codexLogin": {
+ "copyLoginLinkAndCode": "ChatGPT உள்நுழைவு இணைப்பு மற்றும் குறியீட்டை நகலெடு",
+ "copyLoginLink": "ChatGPT உள்நுழைவு இணைப்பை நகலெடு",
+ "copyFailed": "நகலெடுத்தல் தோல்வியடைந்தது",
+ "copyLinkAndCode": "இணைப்பு + குறியீட்டை நகலெடு",
+ "copyLink": "இணைப்பை நகலெடு",
+ "enterCodeOnLoginPage": "இந்தக் குறியீட்டை ChatGPT உள்நுழைவு பக்கத்தில் உள்ளிடவும்"
+ },
+ "window": {
+ "minimize": "சிறிதாக்கு",
+ "maximize": "பெரிதாக்கு",
+ "restore": "மீட்டெடு"
+ },
+ "context": {
+ "local": "உள்ளூர்",
+ "switchingTo": "{{workspace}} க்கு மாறுகிறது",
+ "loadingWorkspace": "workspace ஐ ஏற்றுகிறது",
+ "switchWorkspace": "Workspace ஐ மாற்று"
+ },
+ "repositories": {
+ "noneAvailable": "repositories எதுவும் கிடைக்கவில்லை",
+ "remove": "repository ஐ அகற்று"
+ },
+ "export": {
+ "session": "session ஐ ஏற்றுமதி செய்",
+ "sessionTitle": "Session ஐ ஏற்றுமதி செய்"
+ },
+ "brand": {
+ "claude": "Claude"
+ },
+ "sessionReport": {
+ "noSessionData": "session தரவு எதுவும் கிடைக்கவில்லை",
+ "title": "Session அறிக்கை"
+ },
+ "sessionFilters": {
+ "project": {
+ "selectProject": "Project ஐத் தேர்ந்தெடு"
+ }
+ },
+ "tasks": {
+ "date": {
+ "updatedPrefix": "புதுப்.",
+ "updatedYesterday": "நேற்று புதுப்.",
+ "yesterday": "நேற்று"
+ },
+ "reviewState": {
+ "needsFix": "திருத்தங்கள் தேவை"
+ },
+ "unassigned": "ஒதுக்கப்படாதது"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ta/dashboard.json b/src/features/localization/renderer/locales/ta/dashboard.json
new file mode 100644
index 00000000..731846bb
--- /dev/null
+++ b/src/features/localization/renderer/locales/ta/dashboard.json
@@ -0,0 +1,197 @@
+{
+ "cliStatus": {
+ "actions": {
+ "alreadyLoggedIn": "ஏற்கனவே உள்நுழைந்துள்ளீர்களா?",
+ "becomeSponsor": "ஸ்பான்சராகுங்கள்",
+ "cancel": "ரத்துசெய்",
+ "checkNow": "இப்போது சரிபார்",
+ "checkUpdates": "புதுப்பிப்புகளைச் சரிபார்",
+ "checking": "சரிபார்க்கிறது...",
+ "connect": "இணை",
+ "extensions": "நீட்டிப்புகள்",
+ "login": "உள்நுழைவு",
+ "manage": "நிர்வகி",
+ "manageProviders": "வழங்குநர்களை நிர்வகி",
+ "plan": "திட்டம்",
+ "recheck": "மீண்டும் சரிபார்",
+ "recheckProvider": "{{provider}} ஐ மீண்டும் சரிபார்",
+ "retry": "மீண்டும் முயற்சி",
+ "updateTo": "v{{version}} க்கு புதுப்பி",
+ "useCode": "குறியீட்டைப் பயன்படுத்து"
+ },
+ "atlas": {
+ "alt": "Atlas Cloud",
+ "description": "Atlas Cloud என்பது ஒரு முழு-modal AI inference தளமாகும், இது டெவலப்பர்களுக்கு வீடியோ உருவாக்கம், படம் உருவாக்கம் மற்றும் LLM API களை அணுகுவதற்கு ஒரே AI API ஐ வழங்குகிறது. பல விற்பனையாளர் ஒருங்கிணைப்புகளை நிர்வகிப்பதற்குப் பதிலாக, நீங்கள் ஒருமுறை இணைந்து, அனைத்து modality களிலும் 300+ தேர்ந்தெடுக்கப்பட்ட மாதிரிகளுக்கு ஒருங்கிணைந்த அணுகலைப் பெறுகிறீர்கள். மிகவும் சிக்கனமான API அணுகலுக்கு Atlas Cloud இன் புதிய coding திட்ட விளம்பரத்தைப் பாருங்கள்.",
+ "openCodeProvider": "OpenCode வழங்குநர்",
+ "plan": "Atlas Cloud coding திட்டம்",
+ "sponsor": "ஸ்பான்சர்"
+ },
+ "errors": {
+ "checkStatusFailed": "CLI நிலையைச் சரிபார்க்க முடியவில்லை",
+ "installationFailed": "நிறுவல் தோல்வியடைந்தது",
+ "refreshFailed": "புதுப்பிப்புகளைச் சரிபார்க்க முடியவில்லை. உங்கள் நெட்வொர்க் இணைப்பைச் சரிபார்த்து மீண்டும் முயற்சிக்கவும்.",
+ "runtimeUpdatedRefreshFailed": "Runtime புதுப்பிக்கப்பட்டது, ஆனால் வழங்குநர் நிலையைப் புதுப்பிக்க முடியவில்லை."
+ },
+ "hints": {
+ "backgroundStatus": "{{runtime}} நிலை பின்னணியில் சரிபார்க்கப்படும்.",
+ "codexApiKeyFallback": "{{hint}} நீங்கள் auth பயன்முறையை மாற்றினால் API key fallback கிடைக்கும்.",
+ "codexAutoApiKey": "{{hint}} ChatGPT இணைக்கப்படும் வரை Auto API key ஐத் தொடர்ந்து பயன்படுத்தும்.",
+ "codexFinishLogin": "உலாவியில் ChatGPT உள்நுழைவை முடிக்கவும். கேட்கப்பட்டால் காட்டப்படும் குறியீட்டை உள்ளிடவும்.",
+ "codexNoActiveLogin": "Codex CLI ஒரு செயலில் உள்ள ChatGPT கணக்கைப் பார்த்த பிறகே பயன்பாட்டு வரம்புகள் தோன்றும். இப்போது அது செயலில் உள்ள ChatGPT உள்நுழைவு இல்லை எனப் புகாரளிக்கிறது.",
+ "codexNoActiveManagedSession": "Codex CLI ஒரு செயலில் உள்ள ChatGPT கணக்கைப் பார்த்த பிறகே பயன்பாட்டு வரம்புகள் தோன்றும். உள்ளூர் Codex கணக்கு தரவு உள்ளது, ஆனால் இப்போது செயலில் உள்ள managed session எதுவும் தேர்ந்தெடுக்கப்படவில்லை.",
+ "codexReconnectNeeded": "தற்போது தேர்ந்தெடுக்கப்பட்ட ChatGPT session ஐ Codex புதுப்பித்த பிறகே பயன்பாட்டு வரம்புகள் தோன்றும். இப்போது உள்ளூர் session ஐ மீண்டும் இணைக்க வேண்டும்.",
+ "firstCheckSlow": "முதல் சரிபார்ப்பு 30 வினாடிகள் வரை எடுக்கலாம்",
+ "loginRequiredForTeams": "உலாவல் sessions மற்றும் projects உள்நுழைவு இல்லாமல் வேலை செய்கின்றன. agent teams ஐ இயக்க மட்டுமே உள்நுழைவு தேவை.",
+ "troubleshootTitle": "நீங்கள் உள்நுழைந்துள்ளீர்கள் என்று உறுதியாக இருந்தால், இந்த படிகளை முயற்சிக்கவும்:"
+ },
+ "installer": {
+ "checkingLatest": "சமீபத்திய பதிப்பைச் சரிபார்க்கிறது...",
+ "downloading": "{{runtime}} பதிவிறக்குகிறது...",
+ "installing": "{{runtime}} நிறுவுகிறது...",
+ "success": "{{runtime}} v{{version}} வெற்றிகரமாக நிறுவப்பட்டது",
+ "verifying": "checksum சரிபார்க்கிறது..."
+ },
+ "labels": {
+ "apiKeyRequired": "API key தேவை",
+ "comingSoon": "விரைவில் வரும்",
+ "collapseProviderDetails": "வழங்குநர் விவரங்களைச் சுருக்கு",
+ "expandProviderDetails": "வழங்குநர் விவரங்களை விரிவாக்கு",
+ "generateLink": "இணைப்பை உருவாக்கு",
+ "loadingRateLimits": "வரம்புகள் ஏற்றப்படுகின்றன",
+ "loggedOut": "வழங்குநர் வெளியேறியது",
+ "loginAuthFailed": "அங்கீகாரம் தோல்வியடைந்தது",
+ "loginAuthUpdated": "அங்கீகாரம் புதுப்பிக்கப்பட்டது",
+ "loginComplete": "உள்நுழைவு முடிந்தது",
+ "loginFailed": "உள்நுழைவு தோல்வியடைந்தது",
+ "loginTitle": "உள்நுழைவு",
+ "logoutFailed": "வெளியேறுதல் தோல்வியடைந்தது",
+ "logoutTitle": "வெளியேறு",
+ "notLoggedIn": "உள்நுழையவில்லை",
+ "openLogin": "உள்நுழைவைத் திற",
+ "providerActionRequired": "வழங்குநர் நடவடிக்கை தேவை",
+ "resets": "{{time}} மீட்டமைக்கப்படும்",
+ "runtimeLoginTitle": "{{runtime}} உள்நுழைவு"
+ },
+ "loading": {
+ "aiProviders": "AI வழங்குநர்களைச் சரிபார்க்கிறது...",
+ "claudeCli": "Claude CLI ஐச் சரிபார்க்கிறது..."
+ },
+ "provider": {
+ "authenticated": "அங்கீகரிக்கப்பட்டது",
+ "backend": "Backend: {{backend}}",
+ "checkingAuthentication": "அங்கீகாரத்தைச் சரிபார்க்கிறது...",
+ "checkingProviders": "வழங்குநர்களைச் சரிபார்க்கிறது...",
+ "configuredLocalCount": "{{count}} கட்டமைக்கப்பட்ட உள்ளூர்",
+ "configuredLocalCount_few": "{{count}} கட்டமைக்கப்பட்ட உள்ளூர்",
+ "configuredLocalCount_many": "{{count}} கட்டமைக்கப்பட்ட உள்ளூர்",
+ "configuredLocalCount_one": "{{count}} கட்டமைக்கப்பட்ட உள்ளூர்",
+ "configuredLocalCount_other": "{{count}} கட்டமைக்கப்பட்ட உள்ளூர்",
+ "configuredLocalTitle": "உங்கள் OpenCode கட்டமைப்பிலிருந்து இறக்குமதி செய்யப்பட்ட உள்ளூர் OpenCode routes.",
+ "connectedCount": "வழங்குநர்கள்: {{connected}}/{{denominator}} இணைக்கப்பட்டது",
+ "freeModels": "இலவச மாதிரிகள்",
+ "freeModelsTitle": "உங்கள் அமைப்பில் கிடைக்கும்போது OpenCode ஆனது Big Pickle போன்ற இலவச மாதிரி விருப்பங்களைக் கொண்டுள்ளது. OpenCode வழியாக OpenRouter ஆனதும் இலவச மாதிரிகளை வெளிப்படுத்தலாம், ஆனால் ஒவ்வொரு OpenCode/OpenRouter மாதிரியும் இலவசம் அல்ல. கிடைக்கும்தன்மை மற்றும் வரம்புகள் மாறலாம்.",
+ "loadingModels": "மாதிரிகளை ஏற்றுகிறது...",
+ "modelsUnavailable": "இந்த runtime build க்கு மாதிரிகள் கிடைக்கவில்லை",
+ "runtime": "Runtime: {{runtime}}",
+ "verifiedCount": "{{count}} சரிபார்க்கப்பட்டது",
+ "verifiedCount_few": "{{count}} சரிபார்க்கப்பட்டது",
+ "verifiedCount_many": "{{count}} சரிபார்க்கப்பட்டது",
+ "verifiedCount_one": "{{count}} சரிபார்க்கப்பட்டது",
+ "verifiedCount_other": "{{count}} சரிபார்க்கப்பட்டது",
+ "verifiedTitle": "வெற்றிகரமான execution proof உடன் OpenCode routes."
+ },
+ "runtime": {
+ "configuredHealthCheckFailed": "கட்டமைக்கப்பட்ட {{runtime}} அதன் startup health check இல் தோல்வியடைந்தது.",
+ "configuredNotFound": "கட்டமைக்கப்பட்ட {{runtime}} கண்டறியப்படவில்லை.",
+ "foundButFailed": "{{runtime}} கண்டறியப்பட்டது ஆனால் தொடங்க முடியவில்லை",
+ "healthCheckFailedDescription": "கட்டமைக்கப்பட்ட {{runtime}} ஐ பயன்பாடு கண்டறிந்தது, ஆனால் அதன் startup health check தோல்வியடைந்தது. அதைப் பழுதுபார்க்கவும் அல்லது மீண்டும் நிறுவவும், பிறகு மீண்டும் முயற்சிக்கவும்.",
+ "install": "{{runtime}} ஐ நிறுவு",
+ "installRequiredDescription": "team provisioning மற்றும் session மேலாண்மைக்கு {{runtime}} தேவை. தொடங்க அதை நிறுவவும்.",
+ "isRequired": "{{runtime}} தேவை",
+ "reinstall": "{{runtime}} ஐ மீண்டும் நிறுவு"
+ },
+ "runtimeInstall": {
+ "checking": "சரிபார்க்கிறது",
+ "codexTitle": "Codex CLI ஐ app data இல் நிறுவு",
+ "downloading": "பதிவிறக்குகிறது",
+ "downloadingPercent": "{{percent}}% பதிவிறக்குகிறது",
+ "install": "நிறுவு",
+ "installing": "நிறுவுகிறது",
+ "openCodeTitle": "OpenCode runtime ஐ app data இல் நிறுவு",
+ "retryInstall": "நிறுவலை மீண்டும் முயற்சி"
+ },
+ "troubleshoot": {
+ "again": "மீண்டும்",
+ "authStatusCommand": "உங்கள் கட்டமைக்கப்பட்ட CLI auth status கட்டளை",
+ "checkLoggedIn": "- அது \"Logged in\" எனக் காட்டுகிறதா எனச் சரிபார்க்கவும்",
+ "click": "கிளிக் செய்",
+ "loginCommand": "runtime உள்நுழைவு கட்டளை",
+ "logoutCommand": "runtime வெளியேறுதல் கட்டளை",
+ "openTerminal": "உங்கள் terminal ஐத் திறந்து இயக்கவும்:",
+ "reloginPrefix": "உள்நுழைந்துள்ளதாக அது கூறினாலும் பயன்பாடு அதைப் பார்க்கவில்லை எனில், முயற்சிக்கவும்:",
+ "sameRuntime": "உங்கள் terminal இல் உள்ள CLI பயன்பாடு பயன்படுத்தும் அதே runtime என்பதை உறுதிப்படுத்தவும்",
+ "statusCacheHint": "- சில நேரங்களில் நிலை சில வினாடிகளுக்கு cache செய்யப்படும்",
+ "then": "பிறகு"
+ },
+ "warnings": {
+ "multipleApiKeysMissing": "ஒன்று அல்லது அதற்கு மேற்பட்ட வழங்குநர்கள் API key பயன்முறையில் அமைக்கப்பட்டுள்ளனர், ஆனால் API key எதுவும் கட்டமைக்கப்படவில்லை. keys ஐச் சேர்க்க அல்லது இணைப்பு பயன்முறையை மாற்ற Manage Providers ஐத் திறக்கவும்.",
+ "multipleApiKeysNeedAttention": "ஒன்று அல்லது அதற்கு மேற்பட்ட வழங்குநர்கள் API key பயன்முறையில் அமைக்கப்பட்டுள்ளனர், கவனம் தேவை. சேமிக்கப்பட்ட keys ஐ மதிப்பாய்வு செய்ய அல்லது இணைப்பு பயன்முறையை மாற்ற Manage Providers ஐத் திறக்கவும்.",
+ "notAuthenticated": "{{runtime}} நிறுவப்பட்டுள்ளது ஆனால் நீங்கள் அங்கீகரிக்கப்படவில்லை. team provisioning மற்றும் AI அம்சங்களுக்கு உள்நுழைவு தேவை.",
+ "singleApiKeyMissing": "{{provider}} API key பயன்முறையில் அமைக்கப்பட்டுள்ளது, ஆனால் API key எதுவும் கட்டமைக்கப்படவில்லை. ஒரு key ஐச் சேர்க்க அல்லது இணைப்பு பயன்முறையை மாற்ற Manage Providers ஐத் திறக்கவும்.",
+ "singleApiKeyNeedsAttention": "{{provider}} API key பயன்முறையில் அமைக்கப்பட்டுள்ளது, ஆனால் அது இணைக்கப்படவில்லை. சேமிக்கப்பட்ட key ஐ மதிப்பாய்வு செய்ய அல்லது இணைப்பு பயன்முறையை மாற்ற Manage Providers ஐத் திறக்கவும்."
+ }
+ },
+ "recentProjects": {
+ "selectFolderTitle": "ஒரு project folder ஐத் தேர்ந்தெடு",
+ "selectFolder": "Folder ஐத் தேர்ந்தெடு",
+ "failedToLoad": "projects ஐ ஏற்ற முடியவில்லை",
+ "retry": "மீண்டும் முயற்சி",
+ "noProjects": "எந்த project களும் கிடைக்கவில்லை",
+ "noMatches": "\"{{query}}\" க்கு பொருத்தங்கள் இல்லை",
+ "noRecentProjects": "சமீபத்திய project கள் எதுவும் கிடைக்கவில்லை",
+ "emptyDescription": "சமீபத்திய Claude மற்றும் Codex செயல்பாடு இங்கே தோன்றும்.",
+ "loadMore": "மேலும் ஏற்று",
+ "card": {
+ "deleted": "நீக்கப்பட்டது",
+ "projectFolderMissing": "project folder இனி இல்லை",
+ "taskCounts": {
+ "active": "{{count}} செயலில்",
+ "active_one": "{{count}} செயலில்",
+ "active_other": "{{count}} செயலில்",
+ "active_few": "{{count}} செயலில்",
+ "active_many": "{{count}} செயலில்",
+ "pending": "{{count}} நிலுவையில்",
+ "pending_one": "{{count}} நிலுவையில்",
+ "pending_other": "{{count}} நிலுவையில்",
+ "pending_few": "{{count}} நிலுவையில்",
+ "pending_many": "{{count}} நிலுவையில்",
+ "done": "{{count}} முடிந்தது",
+ "done_one": "{{count}} முடிந்தது",
+ "done_other": "{{count}} முடிந்தது",
+ "done_few": "{{count}} முடிந்தது",
+ "done_many": "{{count}} முடிந்தது"
+ }
+ },
+ "title": "சமீபத்திய Projects",
+ "searchResults": "தேடல் முடிவுகள்",
+ "searchPlaceholder": "projects ஐத் தேடு..."
+ },
+ "actions": {
+ "selectTeam": "Team ஐத் தேர்ந்தெடு",
+ "or": "அல்லது",
+ "clearSearch": "தேடலை அழி"
+ },
+ "windowsAdmin": {
+ "title": "Windows Administrator பயன்முறை பரிந்துரைக்கப்படுகிறது",
+ "description": "Agent Teams AI elevated இல்லாதபோது OpenCode runtime சரிபார்ப்புகள் காலாவதியாகலாம். OpenCode teams ஐ தொடங்குவதற்கு முன் பயன்பாட்டை Run as administrator உடன் மறுதொடக்கம் செய்யவும்."
+ },
+ "webPreview": {
+ "title": "முழு செயல்பாட்டிற்கு desktop பயன்பாட்டைத் திறக்கவும்",
+ "description": "உலாவி பதிப்பு இன்னும் உருவாக்கத்தில் உள்ளது. project நடவடிக்கைகள், ஒருங்கிணைப்புகள் மற்றும் நேரடி நிலை புதுப்பிப்புகள் இங்கே வரம்புக்குட்பட்டதாக இருக்கலாம். அனைத்து அம்சங்களையும் நம்பகமாக அணுக desktop பயன்பாட்டைப் பயன்படுத்தவும்."
+ },
+ "updateBanner": {
+ "newVersionAvailable": "புதிய பதிப்பு கிடைக்கிறது",
+ "restartNow": "இப்போது மறுதொடக்கம்",
+ "viewDetails": "விவரங்களைக் காண்"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ta/errors.json b/src/features/localization/renderer/locales/ta/errors.json
new file mode 100644
index 00000000..bee13a87
--- /dev/null
+++ b/src/features/localization/renderer/locales/ta/errors.json
@@ -0,0 +1,3 @@
+{
+ "fallback": "ஏதோ தவறு நடந்தது."
+}
diff --git a/src/features/localization/renderer/locales/ta/extensions.json b/src/features/localization/renderer/locales/ta/extensions.json
new file mode 100644
index 00000000..ffb7e458
--- /dev/null
+++ b/src/features/localization/renderer/locales/ta/extensions.json
@@ -0,0 +1,688 @@
+{
+ "store": {
+ "actions": {
+ "addCustom": "தனிப்பயன் சேர்",
+ "openDashboard": "Dashboard ஐத் திற",
+ "refreshCatalog": "catalog ஐ புதுப்பி"
+ },
+ "capabilities": {
+ "mcp": "MCP: {{status}}",
+ "plugins": "Plugins: {{status}}",
+ "skills": "Skills: {{status}}"
+ },
+ "desktopOnly": "desktop பயன்பாட்டில் மட்டுமே கிடைக்கிறது.",
+ "provider": {
+ "checkingStatus": "வழங்குநர் நிலையைச் சரிபார்க்கிறது...",
+ "connected": "இணைக்கப்பட்டது",
+ "loading": "ஏற்றுகிறது...",
+ "needsSetup": "அமைப்பு தேவை",
+ "readyToConfigure": "கட்டமைக்கத் தயார்",
+ "unsupported": "ஆதரிக்கப்படவில்லை"
+ },
+ "runtime": {
+ "checkingAvailabilityDescription": "plugins, MCP servers, skills மற்றும் வழங்குநர் இணைப்புகளை நிர்வகிக்க நீட்டிப்புகளுக்கு கட்டமைக்கப்பட்ட runtime தேவை.",
+ "checkingAvailabilityTitle": "நீட்டிப்புகள் runtime கிடைக்கும்தன்மையைச் சரிபார்க்கிறது",
+ "failedToStartDescription": "runtime அதன் startup health check இல் தேர்ச்சி பெறும் வரை நீட்டிப்புகள் முடக்கப்படும். அதைப் பழுதுபார்க்க அல்லது மீண்டும் நிறுவ Dashboard ஐத் திறக்கவும்.",
+ "failedToStartTitle": "கட்டமைக்கப்பட்ட runtime கண்டறியப்பட்டது ஆனால் தொடங்க முடியவில்லை",
+ "multimodelCapabilitiesDescription": "வழங்குநர் ஆதரவு பிரிவு வாரியாக வேறுபடலாம். runtime வெளிப்படையாக ஆதரவை அறிவிக்கும் இடத்தில் மட்டுமே plugins காட்டப்படுகின்றன.",
+ "multimodelCapabilitiesTitle": "Multimodel runtime திறன்கள்",
+ "needsSignInDescription": "{{runtime}} கண்டறியப்பட்டது{{version}}, ஆனால் நீங்கள் Dashboard இலிருந்து sign in செய்யும் வரை plugin நிறுவல்கள் முடக்கப்படும்.",
+ "needsSignInTitle": "{{runtime}} க்கு sign-in தேவை",
+ "notAvailableDescription": "runtime நிறுவப்படும் வரை நீட்டிப்புகள் முடக்கப்படும். அதை நிறுவ Dashboard ஐத் திறந்து மீண்டும் முயற்சிக்கவும்.",
+ "notAvailableTitle": "கட்டமைக்கப்பட்ட runtime கிடைக்கவில்லை",
+ "readyDescription": "இந்தப் பக்கத்திலிருந்து plugins ஐ நிறுவலாம்{{versionSuffix}}.",
+ "readyTitle": "{{runtime}} தயார்",
+ "requiredForMutations": "நீட்டிப்புகளை நிறுவ அல்லது நீக்க கட்டமைக்கப்பட்ட runtime தேவை. அதை Dashboard இலிருந்து நிறுவவும் அல்லது பழுதுபார்க்கவும்."
+ },
+ "sessionsRestartWarning": "இயங்கும் sessions மறுதொடக்கம் செய்யப்படும் வரை நீட்டிப்பு மாற்றங்களை எடுத்துக்கொள்ளாது.",
+ "tabs": {
+ "apiKeys": {
+ "description": "ஆன்லைன் சேவைகளுக்கான ரகசிய keys. plugins, servers மற்றும் ஒருங்கிணைப்புகள் இணைந்து வேலை செய்ய அவற்றை இங்கே சேர்க்கவும்.",
+ "label": "API Keys"
+ },
+ "mcpServers": {
+ "description": "வெளி tools மற்றும் apps உடனான இணைப்புகள். அவை இந்த பயன்பாட்டிற்கு அப்பால் தரவைப் படிக்க அல்லது நடவடிக்கைகளைச் செய்ய runtime ஐ அனுமதிக்கின்றன.",
+ "label": "MCP Servers"
+ },
+ "plugins": {
+ "description": "runtime க்கான சிறிய add-ons. multimodel பயன்முறையில் அவை தற்போது ஆதரிக்கப்படும்போது Anthropic sessions க்குப் பொருந்தும். பரந்த வழங்குநர் ஆதரவு உருவாக்கத்தில் உள்ளது.",
+ "label": "Plugins"
+ },
+ "skills": {
+ "description": "பொதுவான வேலைகளுக்கான தயார்-செய்யப்பட்ட வழிமுறைகள். மீண்டும்-செய்யக்கூடிய tasks ஐ மிகவும் சீராகக் கையாள அவை runtime க்கு உதவுகின்றன.",
+ "label": "Skills"
+ }
+ },
+ "title": "நீட்டிப்புகள்"
+ },
+ "pluginsPanel": {
+ "activeFilters": "{{count}} செயலில்",
+ "browseByFit": "பொருத்தம் வாரியாக உலாவு",
+ "capabilities": "திறன்கள்",
+ "categories": "வகைகள்",
+ "clearAllFilters": "அனைத்து வடிப்பான்களையும் அழி",
+ "clearFilters": "வடிப்பான்களை அழி",
+ "counts": {
+ "capabilities": "{{count}} திறன்கள்",
+ "categories": "{{count}} வகைகள்",
+ "plugins": "{{count}} plugins",
+ "capabilities_few": "{{count}} திறன்கள்",
+ "capabilities_many": "{{count}} திறன்கள்",
+ "capabilities_one": "{{count}} திறன்கள்",
+ "capabilities_other": "{{count}} திறன்கள்",
+ "categories_few": "{{count}} வகைகள்",
+ "categories_many": "{{count}} வகைகள்",
+ "categories_one": "{{count}} வகைகள்",
+ "categories_other": "{{count}} வகைகள்",
+ "plugins_few": "{{count}} plugins",
+ "plugins_many": "{{count}} plugins",
+ "plugins_one": "{{count}} plugins",
+ "plugins_other": "{{count}} plugins"
+ },
+ "empty": {
+ "description": "புதிய plugins க்காக பிறகு மீண்டும் சரிபார்க்கவும்",
+ "filteredDescription": "உங்கள் தேடல் அல்லது வடிப்பான் அளவுகோல்களை சரிசெய்ய முயற்சிக்கவும்",
+ "filteredTitle": "உங்கள் வடிப்பான்களுக்குப் பொருந்தும் plugins இல்லை",
+ "title": "plugins எதுவும் கிடைக்கவில்லை"
+ },
+ "filterDescription": "வகை, திறன் அல்லது நிறுவப்பட்ட நிலை மூலம் catalog ஐ சுருக்கவும்.",
+ "installedOnly": "நிறுவப்பட்டது மட்டும்",
+ "providerSupportNotice": "Plugin ஆதரவு தற்போது Anthropic (Claude) sessions க்கு மட்டுமே உறுதி செய்யப்படுகிறது. அனைத்து agents முழுவதும் plugins ஐ ஆதரிக்க நாங்கள் பணியாற்றி வருகிறோம்.",
+ "resultsUpdateInstantly": "நீங்கள் வடிப்பான்களைச் செம்மைப்படுத்தும்போது முடிவுகள் உடனடியாகப் புதுப்பிக்கப்படும்.",
+ "searchPlaceholder": "plugins ஐத் தேடு...",
+ "selectedCount": "{{count}} தேர்ந்தெடுக்கப்பட்டது",
+ "showing": "{{total}} plugins இல் {{shown}} காட்டப்படுகிறது",
+ "sort": {
+ "category": "வகை",
+ "nameAsc": "பெயர் A-Z",
+ "nameDesc": "பெயர் Z-A",
+ "popular": "பிரபலமானது"
+ },
+ "activeFilters_few": "{{count}} செயலில்",
+ "activeFilters_many": "{{count}} செயலில்",
+ "activeFilters_one": "{{count}} செயலில்",
+ "activeFilters_other": "{{count}} செயலில்",
+ "selectedCount_few": "{{count}} தேர்ந்தெடுக்கப்பட்டது",
+ "selectedCount_many": "{{count}} தேர்ந்தெடுக்கப்பட்டது",
+ "selectedCount_one": "{{count}} தேர்ந்தெடுக்கப்பட்டது",
+ "selectedCount_other": "{{count}} தேர்ந்தெடுக்கப்பட்டது"
+ },
+ "customMcp": {
+ "actions": {
+ "add": "சேர்",
+ "cancel": "ரத்துசெய்",
+ "install": "நிறுவு",
+ "installing": "நிறுவுகிறது..."
+ },
+ "description": "catalog இல்லாமல் கைமுறையாக ஒரு server ஐ சேர்.",
+ "errors": {
+ "installFailed": "நிறுவல் தோல்வியடைந்தது",
+ "invalidServerName": "தவறான server பெயர். எழுத்து-எண்கள், dashes, underscores, dots ஐப் பயன்படுத்தவும்.",
+ "npmPackageRequired": "npm package பெயர் தேவை",
+ "serverNameRequired": "Server பெயர் தேவை",
+ "serverUrlRequired": "Server URL தேவை"
+ },
+ "fields": {
+ "environmentVariables": "Environment Variables",
+ "headers": "Headers",
+ "npmPackage": "npm Package",
+ "scope": "Scope",
+ "serverName": "Server பெயர்",
+ "serverUrl": "Server URL",
+ "transport": "Transport",
+ "transportType": "Transport வகை",
+ "versionOptional": "பதிப்பு (விருப்பத்திற்குரியது)"
+ },
+ "title": "தனிப்பயன் MCP Server ஐ சேர்",
+ "transport": {
+ "httpSse": "HTTP / SSE",
+ "stdio": "Stdio (npm)"
+ },
+ "placeholders": {
+ "headerName": "Header-Name",
+ "envVarName": "ENV_VAR_NAME",
+ "serverName": "my-server",
+ "latest": "latest",
+ "value": "value",
+ "serverUrl": "https://api.example.com/mcp"
+ }
+ },
+ "mcpDetail": {
+ "auth": {
+ "remoteMayNeedHeaders": "registry அவற்றை விவரிக்காதபோதும் தொலைநிலை MCP servers க்கு தனிப்பயன் headers அல்லது API keys இன்னும் தேவைப்படலாம். நிறுவலுக்குப் பிறகு இணைப்பு தோல்வியடைந்தால், வழங்குநர் docs ஐச் சரிபார்க்கவும்.",
+ "required": "இந்த server க்கு அங்கீகாரம் தேவை"
+ },
+ "diagnostics": {
+ "launchTarget": "Launch Target"
+ },
+ "form": {
+ "autoFilled": "தானாக நிரப்பப்பட்டது",
+ "environmentVariables": "Environment Variables",
+ "headers": "Headers",
+ "scope": "Scope",
+ "serverName": "Server பெயர்"
+ },
+ "install": {
+ "httpTransport": "HTTP: {{transport}}",
+ "manualSetupDescription": "இந்த server க்கு கைமுறை அமைப்பு தேவை. நிறுவல் வழிமுறைகளுக்கு repository ஐச் சரிபார்க்கவும்.",
+ "manualSetupRequired": "கைமுறை அமைப்பு தேவை",
+ "npmPackage": "npm: {{package}}",
+ "manage": "நிறுவலை நிர்வகி",
+ "install": "Server ஐ நிறுவு"
+ },
+ "links": {
+ "glama": "Glama",
+ "repository": "Repository",
+ "website": "இணையதளம்"
+ },
+ "metadata": {
+ "author": "ஆசிரியர்",
+ "githubStars": "GitHub Stars",
+ "hosting": "Hosting",
+ "installType": "நிறுவல் வகை",
+ "license": "License",
+ "published": "வெளியிடப்பட்டது",
+ "source": "மூலம்",
+ "updated": "புதுப்பிக்கப்பட்டது",
+ "version": "பதிப்பு"
+ },
+ "scope": {
+ "local": "உள்ளூர்",
+ "project": "Project"
+ },
+ "tools": {
+ "title": "Tools ({{count}})",
+ "title_few": "Tools ({{count}})",
+ "title_many": "Tools ({{count}})",
+ "title_one": "Tools ({{count}})",
+ "title_other": "Tools ({{count}})"
+ },
+ "placeholders": {
+ "serverName": "my-server"
+ }
+ },
+ "skillEditor": {
+ "actions": {
+ "cancel": "ரத்துசெய்",
+ "createSkill": "Skill ஐ உருவாக்கு",
+ "preparing": "தயார் செய்கிறது...",
+ "reviewAndCreate": "மதிப்பாய்வு செய்து உருவாக்கு",
+ "reviewAndSave": "மதிப்பாய்வு செய்து சேமி",
+ "saveSkill": "Skill ஐ சேமி"
+ },
+ "advanced": {
+ "customDescription": "இந்த skill ஒரு தனிப்பயன் markdown வடிவத்தைப் பயன்படுத்துகிறது, எனவே அதை இங்கே நேரடியாகத் திருத்தவும்.",
+ "customTitle": "2. SKILL.md editor",
+ "description": "பெரும்பாலானோர் இதைத் தவிர்க்கலாம். raw markdown கோப்பின் மீது நேரடி கட்டுப்பாடு வேண்டுமானால் மட்டுமே அதைத் திறக்கவும்.",
+ "hide": "மேம்பட்ட Editor ஐ மறை",
+ "resetFromStructuredFields": "Structured Fields இலிருந்து மீட்டமை",
+ "show": "மேம்பட்ட Editor ஐக் காட்டு",
+ "title": "4. மேம்பட்ட SKILL.md editor"
+ },
+ "basics": {
+ "description": "இந்த skill க்கு தெளிவான பெயரைக் கொடுத்து, யார் பயன்படுத்தலாம் என்பதைத் தேர்ந்தெடுத்து, அது எங்கு இருக்க வேண்டும் என்பதைத் தீர்மானிக்கவும்.",
+ "title": "1. அடிப்படைகள்"
+ },
+ "description": {
+ "create": "வேலைப்பாயை எளிய மொழியில் விவரிக்கவும், உருவாக்கப்படும் கோப்புகளை மதிப்பாய்வு செய்து, பிறகு அதைச் சேமிக்கவும்.",
+ "edit": "இந்த skill ஐப் புதுப்பிக்கவும், விளைந்த கோப்பு மாற்றங்களை மதிப்பாய்வு செய்து, பிறகு அதைச் சேமிக்கவும்."
+ },
+ "extraFiles": {
+ "addedFiles": "சேர்க்கப்பட்ட கோப்புகள்:",
+ "assets": "Assets",
+ "assetsDescription": "வேலைப்பாயை விளக்க உதவினால் மட்டுமே screenshots அல்லது bundled media ஐ சேர்க்கவும்.",
+ "description": "இந்த skill க்கு உண்மையில் தேவைப்பட்டால் மட்டுமே ஆதரவு docs, scripts அல்லது assets ஐ சேர்க்கவும்.",
+ "lockedForEdits": "Root மற்றும் folder திருத்தங்களுக்கு பூட்டப்பட்டுள்ளன",
+ "optionalDescription": "மதிப்பாய்வில் சேர்க்கப்பட்டு `SKILL.md` உடன் சேர்ந்து எழுதப்படும் starter கோப்புகளை சேர்க்கவும்.",
+ "optionalTitle": "விருப்ப கோப்புகள்",
+ "references": "References",
+ "referencesDescription": "runtime பார்க்கக்கூடிய ஆதரவு docs, links அல்லது எடுத்துக்காட்டுகளை சேர்க்கவும்.",
+ "scripts": "Scripts",
+ "scriptsDescription": "helper கட்டளைகள் அல்லது அமைப்பு குறிப்புகளை சேர்க்கவும். இந்த skill ஐப் பகிர்வதற்கு முன் கவனமாக மதிப்பாய்வு செய்யவும்.",
+ "title": "3. கூடுதல் கோப்புகள்"
+ },
+ "fields": {
+ "compatibility": "இணக்கத்தன்மை",
+ "description": "விளக்கம்",
+ "folderName": "Folder பெயர்",
+ "folderNameHint": "மதிப்பாய்வு உடனடியாக வேலை செய்ய skill பெயரிலிருந்து இதை நாங்கள் தானாகப் பரிந்துரைக்கிறோம்.",
+ "invocation": "அது எவ்வாறு பயன்படுத்தப்பட வேண்டும்",
+ "license": "License",
+ "name": "Skill பெயர்",
+ "notes": "கூடுதல் குறிப்புகள் அல்லது guardrails",
+ "root": "எங்கு சேமிக்க வேண்டும்",
+ "scope": "யார் பயன்படுத்தலாம்",
+ "steps": "பின்பற்ற வேண்டிய முக்கிய படிகள்",
+ "whenToUse": "இதை எப்போது பயன்படுத்த வேண்டும்"
+ },
+ "instructions": {
+ "description": "இந்தப் பிரிவுகள் உங்களுக்கான skill கோப்பை உருவாக்குகின்றன, எனவே நீங்கள் விரும்பாவிட்டால் markdown ஐத் திருத்த வேண்டியதில்லை.",
+ "locked": "கீழே கைமுறை `SKILL.md` திருத்தத்திற்கு மாறியதால் structured fields பூட்டப்பட்டுள்ளன.",
+ "title": "2. வழிமுறைகள்"
+ },
+ "invocation": {
+ "auto": "தானாகப் பயன்படுத்தலாம்",
+ "manualOnly": "நீங்கள் கேட்கும்போது மட்டும்"
+ },
+ "placeholders": {
+ "description": "இந்த skill எதற்கு உதவுகிறது",
+ "name": "சுருக்கமான skill பெயரை எழுதவும்",
+ "notes": "எடுத்துக்காட்டு: விடுபட்ட சோதனைகள், regressions மற்றும் ஆபத்தான அனுமானங்களைச் சுட்டிக்காட்டவும்.",
+ "steps": "1. தொடர்புடைய கோப்புகளை ஆராயவும்.\n2. முக்கிய ஆபத்தை முதலில் விளக்கவும்.\n3. பாதுகாப்பான திருத்தத்தைப் பரிந்துரைக்கவும்.",
+ "whenToUse": "எடுத்துக்காட்டு: task ஒரு code review அல்லது bug triage கோரிக்கையாக இருக்கும்போது இதைப் பயன்படுத்தவும்.",
+ "license": "MIT",
+ "compatibility": "claude-code, cursor"
+ },
+ "review": {
+ "creating": "ஒரு skill ஐ உருவாக்குகிறது",
+ "hint": "முதலில் கோப்பு மாற்றங்களை மதிப்பாய்வு செய்து, பிறகு அடுத்த படியில் சேமிப்பை உறுதிப்படுத்தவும்.",
+ "saving": "இந்த skill ஐ சேமிக்கிறது"
+ },
+ "root": {
+ "codexOnly": " - Codex மட்டும்",
+ "shared": " - பகிரப்பட்டது"
+ },
+ "scope": {
+ "project": "Project: {{project}}",
+ "projectUnavailable": "Project கிடைக்கவில்லை",
+ "user": "பயனர்"
+ },
+ "title": {
+ "create": "skill ஐ உருவாக்கு",
+ "edit": "skill ஐ திருத்து"
+ }
+ },
+ "skillDetail": {
+ "actions": {
+ "cancel": "ரத்துசெய்",
+ "delete": "நீக்கு",
+ "deleteSkill": "Skill ஐ நீக்கு",
+ "deleting": "நீக்குகிறது...",
+ "editSkill": "Skill ஐ திருத்து",
+ "openFolder": "Folder ஐத் திற",
+ "openSkillFile": "SKILL.md ஐத் திற",
+ "retry": "மீண்டும் முயற்சி"
+ },
+ "badges": {
+ "assets": "Assets",
+ "autoUse": "தானியங்கி பயன்பாடு",
+ "hasScripts": "Scripts உள்ளன",
+ "manualUse": "கைமுறை பயன்பாடு",
+ "references": "References",
+ "storedIn": "{{root}} இல் சேமிக்கப்பட்டது"
+ },
+ "deleteDialog": {
+ "description": "இந்த skill ஐ நீக்கி Trash க்கு நகர்த்தவா?",
+ "descriptionWithName": "\"{{name}}\" ஐ நீக்கி Trash க்கு நகர்த்தவா? தேவைப்பட்டால் பிறகு அதை Trash இலிருந்து மீட்டெடுக்கலாம்.",
+ "title": "skill ஐ நீக்கவா?"
+ },
+ "descriptionFallback": "கண்டறியப்பட்ட skill metadata மற்றும் raw வழிமுறைகளை ஆராயவும்.",
+ "errors": {
+ "deleteFailed": "skill ஐ நீக்க முடியவில்லை",
+ "loadFailed": "இந்த skill ஐ ஏற்ற முடியவில்லை."
+ },
+ "files": {
+ "advancedDetails": "மேம்பட்ட கோப்பு விவரங்கள்",
+ "assets": "Assets",
+ "references": "References",
+ "scripts": "Scripts",
+ "storedAt": "சேமிக்கப்பட்ட இடம்"
+ },
+ "includes": {
+ "assets": "assets",
+ "instructionsOnly": "skill வழிமுறைகள் மட்டும்",
+ "references": "references",
+ "scripts": "scripts"
+ },
+ "invocation": {
+ "auto": "task உடன் பொருந்தும்போது தானாக இயங்குகிறது.",
+ "manualOnly": "நீங்கள் வெளிப்படையாகக் கேட்கும்போது மட்டுமே இயங்குகிறது."
+ },
+ "issues": {
+ "bundledScripts": "இந்த skill இல் bundled scripts அடங்கும்",
+ "reviewCarefully": "இந்த skill ஐப் பயன்படுத்துவதற்கு முன் கவனமாக மதிப்பாய்வு செய்யவும்"
+ },
+ "loading": "skill விவரங்களை ஏற்றுகிறது...",
+ "scope": {
+ "personal": "உங்கள் தனிப்பட்ட skills",
+ "projectOnly": "இந்த project மட்டும்"
+ },
+ "summary": {
+ "howUsed": "அது எவ்வாறு பயன்படுத்தப்படுகிறது",
+ "included": "அதனுடன் என்ன வருகிறது",
+ "whoCanUse": "யார் பயன்படுத்தலாம்"
+ },
+ "titleFallback": "Skill விவரங்கள்"
+ },
+ "skillsPanel": {
+ "actions": {
+ "createSkill": "Skill ஐ உருவாக்கு",
+ "import": "இறக்குமதி செய்"
+ },
+ "badges": {
+ "assets": "Assets",
+ "hasScripts": "Scripts உள்ளன",
+ "needsAttention": "கவனம் தேவை",
+ "references": "References",
+ "storedIn": "{{root}} இல் சேமிக்கப்பட்டது"
+ },
+ "configuredRuntime": "கட்டமைக்கப்பட்ட runtime",
+ "counts": {
+ "codexOnly": "{{count}} Codex மட்டும்",
+ "personal": "{{count}} தனிப்பட்டது",
+ "project": "{{count}} project",
+ "shared": "{{count}} பகிரப்பட்டது",
+ "total": "மொத்தம் {{count}}",
+ "codexOnly_few": "{{count}} Codex மட்டும்",
+ "codexOnly_many": "{{count}} Codex மட்டும்",
+ "codexOnly_one": "{{count}} Codex மட்டும்",
+ "codexOnly_other": "{{count}} Codex மட்டும்",
+ "personal_few": "{{count}} தனிப்பட்டது",
+ "personal_many": "{{count}} தனிப்பட்டது",
+ "personal_one": "{{count}} தனிப்பட்டது",
+ "personal_other": "{{count}} தனிப்பட்டது",
+ "project_few": "{{count}} project",
+ "project_many": "{{count}} project",
+ "project_one": "{{count}} project",
+ "project_other": "{{count}} project",
+ "shared_few": "{{count}} பகிரப்பட்டது",
+ "shared_many": "{{count}} பகிரப்பட்டது",
+ "shared_one": "{{count}} பகிரப்பட்டது",
+ "shared_other": "{{count}} பகிரப்பட்டது",
+ "total_few": "மொத்தம் {{count}}",
+ "total_many": "மொத்தம் {{count}}",
+ "total_one": "மொத்தம் {{count}}",
+ "total_other": "மொத்தம் {{count}}"
+ },
+ "empty": {
+ "noMatches": "உங்கள் தேடலுக்குப் பொருந்தும் skills இல்லை",
+ "noMatchesDescription": "வேறு தேடல் சொல்லை முயற்சிக்கவும் அல்லது வடிப்பான்களை மாற்றவும்.",
+ "noSkills": "இன்னும் skills இல்லை",
+ "noSkillsDescription": "மீண்டும்-செய்யக்கூடிய வேலைப்பாயைக் கற்பிக்க உங்கள் முதல் skill ஐ உருவாக்கவும், அல்லது நீங்கள் ஏற்கனவே பயன்படுத்தும் ஒன்றை இறக்குமதி செய்யவும்."
+ },
+ "filters": {
+ "all": "அனைத்து skills",
+ "codexOnly": "Codex மட்டும்",
+ "hasScripts": "Scripts உள்ளன",
+ "needsAttention": "கவனம் தேவை",
+ "personal": "தனிப்பட்டது",
+ "project": "Project",
+ "shared": "பகிரப்பட்டது"
+ },
+ "hero": {
+ "codexAvailable": "ஒரு skill Codex-only ஆக இருக்க வேண்டும் என்றால் `.codex` ஐப் பயன்படுத்தவும்.",
+ "codexUnavailable": "தற்போதுள்ள `.codex` skills இங்கே திருத்தக்கூடியதாக இருக்கும், ஆனால் புதிய Codex-only skills க்கு Codex runtime இயக்கப்பட வேண்டும்.",
+ "description": "Skills என்பவை அதே வகையான task ஐ மிகவும் சீராகக் கையாள runtime க்கு உதவும் மறுபயன்பாட்டு வழிமுறைகளாகும்.",
+ "guidance": "எல்லா இடங்களிலும் வேண்டிய பழக்கங்களுக்கு தனிப்பட்ட skills ஐப் பயன்படுத்தவும். ஒரு codebase க்குள் மட்டுமே அர்த்தமுள்ள வேலைப்பாய்களுக்கு project skills ஐப் பயன்படுத்தவும்.",
+ "personalContext": "நீங்கள் இப்போது உங்கள் தனிப்பட்ட skills ஐ மட்டுமே பார்க்கிறீர்கள்.",
+ "projectContext": "நீங்கள் {{project}} க்கான skills மற்றும் உங்கள் தனிப்பட்ட skills ஐப் பார்க்கிறீர்கள்.",
+ "title": "மீண்டும்-செய்யக்கூடிய வேலையைக் கற்பி"
+ },
+ "invocation": {
+ "auto": "பொருந்தும்போது தானாக இயங்குகிறது",
+ "manualOnly": "நீங்கள் வெளிப்படையாகக் கேட்கும்போது மட்டுமே இயங்குகிறது"
+ },
+ "loading": {
+ "loading": "skills ஐ ஏற்றுகிறது...",
+ "refreshing": "skills ஐ புதுப்பிக்கிறது..."
+ },
+ "runtimeAudience": "`.claude`, `.cursor` மற்றும் `.agents` இல் உள்ள பகிரப்பட்ட skills ஆனது {{audience}} க்குக் கிடைக்கும். `.codex` இல் சேமிக்கப்பட்ட skills ஆனது Codex ஆதரவு கிடைக்கும்போது Codex-only ஆக இருக்கும்.",
+ "scope": {
+ "project": "இந்த project",
+ "user": "தனிப்பட்டது"
+ },
+ "searchPlaceholder": "skill பெயர் அல்லது அது எதற்கு உதவுகிறது என்பதன் மூலம் தேடவும்...",
+ "sections": {
+ "personal": {
+ "description": "எல்லா இடங்களிலும் கிடைக்க வேண்டிய பழக்கங்கள் மற்றும் வழிமுறைகள்.",
+ "title": "தனிப்பட்ட skills"
+ },
+ "project": {
+ "description": "இந்த codebase க்கு மட்டுமே அர்த்தமுள்ள வேலைப்பாய்கள்.",
+ "title": "Project skills"
+ }
+ },
+ "sort": {
+ "label": "skills ஐ வரிசைப்படுத்து",
+ "name": "பெயர்",
+ "recent": "சமீபத்தியது"
+ },
+ "status": {
+ "hasScripts": "Scripts அடங்கும், எனவே கவனமாக மதிப்பாய்வு செய்யவும்",
+ "needsAttention": "நீங்கள் நம்புவதற்கு முன் கவனம் தேவை",
+ "ready": "பயன்படுத்தத் தயார்"
+ },
+ "success": {
+ "created": "Skill வெற்றிகரமாக உருவாக்கப்பட்டது.",
+ "imported": "Skill வெற்றிகரமாக இறக்குமதி செய்யப்பட்டது.",
+ "saved": "Skill வெற்றிகரமாகச் சேமிக்கப்பட்டது."
+ }
+ },
+ "pluginDetail": {
+ "unknown": "தெரியாதது",
+ "metadata": {
+ "author": "ஆசிரியர்",
+ "category": "வகை",
+ "source": "மூலம்",
+ "version": "பதிப்பு",
+ "capabilities": "திறன்கள்",
+ "installs": "நிறுவல்கள்"
+ },
+ "scope": {
+ "label": "Scope:",
+ "options": {
+ "user": "பயனர் (global)",
+ "project": "Project (பகிரப்பட்டது)",
+ "local": "உள்ளூர் (gitignored)"
+ }
+ },
+ "links": {
+ "homepage": "Homepage",
+ "contact": "தொடர்பு"
+ },
+ "readme": {
+ "loading": "README ஐ ஏற்றுகிறது...",
+ "empty": "README எதுவும் கிடைக்கவில்லை."
+ }
+ },
+ "skillImport": {
+ "title": "skill ஐ இறக்குமதி செய்",
+ "description": "ஏற்கனவே உள்ள ஒரு skill folder ஐத் தேர்ந்தெடுக்கவும், எது நகலெடுக்கப்படும் என்பதை மதிப்பாய்வு செய்து, பிறகு அதை உங்கள் ஆதரிக்கப்படும் skill இடங்களில் ஒன்றில் இறக்குமதி செய்யவும்.",
+ "steps": {
+ "chooseFolder": {
+ "title": "1. ஒரு skill folder ஐத் தேர்ந்தெடு",
+ "description": "இது ஏற்கனவே `SKILL.md`, `Skill.md` அல்லது `skill.md` கோப்பைக் கொண்ட ஒரு folder ஆக இருக்க வேண்டும்."
+ },
+ "location": {
+ "title": "2. அது எங்கு சேர வேண்டும் என்பதைத் தீர்மானி",
+ "description": "தனிப்பட்ட skills எல்லா இடங்களிலும் வேலை செய்கின்றன. Project skills ஒரு codebase க்கு மட்டுமே தோன்றும்."
+ }
+ },
+ "fields": {
+ "sourceFolder": "மூல folder",
+ "destinationFolderName": "இலக்கு folder பெயர்",
+ "audience": "யார் பயன்படுத்தலாம்",
+ "storage": "எங்கு சேமிக்க வேண்டும்"
+ },
+ "placeholders": {
+ "defaultFolderName": "மூல folder பெயருக்கு இயல்புநிலை"
+ },
+ "actions": {
+ "browse": "உலாவு",
+ "cancel": "ரத்துசெய்",
+ "preparing": "தயார் செய்கிறது...",
+ "reviewAndImport": "மதிப்பாய்வு செய்து இறக்குமதி செய்",
+ "importSkill": "Skill ஐ இறக்குமதி செய்",
+ "backToImport": "இறக்குமதிக்குத் திரும்பு"
+ },
+ "scope": {
+ "user": "பயனர்",
+ "project": "Project: {{project}}",
+ "projectUnavailable": "Project கிடைக்கவில்லை"
+ },
+ "rootSuffix": {
+ "codexOnly": " - Codex மட்டும்",
+ "shared": " - பகிரப்பட்டது"
+ },
+ "reviewHint": "முதலில் நகலெடுக்கப்பட்ட கோப்புகளை மதிப்பாய்வு செய்து, பிறகு அடுத்த படியில் இறக்குமதியை உறுதிப்படுத்தவும்.",
+ "reviewLabel": "இந்த skill ஐ இறக்குமதி செய்கிறது",
+ "errors": {
+ "missingSkillFile": "இந்த folder இன்னும் ஒரு skill போல் தெரியவில்லை. அதற்கு SKILL.md, Skill.md அல்லது skill.md கோப்பு தேவை.",
+ "symbolicLinks": "இந்த folder இல் symbolic links உள்ளன. links க்குப் பதிலாக உண்மையான கோப்புகளை இறக்குமதி செய்யவும்.",
+ "tooManyFiles": "இந்த skill folder ஒரே நேரத்தில் இறக்குமதி செய்ய மிகப் பெரியது. கூடுதல் கோப்புகளை அகற்றி மீண்டும் முயற்சிக்கவும்.",
+ "tooLarge": "இந்த skill folder பாதுகாப்பாக இறக்குமதி செய்ய மிகப் பெரியது. பெரிய assets ஐ குறைத்து மீண்டும் முயற்சிக்கவும்.",
+ "invalidFolderName": "எழுத்துகள், எண்கள், dots, dashes அல்லது underscores ஐப் பயன்படுத்தி எளிமையான இலக்கு folder பெயரைத் தேர்ந்தெடுக்கவும்.",
+ "mustBeDirectory": "ஒற்றை கோப்பு அல்ல, இறக்குமதி செய்ய ஒரு folder ஐத் தேர்ந்தெடுக்கவும்.",
+ "reviewFailed": "இறக்குமதி மாற்றங்களை மதிப்பாய்வு செய்ய முடியவில்லை",
+ "importFailed": "skill ஐ இறக்குமதி செய்ய முடியவில்லை"
+ }
+ },
+ "mcpPanel": {
+ "sort": {
+ "nameAsc": "பெயர் A→Z",
+ "nameDesc": "பெயர் Z→A",
+ "toolsDesc": "அதிக tools"
+ },
+ "health": {
+ "title": "MCP Health நிலை",
+ "checkingViaRuntime": "{{runtime}} வழியாக நிறுவப்பட்ட MCP servers ஐச் சரிபார்க்கிறது ...",
+ "lastChecked": "கடைசியாக சரிபார்க்கப்பட்டது {{time}}",
+ "description": "நிறுவப்பட்ட MCP இணைப்பைச் சரிபார்க்க இந்தப் பக்கத்திலிருந்து diagnostics ஐ இயக்கவும்.",
+ "checking": "சரிபார்க்கிறது...",
+ "checkStatus": "நிலையைச் சரிபார்"
+ },
+ "diagnostics": {
+ "title": "Runtime MCP Diagnostics",
+ "serversCount": "{{count}} servers",
+ "serversCount_one": "{{count}} server",
+ "serversCount_other": "{{count}} servers",
+ "waiting": "diagnostics முடிவுகளுக்காகக் காத்திருக்கிறது...",
+ "disableReasons": {
+ "checkingRuntimeStatus": "runtime நிலையைச் சரிபார்க்கிறது...",
+ "checkingRuntimeAvailability": "runtime கிடைக்கும்தன்மையைச் சரிபார்க்கிறது...",
+ "runtimeFailedToStart": "கட்டமைக்கப்பட்ட runtime கண்டறியப்பட்டது ஆனால் தொடங்க முடியவில்லை. அதைப் பழுதுபார்க்க அல்லது மீண்டும் நிறுவ Dashboard ஐத் திறக்கவும்.",
+ "runtimeRequired": "கட்டமைக்கப்பட்ட runtime தேவை. அதை Dashboard இலிருந்து நிறுவவும் அல்லது பழுதுபார்க்கவும்."
+ },
+ "serversCount_few": "{{count}} servers",
+ "serversCount_many": "{{count}} servers"
+ },
+ "searchPlaceholder": "MCP servers ஐத் தேடு...",
+ "runtime": {
+ "notAvailable": "{{runtime}} கிடைக்கவில்லை",
+ "notInstalled": "{{runtime}} நிறுவப்படவில்லை",
+ "requiredDescription": "MCP health checks க்கு {{runtime}} தேவை. அதை நிறுவ அல்லது பழுதுபார்க்க Dashboard க்குச் செல்லவும்."
+ },
+ "empty": {
+ "searchTitle": "servers எதுவும் கிடைக்கவில்லை",
+ "title": "MCP servers எதுவும் கிடைக்கவில்லை",
+ "searchDescription": "வேறு தேடல் சொல்லை முயற்சிக்கவும்",
+ "description": "புதிய servers க்காக பிறகு மீண்டும் சரிபார்க்கவும்"
+ },
+ "loadMore": "மேலும் ஏற்று"
+ },
+ "apiKeys": {
+ "description": "MCP servers ஐ நிறுவும்போது தானாக நிரப்புவதற்கு API keys ஐ பாதுகாப்பாக சேமிக்கவும்.",
+ "storage": {
+ "osKeychain": "keys ஆனது {{backend}} வழியாக encrypt செய்யப்பட்டு கட்டுப்படுத்தப்பட்ட கோப்பு அனுமதிகளுடன் (owner-only) சேமிக்கப்படுகின்றன.",
+ "localEncryption": "OS keychain கிடைக்கவில்லை - keys உள்ளூரில் AES-256 உடன் encrypt செய்யப்படுகின்றன. வலுவான பாதுகாப்பிற்கு ஒரு keyring சேவையை நிறுவவும் (gnome-keyring, kwallet)."
+ },
+ "actions": {
+ "add": "API Key ஐ சேர்",
+ "addFirst": "உங்கள் முதல் key ஐ சேர்",
+ "edit": "திருத்து",
+ "copied": "நகலெடுக்கப்பட்டது!",
+ "copyEnvVarName": "env var பெயரை நகலெடு",
+ "confirmDelete": "உறுதிப்படுத்த மீண்டும் கிளிக் செய்",
+ "delete": "நீக்கு"
+ },
+ "empty": {
+ "title": "API keys எதுவும் சேமிக்கப்படவில்லை",
+ "description": "MCP servers ஐ நிறுவும்போது environment variables ஐ தானாக நிரப்ப keys ஐ சேர்க்கவும்."
+ },
+ "form": {
+ "addTitle": "API Key ஐ சேர்",
+ "editTitle": "API Key ஐ திருத்து",
+ "addDescription": "MCP server நிறுவல்களில் தானாக நிரப்புவதற்கு ஒரு API key ஐ சேமி.",
+ "editDescription": "key விவரங்களைப் புதுப்பிக்கவும். நீங்கள் மதிப்பை மீண்டும் உள்ளிட வேண்டும்.",
+ "keychainUnavailable": "OS keychain கிடைக்கவில்லை - keys உள்ளூரில் AES-256 உடன் encrypt செய்யப்பட்டன. OS-நிலை பாதுகாப்பிற்கு gnome-keyring ஐ நிறுவவும்.",
+ "name": "பெயர்",
+ "namePlaceholder": "எ.கா. OpenAI Production",
+ "environmentVariableName": "Environment Variable பெயர்",
+ "envVarPlaceholder": "எ.கா. OPENAI_API_KEY",
+ "value": "மதிப்பு",
+ "reenterValue": "key மதிப்பை மீண்டும் உள்ளிடு",
+ "valuePlaceholder": "sk-...",
+ "scope": "Scope",
+ "userScopeLabel": "பயனர் (global)",
+ "projectScopeLabel": "Project: {{project}}",
+ "projectUnavailable": "Project கிடைக்கவில்லை",
+ "boundTo": "{{path}} உடன் இணைக்கப்பட்டது",
+ "cancel": "ரத்துசெய்",
+ "saving": "சேமிக்கிறது...",
+ "update": "புதுப்பி",
+ "save": "சேமி",
+ "errors": {
+ "invalidEnvVarFormat": "எழுத்துகள், இலக்கங்கள், underscores ஐப் பயன்படுத்தவும். ஒரு எழுத்து அல்லது underscore உடன் தொடங்க வேண்டும்.",
+ "nameRequired": "பெயர் தேவை",
+ "envVarRequired": "Environment variable பெயர் தேவை",
+ "invalidEnvVar": "தவறான environment variable பெயர்",
+ "valueRequired": "Key மதிப்பு தேவை",
+ "projectScopeRequiresProject": "Project-scoped API keys க்கு செயலில் உள்ள project தேவை",
+ "saveFailed": "சேமிக்க முடியவில்லை"
+ }
+ }
+ },
+ "skillReview": {
+ "title": "skill மாற்றங்களை மதிப்பாய்வு செய்",
+ "description": "{{reviewLabel}} முதலில் filesystem மாற்றங்களை முன்னோட்டமிடுகிறது. நீங்கள் கீழே உறுதிப்படுத்தும் வரை எதுவும் எழுதப்படாது.",
+ "noPreview": "முன்னோட்டம் எதுவும் கிடைக்கவில்லை.",
+ "confirmPromptPrefix": "கீழே உள்ள diff ஐ மதிப்பாய்வு செய்து, பிறகு பயன்படுத்தவும்",
+ "confirmPromptSuffix": "இந்த மாற்றங்களைப் பயன்படுத்த.",
+ "noChanges": "இன்னும் கோப்பு மாற்றங்கள் எதுவும் கண்டறியப்படவில்லை.",
+ "binaryBadge": "binary",
+ "binaryPreviewHidden": "Binary கோப்பு முன்னோட்டம் காட்டப்படவில்லை. கோப்பு உள்ளபடியே நகலெடுக்கப்படும்.",
+ "summary": {
+ "fileChanges": "{{count}} கோப்பு மாற்றங்கள்",
+ "fileChanges_one": "{{count}} கோப்பு மாற்றம்",
+ "fileChanges_other": "{{count}} கோப்பு மாற்றங்கள்",
+ "new": "{{count}} புதியது",
+ "updated": "{{count}} புதுப்பிக்கப்பட்டது",
+ "removed": "{{count}} அகற்றப்பட்டது",
+ "binary": "{{count}} binary",
+ "fileChanges_few": "{{count}} கோப்பு மாற்றங்கள்",
+ "fileChanges_many": "{{count}} கோப்பு மாற்றங்கள்"
+ }
+ },
+ "mcpCard": {
+ "toolsCount": "{{count}} tools",
+ "toolsCount_one": "{{count}} tool",
+ "toolsCount_other": "{{count}} tools",
+ "envCount": "{{count}} envs",
+ "envCount_one": "{{count}} env",
+ "envCount_other": "{{count}} envs",
+ "auth": "Auth",
+ "byAuthor": "{{author}} மூலம்",
+ "hosting": {
+ "remote": "தொலைநிலை",
+ "local": "உள்ளூர்",
+ "both": "இரண்டும்"
+ },
+ "toolsCount_few": "{{count}} tools",
+ "toolsCount_many": "{{count}} tools",
+ "envCount_few": "{{count}} envs",
+ "envCount_many": "{{count}} envs",
+ "repository": "Repository",
+ "website": "இணையதளம்"
+ },
+ "installButton": {
+ "installing": "நிறுவுகிறது...",
+ "removing": "அகற்றுகிறது...",
+ "done": "முடிந்தது",
+ "retry": "மீண்டும் முயற்சி",
+ "uninstall": "நிறுவல் நீக்கு",
+ "install": "நிறுவு"
+ },
+ "pluginCard": {
+ "official": "அதிகாரப்பூர்வம்"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ta/report.json b/src/features/localization/renderer/locales/ta/report.json
new file mode 100644
index 00000000..6f6b86f2
--- /dev/null
+++ b/src/features/localization/renderer/locales/ta/report.json
@@ -0,0 +1,217 @@
+{
+ "cost": {
+ "breakdownTitle": "செலவு பகுப்பாய்வு (1M tokens க்கு)",
+ "cacheRead": "Cache படிப்பு",
+ "cacheWrite": "Cache எழுதுதல்",
+ "cost": "செலவு",
+ "input": "உள்ளீடு",
+ "noCommits": "commits இல்லை",
+ "noLinesChanged": "வரிகள் எதுவும் மாற்றப்படவில்லை",
+ "output": "வெளியீடு",
+ "parent": "Parent: {{cost}}",
+ "parentCost": "Parent செலவு",
+ "perCommit": "ஒவ்வொரு Commit க்கு",
+ "perCommitFormula": "மொத்த செலவு ÷ {{count}} commit",
+ "perCommitFormula_few": "மொத்த செலவு ÷ {{count}} commits",
+ "perCommitFormula_many": "மொத்த செலவு ÷ {{count}} commits",
+ "perCommitFormula_one": "மொத்த செலவு ÷ {{count}} commit",
+ "perCommitFormula_other": "மொத்த செலவு ÷ {{count}} commits",
+ "perLineChanged": "மாற்றப்பட்ட ஒவ்வொரு வரிக்கு",
+ "perLineFormula": "மொத்த செலவு ÷ {{count}} வரி",
+ "perLineFormula_few": "மொத்த செலவு ÷ {{count}} வரிகள்",
+ "perLineFormula_many": "மொத்த செலவு ÷ {{count}} வரிகள்",
+ "perLineFormula_one": "மொத்த செலவு ÷ {{count}} வரி",
+ "perLineFormula_other": "மொத்த செலவு ÷ {{count}} வரிகள்",
+ "subagent": "Subagent: {{cost}}",
+ "subagentCost": "Subagent செலவு",
+ "title": "செலவு பகுப்பாய்வு",
+ "total": "மொத்தம்"
+ },
+ "insights": {
+ "agent": "agent",
+ "agent_few": "agents",
+ "agent_many": "agents",
+ "agent_one": "agent",
+ "agent_other": "agents",
+ "agentTree": "Agent மரம் ({{count}} {{unit}})",
+ "background": "(பின்னணி)",
+ "bashCommands": "Bash கட்டளைகள்",
+ "outOfScopeFindings": "வரம்புக்கு வெளியேயான கண்டுபிடிப்புகள் ({{count}})",
+ "questionsAsked": "கேட்கப்பட்ட கேள்விகள் ({{count}})",
+ "repeated": "மீண்டும் நிகழ்ந்த",
+ "skillsInvoked": "பயன்படுத்தப்பட்ட Skills ({{count}})",
+ "taskDispatches": "Task அனுப்புகைகள் ({{count}})",
+ "tasksCreated": "உருவாக்கப்பட்ட Tasks ({{count}})",
+ "teamMode": "Team பயன்முறை",
+ "teams": "Teams: {{teams}}",
+ "title": "Session நுண்ணறிவுகள்",
+ "total": "மொத்தம்",
+ "unique": "தனித்துவமான",
+ "skillsInvoked_few": "பயன்படுத்தப்பட்ட Skills ({{count}})",
+ "skillsInvoked_many": "பயன்படுத்தப்பட்ட Skills ({{count}})",
+ "skillsInvoked_one": "பயன்படுத்தப்பட்ட Skills ({{count}})",
+ "skillsInvoked_other": "பயன்படுத்தப்பட்ட Skills ({{count}})",
+ "taskDispatches_few": "Task அனுப்புகைகள் ({{count}})",
+ "taskDispatches_many": "Task அனுப்புகைகள் ({{count}})",
+ "taskDispatches_one": "Task அனுப்புகைகள் ({{count}})",
+ "taskDispatches_other": "Task அனுப்புகைகள் ({{count}})",
+ "tasksCreated_few": "உருவாக்கப்பட்ட Tasks ({{count}})",
+ "tasksCreated_many": "உருவாக்கப்பட்ட Tasks ({{count}})",
+ "tasksCreated_one": "உருவாக்கப்பட்ட Tasks ({{count}})",
+ "tasksCreated_other": "உருவாக்கப்பட்ட Tasks ({{count}})",
+ "questionsAsked_few": "கேட்கப்பட்ட கேள்விகள் ({{count}})",
+ "questionsAsked_many": "கேட்கப்பட்ட கேள்விகள் ({{count}})",
+ "questionsAsked_one": "கேட்கப்பட்ட கேள்விகள் ({{count}})",
+ "questionsAsked_other": "கேட்கப்பட்ட கேள்விகள் ({{count}})",
+ "agentTree_few": "Agent மரம் ({{count}} {{unit}})",
+ "agentTree_many": "Agent மரம் ({{count}} {{unit}})",
+ "agentTree_one": "Agent மரம் ({{count}} {{unit}})",
+ "agentTree_other": "Agent மரம் ({{count}} {{unit}})",
+ "outOfScopeFindings_few": "வரம்புக்கு வெளியேயான கண்டுபிடிப்புகள் ({{count}})",
+ "outOfScopeFindings_many": "வரம்புக்கு வெளியேயான கண்டுபிடிப்புகள் ({{count}})",
+ "outOfScopeFindings_one": "வரம்புக்கு வெளியேயான கண்டுபிடிப்புகள் ({{count}})",
+ "outOfScopeFindings_other": "வரம்புக்கு வெளியேயான கண்டுபிடிப்புகள் ({{count}})",
+ "keyTakeaways": "முக்கிய அம்சங்கள்"
+ },
+ "quality": {
+ "chars": "எழுத்துகள்",
+ "corrections": "திருத்தங்கள்",
+ "failed": "தோல்வி",
+ "fileReadRedundancy": "கோப்பு படிப்பு மிகுதி",
+ "firstMessage": "முதல் செய்தி",
+ "firstRun": "முதல் இயக்கம்",
+ "frictionRate": "உராய்வு விகிதம்",
+ "lastRun": "கடைசி இயக்கம்",
+ "messagesBeforeWork": "வேலைக்கு முந்தைய செய்திகள்",
+ "passed": "தேர்ச்சி",
+ "promptQuality": "Prompt தரம்",
+ "readsPerUniqueFile": "தனித்துவ கோப்புக்கு படிப்புகள்",
+ "snapshot": "snapshot",
+ "snapshot_few": "snapshots",
+ "snapshot_many": "snapshots",
+ "snapshot_one": "snapshot",
+ "snapshot_other": "snapshots",
+ "startupOverhead": "Startup மேல்செலவு",
+ "testProgression": "சோதனை முன்னேற்றம்",
+ "title": "தர சமிக்ஞைகள்",
+ "tokensBeforeWork": "வேலைக்கு முந்தைய Tokens",
+ "totalReads": "மொத்த படிப்புகள்",
+ "uniqueFiles": "தனித்துவ கோப்புகள்",
+ "userMessages": "பயனர் செய்திகள்",
+ "percentOfTotal": "மொத்தத்தில் %"
+ },
+ "tokens": {
+ "apiCalls": "API அழைப்புகள்",
+ "cacheCreate": "Cache உருவாக்கம்",
+ "cacheEfficiency": "Cache திறன்",
+ "cacheRead": "Cache படிப்பு",
+ "cacheReadPct": "Cache படிப்பு %",
+ "coldStart": "Cold Start",
+ "cost": "செலவு",
+ "input": "உள்ளீடு",
+ "model": "Model",
+ "no": "இல்லை",
+ "output": "வெளியீடு",
+ "readWriteRatio": "R/W விகிதம்",
+ "title": "Token பயன்பாடு",
+ "total": "மொத்தம்",
+ "yes": "ஆம்"
+ },
+ "subagents": {
+ "title": "Subagents",
+ "metrics": {
+ "count": "எண்ணிக்கை",
+ "totalTokens": "மொத்த Tokens",
+ "totalDuration": "மொத்த கால அளவு",
+ "totalCost": "மொத்த செலவு"
+ },
+ "table": {
+ "description": "விளக்கம்",
+ "type": "வகை",
+ "tokens": "Tokens",
+ "duration": "கால அளவு",
+ "cost": "செலவு"
+ }
+ },
+ "overview": {
+ "title": "மேலோட்டம்",
+ "yes": "ஆம்",
+ "no": "இல்லை",
+ "metrics": {
+ "duration": "கால அளவு",
+ "messages": "செய்திகள்",
+ "contextUsage": "Context பயன்பாடு",
+ "compactions": "Compactions",
+ "branch": "Branch",
+ "subagents": "Subagents",
+ "project": "Project",
+ "sessionId": "Session ID"
+ }
+ },
+ "timeline": {
+ "title": "காலவரிசை & செயல்பாடு",
+ "idleAnalysis": "செயலற்ற நேர பகுப்பாய்வு",
+ "metrics": {
+ "idleGaps": "செயலற்ற இடைவெளிகள்",
+ "totalIdle": "மொத்த செயலற்ற நேரம்",
+ "activeTime": "செயலில் இருந்த நேரம்",
+ "idlePercent": "செயலற்ற %"
+ },
+ "modelSwitches": "Model மாற்றங்கள் ({{count}})",
+ "modelSwitches_one": "Model மாற்றங்கள் ({{count}})",
+ "modelSwitches_other": "Model மாற்றங்கள் ({{count}})",
+ "messageNumber": "செய்தி #{{number}}",
+ "keyEvents": "முக்கிய நிகழ்வுகள்",
+ "modelSwitches_few": "Model மாற்றங்கள் ({{count}})",
+ "modelSwitches_many": "Model மாற்றங்கள் ({{count}})"
+ },
+ "tools": {
+ "title": "Tool பயன்பாடு",
+ "summary": "{{toolCount}} tools முழுவதும் {{formattedCount}} மொத்த அழைப்புகள்",
+ "columns": {
+ "tool": "Tool",
+ "calls": "அழைப்புகள்",
+ "errors": "பிழைகள்",
+ "successPercent": "வெற்றி %",
+ "health": "ஆரோக்கியம்"
+ }
+ },
+ "git": {
+ "title": "Git செயல்பாடு",
+ "commits": "Commits",
+ "pushes": "Pushes",
+ "linesAdded": "சேர்க்கப்பட்ட வரிகள்",
+ "linesRemoved": "நீக்கப்பட்ட வரிகள்",
+ "branchesCreated": "உருவாக்கப்பட்ட Branches"
+ },
+ "friction": {
+ "title": "உராய்வு சமிக்ஞைகள்",
+ "rate": "உராய்வு விகிதம்: {{rate}}%",
+ "correctionsCount": "{{count}} திருத்தங்கள்",
+ "correctionsCount_one": "{{count}} திருத்தம்",
+ "corrections": "திருத்தங்கள்",
+ "thrashingSignals": "Thrashing சமிக்ஞைகள்",
+ "repeatedBashCommands": "மீண்டும் நிகழ்ந்த Bash கட்டளைகள்",
+ "reworkedFiles": "மறுவேலை செய்யப்பட்ட கோப்புகள் (3+ திருத்தங்கள்)",
+ "correctionsCount_few": "{{count}} திருத்தங்கள்",
+ "correctionsCount_many": "{{count}} திருத்தங்கள்",
+ "correctionsCount_other": "{{count}} திருத்தங்கள்"
+ },
+ "errors": {
+ "title": "பிழைகள்",
+ "permissionDenied": "அனுமதி மறுக்கப்பட்டது",
+ "messageIndex": "செய்தி #{{index}}",
+ "input": "உள்ளீடு",
+ "error": "பிழை",
+ "count": "{{count}} பிழைகள்",
+ "count_one": "{{count}} பிழை",
+ "permissionDenialCount": "{{count}} அனுமதி மறுப்புகள்",
+ "permissionDenialCount_one": "{{count}} அனுமதி மறுப்பு",
+ "count_few": "{{count}} பிழைகள்",
+ "count_many": "{{count}} பிழைகள்",
+ "count_other": "{{count}} பிழைகள்",
+ "permissionDenialCount_few": "{{count}} அனுமதி மறுப்புகள்",
+ "permissionDenialCount_many": "{{count}} அனுமதி மறுப்புகள்",
+ "permissionDenialCount_other": "{{count}} அனுமதி மறுப்புகள்"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ta/settings.json b/src/features/localization/renderer/locales/ta/settings.json
new file mode 100644
index 00000000..3089d8ce
--- /dev/null
+++ b/src/features/localization/renderer/locales/ta/settings.json
@@ -0,0 +1,994 @@
+{
+ "tabs": {
+ "advanced": {
+ "description": "Power-user விருப்பங்கள்: config ஐ ஏற்றுமதி/இறக்குமதி செய், இயல்புநிலைகளை மீட்டமை மற்றும் raw கட்டமைப்பு திருத்தம்.",
+ "label": "மேம்பட்டது"
+ },
+ "general": {
+ "description": "theme, மொழி, காட்சி அடர்த்தி மற்றும் தொடக்க நடத்தை போன்ற முக்கிய பயன்பாட்டு விருப்பங்கள்.",
+ "label": "பொது"
+ },
+ "infoAriaLabel": "{{label}} என்றால் என்ன?",
+ "notifications": {
+ "description": "agent செயல்பாடு, task நிறைவுகள் மற்றும் பிழைகள் பற்றி எப்போது, எவ்வாறு அறிவிக்கப்படுகிறீர்கள் என்பதைக் கட்டுப்படுத்தவும்.",
+ "label": "அறிவிப்புகள்"
+ }
+ },
+ "view": {
+ "description": "உங்கள் பயன்பாட்டு விருப்பங்களை நிர்வகிக்கவும்",
+ "loading": "அமைப்புகளை ஏற்றுகிறது...",
+ "title": "அமைப்புகள்"
+ },
+ "runtimeProvider": {
+ "actions": {
+ "cancel": "ரத்துசெய்",
+ "test": "சோதி"
+ },
+ "defaults": {
+ "allProjects": "அனைத்து projects",
+ "allProjectsHint": "சோதனைகள் {{project}} ஐப் பயன்படுத்துகின்றன. ஒரு project இல் override இல்லாவிட்டால் இயல்புநிலை பொருந்தும்.",
+ "loadingContexts": "contexts ஐ ஏற்றுகிறது...",
+ "projectHint": "சேமித்தல் {{project}} ஐ மட்டும் override செய்கிறது.",
+ "projectOverrideContext": "project override context",
+ "scopeDescriptionAllProjects": "தனது சொந்த OpenCode override இல்லாத ஒவ்வொரு project க்கும் இயல்புநிலை.",
+ "scopeDescriptionProject": "தேர்ந்தெடுத்த project ஐ மட்டும் override செய்யவும். இயங்கும் teams மாற்றப்படாது.",
+ "selectProjectContext": "project context ஐத் தேர்ந்தெடு",
+ "selectProjectHint": "உள்ளூர் மாதிரிகளைச் சோதிப்பதற்கு அல்லது இயல்புநிலைகளைச் சேமிப்பதற்கு முன் ஒரு project ஐத் தேர்ந்தெடுக்கவும்.",
+ "selectValidationContext": "சரிபார்ப்பு context ஐத் தேர்ந்தெடு",
+ "setAllProjectsDefault": "அனைத்து-projects இயல்புநிலையை அமை",
+ "setProjectDefault": "project இயல்புநிலையை அமை",
+ "thisProject": "இந்த project",
+ "title": "OpenCode இயல்புநிலைகள்",
+ "validationContext": "சரிபார்ப்பு context"
+ },
+ "diagnostics": {
+ "copied": "Diagnostics நகலெடுக்கப்பட்டது",
+ "copiedShort": "நகலெடுக்கப்பட்டது",
+ "copy": "Diagnostics ஐ நகலெடு",
+ "hints": "குறிப்புகள்",
+ "likelyCause": "சாத்தியமான காரணம்:",
+ "windowsSymlinkAdminHint": "Windows: Agent Teams AI ஐ Administrator ஆக இயக்கவும்"
+ },
+ "models": {
+ "alreadyDefault": "இது ஏற்கனவே தேர்ந்தெடுக்கப்பட்ட OpenCode இயல்புநிலை.",
+ "empty": "மாதிரிகள் எதுவும் கிடைக்கவில்லை.",
+ "emptyFree": "இலவச மாதிரிகள் எதுவும் கிடைக்கவில்லை.",
+ "emptyRecommended": "பரிந்துரைக்கப்பட்ட மாதிரிகள் எதுவும் கிடைக்கவில்லை.",
+ "emptyRecommendedFree": "பரிந்துரைக்கப்பட்ட இலவச மாதிரிகள் எதுவும் கிடைக்கவில்லை.",
+ "freeOnly": "இலவசம் மட்டும்",
+ "launchableDescription": "OpenCode config இலிருந்து அறியப்பட்ட routes, இலவச உள்ளமைந்த மாதிரிகள் மற்றும் தற்போதைய இயல்புநிலை. team launches க்குத் தயாராவதற்கு முன் உள்ளூர் routes க்கு வெற்றிகரமான சோதனை தேவை.",
+ "launchableTitle": "OpenCode மாதிரி routes",
+ "loadingRoutes": "OpenCode மாதிரி routes ஐ ஏற்றுகிறது...",
+ "noRoutesMatch": "\"{{query}}\" க்கு OpenCode மாதிரி routes எதுவும் பொருந்தவில்லை.",
+ "noneReported": "OpenCode மாதிரி routes இன்னும் புகாரளிக்கப்படவில்லை. OpenCode இல் ஒரு உள்ளூர் route ஐ கட்டமைக்கவும் அல்லது catalog providers ஐ ஆராய Providers tab ஐப் பயன்படுத்தவும்.",
+ "recommendedOnly": "பரிந்துரைக்கப்பட்டது மட்டும்",
+ "searchPlaceholder": "மாதிரிகளைத் தேடு",
+ "selectProjectBeforeTesting": "மாதிரிகளைச் சோதிப்பதற்கு முன் ஒரு project context ஐத் தேர்ந்தெடுக்கவும்.",
+ "selectProjectBeforeTestingDefaults": "OpenCode இயல்புநிலைகளைச் சோதிப்பதற்கு அல்லது சேமிப்பதற்கு முன் ஒரு project context ஐத் தேர்ந்தெடுக்கவும்.",
+ "testInProgress": "மாதிரி சோதனை ஏற்கனவே இயங்குகிறது.",
+ "useInTeamPicker": "team picker க்கு சேமி",
+ "validationContextRequired": "Test மற்றும் Set default ஐ இயக்க மேலே ஒரு சரிபார்ப்பு context ஐத் தேர்ந்தெடுக்கவும். team picker க்கு சேமித்தல் புதிய teams க்கான route ஐ மட்டுமே சேமிக்கிறது.",
+ "actionsUnavailable": "நடவடிக்கைகள் தற்காலிகமாகக் கிடைக்கவில்லை.",
+ "defaultSaveInProgress": "OpenCode இயல்புநிலை சேமிக்கப்படுகிறது.",
+ "routeUnavailableAuth": "இந்த மாதிரியைப் பயன்படுத்துவதற்கு முன் இந்த வழங்குநருக்கு அங்கீகாரம் தேவை.",
+ "routeUnavailableFailed": "இந்த மாதிரி route அதன் கடைசி execution சோதனையில் தோல்வியடைந்தது.",
+ "routeUnavailableGeneric": "இந்த மாதிரி route ஐ இப்போது பயன்படுத்த முடியாது.",
+ "routeUnavailableUnknown": "இந்த மாதிரி தற்போதைய OpenCode இயல்புநிலை, ஆனால் அது இன்னும் live catalog இல் கிடைக்கவில்லை."
+ },
+ "providers": {
+ "catalog": "OpenCode வழங்குநர் catalog",
+ "countFallback": "OpenCode வழங்குநர்கள்",
+ "description": "{{count}}. இணைக்கப்பட்ட மற்றும் பரிந்துரைக்கப்பட்ட வழங்குநர்கள் முதலில் காட்டப்படுகின்றன.",
+ "loadMore": "மேலும் வழங்குநர்களை ஏற்று",
+ "loading": "OpenCode வழங்குநர்களை ஏற்றுகிறது",
+ "noMatches": "அந்தத் தேடலுக்குப் பொருந்தும் வழங்குநர்கள் இல்லை.",
+ "noneReported": "managed runtime ஆல் OpenCode வழங்குநர்கள் எதுவும் புகாரளிக்கப்படவில்லை.",
+ "recommended": "பரிந்துரைக்கப்பட்டது",
+ "refreshCatalog": "catalog ஐ புதுப்பி",
+ "searchPlaceholder": "வழங்குநர்களைத் தேடு",
+ "description_few": "{{count}}. இணைக்கப்பட்ட மற்றும் பரிந்துரைக்கப்பட்ட வழங்குநர்கள் முதலில் காட்டப்படுகின்றன.",
+ "description_many": "{{count}}. இணைக்கப்பட்ட மற்றும் பரிந்துரைக்கப்பட்ட வழங்குநர்கள் முதலில் காட்டப்படுகின்றன.",
+ "description_one": "{{count}}. இணைக்கப்பட்ட மற்றும் பரிந்துரைக்கப்பட்ட வழங்குநர்கள் முதலில் காட்டப்படுகின்றன.",
+ "description_other": "{{count}}. இணைக்கப்பட்ட மற்றும் பரிந்துரைக்கப்பட்ட வழங்குநர்கள் முதலில் காட்டப்படுகின்றன."
+ },
+ "setup": {
+ "loading": "வழங்குநர் அமைப்பை ஏற்றுகிறது..."
+ },
+ "summary": {
+ "defaultModel": "OpenCode இயல்புநிலை: {{model}}",
+ "loading": "managed OpenCode runtime, இணைக்கப்பட்ட வழங்குநர்கள் மற்றும் மாதிரி இயல்புநிலைகளை ஏற்றுகிறது...",
+ "source": "மூலம்: {{source}}",
+ "title": "OpenCode runtime"
+ },
+ "tabs": {
+ "models": "மாதிரிகள்",
+ "providers": "வழங்குநர்கள்"
+ },
+ "modelRoutes": {
+ "searchPlaceholder": "மாதிரி routes ஐத் தேடு"
+ },
+ "badges": {
+ "usedInTeamPicker": "team picker க்கு சேமிக்கப்பட்டது",
+ "free": "இலவசம்",
+ "local": "உள்ளூர்",
+ "configured": "கட்டமைக்கப்பட்டது",
+ "knownRoute": "அறியப்பட்ட route",
+ "connected": "இணைக்கப்பட்டது",
+ "verified": "சரிபார்க்கப்பட்டது",
+ "needsTest": "சோதனை தேவை",
+ "failed": "தோல்வி",
+ "unknown": "தெரியாதது",
+ "default": "இயல்புநிலை"
+ },
+ "compatibleEndpoint": {
+ "baseUrlPlaceholder": "http://localhost:1234"
+ }
+ },
+ "general": {
+ "agentLanguage": {
+ "description": "agent தொடர்பாடலுக்கான மொழி",
+ "descriptionWithDetected": "agent தொடர்பாடலுக்கான மொழி (கண்டறியப்பட்டது: {{detected}})",
+ "emptyMessage": "மொழி எதுவும் கிடைக்கவில்லை.",
+ "label": "மொழி",
+ "searchPlaceholder": "மொழியைத் தேடு...",
+ "selectPlaceholder": "மொழியைத் தேர்ந்தெடு...",
+ "title": "Agent மொழி"
+ },
+ "appLanguage": {
+ "description": "பயன்பாட்டு இடைமுகத்திற்கான மொழி.",
+ "label": "மொழி",
+ "title": "பயன்பாட்டு மொழி"
+ },
+ "appearance": {
+ "autoExpandAIGroups": {
+ "description": "ஒரு transcript ஐத் திறக்கும்போது அல்லது புதிய செய்தியைப் பெறும்போது ஒவ்வொரு பதில் turn ஐயும் தானாக விரிவாக்கு",
+ "label": "இயல்பாக AI பதில்களை விரிவாக்கு"
+ },
+ "nativeTitleBar": {
+ "description": "தனிப்பயன் title bar க்குப் பதிலாக இயல்புநிலை கணினி window frame ஐப் பயன்படுத்து",
+ "label": "native title bar ஐப் பயன்படுத்து",
+ "restartConfirm": {
+ "confirmLabel": "மறுதொடக்கம்",
+ "message": "title bar மாற்றத்தைப் பயன்படுத்த பயன்பாடு மறுதொடக்கம் செய்ய வேண்டும். இப்போது மறுதொடக்கம் செய்யவா?",
+ "title": "மறுதொடக்கம் தேவை"
+ }
+ },
+ "theme": {
+ "description": "உங்கள் விருப்பமான வண்ண theme ஐத் தேர்ந்தெடுக்கவும்",
+ "label": "Theme",
+ "options": {
+ "dark": "இருண்ட",
+ "light": "வெளிர்",
+ "system": "கணினி"
+ }
+ },
+ "title": "தோற்றம்"
+ },
+ "browserAccess": {
+ "serverMode": {
+ "description": "உலாவியிலிருந்து UI ஐ அணுக அல்லது iframes இல் உட்பொதிக்க ஒரு HTTP server ஐத் தொடங்கு",
+ "label": "server பயன்முறையை இயக்கு"
+ },
+ "title": "உலாவி அணுகல்"
+ },
+ "localClaudeRoot": {
+ "actions": {
+ "selectFolder": "Folder ஐத் தேர்ந்தெடு",
+ "selectFolderManually": "Folder ஐ கைமுறையாகத் தேர்ந்தெடு",
+ "useAutoDetect": "Auto-Detect ஐப் பயன்படுத்து",
+ "useFolder": "Folder ஐப் பயன்படுத்து",
+ "usePath": "Path ஐப் பயன்படுத்து",
+ "useThisPath": "இந்த Path ஐப் பயன்படுத்து",
+ "useWsl": "Linux/WSL ஐப் பயன்படுத்துகிறீர்களா?"
+ },
+ "confirm": {
+ "noProjectsDir": {
+ "message": "இந்த folder இல் \"projects\" directory இல்லை. எப்படியும் தொடரவா?",
+ "title": "projects directory கிடைக்கவில்லை"
+ },
+ "notClaudeDir": {
+ "message": "இந்த folder இன் பெயர் \"{{folderName}}\", \".claude\" அல்ல. எப்படியும் தொடரவா?",
+ "title": "தேர்ந்தெடுத்த folder .claude அல்ல"
+ },
+ "noWslPaths": {
+ "message": "Claude தரவு கொண்ட WSL distros ஐ தானாகக் கண்டறிய முடியவில்லை. folder ஐ கைமுறையாகத் தேர்ந்தெடுக்கவா?",
+ "title": "WSL Claude paths எதுவும் கிடைக்கவில்லை"
+ },
+ "wslNoProjectsDir": {
+ "message": "\"{{path}}\" இல் \"projects\" directory இல்லை. எப்படியும் தொடரவா?",
+ "title": "WSL path இல் projects directory காணவில்லை"
+ }
+ },
+ "current": {
+ "autoDetected": "தானாகக் கண்டறியப்பட்டது: {{path}}",
+ "autoDetectedPath": "தானாகக் கண்டறியப்பட்ட path ஐப் பயன்படுத்துகிறது",
+ "customPath": "தனிப்பயன் path ஐப் பயன்படுத்துகிறது",
+ "label": "தற்போதைய உள்ளூர் Root"
+ },
+ "description": "உங்கள் Claude தரவு root ஆக எந்த உள்ளூர் folder கருதப்படுகிறது என்பதைத் தேர்ந்தெடுக்கவும்",
+ "errors": {
+ "detectWslFailed": "WSL Claude root paths ஐ கண்டறிய முடியவில்லை",
+ "loadFailed": "உள்ளூர் Claude root அமைப்புகளை ஏற்ற முடியவில்லை",
+ "updateFailed": "Claude root ஐ புதுப்பிக்க முடியவில்லை"
+ },
+ "title": "உள்ளூர் Claude Root",
+ "wslModal": {
+ "closeAriaLabel": "WSL path modal ஐ மூடு",
+ "description": "கண்டறியப்பட்ட WSL distributions மற்றும் Claude root வேட்பாளர்கள்",
+ "noProjectsDir": "projects directory எதுவும் கண்டறியப்படவில்லை",
+ "title": "WSL Claude Root ஐத் தேர்ந்தெடு"
+ }
+ },
+ "privacy": {
+ "telemetry": {
+ "description": "அநாமதேய crash மற்றும் செயல்திறன் தரவை அனுப்புவதன் மூலம் பயன்பாட்டை மேம்படுத்த உதவவும்",
+ "label": "crash அறிக்கைகளை அனுப்பு"
+ },
+ "title": "தனியுரிமை"
+ },
+ "server": {
+ "runningOn": "இயங்குகிறது",
+ "standaloneModeDescription": "standalone பயன்முறையில் இயங்குகிறது. HTTP server எப்போதும் செயலில் உள்ளது. கணினி அறிவிப்புகள் கிடைக்கவில்லை - அறிவிப்பு triggers பயன்பாட்டில் மட்டுமே பதிவாகின்றன.",
+ "title": "Server"
+ },
+ "startup": {
+ "launchAtLogin": {
+ "description": "நீங்கள் உள்நுழையும்போது பயன்பாட்டை தானாகத் தொடங்கு",
+ "label": "உள்நுழைவில் தொடங்கு"
+ },
+ "showDockIcon": {
+ "description": "dock இல் பயன்பாட்டு ஐகானைக் காட்டு (macOS)",
+ "label": "dock ஐகானைக் காட்டு"
+ },
+ "title": "தொடக்கம்"
+ }
+ },
+ "notifications": {
+ "dev": {
+ "descriptionPrefix": "development பயன்முறையில் அறிவிப்புகள் வேலை செய்யாமல் போகலாம். macOS பயன்பாட்டை \"Electron\" எனக் கண்டறிகிறது (bundle ID",
+ "descriptionSuffix": ") production பயன்பாட்டுப் பெயருக்குப் பதிலாக. அனுமதிகளைச் சரிபார்க்க System Settings > Notifications > Electron ஐச் சரிபார்க்கவும்.",
+ "title": "Dev பயன்முறை"
+ },
+ "ignoredRepositories": {
+ "description": "இந்த repositories இலிருந்து வரும் அறிவிப்புகள் புறக்கணிக்கப்படும்",
+ "empty": "புறக்கணிக்கப்பட்ட repositories இல்லை",
+ "selectPlaceholder": "புறக்கணிக்க repository ஐத் தேர்ந்தெடு...",
+ "title": "புறக்கணிக்கப்பட்ட Repositories"
+ },
+ "settings": {
+ "enabled": {
+ "description": "பிழைகள் மற்றும் நிகழ்வுகளுக்கு கணினி அறிவிப்புகளைக் காட்டு",
+ "label": "கணினி அறிவிப்புகளை இயக்கு"
+ },
+ "sound": {
+ "description": "அறிவிப்புகள் தோன்றும்போது ஒரு ஒலியை இயக்கு",
+ "label": "ஒலியை இயக்கு"
+ },
+ "subagentErrors": {
+ "description": "subagent sessions இல் உள்ள பிழைகளைக் கண்டறிந்து அறிவி",
+ "label": "subagent பிழைகளை சேர்"
+ },
+ "title": "அறிவிப்பு அமைப்புகள்"
+ },
+ "snooze": {
+ "clear": "Snooze ஐ அழி",
+ "description": "அறிவிப்புகளை தற்காலிகமாக இடைநிறுத்து",
+ "descriptionWithTime": "{{time}} வரை snooze செய்யப்பட்டது",
+ "label": "அறிவிப்புகளை snooze செய்",
+ "options": {
+ "15": "15 நிமிடங்கள்",
+ "30": "30 நிமிடங்கள்",
+ "60": "1 மணி நேரம்",
+ "120": "2 மணி நேரம்",
+ "240": "4 மணி நேரம்",
+ "-1": "நாளை வரை"
+ },
+ "selectDuration": "கால அளவைத் தேர்ந்தெடு..."
+ },
+ "taskCompletion": {
+ "description": "Claude tasks ஐ முடிக்கும்போது native OS அறிவிப்புகளைப் பெறுங்கள் - ஒலிகள், banners மற்றும் Dock/taskbar badges. macOS, Linux மற்றும் Windows இல் வேலை செய்கிறது.",
+ "installPlugin": "claude-notifications-go plugin ஐ நிறுவு",
+ "title": "Task நிறைவு அறிவிப்புகள்"
+ },
+ "team": {
+ "allTasksCompleted": {
+ "description": "ஒரு team இல் உள்ள ஒவ்வொரு task உம் completed நிலையை அடையும்போது அறிவி",
+ "label": "அனைத்து tasks முடிந்தன"
+ },
+ "autoResumeOnRateLimit": {
+ "description": "Claude ஒரு மீட்டமைப்பு நேரத்தை புகாரளிக்கும்போது, வரம்பு மீட்டமைக்கப்பட்ட பிறகு team lead க்கு ஒரு பின்தொடர் nudge ஐ அட்டவணைப்படுத்து",
+ "label": "rate limit க்குப் பிறகு auto-resume"
+ },
+ "clarifications": {
+ "description": "ஒரு task க்கு உங்கள் உள்ளீடு தேவைப்படும்போது native OS அறிவிப்புகளைக் காட்டு",
+ "label": "Task தெளிவுபடுத்தல் அறிவிப்புகள்"
+ },
+ "crossTeamMessage": {
+ "description": "மற்றொரு team இலிருந்து ஒரு செய்தி வரும்போது அறிவி",
+ "label": "Cross-team செய்தி அறிவிப்புகள்"
+ },
+ "leadInbox": {
+ "description": "teammates team lead க்கு செய்திகளை அனுப்பும்போது அறிவி",
+ "label": "Lead inbox அறிவிப்புகள்"
+ },
+ "statusChange": {
+ "description": "ஒரு task இன் நிலை மாறும்போது native OS அறிவிப்புகளைக் காட்டு",
+ "label": "Task நிலை மாற்ற அறிவிப்புகள்",
+ "onlySolo": {
+ "description": "team இல் teammates இல்லாதபோது மட்டும் அறிவி",
+ "label": "Solo பயன்முறையில் மட்டும்"
+ },
+ "statuses": {
+ "description": "எந்த இலக்கு நிலைகள் ஒரு அறிவிப்பைத் தூண்டுகின்றன",
+ "label": "இந்த நிலைகளில் அறிவி",
+ "options": {
+ "approved": "ஒப்புதல் அளிக்கப்பட்டது",
+ "completed": "முடிந்தது",
+ "deleted": "நீக்கப்பட்டது",
+ "in_progress": "தொடங்கப்பட்டது",
+ "needsFix": "திருத்தங்கள் தேவை",
+ "pending": "நிலுவையில்",
+ "review": "மதிப்பாய்வு"
+ }
+ }
+ },
+ "taskComments": {
+ "description": "agents tasks இல் கருத்து தெரிவிக்கும்போது native OS அறிவிப்புகளைக் காட்டு",
+ "label": "Task கருத்து அறிவிப்புகள்"
+ },
+ "taskCreated": {
+ "description": "ஒரு புதிய task உருவாக்கப்படும்போது native OS அறிவிப்புகளைக் காட்டு",
+ "label": "Task உருவாக்க அறிவிப்புகள்"
+ },
+ "teamLaunched": {
+ "description": "ஒரு team தொடங்குதலை முடித்து தயாராகும்போது அறிவி",
+ "label": "Team தொடக்க அறிவிப்புகள்"
+ },
+ "title": "Team அறிவிப்புகள்",
+ "toolApproval": {
+ "description": "பயன்பாடு focus இல் இல்லாதபோது ஒரு tool க்கு உங்கள் ஒப்புதல் (Allow/Deny) தேவைப்படும்போது அறிவி",
+ "label": "Tool ஒப்புதல் அறிவிப்புகள்"
+ },
+ "userInbox": {
+ "description": "teammates உங்களுக்கு செய்திகளை அனுப்பும்போது அறிவி",
+ "label": "பயனர் inbox அறிவிப்புகள்"
+ }
+ },
+ "test": {
+ "action": "சோதனையை அனுப்பு",
+ "description": "வழங்கலைச் சரிபார்க்க ஒரு சோதனை அறிவிப்பை அனுப்பு",
+ "failedToSend": "சோதனை அறிவிப்பை அனுப்ப முடியவில்லை",
+ "label": "சோதனை அறிவிப்பு",
+ "sending": "அனுப்புகிறது...",
+ "sent": "அனுப்பப்பட்டது!",
+ "unknownError": "தெரியாத பிழை"
+ }
+ },
+ "advanced": {
+ "about": {
+ "appIconAlt": "பயன்பாட்டு ஐகான்",
+ "description": "இணையாக சுயமாக வேலை செய்யும், teams முழுவதும் தொடர்பு கொள்ளும், மற்றும் kanban board இல் tasks ஐ நிர்வகிக்கும் AI agent teams ஐ உருவாக்கவும் - உள்ளமைந்த code review, நேரடி process கண்காணிப்பு மற்றும் முழு tool தெரிவுத்தன்மையுடன்.",
+ "standalone": "Standalone",
+ "title": "பற்றி",
+ "version": "பதிப்பு {{version}}"
+ },
+ "configuration": {
+ "editConfig": "Config ஐ திருத்து",
+ "exportConfig": "Config ஐ ஏற்றுமதி செய்",
+ "importConfig": "Config ஐ இறக்குமதி செய்",
+ "openInEditor": "Editor இல் திற",
+ "resetToDefaults": "இயல்புநிலைகளுக்கு மீட்டமை",
+ "title": "கட்டமைப்பு"
+ },
+ "updates": {
+ "available": "v{{version}} கிடைக்கிறது",
+ "check": "புதுப்பிப்புகளைச் சரிபார்",
+ "checking": "சரிபார்க்கிறது...",
+ "ready": "புதுப்பிப்பு தயார்",
+ "unknownVersion": "தெரியாதது",
+ "upToDate": "புதுப்பித்த நிலையில் உள்ளது"
+ },
+ "appName": "Agent Teams AI"
+ },
+ "configEditor": {
+ "errors": {
+ "loadFailed": "config ஐ ஏற்ற முடியவில்லை",
+ "saveFailed": "config ஐ சேமிக்க முடியவில்லை"
+ },
+ "footer": {
+ "autoSave": "திருத்திய பிறகு மாற்றங்கள் தானாகச் சேமிக்கப்படும்",
+ "toClose": "மூட",
+ "escapeKey": "Esc"
+ },
+ "loading": "config ஐ ஏற்றுகிறது...",
+ "status": {
+ "invalidJson": "தவறான JSON",
+ "saveFailed": "சேமிப்பு தோல்வியடைந்தது",
+ "saved": "சேமிக்கப்பட்டது",
+ "saving": "சேமிக்கிறது..."
+ },
+ "title": "கட்டமைப்பைத் திருத்து"
+ },
+ "notificationTriggers": {
+ "add": {
+ "cancel": "ரத்துசெய்",
+ "submit": "Trigger ஐ சேர்",
+ "title": "தனிப்பயன் Trigger ஐ சேர்"
+ },
+ "builtin": {
+ "description": "பயன்பாட்டுடன் வரும் இயல்புநிலை triggers. நீங்கள் அவற்றை இயக்கலாம் அல்லது முடக்கலாம் மற்றும் அவற்றின் patterns ஐ தனிப்பயனாக்கலாம்.",
+ "title": "உள்ளமைந்த Triggers"
+ },
+ "card": {
+ "builtinBadge": "உள்ளமைந்தது",
+ "collapseAriaLabel": "சுருக்கு",
+ "deleteAriaLabel": "trigger ஐ நீக்கு",
+ "editNameAriaLabel": "பெயரைத் திருத்து",
+ "expandAriaLabel": "விரிவாக்கு"
+ },
+ "color": {
+ "customHexTitle": "தனிப்பயன் hex நிறம்",
+ "invalidHex": "தவறான hex"
+ },
+ "configuration": {
+ "alertIfGreaterThan": "எச்சரி >",
+ "emptyPatternHint": "அனைத்து உள்ளடக்கத்துடனும் பொருந்த காலியாக விடவும். JavaScript regex தொடரியலைப் பயன்படுத்துகிறது.",
+ "errorStatusDescription": "ஒரு tool execution ஒரு பிழையைப் புகாரளிக்கும்போது (is_error: true) தூண்டுகிறது.",
+ "tokensUnit": "tokens",
+ "matchPatternPlaceholder": "எ.கா., error|failed|exception"
+ },
+ "custom": {
+ "description": "குறிப்பிட்ட patterns அல்லது tool வெளியீடுகளுக்கு அறிவிப்பு பெற உங்கள் சொந்த triggers ஐ உருவாக்கவும்.",
+ "empty": "இன்னும் தனிப்பயன் triggers எதுவும் கட்டமைக்கப்படவில்லை.",
+ "title": "தனிப்பயன் Triggers"
+ },
+ "errors": {
+ "invalidRegexPattern": "தவறான regex pattern"
+ },
+ "fields": {
+ "contentType": "உள்ளடக்க வகை",
+ "matchField": "பொருத்தும் Field",
+ "matchPattern": "பொருத்தும் Pattern (Regex)",
+ "scopeToolName": "Scope / Tool பெயர்",
+ "scopeToolNameOptional": "Scope / Tool பெயர் (விருப்பத்திற்குரியது)",
+ "threshold": "வரம்பு",
+ "tokenType": "Token வகை",
+ "triggerNamePlaceholder": "எ.கா., Build Failure Alert",
+ "triggerNameRequired": "Trigger பெயர் *"
+ },
+ "ignorePatterns": {
+ "hint": "சேர்க்க Enter ஐ அழுத்தவும். ஏதேனும் pattern பொருந்தினால் அறிவிப்பு தவிர்க்கப்படும்.",
+ "placeholder": "புறக்கணிக்கும் regex ஐ சேர்...",
+ "removeAriaLabel": "புறக்கணிக்கும் pattern ஐ அகற்று",
+ "summary": "மேம்பட்டது: விலக்கு விதிகள்",
+ "title": "புறக்கணிக்கும் Patterns (பொருந்தினால் தவிர்)"
+ },
+ "options": {
+ "contentTypes": {
+ "text": "Text வெளியீடு",
+ "thinking": "Thinking",
+ "tool_result": "Tool முடிவு",
+ "tool_use": "Tool பயன்பாடு"
+ },
+ "matchFields": {
+ "args": "வாதங்கள்",
+ "command": "கட்டளை",
+ "content": "உள்ளடக்கம்",
+ "description": "விளக்கம்",
+ "file_path": "கோப்பு Path",
+ "fullInput": "முழு Input (JSON)",
+ "glob": "Glob வடிப்பான்",
+ "new_string": "புதிய String",
+ "old_string": "பழைய String",
+ "path": "Path",
+ "pattern": "Pattern",
+ "prompt": "Prompt",
+ "query": "வினவல்",
+ "skill": "Skill பெயர்",
+ "subagent_type": "Subagent வகை",
+ "text": "Text உள்ளடக்கம்",
+ "thinking": "Thinking உள்ளடக்கம்",
+ "url": "URL"
+ },
+ "modes": {
+ "content_match": "உள்ளடக்க Pattern",
+ "error_status": "Execution பிழை",
+ "token_threshold": "அதிக Token பயன்பாடு"
+ },
+ "tokenTypes": {
+ "input": "Input Tokens",
+ "output": "Output Tokens",
+ "total": "மொத்த Tokens"
+ },
+ "toolNames": {
+ "anyTool": "எந்த Tool"
+ }
+ },
+ "preview": {
+ "defaultTestTriggerName": "Test Trigger",
+ "detectedSuffix": "பிழைகள் கண்டறியப்பட்டிருக்கும்",
+ "more": "...மற்றும் {{count}} மேலும்",
+ "more_few": "...மற்றும் {{count}} மேலும்",
+ "more_many": "...மற்றும் {{count}} மேலும்",
+ "more_one": "...மற்றும் {{count}} மேலும்",
+ "more_other": "...மற்றும் {{count}} மேலும்",
+ "testTrigger": "Test Trigger",
+ "testing": "சோதிக்கிறது...",
+ "title": "முன்னோட்டம்",
+ "truncatedWarning": "தேடல் முன்கூட்டியே நிறுத்தப்பட்டது (timeout அல்லது count வரம்பு). உண்மையான பொருத்தங்கள் அதிகமாக இருக்கலாம்.",
+ "viewSession": "Session ஐக் காண்"
+ },
+ "repositoryScope": {
+ "empty": "repositories எதுவும் தேர்ந்தெடுக்கப்படவில்லை - trigger அனைத்து repositories க்கும் பொருந்தும்",
+ "hint": "repositories தேர்ந்தெடுக்கப்படும்போது, இந்த trigger அந்த repositories இல் உள்ள பிழைகளுக்கு மட்டுமே தூண்டுகிறது.",
+ "placeholder": "சேர்க்க repository ஐத் தேர்ந்தெடு...",
+ "summary": "மேம்பட்டது: Repository Scope",
+ "title": "Repositories க்கு வரம்பிடு (தேர்ந்தெடுத்த repositories க்கு மட்டுமே பொருந்தும்)"
+ },
+ "sections": {
+ "configuration": "கட்டமைப்பு",
+ "dotColor": "புள்ளி நிறம்",
+ "generalInfo": "பொது தகவல்",
+ "triggerCondition": "Trigger நிபந்தனை"
+ }
+ },
+ "workspaceProfiles": {
+ "actions": {
+ "addProfile": "Profile ஐ சேர்",
+ "cancel": "ரத்துசெய்",
+ "deleteProfile": "profile ஐ நீக்கு",
+ "editProfile": "profile ஐ திருத்து",
+ "save": "சேமி"
+ },
+ "authMethods": {
+ "agent": "SSH Agent",
+ "auto": "Auto (SSH Config இலிருந்து)",
+ "password": "கடவுச்சொல்",
+ "privateKey": "Private Key"
+ },
+ "deleteConfirm": {
+ "confirmLabel": "நீக்கு",
+ "message": "\"{{name}}\" ஐ நிச்சயமாக நீக்க விரும்புகிறீர்களா? இதை மீட்டெடுக்க முடியாது.",
+ "title": "Profile ஐ நீக்கு"
+ },
+ "description": "விரைவான மறுஇணைப்புக்கு SSH இணைப்பு profiles ஐ சேமி",
+ "empty": {
+ "description": "விரைவாக இணைக்க ஒரு SSH profile ஐ சேர்",
+ "title": "சேமிக்கப்பட்ட profiles இல்லை"
+ },
+ "form": {
+ "authentication": "அங்கீகாரம்",
+ "host": "Host",
+ "name": "பெயர்",
+ "passwordPrompt": "இணைக்கும்போது கடவுச்சொல் கேட்கப்படும்.",
+ "port": "Port",
+ "privateKeyPath": "Private Key Path",
+ "username": "பயனர்பெயர்",
+ "namePlaceholder": "என் Server",
+ "hostPlaceholder": "hostname அல்லது IP",
+ "usernamePlaceholder": "user"
+ },
+ "loading": "profiles ஐ ஏற்றுகிறது...",
+ "title": "Workspace Profiles"
+ },
+ "connection": {
+ "actions": {
+ "connect": "இணை",
+ "connecting": "இணைக்கிறது...",
+ "disconnect": "துண்டி",
+ "testConnection": "இணைப்பைச் சோதி",
+ "testing": "சோதிக்கிறது..."
+ },
+ "currentMode": {
+ "description": "session கோப்புகளுக்கான தரவு மூலம்",
+ "label": "தற்போதைய பயன்முறை",
+ "local": "உள்ளூர் ({{path}})"
+ },
+ "description": "அங்கு இயங்கும் Claude Code sessions ஐக் காண ஒரு தொலைநிலை இயந்திரத்துடன் இணைக்கவும்",
+ "form": {
+ "authentication": "அங்கீகாரம்",
+ "host": "Host",
+ "password": "கடவுச்சொல்",
+ "port": "Port",
+ "privateKeyPath": "Private Key Path",
+ "username": "பயனர்பெயர்",
+ "hostPlaceholder": "hostname அல்லது SSH config alias",
+ "usernamePlaceholder": "user"
+ },
+ "savedProfiles": {
+ "title": "சேமிக்கப்பட்ட Profiles"
+ },
+ "ssh": {
+ "title": "SSH இணைப்பு"
+ },
+ "status": {
+ "connectedTo": "{{host}} உடன் இணைக்கப்பட்டது",
+ "remoteSessions": "SSH வழியாக தொலைநிலை sessions ஐக் காண்கிறது"
+ },
+ "test": {
+ "failed": "இணைப்பு தோல்வியடைந்தது: {{error}}",
+ "success": "இணைப்பு வெற்றிகரமானது",
+ "unknownError": "தெரியாத பிழை"
+ },
+ "title": "தொலைநிலை இணைப்பு"
+ },
+ "providerRuntime": {
+ "actions": {
+ "cancel": "ரத்துசெய்",
+ "cancelLogin": "உள்நுழைவை ரத்துசெய்",
+ "connectChatGpt": "ChatGPT ஐ இணை",
+ "delete": "நீக்கு",
+ "disable": "முடக்கு",
+ "disconnectAccount": "கணக்கைத் துண்டி",
+ "generateLink": "இணைப்பை உருவாக்கு",
+ "openLogin": "உள்நுழைவைத் திற",
+ "reconnectAnthropic": "Anthropic ஐ மீண்டும் இணை",
+ "refresh": "புதுப்பி",
+ "replaceKey": "key ஐ மாற்று",
+ "saveEndpoint": "endpoint ஐ சேமி",
+ "saveKey": "key ஐ சேமி",
+ "saving": "சேமிக்கிறது...",
+ "setApiKey": "API key ஐ அமை",
+ "updateKey": "key ஐ புதுப்பி",
+ "useCode": "குறியீட்டைப் பயன்படுத்து"
+ },
+ "apiKey": {
+ "loadingStoredCredentials": "சேமிக்கப்பட்ட credentials ஐ ஏற்றுகிறது...",
+ "projectScope": "Project",
+ "scope": "Scope",
+ "storedIn": "{{backend}} இல் சேமிக்கப்பட்டது",
+ "userScope": "பயனர்",
+ "storedInApp": "பயன்பாட்டில் சேமிக்கப்பட்டது",
+ "providers": {
+ "anthropic": {
+ "name": "Anthropic API Key",
+ "title": "API key",
+ "description": "API-billed அணுகலுக்கு நேரடி Anthropic API key ஐப் பயன்படுத்தவும். நீங்கள் மீண்டும் மாறும்போது உங்கள் Anthropic subscription session கிடைக்கும்.",
+ "placeholder": "sk-ant-..."
+ },
+ "codex": {
+ "name": "Codex API Key",
+ "title": "API key",
+ "description": "இரண்டாம் நிலை Codex auth path ஆக OpenAI API key ஐப் பயன்படுத்தவும். நீங்கள் Codex ஐ API key பயன்முறைக்கு மாற்றினால், native launches க்காக பயன்பாடு OPENAI_API_KEY ஐ CODEX_API_KEY இல் பிரதிபலிக்கும்.",
+ "placeholder": "sk-proj-..."
+ },
+ "gemini": {
+ "name": "Gemini API Key",
+ "title": "API அணுகல்",
+ "description": "Gemini API backend க்கு `GEMINI_API_KEY` ஐப் பயன்படுத்தவும். CLI SDK மற்றும் ADC க்கு இது தேவையில்லை.",
+ "placeholder": "AIza..."
+ }
+ }
+ },
+ "codex": {
+ "account": {
+ "appServer": "App-server: {{state}}",
+ "connected": "இணைக்கப்பட்டது",
+ "description": "subscription-backed native launches ஐ இயக்கும் உள்ளூர் Codex app-server கணக்கு session ஐ நிர்வகிக்கவும்.",
+ "loginInProgress": "உள்நுழைவு முன்னேற்றத்தில்",
+ "plan": "திட்டம்: {{plan}}",
+ "reconnectRequired": "மீண்டும் இணைப்பு தேவை",
+ "title": "ChatGPT கணக்கு",
+ "hints": {
+ "autoUsesApiKeyUntilChatgpt": "{{message}} ChatGPT இணைக்கப்படும் வரை Auto கண்டறியப்பட்ட API key ஐத் தொடர்ந்து பயன்படுத்தும்.",
+ "detectedApiKeyNeedsApiMode": "{{message}} கண்டறியப்பட்ட API key ஆனது நீங்கள் Codex ஐ API key பயன்முறைக்கு மாற்றிய பிறகே பயன்படுத்தப்படுகிறது.",
+ "localArtifactsNoSession": "Codex CLI தற்போது செயலில் உள்ள ChatGPT கணக்கு இல்லை எனப் புகாரளிக்கிறது. உள்ளூர் Codex கணக்கு தரவு உள்ளது, ஆனால் செயலில் உள்ள managed session எதுவும் தேர்ந்தெடுக்கப்படவில்லை. Codex CLI ஒன்றைப் பார்த்த பிறகே பயன்பாட்டு வரம்புகள் இங்கே தோன்றும்.",
+ "noActiveAccount": "Codex CLI தற்போது செயலில் உள்ள ChatGPT கணக்கு இல்லை எனப் புகாரளிக்கிறது. Codex CLI ஒன்றைப் பார்த்த பிறகே பயன்பாட்டு வரம்புகள் இங்கே தோன்றும்.",
+ "reconnectBeforeUsage": "Codex இல் உள்ளூரில் தேர்ந்தெடுக்கப்பட்ட ChatGPT கணக்கு உள்ளது, ஆனால் இங்கே பயன்பாட்டு வரம்புகள் ஏற்றப்படுவதற்கு முன் தற்போதைய session ஐ மீண்டும் இணைக்க வேண்டும்.",
+ "usageLimitsAfterReport": "இணைக்கப்பட்ட ChatGPT கணக்கிற்கு Codex அவற்றைப் புகாரளித்த பிறகு பயன்பாட்டு வரம்புகள் இங்கே தோன்றும்."
+ }
+ },
+ "install": {
+ "checking": "சரிபார்க்கிறது",
+ "downloading": "பதிவிறக்குகிறது",
+ "installCli": "Codex CLI ஐ நிறுவு",
+ "installing": "நிறுவுகிறது",
+ "retryInstall": "நிறுவலை மீண்டும் முயற்சி",
+ "title": "Codex CLI ஐ app data இல் நிறுவு"
+ },
+ "rateLimits": {
+ "credits": "Credits",
+ "creditsDescription": "Credits ஆனது window-based subscription பயன்பாட்டிலிருந்து தனியாகக் காட்டப்படுகின்றன மற்றும் plan-backed ChatGPT sessions க்கு கிடைக்காமல் போகலாம்.",
+ "noSecondaryWindow": "இந்தக் கணக்கு snapshot க்கு Codex இரண்டாம் நிலை window ஐ வழங்கவில்லை.",
+ "notReported": "புகாரளிக்கப்படவில்லை",
+ "primaryReset": "முதன்மை மீட்டமைப்பு",
+ "primaryUsed": "முதன்மை பயன்படுத்தப்பட்டது",
+ "primaryWindow": "முதன்மை window",
+ "remainingLeft": "{{value}} மீதம்",
+ "remainingUnknown": "மீதம் தெரியாது",
+ "secondaryReset": "இரண்டாம் நிலை மீட்டமைப்பு",
+ "secondaryUsed": "இரண்டாம் நிலை பயன்படுத்தப்பட்டது",
+ "secondaryWindow": "இரண்டாம் நிலை window",
+ "usedQuotaNote": "இந்த சதவீதங்கள் மீதமுள்ள quota ஐ அல்ல, பயன்படுத்தப்பட்ட quota ஐக் காட்டுகின்றன.",
+ "weeklyReset": "வாராந்திர மீட்டமைப்பு",
+ "weeklyUsed": "வாராந்திரம் பயன்படுத்தப்பட்டது",
+ "weeklyUsedOneWeek": "வாராந்திரம் பயன்படுத்தப்பட்டது (1w)",
+ "weeklyWindow": "வாராந்திர window",
+ "secondaryFallback": "இரண்டாம் நிலை",
+ "secondaryWindowNote": " வாராந்திர வரம்புகள் {{window}} window இல் தனியாகக் காட்டப்படுகின்றன.",
+ "usageExplanationGeneric": "மீதமுள்ள quota ஐ அல்ல, பயன்படுத்தப்பட்ட quota ஐக் காட்டுகிறது.",
+ "usageExplanationWindowOnly": "மீதமுள்ள quota ஐ அல்ல, தற்போதைய {{window}} window இல் பயன்படுத்தப்பட்ட quota ஐக் காட்டுகிறது.",
+ "usageExplanationWithRemaining": "{{used}} பயன்படுத்தப்பட்டது - தற்போதைய {{window}} window இல் சுமார் {{remaining}} மீதம்."
+ }
+ },
+ "compatibleEndpoint": {
+ "authToken": "Auth token",
+ "authTokenMissing": "Auth token கட்டமைக்கப்படவில்லை.",
+ "baseUrl": "Base URL",
+ "description": "Anthropic-compatible உள்ளூர் runtime endpoint ஐப் பயன்படுத்தவும்.",
+ "keepSavedToken": "சேமிக்கப்பட்ட token ஐ வைத்திருக்க காலியாக விடவும்",
+ "title": "உள்ளூர் / compatible endpoint",
+ "tokenStatus": "Token {{status}}",
+ "validation": {
+ "baseUrlRequired": "Base URL தேவை",
+ "firstPartyAnthropic": "first-party Anthropic க்கு Auto, Subscription அல்லது API key ஐப் பயன்படுத்தவும்",
+ "httpRequired": "Base URL http:// அல்லது https:// ஐப் பயன்படுத்த வேண்டும்",
+ "invalidUrl": "தவறான URL",
+ "noCredentials": "Base URL இல் credentials இருக்கக் கூடாது"
+ },
+ "status": {
+ "endpointDisabledTokenKept": "Endpoint முடக்கப்பட்டது. சேமிக்கப்பட்ட token வைக்கப்பட்டது.",
+ "endpointSaved": "Endpoint சேமிக்கப்பட்டது",
+ "endpointSavedTokenMissing": "Endpoint சேமிக்கப்பட்டது. Auth token கட்டமைக்கப்படவில்லை."
+ }
+ },
+ "connection": {
+ "authenticationMethod": "அங்கீகார முறை",
+ "descriptions": {
+ "anthropic": "app-launched Anthropic sessions எவ்வாறு அங்கீகரிக்கின்றன என்பதைத் தேர்ந்தெடுக்கவும்.",
+ "codex": "native runtime தொடங்கும்போது Codex உங்கள் ChatGPT subscription ஐ அல்லது API key ஐ விரும்ப வேண்டுமா என்பதைத் தேர்ந்தெடுக்கவும்.",
+ "gemini": "விருப்ப API அணுகலை கட்டமைக்கவும். CLI SDK மற்றும் ADC இன்னும் தானாகக் கண்டறியப்படுகின்றன.",
+ "opencode": "OpenCode அங்கீகாரம் மற்றும் வழங்குநர் inventory ஆனது OpenCode runtime ஆல் நிர்வகிக்கப்படுகிறது."
+ },
+ "method": "இணைப்பு முறை",
+ "mode": "பயன்முறை: {{mode}}",
+ "selected": "தேர்ந்தெடுக்கப்பட்டது",
+ "switching": "மாறுகிறது...",
+ "title": "இணைப்பு"
+ },
+ "connectionCards": {
+ "apiKey": {
+ "title": "API key"
+ },
+ "anthropic": {
+ "apiKeyDescription": "ANTHROPIC_API_KEY மற்றும் Anthropic API billing ஐப் பயன்படுத்து.",
+ "autoDescription": "Anthropic runtime இயல்புநிலைகள் மற்றும் கிடைக்கும் சிறந்த உள்ளூர் credential ஐப் பயன்படுத்து.",
+ "hint": "Auto ஆனது Anthropic ஐ அதன் இயல்புநிலை உள்ளூர் credential resolution இல் வைத்திருக்கிறது.",
+ "subscriptionDescription": "உங்கள் உள்ளூர் Anthropic sign-in session மற்றும் subscription அணுகலைப் பயன்படுத்து.",
+ "subscriptionTitle": "Anthropic subscription"
+ },
+ "auto": {
+ "title": "Auto"
+ },
+ "codex": {
+ "apiKeyDescription": "native Codex launches க்காக OPENAI_API_KEY மற்றும் CODEX_API_KEY billing ஐப் பயன்படுத்து.",
+ "autoDescription": "உங்கள் ChatGPT கணக்கு மற்றும் subscription ஐ விரும்பு. தேவைப்பட்டால் மட்டும் API key பயன்முறையைப் பயன்படுத்து.",
+ "chatgptDescription": "உங்கள் இணைக்கப்பட்ட ChatGPT கணக்கு மற்றும் Codex subscription ஐப் பயன்படுத்து.",
+ "chatgptTitle": "ChatGPT கணக்கு",
+ "hint": "Codex எப்போதும் native runtime வழியாக இயங்குகிறது. Auto ஆனது API-key credentials க்கு மாறுவதற்கு முன் உங்கள் ChatGPT கணக்கை விரும்புகிறது."
+ }
+ },
+ "description": "ஒவ்வொரு வழங்குநரும் எவ்வாறு இணைக்கிறது மற்றும், ஆதரிக்கப்படும்போது, multimodel runtime எந்த backend ஐப் பயன்படுத்த வேண்டும் என்பதை நிர்வகிக்கவும்.",
+ "fastMode": {
+ "defaultOff": "இயல்பாக ஆஃப்",
+ "description": "resolved மாதிரியும் runtime உம் அனுமதிக்கும்போது புதிய Anthropic team launches க்கு இயல்பாக Claude Code Fast பயன்முறையைப் பயன்படுத்து.",
+ "disabledHint": "ஒரு team வெளிப்படையாக Fast பயன்முறையை இயக்காவிட்டால் புதிய Anthropic launches சாதாரண வேகத்தில் இருக்கும்.",
+ "enabledHint": "resolved மாதிரி ஆதரிக்கும்போது புதிய Anthropic launches இயல்பாக Fast பயன்முறையைக் கோரும்.",
+ "notExposed": "இந்த Anthropic runtime Fast பயன்முறையை வெளிப்படுத்தவில்லை.",
+ "preferFast": "Fast ஐ விரும்பு",
+ "title": "Fast பயன்முறை இயல்புநிலை",
+ "unavailableForRuntime": "இந்த Anthropic runtime க்கு Fast பயன்முறை தற்போது கிடைக்கவில்லை."
+ },
+ "alerts": {
+ "anthropicApiKeyMissing": "API key பயன்முறை தேர்ந்தெடுக்கப்பட்டுள்ளது, ஆனால் இன்னும் Anthropic API credential எதுவும் கிடைக்கவில்லை.",
+ "anthropicStoredKeyAvailable": "சேமிக்கப்பட்ட API key கிடைக்கிறது, ஆனால் app-launched Anthropic sessions ஆனது நீங்கள் API key பயன்முறைக்கு மாறிய பிறகே அதைப் பயன்படுத்துகின்றன.",
+ "anthropicSubscriptionMissing": "Anthropic subscription பயன்முறை தேர்ந்தெடுக்கப்பட்டுள்ளது. இந்த வழங்குநரைப் பயன்படுத்த Anthropic உடன் sign in செய்யவும்.",
+ "authTokenMissing": "Auth token கட்டமைக்கப்படவில்லை. பல உள்ளூர் Anthropic-compatible endpoints க்கு காலியாக இல்லாத token தேவை.",
+ "chatgptLoginPending": "ChatGPT கணக்கு உள்நுழைவு முடிவதற்காகக் காத்திருக்கிறது...",
+ "chatgptLoginStarting": "ChatGPT உள்நுழைவைத் தொடங்குகிறது...",
+ "codexApiKeyMissing": "API key பயன்முறை தேர்ந்தெடுக்கப்பட்டுள்ளது, ஆனால் இன்னும் OPENAI_API_KEY அல்லது CODEX_API_KEY credential எதுவும் கிடைக்கவில்லை.",
+ "codexLocalArtifactsNoSession": "Codex CLI இல் தற்போது செயலில் உள்ள ChatGPT கணக்கு இல்லை. உள்ளூர் Codex கணக்கு தரவு உள்ளது, ஆனால் செயலில் உள்ள managed session எதுவும் தேர்ந்தெடுக்கப்படவில்லை.",
+ "codexNeedsReconnect": "Codex இல் உள்ளூரில் தேர்ந்தெடுக்கப்பட்ட ChatGPT கணக்கு உள்ளது, ஆனால் தற்போதைய session ஐ மீண்டும் இணைக்க வேண்டும்.",
+ "codexNoChatgptAccount": "Codex CLI இல் தற்போது செயலில் உள்ள ChatGPT கணக்கு இல்லை. உங்கள் subscription ஐப் பயன்படுத்த ChatGPT ஐ இணைக்கவும்.",
+ "codexNoCredential": "இன்னும் ChatGPT கணக்கு அல்லது API key எதுவும் கிடைக்கவில்லை.",
+ "geminiApiUnavailable": "Gemini API தற்போது கிடைக்கவில்லை. இங்கே `GEMINI_API_KEY` ஐ கட்டமைக்கவும் அல்லது செல்லுபடியாகும் Google ADC credentials ஐப் பயன்படுத்தவும்.",
+ "withApiKeyFallback": "{{message}} கண்டறியப்பட்ட API key ஐப் பயன்படுத்த API key பயன்முறைக்கு மாறவும்."
+ },
+ "authModeDescriptions": {
+ "anthropic": {
+ "apiKey": "app-launched Anthropic sessions ஐ ஒரு API key credential ஐப் பயன்படுத்த கட்டாயப்படுத்து.",
+ "auto": "runtime இயல்புநிலை நடத்தையைப் பயன்படுத்து. இந்த பயன்பாட்டில் சேமிக்கப்பட்ட API keys ஆனது நீங்கள் API key பயன்முறைக்கு மாறிய பிறகே பயன்படுத்தப்படுகின்றன.",
+ "oauth": "app-launched Anthropic sessions ஐ உள்ளூர் Anthropic subscription session ஐப் பயன்படுத்த கட்டாயப்படுத்து."
+ },
+ "codex": {
+ "apiKey": "native Codex launches ஐ OPENAI_API_KEY / CODEX_API_KEY billing ஐப் பயன்படுத்த கட்டாயப்படுத்து.",
+ "auto": "உங்கள் ChatGPT கணக்கு கிடைக்கும்போது அதை விரும்பு. தேவைப்படும்போது மட்டும் API key பயன்முறைக்கு மாறு.",
+ "chatgpt": "native Codex launches ஐ உங்கள் இணைக்கப்பட்ட ChatGPT கணக்கு மற்றும் subscription ஐப் பயன்படுத்த கட்டாயப்படுத்து."
+ }
+ },
+ "progress": {
+ "applyingConnectionChanges": "இணைப்பு மாற்றங்களைப் பயன்படுத்துகிறது...",
+ "refreshingProviderStatus": "வழங்குநர் நிலையைப் புதுப்பிக்கிறது...",
+ "savingCompatibleEndpoint": "compatible endpoint ஐ சேமிக்கிறது...",
+ "switchingAnthropicSubscription": "Anthropic subscription க்கு மாறுகிறது...",
+ "switchingApiKey": "API key க்கு மாறுகிறது...",
+ "switchingApiKeyMode": "API key பயன்முறைக்கு மாறுகிறது...",
+ "switchingAuto": "Auto க்கு மாறுகிறது...",
+ "switchingChatgpt": "ChatGPT கணக்கு பயன்முறைக்கு மாறுகிறது..."
+ },
+ "provider": "வழங்குநர்",
+ "runtime": {
+ "descriptions": {
+ "anthropic": "Anthropic க்கு தற்போது தனி runtime backend selector இல்லை.",
+ "codex": "Codex இப்போது native runtime path வழியாக மட்டுமே இயங்குகிறது.",
+ "gemini": "multimodel எந்த Gemini runtime backend ஐப் பயன்படுத்த வேண்டும் என்பதைத் தேர்ந்தெடுக்கவும்.",
+ "opencode": "OpenCode அதன் சொந்த managed runtime host ஐப் பயன்படுத்துகிறது. Desktop தற்போது நிலையை மட்டுமே வெளிப்படுத்துகிறது."
+ },
+ "title": "Runtime",
+ "updating": "runtime ஐ புதுப்பிக்கிறது..."
+ },
+ "runtimeSummary": "Runtime: {{runtime}}",
+ "status": {
+ "configured": "கட்டமைக்கப்பட்டது",
+ "enabled": "இயக்கப்பட்டது",
+ "notConfigured": "கட்டமைக்கப்படவில்லை",
+ "notSet": "அமைக்கப்படவில்லை",
+ "off": "ஆஃப்",
+ "unknown": "தெரியாதது"
+ },
+ "title": "வழங்குநர் அமைப்புகள்",
+ "usage": {
+ "apiKey": "API key ஐப் பயன்படுத்துகிறது",
+ "apiKeyRequired": "API key தேவை",
+ "compatibleEndpoint": "compatible endpoint ஐப் பயன்படுத்துகிறது",
+ "notConnected": "இணைக்கப்படவில்லை",
+ "usingMethod": "{{method}} ஐப் பயன்படுத்துகிறது"
+ },
+ "errors": {
+ "apiKeyDeletedRefreshFailed": "API key நீக்கப்பட்டது, ஆனால் வழங்குநர் நிலையைப் புதுப்பிக்க முடியவில்லை.",
+ "apiKeySavedRefreshFailed": "API key சேமிக்கப்பட்டது, ஆனால் வழங்குநர் நிலையைப் புதுப்பிக்க முடியவில்லை.",
+ "connectionUpdatedRefreshFailed": "இணைப்பு புதுப்பிக்கப்பட்டது, ஆனால் வழங்குநர் நிலையைப் புதுப்பிக்க முடியவில்லை.",
+ "deleteApiKey": "API key ஐ நீக்க முடியவில்லை",
+ "disableEndpoint": "endpoint ஐ முடக்க முடியவில்லை",
+ "endpointDisabledRefreshFailed": "Endpoint முடக்கப்பட்டது, ஆனால் வழங்குநர் நிலையைப் புதுப்பிக்க முடியவில்லை.",
+ "endpointSavedRefreshFailed": "Endpoint சேமிக்கப்பட்டது, ஆனால் வழங்குநர் நிலையைப் புதுப்பிக்க முடியவில்லை.",
+ "refreshCodexAccount": "Codex கணக்கைப் புதுப்பிக்க முடியவில்லை",
+ "saveApiKey": "API key ஐ சேமிக்க முடியவில்லை",
+ "saveEndpoint": "endpoint ஐ சேமிக்க முடியவில்லை",
+ "updateAnthropicFastMode": "Anthropic Fast பயன்முறையைப் புதுப்பிக்க முடியவில்லை",
+ "updateConnection": "இணைப்பைப் புதுப்பிக்க முடியவில்லை",
+ "updateRuntimeBackend": "runtime backend ஐ புதுப்பிக்க முடியவில்லை",
+ "apiKeyRequired": "API key தேவை"
+ },
+ "connectionUi": {
+ "authMode": {
+ "auto": "Auto",
+ "oauth": "Subscription / OAuth",
+ "chatgpt": "ChatGPT கணக்கு",
+ "apiKey": "API key",
+ "anthropicSubscription": "Anthropic subscription"
+ },
+ "authMethod": {
+ "apiKey": "API key",
+ "apiKeyHelper": "API key helper",
+ "oauth": "OAuth",
+ "claudeSubscription": "Claude subscription",
+ "geminiCli": "Gemini CLI",
+ "googleAccount": "Google கணக்கு",
+ "serviceAccount": "service account"
+ },
+ "runtime": {
+ "codexNative": "Codex native",
+ "currentRuntime": "தற்போதைய runtime",
+ "selectedRuntime": "தேர்ந்தெடுத்த runtime",
+ "summary": "{{prefix}}: {{runtime}}"
+ },
+ "status": {
+ "checking": "சரிபார்க்கிறது...",
+ "modelsAvailable": "மாதிரிகள் கிடைக்கின்றன",
+ "checked": "சரிபார்க்கப்பட்டது",
+ "providerActivity": "வழங்குநர் செயல்பாடு",
+ "notConnected": "இணைக்கப்படவில்லை",
+ "startingChatGptLogin": "ChatGPT உள்நுழைவைத் தொடங்குகிறது...",
+ "waitingForChatGptLogin": "ChatGPT கணக்கு உள்நுழைவுக்காகக் காத்திருக்கிறது...",
+ "chatGptVerificationDegraded": "ChatGPT கணக்கு கண்டறியப்பட்டது - கணக்கு சரிபார்ப்பு தற்போது தரம் குறைந்துள்ளது.",
+ "chatGptAccountReady": "ChatGPT கணக்கு தயார்",
+ "apiKeyReady": "API key தயார்",
+ "codexLocalAccountNeedsReconnect": "Codex இல் உள்ளூரில் தேர்ந்தெடுக்கப்பட்ட ChatGPT கணக்கு உள்ளது, ஆனால் தற்போதைய session ஐ மீண்டும் இணைக்க வேண்டும்.",
+ "codexNoActiveManagedSession": "Codex CLI செயலில் உள்ள ChatGPT உள்நுழைவு இல்லை எனப் புகாரளிக்கிறது. உள்ளூர் Codex கணக்கு தரவு உள்ளது, ஆனால் செயலில் உள்ள managed session எதுவும் தேர்ந்தெடுக்கப்படவில்லை.",
+ "codexNoActiveChatGptLogin": "Codex CLI செயலில் உள்ள ChatGPT உள்நுழைவு இல்லை எனப் புகாரளிக்கிறது",
+ "connectChatGptForSubscription": "உங்கள் Codex subscription ஐப் பயன்படுத்த ஒரு ChatGPT கணக்கை இணைக்கவும்.",
+ "codexNativeReady": "Codex native தயார்",
+ "codexNativeUnavailable": "Codex native கிடைக்கவில்லை",
+ "unavailableInCurrentRuntime": "தற்போதைய runtime இல் கிடைக்கவில்லை",
+ "connectedViaApiKey": "API key வழியாக இணைக்கப்பட்டது",
+ "apiKeyConfiguredNotVerified": "API key கட்டமைக்கப்பட்டது, ஆனால் இன்னும் சரிபார்க்கப்படவில்லை",
+ "apiKeyModeMissingCredential": "API key பயன்முறை தேர்ந்தெடுக்கப்பட்டது, ஆனால் API key எதுவும் கட்டமைக்கப்படவில்லை",
+ "connectedVia": "{{method}} வழியாக இணைக்கப்பட்டது",
+ "unableToVerify": "சரிபார்க்க முடியவில்லை"
+ },
+ "mode": {
+ "selectedAuth": "தேர்ந்தெடுத்த auth: {{authMode}}",
+ "preferredAuth": "விருப்பமான auth: {{authMode}}"
+ },
+ "credential": {
+ "apiKeyConfigured": "API key கட்டமைக்கப்பட்டது",
+ "savedApiKeyAvailable": "சேமிக்கப்பட்ட API key Manage இல் கிடைக்கிறது",
+ "apiKeyAlsoConfigured": "API key உம் Manage இல் கட்டமைக்கப்பட்டது",
+ "apiKeyConfiguredInManage": "API key Manage இல் கட்டமைக்கப்பட்டது",
+ "apiKeyFallbackInManage": "API key உம் fallback ஆக Manage இல் கிடைக்கிறது",
+ "availableAsFallback": "{{summary}} - fallback ஆகக் கிடைக்கிறது",
+ "savedApiKeyAvailableIfSwitch": "நீங்கள் API key பயன்முறைக்கு மாறினால் சேமிக்கப்பட்ட API key Manage இல் கிடைக்கிறது",
+ "availableIfSwitch": "{{summary}} - நீங்கள் API key பயன்முறைக்கு மாறினால் கிடைக்கிறது",
+ "autoWillUseUntilChatGpt": "{{summary}} - ChatGPT இணைக்கப்படும் வரை Auto இதைப் பயன்படுத்தும்"
+ },
+ "actions": {
+ "connect": "இணை",
+ "connectAnthropic": "Anthropic ஐ இணை",
+ "connectChatGpt": "ChatGPT ஐ இணை",
+ "disconnect": "துண்டி",
+ "openLogin": "உள்நுழைவைத் திற"
+ },
+ "disconnect": {
+ "anthropicTitle": "Anthropic subscription ஐ துண்டிக்கவா?",
+ "anthropic": "இது Claude CLI runtime இலிருந்து உள்ளூர் Anthropic subscription session ஐ அகற்றுகிறது.",
+ "anthropicWithApiKey": "இது Claude CLI runtime இலிருந்து உள்ளூர் Anthropic subscription session ஐ அகற்றுகிறது. Manage இல் சேமிக்கப்பட்ட API keys கிடைக்கும்.",
+ "geminiTitle": "Gemini CLI ஐ துண்டிக்கவா?",
+ "gemini": "இது உள்ளூர் Gemini CLI session metadata ஐ அழிக்கிறது. வெளிப்புற ADC credentials மற்றும் சேமிக்கப்பட்ட API keys அகற்றப்படவில்லை."
+ }
+ }
+ },
+ "cliRuntime": {
+ "actions": {
+ "checkForUpdates": "புதுப்பிப்புகளைச் சரிபார்",
+ "checking": "சரிபார்க்கிறது...",
+ "extensions": "நீட்டிப்புகள்",
+ "installRuntime": "{{runtime}} ஐ நிறுவு",
+ "manage": "நிர்வகி",
+ "recheck": "மீண்டும் சரிபார்",
+ "reinstallRuntime": "{{runtime}} ஐ மீண்டும் நிறுவு",
+ "retry": "மீண்டும் முயற்சி",
+ "update": "புதுப்பி"
+ },
+ "installer": {
+ "checkingLatest": "சமீபத்திய பதிப்பைச் சரிபார்க்கிறது...",
+ "downloading": "பதிவிறக்குகிறது...",
+ "failed": "நிறுவல் தோல்வியடைந்தது",
+ "installed": "v{{version}} நிறுவப்பட்டது",
+ "installing": "நிறுவுகிறது...",
+ "latest": "சமீபத்தியது",
+ "verifying": "checksum சரிபார்க்கிறது..."
+ },
+ "labels": {
+ "multimodel": "Multimodel"
+ },
+ "loading": {
+ "aiProviders": "AI வழங்குநர்களைச் சரிபார்க்கிறது...",
+ "claudeCli": "Claude CLI ஐச் சரிபார்க்கிறது..."
+ },
+ "provider": {
+ "backend": "Backend: {{backend}}",
+ "loadingModels": "மாதிரிகளை ஏற்றுகிறது...",
+ "modelsUnavailable": "இந்த runtime build க்கு மாதிரிகள் கிடைக்கவில்லை",
+ "runtime": "Runtime: {{runtime}}"
+ },
+ "providerTerminal": {
+ "authFailed": "அங்கீகாரம் தோல்வியடைந்தது",
+ "authUpdated": "அங்கீகாரம் புதுப்பிக்கப்பட்டது",
+ "loggedOut": "வழங்குநர் வெளியேறியது",
+ "login": "உள்நுழைவு",
+ "logout": "வெளியேறு",
+ "logoutFailed": "வெளியேறுதல் தோல்வியடைந்தது"
+ },
+ "status": {
+ "configuredNotFound": "கட்டமைக்கப்பட்ட {{runtime}} கண்டறியப்படவில்லை.",
+ "foundButFailed": "{{runtime}} கண்டறியப்பட்டது ஆனால் தொடங்க முடியவில்லை",
+ "healthCheckFailed": "கட்டமைக்கப்பட்ட {{runtime}} அதன் startup health check இல் தோல்வியடைந்தது.",
+ "notInstalled": "{{runtime}} நிறுவப்படவில்லை"
+ },
+ "title": "CLI Runtime"
+ },
+ "cliStatus": {
+ "versionUpgrade": "v{{current}} -> v{{latest}}"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ta/team.json b/src/features/localization/renderer/locales/ta/team.json
new file mode 100644
index 00000000..641a7f8c
--- /dev/null
+++ b/src/features/localization/renderer/locales/ta/team.json
@@ -0,0 +1,2487 @@
+{
+ "activity": {
+ "actions": {
+ "createTaskFromMessage": "செய்தியிலிருந்து task ஐ உருவாக்கு",
+ "editMessage": "செய்தியைத் திருத்து",
+ "expandMessage": "செய்தியை விரிவாக்கு",
+ "replyToMessage": "செய்திக்குப் பதிலளி",
+ "restartTeam": "team ஐ மறுதொடக்கம் செய்"
+ },
+ "authError": {
+ "description": "அங்கீகாரம் தோல்வியடைந்தது. team ஐ மறுதொடக்கம் செய்வது session ஐ புதுப்பிக்கும் மற்றும் இந்த சிக்கலைத் தீர்க்கலாம். சிக்கல் தொடர்ந்தால், உங்கள் API credentials ஐச் சரிபார்க்கவும் அல்லது பிறகு மீண்டும் முயற்சிக்கவும்."
+ },
+ "automation": {
+ "reviewPickup": "மதிப்பாய்வை எடுத்துக்கொள்ள teammate ஐக் கேட்டது",
+ "stallNudge": "தேங்கிய task ஐத் தொடர teammate ஐக் கேட்டது",
+ "workSyncBody": "தற்போதைய வேலையை ஒத்திசைக்க teammate ஐக் கேட்டது"
+ },
+ "badges": {
+ "automation": "automation",
+ "bootstrap": "bootstrap",
+ "command": "command",
+ "comment": "கருத்து",
+ "live": "live",
+ "note": "note",
+ "rateLimited": "Rate Limited",
+ "restart": "restart",
+ "result": "result",
+ "session": "session",
+ "stallNudge": "stall nudge",
+ "start": "start",
+ "workSync": "work sync",
+ "agentError": "Agent பிழை",
+ "apiError": "API பிழை"
+ },
+ "bootstrap": {
+ "acknowledged": "Bootstrap ஒப்புக்கொள்ளப்பட்டது",
+ "restarting": "teammate ஐ மறுதொடக்கம் செய்கிறது",
+ "starting": "teammate ஐத் தொடங்குகிறது"
+ },
+ "rawJson": "Raw JSON",
+ "unread": "படிக்காதது",
+ "thoughts": {
+ "count": "{{count}} எண்ணங்கள்",
+ "count_one": "{{count}} எண்ணம்",
+ "expand": "எண்ணங்களை விரிவாக்கு",
+ "showMore": "மேலும் காட்டு",
+ "showLess": "குறைவாகக் காட்டு",
+ "count_few": "{{count}} எண்ணங்கள்",
+ "count_many": "{{count}} எண்ணங்கள்",
+ "count_other": "{{count}} எண்ணங்கள்",
+ "toolSummary": "🔧 {{summary}}",
+ "titleForMember": "{{name}} - எண்ணங்கள்"
+ },
+ "timeline": {
+ "loadingMessages": "செய்திகளை ஏற்றுகிறது...",
+ "noMessages": "செய்திகள் இல்லை",
+ "emptyHint": "செயல்பாட்டைக் காண ஒரு உறுப்பினருக்கு செய்தி அனுப்பவும்.",
+ "newSession": "புதிய session",
+ "olderCount": "+{{count}} பழையவை",
+ "showMore": "{{count}} மேலும் காட்டு",
+ "showAll": "அனைத்தையும் காட்டு",
+ "olderCount_one": "+{{count}} பழையது",
+ "olderCount_few": "+{{count}} பழையவை",
+ "olderCount_many": "+{{count}} பழையவை",
+ "olderCount_other": "+{{count}} பழையவை"
+ },
+ "pendingReplies": {
+ "title": "பதில்களுக்காகக் காத்திருக்கிறது",
+ "openMember": "உறுப்பினரைத் திற",
+ "messageSentAwaitingReply": "செய்தி அனுப்பப்பட்டது, பதிலுக்காகக் காத்திருக்கிறது",
+ "awaitingReply": "பதிலுக்காகக் காத்திருக்கிறது",
+ "externalTeam": "வெளி team",
+ "crossTeamAwaitingReply": "Cross-team செய்தி அனுப்பப்பட்டது, பதிலுக்காகக் காத்திருக்கிறது",
+ "user": "பயனர்",
+ "awaitingApproval": "ஒப்புதலுக்காகக் காத்திருக்கிறது"
+ },
+ "reply": {
+ "replyingTo": "பதிலளிக்கிறது",
+ "action": "பதிலளி"
+ },
+ "activeTasks": {
+ "inProgress": "முன்னேற்றத்தில்",
+ "expandInProgress": "முன்னேற்றத்தில் உள்ளவற்றை விரிவாக்கு",
+ "collapseInProgress": "முன்னேற்றத்தில் உள்ளவற்றை சுருக்கு",
+ "reviewing": "மதிப்பாய்வு செய்கிறது",
+ "workingOn": "வேலை செய்கிறது"
+ },
+ "expandDialog": {
+ "description": "விரிவாக்கப்பட்ட செய்தி காட்சி"
+ }
+ },
+ "create": {
+ "actions": {
+ "create": "உருவாக்கு",
+ "creating": "உருவாக்குகிறது...",
+ "openExisting": "தற்போதுள்ள Team ஐத் திற",
+ "skipPreflightAndCreate": "preflight ஐத் தவிர்த்து உருவாக்கு"
+ },
+ "conflict": {
+ "description": "ஒரே directory இல் இரண்டு teams ஐ இயக்குவது ஆபத்தானது - அவை ஒரே கோப்புகளைத் திருத்துவதில் முரண்படலாம். தனிமைப்படுத்தலுக்கு வேறு directory அல்லது git worktree ஐப் பயன்படுத்த பரிசீலிக்கவும்.",
+ "title": "இந்த working directory க்கு மற்றொரு team \"{{team}}\" ஏற்கனவே இயங்குகிறது",
+ "workingDirectory": "Working directory:"
+ },
+ "description": {
+ "copy": "தற்போதுள்ள ஒன்றின் அடிப்படையில் ஒரு புதிய team ஐ உருவாக்கு.",
+ "create": "உங்கள் team ஐ அமைத்து அது எப்படித் தொடங்குகிறது என்பதைத் தேர்ந்தெடுக்கவும்."
+ },
+ "errors": {
+ "nameExists": "Team பெயர் ஏற்கனவே உள்ளது",
+ "nameLaunching": "இந்தப் பெயருடன் ஒரு team தற்போது தொடங்குகிறது",
+ "createConfigFailed": "team config ஐ உருவாக்க முடியவில்லை",
+ "loadProjectsFailed": "projects ஐ ஏற்ற முடியவில்லை"
+ },
+ "fields": {
+ "color": "நிறம் (விருப்பத்திற்குரியது)",
+ "description": "விளக்கம் (விருப்பத்திற்குரியது)",
+ "prompt": "team lead க்கான prompt (விருப்பத்திற்குரியது)",
+ "teamName": "Team பெயர்"
+ },
+ "launchAfterCreate": {
+ "description": "உள்ளூர் Claude CLI வழியாக team ஐ உடனடியாகத் தொடங்கு.",
+ "label": "உருவாக்கிய பிறகு கட்டளையை இயக்கு"
+ },
+ "localOnly": "உள்ளூர் Electron பயன்முறையில் மட்டுமே கிடைக்கிறது.",
+ "onDisk": "Disk இல்:",
+ "placeholders": {
+ "description": "team நோக்கத்தின் சுருக்கமான விளக்கம்",
+ "prompt": "provisioning போது team lead க்கான வழிமுறைகள்..."
+ },
+ "saved": "சேமிக்கப்பட்டது",
+ "solo": {
+ "description": "team lead (main process) மட்டுமே தொடங்கப்படும் - teammates எவரும் spawn செய்யப்படமாட்டார்கள். உங்கள் தேர்ந்தெடுத்த runtime இல் (Claude Code, Codex, OpenCode, Gemini) ஒரு வழக்கமான agent session போல வேலை செய்கிறது, ஆனால் திட்டமிடலுக்கான task board அணுகலுடன். teammate ஒருங்கிணைப்பு மேல்செலவைத் தவிர்ப்பதன் மூலம் tokens ஐ சேமிக்கிறது. team அமைப்புகளிலிருந்து பின்னர் உறுப்பினர்களைச் சேர்க்கலாம்.",
+ "label": "Solo team"
+ },
+ "title": {
+ "copy": "Team ஐ நகலெடு",
+ "create": "Team ஐ உருவாக்கு"
+ },
+ "optional": {
+ "launchSettingsTitle": "விருப்ப launch அமைப்புகள்",
+ "launchSettingsDescription": "Prompt, பாதுகாப்பு மற்றும் CLI overrides உங்களுக்குத் தேவைப்படும்போது இங்கே உள்ளன.",
+ "teamDetailsTitle": "விருப்ப team விவரங்கள்",
+ "teamDetailsDescription": "இயல்புநிலை flow ஐ சிறியதாக வைத்திருங்கள், கூடுதல் context அல்லது தனிப்பயன் நிறம் வேண்டும்போது மட்டுமே இதைத் திறக்கவும்."
+ },
+ "prepare": {
+ "unsupportedPreload": "தற்போதைய preload பதிப்பு team:prepareProvisioning ஐ ஆதரிக்கவில்லை. dev app ஐ மறுதொடக்கம் செய்யவும்.",
+ "selectWorkingDirectory": "launch சூழலை சரிபார்க்க ஒரு working directory ஐத் தேர்ந்தெடுக்கவும்.",
+ "someProvidersNeedAttention": "சில தேர்ந்தெடுத்த வழங்குநர்களுக்கு கவனம் தேவை.",
+ "readyWithNotes": "அனைத்து தேர்ந்தெடுத்த வழங்குநர்களும் தயார், குறிப்புகளுடன்.",
+ "ready": "அனைத்து தேர்ந்தெடுத்த வழங்குநர்களும் தயார்.",
+ "failed": "தேர்ந்தெடுத்த வழங்குநர்களைத் தயார் செய்ய முடியவில்லை",
+ "checkingProviders": "தேர்ந்தெடுத்த வழங்குநர்களைச் சரிபார்க்கிறது...",
+ "preparingEnvironment": "சூழலைத் தயார் செய்கிறது...",
+ "selectedProvidersReadyWithNotes": "தேர்ந்தெடுத்த வழங்குநர்கள் தயார் (குறிப்புகளுடன்)",
+ "selectedProvidersReady": "தேர்ந்தெடுத்த வழங்குநர்கள் தயார்"
+ },
+ "validation": {
+ "nameMustContainLetterOrDigit": "பெயரில் குறைந்தது ஒரு எழுத்து அல்லது இலக்கம் இருக்க வேண்டும்",
+ "nameTooLong": "பெயர் மிக நீளமானது (அதிகபட்சம் 128 எழுத்துகள்)",
+ "selectWorkingDirectory": "working directory ஐத் தேர்ந்தெடு (cwd)",
+ "memberNameRequired": "உறுப்பினர் பெயர் காலியாக இருக்க முடியாது",
+ "memberNameInvalid": "உறுப்பினர் பெயர் alphanumeric உடன் தொடங்க வேண்டும், [a-zA-Z0-9._-] மட்டுமே பயன்படுத்தவும், அதிகபட்சம் 128 எழுத்துகள்",
+ "memberNamesUnique": "உறுப்பினர் பெயர்கள் தனித்துவமாக இருக்க வேண்டும்",
+ "openCodeLeadModelRequired": "OpenCode lead க்கு ஒரு தேர்ந்தெடுத்த மாதிரி தேவை.",
+ "openCodeTeammateRequired": "OpenCode lead க்கு குறைந்தது ஒரு OpenCode teammate தேவை.",
+ "teamLaunching": "Team தற்போது தொடங்குகிறது",
+ "teamNameExists": "Team பெயர் ஏற்கனவே உள்ளது",
+ "checkFormFields": "form fields ஐச் சரிபார்க்கவும்"
+ }
+ },
+ "editTeam": {
+ "actions": {
+ "cancel": "ரத்துசெய்",
+ "save": "சேமி"
+ },
+ "addMemberLockReason": "team live ஆக இருக்கும்போது புதிய teammates ஐச் சேர்க்க அர்ப்பணிக்கப்பட்ட Add member dialog ஐப் பயன்படுத்தவும்.",
+ "description": "Team பெயர், விளக்கம் மற்றும் நிறத்தை மாற்று",
+ "errors": {
+ "changesSavedRefreshFailed": "Team மாற்றங்கள் சேமிக்கப்பட்டன, ஆனால் சமீபத்திய காட்சியைப் புதுப்பிக்க முடியவில்லை: {{message}}",
+ "liveRenameBlocked": "team live ஆக இருக்கும்போது தற்போதுள்ள teammates ஐ மறுபெயரிட முடியாது. மறுபெயரிடப்பட்டது: {{names}}",
+ "memberNameEmpty": "உறுப்பினர் பெயர் காலியாக இருக்க முடியாது",
+ "memberNameInvalid": "உறுப்பினர் பெயர் alphanumeric உடன் தொடங்க வேண்டும், [a-zA-Z0-9._-] மட்டுமே பயன்படுத்தவும், அதிகபட்சம் 128 எழுத்துகள்",
+ "memberNameNumericSuffix": "உறுப்பினர் பெயர் \"{{name}}\" அனுமதிக்கப்படவில்லை (Claude CLI auto-suffix க்கு ஒதுக்கப்பட்டது). அதற்கு பதிலாக \"{{base}}\" ஐப் பயன்படுத்தவும்.",
+ "memberNameReserved": "உறுப்பினர் பெயர் \"{{name}}\" ஒதுக்கப்பட்டுள்ளது",
+ "memberNamesUnique": "சேமிப்பதற்கு முன் உறுப்பினர் பெயர்கள் தனித்துவமாக இருக்க வேண்டும்",
+ "newLiveTeammates": "team live ஆக இருக்கும்போது அர்ப்பணிக்கப்பட்ட Add member dialog இலிருந்து புதிய teammates ஐச் சேர்க்கவும். Edit Team தற்போதுள்ள teammates ஐப் புதுப்பிப்பதை மட்டுமே ஆதரிக்கிறது.",
+ "provisioning": "provisioning இன்னும் முன்னேற்றத்தில் இருக்கும்போது team அமைப்புகளைத் திருத்த முடியாது. launch முடிவதற்காகக் காத்திருந்து, பிறகு மீண்டும் முயற்சிக்கவும்.",
+ "restartFailedMany": "Team சேமிக்கப்பட்டது, ஆனால் இந்த teammates ஐ மறுதொடக்கம் செய்ய முடியவில்லை: {{failures}}",
+ "restartFailedOne": "Team சேமிக்கப்பட்டது, ஆனால் இந்த teammate ஐ மறுதொடக்கம் செய்ய முடியவில்லை: {{failures}}",
+ "saveFailed": "சேமிக்க முடியவில்லை",
+ "settingsChanged": "இந்த dialog திறந்திருந்தபோது team அமைப்புகள் மாறின. அதை மீண்டும் திறந்து, சேமிப்பதற்கு முன் சமீபத்திய நிலையை மதிப்பாய்வு செய்யவும்.",
+ "settingsSavedMembersAndRefreshFailed": "Team அமைப்புகள் சேமிக்கப்பட்டன, ஆனால் உறுப்பினர் மாற்றங்கள் தோல்வியடைந்தன: {{message}}. புதுப்பிப்பும் தோல்வியடைந்தது: {{refreshError}}",
+ "settingsSavedMembersFailed": "Team அமைப்புகள் சேமிக்கப்பட்டன, ஆனால் உறுப்பினர் மாற்றங்கள் தோல்வியடைந்தன: {{message}}",
+ "settingsSavedRefreshFailed": "Team அமைப்புகள் சேமிக்கப்பட்டன, ஆனால் சமீபத்திய காட்சியைப் புதுப்பிக்க முடியவில்லை: {{message}}",
+ "teamNameEmpty": "Team பெயர் காலியாக இருக்க முடியாது",
+ "unsupportedMixedPrimaryMutation": "கலப்பு OpenCode teams இல் primary-owned teammates க்கான live edits இன்னும் ஆதரிக்கப்படவில்லை. team ஐ நிறுத்தி, roster ஐத் திருத்தி, பிறகு மீண்டும் தொடங்கவும். பாதிக்கப்பட்டது: {{names}}"
+ },
+ "fields": {
+ "colorOptional": "நிறம் (விருப்பத்திற்குரியது)",
+ "description": "விளக்கம்",
+ "name": "பெயர்"
+ },
+ "memberRestartWarning": "சேமித்தல் role, workflow, worktree தனிமைப்படுத்தல், provider, model, effort அல்லது MCP அணுகல் மாற்றங்களைப் பயன்படுத்த இந்த teammate ஐ மறுதொடக்கம் செய்யும்.",
+ "notices": {
+ "liveRenameBlocked": "தற்போதுள்ள teammates மறுபெயரிடப்பட்டதால் live save தடுக்கப்பட்டுள்ளது. அந்த identity மாற்றங்களை மாற்றியமைக்கவும் அல்லது முதலில் team ஐ நிறுத்தவும்.",
+ "newLiveTeammates": "team live ஆக இருக்கும்போது Edit Team இலிருந்து புதிய teammates ஐச் சேர்க்க முடியாது. அதற்கு பதிலாக Add member dialog ஐப் பயன்படுத்தவும்.",
+ "provisioning": "Team provisioning இன்னும் முன்னேற்றத்தில் உள்ளது. launch முடியும் வரை திருத்துதல் தற்காலிகமாக பூட்டப்பட்டுள்ளது.",
+ "restartMany": "சேமித்தல் role, workflow, worktree தனிமைப்படுத்தல், provider, model, effort அல்லது MCP அணுகல் மாற்றங்களைப் பயன்படுத்த இந்த teammates ஐ மறுதொடக்கம் அல்லது மீண்டும் தொடங்கும்: {{names}}.",
+ "restartOne": "சேமித்தல் role, workflow, worktree தனிமைப்படுத்தல், provider, model, effort அல்லது MCP அணுகல் மாற்றங்களைப் பயன்படுத்த இந்த teammate ஐ மறுதொடக்கம் அல்லது மீண்டும் தொடங்கும்: {{names}}.",
+ "unsupportedMixedPrimaryMutation": "கலப்பு OpenCode teams இல் primary-owned teammates க்கான live edits/removals க்கு team ஐ நிறுத்தி மீண்டும் தொடங்க வேண்டும்: {{names}}."
+ },
+ "placeholders": {
+ "description": "Team விளக்கம் (விருப்பத்திற்குரியது)",
+ "teamName": "Team பெயர்"
+ },
+ "teamLead": {
+ "changeRuntime": "lead runtime ஐ மாற்று",
+ "changeRuntimeDescription": "lead provider, model அல்லது effort ஐ மாற்ற Relaunch Team ஐத் திறக்கவும்.",
+ "modelLockReason": "Team lead runtime ஆனது Relaunch Team இலிருந்து நிர்வகிக்கப்படுகிறது.",
+ "readOnlyHint": "Team lead பெயர் மற்றும் role இங்கே read-only ஆக இருக்கும். provider, model அல்லது effort ஐ மாற்ற lead row இல் உள்ள runtime panel ஐத் திறக்கவும்.",
+ "role": "Team Lead"
+ },
+ "title": "Team ஐ திருத்து"
+ },
+ "memberDraft": {
+ "actions": {
+ "remove": "உறுப்பினரை அகற்று",
+ "removeAria": "{{name}} ஐ அகற்று",
+ "restore": "உறுப்பினரை மீட்டெடு",
+ "restoreAria": "{{name}} ஐ மீட்டெடு"
+ },
+ "anthropicContext": {
+ "defaultSetting": "இயல்புநிலை context அமைப்பு",
+ "description": "Anthropic context இந்த launch க்கு team-wide ஆகும்: {{mode}}. அதை மாற்ற lead runtime panel இன் Limit context checkbox ஐப் பயன்படுத்தவும்.",
+ "limitEnabled": "200K limit இயக்கப்பட்டது"
+ },
+ "mcp": {
+ "buttonInherit": "MCP inherit",
+ "buttonScopes": "MCP scopes",
+ "chooseScopes": "scopes ஐத் தேர்ந்தெடு",
+ "inheritLead": "lead ஐப் பெறு",
+ "lockedInfo": "Agent Teams MCP only அனைத்து teammates க்கும் இயக்கப்பட்டுள்ளது. இந்த teammate Agent Teams server உடன் மட்டுமே தொடங்கும்.",
+ "mode": "MCP பயன்முறை",
+ "scopes": {
+ "local": "local",
+ "project": "project",
+ "user": "user"
+ },
+ "serverNames": "Server பெயர்கள்",
+ "settingInfo": "Agent Teams MCP இந்த teammate ஐ Agent Teams server உடன் மட்டுமே தொடங்குகிறது. Scope மற்றும் allowlist பயன்முறைகள் இந்த teammate launch க்கு மட்டுமே பொருந்தும்.",
+ "strictAllowlist": "Strict allowlist",
+ "tooltip": "{{label}}: இந்த உறுப்பினரின் MCP inheritance policy ஐக் கட்டுப்படுத்து",
+ "agentTeamsMcp": "Agent Teams MCP"
+ },
+ "model": {
+ "ariaLabel": "{{provider}} provider, {{model}}",
+ "currentLeadRuntime": "தற்போதைய lead runtime",
+ "default": "இயல்புநிலை",
+ "inheritedTooltip": "sync இயக்கப்பட்டிருக்கும்போது provider, model மற்றும் effort ஆனது lead இலிருந்து பெறப்படுகின்றன.",
+ "leadSuffix": "{{label}} (lead)",
+ "liveDisabled": "team live ஆக இருக்கும்போது provider, model மற்றும் effort மாற்றங்கள் முடக்கப்பட்டுள்ளன. அவற்றைப் பாதுகாப்பாகப் பயன்படுத்த team ஐ மீண்டும் இணைக்கவும்.",
+ "lockedActionFallback": "Lead runtime மாற்றங்கள் Relaunch Team ஐத் திறக்கின்றன, அங்கு provider, model மற்றும் effort ஐப் புதுப்பிக்கலாம்.",
+ "restartWholeTeam": "அந்த runtime மாற்றங்களைச் சேமிப்பது முழு team ஐயும் மறுதொடக்கம் செய்கிறது."
+ },
+ "nameAria": "உறுப்பினர் {{index}} பெயர்",
+ "nameFallback": "உறுப்பினர் {{index}}",
+ "noRole": "role இல்லை",
+ "removed": "அகற்றப்பட்டது",
+ "workflow": {
+ "addTooltip": "teammate workflow ஐ சேர்",
+ "editTooltip": "teammate workflow ஐ திருத்து",
+ "label": "Workflow (விருப்பத்திற்குரியது)",
+ "placeholder": "இந்த agent எப்படி நடந்துகொள்ள வேண்டும், மற்றவர்களுடன் தொடர்பு கொள்ள வேண்டும்...",
+ "saved": "சேமிக்கப்பட்டது"
+ },
+ "worktree": {
+ "description": "இந்த teammate ஐ தனி git worktree இல் இயக்கு. மாற்றங்களைப் பயன்படுத்துதல்/நிராகரித்தல் lead workspace ஐ அல்ல, அந்த worktree ஐ இலக்காகக் கொள்கிறது.",
+ "label": "Worktree"
+ },
+ "addMembers": {
+ "title": "உறுப்பினர்களைச் சேர்",
+ "description": "{{teamName}} க்கு புதிய உறுப்பினர்களைச் சேர்"
+ },
+ "placeholders": {
+ "name": "member-name",
+ "mcpServers": "github, sentry"
+ }
+ },
+ "detail": {
+ "actions": {
+ "add": "சேர்",
+ "cancel": "ரத்துசெய்",
+ "delete": "நீக்கு",
+ "editCode": "code ஐ திருத்து",
+ "launch": "தொடங்கு",
+ "remove": "அகற்று",
+ "stop": "நிறுத்து",
+ "task": "Task",
+ "visualize": "காட்சிப்படுத்து"
+ },
+ "deleteTeam": {
+ "description": "team \"{{team}}\" ஐ நீக்கவா? இந்த நடவடிக்கையை மீட்டெடுக்க முடியாது. அனைத்து team தரவும் tasks உம் நீக்கப்படும்.",
+ "title": "team ஐ நீக்கு"
+ },
+ "draft": {
+ "descriptionPrefix": "இது ஒரு draft team -",
+ "descriptionSuffix": "{{count}} {{member}} உடன் கட்டமைக்கப்பட்டது ஆனால் இன்னும் CLI ஆல் provision செய்யப்படவில்லை. ஒரு மாதிரியைத் தேர்ந்தெடுத்து team ஐத் தொடங்க Launch ஐ கிளிக் செய்யவும்.",
+ "descriptionSuffix_few": "{{count}} {{member}} உடன் கட்டமைக்கப்பட்டது ஆனால் இன்னும் CLI ஆல் provision செய்யப்படவில்லை. ஒரு மாதிரியைத் தேர்ந்தெடுத்து team ஐத் தொடங்க Launch ஐ கிளிக் செய்யவும்.",
+ "descriptionSuffix_many": "{{count}} {{member}} உடன் கட்டமைக்கப்பட்டது ஆனால் இன்னும் CLI ஆல் provision செய்யப்படவில்லை. ஒரு மாதிரியைத் தேர்ந்தெடுத்து team ஐத் தொடங்க Launch ஐ கிளிக் செய்யவும்.",
+ "descriptionSuffix_one": "{{count}} {{member}} உடன் கட்டமைக்கப்பட்டது ஆனால் இன்னும் CLI ஆல் provision செய்யப்படவில்லை. ஒரு மாதிரியைத் தேர்ந்தெடுத்து team ஐத் தொடங்க Launch ஐ கிளிக் செய்யவும்.",
+ "descriptionSuffix_other": "{{count}} {{member}} உடன் கட்டமைக்கப்பட்டது ஆனால் இன்னும் CLI ஆல் provision செய்யப்படவில்லை. ஒரு மாதிரியைத் தேர்ந்தெடுத்து team ஐத் தொடங்க Launch ஐ கிளிக் செய்யவும்.",
+ "member": "உறுப்பினர்கள்",
+ "member_few": "உறுப்பினர்கள்",
+ "member_many": "உறுப்பினர்கள்",
+ "member_one": "உறுப்பினர்",
+ "member_other": "உறுப்பினர்கள்",
+ "title": "Team இன்னும் தொடங்கப்படவில்லை"
+ },
+ "invalidTab": "தவறான team tab",
+ "kanbanSafeData": "kanban ஐ முழுமையாக ஏற்ற முடியவில்லை. பாதுகாப்பான தரவைக் காட்டுகிறது.",
+ "loadFailed": "team ஐ ஏற்ற முடியவில்லை",
+ "loading": "team ஐ ஏற்றுகிறது",
+ "loadingSidebar": "team sidebar ஐ ஏற்றுகிறது",
+ "offline": {
+ "offline": "Team ஆஃப்லைனில் உள்ளது",
+ "partialFailed": "கடைசி launch பாதியில் தோல்வியடைந்தது",
+ "partialMissing": "கடைசி launch பாதியில் தோல்வியடைந்தது - {{missing}}/{{expected}} teammates சேரவில்லை",
+ "reconciling": "கடைசி launch இன்னும் சரிசெய்கிறது"
+ },
+ "previous": "முந்தையது: {{paths}}",
+ "removeMember": {
+ "description": "team இலிருந்து \"{{member}}\" ஐ அகற்றவா? Tasks மற்றும் செய்திகள் பாதுகாக்கப்படும், ஆனால் இந்தப் பெயரை மீண்டும் பயன்படுத்த முடியாது.",
+ "title": "உறுப்பினரை அகற்று"
+ },
+ "sections": {
+ "team": "Team"
+ },
+ "solo": "Solo",
+ "status": {
+ "active": "செயலில்",
+ "launching": "தொடங்குகிறது...",
+ "running": "இயங்குகிறது"
+ },
+ "telemetry": {
+ "cpu": "CPU",
+ "memory": "நினைவகம்"
+ },
+ "tooltips": {
+ "deleteTeam": "team ஐ நீக்கு",
+ "editTeam": "team ஐ திருத்து",
+ "editUnavailableProvisioning": "provisioning இன்னும் முன்னேற்றத்தில் இருக்கும்போது team ஐ திருத்துவது கிடைக்காது",
+ "openBuiltInEditor": "project ஐ உள்ளமைந்த editor இல் திற",
+ "openTeamGraph": "team graph ஐத் திற",
+ "stopTeam": "team ஐ நிறுத்து"
+ },
+ "waitingForProvisioning": "provisioning முடிந்ததும் team தரவு தோன்றும்",
+ "context": {
+ "title": "Context",
+ "loading": "ஏற்றுகிறது...",
+ "noSessionLoaded": "session எதுவும் ஏற்றப்படவில்லை",
+ "closePanel": "{{team}} context panel ஐ மூடு",
+ "loadingContext": "context ஐ ஏற்றுகிறது...",
+ "openLeadSession": "context ஐக் காண team lead session ஐத் திறக்கவும்."
+ }
+ },
+ "review": {
+ "fileHeader": {
+ "actions": {
+ "accept": "ஏற்று",
+ "discard": "நிராகரி",
+ "discardTooltip": "இந்தக் கோப்பின் அனைத்து edits ஐயும் நிராகரி",
+ "keepMyDraft": "என் draft ஐ வைத்திரு",
+ "reject": "நிராகரி",
+ "reloadFromDisk": "disk இலிருந்து மீண்டும் ஏற்று",
+ "restore": "மீட்டெடு",
+ "restoreTooltip": "முன்னோட்டத்திலிருந்து இந்தக் கோப்பை disk இல் உருவாக்கு/மீட்டெடு",
+ "saveFile": "கோப்பைச் சேமி",
+ "saveFileTooltip": "கோப்பை disk இல் சேமி"
+ },
+ "badges": {
+ "deleted": "DELETED",
+ "manualReview": "MANUAL REVIEW",
+ "new": "NEW",
+ "worktree": "WORKTREE"
+ },
+ "contentSource": {
+ "disk-current": "தற்போதைய Disk",
+ "file-history": "கோப்பு வரலாறு",
+ "git-fallback": "Git Fallback",
+ "ledger-exact": "Task Ledger",
+ "ledger-snapshot": "Ledger Snapshot",
+ "snippet-reconstruction": "மீளமைக்கப்பட்டது",
+ "unavailable": "உள்ளடக்கம் கிடைக்கவில்லை"
+ },
+ "contentUnavailable": {
+ "badge": "உள்ளடக்கம் கிடைக்கவில்லை",
+ "description": "ledger இந்த மாற்றத்திற்கான metadata ஐ பதிவு செய்தது, ஆனால் முழு உரை உள்ளடக்கம் கிடைக்கவில்லை. இது பொதுவாக binary, பெரிய அல்லது hash-only உள்ளடக்கம் என்று பொருள்.",
+ "safety": "பாதுகாப்பற்ற disk எழுத்துகளைத் தவிர்க்க இந்தக் கோப்புக்கு தானியங்கி ஏற்பு/நிராகரிப்பு முடக்கப்பட்டுள்ளது.",
+ "title": "உரை உள்ளடக்கம் கிடைக்கவில்லை"
+ },
+ "disabled": {
+ "acceptRejectContentUnavailable": "முழு உரை உள்ளடக்கம் கிடைக்காததால் ஏற்பு/நிராகரிப்பு முடக்கப்பட்டுள்ளது.",
+ "acceptRejectMissingOnDisk": "disk இல் கோப்பு காணாமல் இருக்கும்போது ஏற்பு/நிராகரிப்பு முடக்கப்பட்டுள்ளது.",
+ "rejectBaselineUnavailable": "அசல் baseline கிடைக்காததால் நிராகரிப்பு முடக்கப்பட்டுள்ளது.",
+ "rejectContentUnavailable": "முழு உரை உள்ளடக்கம் கிடைக்காததால் நிராகரிப்பு முடக்கப்பட்டுள்ளது.",
+ "rejectManualLedgerReview": "இந்த ledger மாற்றத்தில் binary, பெரிய அல்லது கிடைக்காத உள்ளடக்கம் இருப்பதால் நிராகரிப்பு முடக்கப்பட்டுள்ளது."
+ },
+ "externalChange": {
+ "changedOnDisk": "disk இல் மாற்றப்பட்டது",
+ "deletedOnDisk": "disk இல் நீக்கப்பட்டது",
+ "recreatedOnDisk": "disk இல் மீண்டும் உருவாக்கப்பட்டது"
+ },
+ "missingOnDisk": {
+ "badge": "disk இல் காணவில்லை",
+ "description": "agent logs இலிருந்து ஒரு முன்னோட்டத்தை இன்னும் காட்ட முடியும், ஆனால் உங்கள் filesystem ஒத்திசைவில் இல்லை.",
+ "restorePrefix": "பயன்படுத்து",
+ "restoreSuffix": "முன்னோட்ட உள்ளடக்கத்தை disk இல் மீண்டும் எழுத.",
+ "restoreUnavailable": "தானாக மீட்டெடுக்க முழு கோப்பு உள்ளடக்கம் கிடைக்கவில்லை.",
+ "title": "disk இல் கோப்பு காணவில்லை"
+ },
+ "pathChange": {
+ "from": "{{path}} இலிருந்து",
+ "to": "{{path}} க்கு"
+ },
+ "worktree": {
+ "isolated": "தனிமைப்படுத்தப்பட்ட worktree"
+ }
+ },
+ "toolbar": {
+ "stats": {
+ "pending": "{{count}} நிலுவையில்",
+ "pending_one": "{{count}} நிலுவையில்",
+ "pending_other": "{{count}} நிலுவையில்",
+ "accepted": "{{count}} ஏற்கப்பட்டது",
+ "accepted_one": "{{count}} ஏற்கப்பட்டது",
+ "accepted_other": "{{count}} ஏற்கப்பட்டது",
+ "rejected": "{{count}} நிராகரிக்கப்பட்டது",
+ "rejected_one": "{{count}} நிராகரிக்கப்பட்டது",
+ "rejected_other": "{{count}} நிராகரிக்கப்பட்டது",
+ "acrossFiles": "{{count}} கோப்புகள் முழுவதும்",
+ "acrossFiles_one": "{{count}} கோப்பு முழுவதும்",
+ "acrossFiles_other": "{{count}} கோப்புகள் முழுவதும்",
+ "edited": "{{count}} திருத்தப்பட்டது",
+ "edited_one": "{{count}} திருத்தப்பட்டது",
+ "edited_other": "{{count}} திருத்தப்பட்டது",
+ "pending_few": "{{count}} நிலுவையில்",
+ "pending_many": "{{count}} நிலுவையில்",
+ "accepted_few": "{{count}} ஏற்கப்பட்டது",
+ "accepted_many": "{{count}} ஏற்கப்பட்டது",
+ "rejected_few": "{{count}} நிராகரிக்கப்பட்டது",
+ "rejected_many": "{{count}} நிராகரிக்கப்பட்டது",
+ "acrossFiles_few": "{{count}} கோப்புகள் முழுவதும்",
+ "acrossFiles_many": "{{count}} கோப்புகள் முழுவதும்",
+ "edited_few": "{{count}} திருத்தப்பட்டது",
+ "edited_many": "{{count}} திருத்தப்பட்டது"
+ },
+ "actions": {
+ "auto": "Auto",
+ "undo": "செயல்தவிர்",
+ "acceptAll": "அனைத்தையும் ஏற்று",
+ "rejectAll": "அனைத்தையும் நிராகரி",
+ "applying": "பயன்படுத்துகிறது...",
+ "applyRejections": "நிராகரிப்புகளைப் பயன்படுத்து"
+ },
+ "tooltips": {
+ "autoOn": "முடிவுக்கு உருட்டும்போது கோப்புகளை பார்த்ததாக தானாகக் குறி (ON)",
+ "autoOff": "முடிவுக்கு உருட்டும்போது கோப்புகளை பார்த்ததாக தானாகக் குறி (OFF)",
+ "undo": "கடைசி மதிப்பாய்வு செயல்பாட்டை செயல்தவிர் (Ctrl+Z)",
+ "acceptAll": "அனைத்து கோப்புகளிலும் உள்ள அனைத்து மாற்றங்களையும் ஏற்று",
+ "rejectAll": "அனைத்து கோப்புகளிலும் உள்ள பாதுகாப்பாக நிராகரிக்கக்கூடிய அனைத்து மாற்றங்களையும் நிராகரி",
+ "rejectAllDisabled": "நிராகரிக்க பாதுகாப்பான அசல் baseline கொண்ட நிலுவை கோப்புகள் இல்லை.",
+ "applyRejections": "நிராகரிக்கப்பட்ட hunks ஐ disk இல் பயன்படுத்து; ஏற்கப்பட்ட மாற்றங்கள் உள்ளபடியே வைக்கப்படும்"
+ }
+ },
+ "diffError": {
+ "title": "diff view ஐ வழங்க முடியவில்லை",
+ "unexpected": "diff ஐ வழங்கும்போது எதிர்பாராத பிழை ஏற்பட்டது.",
+ "actions": {
+ "retry": "மீண்டும் முயற்சி"
+ },
+ "raw": {
+ "show": "raw diff தரவைக் காட்டு",
+ "file": "கோப்பு: {{file}}",
+ "original": "--- அசல்",
+ "modified": "+++ மாற்றப்பட்டது",
+ "charsTotal": "... (மொத்தம் {{count}} எழுத்துகள்)",
+ "charsTotal_one": "... (மொத்தம் {{count}} எழுத்து)",
+ "charsTotal_other": "... (மொத்தம் {{count}} எழுத்துகள்)",
+ "charsTotal_few": "... (மொத்தம் {{count}} எழுத்துகள்)",
+ "charsTotal_many": "... (மொத்தம் {{count}} எழுத்துகள்)"
+ }
+ },
+ "fileTree": {
+ "viewed": "பார்த்தது",
+ "badges": {
+ "new": "புதியது",
+ "deleted": "நீக்கப்பட்டது"
+ },
+ "collapseFolder": "{{name}} ஐ சுருக்கு",
+ "expandFolder": "{{name}} ஐ விரிவாக்கு",
+ "empty": {
+ "noChangedFiles": "மாற்றப்பட்ட கோப்புகள் இல்லை",
+ "noMatchingFiles": "பொருந்தும் கோப்புகள் இல்லை"
+ },
+ "searchPlaceholder": "கோப்புகளைத் தேடு…",
+ "filters": {
+ "unresolved": "தீர்க்கப்படாதது",
+ "rejected": "நிராகரிக்கப்பட்டது",
+ "new": "புதியது",
+ "clear": "அழி"
+ }
+ },
+ "diffControls": {
+ "previousChunk": "முந்தைய chunk",
+ "nextChunk": "அடுத்த chunk",
+ "rejectChange": "மாற்றத்தை நிராகரி (⌘N)",
+ "acceptChange": "மாற்றத்தை ஏற்று (⌘Y)",
+ "undo": "செயல்தவிர்",
+ "keep": "வைத்திரு",
+ "rejectShortcut": "⌘N",
+ "acceptShortcut": "⌘Y"
+ },
+ "conflict": {
+ "title": "முரண்பாடு கண்டறியப்பட்டது",
+ "description": "agent இன் மாற்றங்களுக்குப் பிறகு இந்தக் கோப்பு மாற்றப்பட்டுள்ளது",
+ "cancel": "ரத்துசெய்",
+ "saveResolution": "தீர்வைச் சேமி",
+ "editManually": "கைமுறையாகத் திருத்து",
+ "useOriginal": "அசலைப் பயன்படுத்து",
+ "keepCurrent": "தற்போதையதை வைத்திரு"
+ },
+ "fullDiffLoading": {
+ "titleOne": "முழு Diff ஐ தயார் செய்கிறது",
+ "titleMany": "{{count}} முழு Diffs ஐ தயார் செய்கிறது",
+ "subtitleForFile": "{{file}} க்கான சரியான editor diff ஐ இறுதிப்படுத்துகிறது.",
+ "subtitleCurrentFile": "தற்போதைய கோப்புக்கான சரியான editor diff ஐ இறுதிப்படுத்துகிறது.",
+ "subtitleMany": "தற்போது ஏற்றப்படும் கோப்புகளுக்கான சரியான before/after baselines ஐ தீர்க்கிறது.",
+ "previewsReady": "{{count}} முன்னோட்டங்கள் தயார்",
+ "previewsReady_one": "{{count}} முன்னோட்டம் தயார்",
+ "editorViewLoading": "Editor view ஏற்றுகிறது",
+ "filesInProgress": "{{count}} கோப்புகள் முன்னேற்றத்தில்",
+ "filesInProgress_one": "{{count}} கோப்பு முன்னேற்றத்தில்",
+ "filesReady": "{{ready}}/{{total}} கோப்புகள் தயார்",
+ "progressDescription": "{{ready}} தயார், {{loading}} இன்னும் ஏற்றுகிறது. மீதமுள்ள baselines தீர்க்கப்படும்போது முன்னோட்ட diffs கீழே தெரியும்.",
+ "singleDescription": "சரியான baseline தீர்க்கப்படும்போது முன்னோட்ட diffs கீழே தெரியும்.",
+ "previewsReady_few": "{{count}} முன்னோட்டங்கள் தயார்",
+ "previewsReady_many": "{{count}} முன்னோட்டங்கள் தயார்",
+ "previewsReady_other": "{{count}} முன்னோட்டங்கள் தயார்",
+ "filesInProgress_few": "{{count}} கோப்புகள் முன்னேற்றத்தில்",
+ "filesInProgress_many": "{{count}} கோப்புகள் முன்னேற்றத்தில்",
+ "filesInProgress_other": "{{count}} கோப்புகள் முன்னேற்றத்தில்"
+ },
+ "fileMissingPrefix": "disk இல் கோப்பு காணவில்லை. இந்த diff agent logs இலிருந்து வந்த ஒரு முன்னோட்டமாக மட்டுமே இருக்கலாம். பயன்படுத்து",
+ "restore": "மீட்டெடு",
+ "fileMissingSuffix": "disk இல் கோப்பை உருவாக்க.",
+ "filePlaceholder": {
+ "loading": "ஏற்றுகிறது",
+ "description": "இந்தக் கோப்புக்கான முழு editor diff ஐ தயார் செய்கிறது."
+ },
+ "loading": {
+ "diff": "DIFF",
+ "ledgerObjectsProcessed": "{{count}} ledger objects செயலாக்கப்பட்டன",
+ "ledgerObjectsProcessed_one": "{{count}} ledger object செயலாக்கப்பட்டது",
+ "ledgerObjectsProcessed_other": "{{count}} ledger objects செயலாக்கப்பட்டன",
+ "ledgerObjectsProcessed_few": "{{count}} ledger objects செயலாக்கப்பட்டன",
+ "ledgerObjectsProcessed_many": "{{count}} ledger objects செயலாக்கப்பட்டன",
+ "phases": {
+ "readingLedger": "task ledger ஐ படிக்கிறது...",
+ "resolvingFiles": "கோப்பு நிலைகளைத் தீர்க்கிறது...",
+ "checkingWorktree": "worktree context ஐச் சரிபார்க்கிறது...",
+ "preparingDiffs": "மதிப்பாய்வு diffs ஐ தயார் செய்கிறது..."
+ }
+ },
+ "progress": {
+ "viewed": "{{viewed}}/{{total}} பார்த்தது"
+ },
+ "scope": {
+ "readMore": "மேலும் படி",
+ "tiers": {
+ "exact": {
+ "title": "Task scope துல்லியமாக தீர்மானிக்கப்பட்டது",
+ "detail": "session log இல் தொடக்கம் மற்றும் நிறைவு markers இரண்டும் கண்டறியப்பட்டன. diff இல் இந்த குறிப்பிட்ட task போது செய்யப்பட்ட மாற்றங்கள் மட்டுமே அடங்கும் - ஒரே கோப்புகளை மாற்றிய மற்ற tasks விலக்கப்படுகின்றன."
+ },
+ "endEstimated": {
+ "title": "முடிவு எல்லை மதிப்பிடப்பட்டது",
+ "detail": "தொடக்க marker மட்டுமே கண்டறியப்பட்டது - task க்கு இன்னும் நிறைவு marker இல்லை. task தொடக்கத்திலிருந்து session முடிவு வரையிலான மாற்றங்கள் காட்டப்படுகின்றன. இதே session இல் இதற்குப் பிறகு மற்ற tasks இயங்கினால், அவற்றின் மாற்றங்களும் சேர்க்கப்படலாம்."
+ },
+ "startEstimated": {
+ "title": "தொடக்க எல்லை மதிப்பிடப்பட்டது",
+ "detail": "நிறைவு marker மட்டுமே கண்டறியப்பட்டது - வேலையின் தொடக்கம் பிடிக்கப்படவில்லை. இதே session இல் இதற்கு முன் மற்ற tasks இயங்கினால், அவை ஒரே கோப்புகளில் செய்த மாற்றங்களும் சேர்க்கப்படலாம்."
+ },
+ "allSession": {
+ "title": "அனைத்து session மாற்றங்களையும் காட்டுகிறது",
+ "detail": "session log இல் task markers எதுவும் கண்டறியப்படவில்லை. இந்த task ஐ தனிமைப்படுத்த முடியாது - மற்ற tasks இன் மாற்றங்கள் உட்பட முழு session இன் அனைத்து கோப்பு மாற்றங்களும் காட்டப்படுகின்றன. இது பழைய CLI பதிப்புகள் அல்லது தரமற்ற workflows உடன் நிகழலாம்."
+ }
+ },
+ "ledger": {
+ "exact": {
+ "title": "task ledger ஆல் பிடிக்கப்பட்ட மாற்றங்கள்",
+ "detail": "agent இந்த task இல் வேலை செய்துகொண்டிருந்தபோது orchestrator இந்த கோப்பு மாற்றங்களைப் பிடித்தது.",
+ "badge": "Ledger exact"
+ },
+ "limited": {
+ "title": "வரம்புக்குட்பட்ட மதிப்பாய்வுத்தன்மையுடன் பிடிக்கப்பட்ட மாற்றங்கள்",
+ "detail": "இந்த task க்கான இந்த கோப்பு மாற்றங்களை orchestrator பிடித்தது, ஆனால் குறைந்தது ஒரு மாற்றம் snapshot அல்லது metadata-only மூலத்திலிருந்து பிடிக்கப்பட்டது. கிடைக்கும் இடங்களில் சரியான உரை diffs ஐ மதிப்பாய்வு செய்யவும்; binary அல்லது கிடைக்காத உள்ளடக்கத்திற்கு கைமுறை மதிப்பாய்வு தேவைப்படலாம்.",
+ "mixedBadge": "கலப்பு மதிப்பாய்வுத்தன்மை",
+ "needsReviewBadge": "மதிப்பாய்வு தேவை"
+ }
+ },
+ "workInterval": {
+ "title": "நிலைத்த work interval ஆல் scope செய்யப்பட்டது",
+ "detail": "session log இல் task தொடக்க marker கிடைக்கவில்லை, எனவே diff ஆனது board இல் சேமிக்கப்பட்ட task work interval ஆல் scope செய்யப்படுகிறது.",
+ "badge": "Interval scoped"
+ },
+ "confidence": {
+ "high": "உயர் நம்பிக்கை",
+ "medium": "நடுத்தர நம்பிக்கை",
+ "low": "குறைந்த நம்பிக்கை",
+ "bestEffort": "சிறந்த முயற்சி"
+ }
+ },
+ "shortcuts": {
+ "title": "Keyboard Shortcuts",
+ "actions": {
+ "nextChange": "அடுத்த மாற்றம்",
+ "previousChange": "முந்தைய மாற்றம்",
+ "nextFile": "அடுத்த கோப்பு",
+ "previousFile": "முந்தைய கோப்பு",
+ "acceptChange": "மாற்றத்தை ஏற்று",
+ "rejectChange": "மாற்றத்தை நிராகரி",
+ "saveFile": "கோப்பைச் சேமி",
+ "undo": "செயல்தவிர்",
+ "redo": "மீண்டும் செய்",
+ "toggleShortcuts": "shortcuts ஐ மாற்று",
+ "closeDialog": "உரையாடலை மூடு"
+ }
+ },
+ "timeline": {
+ "empty": "edit நிகழ்வுகள் இல்லை",
+ "titleWithCount": "Edit காலவரிசை ({{count}})"
+ },
+ "continuousScroll": {
+ "empty": "மதிப்பாய்வு செய்யக்கூடிய கோப்பு மாற்றங்கள் இல்லை"
+ },
+ "empty": {
+ "noSafeDiff": "பாதுகாப்பான diff கிடைக்கவில்லை",
+ "noFileChangesRecorded": "கோப்பு மாற்றங்கள் எதுவும் பதிவு செய்யப்படவில்லை",
+ "noSafeDiffDescription": "இந்த task க்கான பாதுகாப்பான கோப்பு diff ஐ task ledger வெளிப்படுத்தவில்லை.",
+ "noSafeDiffDiagnosticsDescription": "இந்த task க்கான பாதுகாப்பான கோப்பு diff ஐ task ledger வெளிப்படுத்தவில்லை. கீழே உள்ள diagnostics ஏன் என்பதை விளக்குகிறது.",
+ "noFileEventsYet": "task ledger இல் இந்த task க்கு இன்னும் கோப்பு நிகழ்வுகள் இல்லை.",
+ "noFileEvents": "task ledger இல் இந்த task க்கு கோப்பு நிகழ்வுகள் இல்லை."
+ }
+ },
+ "messages": {
+ "actions": {
+ "bottomSheetActions": "செய்தி bottom sheet நடவடிக்கைகள்",
+ "collapseAll": "அனைத்து செய்திகளையும் சுருக்கு",
+ "collapseSheet": "sheet ஐ சுருக்கு",
+ "expandAll": "அனைத்து செய்திகளையும் விரிவாக்கு",
+ "expandSheet": "sheet ஐ விரிவாக்கு",
+ "floatComposer": "composer ஐ மிதக்கவை",
+ "floatMessagesComposer": "messages composer ஐ மிதக்கவை",
+ "hideSearch": "தேடலை மறை",
+ "loadOlder": "பழைய செய்திகளை ஏற்று",
+ "markAllRead": "அனைத்தையும் படித்ததாகக் குறி",
+ "messageActions": "செய்தி நடவடிக்கைகள்",
+ "moveMessagesToBottomSheet": "செய்திகளை bottom sheet க்கு நகர்த்து",
+ "moveMessagesToSidebar": "செய்திகளை sidebar க்கு நகர்த்து",
+ "moveToBottomSheet": "bottom sheet க்கு நகர்த்து",
+ "moveToInline": "inline க்கு நகர்த்து",
+ "moveToSidebar": "sidebar க்கு நகர்த்து",
+ "panelActions": "செய்தி panel நடவடிக்கைகள்",
+ "searchMessages": "செய்திகளைத் தேடு"
+ },
+ "delivery": {
+ "copied": "நகலெடுக்கப்பட்டது",
+ "copyDebugDetails": "debug விவரங்களை நகலெடு",
+ "details": "விவரங்கள்",
+ "fields": {
+ "acceptanceUnknown": "acceptanceUnknown",
+ "delivered": "delivered",
+ "diagnostics": "diagnostics",
+ "ledgerStatus": "ledgerStatus",
+ "messageId": "messageId",
+ "providerId": "providerId",
+ "queuedBehindMessageId": "queuedBehindMessageId",
+ "reason": "reason",
+ "responsePending": "responsePending",
+ "responseState": "responseState",
+ "statusMessageId": "statusMessageId",
+ "userVisibleMessage": "userVisibleMessage",
+ "userVisibleNextReviewAt": "userVisibleNextReviewAt",
+ "userVisibleReasonCode": "userVisibleReasonCode",
+ "userVisibleState": "userVisibleState",
+ "visibleReplyCorrelation": "visibleReplyCorrelation",
+ "visibleReplyMessageId": "visibleReplyMessageId"
+ }
+ },
+ "panelMode": "செய்தி panel பயன்முறை",
+ "title": "செய்திகள்",
+ "unread": {
+ "new": "{{count}} புதியது",
+ "unread": "{{count}} படிக்காதது",
+ "new_few": "{{count}} புதியவை",
+ "new_many": "{{count}} புதியவை",
+ "new_one": "{{count}} புதியது",
+ "new_other": "{{count}} புதியவை",
+ "unread_few": "{{count}} படிக்காதவை",
+ "unread_many": "{{count}} படிக்காதவை",
+ "unread_one": "{{count}} படிக்காதது",
+ "unread_other": "{{count}} படிக்காதவை"
+ },
+ "filter": {
+ "ariaLabel": "செய்திகளை வடிகட்டு",
+ "tooltip": "செய்திகளை வடிகட்டு",
+ "from": "இருந்து",
+ "to": "க்கு",
+ "noData": "தரவு இல்லை",
+ "showStatusUpdates": "நிலை புதுப்பிப்புகளைக் காட்டு (idle/shutdown)",
+ "actions": {
+ "reset": "மீட்டமை",
+ "save": "சேமி"
+ }
+ },
+ "status": {
+ "title": "நிலை"
+ },
+ "actionMode": {
+ "label": "Action பயன்முறை"
+ },
+ "search": {
+ "placeholder": "தேடு..."
+ }
+ },
+ "modelSelector": {
+ "badges": {
+ "configured": "கட்டமைக்கப்பட்டது",
+ "connected": "இணைக்கப்பட்டது",
+ "failed": "தோல்வி",
+ "free": "இலவசம்",
+ "local": "உள்ளூர்",
+ "needsTest": "சோதனை தேவை",
+ "verified": "சரிபார்க்கப்பட்டது",
+ "unavailable": "கிடைக்கவில்லை",
+ "issue": "சிக்கல்"
+ },
+ "customModelId": "தனிப்பயன் model id",
+ "label": "Model (விருப்பத்திற்குரியது)",
+ "multimodelRequired": "Codex மற்றும் Gemini க்கு Multimodel பயன்முறை தேவை.",
+ "openCode": {
+ "allSources": "அனைத்து OpenCode மூலங்கள்",
+ "filterSource": "{{source}} ஐ வடிகட்டு",
+ "filterSources": "OpenCode மூலங்களை வடிகட்டு",
+ "freeOnly": "இலவசம் மட்டும்",
+ "freeTooltip": "OpenCode இந்த மாதிரியை இலவசம் எனக் குறிக்கிறது.",
+ "loadingModels": "OpenCode மாதிரிகளை ஏற்றுகிறது...",
+ "noSourcesFound": "மூலங்கள் எதுவும் கிடைக்கவில்லை.",
+ "recommendedOnly": "பரிந்துரைக்கப்பட்டது மட்டும்",
+ "searchSources": "மூலங்களைத் தேடு",
+ "sourcesCount": "{{count}} OpenCode மூலங்கள்",
+ "sourcesCount_few": "{{count}} OpenCode மூலங்கள்",
+ "sourcesCount_many": "{{count}} OpenCode மூலங்கள்",
+ "sourcesCount_one": "{{count}} OpenCode மூலம்",
+ "sourcesCount_other": "{{count}} OpenCode மூலங்கள்"
+ },
+ "reason": "காரணம்: {{reason}}",
+ "runtimeModelsSyncing": "வெளிப்படையான மாதிரிகள் தற்போதைய runtime இலிருந்து ஏற்றப்படுகின்றன. list ஒத்திசைக்கும்போது இயல்புநிலை கிடைக்கும்.",
+ "fastMode": {
+ "codexLabel": "Fast பயன்முறை (2x credits)",
+ "optionalLabel": "Fast பயன்முறை (விருப்பத்திற்குரியது)",
+ "defaultOff": "இயல்புநிலை (Off)",
+ "fast": "Fast",
+ "off": "Off",
+ "defaultFast": "இயல்புநிலை (Fast)",
+ "defaultResolvesTo": "இயல்புநிலை தற்போது {{mode}} க்கு resolve ஆகிறது.",
+ "runtimeBackedHint": "Fast பயன்முறை runtime-backed மற்றும் resolved Anthropic launch model அதை ஆதரிக்கும்போது மட்டுமே திறக்கப்படும்."
+ },
+ "anthropicExtraUsage": {
+ "pricingDocs": "Anthropic pricing docs ஐப் படி"
+ },
+ "searchModels": "மாதிரிகளைத் தேடு",
+ "defaultModel": "இயல்புநிலை",
+ "empty": {
+ "noSearchMatches": "இந்தத் தேடலுக்குப் பொருந்தும் மாதிரிகள் இல்லை.",
+ "recommendedFreeOpenCode": "தற்போதைய runtime list இல் பரிந்துரைக்கப்பட்ட இலவச OpenCode மாதிரிகள் எதுவும் கிடைக்கவில்லை.",
+ "freeOpenCode": "தற்போதைய runtime list இல் இலவச OpenCode மாதிரிகள் எதுவும் கிடைக்கவில்லை.",
+ "recommendedOpenCode": "தற்போதைய runtime list இல் பரிந்துரைக்கப்பட்ட OpenCode மாதிரிகள் எதுவும் கிடைக்கவில்லை.",
+ "noModels": "தற்போதைய runtime list இல் மாதிரிகள் எதுவும் கிடைக்கவில்லை."
+ },
+ "openCodeStatus": {
+ "notReadyTitle": "team launch க்கு OpenCode தயாராக இல்லை",
+ "freeModelsAvailableTitle": "OpenCode இலவச மாதிரிகள் கிடைக்கின்றன",
+ "providerNotConnectedTitle": "OpenCode வழங்குநர் இணைக்கப்படவில்லை",
+ "readyTitle": "OpenCode தயார்",
+ "readyMessage": "OpenCode வழங்குநர் readiness ஐ கடந்தது. இந்த team க்கு OpenCode மாதிரிகளைப் பயன்படுத்த அதைத் தேர்ந்தெடுக்கவும்.",
+ "useOpenCode": "OpenCode ஐப் பயன்படுத்து",
+ "badges": {
+ "check": "சரிபார்",
+ "install": "நிறுவு",
+ "free": "இலவசம்",
+ "setup": "அமைப்பு"
+ },
+ "summary": {
+ "checking": "OpenCode நிலை: runtime ஐச் சரிபார்க்கிறது",
+ "status": "OpenCode நிலை: {{parts}}"
+ },
+ "summaryParts": {
+ "teamLaunchBlocked": "team launch தடுக்கப்பட்டது",
+ "providerOptional": "வழங்குநர் இணைப்பு விருப்பத்திற்குரியது",
+ "providerModelsNeedSetup": "வழங்குநர்-backed மாதிரிகளுக்கு அமைப்பு தேவை",
+ "teamLaunchReady": "team launch தயார்",
+ "runtimeDetected": "runtime கண்டறியப்பட்டது",
+ "runtimeMissing": "runtime காணவில்லை",
+ "freeWithoutAuth": "auth இல்லாமல் இலவச மாதிரிகள் கிடைக்கின்றன",
+ "providerConnected": "வழங்குநர் இணைக்கப்பட்டது",
+ "providerNotConnected": "வழங்குநர் இணைக்கப்படவில்லை"
+ },
+ "messages": {
+ "checking": "பயன்பாடு இன்னும் OpenCode runtime ஐச் சரிபார்க்கிறது. வழங்குநர் நிலை முடியும் வரை காத்திருந்து, பிறகு மீண்டும் முயற்சிக்கவும்.",
+ "unsupported": "OpenCode நிறுவப்படவில்லை, கண்டறியப்படவில்லை, அல்லது கண்டறியப்பட்ட runtime ஆதரிக்கப்படவில்லை. OpenCode ஐ நிறுவவும் அல்லது புதுப்பிக்கவும், பிறகு வழங்குநர் நிலையைப் புதுப்பிக்கவும். முகப்புப் பக்கத்தில் உள்ள Install button ஐயும் பயன்படுத்தலாம்.",
+ "freeAvailable": "OpenCode கண்டறியப்பட்டது. ஒரு வழங்குநரை இணைக்காமல் Big Pickle போன்ற இலவச OpenCode மாதிரிகளைப் பயன்படுத்தலாம். வழங்குநர்-backed மாதிரிகள் வேண்டும்போது மட்டுமே ஒரு வழங்குநரை இணைக்கவும்.",
+ "noFreeListed": "OpenCode கண்டறியப்பட்டது, ஆனால் இன்னும் இலவச OpenCode மாதிரி எதுவும் பட்டியலிடப்படவில்லை. வழங்குநர் நிலையைப் புதுப்பிக்கவும், அல்லது வழங்குநர்-backed மாதிரிகளுக்கு OpenCode இல் ஒரு வழங்குநரை இணைக்கவும்.",
+ "launchBlocked": "OpenCode நிறுவப்பட்டு அங்கீகரிக்கப்பட்டுள்ளது, ஆனால் Agent Teams launch readiness தடுக்கப்பட்டுள்ளது.",
+ "ready": "team launch க்கு OpenCode தயார்."
+ },
+ "loadingRuntime": "OpenCode runtime நிலை இன்னும் ஏற்றுகிறது."
+ },
+ "advisory": {
+ "pingNotConfirmed": "Ping உறுதிப்படுத்தப்படவில்லை",
+ "note": "குறிப்பு"
+ },
+ "placeholders": {
+ "customModelId": "openai/gpt-oss-20b"
+ },
+ "routeGroups": {
+ "openCodeConfig": "OpenCode config",
+ "builtinFree": "இலவச உள்ளமைந்தது",
+ "connectedProviders": "இணைக்கப்பட்ட வழங்குநர்கள்",
+ "otherCatalog": "மற்ற OpenCode catalog"
+ },
+ "pricing": {
+ "free": "இலவசம்",
+ "inputShort": "in {{rate}}",
+ "outputShort": "out {{rate}}",
+ "perMillionSummary": "{{summary}} / 1M",
+ "inputTitle": "Input: 1M tokens க்கு {{rate}}",
+ "outputTitle": "Output: 1M tokens க்கு {{rate}}",
+ "cacheReadTitle": "Cache read: 1M tokens க்கு {{rate}}",
+ "cacheWriteTitle": "Cache write: 1M tokens க்கு {{rate}}"
+ },
+ "defaultTooltip": {
+ "anthropicCompatibleWithResolved": "Anthropic-compatible endpoint இயல்புநிலை மாதிரியைப் பயன்படுத்துகிறது.\nதற்போது {{model}} க்கு resolve ஆகிறது.",
+ "anthropicCompatible": "Anthropic-compatible endpoint இயல்புநிலை மாதிரியைப் பயன்படுத்துகிறது.",
+ "anthropic": "Claude team இயல்புநிலை மாதிரியைப் பயன்படுத்துகிறது.\n1M context உடன் {{longContextModel}} க்கு, அல்லது Limit context இயக்கப்பட்டிருக்கும்போது 200K context உடன் {{limitedContextModel}} க்கு resolve ஆகிறது.",
+ "openCodeWithResolved": "OpenCode இயல்புநிலை மாதிரியைப் பயன்படுத்துகிறது.\nதற்போது {{model}} க்கு resolve ஆகிறது.",
+ "openCode": "OpenCode runtime இயல்புநிலை மாதிரியைப் பயன்படுத்துகிறது.",
+ "runtime": "தேர்ந்தெடுத்த வழங்குநருக்கான runtime இயல்புநிலையைப் பயன்படுத்துகிறது."
+ },
+ "multimodelOff": "Multimodel off",
+ "unavailableInRuntime": "தற்போதைய runtime இல் கிடைக்கவில்லை"
+ },
+ "taskDetail": {
+ "actions": {
+ "cancel": "ரத்துசெய்",
+ "delete": "நீக்கு",
+ "markResolved": "தீர்க்கப்பட்டதாகக் குறி",
+ "save": "சேமி"
+ },
+ "attachments": {
+ "commentAttachment": "கருத்து இணைப்பு",
+ "fromComments": "கருத்துகளிலிருந்து",
+ "preview": "{{filename}} ஐ முன்னோட்டமிடு"
+ },
+ "changes": {
+ "badges": {
+ "attention": "கவனம்",
+ "noSafeDiff": "பாதுகாப்பான diff இல்லை"
+ },
+ "empty": {
+ "noFileChangesRecorded": "கோப்பு மாற்றங்கள் எதுவும் பதிவு செய்யப்படவில்லை",
+ "noFileChangesRecordedYet": "இன்னும் கோப்பு மாற்றங்கள் எதுவும் பதிவு செய்யப்படவில்லை",
+ "noReviewableChangesRecovered": "மதிப்பாய்வு செய்யக்கூடிய கோப்பு மாற்றங்கள் எதுவும் மீட்கப்படவில்லை",
+ "noSafeDiffAvailable": "பாதுகாப்பான diff கிடைக்கவில்லை"
+ },
+ "loadFailed": "task மாற்றங்கள் சுருக்கத்தை ஏற்ற முடியவில்லை",
+ "loading": "மாற்றங்களை ஏற்றுகிறது...",
+ "fileCount": "{{count}} கோப்புகள்",
+ "fileRowsHidden": "{{count}} கோப்பு rows மறைக்கப்பட்டன",
+ "moreDiagnostics": "{{count}} மேலும் diagnostics",
+ "moreFiles": "{{count}} மேலும் கோப்புகள்",
+ "openInEditor": "editor இல் திற",
+ "openTask": "task {{subject}} ஐத் திற",
+ "refresh": "மாற்றங்களைப் புதுப்பி",
+ "refreshFailed": "புதுப்பிப்பு தோல்வியடைந்தது: {{error}}",
+ "refreshing": "புதுப்பிக்கிறது",
+ "refreshingChanges": "மாற்றங்களைப் புதுப்பிக்கிறது...",
+ "refreshTeamChanges": "team மாற்றங்களைப் புதுப்பி",
+ "refreshShort": "புதுப்பி",
+ "reviewDiff": "diff ஐ மதிப்பாய்வு செய்",
+ "reviewTaskDiff": "task diff ஐ மதிப்பாய்வு செய்",
+ "scannedCandidateTasks": "{{eligible}} candidate tasks இல் {{requested}} ஐ scan செய்தது",
+ "tasksDeferred": "இந்த pass இல் {{count}} tasks ஒத்திவைக்கப்பட்டன",
+ "title": "மாற்றங்கள்",
+ "fileCount_few": "{{count}} கோப்புகள்",
+ "fileCount_many": "{{count}} கோப்புகள்",
+ "fileCount_one": "{{count}} கோப்பு",
+ "fileCount_other": "{{count}} கோப்புகள்",
+ "fileRowsHidden_few": "{{count}} கோப்பு rows மறைக்கப்பட்டன",
+ "fileRowsHidden_many": "{{count}} கோப்பு rows மறைக்கப்பட்டன",
+ "fileRowsHidden_one": "{{count}} கோப்பு row மறைக்கப்பட்டது",
+ "fileRowsHidden_other": "{{count}} கோப்பு rows மறைக்கப்பட்டன",
+ "moreDiagnostics_few": "{{count}} மேலும் diagnostics",
+ "moreDiagnostics_many": "{{count}} மேலும் diagnostics",
+ "moreDiagnostics_one": "{{count}} மேலும் diagnostics",
+ "moreDiagnostics_other": "{{count}} மேலும் diagnostics",
+ "moreFiles_few": "{{count}} மேலும் கோப்புகள்",
+ "moreFiles_many": "{{count}} மேலும் கோப்புகள்",
+ "moreFiles_one": "{{count}} மேலும் கோப்பு",
+ "moreFiles_other": "{{count}} மேலும் கோப்புகள்",
+ "tasksDeferred_few": "இந்த pass இல் {{count}} tasks ஒத்திவைக்கப்பட்டன",
+ "tasksDeferred_many": "இந்த pass இல் {{count}} tasks ஒத்திவைக்கப்பட்டன",
+ "tasksDeferred_one": "இந்த pass இல் {{count}} task ஒத்திவைக்கப்பட்டது",
+ "tasksDeferred_other": "இந்த pass இல் {{count}} tasks ஒத்திவைக்கப்பட்டன"
+ },
+ "clarification": {
+ "awaitingLead": "team lead இடமிருந்து தெளிவுபடுத்தலுக்காகக் காத்திருக்கிறது",
+ "awaitingUser": "உங்களிடமிருந்து தெளிவுபடுத்தலுக்காகக் காத்திருக்கிறது"
+ },
+ "description": {
+ "add": "விளக்கம் சேர்க்க கிளிக் செய்...",
+ "edit": "விளக்கத்தைத் திருத்து",
+ "placeholder": "Task விளக்கம் (markdown ஆதரிக்கிறது)"
+ },
+ "loading": {
+ "fetchingTeamData": "team தரவைப் பெறுகிறது",
+ "title": "task ஐ ஏற்றுகிறது..."
+ },
+ "logs": {
+ "newArriving": "புதிய task logs வருகின்றன"
+ },
+ "notFound": "Task கிடைக்கவில்லை",
+ "related": {
+ "blockedBy": "தடுக்கப்பட்டது",
+ "blocks": "தடுக்கிறது",
+ "linkedFrom": "இருந்து இணைக்கப்பட்டது",
+ "links": "Links",
+ "title": "தொடர்புடைய tasks"
+ },
+ "review": {
+ "reviewer": "மதிப்பாய்வாளர்: {{reviewer}}"
+ },
+ "sections": {
+ "attachments": "இணைப்புகள்",
+ "changes": "மாற்றங்கள்",
+ "comments": "கருத்துகள்",
+ "description": "விளக்கம்",
+ "taskLogs": "Task Logs",
+ "workflowHistory": "Workflow வரலாறு"
+ },
+ "unassigned": "ஒதுக்கப்படாதது",
+ "workflow": {
+ "implementationTimeTitle": "நிலைத்த work intervals இலிருந்து செயல்படுத்தல் நேரம்",
+ "inProgressTime": "முன்னேற்றத்தில் இருந்த நேரம் {{duration}}"
+ },
+ "comments": {
+ "renderLimit": "UI ஐ துரிதமாக வைத்திருக்க மிக சமீபத்திய {{formattedCount}} கருத்துகளைக் காட்டுகிறது.",
+ "badges": {
+ "approved": "ஒப்புதல் அளிக்கப்பட்டது",
+ "reviewRequested": "மதிப்பாய்வு கோரப்பட்டது"
+ },
+ "unknownTime": "தெரியாத நேரம்",
+ "actions": {
+ "reply": "பதிலளி",
+ "replyToComment": "கருத்துக்குப் பதிலளி",
+ "showMore": "மேலும் கருத்துகளைக் காட்டு ({{visible}}/{{total}})",
+ "cancelReply": "பதிலை ரத்துசெய்",
+ "comment": "கருத்து"
+ },
+ "attachments": {
+ "previewAlt": "இணைப்பு முன்னோட்டம்",
+ "downloadFailed": "பதிவிறக்கம் தோல்வியடைந்தது"
+ },
+ "replyingTo": "பதிலளிக்கிறது",
+ "input": {
+ "placeholder": "ஒரு கருத்தைச் சேர்... (அனுப்ப Enter)",
+ "charsLeft": "{{count}} எழுத்துகள் மீதம்",
+ "charsLeft_one": "{{count}} எழுத்து மீதம்",
+ "charsLeft_other": "{{count}} எழுத்துகள் மீதம்",
+ "charsLeft_few": "{{count}} எழுத்துகள் மீதம்",
+ "charsLeft_many": "{{count}} எழுத்துகள் மீதம்"
+ }
+ },
+ "workflowTimeline": {
+ "empty": "Workflow வரலாறு எதுவும் பதிவு செய்யப்படவில்லை",
+ "currentImplementationInterval": "தற்போதைய செயல்படுத்தல் interval",
+ "implementationIntervalEnded": "இந்த transition இல் செயல்படுத்தல் interval முடிந்தது",
+ "runningPrefix": "இயங்குகிறது ",
+ "createdAs": "உருவாக்கப்பட்டது",
+ "by": "மூலம்",
+ "reassigned": "மீண்டும் ஒதுக்கப்பட்டது",
+ "assignedTo": "ஒதுக்கப்பட்டது",
+ "unassignedFrom": "இருந்து ஒதுக்கல் நீக்கப்பட்டது",
+ "ownerChanged": "உரிமையாளர் மாற்றப்பட்டார்",
+ "reviewRequested": "மதிப்பாய்வு கோரப்பட்டது",
+ "reviewStarted": "மதிப்பாய்வு தொடங்கப்பட்டது",
+ "changesRequested": "மாற்றங்கள் கோரப்பட்டன",
+ "approved": "ஒப்புதல் அளிக்கப்பட்டது",
+ "unknownEvent": "தெரியாத நிகழ்வு"
+ },
+ "reviewStates": {
+ "approved": "ஒப்புதல் அளிக்கப்பட்டது",
+ "needsFix": "திருத்தம் தேவை",
+ "inReview": "மதிப்பாய்வில்"
+ }
+ },
+ "tasks": {
+ "createTask": {
+ "assignee": "ஒதுக்கப்பட்டவர்",
+ "assigneeOptional": "ஒதுக்கப்பட்டவர் (விருப்பத்திற்குரியது)",
+ "blockedByOptional": "தடுக்கும் tasks (விருப்பத்திற்குரியது)",
+ "blockedBySummary": "Task இவற்றால் தடுக்கப்படும்: {{tasks}}",
+ "cancel": "ரத்துசெய்",
+ "create": "உருவாக்கு",
+ "creating": "உருவாக்குகிறது...",
+ "description": "Task ஆனது team இன் tasks/ directory இல் உருவாக்கப்பட்டு Kanban board இல் தோன்றும்.",
+ "descriptionOptional": "விளக்கம் (விருப்பத்திற்குரியது)",
+ "detailsPlaceholder": "Task விவரங்கள் (markdown ஆதரிக்கிறது)",
+ "hideOptionalFields": "விருப்ப fields ஐ மறை",
+ "offlineNotice": {
+ "after": "- execution ஐத் தொடங்க team ஐத் தொடங்கவும்.",
+ "before": "Team ஆஃப்லைனில் உள்ளது. Task இதில் சேர்க்கப்படும்"
+ },
+ "promptOptional": "ஒதுக்கப்பட்டவருக்கான prompt (விருப்பத்திற்குரியது)",
+ "promptPlaceholder": "team உறுப்பினருக்கான தனிப்பயன் வழிமுறைகள்...",
+ "relatedOptional": "தொடர்புடைய tasks (விருப்பத்திற்குரியது)",
+ "relatedSummary": "தொடர்புடையது: {{tasks}}",
+ "saved": "சேமிக்கப்பட்டது",
+ "searchTasks": "tasks ஐத் தேடு...",
+ "selectMember": "ஒரு உறுப்பினரைத் தேர்ந்தெடு",
+ "selectMemberOptional": "உறுப்பினரைத் தேர்ந்தெடு...",
+ "showOptionalFields": "விருப்ப fields ஐக் காட்டு",
+ "startImmediately": "உடனடியாகத் தொடங்கு",
+ "startOfflineHint": "Team ஆஃப்லைனில் உள்ளது. tasks ஐ உடனடியாகத் தொடங்க முதலில் team ஐத் தொடங்கவும்.",
+ "subject": "தலைப்பு",
+ "subjectPlaceholder": "என்ன செய்ய வேண்டும்?",
+ "title": "Task ஐ உருவாக்கு",
+ "todo": "TODO"
+ },
+ "list": {
+ "columns": {
+ "blockedBy": "தடுக்கப்பட்டது",
+ "blocks": "தடுக்கிறது",
+ "id": "ID",
+ "owner": "உரிமையாளர்",
+ "status": "நிலை",
+ "subject": "தலைப்பு"
+ },
+ "empty": "இந்த team இல் tasks இல்லை",
+ "filters": {
+ "allOwners": "அனைத்து உரிமையாளர்கள்",
+ "allStatuses": "அனைத்து நிலைகள்",
+ "ownerAria": "உரிமையாளர் வாரியாக tasks ஐ வடிகட்டு",
+ "statusAria": "நிலை வாரியாக tasks ஐ வடிகட்டு"
+ },
+ "showing": "{{total}} இல் {{shown}} காட்டப்படுகிறது"
+ },
+ "status": {
+ "completed": "completed",
+ "deleted": "deleted",
+ "inProgress": "in_progress",
+ "pending": "pending"
+ },
+ "statusSummary": {
+ "progressAria": "Tasks {{completed}}/{{total}} முடிந்தது",
+ "inProgress": "{{count}} in_progress",
+ "inProgress_one": "{{count}} in_progress",
+ "inProgress_other": "{{count}} in_progress",
+ "inProgress_few": "{{count}} in_progress",
+ "inProgress_many": "{{count}} in_progress",
+ "pending": "{{count}} pending",
+ "pending_one": "{{count}} pending",
+ "pending_other": "{{count}} pending",
+ "pending_few": "{{count}} pending",
+ "pending_many": "{{count}} pending",
+ "completed": "{{count}} completed",
+ "completed_one": "{{count}} completed",
+ "completed_other": "{{count}} completed",
+ "completed_few": "{{count}} completed",
+ "completed_many": "{{count}} completed"
+ },
+ "unassigned": "ஒதுக்கப்படாதது",
+ "teamPrefix": "Team:",
+ "openTask": "task ஐத் திற",
+ "deleteConfirm": {
+ "title": "task ஐ நீக்கு",
+ "message": "task #{{taskId}} ஐ குப்பைக்கு நகர்த்தவா?",
+ "confirmLabel": "நீக்கு",
+ "cancelLabel": "ரத்துசெய்"
+ }
+ },
+ "editor": {
+ "actions": {
+ "cancel": "ரத்துசெய்",
+ "closeEditor": "editor ஐ மூடு",
+ "closeTab": "tab ஐ மூடு",
+ "closeTooltip": "editor ஐ மூடு (Esc)",
+ "discard": "நிராகரி",
+ "discardAndClose": "நிராகரித்து மூடு",
+ "keep": "வைத்திரு",
+ "keepMine": "எனதை வைத்திரு",
+ "keyboardShortcuts": "Keyboard shortcuts",
+ "overwrite": "மேலெழுது",
+ "refreshAria": "புதுப்பி (F5)",
+ "refreshTooltip": "git நிலையைப் புதுப்பி (F5)",
+ "reload": "மீண்டும் ஏற்று",
+ "retry": "மீண்டும் முயற்சி",
+ "save": "சேமி",
+ "saveAllAndClose": "அனைத்தையும் சேமித்து மூடு"
+ },
+ "ariaLabel": "Project Editor",
+ "dialogs": {
+ "conflictDescription": "நீங்கள் திறந்ததிலிருந்து கோப்பு வெளிப்புறமாக மாற்றப்பட்டுள்ளது. உங்கள் மாற்றங்களுடன் மேலெழுதவா?",
+ "conflictTitle": "Save Conflict",
+ "unsavedDescription": "உங்களிடம் சேமிக்கப்படாத மாற்றங்கள் உள்ளன. என்ன செய்ய விரும்புகிறீர்கள்?",
+ "unsavedFileDescription": "இந்தக் கோப்பில் சேமிக்கப்படாத மாற்றங்கள் உள்ளன. என்ன செய்ய விரும்புகிறீர்கள்?",
+ "unsavedTitle": "சேமிக்கப்படாத மாற்றங்கள்"
+ },
+ "newFile": {
+ "validation": {
+ "nameRequired": "பெயர் காலியாக இருக்க முடியாது",
+ "invalidName": "தவறான பெயர்",
+ "invalidCharacters": "பெயரில் தவறான எழுத்துகள் உள்ளன",
+ "nameTooLong": "பெயர் மிக நீளமானது"
+ },
+ "placeholders": {
+ "fileName": "கோப்பு பெயர்...",
+ "folderName": "Folder பெயர்..."
+ },
+ "aria": {
+ "newFileName": "புதிய கோப்பு பெயர்",
+ "newFolderName": "புதிய folder பெயர்"
+ }
+ },
+ "draftRecovered": "முந்தைய session இலிருந்து சேமிக்கப்படாத மாற்றங்கள் மீட்கப்பட்டன.",
+ "externalChange": {
+ "changed": "disk இல் கோப்பு மாற்றப்பட்டது.",
+ "deleted": "disk இல் கோப்பு இனி இல்லை."
+ },
+ "saveFailed": "சேமிப்பு தோல்வியடைந்தது: {{error}}",
+ "sidebar": {
+ "explorer": "Explorer",
+ "hide": "sidebar ஐ மறை",
+ "hideWithShortcut": "sidebar ஐ மறை ({{shortcut}})",
+ "show": "sidebar ஐக் காட்டு",
+ "showWithShortcut": "sidebar ஐக் காட்டு ({{shortcut}})"
+ },
+ "searchInFiles": {
+ "title": "கோப்புகளில் தேடு",
+ "closeSearch": "தேடலை மூடு",
+ "closeSearchShortcut": "தேடலை மூடு (Esc)",
+ "searchPlaceholder": "தேடு...",
+ "matchCase": "எழுத்து வடிவம் பொருந்து",
+ "matchCaseToggle": "Aa",
+ "noResults": "முடிவுகள் எதுவும் கிடைக்கவில்லை",
+ "resultsSummary": "{{fileCount}} கோப்புகளில் {{count}} பொருத்தங்கள்",
+ "resultsSummary_one": "{{fileCount}} கோப்புகளில் {{count}} பொருத்தம்",
+ "truncated": "(truncated)",
+ "resultsSummary_few": "{{fileCount}} கோப்புகளில் {{count}} பொருத்தங்கள்",
+ "resultsSummary_many": "{{fileCount}} கோப்புகளில் {{count}} பொருத்தங்கள்",
+ "resultsSummary_other": "{{fileCount}} கோப்புகளில் {{count}} பொருத்தங்கள்"
+ },
+ "fileTree": {
+ "failedToLoadFiles": "கோப்புகளை ஏற்ற முடியவில்லை: {{error}}",
+ "loading": "கோப்புகளை ஏற்றுகிறது...",
+ "empty": "கோப்புகள் எதுவும் கிடைக்கவில்லை",
+ "dropForProjectRoot": "project root க்கு இங்கே விடவும்",
+ "moveToTrash": "Trash க்கு நகர்த்து",
+ "moveToTrashConfirm": "\"{{name}}\" ஐ Trash க்கு நகர்த்தவா?",
+ "cancel": "ரத்துசெய்"
+ },
+ "goToLine": {
+ "title": "வரிக்குச் செல்",
+ "position": "(தற்போதைய: {{current}}, மொத்தம்: {{total}})",
+ "placeholder": "வரி எண், +offset, -offset, அல்லது %",
+ "go": "செல்"
+ },
+ "searchPanel": {
+ "previousMatch": "முந்தைய பொருத்தம்",
+ "nextMatch": "அடுத்த பொருத்தம்",
+ "close": "மூடு",
+ "replacePlaceholder": "மாற்று",
+ "replace": "மாற்று",
+ "replaceNext": "அடுத்ததை மாற்று",
+ "all": "அனைத்தும்",
+ "replaceAll": "அனைத்தையும் மாற்று"
+ },
+ "statusBar": {
+ "position": "Ln {{line}}, Col {{col}}",
+ "enableWatcher": "file watcher ஐ இயக்கு",
+ "disableWatcher": "file watcher ஐ முடக்கு",
+ "watch": "watch",
+ "watching": "watching",
+ "watchExternalChanges": "வெளிப்புற மாற்றங்களை watch செய்",
+ "disableExternalWatcher": "வெளிப்புற மாற்ற watcher ஐ முடக்கு",
+ "encodingUtf8": "UTF-8",
+ "spaces": "Spaces: {{count}}"
+ },
+ "imagePreview": {
+ "loading": "முன்னோட்டத்தை ஏற்றுகிறது...",
+ "openFullSize": "முழு அளவு முன்னோட்டத்தைத் திற",
+ "openSystemViewer": "System Viewer இல் திற"
+ },
+ "quickOpen": {
+ "title": "Quick Open",
+ "searchPlaceholder": "பெயர் மூலம் கோப்புகளைத் தேடு...",
+ "loading": "கோப்புகளை ஏற்றுகிறது...",
+ "empty": "கோப்புகள் எதுவும் கிடைக்கவில்லை"
+ },
+ "errorBoundary": {
+ "crashed": "Editor crash ஆனது",
+ "unknownError": "தெரியாத பிழை"
+ },
+ "binaryPlaceholder": {
+ "file": "Binary கோப்பு ({{size}})"
+ },
+ "unsavedChanges": "சேமிக்கப்படாத மாற்றங்கள்",
+ "empty": {
+ "selectFile": "திருத்த மரத்திலிருந்து ஒரு கோப்பைத் தேர்ந்தெடு"
+ },
+ "search": {
+ "toggleReplace": "மாற்றுதலை மாற்று",
+ "placeholder": "தேடு"
+ },
+ "shortcuts": {
+ "title": "Keyboard Shortcuts",
+ "groups": {
+ "fileOperations": "கோப்பு செயல்பாடுகள்",
+ "search": "தேடு",
+ "navigation": "வழிசெலுத்தல்",
+ "editing": "திருத்துதல்",
+ "markdown": "Markdown",
+ "general": "பொது"
+ },
+ "actions": {
+ "quickOpen": "Quick Open",
+ "save": "சேமி",
+ "saveAll": "அனைத்தையும் சேமி",
+ "closeTab": "Tab ஐ மூடு",
+ "findInFile": "கோப்பில் கண்டறி",
+ "searchInFiles": "கோப்புகளில் தேடு",
+ "goToLine": "வரிக்குச் செல்",
+ "nextTab": "அடுத்த Tab",
+ "previousTab": "முந்தைய Tab",
+ "cycleTabs": "Tabs ஐ சுழற்று",
+ "toggleSidebar": "Sidebar ஐ மாற்று",
+ "undo": "செயல்தவிர்",
+ "redo": "மீண்டும் செய்",
+ "selectNextMatch": "அடுத்த பொருத்தத்தைத் தேர்ந்தெடு",
+ "toggleComment": "கருத்தை மாற்று",
+ "splitPreview": "முன்னோட்டத்தைப் பிரி",
+ "fullPreview": "முழு முன்னோட்டம்",
+ "closeEditor": "Editor ஐ மூடு"
+ }
+ },
+ "toolbar": {
+ "enableWordWrap": "word wrap ஐ இயக்கு",
+ "disableWordWrap": "word wrap ஐ முடக்கு",
+ "closeSplitPreview": "split preview ஐ மூடு",
+ "closePreview": "முன்னோட்டத்தை மூடு"
+ }
+ },
+ "launch": {
+ "actions": {
+ "createSchedule": "அட்டவணையை உருவாக்கு",
+ "creating": "உருவாக்குகிறது...",
+ "goToDashboard": "Dashboard க்குச் செல்",
+ "launchTeam": "team ஐ தொடங்கு",
+ "launching": "தொடங்குகிறது...",
+ "relaunchTeam": "team ஐ மீண்டும் தொடங்கு",
+ "relaunching": "மீண்டும் தொடங்குகிறது...",
+ "saveChanges": "மாற்றங்களைச் சேமி",
+ "saving": "சேமிக்கிறது..."
+ },
+ "billing": {
+ "prefix": "ஜூன் 15, 2026 முதல், Anthropic கட்டணம் விதிக்கிறது",
+ "readArticle": "Anthropic கட்டுரையைப் படி",
+ "suffix": "மற்றும் Agent SDK பயன்பாடு மாதாந்திர Agent SDK credit இலிருந்து, interactive Claude Code வரம்புகளிலிருந்து தனியாக. credit ஒவ்வொரு billing cycle இலும் மீட்டமைக்கப்படும் மற்றும் பயன்படுத்தப்படாத credit roll over ஆகாது."
+ },
+ "conflict": {
+ "description": "ஒரே directory இல் இரண்டு teams ஐ இயக்குவது ஆபத்தானது - அவை ஒரே கோப்புகளைத் திருத்துவதில் முரண்படலாம். தனிமைப்படுத்தலுக்கு வேறு directory அல்லது git worktree ஐப் பயன்படுத்த பரிசீலிக்கவும்.",
+ "title": "இந்த working directory க்கு மற்றொரு team \"{{team}}\" ஏற்கனவே இயங்குகிறது",
+ "workingDirectory": "Working directory:"
+ },
+ "description": {
+ "createSchedule": "தானியங்கி Claude task execution ஐ அட்டவணைப்படுத்து",
+ "createScheduleForTeam": "team \"{{team}}\" க்கு தானியங்கி இயக்கங்களை அட்டவணைப்படுத்து",
+ "editSchedule": "team \"{{team}}\" க்கான அட்டவணையைத் திருத்துகிறது",
+ "launchPrefix": "team ஐத் தொடங்கு",
+ "launchSuffix": "உள்ளூர் Claude CLI வழியாக.",
+ "relaunchPrefix": "இதற்கான தற்போதைய இயக்கத்தை நிறுத்து",
+ "relaunchSuffix": "மற்றும் உள்ளூர் Claude CLI வழியாக அதை மீண்டும் தொடங்கு."
+ },
+ "prepare": {
+ "action": {
+ "launch": "தொடங்கு",
+ "relaunch": "மீண்டும் தொடங்கு"
+ },
+ "blocked": "Runtime சூழல் கிடைக்கவில்லை - {{action}} தடுக்கப்பட்டுள்ளது",
+ "checkingProviders": "தேர்ந்தெடுத்த வழங்குநர்களைச் சரிபார்க்கிறது...",
+ "failed": "தேர்ந்தெடுத்த வழங்குநர்களைத் தயார் செய்ய முடியவில்லை",
+ "preflight": "{{action}} க்கு முன் பிழைகளைப் பிடிக்க pre-flight சரிபார்ப்பு",
+ "preparingEnvironment": "சூழலைத் தயார் செய்கிறது...",
+ "ready": "அனைத்து தேர்ந்தெடுத்த வழங்குநர்களும் தயார்.",
+ "readyWithNotes": "அனைத்து தேர்ந்தெடுத்த வழங்குநர்களும் தயார், குறிப்புகளுடன்.",
+ "unsupportedPreload": "தற்போதைய preload பதிப்பு team:prepareProvisioning ஐ ஆதரிக்கவில்லை. dev app ஐ மறுதொடக்கம் செய்யவும்.",
+ "selectWorkingDirectory": "launch சூழலை சரிபார்க்க ஒரு working directory ஐத் தேர்ந்தெடுக்கவும்.",
+ "someProvidersNeedAttention": "சில தேர்ந்தெடுத்த வழங்குநர்களுக்கு கவனம் தேவை."
+ },
+ "prompt": {
+ "label": "Prompt",
+ "oneShotPrefix": "இந்த prompt இதற்கு அனுப்பப்படும்",
+ "oneShotSuffix": "one-shot execution க்காக",
+ "saved": "சேமிக்கப்பட்டது",
+ "schedulePlaceholder": "அட்டவணையில் Claude செயல்படுத்த வேண்டிய வழிமுறைகள்...",
+ "teamLeadOptional": "team lead க்கான prompt (விருப்பத்திற்குரியது)",
+ "teamLeadPlaceholder": "team lead க்கான வழிமுறைகள்..."
+ },
+ "providerChanged": "வழங்குநர் {{from}} இலிருந்து {{to}} க்கு மாற்றப்பட்டது. முந்தைய lead session மீண்டும் தொடரப்படாது, மேலும் புதிய runtime சரியாகப் பயன்படுத்தப்படும்படி lead புதிய context உடன் தொடங்கும்.",
+ "relaunchFreshSession": "Team மீண்டும் தொடங்குதல் புதிய lead session ஐத் தொடங்குகிறது. நிலையான team நிலை, task board மற்றும் உறுப்பினர் கட்டமைப்பு launch prompt இல் மீண்டும் நிரப்பப்படுகின்றன.",
+ "relaunchWarning": {
+ "description": "இந்த அமைப்புகளைச் சேமிப்பது தற்போதைய team process ஐ நிறுத்தி, புதுப்பிக்கப்பட்ட roster ஐ நிலைநிறுத்தி, புதிய runtime உடன் team ஐ மீண்டும் தொடங்கும்.",
+ "title": "மீண்டும் தொடங்குதல் தற்போதைய team இயக்கத்தை மறுதொடக்கம் செய்யும்"
+ },
+ "schedule": {
+ "labelOptional": "Label (விருப்பத்திற்குரியது)",
+ "labelPlaceholder": "எ.கா., தினசரி code review, இரவு tests...",
+ "maxBudgetUsd": "அதிகபட்ச budget (USD)",
+ "maxTurns": "அதிகபட்ச turns",
+ "noLimit": "வரம்பு இல்லை",
+ "noMatches": "உங்கள் தேடலுக்குப் பொருந்தும் teams இல்லை.",
+ "noTeams": "teams எதுவும் கிடைக்கவில்லை. முதலில் ஒரு team ஐ உருவாக்கவும்.",
+ "searchTeams": "teams ஐத் தேடு...",
+ "selectTeam": "ஒரு team ஐத் தேர்ந்தெடு...",
+ "team": "Team",
+ "title": "அட்டவணை"
+ },
+ "title": {
+ "createSchedule": "அட்டவணையை உருவாக்கு",
+ "editSchedule": "அட்டவணையைத் திருத்து",
+ "launch": "Team ஐ தொடங்கு",
+ "relaunch": "Team ஐ மீண்டும் தொடங்கு"
+ },
+ "errors": {
+ "loadProjectsFailed": "projects ஐ ஏற்ற முடியவில்லை",
+ "saveScheduleFailed": "அட்டவணையைச் சேமிக்க முடியவில்லை",
+ "relaunchFailed": "team ஐ மீண்டும் தொடங்க முடியவில்லை",
+ "launchFailed": "team ஐ தொடங்க முடியவில்லை"
+ },
+ "validation": {
+ "openCodeLeadModelRequired": "OpenCode lead க்கு ஒரு தேர்ந்தெடுத்த மாதிரி தேவை.",
+ "openCodeTeammateRequired": "OpenCode lead க்கு குறைந்தது ஒரு OpenCode teammate தேவை.",
+ "selectWorkingDirectory": "working directory ஐத் தேர்ந்தெடு (cwd)",
+ "fixMemberNames": "தொடங்குவதற்கு முன் உறுப்பினர் பெயர்களைச் சரிசெய்யவும்",
+ "memberNamesUnique": "தொடங்குவதற்கு முன் உறுப்பினர் பெயர்கள் தனித்துவமாக இருக்க வேண்டும்"
+ },
+ "optionalSettings": {
+ "relaunchTitle": "மீண்டும் தொடங்கும் அமைப்புகள்",
+ "title": "விருப்ப launch அமைப்புகள்",
+ "relaunchDescription": "team ஐ மறுதொடக்கம் செய்வதற்கு முன் roster மற்றும் lead runtime ஐ மதிப்பாய்வு செய்யவும்.",
+ "description": "launch flow ஐ project path இல் கவனம் செலுத்தி வைத்திருங்கள், கூடுதல் கட்டுப்பாடு வேண்டும்போது மட்டுமே இதை விரிவாக்கவும்."
+ }
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "team ஐ நகலெடு",
+ "createTeam": "Team ஐ உருவாக்கு",
+ "deleteForever": "நிரந்தரமாக நீக்கு",
+ "deletePermanently": "நிரந்தரமாக நீக்கு",
+ "deleteTeam": "team ஐ நீக்கு",
+ "launching": "தொடங்குகிறது...",
+ "launchTeam": "team ஐ தொடங்கு",
+ "relaunchTeam": "team ஐ மீண்டும் தொடங்கு",
+ "restore": "மீட்டெடு",
+ "restoreTeam": "team ஐ மீட்டெடு",
+ "retry": "மீண்டும் முயற்சி",
+ "stopTeam": "team ஐ நிறுத்து",
+ "stopping": "நிறுத்துகிறது..."
+ },
+ "electronOnly": {
+ "description": "உலாவி பயன்முறையில், உள்ளூர் `~/.claude/teams` directories க்கான அணுகல் கிடைக்காது.",
+ "title": "Teams ஆனது Electron பயன்முறையில் மட்டுமே கிடைக்கிறது"
+ },
+ "empty": {
+ "description": "தொடங்க இங்கே ஒரு team ஐ உருவாக்கவும். அது தானாகவே பட்டியலில் தோன்றும்.",
+ "localOnly": "Team உருவாக்கம் உள்ளூர் Electron பயன்முறையில் மட்டுமே கிடைக்கிறது.",
+ "title": "teams எதுவும் கிடைக்கவில்லை"
+ },
+ "filter": {
+ "clearAll": "அனைத்தையும் அழி",
+ "label": "teams ஐ வடிகட்டு",
+ "projectPriority": "Project முன்னுரிமை",
+ "status": "நிலை"
+ },
+ "loadFailed": "teams ஐ ஏற்ற முடியவில்லை",
+ "loading": "teams ஐ ஏற்றுகிறது...",
+ "localOnly": "உள்ளூர் Electron பயன்முறையில் மட்டுமே கிடைக்கிறது.",
+ "membersCount": "உறுப்பினர்கள்: {{count}}",
+ "membersCount_few": "உறுப்பினர்கள்: {{count}}",
+ "membersCount_many": "உறுப்பினர்கள்: {{count}}",
+ "membersCount_one": "உறுப்பினர்: {{count}}",
+ "membersCount_other": "உறுப்பினர்கள்: {{count}}",
+ "noDescription": "விளக்கம் இல்லை",
+ "noMatches": "தற்போதைய வடிப்பான்களுக்குப் பொருந்தும் teams இல்லை",
+ "partial": {
+ "pending": "கடைசி தொடக்கம் இன்னும் சரிசெய்கிறது.",
+ "skipped": "கடைசி தொடக்கம் சில teammates ஐத் தவிர்த்தது.",
+ "skippedWithCount": "கடைசி தொடக்கம் {{count}}/{{expected}} teammate ஐத் தவிர்த்தது.",
+ "skippedWithCount_few": "கடைசி தொடக்கம் {{count}}/{{expected}} teammates ஐத் தவிர்த்தது.",
+ "skippedWithCount_many": "கடைசி தொடக்கம் {{count}}/{{expected}} teammates ஐத் தவிர்த்தது.",
+ "skippedWithCount_one": "கடைசி தொடக்கம் {{count}}/{{expected}} teammate ஐத் தவிர்த்தது.",
+ "skippedWithCount_other": "கடைசி தொடக்கம் {{count}}/{{expected}} teammates ஐத் தவிர்த்தது.",
+ "stopped": "அனைத்து teammates சேருவதற்கு முன் கடைசி தொடக்கம் நிறுத்தப்பட்டது.",
+ "stoppedWithCount": "{{count}}/{{expected}} teammate சேருவதற்கு முன் கடைசி தொடக்கம் நிறுத்தப்பட்டது.",
+ "stoppedWithCount_few": "{{count}}/{{expected}} teammates சேருவதற்கு முன் கடைசி தொடக்கம் நிறுத்தப்பட்டது.",
+ "stoppedWithCount_many": "{{count}}/{{expected}} teammates சேருவதற்கு முன் கடைசி தொடக்கம் நிறுத்தப்பட்டது.",
+ "stoppedWithCount_one": "{{count}}/{{expected}} teammate சேருவதற்கு முன் கடைசி தொடக்கம் நிறுத்தப்பட்டது.",
+ "stoppedWithCount_other": "{{count}}/{{expected}} teammates சேருவதற்கு முன் கடைசி தொடக்கம் நிறுத்தப்பட்டது."
+ },
+ "searchPlaceholder": "teams ஐத் தேடு...",
+ "sections": {
+ "otherTeams": "மற்ற teams",
+ "projectTeams": "{{project}} க்கான Teams",
+ "selectedProject": "தேர்ந்தெடுத்த project"
+ },
+ "solo": "Solo",
+ "status": {
+ "active": "செயலில்",
+ "deleted": "நீக்கப்பட்டது",
+ "launching": "தொடங்குகிறது...",
+ "offline": "ஆஃப்லைன்",
+ "partialFailure": "தொடக்கம் பாதியில் தோல்வியடைந்தது",
+ "partialPending": "Bootstrap நிலுவையில்",
+ "partialSkipped": "தொடக்கம் உறுப்பினரைத் தவிர்த்தது",
+ "running": "இயங்குகிறது"
+ },
+ "title": "Team ஐத் தேர்ந்தெடு",
+ "trash": "Trash ({{count}})",
+ "trash_few": "Trash ({{count}})",
+ "trash_many": "Trash ({{count}})",
+ "trash_one": "Trash ({{count}})",
+ "trash_other": "Trash ({{count}})",
+ "deleteDraft": {
+ "title": "draft ஐ நீக்கு",
+ "message": "draft team \"{{teamName}}\" ஐ நீக்கவா? இதை மீட்டெடுக்க முடியாது.",
+ "confirmLabel": "நீக்கு",
+ "cancelLabel": "ரத்துசெய்"
+ },
+ "moveToTrash": {
+ "title": "trash க்கு நகர்த்து",
+ "message": "team \"{{teamName}}\" ஐ trash க்கு நகர்த்தவா? அதை பிறகு மீட்டெடுக்கலாம்.",
+ "confirmLabel": "trash க்கு நகர்த்து",
+ "cancelLabel": "ரத்துசெய்"
+ },
+ "deleteForever": {
+ "title": "நிரந்தரமாக நீக்கு",
+ "message": "team \"{{teamName}}\" ஐ நிரந்தரமாக நீக்கவா? அனைத்து தரவும் இழக்கப்படும்.",
+ "confirmLabel": "நிரந்தரமாக நீக்கு",
+ "cancelLabel": "ரத்துசெய்"
+ }
+ },
+ "messageComposer": {
+ "crossTeam": {
+ "hint": "குறிப்பு: Cross-team செய்திகள் இலக்கு team lead க்குச் செல்கின்றன. பதில் உங்களுக்குப் பதிலாக உங்கள் team lead க்குத் திரும்ப வர விரும்பினால், செய்தியில் அதை வெளிப்படையாகச் சொல்லவும்."
+ },
+ "attachments": {
+ "attachFiles": "கோப்புகளை இணை (paste அல்லது drag & drop)",
+ "unavailable": "இணைப்புகள் கிடைக்கவில்லை",
+ "disabledHint": "online team lead மற்றும் online OpenCode teammates க்கு கோப்பு இணைப்புகள் ஆதரிக்கப்படுகின்றன. இணைப்புகளை அகற்றவும் அல்லது பெறுநரை மாற்றவும்.",
+ "restrictions": {
+ "crossTeam": "cross-team செய்திகளுக்கு கோப்பு இணைப்புகள் ஆதரிக்கப்படவில்லை",
+ "teamOffline": "கோப்புகளை இணைக்க team online ஆக இருக்க வேண்டும்",
+ "unsupportedRecipient": "கோப்புகளை team lead அல்லது OpenCode teammates க்கு அனுப்பலாம்",
+ "openCodeOffline": "OpenCode teammates க்கு கோப்புகளை இணைக்க team online ஆக இருக்க வேண்டும்",
+ "sending": "கோப்புகளைச் சேர்ப்பதற்கு முன் தற்போதைய செய்தி அனுப்பப்படுவதற்காகக் காத்திருக்கவும்",
+ "maximumReached": "அதிகபட்ச இணைப்புகள் எட்டப்பட்டன",
+ "leadOnly": "கோப்புகளை team lead க்கு மட்டுமே அனுப்ப முடியும்"
+ }
+ },
+ "slash": {
+ "restrictions": {
+ "attachments": "Slash கட்டளைகளுக்கு live team lead தேவை மற்றும் இணைப்புகளுடன் அனுப்ப முடியாது",
+ "crossTeam": "Slash கட்டளைகளை தற்போதைய team lead இல் மட்டுமே இயக்க முடியும்",
+ "notLead": "Slash கட்டளைகளை team lead க்கு மட்டுமே அனுப்ப முடியும்",
+ "leadOffline": "Slash கட்டளைகளுக்கு team lead online ஆக இருக்க வேண்டும்"
+ }
+ },
+ "status": {
+ "reusedCrossTeamRequest": "சமீபத்திய cross-team கோரிக்கை மீண்டும் பயன்படுத்தப்பட்டது",
+ "teamOffline": "Team ஆஃப்லைன்"
+ },
+ "revision": {
+ "editing": "முந்தைய செய்தியைத் திருத்துகிறது",
+ "cancel": "ரத்துசெய்",
+ "tooltip": "முந்தைய செய்தியை புறக்கணித்து அதை composer க்கு மீட்டெடுக்க agent ஐக் கேள்."
+ },
+ "input": {
+ "charsLeft": "{{count}} எழுத்துகள் மீதம்",
+ "charsLeft_one": "{{count}} எழுத்து மீதம்",
+ "charsLeft_other": "{{count}} எழுத்துகள் மீதம்",
+ "teamLaunchingPlaceholder": "Team தொடங்குகிறது... செய்தி inbox வழங்கலுக்காக queue செய்யப்படும்.",
+ "crossTeamPlaceholder": "{{team}} க்கு cross-team செய்தி...",
+ "teamFallback": "team",
+ "placeholder": "ஒரு செய்தியை எழுது... (அனுப்ப Enter, புதிய வரிக்கு Shift+Enter)",
+ "slashTip": "குறிப்பு: எந்த Claude கட்டளைகளையும் இயக்க \"/\" ஐப் பயன்படுத்தலாம்.",
+ "charsLeft_few": "{{count}} எழுத்துகள் மீதம்",
+ "charsLeft_many": "{{count}} எழுத்துகள் மீதம்"
+ },
+ "teamSelector": {
+ "thisTeam": "இந்த team",
+ "current": "தற்போதைய",
+ "online": "online",
+ "offline": "offline",
+ "onlineTitle": "Online",
+ "offlineTitle": "Offline"
+ },
+ "recipient": {
+ "select": "தேர்ந்தெடு...",
+ "searchPlaceholder": "தேடு...",
+ "noResults": "முடிவுகள் இல்லை"
+ },
+ "actions": {
+ "voiceToText": "குரல் to உரை",
+ "send": "அனுப்பு",
+ "sendingUnavailableLaunching": "team தொடங்கும்போது அனுப்புதல் கிடைக்காது"
+ }
+ },
+ "claudeLogs": {
+ "filter": {
+ "ariaLabel": "logs ஐ வடிகட்டு",
+ "tooltip": "logs ஐ வடிகட்டு",
+ "sections": {
+ "stream": "Stream",
+ "content": "உள்ளடக்கம்"
+ },
+ "kinds": {
+ "output": "Output",
+ "thinking": "Thinking",
+ "tool": "Tool calls"
+ },
+ "actions": {
+ "reset": "மீட்டமை",
+ "save": "சேமி"
+ },
+ "streams": {
+ "stdout": "stdout",
+ "stderr": "stderr"
+ }
+ },
+ "rawLineCount": "{{formattedCount}} raw வரிகள்",
+ "rawLineCount_one": "{{formattedCount}} raw வரி",
+ "rawLinesCaptured": "{{count}} பிடிக்கப்பட்டது",
+ "emptyRawLogs": "{{count}}; இன்னும் எதுவும் assistant/tool output அல்ல.",
+ "noLogsYet": "இன்னும் logs இல்லை.",
+ "teamNotRunning": "Team இயங்கவில்லை.",
+ "searchPlaceholder": "logs ஐத் தேடு...",
+ "clearSearch": "தேடலை அழி",
+ "newCount": "+{{count}} புதியது",
+ "loading": "ஏற்றுகிறது...",
+ "showMore": "மேலும் காட்டு",
+ "noLogsCaptured": "logs எதுவும் பிடிக்கப்படவில்லை.",
+ "noMatchingLogs": "பொருந்தும் logs இல்லை.",
+ "rawLineCount_few": "{{formattedCount}} raw வரிகள்",
+ "rawLineCount_many": "{{formattedCount}} raw வரிகள்",
+ "rawLineCount_other": "{{formattedCount}} raw வரிகள்",
+ "openFullscreen": "fullscreen logs ஐத் திற",
+ "fullscreen": "Fullscreen",
+ "viewingFullscreen": "fullscreen பயன்முறையில் காண்கிறது",
+ "logsTitle": "Logs",
+ "sourceSelect": {
+ "placeholder": "log மூலத்தைத் தேர்ந்தெடு...",
+ "searchPlaceholder": "log மூலங்களைத் தேடு...",
+ "emptyMessage": "log மூலங்கள் எதுவும் கிடைக்கவில்லை.",
+ "ariaLabel": "Log மூலம்",
+ "leadLabel": "Lead",
+ "selectSourceEmpty": "ஒரு log மூலத்தைத் தேர்ந்தெடு.",
+ "leadDescription": "Team Lead",
+ "removedLabel": "அகற்றப்பட்டது",
+ "removedDescription": "அகற்றப்பட்டது"
+ }
+ },
+ "agentGraph": {
+ "popover": {
+ "externalTeam": "வெளி team",
+ "process": {
+ "startedBy": "தொடங்கியவர்:",
+ "at": "இல்:",
+ "openUrl": "URL ஐத் திற"
+ },
+ "overflow": {
+ "hiddenTasks": "மறைக்கப்பட்ட tasks",
+ "empty": "மறைக்கப்பட்ட tasks எதுவும் கிடைக்கவில்லை."
+ },
+ "member": {
+ "lead": "Lead",
+ "workingOn": "வேலை செய்கிறது",
+ "recentTools": "சமீபத்திய tools",
+ "spawn": {
+ "waitingToStart": "தொடங்க காத்திருக்கிறது",
+ "starting": "தொடங்குகிறது",
+ "failed": "தோல்வி"
+ },
+ "state": {
+ "active": "செயலில்",
+ "idle": "idle",
+ "offline": "offline",
+ "runningTool": "tool ஐ இயக்குகிறது"
+ },
+ "activeTool": {
+ "running": "tool ஐ இயக்குகிறது",
+ "failed": "Tool தோல்வியடைந்தது",
+ "finished": "Tool முடிந்தது"
+ },
+ "actions": {
+ "message": "செய்தி",
+ "profile": "Profile",
+ "task": "Task"
+ }
+ }
+ },
+ "logPreview": {
+ "logs": "Logs",
+ "loading": "logs ஐ ஏற்றுகிறது",
+ "more": "+{{count}} மேலும்",
+ "more_one": "+{{count}} மேலும்",
+ "more_other": "+{{count}} மேலும்",
+ "more_few": "+{{count}} மேலும்",
+ "more_many": "+{{count}} மேலும்",
+ "unsupportedProvider": "ஆதரிக்கப்படாத வழங்குநர்",
+ "openCodeLogsDelayed": "OpenCode logs தாமதமானது",
+ "logsUnavailable": "Logs கிடைக்கவில்லை",
+ "noRecentLogs": "சமீபத்திய logs இல்லை",
+ "toolError": "Tool பிழை",
+ "toolResult": "Tool முடிவு",
+ "toolUse": "Tool பயன்பாடு",
+ "thinking": "Thinking",
+ "error": "பிழை",
+ "logEvent": "Log நிகழ்வு",
+ "noErrorOutput": "பிழை output இல்லை",
+ "noOutput": "output இல்லை",
+ "noInput": "input இல்லை"
+ },
+ "blockingEdge": {
+ "title": "Blocking Dependency",
+ "blocks": "தடுக்கிறது",
+ "close": "மூடு",
+ "blockingHiddenTasks": "மறைக்கப்பட்ட tasks ஐ தடுக்கிறது",
+ "blockedHiddenTasks": "தடுக்கப்பட்ட மறைக்கப்பட்ட tasks",
+ "links_one": "{{count}} link",
+ "links_other": "{{count}} links",
+ "hiddenBlockingLinks_one": "{{count}} மறைக்கப்பட்ட blocking link",
+ "hiddenBlockingLinks_other": "{{count}} மறைக்கப்பட்ட blocking links",
+ "hiddenTaskStack": "மறைக்கப்பட்ட task stack",
+ "hiddenTasks_one": "{{count}} மறைக்கப்பட்ட task",
+ "hiddenTasks_other": "{{count}} மறைக்கப்பட்ட tasks",
+ "task": "Task",
+ "openBlockerStack": "blocker stack ஐத் திற",
+ "openBlockedStack": "blocked stack ஐத் திற",
+ "openBlockerTask": "blocker task ஐத் திற",
+ "openBlockedTask": "blocked task ஐத் திற"
+ },
+ "activityHud": {
+ "activity": "செயல்பாடு",
+ "noRecentActivity": "சமீபத்திய செயல்பாடு இல்லை",
+ "more": "+{{count}} மேலும்",
+ "more_one": "+{{count}} மேலும்",
+ "more_other": "+{{count}} மேலும்",
+ "more_few": "+{{count}} மேலும்",
+ "more_many": "+{{count}} மேலும்"
+ },
+ "provisioning": {
+ "launchDetails": "Launch விவரங்கள்",
+ "launchDetailsDescription": "விரிவான team launch முன்னேற்றம், live output மற்றும் CLI logs."
+ }
+ },
+ "projectPath": {
+ "label": "Project",
+ "source": {
+ "claude": "Claude ஆல் கண்டறியப்பட்டது",
+ "codex": "Codex ஆல் கண்டறியப்பட்டது",
+ "mixed": "Claude மற்றும் Codex ஆல் கண்டறியப்பட்டது"
+ },
+ "deleted": {
+ "title": "project folder இனி இல்லை",
+ "label": "நீக்கப்பட்டது"
+ },
+ "mode": {
+ "projectList": "project பட்டியலிலிருந்து",
+ "customPath": "தனிப்பயன் path"
+ },
+ "loadingProjects": "projects ஐ ஏற்றுகிறது...",
+ "selectProject": "ஒரு project ஐத் தேர்ந்தெடு...",
+ "searchPlaceholder": "பெயர் அல்லது path மூலம் project ஐத் தேடு",
+ "empty": "எதுவும் கிடைக்கவில்லை",
+ "selectFromList": "பட்டியலிலிருந்து ஒரு project ஐத் தேர்ந்தெடு",
+ "noProjects": "projects எதுவும் கிடைக்கவில்லை, தனிப்பயன் path க்கு மாறவும்.",
+ "customWorkingDirectory": "தனிப்பயன் working directory",
+ "browse": "உலாவு",
+ "createAutomatically": "directory இல்லாவிட்டால், அது தானாக உருவாக்கப்படும்."
+ },
+ "members": {
+ "badges": {
+ "worktree": "worktree"
+ },
+ "runtimeTelemetry": {
+ "title": "உள்ளூர் runtime load",
+ "description": "Parent மற்றும் child processes மட்டுமே. தொலைநிலை LLM inference சேர்க்கப்படவில்லை.",
+ "cpu": "CPU",
+ "memory": "நினைவகம்",
+ "summedRss": "summed RSS",
+ "sharedHost": "பகிரப்பட்ட OpenCode host metric. இது இந்த உறுப்பினருக்கு பிரத்தியேகமானது அல்ல.",
+ "processTreeCapped": "இந்த sample க்கு process tree capped ஆனது.",
+ "rssHint": "RSS பகிரப்பட்ட pages ஐ உள்ளடக்கலாம், எனவே இது பிரத்தியேக நினைவகமாக அல்ல, ஒரு load சமிக்ஞையாகப் படிப்பது சிறந்தது."
+ },
+ "editor": {
+ "title": "உறுப்பினர்கள்",
+ "addMember": "உறுப்பினரைச் சேர்",
+ "editAsJson": "JSON ஆகத் திருத்து",
+ "runInSeparateWorktrees": "teammates ஐ தனி worktrees இல் இயக்கு",
+ "agentTeamsMcpOnly": "Agent Teams MCP only",
+ "removedCount": "அகற்றப்பட்டது ({{count}})",
+ "removedModelLockReason": "அகற்றப்பட்ட உறுப்பினர்கள் soft delete வரலாற்றுக்காக வைக்கப்படுகிறார்கள். அமைப்புகளைத் திருத்த அவர்களை மீட்டெடுக்கவும்.",
+ "memberNamesUnique": "உறுப்பினர் பெயர்கள் தனித்துவமாக இருக்க வேண்டும்"
+ },
+ "stats": {
+ "computing": "stats ஐ கணக்கிடுகிறது...",
+ "empty": "stats எதுவும் கிடைக்கவில்லை",
+ "lines": "வரிகள்",
+ "linesInfo": "தோராயமானது. Edit மற்றும் Write tools க்கு துல்லியமானது. Bash கோப்பு எழுத்துகள் command patterns (heredoc, echo, sed) இலிருந்து மதிப்பிடப்படுகின்றன மற்றும் குறைவாகப் புகாரளிக்கப்படலாம்.",
+ "files": "கோப்புகள்",
+ "toolCalls": "Tool அழைப்புகள்",
+ "tokens": "Tokens",
+ "toolUsage": "Tool பயன்பாடு",
+ "filesTouched": "தொடப்பட்ட கோப்புகள் ({{count}})",
+ "viewAllChanges": "அனைத்து மாற்றங்களையும் காண்",
+ "showLess": "குறைவாகக் காட்டு",
+ "moreFiles": "+{{count}} மேலும்",
+ "footer": "{{count}} sessions · {{computedAgo}} கணக்கிடப்பட்டது",
+ "footer_one": "{{count}} session · {{computedAgo}} கணக்கிடப்பட்டது",
+ "footer_few": "{{count}} sessions · {{computedAgo}} கணக்கிடப்பட்டது",
+ "footer_many": "{{count}} sessions · {{computedAgo}} கணக்கிடப்பட்டது",
+ "footer_other": "{{count}} sessions · {{computedAgo}} கணக்கிடப்பட்டது"
+ },
+ "logs": {
+ "searching": "logs ஐத் தேடுகிறது...",
+ "empty": "logs எதுவும் கிடைக்கவில்லை",
+ "waitingForTaskActivity": "Task முன்னேற்றத்தில் உள்ளது - session செயல்பாட்டுக்காகக் காத்திருக்கிறது (auto-refreshing)...",
+ "noTaskActivity": "இந்த task க்கு இன்னும் session செயல்பாடு இல்லை",
+ "noMemberActivity": "இந்த உறுப்பினருக்கு இன்னும் பதிவு செய்யப்பட்ட session செயல்பாடு இல்லை",
+ "leadSessionTooltip": "முழு team lead session logs - global orchestration context க்கு பயனுள்ளது, இந்த agent க்கு குறிப்பிட்டது அல்ல",
+ "memberSessionTooltip": "முழு நிலையான teammate session logs - subagent கோப்புக்கு பதிலாக ஒரு root member session இல் வேலை இயங்கும்போது பயனுள்ளது",
+ "startedAt": "தொடங்கியது {{time}}",
+ "active": "செயலில்",
+ "showDetails": "விவரங்களைக் காட்டு",
+ "hideDetails": "விவரங்களை மறை",
+ "loadingDetails": "விவரங்களை ஏற்றுகிறது...",
+ "failedToLoadDetails": "விவரங்களை ஏற்ற முடியவில்லை"
+ },
+ "detail": {
+ "relaunchOpenCode": "OpenCode ஐ மீண்டும் தொடங்கு",
+ "restart": "மறுதொடக்கம்",
+ "legacyLogsFallback": "Legacy Logs Fallback",
+ "copyDiagnostics": "diagnostics ஐ நகலெடு",
+ "pid": "PID {{pid}}",
+ "removedAt": "அகற்றப்பட்டது {{date}}",
+ "failedToRestartMember": "உறுப்பினரை மறுதொடக்கம் செய்ய முடியவில்லை",
+ "sendMessage": "செய்தி அனுப்பு",
+ "assignTask": "Task ஐ ஒதுக்கு",
+ "remove": "அகற்று"
+ },
+ "list": {
+ "loading": "team உறுப்பினர்களை ஏற்றுகிறது",
+ "unavailable": "உறுப்பினர் roster கிடைக்கவில்லை",
+ "unavailableDescription": "{{count}} teammates team metadata இலிருந்து அறியப்படுகிறார்கள், ஆனால் roster விவரங்கள் காணவில்லை.",
+ "unavailableDescription_one": "{{count}} teammate team metadata இலிருந்து அறியப்படுகிறார், ஆனால் roster விவரங்கள் காணவில்லை.",
+ "soloLeadOnly": "Solo team - lead மட்டும்",
+ "removedCount": "அகற்றப்பட்டது ({{count}})",
+ "unavailableDescription_few": "{{count}} teammates team metadata இலிருந்து அறியப்படுகிறார்கள், ஆனால் roster விவரங்கள் காணவில்லை.",
+ "unavailableDescription_many": "{{count}} teammates team metadata இலிருந்து அறியப்படுகிறார்கள், ஆனால் roster விவரங்கள் காணவில்லை.",
+ "unavailableDescription_other": "{{count}} teammates team metadata இலிருந்து அறியப்படுகிறார்கள், ஆனால் roster விவரங்கள் காணவில்லை."
+ },
+ "executionLog": {
+ "empty": "காட்ட எதுவும் இல்லை",
+ "emptyUserMessage": "{{time}} - (காலி)",
+ "agentInstructions": "Agent வழிமுறைகள்",
+ "memberTurn": "{{member}} turn",
+ "agentTurn": "Agent turn",
+ "turn": "turn"
+ },
+ "recentMessages": {
+ "latest": "சமீபத்திய செய்திகள்",
+ "latestForMember": "சமீபத்திய செய்திகள் - {{member}}",
+ "loadMore": "மேலும் ஏற்று",
+ "expand": "விரிவாக்கு",
+ "collapse": "சுருக்கு"
+ },
+ "leadModel": {
+ "defaultModel": "இயல்புநிலை",
+ "providerModelAria": "{{provider}} provider, {{model}}",
+ "leadShort": "lead",
+ "teamLead": "Team Lead",
+ "syncWithTeammates": "teammates உடன் model ஐ ஒத்திசை",
+ "anthropicTeamWide": "Anthropic team-wide",
+ "runtimeInheritance": "teammates தங்கள் சொந்த provider அல்லது model ஐ அமைக்காவிட்டால் lead runtime அவர்களுக்குப் பொருந்தும்.",
+ "anthropicContextLimit": "இந்த launch இல் Anthropic runtimes க்கு 200K context limit team-wide ஆகும், தனிப்பயன் Anthropic teammates உட்பட."
+ },
+ "runtimeLogs": {
+ "autoRefresh": "Auto-refresh",
+ "wrapLines": "வரிகளை wrap செய்",
+ "loadingTail": "process log tail ஐ ஏற்றுகிறது...",
+ "empty": "இந்த உறுப்பினருக்கு இன்னும் process log கோப்பு பிடிக்கப்படவில்லை.",
+ "copy": "நகலெடு",
+ "fileEmpty": "Process log கோப்பு காலியாக உள்ளது.",
+ "showingLast": "கடைசி {{bytes}} ஐக் காட்டுகிறது.",
+ "showing": "{{bytes}} ஐக் காட்டுகிறது."
+ },
+ "tasks": {
+ "empty": "இந்த உறுப்பினருக்கு tasks எதுவும் ஒதுக்கப்படவில்லை"
+ },
+ "messages": {
+ "loadOlder": "பழைய செய்திகளை ஏற்று",
+ "filters": {
+ "all": "அனைத்தும்",
+ "messages": "செய்திகள்",
+ "comments": "கருத்துகள்"
+ },
+ "empty": {
+ "loading": "செயல்பாட்டை ஏற்றுகிறது...",
+ "noComments": "இந்த உறுப்பினருக்கு கருத்துகள் இல்லை",
+ "noLoadedMessages": "இந்த உறுப்பினருக்கு இன்னும் ஏற்றப்பட்ட செய்திகள் இல்லை",
+ "noMessages": "இந்த உறுப்பினருடன் செய்திகள் இல்லை",
+ "noLoadedActivity": "இந்த உறுப்பினருக்கு இன்னும் ஏற்றப்பட்ட செயல்பாடு இல்லை",
+ "noActivity": "இந்த உறுப்பினருடன் செயல்பாடு இல்லை"
+ }
+ },
+ "actions": {
+ "openProfile": "profile ஐத் திற",
+ "editRole": "role ஐ திருத்து",
+ "sendMessage": "செய்தி அனுப்பு",
+ "assignTask": "task ஐ ஒதுக்கு"
+ },
+ "roleSelect": {
+ "customRolePlaceholder": "தனிப்பயன் role ஐ உள்ளிடு..."
+ }
+ },
+ "schedule": {
+ "count": "{{count}} அட்டவணைகள்",
+ "count_one": "{{count}} அட்டவணை",
+ "count_other": "{{count}} அட்டவணைகள்",
+ "nextRun": "அடுத்தது: {{next}}",
+ "actions": {
+ "runNow": "இப்போது இயக்கு",
+ "edit": "திருத்து",
+ "pause": "இடைநிறுத்து",
+ "resume": "தொடர்",
+ "delete": "நீக்கு",
+ "addSchedule": "அட்டவணை சேர்"
+ },
+ "runHistory": {
+ "loading": "இயக்க வரலாற்றை ஏற்றுகிறது...",
+ "empty": "இன்னும் இயக்கங்கள் இல்லை"
+ },
+ "count_few": "{{count}} அட்டவணைகள்",
+ "count_many": "{{count}} அட்டவணைகள்",
+ "runLog": {
+ "title": "Run Log",
+ "exitCode": "exit {{code}}",
+ "retryCount": "retry {{count}}/{{max}}",
+ "stillRunning": "Task இன்னும் இயங்குகிறது...",
+ "loadingLogs": "logs ஐ ஏற்றுகிறது...",
+ "errors": "பிழைகள்",
+ "close": "மூடு"
+ },
+ "cron": {
+ "expression": "Cron expression",
+ "highFrequencyWarning": "உயர் அதிர்வெண் அட்டவணை (5 நிமிட இடைவெளிக்கும் குறைவு)",
+ "nextRuns": "அடுத்த இயக்கங்கள்:",
+ "timezone": "Timezone",
+ "selectTimezone": "timezone ஐத் தேர்ந்தெடு",
+ "warmUpTime": "Warm-up நேரம்",
+ "warmUpDescription": "அட்டவணையிடப்பட்ட execution க்கு முன் தேர்ந்தெடுத்த வழங்குநர்களைத் தயார் செய்கிறது",
+ "errors": {
+ "enterExpression": "ஒரு cron expression ஐ உள்ளிடு",
+ "invalidExpression": "தவறான cron expression"
+ },
+ "presets": {
+ "everyHour": "ஒவ்வொரு மணி நேரமும்",
+ "everySixHours": "ஒவ்வொரு 6 மணி நேரமும்",
+ "dailyAtNine": "தினசரி காலை 9 மணிக்கு",
+ "weekdaysAtNine": "வார நாட்கள் காலை 9 மணிக்கு",
+ "mondayAtNine": "திங்கள் காலை 9 மணிக்கு",
+ "everyThirtyMinutes": "ஒவ்வொரு 30 நிமிடமும்"
+ },
+ "warmUpOptions": {
+ "none": "Warm-up இல்லை",
+ "fiveMinutes": "5 நிமிடம்",
+ "tenMinutes": "10 நிமிடம்",
+ "fifteenMinutes": "15 நிமிடம்",
+ "thirtyMinutes": "30 நிமிடம்"
+ }
+ },
+ "empty": {
+ "title": "இன்னும் அட்டவணைகள் இல்லை",
+ "description": "cron அட்டவணையில் Claude tasks ஐ தானாக இயக்க ஒரு அட்டவணையை உருவாக்கவும்."
+ },
+ "title": "அட்டவணைகள்",
+ "status": {
+ "active": "செயலில்",
+ "paused": "இடைநிறுத்தப்பட்டது",
+ "disabled": "முடக்கப்பட்டது"
+ },
+ "runStatus": {
+ "pending": "நிலுவையில்",
+ "warmingUp": "Warm up ஆகிறது",
+ "warm": "Warm",
+ "running": "இயங்குகிறது",
+ "completed": "முடிந்தது",
+ "failed": "தோல்வி",
+ "interrupted": "இடைநிறுத்தப்பட்டது",
+ "cancelled": "ரத்துசெய்யப்பட்டது"
+ }
+ },
+ "openCodeContextConfigHint": {
+ "summary": "OpenCode உள்ளூர் மாதிரிகள் prompt-only வரம்புகளுக்குப் பதிலாக OpenCode context budget ஐப் பயன்படுத்தலாம்.",
+ "description": "இந்த teammate பயன்படுத்தும் provider மற்றும் model க்கு OpenCode config இல் பொருந்தும் வரம்புகளைச் சேர்க்கவும். உள்ளூர் மாதிரிகள் தங்கள் context window ஐ நிரப்புவதற்கு முன் compact செய்து prune செய்ய இது OpenCode க்கு உதவுகிறது.",
+ "replacePrefix": "மாற்று",
+ "and": "மற்றும்",
+ "replaceSuffix": "உங்கள் OpenCode setup இலிருந்து provider மற்றும் model IDs உடன். போன்ற prompt வழிமுறைகள்",
+ "promptInstructionsSuffix": "மாதிரி அவற்றைப் படிப்பதற்கு முன் கோரிக்கை அசெம்பிள் செய்யப்படுவதால் பலவீனமாக உள்ளன.",
+ "providerLimits": "Provider வரம்புகள்",
+ "compactionConfig": "Compaction config"
+ },
+ "sessions": {
+ "noProjectPath": "project path இணைக்கப்படவில்லை",
+ "provisioningHint": "team provisioning க்குப் பிறகு sessions தோன்றும்",
+ "projectNotFound": "Project கிடைக்கவில்லை",
+ "loading": "sessions ஐ ஏற்றுகிறது...",
+ "empty": "sessions எதுவும் கிடைக்கவில்லை",
+ "showAllSessions": "அனைத்து sessions க்கும் காட்டு",
+ "lead": "lead",
+ "removeFilter": "வடிப்பானை அகற்று",
+ "filterBySession": "இந்த session வாரியாக வடிகட்டு",
+ "openSession": "session ஐத் திற",
+ "title": "Sessions"
+ },
+ "provisioning": {
+ "pid": "PID {{pid}}",
+ "cancel": "ரத்துசெய்",
+ "moreWarningsHidden": "{{count}} மேலும் எச்சரிக்கைகள் மறைக்கப்பட்டன",
+ "diagnostics": "Diagnostics",
+ "liveOutput": "Live output",
+ "diagnosticsCopied": "Diagnostics நகலெடுக்கப்பட்டது",
+ "copyDiagnostics": "diagnostics ஐ நகலெடு",
+ "copied": "நகலெடுக்கப்பட்டது",
+ "noOutput": "இன்னும் output எதுவும் பிடிக்கப்படவில்லை.",
+ "cliLogs": "CLI logs",
+ "steps": {
+ "starting": "தொடங்குகிறது",
+ "configuring": "Team setup",
+ "assembling": "உறுப்பினர்கள் சேர்கிறார்கள்",
+ "finalizing": "இறுதிப்படுத்துகிறது"
+ },
+ "providerStatus": {
+ "status": {
+ "checking": "சரிபார்க்கிறது...",
+ "ready": "OK",
+ "notes": "OK (notes)",
+ "failed": "ERR",
+ "pending": "காத்திருக்கிறது"
+ },
+ "detailSummary": {
+ "cliBinaryMissing": "CLI binary காணவில்லை",
+ "openCodeRuntimeMissing": "OpenCode runtime காணவில்லை",
+ "openCodeWindowsAccessBlocked": "OpenCode Windows அணுகல் தடுக்கப்பட்டது",
+ "openCodeNoOutput": "OpenCode runtime சரிபார்ப்பு output எதுவும் தரவில்லை",
+ "openCodeMcpUnreachable": "OpenCode app MCP அணுக முடியவில்லை",
+ "workingDirectoryMissing": "Working directory காணவில்லை",
+ "cliBinaryCouldNotStart": "CLI binary ஐத் தொடங்க முடியவில்லை",
+ "cliPreflightIncomplete": "CLI preflight முடியவில்லை",
+ "authenticationRequired": "அங்கீகாரம் தேவை",
+ "runtimeProviderNotConfigured": "Runtime வழங்குநர் கட்டமைக்கப்படவில்லை",
+ "cliPreflightFailed": "CLI preflight தோல்வியடைந்தது",
+ "selectedModelCompatible": "தேர்ந்தெடுத்த மாதிரி இணக்கமானது",
+ "selectedModelCompatibilityPending": "தேர்ந்தெடுத்த மாதிரி இணக்கத்தன்மை நிலுவையில்",
+ "selectedModelAvailable": "தேர்ந்தெடுத்த மாதிரி கிடைக்கிறது",
+ "selectedModelVerified": "தேர்ந்தெடுத்த மாதிரி சரிபார்க்கப்பட்டது",
+ "selectedModelUnavailable": "தேர்ந்தெடுத்த மாதிரி கிடைக்கவில்லை",
+ "selectedModelTimedOut": "தேர்ந்தெடுத்த மாதிரி சரிபார்ப்பு காலாவதியானது",
+ "selectedModelCheckFailed": "தேர்ந்தெடுத்த மாதிரி சரிபார்ப்பு தோல்வியடைந்தது",
+ "selectedModelDeferred": "தேர்ந்தெடுத்த மாதிரி சரிபார்ப்பு ஒத்திவைக்கப்பட்டது",
+ "selectedModelPingNotConfirmed": "தேர்ந்தெடுத்த மாதிரி ping உறுதிப்படுத்தப்படவில்லை",
+ "readyWithNotes": "குறிப்புகளுடன் தயார்",
+ "needsAttention": "கவனம் தேவை"
+ },
+ "modelChecksSummary": "தேர்ந்தெடுத்த மாதிரி சரிபார்ப்புகள் - {{details}}",
+ "modelParts": {
+ "unavailable": "{{count}} மாதிரி கிடைக்கவில்லை",
+ "unavailable_one": "{{count}} மாதிரி கிடைக்கவில்லை",
+ "unavailable_other": "{{count}} மாதிரிகள் கிடைக்கவில்லை",
+ "checkFailed": "{{count}} மாதிரி சரிபார்ப்பு தோல்வியடைந்தது",
+ "checkFailed_one": "{{count}} மாதிரி சரிபார்ப்பு தோல்வியடைந்தது",
+ "checkFailed_other": "{{count}} மாதிரிகள் சரிபார்ப்பு தோல்வியடைந்தது",
+ "timedOut": "{{count}} மாதிரி காலாவதியானது",
+ "timedOut_one": "{{count}} மாதிரி காலாவதியானது",
+ "timedOut_other": "{{count}} மாதிரிகள் காலாவதியாயின",
+ "deferred": "{{count}} சரிபார்ப்பு ஒத்திவைக்கப்பட்டது",
+ "deferred_one": "{{count}} சரிபார்ப்பு ஒத்திவைக்கப்பட்டது",
+ "deferred_other": "{{count}} சரிபார்ப்பு ஒத்திவைக்கப்பட்டது",
+ "pingNotConfirmed": "{{count}} ping உறுதிப்படுத்தப்படவில்லை",
+ "pingNotConfirmed_one": "{{count}} ping உறுதிப்படுத்தப்படவில்லை",
+ "pingNotConfirmed_other": "{{count}} ping உறுதிப்படுத்தப்படவில்லை",
+ "compatibilityPending": "{{count}} இணக்கமானது, ஆழமான சரிபார்ப்பு நிலுவையில்",
+ "compatibilityPending_one": "{{count}} இணக்கமானது, ஆழமான சரிபார்ப்பு நிலுவையில்",
+ "compatibilityPending_other": "{{count}} இணக்கமானவை, ஆழமான சரிபார்ப்பு நிலுவையில்",
+ "compatible": "{{count}} இணக்கமானது",
+ "compatible_one": "{{count}} இணக்கமானது",
+ "compatible_other": "{{count}} இணக்கமானவை",
+ "checking": "{{count}} சரிபார்க்கிறது",
+ "checking_one": "{{count}} சரிபார்க்கிறது",
+ "checking_other": "{{count}} சரிபார்க்கிறது",
+ "available": "{{count}} கிடைக்கிறது",
+ "available_one": "{{count}} கிடைக்கிறது",
+ "available_other": "{{count}} கிடைக்கின்றன",
+ "verified": "{{count}} சரிபார்க்கப்பட்டது",
+ "verified_one": "{{count}} சரிபார்க்கப்பட்டது",
+ "verified_other": "{{count}} சரிபார்க்கப்பட்டன",
+ "unavailable_few": "{{count}} மாதிரிகள் கிடைக்கவில்லை",
+ "unavailable_many": "{{count}} மாதிரிகள் கிடைக்கவில்லை",
+ "checkFailed_few": "{{count}} மாதிரிகள் சரிபார்ப்பு தோல்வியடைந்தது",
+ "checkFailed_many": "{{count}} மாதிரிகள் சரிபார்ப்பு தோல்வியடைந்தது",
+ "timedOut_few": "{{count}} மாதிரிகள் காலாவதியாயின",
+ "timedOut_many": "{{count}} மாதிரிகள் காலாவதியாயின",
+ "deferred_few": "{{count}} சரிபார்ப்பு ஒத்திவைக்கப்பட்டது",
+ "deferred_many": "{{count}} சரிபார்ப்பு ஒத்திவைக்கப்பட்டது",
+ "pingNotConfirmed_few": "{{count}} ping உறுதிப்படுத்தப்படவில்லை",
+ "pingNotConfirmed_many": "{{count}} ping உறுதிப்படுத்தப்படவில்லை",
+ "compatibilityPending_few": "{{count}} இணக்கமானவை, ஆழமான சரிபார்ப்பு நிலுவையில்",
+ "compatibilityPending_many": "{{count}} இணக்கமானவை, ஆழமான சரிபார்ப்பு நிலுவையில்",
+ "compatible_few": "{{count}} இணக்கமானவை",
+ "compatible_many": "{{count}} இணக்கமானவை",
+ "checking_few": "{{count}} சரிபார்க்கிறது",
+ "checking_many": "{{count}} சரிபார்க்கிறது",
+ "available_few": "{{count}} கிடைக்கின்றன",
+ "available_many": "{{count}} கிடைக்கின்றன",
+ "verified_few": "{{count}} சரிபார்க்கப்பட்டன",
+ "verified_many": "{{count}} சரிபார்க்கப்பட்டன"
+ },
+ "openProviderSettings": "{{provider}} அமைப்புகளைத் திற",
+ "copied": "நகலெடுக்கப்பட்டது",
+ "copyDiagnostics": "diagnostics ஐ நகலெடு",
+ "deepVerificationPending": "ஆழமான சரிபார்ப்பு இன்னும் இயங்குகிறது. OpenCode இலவச மாதிரிகள் சுமார் 20 வினாடிகள் எடுக்கலாம்.",
+ "progress": {
+ "checkingSelectedProviders": "தேர்ந்தெடுத்த வழங்குநர்களை இணையாகச் சரிபார்க்கிறது...",
+ "checkingProvider": "{{provider}} வழங்குநரைச் சரிபார்க்கிறது...",
+ "checkingProviders": "{{providers}} வழங்குநர்களைச் சரிபார்க்கிறது..."
+ },
+ "failureHints": {
+ "openCodeAccessDenied": "folder அனுமதிகளைச் சரிசெய்யவும் அல்லது project ஐ user-writable folder க்கு நகர்த்தவும். Administrator ஆக இயக்குவது தற்காலிக தீர்வு மட்டுமே.",
+ "openCodeBridgeNoOutput": "app மற்றும் OpenCode runtime ஐ மறுதொடக்கம் செய்து, பிறகு மீண்டும் முயற்சிக்கவும். மீண்டும் நிகழ்ந்தால், diagnostics ஐ நகலெடுக்கவும்.",
+ "workingDirectoryMissing": "தற்போதுள்ள ஒரு working directory ஐத் தேர்ந்தெடுத்து, பிறகு இந்த dialog ஐ மீண்டும் திறக்கவும்.",
+ "authenticationRequired": "Claude CLI இல் தேவையான வழங்குநரை அங்கீகரிக்கவும், பிறகு இந்த dialog ஐ மீண்டும் திறக்கவும்.",
+ "runtimeProviderNotConfigured": "தேர்ந்தெடுத்த வழங்குநர் runtime ஐ கட்டமைக்கவும், பிறகு இந்த dialog ஐ மீண்டும் திறக்கவும்.",
+ "openCodeRuntimeMissing": "வழங்குநர் நிலை card இலிருந்து OpenCode runtime ஐ நிறுவவும் அல்லது மீண்டும் முயற்சிக்கவும், பிறகு இந்த dialog ஐ மீண்டும் திறக்கவும்.",
+ "openCodeAppMcpUnreachable": "OpenCode app MCP bridge ஐ புதுப்பிக்க launch ஐ மீண்டும் முயற்சிக்கவும். மீண்டும் நிகழ்ந்தால், app மற்றும் OpenCode runtime ஐ மறுதொடக்கம் செய்யவும்.",
+ "cliBinaryMissing": "உள்ளூர் Claude CLI binary உள்ளது மற்றும் தொடங்க முடியும் என்பதை உறுதிப்படுத்தவும், பிறகு இந்த dialog ஐ மீண்டும் திறக்கவும்.",
+ "default": "மேலே உள்ள சிக்கலைத் தீர்க்கவும், பிறகு இந்த dialog ஐ மீண்டும் திறக்கவும்.",
+ "openCodeNodeModulesSymlinkPermission": "Agent Teams AI ஐ Administrator ஆக இயக்கவும், பிறகு launch ஐ மீண்டும் முயற்சிக்கவும்."
+ }
+ },
+ "presentation": {
+ "awaitingPermission": "{{count}} teammate அனுமதி ஒப்புதலுக்காகக் காத்திருக்கிறார்",
+ "nameListWithMore": "{{names}}, +{{count}} மேலும்",
+ "waitingForOpenCode": "OpenCode க்காகக் காத்திருக்கிறது: {{names}}",
+ "bootstrapStalled": "Bootstrap தேங்கியது: {{names}}",
+ "bootstrapStalledWithOpenCodeWait": "{{stalled}}; OpenCode க்காகக் காத்திருக்கிறது: {{names}}",
+ "namedPendingDiagnostic": "{{label}}: {{names}}",
+ "countPendingDiagnostic": "{{count}} {{label}}",
+ "pendingLabels": {
+ "bootstrapStalled": "Bootstrap தேங்கியது",
+ "shellOnly": "Shell-only",
+ "waitingForBootstrap": "Bootstrap க்காகக் காத்திருக்கிறது",
+ "bootstrapUnconfirmed": "Bootstrap உறுதிப்படுத்தப்படவில்லை",
+ "awaitingPermission": "அனுமதிக்காகக் காத்திருக்கிறது",
+ "waitingForRuntime": "runtime க்காகக் காத்திருக்கிறது",
+ "shellOnlyLower": "shell-only",
+ "waitingForBootstrapLower": "bootstrap க்காகக் காத்திருக்கிறது",
+ "bootstrapUnconfirmedLower": "bootstrap உறுதிப்படுத்தப்படவில்லை",
+ "awaitingPermissionLower": "அனுமதிக்காகக் காத்திருக்கிறது",
+ "waitingForRuntimeLower": "runtime க்காகக் காத்திருக்கிறது"
+ },
+ "failed": {
+ "memberFailedToStart": "{{name}} தொடங்கத் தோல்வியடைந்தது",
+ "teammatesFailedToStart": "{{count}} teammates தொடங்கத் தோல்வியடைந்தனர்",
+ "teammatesFailedRatio": "{{count}}/{{total}} teammates தொடங்கத் தோல்வியடைந்தனர்"
+ },
+ "skipped": {
+ "memberSkipped": "{{name}} இந்த launch க்கு தவிர்க்கப்பட்டது",
+ "memberSkippedWithReason": "{{name}} இந்த launch க்கு தவிர்க்கப்பட்டது - {{reason}}",
+ "memberSkippedCompact": "{{name}} தவிர்க்கப்பட்டது",
+ "teammatesSkipped": "{{count}} teammates தவிர்க்கப்பட்டனர்",
+ "teammatesSkippedList": "தவிர்க்கப்பட்ட teammates: {{list}}",
+ "teammatesSkippedRatio": "{{count}}/{{total}} teammates இந்த launch க்கு தவிர்க்கப்பட்டனர்"
+ },
+ "joining": {
+ "teammatesStillJoining": "{{count}} teammates இன்னும் சேர்கிறார்கள்",
+ "teammatesStillJoining_one": "{{count}} teammate இன்னும் சேர்கிறார்",
+ "teammatesStillJoining_few": "{{count}} teammates இன்னும் சேர்கிறார்கள்",
+ "teammatesStillJoining_many": "{{count}} teammates இன்னும் சேர்கிறார்கள்",
+ "teammatesStillJoining_other": "{{count}} teammates இன்னும் சேர்கிறார்கள்",
+ "teammatesConfirmedRatio": "{{count}}/{{total}} teammates உறுதிப்படுத்தப்பட்டனர்"
+ },
+ "ready": {
+ "leadOnline": "Lead online",
+ "allTeammatesJoined": "அனைத்து {{count}} teammates சேர்ந்தனர்",
+ "teamProvisionedLeadOnline": "Team provision செய்யப்பட்டது - lead online",
+ "teamProvisionedAllJoined": "Team provision செய்யப்பட்டது - அனைத்து {{count}} teammates சேர்ந்தனர்",
+ "teamProvisionedStillJoining": "Team provision செய்யப்பட்டது - teammates இன்னும் சேர்கிறார்கள்",
+ "launchFinishedWithErrors": "Launch பிழைகளுடன் முடிந்தது - {{count}}/{{total}} teammates தொடங்கத் தோல்வியடைந்தனர்",
+ "launchContinuedSkipped": "Launch தொடர்ந்தது - {{count}}/{{total}} teammates தவிர்க்கப்பட்டனர்",
+ "teamLaunchedLeadOnline": "Team தொடங்கப்பட்டது - lead online",
+ "teamLaunchedAllJoined": "Team தொடங்கப்பட்டது - அனைத்து {{count}} teammates சேர்ந்தனர்"
+ },
+ "panel": {
+ "launchFailed": "Launch தோல்வியடைந்தது",
+ "launchDetails": "Launch விவரங்கள்",
+ "launchFinishedWithErrors": "Launch பிழைகளுடன் முடிந்தது",
+ "launchContinuedSkipped": "Launch தவிர்க்கப்பட்ட teammates உடன் தொடர்ந்தது",
+ "coreTeamReady": "Core team தயார்",
+ "finishingLaunch": "Launch ஐ முடிக்கிறது",
+ "teamLaunched": "Team தொடங்கப்பட்டது",
+ "launchingTeam": "team ஐ தொடங்குகிறது"
+ }
+ }
+ },
+ "liveRuntimeStatus": {
+ "title": "Live runtime நிலை",
+ "description": "காட்சி-மட்டும் heartbeat மற்றும் launch நிலை. Process கட்டுப்பாடுகள் கீழே உள்ளன.",
+ "source": "source: {{source}}",
+ "lane": "{{lane}} lane",
+ "diagnosticOnly": "Diagnostic மட்டும்",
+ "updated": "புதுப்பிக்கப்பட்டது {{value}}",
+ "states": {
+ "running": "இயங்குகிறது",
+ "starting": "தொடங்குகிறது",
+ "waiting": "காத்திருக்கிறது",
+ "degraded": "கவனம் தேவை",
+ "stopped": "நிறுத்தப்பட்டது",
+ "unknown": "தெரியாதது"
+ }
+ },
+ "taskLogs": {
+ "exact": {
+ "title": "சரியான Task Logs",
+ "loading": "சரியான task logs ஐ ஏற்றுகிறது...",
+ "description": "Logs இல் பயன்படுத்தப்படும் அதே execution-log components உடன் வழங்கப்பட்ட சரியான transcript slices.",
+ "emptyTitle": "இன்னும் சரியான task logs இல்லை",
+ "emptyDescription": "வெளிப்படையான task-linked transcript metadata கிடைக்கும்போது சரியான transcript bundles இங்கே தோன்றும்.",
+ "summaryOnly": "சுருக்கம் மட்டும்"
+ },
+ "executionSessions": {
+ "title": "Execution Sessions",
+ "online": "Online",
+ "updating": "புதுப்பிக்கிறது...",
+ "description": "Legacy session-centric transcript உலாவல் மற்றும் முன்னோட்டங்கள்."
+ },
+ "stream": {
+ "title": "Task Log Stream"
+ }
+ },
+ "kanban": {
+ "taskCard": {
+ "cancelTask": "task {{taskId}} ஐ ரத்துசெய்",
+ "cancel": "ரத்துசெய்",
+ "moveBackToTodoConfirm": "இந்த task ஐ மீண்டும் TODO க்கு நகர்த்தி team க்கு அறிவிக்கவா?",
+ "confirm": "உறுதிப்படுத்து",
+ "keep": "வைத்திரு",
+ "changesNeedAttention": "மாற்றங்களுக்கு கவனம் தேவை",
+ "changes": "மாற்றங்கள்",
+ "deleteTask": "task ஐ நீக்கு",
+ "taskLogsActive": "Task logs செயலில்",
+ "newTaskLogsArriving": "புதிய task logs வருகின்றன",
+ "awaitingUser": "பயனருக்காகக் காத்திருக்கிறது",
+ "awaitingLead": "lead க்காகக் காத்திருக்கிறது",
+ "blockedBy": "தடுக்கப்பட்டது",
+ "blocks": "தடுக்கிறது",
+ "start": "தொடங்கு",
+ "complete": "முடி",
+ "approve": "ஒப்புதல் அளி",
+ "requestReview": "மதிப்பாய்வைக் கோரு",
+ "manualReview": "கைமுறை மதிப்பாய்வு",
+ "requestChanges": "மாற்றங்களைக் கோரு"
+ },
+ "filter": {
+ "title": "tasks ஐ வடிகட்டு",
+ "session": "Session",
+ "allSessions": "அனைத்து sessions",
+ "teammate": "Teammate",
+ "unassigned": "(ஒதுக்கப்படாதது)",
+ "column": "Column",
+ "clearAll": "அனைத்தையும் அழி"
+ },
+ "board": {
+ "addTask": "task ஐ சேர்",
+ "noTasks": "tasks இல்லை",
+ "showMore": "{{count}} மேலும் காட்டு",
+ "hiddenCount": "{{count}} மறைக்கப்பட்டது",
+ "trash": "Trash",
+ "gridView": "Grid view",
+ "columnsView": "Columns view"
+ },
+ "trash": {
+ "title": "Trash",
+ "empty": "நீக்கப்பட்ட tasks இல்லை",
+ "subject": "தலைப்பு",
+ "owner": "உரிமையாளர்",
+ "deleted": "நீக்கப்பட்டது",
+ "unassigned": "ஒதுக்கப்படாதது",
+ "restoreTask": "task ஐ மீட்டெடு",
+ "restore": "மீட்டெடு",
+ "close": "மூடு"
+ },
+ "sort": {
+ "title": "tasks ஐ வரிசைப்படுத்து",
+ "sortBy": "வாரியாக வரிசைப்படுத்து",
+ "reset": "மீட்டமை",
+ "options": {
+ "updatedAt": {
+ "label": "கடைசியாக புதுப்பிக்கப்பட்டது",
+ "description": "சமீபத்தில் புதுப்பிக்கப்பட்டது முதலில்"
+ },
+ "createdAt": {
+ "label": "உருவாக்கப்பட்டது",
+ "description": "புதியது முதலில்"
+ },
+ "owner": {
+ "label": "உரிமையாளர்",
+ "description": "ஒதுக்கப்பட்டவர் வாரியாக அகரவரிசையில்"
+ },
+ "manual": {
+ "label": "கைமுறை",
+ "description": "Drag-and-drop வரிசை"
+ }
+ }
+ },
+ "search": {
+ "clearSearch": "தேடலை அழி",
+ "tasks": "Tasks",
+ "createdAgo": "உருவாக்கப்பட்டது {{time}}",
+ "updatedAgo": "புதுப்பிக்கப்பட்டது {{time}}",
+ "placeholder": "tasks ஐத் தேடு... (#id அல்லது உரை)"
+ },
+ "grid": {
+ "addTask": "task ஐ சேர்",
+ "noTasks": "tasks இல்லை"
+ },
+ "title": "Kanban",
+ "columns": {
+ "todo": "TODO",
+ "inProgress": "IN PROGRESS",
+ "review": "REVIEW",
+ "done": "DONE",
+ "approved": "APPROVED"
+ }
+ },
+ "worktreeGitReadiness": {
+ "checking": "teammate worktrees க்கான Git repository நிலையைச் சரிபார்க்கிறது...",
+ "ready": "Git worktrees தயார்.",
+ "readyOnBranch": "branch {{branch}} இல் Git worktrees தயார்.",
+ "needsSetup": "Worktree தனிமைப்படுத்தலுக்கு Git அமைப்பு தேவை",
+ "initialCommitNotice": "initial commit நடவடிக்கை அனைத்து தற்போதைய கோப்புகளையும் இந்த செய்தியுடன் stage செய்து commit செய்கிறது",
+ "initializeRepository": "Git repository ஐ துவக்கு",
+ "createInitialCommit": "initial commit ஐ உருவாக்கு",
+ "initialCommitMessage": "chore: initial commit"
+ },
+ "toolApproval": {
+ "settings": "அமைப்புகள்",
+ "autoAllowAllTools": "அனைத்து tools ஐயும் auto-allow செய்",
+ "autoAllowFileEdits": "கோப்பு edits ஐ auto-allow செய் (Edit, Write, NotebookEdit)",
+ "autoAllowSafeCommands": "பாதுகாப்பான கட்டளைகளை auto-allow செய் (git, pnpm, npm, ls...)",
+ "onTimeout": "timeout இல்:",
+ "after": "பிறகு",
+ "secondsShort": "வி",
+ "timeoutActions": {
+ "wait": "எப்போதும் காத்திரு",
+ "allow": "அனுமதி",
+ "deny": "மறு"
+ },
+ "submit": "சமர்ப்பி",
+ "allow": "அனுமதி",
+ "deny": "மறு",
+ "allowAll": "அனைத்தையும் அனுமதி",
+ "pendingCount": "{{count}} நிலுவையில்",
+ "autoActionIn": "{{time}} இல் Auto-{{action}}",
+ "diff": {
+ "previewChanges": "மாற்றங்களை முன்னோட்டமிடு",
+ "readingFile": "கோப்பைப் படிக்கிறது...",
+ "binaryFile": "Binary கோப்பு - முன்னோட்டமிட முடியாது",
+ "truncated": "கோப்பு 2MB இல் truncate செய்யப்பட்டது - diff முழுமையடையாமல் இருக்கலாம்",
+ "newFile": "புதிய கோப்பு"
+ }
+ },
+ "memberWorkSync": {
+ "details": {
+ "title": "உறுப்பினர் work sync",
+ "actionableItems": "செயல்படக்கூடிய உருப்படிகள்",
+ "fingerprint": "Fingerprint",
+ "report": "அறிக்கை",
+ "none": "எதுவுமில்லை",
+ "shadowWouldNudge": "Shadow nudge செய்திருக்கும்",
+ "yes": "ஆம்",
+ "no": "இல்லை",
+ "moreActionableItems": "{{count}} மேலும் செயல்படக்கூடிய உருப்படி(கள்)",
+ "diagnostics": "Diagnostics: {{diagnostics}}"
+ },
+ "title": "உறுப்பினர் work sync",
+ "loadingDiagnostics": "உறுப்பினர் work sync diagnostics ஐ ஏற்றுகிறது.",
+ "diagnosticsUnavailable": "உறுப்பினர் work sync diagnostics கிடைக்கவில்லை."
+ },
+ "advancedCli": {
+ "title": "மேம்பட்டது",
+ "useWorktree": "worktree ஐப் பயன்படுத்து",
+ "recent": "சமீபத்தியது",
+ "commandPreview": "கட்டளை முன்னோட்டம்",
+ "customArguments": "தனிப்பயன் வாதங்கள்",
+ "validate": "சரிபார்",
+ "validation": {
+ "allFlagsValid": "அனைத்து flags உம் செல்லுபடியாகும்",
+ "unknownFlags": "தெரியாதது: {{flags}}",
+ "protectedFlags": "பாதுகாக்கப்பட்டது: {{flags}}",
+ "failed": "சரிபார்ப்பு தோல்வியடைந்தது"
+ },
+ "placeholders": {
+ "worktreeName": "worktree-name"
+ }
+ },
+ "processes": {
+ "ago": "{{time}} முன்பு",
+ "stoppedAgo": "{{time}} முன்பு நிறுத்தப்பட்டது",
+ "running": "இயங்குகிறது",
+ "stopped": "நிறுத்தப்பட்டது",
+ "stopProcess": "process ஐ நிறுத்து (SIGTERM)",
+ "kill": "Kill",
+ "openInBrowser": "உலாவியில் திற",
+ "open": "திற",
+ "pid": "PID{{pid}}",
+ "title": "CLI Processes"
+ },
+ "taskActivity": {
+ "loadingDetails": "செயல்பாட்டு விவரங்களை ஏற்றுகிறது...",
+ "contextUnavailable": "இந்த செயல்பாட்டிற்கான விரிவான transcript context இனி கிடைக்கவில்லை.",
+ "loading": "task செயல்பாட்டை ஏற்றுகிறது...",
+ "lowSignalOnly": "இன்னும் முக்கிய task செயல்பாடு எதுவும் கண்டறியப்படவில்லை. குறைந்த-நிலை execution விவரங்கள் கீழே Task Log Stream இல் கிடைக்கின்றன.",
+ "empty": "கிடைக்கும் transcripts இல் இன்னும் வெளிப்படையான task செயல்பாடு எதுவும் கண்டறியப்படவில்லை. பழைய அல்லது heuristic session logs கீழே Execution Sessions இல் இன்னும் கிடைக்கலாம்.",
+ "title": "Task செயல்பாடு",
+ "description": "transcript metadata இலிருந்து இந்த task உடன் இணைக்கப்பட்ட முக்கிய வெளிப்படையான runtime செயல்பாடு."
+ },
+ "sendMessage": {
+ "title": "செய்தி அனுப்பு",
+ "description": "ஒரு team உறுப்பினருக்கு நேரடி செய்தியை அனுப்பு.",
+ "recipientLabel": "பெறுநர்",
+ "selectMemberPlaceholder": "உறுப்பினரைத் தேர்ந்தெடு...",
+ "messageLabel": "செய்தி",
+ "placeholder": "உங்கள் செய்தியை எழுது... (அனுப்ப Enter)",
+ "send": "அனுப்பு",
+ "sending": "அனுப்புகிறது...",
+ "charsLeft": "{{count}} எழுத்துகள் மீதம்",
+ "saved": "சேமிக்கப்பட்டது",
+ "attachments": {
+ "teamOnlineRequired": "கோப்புகளை இணைக்க team online ஆக இருக்க வேண்டும்",
+ "recipientUnsupported": "கோப்புகளை team lead அல்லது OpenCode teammates க்கு அனுப்பலாம்",
+ "openCodeOnlineRequired": "OpenCode teammates க்கு கோப்புகளை இணைக்க team online ஆக இருக்க வேண்டும்",
+ "disabledHint": "online team lead மற்றும் online OpenCode teammates க்கு கோப்பு இணைப்புகள் ஆதரிக்கப்படுகின்றன. இணைப்புகளை அகற்றவும் அல்லது பெறுநரை மாற்றவும்.",
+ "attachFiles": "கோப்புகளை இணை (paste அல்லது drag & drop)",
+ "unavailable": "இணைப்புகள் கிடைக்கவில்லை"
+ },
+ "quote": {
+ "remove": "மேற்கோளை அகற்று",
+ "replyingTo": "பதிலளிக்கிறது"
+ }
+ },
+ "taskComments": {
+ "cancelReply": "பதிலை ரத்துசெய்",
+ "replyingTo": "பதிலளிக்கிறது",
+ "placeholder": "ஒரு கருத்தைச் சேர்... (அனுப்ப Enter)",
+ "attachFile": "கோப்பை இணை (அல்லது paste)",
+ "voiceToText": "குரல் to உரை",
+ "comment": "கருத்து",
+ "charsLeft": "{{count}} எழுத்துகள் மீதம்",
+ "saved": "சேமிக்கப்பட்டது",
+ "awaitingReplyFrom": "இவரிடமிருந்து பதிலுக்காகக் காத்திருக்கிறது",
+ "or": "அல்லது"
+ },
+ "taskAttachments": {
+ "dropImageHere": "படத்தை இங்கே விடவும்",
+ "attachImage": "படத்தை இணை",
+ "pasteOrDragDrop": "அல்லது paste / drag-drop",
+ "fromOriginalMessage": "அசல் செய்தியிலிருந்து",
+ "dropFilesHere": "கோப்புகளை இங்கே விடவும்",
+ "loading": "இணைப்புகளை ஏற்றுகிறது..."
+ },
+ "permissions": {
+ "autoApproveAllTools": "அனைத்து tools ஐயும் auto-approve செய்",
+ "autonomousModeDescription": "Autonomous பயன்முறை: team tools உறுதிப்படுத்தல் இல்லாமல் இயங்குகின்றன. நம்பப்படாத code உடன் கவனமாக இருங்கள்.",
+ "manualModeDescription": "Manual பயன்முறை: ஒவ்வொரு tool அழைப்பையும் நேரடியாக நீங்கள் அனுமதிப்பீர்கள் அல்லது மறுப்பீர்கள்."
+ },
+ "memberLogStream": {
+ "tabs": {
+ "execution": "Execution",
+ "process": "Process"
+ },
+ "filters": {
+ "all": "அனைத்தும்"
+ },
+ "logs": {
+ "title": "Logs",
+ "loading": "உறுப்பினர் log stream ஐ ஏற்றுகிறது...",
+ "emptyTitle": "இந்த உறுப்பினருக்கு இன்னும் log stream entries எதுவும் கிடைக்கவில்லை.",
+ "emptyDescription": "உறுப்பினர்-scoped transcript அல்லது runtime logs கிடைக்கும்போது இங்கே தோன்றும்."
+ }
+ },
+ "reviewDialog": {
+ "placeholder": "என்ன மாற வேண்டும் என்பதை விவரி... (சமர்ப்பிக்க Enter)",
+ "submit": "சமர்ப்பி",
+ "charsLeft": "{{count}} எழுத்துகள் மீதம்",
+ "saved": "சேமிக்கப்பட்டது",
+ "title": "மாற்றங்களைக் கோரு"
+ },
+ "dialogs": {
+ "actions": {
+ "openDashboard": "Dashboard ஐத் திற",
+ "openTeam": "team ஐத் திற",
+ "cancel": "ரத்துசெய்"
+ },
+ "membersJson": {
+ "hide": "JSON ஐ மறை"
+ },
+ "optional": {
+ "badge": "விருப்பத்திற்குரியது"
+ }
+ },
+ "runningTeams": {
+ "title": "இயங்கும் Teams",
+ "status": {
+ "active": "செயலில்",
+ "provisioning": "தொடங்குகிறது",
+ "idle": "இயங்குகிறது"
+ },
+ "noProject": "Project இல்லை"
+ },
+ "layout": {
+ "maxPanesReached": "அதிகபட்சம் {{count}} panes எட்டப்பட்டன"
+ },
+ "codexReconnect": {
+ "description": "உங்கள் Codex session பழையதாகத் தெரிகிறது. தொடர மீண்டும் இணைக்கவும்.",
+ "useCode": "குறியீட்டைப் பயன்படுத்து",
+ "generating": "உருவாக்குகிறது...",
+ "openLogin": "உள்நுழைவைத் திற",
+ "generateLink": "இணைப்பை உருவாக்கு"
+ },
+ "effortLevel": {
+ "label": "Effort level (விருப்பத்திற்குரியது)",
+ "maxDescription": "Max கடினமான tasks க்கு மாதிரிக்கு அதிகபட்ச reasoning நேரத்தை வழங்குகிறது."
+ },
+ "contextLimit": {
+ "limitTo200k": "context ஐ 200K tokens க்கு வரம்பிடு",
+ "always200k": "(இந்த மாதிரிக்கு எப்போதும் 200K)",
+ "tooltipContent": "ஆதரிக்கப்படும்போது launches ஐ 200K-token context window க்குள் வைத்திருக்கிறது.",
+ "tooltipTitle": "Context வரம்பு"
+ },
+ "roleSelect": {
+ "noRole": "role இல்லை",
+ "customRole": "தனிப்பயன் role...",
+ "searchPlaceholder": "roles ஐத் தேடு...",
+ "empty": "roles எதுவும் கிடைக்கவில்லை.",
+ "reservedRole": "இந்த role ஒதுக்கப்பட்டுள்ளது",
+ "emptyCustomRole": "role காலியாக இருக்க முடியாது"
+ }
+}
diff --git a/src/features/localization/renderer/locales/te/common.json b/src/features/localization/renderer/locales/te/common.json
new file mode 100644
index 00000000..2c000185
--- /dev/null
+++ b/src/features/localization/renderer/locales/te/common.json
@@ -0,0 +1,927 @@
+{
+ "actions": {
+ "cancel": "రద్దు చేయి",
+ "close": "మూసివేయి",
+ "copied": "కాపీ చేయబడింది",
+ "copyUrl": "URL కాపీ చేయి",
+ "open": "తెరువు",
+ "reveal": "చూపించు",
+ "retry": "మళ్లీ ప్రయత్నించు",
+ "save": "సేవ్ చేయి",
+ "showLess": "తక్కువ చూపించు",
+ "showMore": "మరింత చూపించు",
+ "refresh": "రిఫ్రెష్ చేయి",
+ "reset": "రీసెట్ చేయి",
+ "copyToClipboard": "క్లిప్బోర్డ్కు కాపీ చేయి",
+ "moreActions": "మరిన్ని చర్యలు",
+ "closeDialog": "డైలాగ్ మూసివేయి",
+ "goToDashboard": "డాష్బోర్డ్కు వెళ్లండి",
+ "or": "లేదా",
+ "hide": "దాచు",
+ "resetSelection": "ఎంపికను రీసెట్ చేయి"
+ },
+ "code": {
+ "line": "లైన్ {{line}}",
+ "lines": "లైన్లు {{from}}-{{to}}",
+ "moreLines": "({{count}} మరిన్ని లైన్లు...)",
+ "moreLines_few": "({{count}} మరిన్ని లైన్లు...)",
+ "moreLines_many": "({{count}} మరిన్ని లైన్లు...)",
+ "moreLines_one": "({{count}} మరో లైన్...)",
+ "moreLines_other": "({{count}} మరిన్ని లైన్లు...)",
+ "code": "కోడ్",
+ "preview": "ప్రివ్యూ",
+ "markdownPreview": "Markdown ప్రివ్యూ",
+ "linesParenthesized": "(లైన్లు {{from}}-{{to}})",
+ "mermaidSyntaxError": "Mermaid సింటాక్స్ లోపం"
+ },
+ "contextBadge": {
+ "badge": "కాంటెక్స్ట్",
+ "breakdown": {
+ "text": "టెక్స్ట్",
+ "thinking": "ఆలోచన"
+ },
+ "detailsAria": "కాంటెక్స్ట్ ఇంజెక్షన్ వివరాలు",
+ "sectionSummary": "{{title}} ({{count}}) ~{{tokens}} టోకెన్లు",
+ "sections": {
+ "claudeMdFiles": "CLAUDE.md ఫైల్లు",
+ "mentionedFiles": "ప్రస్తావించిన ఫైల్లు",
+ "taskCoordination": "టాస్క్ సమన్వయం",
+ "thinkingText": "ఆలోచన + టెక్స్ట్",
+ "toolOutputs": "టూల్ అవుట్పుట్లు",
+ "userMessages": "యూజర్ సందేశాలు"
+ },
+ "title": "ఈ టర్న్లో కొత్తగా చేర్చిన కాంటెక్స్ట్",
+ "tokenCount": "~{{tokens}} టోకెన్లు",
+ "totalNewTokens": "మొత్తం కొత్త టోకెన్లు",
+ "turn": "టర్న్ {{turn}}",
+ "sectionSummary_few": "{{title}} ({{count}}) ~{{tokens}} టోకెన్లు",
+ "sectionSummary_many": "{{title}} ({{count}}) ~{{tokens}} టోకెన్లు",
+ "sectionSummary_one": "{{title}} ({{count}}) ~{{tokens}} టోకెన్లు",
+ "sectionSummary_other": "{{title}} ({{count}}) ~{{tokens}} టోకెన్లు"
+ },
+ "locales": {
+ "emptyMessage": "భాష ఏదీ కనుగొనబడలేదు.",
+ "names": {
+ "ar": "అరబిక్",
+ "bn": "బెంగాలీ",
+ "de": "జర్మన్",
+ "en": "ఇంగ్లీష్",
+ "es": "స్పానిష్",
+ "fa": "పర్షియన్",
+ "fil": "ఫిలిపినో",
+ "fr": "ఫ్రెంచ్",
+ "hi": "హిందీ",
+ "id": "ఇండోనేషియన్",
+ "it": "ఇటాలియన్",
+ "ja": "జపనీస్",
+ "ko": "కొరియన్",
+ "mr": "మరాఠీ",
+ "ms": "మలయ్",
+ "nl": "డచ్",
+ "pl": "పోలిష్",
+ "pt": "పోర్చుగీస్",
+ "ro": "రొమేనియన్",
+ "ru": "రష్యన్",
+ "sw": "స్వాహిలీ",
+ "system": "సిస్టమ్",
+ "ta": "తమిళం",
+ "te": "తెలుగు",
+ "th": "థాయ్",
+ "tr": "టర్కిష్",
+ "uk": "ఉక్రేనియన్",
+ "ur": "ఉర్దూ",
+ "vi": "వియత్నామీస్",
+ "zh": "చైనీస్"
+ },
+ "searchPlaceholder": "భాషను శోధించండి...",
+ "selectPlaceholder": "యాప్ భాషను ఎంచుకోండి...",
+ "systemWithResolved": "సిస్టమ్ - {{locale}}"
+ },
+ "members": {
+ "emptyMessage": "సభ్యులు ఎవరూ కనుగొనబడలేదు.",
+ "searchPlaceholder": "సభ్యులను శోధించండి...",
+ "unassigned": "కేటాయించబడలేదు",
+ "teammateFallback": "టీమ్మేట్"
+ },
+ "providerRuntime": {
+ "codex": {
+ "install": {
+ "checking": "తనిఖీ చేస్తోంది",
+ "downloading": "డౌన్లోడ్ చేస్తోంది",
+ "installCli": "Codex CLI ను ఇన్స్టాల్ చేయి",
+ "installing": "ఇన్స్టాల్ చేస్తోంది",
+ "retryInstall": "ఇన్స్టాల్ మళ్లీ ప్రయత్నించు"
+ }
+ }
+ },
+ "search": {
+ "noMatchingSuggestions": "సరిపోలే సూచనలు లేవు",
+ "searching": "శోధిస్తోంది...",
+ "searchingFiles": "ఫైల్లను శోధిస్తోంది...",
+ "findInConversation": "సంభాషణలో కనుగొనండి...",
+ "resultCount": "{{total}}లో {{current}}",
+ "resultCountCapped": "{{total}}+లో {{current}}",
+ "noResults": "ఫలితాలు లేవు",
+ "previousResultShortcut": "మునుపటి ఫలితం (Shift+Enter)",
+ "nextResultShortcut": "తదుపరి ఫలితం (Enter)",
+ "closeShortcut": "మూసివేయి (Esc)",
+ "nothingFound": "ఏమీ కనుగొనబడలేదు",
+ "placeholder": "శోధించండి..."
+ },
+ "schedules": {
+ "actions": {
+ "addSchedule": "షెడ్యూల్ జోడించు",
+ "clearFilters": "ఫిల్టర్లను క్లియర్ చేయి",
+ "createSchedule": "షెడ్యూల్ సృష్టించు",
+ "delete": "తొలగించు",
+ "edit": "సవరించు",
+ "pause": "పాజ్ చేయి",
+ "resume": "కొనసాగించు",
+ "runNow": "ఇప్పుడే అమలు చేయి"
+ },
+ "empty": {
+ "description": "cron ఎక్స్ప్రెషన్లతో Claude టాస్క్ అమలును ఆటోమేట్ చేయడానికి ఏ టీమ్పైనైనా షెడ్యూల్ను సృష్టించండి. అన్ని టీమ్ల షెడ్యూల్లు ఇక్కడ కనిపిస్తాయి.",
+ "noMatches": "ప్రస్తుత ఫిల్టర్లకు ఏ షెడ్యూల్లు సరిపోలడం లేదు",
+ "title": "షెడ్యూల్ చేసిన టాస్క్లు లేవు"
+ },
+ "filters": {
+ "allTeams": "అన్ని టీమ్లు"
+ },
+ "item": {
+ "loadingRunHistory": "రన్ చరిత్రను లోడ్ చేస్తోంది...",
+ "nextRun": "తదుపరి: {{value}}",
+ "noRunsYet": "ఇంకా రన్లు లేవు"
+ },
+ "loading": "షెడ్యూల్లను లోడ్ చేస్తోంది...",
+ "searchPlaceholder": "షెడ్యూల్లను శోధించండి...",
+ "status": {
+ "active": "క్రియాశీలం",
+ "all": "అన్నీ",
+ "disabled": "నిలిపివేయబడింది",
+ "paused": "పాజ్ చేయబడింది"
+ },
+ "title": "షెడ్యూల్లు"
+ },
+ "sessions": {
+ "actions": {
+ "hide": "దాచు",
+ "pin": "పిన్ చేయి",
+ "unhide": "దాచకుండా చూపించు"
+ },
+ "empty": {
+ "noMatchingSessions": "సరిపోలే సెషన్లు లేవు",
+ "noMatchingSessionsDescription": "ఈ ప్రాజెక్ట్కు ఇంకా సరిపోలే సెషన్లు లేవు.",
+ "noMatchingSessionsFiltered": "మరో క్వెరీని ప్రయత్నించండి లేదా ప్రొవైడర్ ఫిల్టర్ను రీసెట్ చేయండి.",
+ "noSessions": "సెషన్లు కనుగొనబడలేదు",
+ "noSessionsDescription": "ఈ ప్రాజెక్ట్కు ఇంకా సెషన్లు లేవు",
+ "selectProject": "సెషన్లను చూడటానికి ప్రాజెక్ట్ను ఎంచుకోండి"
+ },
+ "errors": {
+ "loading": "సెషన్లను లోడ్ చేయడంలో లోపం"
+ },
+ "loadedMatchingMore": "ఇప్పటివరకు {{count}} సరిపోలే సెషన్లు లోడ్ అయ్యాయి - మరిన్ని లోడ్ చేయడానికి కిందికి స్క్రోల్ చేయండి.",
+ "loadingMore": "మరిన్ని సెషన్లను లోడ్ చేస్తోంది...",
+ "pinned": "పిన్ చేయబడింది",
+ "scrollToLoadMore": "మరింత లోడ్ చేయడానికి స్క్రోల్ చేయండి",
+ "search": {
+ "clear": "సెషన్ శోధనను క్లియర్ చేయి",
+ "placeholder": "సెషన్లను శోధించండి..."
+ },
+ "selection": {
+ "cancel": "ఎంపికను రద్దు చేయి",
+ "exitMode": "ఎంపిక మోడ్ నుండి నిష్క్రమించు",
+ "hideSelected": "ఎంచుకున్న సెషన్లను దాచు",
+ "pinSelected": "ఎంచుకున్న సెషన్లను పిన్ చేయి",
+ "selectSessions": "సెషన్లను ఎంచుకోండి",
+ "selected": "{{count}} ఎంచుకోబడ్డాయి",
+ "unhideSelected": "ఎంచుకున్న సెషన్లను దాచకుండా చూపించు",
+ "selected_few": "{{count}} ఎంచుకోబడ్డాయి",
+ "selected_many": "{{count}} ఎంచుకోబడ్డాయి",
+ "selected_one": "{{count}} ఎంచుకోబడింది",
+ "selected_other": "{{count}} ఎంచుకోబడ్డాయి"
+ },
+ "sort": {
+ "byContext": "కాంటెక్స్ట్ ప్రకారం",
+ "byContextTooltip": "కాంటెక్స్ట్ వినియోగం ప్రకారం క్రమబద్ధీకరించు",
+ "byRecentTooltip": "ఇటీవలి ప్రకారం క్రమబద్ధీకరించు",
+ "contextLoadedOnly": "కాంటెక్స్ట్ క్రమబద్ధీకరణ లోడ్ చేసిన సెషన్లను మాత్రమే ర్యాంక్ చేస్తుంది."
+ },
+ "title": "సెషన్లు",
+ "visibility": {
+ "hideHidden": "దాచిన సెషన్లను దాచు",
+ "showHidden": "దాచిన సెషన్లను చూపించు"
+ },
+ "worktree": {
+ "switch": "Worktree మార్చు"
+ },
+ "loadedMatchingMore_few": "ఇప్పటివరకు {{count}} సరిపోలే సెషన్లు లోడ్ అయ్యాయి - మరిన్ని లోడ్ చేయడానికి కిందికి స్క్రోల్ చేయండి.",
+ "loadedMatchingMore_many": "ఇప్పటివరకు {{count}} సరిపోలే సెషన్లు లోడ్ అయ్యాయి - మరిన్ని లోడ్ చేయడానికి కిందికి స్క్రోల్ చేయండి.",
+ "loadedMatchingMore_one": "ఇప్పటివరకు {{count}} సరిపోలే సెషన్ లోడ్ అయింది - మరిన్ని లోడ్ చేయడానికి కిందికి స్క్రోల్ చేయండి.",
+ "loadedMatchingMore_other": "ఇప్పటివరకు {{count}} సరిపోలే సెషన్లు లోడ్ అయ్యాయి - మరిన్ని లోడ్ చేయడానికి కిందికి స్క్రోల్ చేయండి.",
+ "failedToLoad": "సెషన్ను లోడ్ చేయడం విఫలమైంది",
+ "loading": "సెషన్ను లోడ్ చేస్తోంది...",
+ "filter": {
+ "title": "సెషన్లను ఫిల్టర్ చేయి"
+ },
+ "count": "{{count}} సెషన్లు",
+ "count_one": "{{count}} సెషన్",
+ "count_other": "{{count}} సెషన్లు",
+ "count_few": "{{count}} సెషన్లు",
+ "count_many": "{{count}} సెషన్లు",
+ "inProgress": "సెషన్ ప్రోగ్రెస్లో ఉంది..."
+ },
+ "states": {
+ "loading": "లోడ్ అవుతోంది...",
+ "offline": "ఆఫ్లైన్",
+ "online": "ఆన్లైన్",
+ "unknown": "తెలియదు",
+ "error": "లోపం"
+ },
+ "markdown": {
+ "imageFallback": "[ఇమేజ్: {{label}}]",
+ "largeContentNotice": "కంటెంట్ చాలా పెద్దది ({{count}} అక్షరాలు). UI ప్రతిస్పందనగా ఉంచడానికి రా ప్రివ్యూ చూపిస్తోంది.",
+ "largeContentTitle": "UI స్తంభించకుండా ఉండటానికి పెద్ద కంటెంట్ రా రూపంలో చూపబడుతుంది",
+ "raw": "రా",
+ "rawPreview": "రా ప్రివ్యూ",
+ "renderMarkdown": "markdown రెండర్ చేయి",
+ "showAll": "అన్నీ చూపించు",
+ "showMore": "మరింత చూపించు",
+ "showRaw": "రా చూపించు",
+ "showingChars": "{{shown}} / {{total}} అక్షరాలు చూపిస్తోంది",
+ "largeContentNotice_few": "కంటెంట్ చాలా పెద్దది ({{count}} అక్షరాలు). UI ప్రతిస్పందనగా ఉంచడానికి రా ప్రివ్యూ చూపిస్తోంది.",
+ "largeContentNotice_many": "కంటెంట్ చాలా పెద్దది ({{count}} అక్షరాలు). UI ప్రతిస్పందనగా ఉంచడానికి రా ప్రివ్యూ చూపిస్తోంది.",
+ "largeContentNotice_one": "కంటెంట్ చాలా పెద్దది ({{count}} అక్షరం). UI ప్రతిస్పందనగా ఉంచడానికి రా ప్రివ్యూ చూపిస్తోంది.",
+ "largeContentNotice_other": "కంటెంట్ చాలా పెద్దది ({{count}} అక్షరాలు). UI ప్రతిస్పందనగా ఉంచడానికి రా ప్రివ్యూ చూపిస్తోంది."
+ },
+ "terminal": {
+ "checkOutputForDetails": "వివరాల కోసం పైన టెర్మినల్ అవుట్పుట్ను తనిఖీ చేయండి",
+ "closingInSeconds": "{{count}}s లో మూసివేస్తోంది...",
+ "closingInSeconds_few": "{{count}}s లో మూసివేస్తోంది...",
+ "closingInSeconds_many": "{{count}}s లో మూసివేస్తోంది...",
+ "closingInSeconds_one": "{{count}}s లో మూసివేస్తోంది...",
+ "closingInSeconds_other": "{{count}}s లో మూసివేస్తోంది...",
+ "completedSuccessfully": "విజయవంతంగా పూర్తయింది",
+ "exitCode": "(నిష్క్రమణ కోడ్ {{code}})",
+ "processFailed": "ప్రాసెస్ విఫలమైంది",
+ "title": "టెర్మినల్"
+ },
+ "tokens": {
+ "accumulatedWithoutDuplication": "నకిలీ లేకుండా మొత్తం సెషన్ అంతటా సేకరించబడింది",
+ "cacheRead": "క్యాష్ రీడ్",
+ "cacheWrite": "క్యాష్ రైట్",
+ "costUsd": "ఖర్చు (USD)",
+ "inputTokens": "ఇన్పుట్ టోకెన్లు",
+ "model": "మోడల్",
+ "outputTokens": "అవుట్పుట్ టోకెన్లు",
+ "phase": "దశ {{phase}}/{{total}}",
+ "promptInputShare": "ప్రాంప్ట్ ఇన్పుట్లో {{percent}}%",
+ "taskCoordination": "టాస్క్ సమన్వయం",
+ "thinkingText": "ఆలోచన + టెక్స్ట్",
+ "toolOutputs": "టూల్ అవుట్పుట్లు",
+ "total": "మొత్తం",
+ "userMessages": "యూజర్ సందేశాలు",
+ "visibleContext": "కనిపించే కాంటెక్స్ట్",
+ "includesClaudeMd": "CLAUDE.md ×{{count}} తో సహా",
+ "claudeMd": "CLAUDE.md",
+ "mentionedFiles": "@files",
+ "percentValue": "({{percent}}%)",
+ "approxTokens": "~{{tokens}} టోకెన్లు",
+ "approxTokensParenthesized": "(~{{tokens}})"
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "టీమ్ను కాపీ చేయి",
+ "createTeam": "టీమ్ను సృష్టించు",
+ "deleteForever": "శాశ్వతంగా తొలగించు",
+ "deletePermanently": "శాశ్వతంగా తొలగించు",
+ "deleteTeam": "టీమ్ను తొలగించు",
+ "launching": "లాంచ్ చేస్తోంది...",
+ "launchTeam": "టీమ్ను లాంచ్ చేయి",
+ "relaunchTeam": "టీమ్ను మళ్లీ లాంచ్ చేయి",
+ "restore": "పునరుద్ధరించు",
+ "restoreTeam": "టీమ్ను పునరుద్ధరించు",
+ "retry": "మళ్లీ ప్రయత్నించు",
+ "stopTeam": "టీమ్ను ఆపు",
+ "stopping": "ఆపుతోంది..."
+ },
+ "status": {
+ "active": "క్రియాశీలం",
+ "deleted": "తొలగించబడింది",
+ "launching": "లాంచ్ చేస్తోంది...",
+ "offline": "ఆఫ్లైన్",
+ "partialFailure": "లాంచ్ మధ్యలో విఫలమైంది",
+ "partialPending": "బూట్స్ట్రాప్ పెండింగ్",
+ "partialSkipped": "లాంచ్ సభ్యుడిని దాటవేసింది",
+ "running": "రన్ అవుతోంది"
+ },
+ "partial": {
+ "pending": "చివరి లాంచ్ ఇంకా రీకన్సైల్ అవుతోంది.",
+ "skipped": "చివరి లాంచ్ కొంత టీమ్మేట్లను దాటవేసింది.",
+ "skippedWithCount": "చివరి లాంచ్ {{count}}/{{expected}} టీమ్మేట్ను దాటవేసింది.",
+ "skippedWithCount_few": "చివరి లాంచ్ {{count}}/{{expected}} టీమ్మేట్లను దాటవేసింది.",
+ "skippedWithCount_many": "చివరి లాంచ్ {{count}}/{{expected}} టీమ్మేట్లను దాటవేసింది.",
+ "skippedWithCount_one": "చివరి లాంచ్ {{count}}/{{expected}} టీమ్మేట్ను దాటవేసింది.",
+ "skippedWithCount_other": "చివరి లాంచ్ {{count}}/{{expected}} టీమ్మేట్లను దాటవేసింది.",
+ "stopped": "అన్ని టీమ్మేట్లు చేరడానికి ముందే చివరి లాంచ్ ఆగిపోయింది.",
+ "stoppedWithCount": "{{count}}/{{expected}} టీమ్మేట్ చేరడానికి ముందే చివరి లాంచ్ ఆగిపోయింది.",
+ "stoppedWithCount_few": "{{count}}/{{expected}} టీమ్మేట్లు చేరడానికి ముందే చివరి లాంచ్ ఆగిపోయింది.",
+ "stoppedWithCount_many": "{{count}}/{{expected}} టీమ్మేట్లు చేరడానికి ముందే చివరి లాంచ్ ఆగిపోయింది.",
+ "stoppedWithCount_one": "{{count}}/{{expected}} టీమ్మేట్ చేరడానికి ముందే చివరి లాంచ్ ఆగిపోయింది.",
+ "stoppedWithCount_other": "{{count}}/{{expected}} టీమ్మేట్లు చేరడానికి ముందే చివరి లాంచ్ ఆగిపోయింది."
+ },
+ "noDescription": "వివరణ లేదు",
+ "solo": "సోలో",
+ "membersCount": "సభ్యులు: {{count}}",
+ "membersCount_few": "సభ్యులు: {{count}}",
+ "membersCount_many": "సభ్యులు: {{count}}",
+ "membersCount_one": "సభ్యుడు: {{count}}",
+ "membersCount_other": "సభ్యులు: {{count}}",
+ "all": "అన్నీ",
+ "moreCount": "+{{count}} మరిన్ని",
+ "moreCount_one": "+{{count}} మరింత",
+ "moreCount_other": "+{{count}} మరిన్ని",
+ "moreCount_few": "+{{count}} మరిన్ని",
+ "moreCount_many": "+{{count}} మరిన్ని"
+ },
+ "runtimeProvider": {
+ "defaults": {
+ "scopeDescriptionAllProjects": "దాని స్వంత OpenCode ఓవర్రైడ్ లేని ప్రతి ప్రాజెక్ట్కు డిఫాల్ట్.",
+ "scopeDescriptionProject": "ఎంచుకున్న ప్రాజెక్ట్ను మాత్రమే ఓవర్రైడ్ చేస్తుంది. రన్ అవుతున్న టీమ్లు మారవు.",
+ "setAllProjectsDefault": "అన్ని-ప్రాజెక్ట్ల డిఫాల్ట్ను సెట్ చేయి",
+ "setProjectDefault": "ప్రాజెక్ట్ డిఫాల్ట్ను సెట్ చేయి",
+ "validationContext": "ధృవీకరణ కాంటెక్స్ట్",
+ "projectOverrideContext": "ప్రాజెక్ట్ ఓవర్రైడ్ కాంటెక్స్ట్",
+ "selectProjectHint": "స్థానిక మోడల్లను పరీక్షించడానికి లేదా డిఫాల్ట్లను సేవ్ చేయడానికి ముందు ప్రాజెక్ట్ను ఎంచుకోండి.",
+ "allProjectsHint": "పరీక్షలు {{project}} ను ఉపయోగిస్తాయి. ప్రాజెక్ట్కు ఓవర్రైడ్ లేకపోతే డిఫాల్ట్ వర్తిస్తుంది.",
+ "projectHint": "సేవ్ చేయడం {{project}} ను మాత్రమే ఓవర్రైడ్ చేస్తుంది."
+ }
+ },
+ "sessionContext": {
+ "header": {
+ "title": "కాంటెక్స్ట్",
+ "closePanel": "ప్యానెల్ మూసివేయి",
+ "phase": "దశ:",
+ "current": "ప్రస్తుత",
+ "view": "వీక్షణ:",
+ "category": "వర్గం",
+ "bySize": "పరిమాణం ప్రకారం"
+ },
+ "metrics": {
+ "unavailable": "అందుబాటులో లేదు",
+ "contextUsed": "ఉపయోగించిన కాంటెక్స్ట్",
+ "promptInput": "ప్రాంప్ట్ ఇన్పుట్",
+ "visibleContext": "కనిపించే కాంటెక్స్ట్",
+ "ofContext": "కాంటెక్స్ట్లో",
+ "ofPrompt": "ప్రాంప్ట్లో",
+ "codexTelemetryUnavailable": "Codex ప్రాంప్ట్-సైడ్ వినియోగం ప్రస్తుత రన్టైమ్ టెలిమెట్రీ ద్వారా ఇంకా బహిర్గతం కాలేదు, కాబట్టి నకిలీ సున్నాను చూపించే బదులు Prompt Input మరియు Context Used అందుబాటులో లేకుండా ఉంటాయి.",
+ "sessionCost": "సెషన్ ఖర్చు:",
+ "parentPlus": "పేరెంట్ +",
+ "subagents": "సబ్ఏజెంట్లు",
+ "details": "వివరాలు"
+ },
+ "help": {
+ "contextUsed": {
+ "title": "ఉపయోగించిన కాంటెక్స్ట్",
+ "description": "ప్రస్తుతం మోడల్ యొక్క కాంటెక్స్ట్ విండోను ఆక్రమిస్తున్న ప్రాంప్ట్ ఇన్పుట్ మరియు అవుట్పుట్ టోకెన్లు."
+ },
+ "promptInput": {
+ "title": "ప్రాంప్ట్ ఇన్పుట్",
+ "description": "జనరేషన్కు ముందు మోడల్కు పంపిన టోకెన్లు. Claude కోసం ఇందులో `input_tokens + cache_creation_input_tokens + cache_read_input_tokens` ఉంటాయి."
+ },
+ "visibleContext": {
+ "title": "కనిపించే కాంటెక్స్ట్",
+ "description": "ప్రాంప్ట్ ఇన్పుట్ యొక్క తనిఖీ చేయదగిన ఉపసమితి: ఫైల్లు, CLAUDE.md, టూల్ అవుట్పుట్లు, యూజర్ సందేశాలు మరియు మీరు నేరుగా ఆప్టిమైజ్ చేయగల ఇలాంటి ఇంజెక్షన్లు."
+ },
+ "availability": {
+ "title": "లభ్యత",
+ "description": "ప్రొవైడర్ రన్టైమ్ ప్రాంప్ట్-సైడ్ వినియోగాన్ని ఇంకా బహిర్గతం చేయకపోతే, ప్యానెల్ మెట్రిక్లను సున్నాగా చూపించే బదులు అందుబాటులో లేనట్లుగా చూపిస్తుంది."
+ }
+ },
+ "items": {
+ "turn": "@టర్న్ {{turn}}",
+ "tokensApprox": "~{{tokens}} టోకెన్లు",
+ "toolsCount": "{{count}} టూల్స్",
+ "toolsCount_one": "{{count}} టూల్",
+ "toolsCount_other": "{{count}} టూల్స్",
+ "toolsCount_few": "{{count}} టూల్స్",
+ "toolsCount_many": "{{count}} టూల్స్",
+ "itemsCount": "{{count}} అంశాలు",
+ "itemsCount_one": "{{count}} అంశం",
+ "itemsCount_other": "{{count}} అంశాలు",
+ "itemsCount_few": "{{count}} అంశాలు",
+ "itemsCount_many": "{{count}} అంశాలు",
+ "missing": "లేదు",
+ "thinking": "ఆలోచన",
+ "text": "టెక్స్ట్"
+ },
+ "empty": "ఈ సెషన్లో కాంటెక్స్ట్ ఇంజెక్షన్లు ఏవీ గుర్తించబడలేదు",
+ "view": {
+ "grouped": "సమూహ పరచబడింది",
+ "flat": "ఫ్లాట్"
+ },
+ "claudeMdFiles": "CLAUDE.md ఫైల్లు",
+ "mentionedFiles": "ప్రస్తావించిన ఫైల్లు"
+ },
+ "chat": {
+ "subagent": {
+ "fallbackName": "సబ్ఏజెంట్",
+ "shutdownConfirmed": "షట్డౌన్ నిర్ధారించబడింది",
+ "summary": {
+ "tools": "{{count}} టూల్స్",
+ "tools_one": "{{count}} టూల్",
+ "tools_other": "{{count}} టూల్స్",
+ "tools_few": "{{count}} టూల్స్",
+ "tools_many": "{{count}} టూల్స్"
+ },
+ "meta": {
+ "type": "రకం",
+ "duration": "వ్యవధి",
+ "model": "మోడల్",
+ "id": "ID"
+ },
+ "metrics": {
+ "contextWindow": "కాంటెక్స్ట్ విండో",
+ "contextUsage": "కాంటెక్స్ట్ వినియోగం",
+ "mainContext": "ప్రధాన కాంటెక్స్ట్",
+ "totalOutput": "మొత్తం అవుట్పుట్",
+ "turns": "({{count}} టర్న్లు)",
+ "turns_one": "({{count}} టర్న్)",
+ "turns_other": "({{count}} టర్న్లు)",
+ "subagentContext": "సబ్ఏజెంట్ కాంటెక్స్ట్",
+ "phase": "దశ {{phase}}",
+ "turns_few": "({{count}} టర్న్లు)",
+ "turns_many": "({{count}} టర్న్లు)"
+ },
+ "trace": {
+ "title": "అమలు ట్రేస్"
+ }
+ },
+ "user": {
+ "you": "మీరు",
+ "showMore": "మరింత చూపించు",
+ "showLess": "తక్కువ చూపించు",
+ "backgroundTask": "బ్యాక్గ్రౌండ్ టాస్క్",
+ "exitCode": "నిష్క్రమణ {{code}}",
+ "imagesAttached": "{{count}} ఇమేజ్లు జతచేయబడ్డాయి",
+ "imagesAttached_one": "{{count}} ఇమేజ్ జతచేయబడింది",
+ "imagesAttached_few": "{{count}} ఇమేజ్లు జతచేయబడ్డాయి",
+ "imagesAttached_many": "{{count}} ఇమేజ్లు జతచేయబడ్డాయి",
+ "imagesAttached_other": "{{count}} ఇమేజ్లు జతచేయబడ్డాయి"
+ },
+ "compact": {
+ "toggle": "కంపాక్ట్ చేసిన కంటెంట్ను టోగుల్ చేయి",
+ "contextCompacted": "కాంటెక్స్ట్ కంపాక్ట్ చేయబడింది",
+ "freedTokens": "({{tokens}} విడుదల చేయబడింది)",
+ "phase": "దశ {{phase}}",
+ "conversationCompacted": "సంభాషణ కంపాక్ట్ చేయబడింది",
+ "summary": "కాంటెక్స్ట్ను ఆదా చేయడానికి మునుపటి సందేశాలు సారాంశీకరించబడ్డాయి. పూర్తి సంభాషణ చరిత్ర సెషన్ ఫైల్లో భద్రపరచబడింది.",
+ "compacted": "కంపాక్ట్ చేయబడింది"
+ },
+ "executionTrace": {
+ "empty": "అమలు అంశాలు లేవు",
+ "nested": "నెస్టెడ్: {{name}}",
+ "input": "ఇన్పుట్"
+ },
+ "items": {
+ "empty": "చూపించడానికి అంశాలు లేవు"
+ },
+ "tools": {
+ "teammateSpawned": "టీమ్మేట్ స్పాన్ చేయబడింది",
+ "shutdownRequested": "షట్డౌన్ అభ్యర్థించబడింది ->",
+ "noResultReceived": "ఫలితం ఏదీ అందలేదు",
+ "duration": "వ్యవధి: {{duration}}",
+ "result": "ఫలితం",
+ "write": {
+ "createdFile": "ఫైల్ సృష్టించబడింది",
+ "wroteToFile": "ఫైల్కు రాయబడింది"
+ },
+ "skill": {
+ "instructions": "నైపుణ్య సూచనలు",
+ "unknown": "తెలియని నైపుణ్యం"
+ }
+ },
+ "lastOutput": {
+ "requestInterrupted": "యూజర్ ద్వారా అభ్యర్థన అంతరాయం కలిగింది",
+ "planReadyForApproval": "ప్రణాళిక ఆమోదానికి సిద్ధం"
+ },
+ "empty": {
+ "icon": "💬",
+ "title": "సంభాషణ చరిత్ర లేదు",
+ "description": "ఈ సెషన్ ఇంకా ఏ సందేశాలను కలిగి లేదు."
+ },
+ "context": {
+ "remainingPercent": "({{percent}}% మిగిలి ఉంది)",
+ "count": "కాంటెక్స్ట్ ({{count}})",
+ "count_one": "కాంటెక్స్ట్ ({{count}})",
+ "count_other": "కాంటెక్స్ట్ ({{count}})",
+ "count_few": "కాంటెక్స్ట్ ({{count}})",
+ "count_many": "కాంటెక్స్ట్ ({{count}})"
+ },
+ "scrollToBottom": "కిందికి స్క్రోల్ చేయి",
+ "bottom": "కింద",
+ "teammateMessage": {
+ "message": "సందేశం",
+ "resent": "మళ్లీ పంపబడింది",
+ "fallback": "టీమ్మేట్ సందేశం"
+ },
+ "system": {
+ "label": "సిస్టమ్"
+ }
+ },
+ "tmuxInstaller": {
+ "summaryTitle": "tmux ఇన్స్టాల్ చేయబడలేదు",
+ "detectedOs": "గుర్తించిన OS: {{os}}",
+ "runtimePath": "రన్టైమ్ మార్గం: {{path}}",
+ "phase": "దశ: {{phase}}",
+ "actions": {
+ "cancel": "రద్దు చేయి",
+ "manualGuide": "మాన్యువల్ గైడ్",
+ "hideSetupSteps": "సెటప్ దశలను దాచు",
+ "showSetupSteps": "సెటప్ దశలను చూపించు ({{count}})",
+ "showSetupSteps_one": "సెటప్ దశను చూపించు ({{count}})",
+ "showSetupSteps_other": "సెటప్ దశలను చూపించు ({{count}})",
+ "recheck": "మళ్లీ తనిఖీ చేయి",
+ "showSetupSteps_few": "సెటప్ దశలను చూపించు ({{count}})",
+ "showSetupSteps_many": "సెటప్ దశలను చూపించు ({{count}})"
+ },
+ "installerProgress": "ఇన్స్టాలర్ ప్రోగ్రెస్",
+ "input": {
+ "placeholder": "ఇన్స్టాలర్కు ఇన్పుట్ పంపండి",
+ "send": "ఇన్పుట్ పంపు",
+ "passwordNotice": "పాస్వర్డ్ ఇన్పుట్ నేరుగా ఇన్స్టాలర్ టెర్మినల్కు పంపబడుతుంది మరియు లాగ్ అవుట్పుట్కు జోడించబడదు."
+ },
+ "details": {
+ "show": "వివరాలను చూపించు",
+ "hide": "వివరాలను దాచు"
+ }
+ },
+ "commandPalette": {
+ "noRecentActivity": "ఇటీవలి కార్యకలాపం లేదు",
+ "sessionsCount": "{{count}} సెషన్లు",
+ "sessionsCount_one": "{{count}} సెషన్",
+ "sessionsCount_other": "{{count}} సెషన్లు",
+ "mode": {
+ "searchProjects": "ప్రాజెక్ట్లను శోధించు",
+ "searchAcrossProjects": "అన్ని ప్రాజెక్ట్లలో శోధించు",
+ "searchInProject": "ప్రాజెక్ట్లో శోధించు"
+ },
+ "currentProject": "ప్రస్తుత ప్రాజెక్ట్",
+ "global": "గ్లోబల్",
+ "placeholders": {
+ "projects": "ప్రాజెక్ట్లను శోధించండి...",
+ "conversations": "సంభాషణలను శోధించండి..."
+ },
+ "empty": {
+ "noProjectsForQuery": "\"{{query}}\" కోసం ప్రాజెక్ట్లు కనుగొనబడలేదు",
+ "noProjects": "ప్రాజెక్ట్లు కనుగొనబడలేదు",
+ "minChars": "శోధించడానికి కనీసం 2 అక్షరాలు టైప్ చేయండి",
+ "noFastResults": "\"{{query}}\" కోసం ఇటీవలి సెషన్లలో వేగవంతమైన ఫలితాలు లేవు",
+ "noResults": "\"{{query}}\" కోసం ఫలితాలు కనుగొనబడలేదు"
+ },
+ "footer": {
+ "projectsCount": "{{count}} ప్రాజెక్ట్లు",
+ "projectsCount_one": "{{count}} ప్రాజెక్ట్",
+ "projectsCount_other": "{{count}} ప్రాజెక్ట్లు",
+ "results": "{{count}} {{speed}}ఫలితాలు",
+ "results_one": "{{count}} {{speed}}ఫలితం",
+ "results_other": "{{count}} {{speed}}ఫలితాలు",
+ "resultsAcrossProjects": "అన్ని ప్రాజెక్ట్లలో {{count}} {{speed}}ఫలితాలు",
+ "resultsAcrossProjects_one": "అన్ని ప్రాజెక్ట్లలో {{count}} {{speed}}ఫలితం",
+ "resultsAcrossProjects_other": "అన్ని ప్రాజెక్ట్లలో {{count}} {{speed}}ఫలితాలు",
+ "fastPrefix": "వేగవంతమైన ",
+ "typeToSearch": "శోధించడానికి టైప్ చేయండి",
+ "navigate": "నావిగేట్ చేయి",
+ "select": "ఎంచుకో",
+ "open": "తెరువు",
+ "global": "గ్లోబల్",
+ "close": "మూసివేయి",
+ "results_few": "{{count}} {{speed}}ఫలితాలు",
+ "results_many": "{{count}} {{speed}}ఫలితాలు",
+ "resultsAcrossProjects_few": "అన్ని ప్రాజెక్ట్లలో {{count}} {{speed}}ఫలితాలు",
+ "resultsAcrossProjects_many": "అన్ని ప్రాజెక్ట్లలో {{count}} {{speed}}ఫలితాలు",
+ "projectsCount_few": "{{count}} ప్రాజెక్ట్లు",
+ "projectsCount_many": "{{count}} ప్రాజెక్ట్లు",
+ "upDownKey": "↑↓",
+ "escapeKey": "esc"
+ },
+ "sessionsCount_few": "{{count}} సెషన్లు",
+ "sessionsCount_many": "{{count}} సెషన్లు"
+ },
+ "tasksPanel": {
+ "title": "టాస్క్లు",
+ "searchPlaceholder": "టాస్క్లను శోధించండి...",
+ "pinned": "పిన్ చేయబడింది",
+ "groupByLabel": "దీని ప్రకారం సమూహపరచు:",
+ "groupByAria": "దీని ప్రకారం సమూహపరచు",
+ "groupModes": {
+ "none": "ఏదీ లేదు",
+ "project": "ప్రాజెక్ట్",
+ "time": "సమయం"
+ },
+ "showArchived": "ఆర్కైవ్ చేసినవి చూపించు",
+ "hideArchived": "ఆర్కైవ్ చేసినవి దాచు",
+ "empty": {
+ "noMatchingTasks": "సరిపోలే టాస్క్లు లేవు",
+ "noTasks": "టాస్క్లు కనుగొనబడలేదు"
+ },
+ "teamLabel": "టీమ్: {{team}}",
+ "showMore": "మరింత చూపించు",
+ "showLess": "తక్కువ చూపించు",
+ "deleteConfirm": {
+ "title": "టాస్క్ను తొలగించు",
+ "message": "టాస్క్ #{{taskId}} ను ట్రాష్కు తరలించాలా?",
+ "confirmLabel": "తొలగించు",
+ "cancelLabel": "రద్దు చేయి"
+ },
+ "deleteFailed": {
+ "title": "టాస్క్ను తొలగించడం విఫలమైంది",
+ "fallbackMessage": "ఊహించని లోపం సంభవించింది",
+ "confirmLabel": "సరే"
+ },
+ "sort": {
+ "byTime": "సమయం ప్రకారం",
+ "byUnread": "చదవనివి ప్రకారం",
+ "byProject": "ప్రాజెక్ట్ ప్రకారం",
+ "byTeam": "టీమ్ ప్రకారం"
+ }
+ },
+ "toolViewer": {
+ "input": "ఇన్పుట్",
+ "replaceAll": "(అన్నీ భర్తీ చేయి)",
+ "noInputRecorded": "ఈ టూల్ కాల్ కోసం ఏ ఇన్పుట్ రికార్డ్ చేయబడలేదు.",
+ "agent": {
+ "action": "చర్య",
+ "teammate": "టీమ్మేట్",
+ "team": "టీమ్",
+ "runtime": "రన్టైమ్",
+ "type": "రకం",
+ "startupInstructionsHidden": "స్టార్టప్ సూచనలు UIలో దాచబడ్డాయి."
+ }
+ },
+ "taskContextMenu": {
+ "unpin": "అన్పిన్ చేయి",
+ "pin": "పిన్ చేయి",
+ "rename": "పేరు మార్చు",
+ "markUnread": "చదవనట్లుగా గుర్తించు",
+ "unarchive": "ఆర్కైవ్ నుండి తీసివేయి",
+ "archive": "ఆర్కైవ్ చేయి",
+ "deleteTask": "టాస్క్ను తొలగించు"
+ },
+ "updateDialog": {
+ "closeDialog": "డైలాగ్ మూసివేయి",
+ "updateAvailable": "అప్డేట్ అందుబాటులో ఉంది",
+ "updateReady": "అప్డేట్ సిద్ధం",
+ "noReleaseNotes": "రిలీజ్ నోట్లు అందుబాటులో లేవు.",
+ "viewOnGitHub": "GitHub లో చూడండి",
+ "later": "తర్వాత",
+ "restartNow": "ఇప్పుడే పునఃప్రారంభించు",
+ "download": "డౌన్లోడ్"
+ },
+ "errorBoundary": {
+ "title": "ఏదో తప్పు జరిగింది",
+ "description": "అప్లికేషన్లో ఊహించని లోపం సంభవించింది. మీరు పేజీని మళ్లీ లోడ్ చేయడానికి లేదా లోప స్థితిని రీసెట్ చేయడానికి ప్రయత్నించవచ్చు.",
+ "componentStack": "కాంపోనెంట్ స్టాక్",
+ "tryAgain": "మళ్లీ ప్రయత్నించు",
+ "copied": "కాపీ చేయబడింది",
+ "copyErrorDetails": "లోప వివరాలను కాపీ చేయి",
+ "reportBugOnGitHub": "GitHub లో బగ్ నివేదించు",
+ "reloadApp": "యాప్ను మళ్లీ లోడ్ చేయి",
+ "diagnosticsNotice": "GitHub బగ్ నివేదికలు మరియు కాపీ చేసిన డయాగ్నొస్టిక్లలో లోప సందేశం, స్టాక్ ట్రేస్లు, యాప్ వెర్షన్, క్రియాశీల ట్యాబ్, ఎంచుకున్న టీమ్, టాస్క్ కాంటెక్స్ట్ మరియు ఎన్విరాన్మెంట్ వివరాలు ఉంటాయి."
+ },
+ "runtimeBackendSelector": {
+ "label": "రన్టైమ్ బ్యాకెండ్",
+ "resolved": "పరిష్కరించబడింది: {{backend}}",
+ "current": "ప్రస్తుత",
+ "recommended": "సిఫార్సు చేయబడింది",
+ "unavailable": "అందుబాటులో లేదు",
+ "cannotSelectYet": "ఈ బ్యాకెండ్ను ఇంకా ఎంచుకోలేరు.",
+ "auto": "Auto",
+ "autoCurrently": "Auto (ప్రస్తుతం: {{backend}})",
+ "audience": {
+ "internal": "అంతర్గత"
+ },
+ "states": {
+ "locked": "లాక్ చేయబడింది",
+ "disabled": "నిలిపివేయబడింది",
+ "authRequired": "auth అవసరం",
+ "runtimeMissing": "రన్టైమ్ లేదు",
+ "degraded": "క్షీణించింది",
+ "unavailable": "అందుబాటులో లేదు"
+ }
+ },
+ "providerModelBadges": {
+ "checking": "తనిఖీ చేస్తోంది",
+ "unavailable": "అందుబాటులో లేదు",
+ "checkFailed": "తనిఖీ విఫలమైంది",
+ "free": "ఉచితం",
+ "freeTooltip": "OpenCode మెటాడేటా ద్వారా నివేదించబడింది. లభ్యత మరియు పరిమితులు మారవచ్చు."
+ },
+ "taskFilters": {
+ "status": "స్థితి",
+ "clearAll": "అన్నీ క్లియర్ చేయి",
+ "selectAll": "అన్నీ ఎంచుకో",
+ "team": "టీమ్",
+ "allTeams": "అన్ని టీమ్లు",
+ "searchTeams": "టీమ్లను శోధించండి...",
+ "noTeamsFound": "టీమ్లు కనుగొనబడలేదు",
+ "project": "ప్రాజెక్ట్",
+ "allProjects": "అన్ని ప్రాజెక్ట్లు",
+ "searchProjects": "ప్రాజెక్ట్లను శోధించండి...",
+ "noProjects": "ప్రాజెక్ట్లు లేవు",
+ "comments": "వ్యాఖ్యలు",
+ "apply": "వర్తింపజేయి",
+ "read": {
+ "all": "అన్నీ",
+ "unread": "చదవనివి",
+ "read": "చదివినవి"
+ },
+ "statusOptions": {
+ "todo": "చేయవలసినవి",
+ "inProgress": "ప్రోగ్రెస్లో",
+ "needsFix": "సరిదిద్దాలి",
+ "done": "పూర్తయింది",
+ "review": "సమీక్ష",
+ "approved": "ఆమోదించబడింది"
+ }
+ },
+ "sessionItem": {
+ "totalContext": "మొత్తం కాంటెక్స్ట్: {{tokens}} టోకెన్లు",
+ "context": "కాంటెక్స్ట్: {{tokens}}",
+ "phase": "దశ {{phase}}:",
+ "compactedTo": "({{tokens}} కు కంపాక్ట్ చేయబడింది)"
+ },
+ "notifications": {
+ "row": {
+ "team": "టీమ్",
+ "subagent": "సబ్ఏజెంట్",
+ "markAsRead": "చదివినట్లుగా గుర్తించు",
+ "delete": "తొలగించు",
+ "viewInSession": "సెషన్లో చూడండి"
+ },
+ "title": "నోటిఫికేషన్లు",
+ "loading": "నోటిఫికేషన్లను లోడ్ చేస్తోంది...",
+ "actions": {
+ "markFilteredAsRead": "ఫిల్టర్ చేసినవి చదివినట్లుగా గుర్తించు",
+ "markAllAsRead": "అన్నీ చదివినట్లుగా గుర్తించు",
+ "markFilteredRead": "ఫిల్టర్ చేసినవి చదివినట్లు గుర్తించు",
+ "markAllRead": "అన్నీ చదివినట్లు గుర్తించు",
+ "clearFilteredNotifications": "ఫిల్టర్ చేసిన నోటిఫికేషన్లను క్లియర్ చేయి",
+ "clearAllNotifications": "అన్ని నోటిఫికేషన్లను క్లియర్ చేయి",
+ "clickToConfirm": "నిర్ధారించడానికి క్లిక్ చేయండి",
+ "clearFiltered": "ఫిల్టర్ చేసినవి క్లియర్ చేయి",
+ "clearAll": "అన్నీ క్లియర్ చేయి"
+ },
+ "counts": {
+ "unreadInFilter": "ఫిల్టర్లో {{count}} చదవనివి",
+ "unreadInFilter_one": "ఫిల్టర్లో {{count}} చదవనిది",
+ "unreadInFilter_few": "ఫిల్టర్లో {{count}} చదవనివి",
+ "unreadInFilter_many": "ఫిల్టర్లో {{count}} చదవనివి",
+ "unreadInFilter_other": "ఫిల్టర్లో {{count}} చదవనివి",
+ "inFilter": "ఫిల్టర్లో {{count}}",
+ "inFilter_one": "ఫిల్టర్లో {{count}}",
+ "inFilter_few": "ఫిల్టర్లో {{count}}",
+ "inFilter_many": "ఫిల్టర్లో {{count}}",
+ "inFilter_other": "ఫిల్టర్లో {{count}}",
+ "unread": "{{count}} చదవనివి",
+ "unread_one": "{{count}} చదవనిది",
+ "unread_few": "{{count}} చదవనివి",
+ "unread_many": "{{count}} చదవనివి",
+ "unread_other": "{{count}} చదవనివి",
+ "total": "మొత్తం {{count}}",
+ "total_one": "మొత్తం {{count}}",
+ "total_few": "మొత్తం {{count}}",
+ "total_many": "మొత్తం {{count}}",
+ "total_other": "మొత్తం {{count}}"
+ },
+ "filters": {
+ "other": "ఇతర"
+ },
+ "empty": {
+ "noMatching": "సరిపోలే నోటిఫికేషన్లు లేవు",
+ "noNotifications": "నోటిఫికేషన్లు లేవు",
+ "tryDifferentFilter": "వేరే ఫిల్టర్ను ప్రయత్నించండి",
+ "allCaughtUp": "మీరు అన్నీ చూసేసారు!"
+ }
+ },
+ "updates": {
+ "restartToUpdate": "అప్డేట్ చేయడానికి పునఃప్రారంభించు",
+ "updateApp": "యాప్ను అప్డేట్ చేయి",
+ "downloadedRestartTooltip": "అప్డేట్ డౌన్లోడ్ అయింది, వర్తింపజేయడానికి పునఃప్రారంభించండి",
+ "newVersionAvailable": "కొత్త వెర్షన్ అందుబాటులో ఉంది",
+ "updatingApp": "యాప్ను అప్డేట్ చేస్తోంది",
+ "updateReady": "అప్డేట్ సిద్ధం",
+ "restartNow": "ఇప్పుడే పునఃప్రారంభించు"
+ },
+ "layout": {
+ "github": "GitHub",
+ "discord": "Discord",
+ "expandSidebar": "సైడ్బార్ను విస్తరించు",
+ "collapseSidebarShortcut": "సైడ్బార్ను కుదించు ({{shortcut}})",
+ "sidebarView": "సైడ్బార్ వీక్షణ",
+ "resizeSidebar": "సైడ్బార్ పరిమాణాన్ని మార్చు",
+ "closeTab": "ట్యాబ్ మూసివేయి",
+ "openedFromSearch": "శోధన నుండి తెరవబడింది",
+ "pinnedSession": "పిన్ చేసిన సెషన్",
+ "jumpToSection": "విభాగానికి వెళ్లండి",
+ "newTab": "కొత్త ట్యాబ్",
+ "newTabDashboard": "కొత్త ట్యాబ్ (డాష్బోర్డ్)",
+ "refreshSession": "సెషన్ను రిఫ్రెష్ చేయి",
+ "refreshSessionWithShortcut": "సెషన్ను రిఫ్రెష్ చేయి ({{shortcut}})",
+ "loadingTab": "ట్యాబ్ను లోడ్ చేస్తోంది",
+ "menu": {
+ "teams": "టీమ్లు",
+ "settings": "సెట్టింగ్లు",
+ "extensions": "ఎక్స్టెన్షన్లు",
+ "search": "శోధన",
+ "schedules": "షెడ్యూల్లు",
+ "docs": "డాక్స్",
+ "exportMarkdown": "Markdown గా ఎగుమతి చేయి",
+ "exportJson": "JSON గా ఎగుమతి చేయి",
+ "exportPlainText": "సాదా టెక్స్ట్గా ఎగుమతి చేయి",
+ "analyzeSession": "సెషన్ను విశ్లేషించు"
+ },
+ "tabMenu": {
+ "closeTabs": "{{count}} ట్యాబ్లను మూసివేయి",
+ "closeTabs_one": "{{count}} ట్యాబ్ను మూసివేయి",
+ "closeTabs_few": "{{count}} ట్యాబ్లను మూసివేయి",
+ "closeTabs_many": "{{count}} ట్యాబ్లను మూసివేయి",
+ "closeTabs_other": "{{count}} ట్యాబ్లను మూసివేయి",
+ "closeTab": "ట్యాబ్ మూసివేయి",
+ "closeOtherTabs": "ఇతర ట్యాబ్లను మూసివేయి",
+ "splitRight": "కుడివైపు విభజించు",
+ "splitLeft": "ఎడమవైపు విభజించు",
+ "pinToSidebar": "సైడ్బార్కు పిన్ చేయి",
+ "unpinFromSidebar": "సైడ్బార్ నుండి అన్పిన్ చేయి",
+ "hideFromSidebar": "సైడ్బార్ నుండి దాచు",
+ "unhideFromSidebar": "సైడ్బార్లో మళ్లీ చూపించు",
+ "closeAllTabs": "అన్ని ట్యాబ్లను మూసివేయి"
+ },
+ "sections": {
+ "team": "టీమ్",
+ "sessions": "సెషన్లు",
+ "kanban": "Kanban",
+ "claudeLogs": "లాగ్లు",
+ "messages": "సందేశాలు"
+ }
+ },
+ "editorFormatting": {
+ "bold": "బోల్డ్",
+ "italic": "ఇటాలిక్",
+ "strike": "స్ట్రైక్",
+ "code": "కోడ్"
+ },
+ "diff": {
+ "changed": "మార్చబడింది",
+ "noChangesDetected": "మార్పులు ఏవీ గుర్తించబడలేదు"
+ },
+ "codexLogin": {
+ "copyLoginLinkAndCode": "ChatGPT లాగిన్ లింక్ మరియు కోడ్ను కాపీ చేయి",
+ "copyLoginLink": "ChatGPT లాగిన్ లింక్ను కాపీ చేయి",
+ "copyFailed": "కాపీ విఫలమైంది",
+ "copyLinkAndCode": "లింక్ + కోడ్ కాపీ చేయి",
+ "copyLink": "లింక్ కాపీ చేయి",
+ "enterCodeOnLoginPage": "ఈ కోడ్ను ChatGPT లాగిన్ పేజీలో నమోదు చేయండి"
+ },
+ "window": {
+ "minimize": "కనిష్టీకరించు",
+ "maximize": "గరిష్టీకరించు",
+ "restore": "పునరుద్ధరించు"
+ },
+ "context": {
+ "local": "స్థానిక",
+ "switchingTo": "{{workspace}} కు మారుతోంది",
+ "loadingWorkspace": "వర్క్స్పేస్ను లోడ్ చేస్తోంది",
+ "switchWorkspace": "వర్క్స్పేస్ మార్చు"
+ },
+ "repositories": {
+ "noneAvailable": "రిపోజిటరీలు అందుబాటులో లేవు",
+ "remove": "రిపోజిటరీని తీసివేయి"
+ },
+ "export": {
+ "session": "సెషన్ను ఎగుమతి చేయి",
+ "sessionTitle": "సెషన్ను ఎగుమతి చేయి"
+ },
+ "brand": {
+ "claude": "Claude"
+ },
+ "sessionReport": {
+ "noSessionData": "సెషన్ డేటా అందుబాటులో లేదు",
+ "title": "సెషన్ నివేదిక"
+ },
+ "sessionFilters": {
+ "project": {
+ "selectProject": "ప్రాజెక్ట్ను ఎంచుకోండి"
+ }
+ },
+ "tasks": {
+ "date": {
+ "updatedPrefix": "నవీ",
+ "updatedYesterday": "నిన్న నవీకరించబడింది",
+ "yesterday": "నిన్న"
+ },
+ "reviewState": {
+ "needsFix": "సరిదిద్దాలి"
+ },
+ "unassigned": "కేటాయించబడలేదు"
+ }
+}
diff --git a/src/features/localization/renderer/locales/te/dashboard.json b/src/features/localization/renderer/locales/te/dashboard.json
new file mode 100644
index 00000000..0f54a5cb
--- /dev/null
+++ b/src/features/localization/renderer/locales/te/dashboard.json
@@ -0,0 +1,197 @@
+{
+ "cliStatus": {
+ "actions": {
+ "alreadyLoggedIn": "ఇప్పటికే లాగిన్ అయ్యారా?",
+ "becomeSponsor": "స్పాన్సర్ అవ్వండి",
+ "cancel": "రద్దు చేయి",
+ "checkNow": "ఇప్పుడు తనిఖీ చేయి",
+ "checkUpdates": "అప్డేట్ల కోసం తనిఖీ చేయి",
+ "checking": "తనిఖీ చేస్తోంది...",
+ "connect": "కనెక్ట్ చేయి",
+ "extensions": "ఎక్స్టెన్షన్లు",
+ "login": "లాగిన్",
+ "manage": "నిర్వహించు",
+ "manageProviders": "ప్రొవైడర్లను నిర్వహించు",
+ "plan": "ప్లాన్",
+ "recheck": "మళ్లీ తనిఖీ చేయి",
+ "recheckProvider": "{{provider}} ను మళ్లీ తనిఖీ చేయి",
+ "retry": "మళ్లీ ప్రయత్నించు",
+ "updateTo": "v{{version}} కు అప్డేట్ చేయి",
+ "useCode": "కోడ్ ఉపయోగించు"
+ },
+ "atlas": {
+ "alt": "Atlas Cloud",
+ "description": "Atlas Cloud అనేది ఫుల్-మోడల్ AI ఇన్ఫరెన్స్ ప్లాట్ఫారమ్, ఇది వీడియో జనరేషన్, ఇమేజ్ జనరేషన్ మరియు LLM API లను యాక్సెస్ చేయడానికి డెవలపర్లకు ఒకే AI API ను అందిస్తుంది. బహుళ వెండర్ ఇంటిగ్రేషన్లను నిర్వహించడానికి బదులుగా, మీరు ఒకసారి కనెక్ట్ చేసి అన్ని మోడాలిటీల్లో 300+ క్యూరేటెడ్ మోడల్లకు ఏకీకృత యాక్సెస్ పొందుతారు. మరింత బడ్జెట్-అనుకూల API యాక్సెస్ కోసం Atlas Cloud యొక్క కొత్త కోడింగ్ ప్లాన్ ప్రమోషన్ను చూడండి.",
+ "openCodeProvider": "OpenCode ప్రొవైడర్",
+ "plan": "Atlas Cloud కోడింగ్ ప్లాన్",
+ "sponsor": "స్పాన్సర్"
+ },
+ "errors": {
+ "checkStatusFailed": "CLI స్థితిని తనిఖీ చేయడం విఫలమైంది",
+ "installationFailed": "ఇన్స్టాలేషన్ విఫలమైంది",
+ "refreshFailed": "అప్డేట్ల కోసం తనిఖీ చేయడం విఫలమైంది. మీ నెట్వర్క్ కనెక్షన్ను తనిఖీ చేసి మళ్లీ ప్రయత్నించండి.",
+ "runtimeUpdatedRefreshFailed": "రన్టైమ్ అప్డేట్ అయ్యింది, కానీ ప్రొవైడర్ స్థితిని రిఫ్రెష్ చేయడం విఫలమైంది."
+ },
+ "hints": {
+ "backgroundStatus": "{{runtime}} స్థితి బ్యాక్గ్రౌండ్లో తనిఖీ చేయబడుతుంది.",
+ "codexApiKeyFallback": "{{hint}} మీరు auth మోడ్ను మార్చితే API కీ ఫాల్బ్యాక్ అందుబాటులో ఉంటుంది.",
+ "codexAutoApiKey": "{{hint}} ChatGPT కనెక్ట్ అయ్యే వరకు Auto API కీని ఉపయోగిస్తూనే ఉంటుంది.",
+ "codexFinishLogin": "బ్రౌజర్లో ChatGPT లాగిన్ను పూర్తి చేయండి. ప్రాంప్ట్ చేయబడితే చూపిన కోడ్ను నమోదు చేయండి.",
+ "codexNoActiveLogin": "Codex CLI క్రియాశీల ChatGPT ఖాతాను చూసిన తర్వాతే వినియోగ పరిమితులు కనిపిస్తాయి. ప్రస్తుతం క్రియాశీల ChatGPT లాగిన్ లేదని ఇది నివేదిస్తోంది.",
+ "codexNoActiveManagedSession": "Codex CLI క్రియాశీల ChatGPT ఖాతాను చూసిన తర్వాతే వినియోగ పరిమితులు కనిపిస్తాయి. స్థానిక Codex ఖాతా డేటా ఉంది, కానీ ప్రస్తుతం క్రియాశీల మేనేజ్డ్ సెషన్ ఏదీ ఎంపిక చేయబడలేదు.",
+ "codexReconnectNeeded": "ప్రస్తుతం ఎంచుకున్న ChatGPT సెషన్ను Codex రిఫ్రెష్ చేసిన తర్వాతే వినియోగ పరిమితులు కనిపిస్తాయి. ప్రస్తుతం స్థానిక సెషన్కు మళ్లీ కనెక్ట్ చేయాల్సి ఉంది.",
+ "firstCheckSlow": "మొదటి తనిఖీకి 30 సెకన్ల వరకు పట్టవచ్చు",
+ "loginRequiredForTeams": "సెషన్లు మరియు ప్రాజెక్ట్లను బ్రౌజ్ చేయడం లాగిన్ లేకుండా పనిచేస్తుంది. ఏజెంట్ టీమ్లను అమలు చేయడానికి మాత్రమే లాగిన్ అవసరం.",
+ "troubleshootTitle": "మీరు లాగిన్ అయ్యారని ఖచ్చితంగా ఉంటే, ఈ దశలను ప్రయత్నించండి:"
+ },
+ "installer": {
+ "checkingLatest": "తాజా వెర్షన్ను తనిఖీ చేస్తోంది...",
+ "downloading": "{{runtime}} ను డౌన్లోడ్ చేస్తోంది...",
+ "installing": "{{runtime}} ను ఇన్స్టాల్ చేస్తోంది...",
+ "success": "{{runtime}} v{{version}} విజయవంతంగా ఇన్స్టాల్ చేయబడింది",
+ "verifying": "చెక్సమ్ను ధృవీకరిస్తోంది..."
+ },
+ "labels": {
+ "apiKeyRequired": "API కీ అవసరం",
+ "comingSoon": "త్వరలో వస్తోంది",
+ "collapseProviderDetails": "ప్రొవైడర్ వివరాలను కుదించు",
+ "expandProviderDetails": "ప్రొవైడర్ వివరాలను విస్తరించు",
+ "generateLink": "లింక్ జనరేట్ చేయి",
+ "loadingRateLimits": "రేట్ పరిమితులు లోడ్ అవుతున్నాయి",
+ "loggedOut": "ప్రొవైడర్ లాగ్ అవుట్ అయింది",
+ "loginAuthFailed": "ప్రామాణీకరణ విఫలమైంది",
+ "loginAuthUpdated": "ప్రామాణీకరణ అప్డేట్ అయింది",
+ "loginComplete": "లాగిన్ పూర్తయింది",
+ "loginFailed": "లాగిన్ విఫలమైంది",
+ "loginTitle": "లాగిన్",
+ "logoutFailed": "లాగ్ అవుట్ విఫలమైంది",
+ "logoutTitle": "లాగ్ అవుట్",
+ "notLoggedIn": "లాగిన్ కాలేదు",
+ "openLogin": "లాగిన్ తెరువు",
+ "providerActionRequired": "ప్రొవైడర్ చర్య అవసరం",
+ "resets": "{{time}} కు రీసెట్ అవుతుంది",
+ "runtimeLoginTitle": "{{runtime}} లాగిన్"
+ },
+ "loading": {
+ "aiProviders": "AI ప్రొవైడర్లను తనిఖీ చేస్తోంది...",
+ "claudeCli": "Claude CLI ను తనిఖీ చేస్తోంది..."
+ },
+ "provider": {
+ "authenticated": "ప్రామాణీకరించబడింది",
+ "backend": "బ్యాకెండ్: {{backend}}",
+ "checkingAuthentication": "ప్రామాణీకరణను తనిఖీ చేస్తోంది...",
+ "checkingProviders": "ప్రొవైడర్లను తనిఖీ చేస్తోంది...",
+ "configuredLocalCount": "{{count}} స్థానికంగా కాన్ఫిగర్ చేయబడింది",
+ "configuredLocalCount_few": "{{count}} స్థానికంగా కాన్ఫిగర్ చేయబడింది",
+ "configuredLocalCount_many": "{{count}} స్థానికంగా కాన్ఫిగర్ చేయబడింది",
+ "configuredLocalCount_one": "{{count}} స్థానికంగా కాన్ఫిగర్ చేయబడింది",
+ "configuredLocalCount_other": "{{count}} స్థానికంగా కాన్ఫిగర్ చేయబడింది",
+ "configuredLocalTitle": "మీ OpenCode కాన్ఫిగ్ నుండి దిగుమతి చేయబడిన స్థానిక OpenCode మార్గాలు.",
+ "connectedCount": "ప్రొవైడర్లు: {{connected}}/{{denominator}} కనెక్ట్ చేయబడ్డాయి",
+ "freeModels": "ఉచిత మోడల్లు",
+ "freeModelsTitle": "మీ సెటప్లో అందుబాటులో ఉన్నప్పుడు OpenCode Big Pickle వంటి ఉచిత మోడల్ ఎంపికలను కలిగి ఉంటుంది. OpenCode ద్వారా OpenRouter కూడా ఉచిత మోడల్లను బహిర్గతం చేయవచ్చు, కానీ ప్రతి OpenCode/OpenRouter మోడల్ ఉచితం కాదు. లభ్యత మరియు పరిమితులు మారవచ్చు.",
+ "loadingModels": "మోడల్లను లోడ్ చేస్తోంది...",
+ "modelsUnavailable": "ఈ రన్టైమ్ బిల్డ్ కోసం మోడల్లు అందుబాటులో లేవు",
+ "runtime": "రన్టైమ్: {{runtime}}",
+ "verifiedCount": "{{count}} ధృవీకరించబడింది",
+ "verifiedCount_few": "{{count}} ధృవీకరించబడింది",
+ "verifiedCount_many": "{{count}} ధృవీకరించబడింది",
+ "verifiedCount_one": "{{count}} ధృవీకరించబడింది",
+ "verifiedCount_other": "{{count}} ధృవీకరించబడింది",
+ "verifiedTitle": "విజయవంతమైన అమలు రుజువుతో కూడిన OpenCode మార్గాలు."
+ },
+ "runtime": {
+ "configuredHealthCheckFailed": "కాన్ఫిగర్ చేయబడిన {{runtime}} దాని స్టార్టప్ హెల్త్ చెక్లో విఫలమైంది.",
+ "configuredNotFound": "కాన్ఫిగర్ చేయబడిన {{runtime}} కనుగొనబడలేదు.",
+ "foundButFailed": "{{runtime}} కనుగొనబడింది కానీ ప్రారంభించడంలో విఫలమైంది",
+ "healthCheckFailedDescription": "యాప్ కాన్ఫిగర్ చేయబడిన {{runtime}} ను కనుగొంది, కానీ దాని స్టార్టప్ హెల్త్ చెక్ విఫలమైంది. దాన్ని రిపేర్ చేయండి లేదా మళ్లీ ఇన్స్టాల్ చేయండి, ఆపై మళ్లీ ప్రయత్నించండి.",
+ "install": "{{runtime}} ను ఇన్స్టాల్ చేయి",
+ "installRequiredDescription": "టీమ్ ప్రొవిజనింగ్ మరియు సెషన్ నిర్వహణ కోసం {{runtime}} అవసరం. ప్రారంభించడానికి దాన్ని ఇన్స్టాల్ చేయండి.",
+ "isRequired": "{{runtime}} అవసరం",
+ "reinstall": "{{runtime}} ను మళ్లీ ఇన్స్టాల్ చేయి"
+ },
+ "runtimeInstall": {
+ "checking": "తనిఖీ చేస్తోంది",
+ "codexTitle": "యాప్ డేటాలోకి Codex CLI ను ఇన్స్టాల్ చేయి",
+ "downloading": "డౌన్లోడ్ చేస్తోంది",
+ "downloadingPercent": "డౌన్లోడ్ చేస్తోంది {{percent}}%",
+ "install": "ఇన్స్టాల్ చేయి",
+ "installing": "ఇన్స్టాల్ చేస్తోంది",
+ "openCodeTitle": "యాప్ డేటాలోకి OpenCode రన్టైమ్ను ఇన్స్టాల్ చేయి",
+ "retryInstall": "ఇన్స్టాల్ మళ్లీ ప్రయత్నించు"
+ },
+ "troubleshoot": {
+ "again": "మళ్లీ",
+ "authStatusCommand": "మీరు కాన్ఫిగర్ చేసిన CLI auth status కమాండ్",
+ "checkLoggedIn": "- ఇది \"Logged in\" చూపిస్తుందో లేదో తనిఖీ చేయండి",
+ "click": "క్లిక్ చేయండి",
+ "loginCommand": "రన్టైమ్ లాగిన్ కమాండ్",
+ "logoutCommand": "రన్టైమ్ లాగ్ అవుట్ కమాండ్",
+ "openTerminal": "మీ టెర్మినల్ తెరిచి అమలు చేయండి:",
+ "reloginPrefix": "ఇది లాగిన్ అయిందని చెప్పినా యాప్ దాన్ని చూడకపోతే, ప్రయత్నించండి:",
+ "sameRuntime": "మీ టెర్మినల్లోని CLI యాప్ ఉపయోగించే అదే రన్టైమ్ అని నిర్ధారించుకోండి",
+ "statusCacheHint": "- కొన్నిసార్లు స్థితి కొన్ని సెకన్ల పాటు క్యాష్ చేయబడుతుంది",
+ "then": "ఆపై"
+ },
+ "warnings": {
+ "multipleApiKeysMissing": "ఒకటి లేదా అంతకంటే ఎక్కువ ప్రొవైడర్లు API కీ మోడ్కు సెట్ చేయబడ్డాయి, కానీ ఏ API కీ కాన్ఫిగర్ చేయబడలేదు. కీలను జోడించడానికి లేదా కనెక్షన్ మోడ్ను మార్చడానికి Manage Providers తెరవండి.",
+ "multipleApiKeysNeedAttention": "ఒకటి లేదా అంతకంటే ఎక్కువ ప్రొవైడర్లు API కీ మోడ్కు సెట్ చేయబడ్డాయి మరియు శ్రద్ధ అవసరం. సేవ్ చేసిన కీలను సమీక్షించడానికి లేదా కనెక్షన్ మోడ్ను మార్చడానికి Manage Providers తెరవండి.",
+ "notAuthenticated": "{{runtime}} ఇన్స్టాల్ చేయబడింది కానీ మీరు ప్రామాణీకరించబడలేదు. టీమ్ ప్రొవిజనింగ్ మరియు AI ఫీచర్ల కోసం లాగిన్ అవసరం.",
+ "singleApiKeyMissing": "{{provider}} API కీ మోడ్కు సెట్ చేయబడింది, కానీ ఏ API కీ కాన్ఫిగర్ చేయబడలేదు. కీని జోడించడానికి లేదా కనెక్షన్ మోడ్ను మార్చడానికి Manage Providers తెరవండి.",
+ "singleApiKeyNeedsAttention": "{{provider}} API కీ మోడ్కు సెట్ చేయబడింది, కానీ అది కనెక్ట్ కాలేదు. సేవ్ చేసిన కీని సమీక్షించడానికి లేదా కనెక్షన్ మోడ్ను మార్చడానికి Manage Providers తెరవండి."
+ }
+ },
+ "recentProjects": {
+ "selectFolderTitle": "ప్రాజెక్ట్ ఫోల్డర్ను ఎంచుకోండి",
+ "selectFolder": "ఫోల్డర్ను ఎంచుకోండి",
+ "failedToLoad": "ప్రాజెక్ట్లను లోడ్ చేయడం విఫలమైంది",
+ "retry": "మళ్లీ ప్రయత్నించు",
+ "noProjects": "ప్రాజెక్ట్లు కనుగొనబడలేదు",
+ "noMatches": "\"{{query}}\" కోసం సరిపోలికలు లేవు",
+ "noRecentProjects": "ఇటీవలి ప్రాజెక్ట్లు కనుగొనబడలేదు",
+ "emptyDescription": "ఇటీవలి Claude మరియు Codex కార్యకలాపం ఇక్కడ కనిపిస్తుంది.",
+ "loadMore": "మరింత లోడ్ చేయి",
+ "card": {
+ "deleted": "తొలగించబడింది",
+ "projectFolderMissing": "ప్రాజెక్ట్ ఫోల్డర్ ఇకపై ఉనికిలో లేదు",
+ "taskCounts": {
+ "active": "{{count}} క్రియాశీలం",
+ "active_one": "{{count}} క్రియాశీలం",
+ "active_other": "{{count}} క్రియాశీలం",
+ "active_few": "{{count}} క్రియాశీలం",
+ "active_many": "{{count}} క్రియాశీలం",
+ "pending": "{{count}} పెండింగ్",
+ "pending_one": "{{count}} పెండింగ్",
+ "pending_other": "{{count}} పెండింగ్",
+ "pending_few": "{{count}} పెండింగ్",
+ "pending_many": "{{count}} పెండింగ్",
+ "done": "{{count}} పూర్తయింది",
+ "done_one": "{{count}} పూర్తయింది",
+ "done_other": "{{count}} పూర్తయింది",
+ "done_few": "{{count}} పూర్తయింది",
+ "done_many": "{{count}} పూర్తయింది"
+ }
+ },
+ "title": "ఇటీవలి ప్రాజెక్ట్లు",
+ "searchResults": "శోధన ఫలితాలు",
+ "searchPlaceholder": "ప్రాజెక్ట్లను శోధించండి..."
+ },
+ "actions": {
+ "selectTeam": "టీమ్ను ఎంచుకోండి",
+ "or": "లేదా",
+ "clearSearch": "శోధనను క్లియర్ చేయి"
+ },
+ "windowsAdmin": {
+ "title": "Windows అడ్మినిస్ట్రేటర్ మోడ్ సిఫార్సు చేయబడింది",
+ "description": "Agent Teams AI ఎలివేట్ చేయబడనప్పుడు OpenCode రన్టైమ్ తనిఖీలు టైమ్ అవుట్ కావచ్చు. OpenCode టీమ్లను లాంచ్ చేయడానికి ముందు Run as administrator తో యాప్ను పునఃప్రారంభించండి."
+ },
+ "webPreview": {
+ "title": "పూర్తి కార్యాచరణ కోసం డెస్క్టాప్ యాప్ను తెరవండి",
+ "description": "బ్రౌజర్ వెర్షన్ ఇంకా అభివృద్ధిలో ఉంది. ఇక్కడ ప్రాజెక్ట్ చర్యలు, ఇంటిగ్రేషన్లు మరియు లైవ్ స్థితి అప్డేట్లు పరిమితం కావచ్చు. అన్ని ఫీచర్లను నమ్మదగినంగా యాక్సెస్ చేయడానికి డెస్క్టాప్ యాప్ను ఉపయోగించండి."
+ },
+ "updateBanner": {
+ "newVersionAvailable": "కొత్త వెర్షన్ అందుబాటులో ఉంది",
+ "restartNow": "ఇప్పుడే పునఃప్రారంభించు",
+ "viewDetails": "వివరాలను చూడండి"
+ }
+}
diff --git a/src/features/localization/renderer/locales/te/errors.json b/src/features/localization/renderer/locales/te/errors.json
new file mode 100644
index 00000000..651b47c4
--- /dev/null
+++ b/src/features/localization/renderer/locales/te/errors.json
@@ -0,0 +1,3 @@
+{
+ "fallback": "ఏదో తప్పు జరిగింది."
+}
diff --git a/src/features/localization/renderer/locales/te/extensions.json b/src/features/localization/renderer/locales/te/extensions.json
new file mode 100644
index 00000000..e250ccda
--- /dev/null
+++ b/src/features/localization/renderer/locales/te/extensions.json
@@ -0,0 +1,688 @@
+{
+ "store": {
+ "actions": {
+ "addCustom": "కస్టమ్ జోడించు",
+ "openDashboard": "డాష్బోర్డ్ తెరువు",
+ "refreshCatalog": "క్యాటలాగ్ను రిఫ్రెష్ చేయి"
+ },
+ "capabilities": {
+ "mcp": "MCP: {{status}}",
+ "plugins": "ప్లగిన్లు: {{status}}",
+ "skills": "నైపుణ్యాలు: {{status}}"
+ },
+ "desktopOnly": "డెస్క్టాప్ యాప్లో మాత్రమే అందుబాటులో ఉంది.",
+ "provider": {
+ "checkingStatus": "ప్రొవైడర్ స్థితిని తనిఖీ చేస్తోంది...",
+ "connected": "కనెక్ట్ చేయబడింది",
+ "loading": "లోడ్ అవుతోంది...",
+ "needsSetup": "సెటప్ అవసరం",
+ "readyToConfigure": "కాన్ఫిగర్ చేయడానికి సిద్ధం",
+ "unsupported": "మద్దతు లేదు"
+ },
+ "runtime": {
+ "checkingAvailabilityDescription": "ప్లగిన్లు, MCP సర్వర్లు, నైపుణ్యాలు మరియు ప్రొవైడర్ కనెక్షన్లను నిర్వహించడానికి ఎక్స్టెన్షన్లకు కాన్ఫిగర్ చేసిన రన్టైమ్ అవసరం.",
+ "checkingAvailabilityTitle": "ఎక్స్టెన్షన్ల రన్టైమ్ లభ్యతను తనిఖీ చేస్తోంది",
+ "failedToStartDescription": "రన్టైమ్ దాని స్టార్టప్ హెల్త్ చెక్లో ఉత్తీర్ణమయ్యే వరకు ఎక్స్టెన్షన్లు నిలిపివేయబడతాయి. దాన్ని రిపేర్ చేయడానికి లేదా మళ్లీ ఇన్స్టాల్ చేయడానికి డాష్బోర్డ్ను తెరవండి.",
+ "failedToStartTitle": "కాన్ఫిగర్ చేసిన రన్టైమ్ కనుగొనబడింది కానీ ప్రారంభించడంలో విఫలమైంది",
+ "multimodelCapabilitiesDescription": "ప్రొవైడర్ మద్దతు విభాగాన్ని బట్టి భిన్నంగా ఉండవచ్చు. రన్టైమ్ స్పష్టంగా మద్దతును ప్రకటించిన చోట మాత్రమే ప్లగిన్లు చూపబడతాయి.",
+ "multimodelCapabilitiesTitle": "మల్టీమోడల్ రన్టైమ్ సామర్థ్యాలు",
+ "needsSignInDescription": "{{runtime}} కనుగొనబడింది{{version}}, కానీ మీరు డాష్బోర్డ్ నుండి సైన్ ఇన్ చేసే వరకు ప్లగిన్ ఇన్స్టాల్లు నిలిపివేయబడతాయి.",
+ "needsSignInTitle": "{{runtime}} కు సైన్-ఇన్ అవసరం",
+ "notAvailableDescription": "రన్టైమ్ ఇన్స్టాల్ అయ్యే వరకు ఎక్స్టెన్షన్లు నిలిపివేయబడతాయి. దాన్ని ఇన్స్టాల్ చేయడానికి డాష్బోర్డ్ను తెరిచి మళ్లీ ప్రయత్నించండి.",
+ "notAvailableTitle": "కాన్ఫిగర్ చేసిన రన్టైమ్ అందుబాటులో లేదు",
+ "readyDescription": "ఈ పేజీ నుండి ప్లగిన్లను ఇన్స్టాల్ చేయవచ్చు{{versionSuffix}}.",
+ "readyTitle": "{{runtime}} సిద్ధం",
+ "requiredForMutations": "ఎక్స్టెన్షన్లను ఇన్స్టాల్ చేయడానికి లేదా అన్ఇన్స్టాల్ చేయడానికి కాన్ఫిగర్ చేసిన రన్టైమ్ అవసరం. డాష్బోర్డ్ నుండి దాన్ని ఇన్స్టాల్ చేయండి లేదా రిపేర్ చేయండి."
+ },
+ "sessionsRestartWarning": "రన్ అవుతున్న సెషన్లు పునఃప్రారంభించే వరకు ఎక్స్టెన్షన్ మార్పులను తీసుకోవు.",
+ "tabs": {
+ "apiKeys": {
+ "description": "ఆన్లైన్ సేవల కోసం రహస్య కీలు. ప్లగిన్లు, సర్వర్లు మరియు ఇంటిగ్రేషన్లు కనెక్ట్ అయి పనిచేయడానికి వాటిని ఇక్కడ జోడించండి.",
+ "label": "API కీలు"
+ },
+ "mcpServers": {
+ "description": "బాహ్య టూల్స్ మరియు యాప్లకు కనెక్షన్లు. ఈ యాప్కు మించి డేటాను చదవడానికి లేదా చర్యలు చేయడానికి అవి రన్టైమ్ను అనుమతిస్తాయి.",
+ "label": "MCP సర్వర్లు"
+ },
+ "plugins": {
+ "description": "రన్టైమ్ కోసం చిన్న యాడ్-ఆన్లు. మల్టీమోడల్ మోడ్లో ఇవి ప్రస్తుతం మద్దతు ఉన్నప్పుడు Anthropic సెషన్లకు వర్తిస్తాయి. విస్తృత ప్రొవైడర్ మద్దతు అభివృద్ధిలో ఉంది.",
+ "label": "ప్లగిన్లు"
+ },
+ "skills": {
+ "description": "సాధారణ పనుల కోసం సిద్ధంగా ఉన్న సూచనలు. పునరావృత టాస్క్లను మరింత స్థిరంగా నిర్వహించడంలో అవి రన్టైమ్కు సహాయపడతాయి.",
+ "label": "నైపుణ్యాలు"
+ }
+ },
+ "title": "ఎక్స్టెన్షన్లు"
+ },
+ "pluginsPanel": {
+ "activeFilters": "{{count}} క్రియాశీలం",
+ "browseByFit": "సరిపోలిక ప్రకారం బ్రౌజ్ చేయి",
+ "capabilities": "సామర్థ్యాలు",
+ "categories": "వర్గాలు",
+ "clearAllFilters": "అన్ని ఫిల్టర్లను క్లియర్ చేయి",
+ "clearFilters": "ఫిల్టర్లను క్లియర్ చేయి",
+ "counts": {
+ "capabilities": "{{count}} సామర్థ్యాలు",
+ "categories": "{{count}} వర్గాలు",
+ "plugins": "{{count}} ప్లగిన్లు",
+ "capabilities_few": "{{count}} సామర్థ్యాలు",
+ "capabilities_many": "{{count}} సామర్థ్యాలు",
+ "capabilities_one": "{{count}} సామర్థ్యం",
+ "capabilities_other": "{{count}} సామర్థ్యాలు",
+ "categories_few": "{{count}} వర్గాలు",
+ "categories_many": "{{count}} వర్గాలు",
+ "categories_one": "{{count}} వర్గం",
+ "categories_other": "{{count}} వర్గాలు",
+ "plugins_few": "{{count}} ప్లగిన్లు",
+ "plugins_many": "{{count}} ప్లగిన్లు",
+ "plugins_one": "{{count}} ప్లగిన్",
+ "plugins_other": "{{count}} ప్లగిన్లు"
+ },
+ "empty": {
+ "description": "కొత్త ప్లగిన్ల కోసం తర్వాత తనిఖీ చేయండి",
+ "filteredDescription": "మీ శోధన లేదా ఫిల్టర్ ప్రమాణాలను సర్దుబాటు చేయడానికి ప్రయత్నించండి",
+ "filteredTitle": "మీ ఫిల్టర్లకు ఏ ప్లగిన్లు సరిపోలడం లేదు",
+ "title": "ప్లగిన్లు అందుబాటులో లేవు"
+ },
+ "filterDescription": "వర్గం, సామర్థ్యం లేదా ఇన్స్టాల్ చేసిన స్థితి ప్రకారం క్యాటలాగ్ను తగ్గించండి.",
+ "installedOnly": "ఇన్స్టాల్ చేసినవి మాత్రమే",
+ "providerSupportNotice": "ప్లగిన్ మద్దతు ప్రస్తుతం Anthropic (Claude) సెషన్లకు మాత్రమే హామీ ఇవ్వబడింది. అన్ని ఏజెంట్లలో ప్లగిన్లకు మద్దతు ఇవ్వడానికి మేము పని చేస్తున్నాము.",
+ "resultsUpdateInstantly": "మీరు ఫిల్టర్లను మెరుగుపరిచేకొద్దీ ఫలితాలు తక్షణం అప్డేట్ అవుతాయి.",
+ "searchPlaceholder": "ప్లగిన్లను శోధించండి...",
+ "selectedCount": "{{count}} ఎంచుకోబడ్డాయి",
+ "showing": "{{total}} ప్లగిన్లలో {{shown}} చూపిస్తోంది",
+ "sort": {
+ "category": "వర్గం",
+ "nameAsc": "పేరు A-Z",
+ "nameDesc": "పేరు Z-A",
+ "popular": "ప్రజాదరణ"
+ },
+ "activeFilters_few": "{{count}} క్రియాశీలం",
+ "activeFilters_many": "{{count}} క్రియాశీలం",
+ "activeFilters_one": "{{count}} క్రియాశీలం",
+ "activeFilters_other": "{{count}} క్రియాశీలం",
+ "selectedCount_few": "{{count}} ఎంచుకోబడ్డాయి",
+ "selectedCount_many": "{{count}} ఎంచుకోబడ్డాయి",
+ "selectedCount_one": "{{count}} ఎంచుకోబడింది",
+ "selectedCount_other": "{{count}} ఎంచుకోబడ్డాయి"
+ },
+ "customMcp": {
+ "actions": {
+ "add": "జోడించు",
+ "cancel": "రద్దు చేయి",
+ "install": "ఇన్స్టాల్ చేయి",
+ "installing": "ఇన్స్టాల్ చేస్తోంది..."
+ },
+ "description": "క్యాటలాగ్ లేకుండా సర్వర్ను మాన్యువల్గా జోడించండి.",
+ "errors": {
+ "installFailed": "ఇన్స్టాల్ విఫలమైంది",
+ "invalidServerName": "చెల్లని సర్వర్ పేరు. ఆల్ఫాన్యూమరిక్ అక్షరాలు, డ్యాష్లు, అండర్స్కోర్లు, చుక్కలను ఉపయోగించండి.",
+ "npmPackageRequired": "npm ప్యాకేజ్ పేరు అవసరం",
+ "serverNameRequired": "సర్వర్ పేరు అవసరం",
+ "serverUrlRequired": "సర్వర్ URL అవసరం"
+ },
+ "fields": {
+ "environmentVariables": "ఎన్విరాన్మెంట్ వేరియబుల్స్",
+ "headers": "హెడర్లు",
+ "npmPackage": "npm ప్యాకేజ్",
+ "scope": "స్కోప్",
+ "serverName": "సర్వర్ పేరు",
+ "serverUrl": "సర్వర్ URL",
+ "transport": "ట్రాన్స్పోర్ట్",
+ "transportType": "ట్రాన్స్పోర్ట్ రకం",
+ "versionOptional": "వెర్షన్ (ఐచ్ఛికం)"
+ },
+ "title": "కస్టమ్ MCP సర్వర్ను జోడించు",
+ "transport": {
+ "httpSse": "HTTP / SSE",
+ "stdio": "Stdio (npm)"
+ },
+ "placeholders": {
+ "headerName": "Header-Name",
+ "envVarName": "ENV_VAR_NAME",
+ "serverName": "my-server",
+ "latest": "latest",
+ "value": "value",
+ "serverUrl": "https://api.example.com/mcp"
+ }
+ },
+ "mcpDetail": {
+ "auth": {
+ "remoteMayNeedHeaders": "రిజిస్ట్రీ వాటిని వివరించకపోయినా రిమోట్ MCP సర్వర్లకు ఇంకా కస్టమ్ హెడర్లు లేదా API కీలు అవసరం కావచ్చు. ఇన్స్టాల్ తర్వాత కనెక్షన్ విఫలమైతే, ప్రొవైడర్ డాక్స్ను తనిఖీ చేయండి.",
+ "required": "ఈ సర్వర్కు ప్రామాణీకరణ అవసరం"
+ },
+ "diagnostics": {
+ "launchTarget": "లాంచ్ టార్గెట్"
+ },
+ "form": {
+ "autoFilled": "స్వయంచాలకంగా నింపబడింది",
+ "environmentVariables": "ఎన్విరాన్మెంట్ వేరియబుల్స్",
+ "headers": "హెడర్లు",
+ "scope": "స్కోప్",
+ "serverName": "సర్వర్ పేరు"
+ },
+ "install": {
+ "httpTransport": "HTTP: {{transport}}",
+ "manualSetupDescription": "ఈ సర్వర్కు మాన్యువల్ సెటప్ అవసరం. ఇన్స్టాలేషన్ సూచనల కోసం రిపోజిటరీని తనిఖీ చేయండి.",
+ "manualSetupRequired": "మాన్యువల్ సెటప్ అవసరం",
+ "npmPackage": "npm: {{package}}",
+ "manage": "ఇన్స్టాలేషన్ను నిర్వహించు",
+ "install": "సర్వర్ను ఇన్స్టాల్ చేయి"
+ },
+ "links": {
+ "glama": "Glama",
+ "repository": "రిపోజిటరీ",
+ "website": "వెబ్సైట్"
+ },
+ "metadata": {
+ "author": "రచయిత",
+ "githubStars": "GitHub Stars",
+ "hosting": "హోస్టింగ్",
+ "installType": "ఇన్స్టాల్ రకం",
+ "license": "లైసెన్స్",
+ "published": "ప్రచురించబడింది",
+ "source": "మూలం",
+ "updated": "అప్డేట్ చేయబడింది",
+ "version": "వెర్షన్"
+ },
+ "scope": {
+ "local": "స్థానిక",
+ "project": "ప్రాజెక్ట్"
+ },
+ "tools": {
+ "title": "టూల్స్ ({{count}})",
+ "title_few": "టూల్స్ ({{count}})",
+ "title_many": "టూల్స్ ({{count}})",
+ "title_one": "టూల్స్ ({{count}})",
+ "title_other": "టూల్స్ ({{count}})"
+ },
+ "placeholders": {
+ "serverName": "my-server"
+ }
+ },
+ "skillEditor": {
+ "actions": {
+ "cancel": "రద్దు చేయి",
+ "createSkill": "నైపుణ్యాన్ని సృష్టించు",
+ "preparing": "సిద్ధం చేస్తోంది...",
+ "reviewAndCreate": "సమీక్షించి సృష్టించు",
+ "reviewAndSave": "సమీక్షించి సేవ్ చేయి",
+ "saveSkill": "నైపుణ్యాన్ని సేవ్ చేయి"
+ },
+ "advanced": {
+ "customDescription": "ఈ నైపుణ్యం కస్టమ్ markdown ఫార్మాట్ను ఉపయోగిస్తుంది, కాబట్టి దాన్ని ఇక్కడ నేరుగా సవరించండి.",
+ "customTitle": "2. SKILL.md ఎడిటర్",
+ "description": "చాలా మంది దీన్ని దాటవేయవచ్చు. రా markdown ఫైల్పై మీకు ప్రత్యక్ష నియంత్రణ కావాలంటే మాత్రమే దీన్ని తెరవండి.",
+ "hide": "ఆధునిక ఎడిటర్ను దాచు",
+ "resetFromStructuredFields": "నిర్మాణాత్మక ఫీల్డ్ల నుండి రీసెట్ చేయి",
+ "show": "ఆధునిక ఎడిటర్ను చూపించు",
+ "title": "4. ఆధునిక SKILL.md ఎడిటర్"
+ },
+ "basics": {
+ "description": "ఈ నైపుణ్యానికి స్పష్టమైన పేరు ఇవ్వండి, ఎవరు ఉపయోగించగలరో ఎంచుకోండి మరియు అది ఎక్కడ ఉండాలో నిర్ణయించండి.",
+ "title": "1. ప్రాథమికాలు"
+ },
+ "description": {
+ "create": "వర్క్ఫ్లోను సాధారణ భాషలో వివరించండి, సృష్టించబడే ఫైల్లను సమీక్షించండి, ఆపై దాన్ని సేవ్ చేయండి.",
+ "edit": "ఈ నైపుణ్యాన్ని అప్డేట్ చేయండి, ఫలిత ఫైల్ మార్పులను సమీక్షించండి, ఆపై దాన్ని సేవ్ చేయండి."
+ },
+ "extraFiles": {
+ "addedFiles": "జోడించిన ఫైల్లు:",
+ "assets": "ఆస్తులు",
+ "assetsDescription": "వర్క్ఫ్లోను వివరించడంలో సహాయపడితే మాత్రమే స్క్రీన్షాట్లు లేదా బండిల్ చేసిన మీడియాను జోడించండి.",
+ "description": "ఈ నైపుణ్యానికి నిజంగా అవసరమైతే మాత్రమే సహాయక డాక్స్, స్క్రిప్ట్లు లేదా ఆస్తులను జోడించండి.",
+ "lockedForEdits": "రూట్ మరియు ఫోల్డర్ సవరణల కోసం లాక్ చేయబడ్డాయి",
+ "optionalDescription": "సమీక్షలో చేర్చబడే మరియు `SKILL.md` తో పాటు రాయబడే స్టార్టర్ ఫైల్లను జోడించండి.",
+ "optionalTitle": "ఐచ్ఛిక ఫైల్లు",
+ "references": "సూచనలు",
+ "referencesDescription": "రన్టైమ్ చూడగల సహాయక డాక్స్, లింక్లు లేదా ఉదాహరణలను జోడించండి.",
+ "scripts": "స్క్రిప్ట్లు",
+ "scriptsDescription": "హెల్పర్ కమాండ్లు లేదా సెటప్ గమనికలను జోడించండి. ఈ నైపుణ్యాన్ని పంచుకోవడానికి ముందు జాగ్రత్తగా సమీక్షించండి.",
+ "title": "3. అదనపు ఫైల్లు"
+ },
+ "fields": {
+ "compatibility": "అనుకూలత",
+ "description": "వివరణ",
+ "folderName": "ఫోల్డర్ పేరు",
+ "folderNameHint": "సమీక్ష వెంటనే పనిచేయడానికి నైపుణ్యం పేరు నుండి దీన్ని స్వయంచాలకంగా సూచిస్తాము.",
+ "invocation": "ఇది ఎలా ఉపయోగించాలి",
+ "license": "లైసెన్స్",
+ "name": "నైపుణ్యం పేరు",
+ "notes": "అదనపు గమనికలు లేదా గార్డ్రెయిల్స్",
+ "root": "ఎక్కడ నిల్వ చేయాలి",
+ "scope": "ఎవరు ఉపయోగించగలరు",
+ "steps": "అనుసరించవలసిన ప్రధాన దశలు",
+ "whenToUse": "దీన్ని ఎప్పుడు ఉపయోగించాలి"
+ },
+ "instructions": {
+ "description": "ఈ విభాగాలు మీ కోసం నైపుణ్య ఫైల్ను రూపొందిస్తాయి, కాబట్టి మీరు కోరుకుంటే తప్ప markdown ను సవరించాల్సిన అవసరం లేదు.",
+ "locked": "మీరు దిగువన మాన్యువల్ `SKILL.md` సవరణకు మారినందున నిర్మాణాత్మక ఫీల్డ్లు లాక్ చేయబడ్డాయి.",
+ "title": "2. సూచనలు"
+ },
+ "invocation": {
+ "auto": "స్వయంచాలకంగా ఉపయోగించవచ్చు",
+ "manualOnly": "మీరు అడిగినప్పుడు మాత్రమే"
+ },
+ "placeholders": {
+ "description": "ఈ నైపుణ్యం దేనికి సహాయపడుతుంది",
+ "name": "సంక్షిప్త నైపుణ్యం పేరును రాయండి",
+ "notes": "ఉదాహరణ: లేని టెస్ట్లు, రిగ్రెషన్లు మరియు ప్రమాదకర అంచనాలను ఎత్తి చూపండి.",
+ "steps": "1. సంబంధిత ఫైల్లను తనిఖీ చేయండి.\n2. ప్రధాన ప్రమాదాన్ని మొదట వివరించండి.\n3. సురక్షితమైన పరిష్కారాన్ని సూచించండి.",
+ "whenToUse": "ఉదాహరణ: టాస్క్ కోడ్ సమీక్ష లేదా బగ్ ట్రయాజ్ అభ్యర్థన అయినప్పుడు దీన్ని ఉపయోగించండి.",
+ "license": "MIT",
+ "compatibility": "claude-code, cursor"
+ },
+ "review": {
+ "creating": "నైపుణ్యాన్ని సృష్టిస్తోంది",
+ "hint": "మొదట ఫైల్ మార్పులను సమీక్షించండి, ఆపై తదుపరి దశలో సేవ్ను నిర్ధారించండి.",
+ "saving": "ఈ నైపుణ్యాన్ని సేవ్ చేస్తోంది"
+ },
+ "root": {
+ "codexOnly": " - Codex మాత్రమే",
+ "shared": " - షేర్ చేయబడింది"
+ },
+ "scope": {
+ "project": "ప్రాజెక్ట్: {{project}}",
+ "projectUnavailable": "ప్రాజెక్ట్ అందుబాటులో లేదు",
+ "user": "యూజర్"
+ },
+ "title": {
+ "create": "నైపుణ్యాన్ని సృష్టించు",
+ "edit": "నైపుణ్యాన్ని సవరించు"
+ }
+ },
+ "skillDetail": {
+ "actions": {
+ "cancel": "రద్దు చేయి",
+ "delete": "తొలగించు",
+ "deleteSkill": "నైపుణ్యాన్ని తొలగించు",
+ "deleting": "తొలగిస్తోంది...",
+ "editSkill": "నైపుణ్యాన్ని సవరించు",
+ "openFolder": "ఫోల్డర్ తెరువు",
+ "openSkillFile": "SKILL.md తెరువు",
+ "retry": "మళ్లీ ప్రయత్నించు"
+ },
+ "badges": {
+ "assets": "ఆస్తులు",
+ "autoUse": "ఆటో వినియోగం",
+ "hasScripts": "స్క్రిప్ట్లు ఉన్నాయి",
+ "manualUse": "మాన్యువల్ వినియోగం",
+ "references": "సూచనలు",
+ "storedIn": "{{root}} లో నిల్వ చేయబడింది"
+ },
+ "deleteDialog": {
+ "description": "ఈ నైపుణ్యాన్ని తొలగించి ట్రాష్కు తరలించాలా?",
+ "descriptionWithName": "\"{{name}}\" ను తొలగించి ట్రాష్కు తరలించాలా? అవసరమైతే తర్వాత ట్రాష్ నుండి దాన్ని పునరుద్ధరించవచ్చు.",
+ "title": "నైపుణ్యాన్ని తొలగించాలా?"
+ },
+ "descriptionFallback": "కనుగొనబడిన నైపుణ్య మెటాడేటా మరియు రా సూచనలను తనిఖీ చేయండి.",
+ "errors": {
+ "deleteFailed": "నైపుణ్యాన్ని తొలగించడం విఫలమైంది",
+ "loadFailed": "ఈ నైపుణ్యాన్ని లోడ్ చేయడం సాధ్యం కాలేదు."
+ },
+ "files": {
+ "advancedDetails": "ఆధునిక ఫైల్ వివరాలు",
+ "assets": "ఆస్తులు",
+ "references": "సూచనలు",
+ "scripts": "స్క్రిప్ట్లు",
+ "storedAt": "ఇక్కడ నిల్వ చేయబడింది"
+ },
+ "includes": {
+ "assets": "ఆస్తులు",
+ "instructionsOnly": "నైపుణ్య సూచనలు మాత్రమే",
+ "references": "సూచనలు",
+ "scripts": "స్క్రిప్ట్లు"
+ },
+ "invocation": {
+ "auto": "టాస్క్కు సరిపోలినప్పుడు స్వయంచాలకంగా రన్ అవుతుంది.",
+ "manualOnly": "మీరు స్పష్టంగా అడిగినప్పుడు మాత్రమే రన్ అవుతుంది."
+ },
+ "issues": {
+ "bundledScripts": "ఈ నైపుణ్యంలో బండిల్ చేసిన స్క్రిప్ట్లు ఉన్నాయి",
+ "reviewCarefully": "దీన్ని ఉపయోగించే ముందు ఈ నైపుణ్యాన్ని జాగ్రత్తగా సమీక్షించండి"
+ },
+ "loading": "నైపుణ్య వివరాలను లోడ్ చేస్తోంది...",
+ "scope": {
+ "personal": "మీ వ్యక్తిగత నైపుణ్యాలు",
+ "projectOnly": "ఈ ప్రాజెక్ట్ మాత్రమే"
+ },
+ "summary": {
+ "howUsed": "ఇది ఎలా ఉపయోగించబడుతుంది",
+ "included": "దానితో ఏమి వస్తుంది",
+ "whoCanUse": "ఎవరు ఉపయోగించగలరు"
+ },
+ "titleFallback": "నైపుణ్య వివరాలు"
+ },
+ "skillsPanel": {
+ "actions": {
+ "createSkill": "నైపుణ్యాన్ని సృష్టించు",
+ "import": "దిగుమతి చేయి"
+ },
+ "badges": {
+ "assets": "ఆస్తులు",
+ "hasScripts": "స్క్రిప్ట్లు ఉన్నాయి",
+ "needsAttention": "శ్రద్ధ అవసరం",
+ "references": "సూచనలు",
+ "storedIn": "{{root}} లో నిల్వ చేయబడింది"
+ },
+ "configuredRuntime": "కాన్ఫిగర్ చేసిన రన్టైమ్",
+ "counts": {
+ "codexOnly": "{{count}} Codex మాత్రమే",
+ "personal": "{{count}} వ్యక్తిగత",
+ "project": "{{count}} ప్రాజెక్ట్",
+ "shared": "{{count}} షేర్ చేయబడింది",
+ "total": "మొత్తం {{count}}",
+ "codexOnly_few": "{{count}} Codex మాత్రమే",
+ "codexOnly_many": "{{count}} Codex మాత్రమే",
+ "codexOnly_one": "{{count}} Codex మాత్రమే",
+ "codexOnly_other": "{{count}} Codex మాత్రమే",
+ "personal_few": "{{count}} వ్యక్తిగత",
+ "personal_many": "{{count}} వ్యక్తిగత",
+ "personal_one": "{{count}} వ్యక్తిగత",
+ "personal_other": "{{count}} వ్యక్తిగత",
+ "project_few": "{{count}} ప్రాజెక్ట్",
+ "project_many": "{{count}} ప్రాజెక్ట్",
+ "project_one": "{{count}} ప్రాజెక్ట్",
+ "project_other": "{{count}} ప్రాజెక్ట్",
+ "shared_few": "{{count}} షేర్ చేయబడింది",
+ "shared_many": "{{count}} షేర్ చేయబడింది",
+ "shared_one": "{{count}} షేర్ చేయబడింది",
+ "shared_other": "{{count}} షేర్ చేయబడింది",
+ "total_few": "మొత్తం {{count}}",
+ "total_many": "మొత్తం {{count}}",
+ "total_one": "మొత్తం {{count}}",
+ "total_other": "మొత్తం {{count}}"
+ },
+ "empty": {
+ "noMatches": "మీ శోధనకు ఏ నైపుణ్యాలు సరిపోలడం లేదు",
+ "noMatchesDescription": "వేరే శోధన పదాన్ని ప్రయత్నించండి లేదా ఫిల్టర్లను మార్చండి.",
+ "noSkills": "ఇంకా నైపుణ్యాలు లేవు",
+ "noSkillsDescription": "పునరావృత వర్క్ఫ్లోను నేర్పడానికి మీ మొదటి నైపుణ్యాన్ని సృష్టించండి, లేదా మీరు ఇప్పటికే ఉపయోగించే ఒకదాన్ని దిగుమతి చేయండి."
+ },
+ "filters": {
+ "all": "అన్ని నైపుణ్యాలు",
+ "codexOnly": "Codex మాత్రమే",
+ "hasScripts": "స్క్రిప్ట్లు ఉన్నాయి",
+ "needsAttention": "శ్రద్ధ అవసరం",
+ "personal": "వ్యక్తిగత",
+ "project": "ప్రాజెక్ట్",
+ "shared": "షేర్ చేయబడింది"
+ },
+ "hero": {
+ "codexAvailable": "ఒక నైపుణ్యం Codex-మాత్రమే ఉండాలంటే `.codex` ను ఉపయోగించండి.",
+ "codexUnavailable": "ప్రస్తుత `.codex` నైపుణ్యాలు ఇక్కడ సవరించదగినవిగా ఉంటాయి, కానీ కొత్త Codex-మాత్రమే నైపుణ్యాలకు Codex రన్టైమ్ ప్రారంభించబడాలి.",
+ "description": "నైపుణ్యాలు పునర్వినియోగ సూచనలు, ఇవి ఒకే రకమైన టాస్క్ను మరింత స్థిరంగా నిర్వహించడంలో రన్టైమ్కు సహాయపడతాయి.",
+ "guidance": "మీకు ప్రతిచోటా కావలసిన అలవాట్ల కోసం వ్యక్తిగత నైపుణ్యాలను ఉపయోగించండి. ఒకే కోడ్బేస్లో మాత్రమే అర్థవంతమైన వర్క్ఫ్లోల కోసం ప్రాజెక్ట్ నైపుణ్యాలను ఉపయోగించండి.",
+ "personalContext": "మీరు ప్రస్తుతం మీ వ్యక్తిగత నైపుణ్యాలను మాత్రమే చూస్తున్నారు.",
+ "projectContext": "మీరు {{project}} కోసం నైపుణ్యాలతో పాటు మీ వ్యక్తిగత నైపుణ్యాలను చూస్తున్నారు.",
+ "title": "పునరావృత పనిని నేర్పండి"
+ },
+ "invocation": {
+ "auto": "సరిపోలినప్పుడు స్వయంచాలకంగా రన్ అవుతుంది",
+ "manualOnly": "మీరు స్పష్టంగా అడిగినప్పుడు మాత్రమే రన్ అవుతుంది"
+ },
+ "loading": {
+ "loading": "నైపుణ్యాలను లోడ్ చేస్తోంది...",
+ "refreshing": "నైపుణ్యాలను రిఫ్రెష్ చేస్తోంది..."
+ },
+ "runtimeAudience": "`.claude`, `.cursor` మరియు `.agents` లోని షేర్ చేసిన నైపుణ్యాలు {{audience}} కు అందుబాటులో ఉన్నాయి. `.codex` లో నిల్వ చేసిన నైపుణ్యాలు Codex మద్దతు అందుబాటులో ఉన్నప్పుడు Codex-మాత్రమే ఉంటాయి.",
+ "scope": {
+ "project": "ఈ ప్రాజెక్ట్",
+ "user": "వ్యక్తిగత"
+ },
+ "searchPlaceholder": "నైపుణ్యం పేరు లేదా అది దేనికి సహాయపడుతుందో దాని ద్వారా శోధించండి...",
+ "sections": {
+ "personal": {
+ "description": "మీకు ప్రతిచోటా అందుబాటులో కావలసిన అలవాట్లు మరియు సూచనలు.",
+ "title": "వ్యక్తిగత నైపుణ్యాలు"
+ },
+ "project": {
+ "description": "ఈ కోడ్బేస్కు మాత్రమే అర్థవంతమైన వర్క్ఫ్లోలు.",
+ "title": "ప్రాజెక్ట్ నైపుణ్యాలు"
+ }
+ },
+ "sort": {
+ "label": "నైపుణ్యాలను క్రమబద్ధీకరించు",
+ "name": "పేరు",
+ "recent": "ఇటీవలి"
+ },
+ "status": {
+ "hasScripts": "స్క్రిప్ట్లను కలిగి ఉంది, కాబట్టి దాన్ని జాగ్రత్తగా సమీక్షించండి",
+ "needsAttention": "మీరు దానిపై ఆధారపడే ముందు శ్రద్ధ అవసరం",
+ "ready": "ఉపయోగించడానికి సిద్ధం"
+ },
+ "success": {
+ "created": "నైపుణ్యం విజయవంతంగా సృష్టించబడింది.",
+ "imported": "నైపుణ్యం విజయవంతంగా దిగుమతి చేయబడింది.",
+ "saved": "నైపుణ్యం విజయవంతంగా సేవ్ చేయబడింది."
+ }
+ },
+ "pluginDetail": {
+ "unknown": "తెలియదు",
+ "metadata": {
+ "author": "రచయిత",
+ "category": "వర్గం",
+ "source": "మూలం",
+ "version": "వెర్షన్",
+ "capabilities": "సామర్థ్యాలు",
+ "installs": "ఇన్స్టాల్లు"
+ },
+ "scope": {
+ "label": "స్కోప్:",
+ "options": {
+ "user": "యూజర్ (గ్లోబల్)",
+ "project": "ప్రాజెక్ట్ (షేర్ చేయబడింది)",
+ "local": "స్థానిక (gitignored)"
+ }
+ },
+ "links": {
+ "homepage": "హోమ్పేజీ",
+ "contact": "సంప్రదించండి"
+ },
+ "readme": {
+ "loading": "README ను లోడ్ చేస్తోంది...",
+ "empty": "README అందుబాటులో లేదు."
+ }
+ },
+ "skillImport": {
+ "title": "నైపుణ్యాన్ని దిగుమతి చేయి",
+ "description": "ప్రస్తుత నైపుణ్య ఫోల్డర్ను ఎంచుకోండి, ఏమి కాపీ చేయబడుతుందో సమీక్షించండి, ఆపై మీ మద్దతు ఉన్న నైపుణ్య స్థానాల్లో ఒకదానిలోకి దాన్ని దిగుమతి చేయండి.",
+ "steps": {
+ "chooseFolder": {
+ "title": "1. నైపుణ్య ఫోల్డర్ను ఎంచుకోండి",
+ "description": "ఇది ఇప్పటికే `SKILL.md`, `Skill.md` లేదా `skill.md` ఫైల్ను కలిగి ఉన్న ఫోల్డర్ అయి ఉండాలి."
+ },
+ "location": {
+ "title": "2. అది ఎక్కడ ఉండాలో నిర్ణయించండి",
+ "description": "వ్యక్తిగత నైపుణ్యాలు ప్రతిచోటా పనిచేస్తాయి. ప్రాజెక్ట్ నైపుణ్యాలు ఒకే కోడ్బేస్కు మాత్రమే కనిపిస్తాయి."
+ }
+ },
+ "fields": {
+ "sourceFolder": "మూల ఫోల్డర్",
+ "destinationFolderName": "గమ్యస్థాన ఫోల్డర్ పేరు",
+ "audience": "ఎవరు ఉపయోగించగలరు",
+ "storage": "ఎక్కడ నిల్వ చేయాలి"
+ },
+ "placeholders": {
+ "defaultFolderName": "మూల ఫోల్డర్ పేరుకు డిఫాల్ట్ అవుతుంది"
+ },
+ "actions": {
+ "browse": "బ్రౌజ్ చేయి",
+ "cancel": "రద్దు చేయి",
+ "preparing": "సిద్ధం చేస్తోంది...",
+ "reviewAndImport": "సమీక్షించి దిగుమతి చేయి",
+ "importSkill": "నైపుణ్యాన్ని దిగుమతి చేయి",
+ "backToImport": "దిగుమతికి తిరిగి వెళ్లు"
+ },
+ "scope": {
+ "user": "యూజర్",
+ "project": "ప్రాజెక్ట్: {{project}}",
+ "projectUnavailable": "ప్రాజెక్ట్ అందుబాటులో లేదు"
+ },
+ "rootSuffix": {
+ "codexOnly": " - Codex మాత్రమే",
+ "shared": " - షేర్ చేయబడింది"
+ },
+ "reviewHint": "మొదట కాపీ చేసిన ఫైల్లను సమీక్షించండి, ఆపై తదుపరి దశలో దిగుమతిని నిర్ధారించండి.",
+ "reviewLabel": "ఈ నైపుణ్యాన్ని దిగుమతి చేస్తోంది",
+ "errors": {
+ "missingSkillFile": "ఈ ఫోల్డర్ ఇంకా నైపుణ్యంలా కనిపించడం లేదు. దీనికి SKILL.md, Skill.md లేదా skill.md ఫైల్ అవసరం.",
+ "symbolicLinks": "ఈ ఫోల్డర్లో సింబాలిక్ లింక్లు ఉన్నాయి. లింక్లకు బదులుగా అసలు ఫైల్లను దిగుమతి చేయండి.",
+ "tooManyFiles": "ఈ నైపుణ్య ఫోల్డర్ ఒకేసారి దిగుమతి చేయడానికి చాలా పెద్దది. అదనపు ఫైల్లను తీసివేసి మళ్లీ ప్రయత్నించండి.",
+ "tooLarge": "ఈ నైపుణ్య ఫోల్డర్ సురక్షితంగా దిగుమతి చేయడానికి చాలా పెద్దది. పెద్ద ఆస్తులను తగ్గించి మళ్లీ ప్రయత్నించండి.",
+ "invalidFolderName": "అక్షరాలు, సంఖ్యలు, చుక్కలు, డ్యాష్లు లేదా అండర్స్కోర్లను ఉపయోగించి సరళమైన గమ్యస్థాన ఫోల్డర్ పేరును ఎంచుకోండి.",
+ "mustBeDirectory": "ఒకే ఫైల్ను కాకుండా దిగుమతి చేయడానికి ఫోల్డర్ను ఎంచుకోండి.",
+ "reviewFailed": "దిగుమతి మార్పులను సమీక్షించడం విఫలమైంది",
+ "importFailed": "నైపుణ్యాన్ని దిగుమతి చేయడం విఫలమైంది"
+ }
+ },
+ "mcpPanel": {
+ "sort": {
+ "nameAsc": "పేరు A→Z",
+ "nameDesc": "పేరు Z→A",
+ "toolsDesc": "ఎక్కువ టూల్స్"
+ },
+ "health": {
+ "title": "MCP ఆరోగ్య స్థితి",
+ "checkingViaRuntime": "{{runtime}} ద్వారా ఇన్స్టాల్ చేసిన MCP సర్వర్లను తనిఖీ చేస్తోంది ...",
+ "lastChecked": "చివరిగా తనిఖీ చేయబడింది {{time}}",
+ "description": "ఇన్స్టాల్ చేసిన MCP కనెక్టివిటీని ధృవీకరించడానికి ఈ పేజీ నుండి డయాగ్నొస్టిక్లను అమలు చేయండి.",
+ "checking": "తనిఖీ చేస్తోంది...",
+ "checkStatus": "స్థితిని తనిఖీ చేయి"
+ },
+ "diagnostics": {
+ "title": "రన్టైమ్ MCP డయాగ్నొస్టిక్లు",
+ "serversCount": "{{count}} సర్వర్లు",
+ "serversCount_one": "{{count}} సర్వర్",
+ "serversCount_other": "{{count}} సర్వర్లు",
+ "waiting": "డయాగ్నొస్టిక్ ఫలితాల కోసం వేచి ఉంది...",
+ "disableReasons": {
+ "checkingRuntimeStatus": "రన్టైమ్ స్థితిని తనిఖీ చేస్తోంది...",
+ "checkingRuntimeAvailability": "రన్టైమ్ లభ్యతను తనిఖీ చేస్తోంది...",
+ "runtimeFailedToStart": "కాన్ఫిగర్ చేసిన రన్టైమ్ కనుగొనబడింది కానీ ప్రారంభించడంలో విఫలమైంది. దాన్ని రిపేర్ చేయడానికి లేదా మళ్లీ ఇన్స్టాల్ చేయడానికి డాష్బోర్డ్ను తెరవండి.",
+ "runtimeRequired": "కాన్ఫిగర్ చేసిన రన్టైమ్ అవసరం. డాష్బోర్డ్ నుండి దాన్ని ఇన్స్టాల్ చేయండి లేదా రిపేర్ చేయండి."
+ },
+ "serversCount_few": "{{count}} సర్వర్లు",
+ "serversCount_many": "{{count}} సర్వర్లు"
+ },
+ "searchPlaceholder": "MCP సర్వర్లను శోధించండి...",
+ "runtime": {
+ "notAvailable": "{{runtime}} అందుబాటులో లేదు",
+ "notInstalled": "{{runtime}} ఇన్స్టాల్ చేయబడలేదు",
+ "requiredDescription": "MCP ఆరోగ్య తనిఖీలకు {{runtime}} అవసరం. దాన్ని ఇన్స్టాల్ చేయడానికి లేదా రిపేర్ చేయడానికి డాష్బోర్డ్కు వెళ్లండి."
+ },
+ "empty": {
+ "searchTitle": "సర్వర్లు కనుగొనబడలేదు",
+ "title": "MCP సర్వర్లు అందుబాటులో లేవు",
+ "searchDescription": "వేరే శోధన పదాన్ని ప్రయత్నించండి",
+ "description": "కొత్త సర్వర్ల కోసం తర్వాత తనిఖీ చేయండి"
+ },
+ "loadMore": "మరింత లోడ్ చేయి"
+ },
+ "apiKeys": {
+ "description": "MCP సర్వర్లను ఇన్స్టాల్ చేసేటప్పుడు ఆటో-ఫిల్ చేయడానికి API కీలను సురక్షితంగా నిల్వ చేయండి.",
+ "storage": {
+ "osKeychain": "కీలు {{backend}} ద్వారా ఎన్క్రిప్ట్ చేయబడ్డాయి మరియు పరిమిత ఫైల్ అనుమతులతో (యజమాని-మాత్రమే) నిల్వ చేయబడ్డాయి.",
+ "localEncryption": "OS కీచైన్ అందుబాటులో లేదు - కీలు స్థానికంగా AES-256 తో ఎన్క్రిప్ట్ చేయబడ్డాయి. బలమైన రక్షణ కోసం, కీరింగ్ సేవను ఇన్స్టాల్ చేయండి (gnome-keyring, kwallet)."
+ },
+ "actions": {
+ "add": "API కీని జోడించు",
+ "addFirst": "మీ మొదటి కీని జోడించండి",
+ "edit": "సవరించు",
+ "copied": "కాపీ చేయబడింది!",
+ "copyEnvVarName": "env var పేరును కాపీ చేయి",
+ "confirmDelete": "నిర్ధారించడానికి మళ్లీ క్లిక్ చేయండి",
+ "delete": "తొలగించు"
+ },
+ "empty": {
+ "title": "API కీలు ఏవీ సేవ్ చేయబడలేదు",
+ "description": "MCP సర్వర్లను ఇన్స్టాల్ చేసేటప్పుడు ఎన్విరాన్మెంట్ వేరియబుల్స్ను ఆటో-ఫిల్ చేయడానికి కీలను జోడించండి."
+ },
+ "form": {
+ "addTitle": "API కీని జోడించు",
+ "editTitle": "API కీని సవరించు",
+ "addDescription": "MCP సర్వర్ ఇన్స్టాలేషన్లలో ఆటో-ఫిల్ చేయడానికి API కీని నిల్వ చేయండి.",
+ "editDescription": "కీ వివరాలను అప్డేట్ చేయండి. మీరు విలువను మళ్లీ నమోదు చేయాలి.",
+ "keychainUnavailable": "OS కీచైన్ అందుబాటులో లేదు - కీలు స్థానికంగా AES-256 తో ఎన్క్రిప్ట్ చేయబడ్డాయి. OS-స్థాయి రక్షణ కోసం gnome-keyring ను ఇన్స్టాల్ చేయండి.",
+ "name": "పేరు",
+ "namePlaceholder": "ఉదా. OpenAI Production",
+ "environmentVariableName": "ఎన్విరాన్మెంట్ వేరియబుల్ పేరు",
+ "envVarPlaceholder": "ఉదా. OPENAI_API_KEY",
+ "value": "విలువ",
+ "reenterValue": "కీ విలువను మళ్లీ నమోదు చేయండి",
+ "valuePlaceholder": "sk-...",
+ "scope": "స్కోప్",
+ "userScopeLabel": "యూజర్ (గ్లోబల్)",
+ "projectScopeLabel": "ప్రాజెక్ట్: {{project}}",
+ "projectUnavailable": "ప్రాజెక్ట్ అందుబాటులో లేదు",
+ "boundTo": "{{path}} కు బంధించబడింది",
+ "cancel": "రద్దు చేయి",
+ "saving": "సేవ్ చేస్తోంది...",
+ "update": "అప్డేట్ చేయి",
+ "save": "సేవ్ చేయి",
+ "errors": {
+ "invalidEnvVarFormat": "అక్షరాలు, అంకెలు, అండర్స్కోర్లను ఉపయోగించండి. తప్పనిసరిగా అక్షరం లేదా అండర్స్కోర్తో ప్రారంభం కావాలి.",
+ "nameRequired": "పేరు అవసరం",
+ "envVarRequired": "ఎన్విరాన్మెంట్ వేరియబుల్ పేరు అవసరం",
+ "invalidEnvVar": "చెల్లని ఎన్విరాన్మెంట్ వేరియబుల్ పేరు",
+ "valueRequired": "కీ విలువ అవసరం",
+ "projectScopeRequiresProject": "ప్రాజెక్ట్-స్కోప్ చేసిన API కీలకు క్రియాశీల ప్రాజెక్ట్ అవసరం",
+ "saveFailed": "సేవ్ చేయడం విఫలమైంది"
+ }
+ }
+ },
+ "skillReview": {
+ "title": "నైపుణ్య మార్పులను సమీక్షించు",
+ "description": "{{reviewLabel}} మొదట ఫైల్సిస్టమ్ మార్పులను ప్రివ్యూ చేస్తుంది. మీరు దిగువన నిర్ధారించే వరకు ఏదీ రాయబడదు.",
+ "noPreview": "ప్రివ్యూ అందుబాటులో లేదు.",
+ "confirmPromptPrefix": "దిగువ diff ను సమీక్షించండి, ఆపై ఉపయోగించండి",
+ "confirmPromptSuffix": "ఈ మార్పులను వర్తింపజేయడానికి.",
+ "noChanges": "ఇంకా ఫైల్ మార్పులు ఏవీ గుర్తించబడలేదు.",
+ "binaryBadge": "binary",
+ "binaryPreviewHidden": "బైనరీ ఫైల్ ప్రివ్యూ చూపబడదు. ఫైల్ ఉన్నది ఉన్నట్లుగా కాపీ చేయబడుతుంది.",
+ "summary": {
+ "fileChanges": "{{count}} ఫైల్ మార్పులు",
+ "fileChanges_one": "{{count}} ఫైల్ మార్పు",
+ "fileChanges_other": "{{count}} ఫైల్ మార్పులు",
+ "new": "{{count}} కొత్తవి",
+ "updated": "{{count}} అప్డేట్ చేయబడ్డాయి",
+ "removed": "{{count}} తీసివేయబడ్డాయి",
+ "binary": "{{count}} బైనరీ",
+ "fileChanges_few": "{{count}} ఫైల్ మార్పులు",
+ "fileChanges_many": "{{count}} ఫైల్ మార్పులు"
+ }
+ },
+ "mcpCard": {
+ "toolsCount": "{{count}} టూల్స్",
+ "toolsCount_one": "{{count}} టూల్",
+ "toolsCount_other": "{{count}} టూల్స్",
+ "envCount": "{{count}} envs",
+ "envCount_one": "{{count}} env",
+ "envCount_other": "{{count}} envs",
+ "auth": "Auth",
+ "byAuthor": "{{author}} ద్వారా",
+ "hosting": {
+ "remote": "రిమోట్",
+ "local": "స్థానిక",
+ "both": "రెండూ"
+ },
+ "toolsCount_few": "{{count}} టూల్స్",
+ "toolsCount_many": "{{count}} టూల్స్",
+ "envCount_few": "{{count}} envs",
+ "envCount_many": "{{count}} envs",
+ "repository": "రిపోజిటరీ",
+ "website": "వెబ్సైట్"
+ },
+ "installButton": {
+ "installing": "ఇన్స్టాల్ చేస్తోంది...",
+ "removing": "తీసివేస్తోంది...",
+ "done": "పూర్తయింది",
+ "retry": "మళ్లీ ప్రయత్నించు",
+ "uninstall": "అన్ఇన్స్టాల్ చేయి",
+ "install": "ఇన్స్టాల్ చేయి"
+ },
+ "pluginCard": {
+ "official": "అధికారిక"
+ }
+}
diff --git a/src/features/localization/renderer/locales/te/report.json b/src/features/localization/renderer/locales/te/report.json
new file mode 100644
index 00000000..ba0baaca
--- /dev/null
+++ b/src/features/localization/renderer/locales/te/report.json
@@ -0,0 +1,217 @@
+{
+ "cost": {
+ "breakdownTitle": "ఖర్చు విభజన (ప్రతి 1M టోకెన్లకు)",
+ "cacheRead": "క్యాష్ రీడ్",
+ "cacheWrite": "క్యాష్ రైట్",
+ "cost": "ఖర్చు",
+ "input": "ఇన్పుట్",
+ "noCommits": "కమిట్లు లేవు",
+ "noLinesChanged": "మార్చిన లైన్లు లేవు",
+ "output": "అవుట్పుట్",
+ "parent": "పేరెంట్: {{cost}}",
+ "parentCost": "పేరెంట్ ఖర్చు",
+ "perCommit": "ప్రతి కమిట్కు",
+ "perCommitFormula": "మొత్తం ఖర్చు ÷ {{count}} కమిట్",
+ "perCommitFormula_few": "మొత్తం ఖర్చు ÷ {{count}} కమిట్లు",
+ "perCommitFormula_many": "మొత్తం ఖర్చు ÷ {{count}} కమిట్లు",
+ "perCommitFormula_one": "మొత్తం ఖర్చు ÷ {{count}} కమిట్",
+ "perCommitFormula_other": "మొత్తం ఖర్చు ÷ {{count}} కమిట్లు",
+ "perLineChanged": "ప్రతి మార్చిన లైన్కు",
+ "perLineFormula": "మొత్తం ఖర్చు ÷ {{count}} లైన్",
+ "perLineFormula_few": "మొత్తం ఖర్చు ÷ {{count}} లైన్లు",
+ "perLineFormula_many": "మొత్తం ఖర్చు ÷ {{count}} లైన్లు",
+ "perLineFormula_one": "మొత్తం ఖర్చు ÷ {{count}} లైన్",
+ "perLineFormula_other": "మొత్తం ఖర్చు ÷ {{count}} లైన్లు",
+ "subagent": "సబ్ఏజెంట్: {{cost}}",
+ "subagentCost": "సబ్ఏజెంట్ ఖర్చు",
+ "title": "ఖర్చు విశ్లేషణ",
+ "total": "మొత్తం"
+ },
+ "insights": {
+ "agent": "ఏజెంట్",
+ "agent_few": "ఏజెంట్లు",
+ "agent_many": "ఏజెంట్లు",
+ "agent_one": "ఏజెంట్",
+ "agent_other": "ఏజెంట్లు",
+ "agentTree": "ఏజెంట్ ట్రీ ({{count}} {{unit}})",
+ "background": "(బ్యాక్గ్రౌండ్)",
+ "bashCommands": "Bash కమాండ్లు",
+ "outOfScopeFindings": "పరిధి వెలుపలి కనుగొనబడినవి ({{count}})",
+ "questionsAsked": "అడిగిన ప్రశ్నలు ({{count}})",
+ "repeated": "పునరావృతం",
+ "skillsInvoked": "ఉపయోగించిన నైపుణ్యాలు ({{count}})",
+ "taskDispatches": "టాస్క్ డిస్పాచ్లు ({{count}})",
+ "tasksCreated": "సృష్టించిన టాస్క్లు ({{count}})",
+ "teamMode": "టీమ్ మోడ్",
+ "teams": "టీమ్లు: {{teams}}",
+ "title": "సెషన్ ఇన్సైట్లు",
+ "total": "మొత్తం",
+ "unique": "ప్రత్యేకమైనవి",
+ "skillsInvoked_few": "ఉపయోగించిన నైపుణ్యాలు ({{count}})",
+ "skillsInvoked_many": "ఉపయోగించిన నైపుణ్యాలు ({{count}})",
+ "skillsInvoked_one": "ఉపయోగించిన నైపుణ్యాలు ({{count}})",
+ "skillsInvoked_other": "ఉపయోగించిన నైపుణ్యాలు ({{count}})",
+ "taskDispatches_few": "టాస్క్ డిస్పాచ్లు ({{count}})",
+ "taskDispatches_many": "టాస్క్ డిస్పాచ్లు ({{count}})",
+ "taskDispatches_one": "టాస్క్ డిస్పాచ్లు ({{count}})",
+ "taskDispatches_other": "టాస్క్ డిస్పాచ్లు ({{count}})",
+ "tasksCreated_few": "సృష్టించిన టాస్క్లు ({{count}})",
+ "tasksCreated_many": "సృష్టించిన టాస్క్లు ({{count}})",
+ "tasksCreated_one": "సృష్టించిన టాస్క్లు ({{count}})",
+ "tasksCreated_other": "సృష్టించిన టాస్క్లు ({{count}})",
+ "questionsAsked_few": "అడిగిన ప్రశ్నలు ({{count}})",
+ "questionsAsked_many": "అడిగిన ప్రశ్నలు ({{count}})",
+ "questionsAsked_one": "అడిగిన ప్రశ్నలు ({{count}})",
+ "questionsAsked_other": "అడిగిన ప్రశ్నలు ({{count}})",
+ "agentTree_few": "ఏజెంట్ ట్రీ ({{count}} {{unit}})",
+ "agentTree_many": "ఏజెంట్ ట్రీ ({{count}} {{unit}})",
+ "agentTree_one": "ఏజెంట్ ట్రీ ({{count}} {{unit}})",
+ "agentTree_other": "ఏజెంట్ ట్రీ ({{count}} {{unit}})",
+ "outOfScopeFindings_few": "పరిధి వెలుపలి కనుగొనబడినవి ({{count}})",
+ "outOfScopeFindings_many": "పరిధి వెలుపలి కనుగొనబడినవి ({{count}})",
+ "outOfScopeFindings_one": "పరిధి వెలుపలి కనుగొనబడినవి ({{count}})",
+ "outOfScopeFindings_other": "పరిధి వెలుపలి కనుగొనబడినవి ({{count}})",
+ "keyTakeaways": "ముఖ్య అంశాలు"
+ },
+ "quality": {
+ "chars": "అక్షరాలు",
+ "corrections": "దిద్దుబాట్లు",
+ "failed": "విఫలమైంది",
+ "fileReadRedundancy": "ఫైల్ రీడ్ రిడండెన్సీ",
+ "firstMessage": "మొదటి సందేశం",
+ "firstRun": "మొదటి రన్",
+ "frictionRate": "ఫ్రిక్షన్ రేట్",
+ "lastRun": "చివరి రన్",
+ "messagesBeforeWork": "పని ముందు సందేశాలు",
+ "passed": "ఉత్తీర్ణమైంది",
+ "promptQuality": "ప్రాంప్ట్ నాణ్యత",
+ "readsPerUniqueFile": "ప్రతి ప్రత్యేక ఫైల్కు రీడ్లు",
+ "snapshot": "స్నాప్షాట్",
+ "snapshot_few": "స్నాప్షాట్లు",
+ "snapshot_many": "స్నాప్షాట్లు",
+ "snapshot_one": "స్నాప్షాట్",
+ "snapshot_other": "స్నాప్షాట్లు",
+ "startupOverhead": "స్టార్టప్ ఓవర్హెడ్",
+ "testProgression": "టెస్ట్ ప్రోగ్రెషన్",
+ "title": "నాణ్యత సంకేతాలు",
+ "tokensBeforeWork": "పని ముందు టోకెన్లు",
+ "totalReads": "మొత్తం రీడ్లు",
+ "uniqueFiles": "ప్రత్యేక ఫైల్లు",
+ "userMessages": "యూజర్ సందేశాలు",
+ "percentOfTotal": "మొత్తంలో %"
+ },
+ "tokens": {
+ "apiCalls": "API కాల్లు",
+ "cacheCreate": "క్యాష్ క్రియేట్",
+ "cacheEfficiency": "క్యాష్ సామర్థ్యం",
+ "cacheRead": "క్యాష్ రీడ్",
+ "cacheReadPct": "క్యాష్ రీడ్ %",
+ "coldStart": "కోల్డ్ స్టార్ట్",
+ "cost": "ఖర్చు",
+ "input": "ఇన్పుట్",
+ "model": "మోడల్",
+ "no": "లేదు",
+ "output": "అవుట్పుట్",
+ "readWriteRatio": "R/W నిష్పత్తి",
+ "title": "టోకెన్ వినియోగం",
+ "total": "మొత్తం",
+ "yes": "అవును"
+ },
+ "subagents": {
+ "title": "సబ్ఏజెంట్లు",
+ "metrics": {
+ "count": "సంఖ్య",
+ "totalTokens": "మొత్తం టోకెన్లు",
+ "totalDuration": "మొత్తం వ్యవధి",
+ "totalCost": "మొత్తం ఖర్చు"
+ },
+ "table": {
+ "description": "వివరణ",
+ "type": "రకం",
+ "tokens": "టోకెన్లు",
+ "duration": "వ్యవధి",
+ "cost": "ఖర్చు"
+ }
+ },
+ "overview": {
+ "title": "అవలోకనం",
+ "yes": "అవును",
+ "no": "లేదు",
+ "metrics": {
+ "duration": "వ్యవధి",
+ "messages": "సందేశాలు",
+ "contextUsage": "కాంటెక్స్ట్ వినియోగం",
+ "compactions": "కంపాక్షన్లు",
+ "branch": "బ్రాంచ్",
+ "subagents": "సబ్ఏజెంట్లు",
+ "project": "ప్రాజెక్ట్",
+ "sessionId": "సెషన్ ID"
+ }
+ },
+ "timeline": {
+ "title": "టైమ్లైన్ & కార్యకలాపం",
+ "idleAnalysis": "ఐడిల్ విశ్లేషణ",
+ "metrics": {
+ "idleGaps": "ఐడిల్ గ్యాప్లు",
+ "totalIdle": "మొత్తం ఐడిల్",
+ "activeTime": "క్రియాశీల సమయం",
+ "idlePercent": "ఐడిల్ %"
+ },
+ "modelSwitches": "మోడల్ స్విచ్లు ({{count}})",
+ "modelSwitches_one": "మోడల్ స్విచ్లు ({{count}})",
+ "modelSwitches_other": "మోడల్ స్విచ్లు ({{count}})",
+ "messageNumber": "సందేశం #{{number}}",
+ "keyEvents": "ముఖ్య ఈవెంట్లు",
+ "modelSwitches_few": "మోడల్ స్విచ్లు ({{count}})",
+ "modelSwitches_many": "మోడల్ స్విచ్లు ({{count}})"
+ },
+ "tools": {
+ "title": "టూల్ వినియోగం",
+ "summary": "{{toolCount}} టూల్స్లో మొత్తం {{formattedCount}} కాల్లు",
+ "columns": {
+ "tool": "టూల్",
+ "calls": "కాల్లు",
+ "errors": "లోపాలు",
+ "successPercent": "విజయం %",
+ "health": "ఆరోగ్యం"
+ }
+ },
+ "git": {
+ "title": "Git కార్యకలాపం",
+ "commits": "కమిట్లు",
+ "pushes": "పుష్లు",
+ "linesAdded": "జోడించిన లైన్లు",
+ "linesRemoved": "తొలగించిన లైన్లు",
+ "branchesCreated": "సృష్టించిన బ్రాంచ్లు"
+ },
+ "friction": {
+ "title": "ఫ్రిక్షన్ సంకేతాలు",
+ "rate": "ఫ్రిక్షన్ రేట్: {{rate}}%",
+ "correctionsCount": "{{count}} దిద్దుబాట్లు",
+ "correctionsCount_one": "{{count}} దిద్దుబాటు",
+ "corrections": "దిద్దుబాట్లు",
+ "thrashingSignals": "థ్రాషింగ్ సంకేతాలు",
+ "repeatedBashCommands": "పునరావృత Bash కమాండ్లు",
+ "reworkedFiles": "తిరిగి పని చేసిన ఫైల్లు (3+ ఎడిట్లు)",
+ "correctionsCount_few": "{{count}} దిద్దుబాట్లు",
+ "correctionsCount_many": "{{count}} దిద్దుబాట్లు",
+ "correctionsCount_other": "{{count}} దిద్దుబాట్లు"
+ },
+ "errors": {
+ "title": "లోపాలు",
+ "permissionDenied": "అనుమతి నిరాకరించబడింది",
+ "messageIndex": "సందేశం #{{index}}",
+ "input": "ఇన్పుట్",
+ "error": "లోపం",
+ "count": "{{count}} లోపాలు",
+ "count_one": "{{count}} లోపం",
+ "permissionDenialCount": "{{count}} అనుమతి నిరాకరణలు",
+ "permissionDenialCount_one": "{{count}} అనుమతి నిరాకరణ",
+ "count_few": "{{count}} లోపాలు",
+ "count_many": "{{count}} లోపాలు",
+ "count_other": "{{count}} లోపాలు",
+ "permissionDenialCount_few": "{{count}} అనుమతి నిరాకరణలు",
+ "permissionDenialCount_many": "{{count}} అనుమతి నిరాకరణలు",
+ "permissionDenialCount_other": "{{count}} అనుమతి నిరాకరణలు"
+ }
+}
diff --git a/src/features/localization/renderer/locales/te/settings.json b/src/features/localization/renderer/locales/te/settings.json
new file mode 100644
index 00000000..fb338949
--- /dev/null
+++ b/src/features/localization/renderer/locales/te/settings.json
@@ -0,0 +1,994 @@
+{
+ "tabs": {
+ "advanced": {
+ "description": "పవర్-యూజర్ ఎంపికలు: కాన్ఫిగ్ ఎగుమతి/దిగుమతి, డిఫాల్ట్లను రీసెట్ చేయడం మరియు రా కాన్ఫిగరేషన్ సవరణ.",
+ "label": "ఆధునిక"
+ },
+ "general": {
+ "description": "థీమ్, భాష, డిస్ప్లే డెన్సిటీ మరియు స్టార్టప్ ప్రవర్తన వంటి ప్రధాన యాప్ ప్రాధాన్యతలు.",
+ "label": "సాధారణ"
+ },
+ "infoAriaLabel": "{{label}} అంటే ఏమిటి?",
+ "notifications": {
+ "description": "ఏజెంట్ కార్యకలాపం, టాస్క్ పూర్తయినప్పుడు మరియు లోపాల గురించి మీకు ఎప్పుడు, ఎలా తెలియజేయాలో నియంత్రించండి.",
+ "label": "నోటిఫికేషన్లు"
+ }
+ },
+ "view": {
+ "description": "మీ యాప్ ప్రాధాన్యతలను నిర్వహించండి",
+ "loading": "సెట్టింగ్లను లోడ్ చేస్తోంది...",
+ "title": "సెట్టింగ్లు"
+ },
+ "runtimeProvider": {
+ "actions": {
+ "cancel": "రద్దు చేయి",
+ "test": "పరీక్షించు"
+ },
+ "defaults": {
+ "allProjects": "అన్ని ప్రాజెక్ట్లు",
+ "allProjectsHint": "పరీక్షలు {{project}} ను ఉపయోగిస్తాయి. ప్రాజెక్ట్కు ఓవర్రైడ్ లేకపోతే డిఫాల్ట్ వర్తిస్తుంది.",
+ "loadingContexts": "కాంటెక్స్ట్లను లోడ్ చేస్తోంది...",
+ "projectHint": "సేవ్ చేయడం {{project}} ను మాత్రమే ఓవర్రైడ్ చేస్తుంది.",
+ "projectOverrideContext": "ప్రాజెక్ట్ ఓవర్రైడ్ కాంటెక్స్ట్",
+ "scopeDescriptionAllProjects": "దాని స్వంత OpenCode ఓవర్రైడ్ లేని ప్రతి ప్రాజెక్ట్కు డిఫాల్ట్.",
+ "scopeDescriptionProject": "ఎంచుకున్న ప్రాజెక్ట్ను మాత్రమే ఓవర్రైడ్ చేస్తుంది. రన్ అవుతున్న టీమ్లు మారవు.",
+ "selectProjectContext": "ప్రాజెక్ట్ కాంటెక్స్ట్ను ఎంచుకోండి",
+ "selectProjectHint": "స్థానిక మోడల్లను పరీక్షించడానికి లేదా డిఫాల్ట్లను సేవ్ చేయడానికి ముందు ప్రాజెక్ట్ను ఎంచుకోండి.",
+ "selectValidationContext": "ధృవీకరణ కాంటెక్స్ట్ను ఎంచుకోండి",
+ "setAllProjectsDefault": "అన్ని-ప్రాజెక్ట్ల డిఫాల్ట్ను సెట్ చేయి",
+ "setProjectDefault": "ప్రాజెక్ట్ డిఫాల్ట్ను సెట్ చేయి",
+ "thisProject": "ఈ ప్రాజెక్ట్",
+ "title": "OpenCode డిఫాల్ట్లు",
+ "validationContext": "ధృవీకరణ కాంటెక్స్ట్"
+ },
+ "diagnostics": {
+ "copied": "డయాగ్నొస్టిక్లు కాపీ చేయబడ్డాయి",
+ "copiedShort": "కాపీ చేయబడింది",
+ "copy": "డయాగ్నొస్టిక్లను కాపీ చేయి",
+ "hints": "సూచనలు",
+ "likelyCause": "సంభావ్య కారణం:",
+ "windowsSymlinkAdminHint": "Windows: Agent Teams AI ను Administrator గా అమలు చేయండి"
+ },
+ "models": {
+ "alreadyDefault": "ఇది ఇప్పటికే ఎంచుకున్న OpenCode డిఫాల్ట్.",
+ "empty": "మోడల్లు ఏవీ కనుగొనబడలేదు.",
+ "emptyFree": "ఉచిత మోడల్లు ఏవీ కనుగొనబడలేదు.",
+ "emptyRecommended": "సిఫార్సు చేసిన మోడల్లు ఏవీ కనుగొనబడలేదు.",
+ "emptyRecommendedFree": "సిఫార్సు చేసిన ఉచిత మోడల్లు ఏవీ కనుగొనబడలేదు.",
+ "freeOnly": "ఉచితం మాత్రమే",
+ "launchableDescription": "OpenCode కాన్ఫిగ్ నుండి తెలిసిన మార్గాలు, ఉచిత అంతర్నిర్మిత మోడల్లు మరియు ప్రస్తుత డిఫాల్ట్. స్థానిక మార్గాలు టీమ్ లాంచ్లకు సిద్ధం కావడానికి విజయవంతమైన పరీక్ష అవసరం.",
+ "launchableTitle": "OpenCode మోడల్ మార్గాలు",
+ "loadingRoutes": "OpenCode మోడల్ మార్గాలను లోడ్ చేస్తోంది...",
+ "noRoutesMatch": "\"{{query}}\" కు ఏ OpenCode మోడల్ మార్గాలు సరిపోలడం లేదు.",
+ "noneReported": "ఇంకా ఏ OpenCode మోడల్ మార్గాలు నివేదించబడలేదు. OpenCode లో స్థానిక మార్గాన్ని కాన్ఫిగర్ చేయండి లేదా క్యాటలాగ్ ప్రొవైడర్లను తనిఖీ చేయడానికి Providers ట్యాబ్ను ఉపయోగించండి.",
+ "recommendedOnly": "సిఫార్సు చేసినవి మాత్రమే",
+ "searchPlaceholder": "మోడల్లను శోధించండి",
+ "selectProjectBeforeTesting": "మోడల్లను పరీక్షించడానికి ముందు ప్రాజెక్ట్ కాంటెక్స్ట్ను ఎంచుకోండి.",
+ "selectProjectBeforeTestingDefaults": "OpenCode డిఫాల్ట్లను పరీక్షించడానికి లేదా సేవ్ చేయడానికి ముందు ప్రాజెక్ట్ కాంటెక్స్ట్ను ఎంచుకోండి.",
+ "testInProgress": "మోడల్ పరీక్ష ఇప్పటికే అమలవుతోంది.",
+ "useInTeamPicker": "టీమ్ పికర్ కోసం సేవ్ చేయి",
+ "validationContextRequired": "Test మరియు Set default ను ప్రారంభించడానికి పైన ధృవీకరణ కాంటెక్స్ట్ను ఎంచుకోండి. టీమ్ పికర్ కోసం సేవ్ చేయడం కొత్త టీమ్ల కోసం మార్గాన్ని మాత్రమే నిల్వ చేస్తుంది.",
+ "actionsUnavailable": "చర్యలు తాత్కాలికంగా అందుబాటులో లేవు.",
+ "defaultSaveInProgress": "OpenCode డిఫాల్ట్ సేవ్ చేయబడుతోంది.",
+ "routeUnavailableAuth": "ఈ మోడల్ను ఉపయోగించడానికి ముందు ఈ ప్రొవైడర్కు ప్రామాణీకరణ అవసరం.",
+ "routeUnavailableFailed": "ఈ మోడల్ మార్గం దాని చివరి అమలు పరీక్షలో విఫలమైంది.",
+ "routeUnavailableGeneric": "ఈ మోడల్ మార్గాన్ని ప్రస్తుతం ఉపయోగించలేరు.",
+ "routeUnavailableUnknown": "ఈ మోడల్ ప్రస్తుత OpenCode డిఫాల్ట్, కానీ ఇది ఇంకా లైవ్ క్యాటలాగ్లో అందుబాటులో లేదు."
+ },
+ "providers": {
+ "catalog": "OpenCode ప్రొవైడర్ క్యాటలాగ్",
+ "countFallback": "OpenCode ప్రొవైడర్లు",
+ "description": "{{count}}. కనెక్ట్ చేయబడిన మరియు సిఫార్సు చేసిన ప్రొవైడర్లు మొదట చూపబడతాయి.",
+ "loadMore": "మరిన్ని ప్రొవైడర్లను లోడ్ చేయి",
+ "loading": "OpenCode ప్రొవైడర్లను లోడ్ చేస్తోంది",
+ "noMatches": "ఆ శోధనకు ఏ ప్రొవైడర్లు సరిపోలడం లేదు.",
+ "noneReported": "మేనేజ్డ్ రన్టైమ్ ద్వారా ఏ OpenCode ప్రొవైడర్లు నివేదించబడలేదు.",
+ "recommended": "సిఫార్సు చేయబడింది",
+ "refreshCatalog": "క్యాటలాగ్ను రిఫ్రెష్ చేయి",
+ "searchPlaceholder": "ప్రొవైడర్లను శోధించండి",
+ "description_few": "{{count}}. కనెక్ట్ చేయబడిన మరియు సిఫార్సు చేసిన ప్రొవైడర్లు మొదట చూపబడతాయి.",
+ "description_many": "{{count}}. కనెక్ట్ చేయబడిన మరియు సిఫార్సు చేసిన ప్రొవైడర్లు మొదట చూపబడతాయి.",
+ "description_one": "{{count}}. కనెక్ట్ చేయబడిన మరియు సిఫార్సు చేసిన ప్రొవైడర్లు మొదట చూపబడతాయి.",
+ "description_other": "{{count}}. కనెక్ట్ చేయబడిన మరియు సిఫార్సు చేసిన ప్రొవైడర్లు మొదట చూపబడతాయి."
+ },
+ "setup": {
+ "loading": "ప్రొవైడర్ సెటప్ను లోడ్ చేస్తోంది..."
+ },
+ "summary": {
+ "defaultModel": "OpenCode డిఫాల్ట్: {{model}}",
+ "loading": "మేనేజ్డ్ OpenCode రన్టైమ్, కనెక్ట్ చేయబడిన ప్రొవైడర్లు మరియు మోడల్ డిఫాల్ట్లను లోడ్ చేస్తోంది...",
+ "source": "మూలం: {{source}}",
+ "title": "OpenCode రన్టైమ్"
+ },
+ "tabs": {
+ "models": "మోడల్లు",
+ "providers": "ప్రొవైడర్లు"
+ },
+ "modelRoutes": {
+ "searchPlaceholder": "మోడల్ మార్గాలను శోధించండి"
+ },
+ "badges": {
+ "usedInTeamPicker": "టీమ్ పికర్ కోసం సేవ్ చేయబడింది",
+ "free": "ఉచితం",
+ "local": "స్థానిక",
+ "configured": "కాన్ఫిగర్ చేయబడింది",
+ "knownRoute": "తెలిసిన మార్గం",
+ "connected": "కనెక్ట్ చేయబడింది",
+ "verified": "ధృవీకరించబడింది",
+ "needsTest": "పరీక్ష అవసరం",
+ "failed": "విఫలమైంది",
+ "unknown": "తెలియదు",
+ "default": "డిఫాల్ట్"
+ },
+ "compatibleEndpoint": {
+ "baseUrlPlaceholder": "http://localhost:1234"
+ }
+ },
+ "general": {
+ "agentLanguage": {
+ "description": "ఏజెంట్ కమ్యూనికేషన్ కోసం భాష",
+ "descriptionWithDetected": "ఏజెంట్ కమ్యూనికేషన్ కోసం భాష (గుర్తించబడింది: {{detected}})",
+ "emptyMessage": "భాష ఏదీ కనుగొనబడలేదు.",
+ "label": "భాష",
+ "searchPlaceholder": "భాషను శోధించండి...",
+ "selectPlaceholder": "భాషను ఎంచుకోండి...",
+ "title": "ఏజెంట్ భాష"
+ },
+ "appLanguage": {
+ "description": "అప్లికేషన్ ఇంటర్ఫేస్ కోసం భాష.",
+ "label": "భాష",
+ "title": "యాప్ భాష"
+ },
+ "appearance": {
+ "autoExpandAIGroups": {
+ "description": "ట్రాన్స్క్రిప్ట్ తెరిచినప్పుడు లేదా కొత్త సందేశం వచ్చినప్పుడు ప్రతి ప్రతిస్పందన టర్న్ను స్వయంచాలకంగా విస్తరించు",
+ "label": "డిఫాల్ట్గా AI ప్రతిస్పందనలను విస్తరించు"
+ },
+ "nativeTitleBar": {
+ "description": "కస్టమ్ టైటిల్ బార్కు బదులుగా డిఫాల్ట్ సిస్టమ్ విండో ఫ్రేమ్ను ఉపయోగించు",
+ "label": "నేటివ్ టైటిల్ బార్ను ఉపయోగించు",
+ "restartConfirm": {
+ "confirmLabel": "పునఃప్రారంభించు",
+ "message": "టైటిల్ బార్ మార్పును వర్తింపజేయడానికి యాప్ను పునఃప్రారంభించాలి. ఇప్పుడే పునఃప్రారంభించాలా?",
+ "title": "పునఃప్రారంభం అవసరం"
+ }
+ },
+ "theme": {
+ "description": "మీకు ఇష్టమైన రంగు థీమ్ను ఎంచుకోండి",
+ "label": "థీమ్",
+ "options": {
+ "dark": "డార్క్",
+ "light": "లైట్",
+ "system": "సిస్టమ్"
+ }
+ },
+ "title": "రూపం"
+ },
+ "browserAccess": {
+ "serverMode": {
+ "description": "బ్రౌజర్ నుండి UIని యాక్సెస్ చేయడానికి లేదా iframe లలో ఎంబెడ్ చేయడానికి HTTP సర్వర్ను ప్రారంభించు",
+ "label": "సర్వర్ మోడ్ను ప్రారంభించు"
+ },
+ "title": "బ్రౌజర్ యాక్సెస్"
+ },
+ "localClaudeRoot": {
+ "actions": {
+ "selectFolder": "ఫోల్డర్ను ఎంచుకోండి",
+ "selectFolderManually": "ఫోల్డర్ను మాన్యువల్గా ఎంచుకోండి",
+ "useAutoDetect": "Auto-Detect ఉపయోగించు",
+ "useFolder": "ఫోల్డర్ను ఉపయోగించు",
+ "usePath": "మార్గాన్ని ఉపయోగించు",
+ "useThisPath": "ఈ మార్గాన్ని ఉపయోగించు",
+ "useWsl": "Linux/WSL ఉపయోగిస్తున్నారా?"
+ },
+ "confirm": {
+ "noProjectsDir": {
+ "message": "ఈ ఫోల్డర్లో \"projects\" డైరెక్టరీ లేదు. అయినా కొనసాగించాలా?",
+ "title": "projects డైరెక్టరీ కనుగొనబడలేదు"
+ },
+ "notClaudeDir": {
+ "message": "ఈ ఫోల్డర్ పేరు \"{{folderName}}\", \".claude\" కాదు. అయినా కొనసాగించాలా?",
+ "title": "ఎంచుకున్న ఫోల్డర్ .claude కాదు"
+ },
+ "noWslPaths": {
+ "message": "Claude డేటాతో WSL distros స్వయంచాలకంగా కనుగొనబడలేదు. ఫోల్డర్ను మాన్యువల్గా ఎంచుకోవాలా?",
+ "title": "WSL Claude మార్గాలు కనుగొనబడలేదు"
+ },
+ "wslNoProjectsDir": {
+ "message": "\"{{path}}\" లో \"projects\" డైరెక్టరీ లేదు. అయినా కొనసాగించాలా?",
+ "title": "WSL మార్గంలో projects డైరెక్టరీ లేదు"
+ }
+ },
+ "current": {
+ "autoDetected": "స్వయంచాలకంగా గుర్తించబడింది: {{path}}",
+ "autoDetectedPath": "స్వయంచాలకంగా గుర్తించిన మార్గాన్ని ఉపయోగిస్తోంది",
+ "customPath": "కస్టమ్ మార్గాన్ని ఉపయోగిస్తోంది",
+ "label": "ప్రస్తుత స్థానిక రూట్"
+ },
+ "description": "ఏ స్థానిక ఫోల్డర్ను మీ Claude డేటా రూట్గా పరిగణించాలో ఎంచుకోండి",
+ "errors": {
+ "detectWslFailed": "WSL Claude రూట్ మార్గాలను గుర్తించడం విఫలమైంది",
+ "loadFailed": "స్థానిక Claude రూట్ సెట్టింగ్లను లోడ్ చేయడం విఫలమైంది",
+ "updateFailed": "Claude రూట్ను అప్డేట్ చేయడం విఫలమైంది"
+ },
+ "title": "స్థానిక Claude రూట్",
+ "wslModal": {
+ "closeAriaLabel": "WSL మార్గ మోడల్ను మూసివేయి",
+ "description": "గుర్తించిన WSL పంపిణీలు మరియు Claude రూట్ అభ్యర్థులు",
+ "noProjectsDir": "projects డైరెక్టరీ గుర్తించబడలేదు",
+ "title": "WSL Claude రూట్ను ఎంచుకోండి"
+ }
+ },
+ "privacy": {
+ "telemetry": {
+ "description": "అనామక క్రాష్ మరియు పనితీరు డేటాను పంపడం ద్వారా యాప్ను మెరుగుపరచడంలో సహాయం చేయండి",
+ "label": "క్రాష్ నివేదికలను పంపు"
+ },
+ "title": "గోప్యత"
+ },
+ "server": {
+ "runningOn": "దీనిపై రన్ అవుతోంది",
+ "standaloneModeDescription": "స్టాండ్అలోన్ మోడ్లో రన్ అవుతోంది. HTTP సర్వర్ ఎల్లప్పుడూ క్రియాశీలంగా ఉంటుంది. సిస్టమ్ నోటిఫికేషన్లు అందుబాటులో లేవు - నోటిఫికేషన్ ట్రిగ్గర్లు యాప్లో మాత్రమే లాగ్ చేయబడతాయి.",
+ "title": "సర్వర్"
+ },
+ "startup": {
+ "launchAtLogin": {
+ "description": "మీరు లాగిన్ అయినప్పుడు యాప్ను స్వయంచాలకంగా ప్రారంభించు",
+ "label": "లాగిన్లో లాంచ్ చేయి"
+ },
+ "showDockIcon": {
+ "description": "డాక్లో యాప్ ఐకాన్ను చూపించు (macOS)",
+ "label": "డాక్ ఐకాన్ను చూపించు"
+ },
+ "title": "స్టార్టప్"
+ }
+ },
+ "notifications": {
+ "dev": {
+ "descriptionPrefix": "డెవలప్మెంట్ మోడ్లో నోటిఫికేషన్లు పనిచేయకపోవచ్చు. macOS యాప్ను \"Electron\" గా గుర్తిస్తుంది (bundle ID",
+ "descriptionSuffix": ") ప్రొడక్షన్ యాప్ పేరుకు బదులుగా. అనుమతులను ధృవీకరించడానికి System Settings > Notifications > Electron ను తనిఖీ చేయండి.",
+ "title": "డెవ్ మోడ్"
+ },
+ "ignoredRepositories": {
+ "description": "ఈ రిపోజిటరీల నుండి నోటిఫికేషన్లు విస్మరించబడతాయి",
+ "empty": "ఏ రిపోజిటరీలు విస్మరించబడలేదు",
+ "selectPlaceholder": "విస్మరించడానికి రిపోజిటరీని ఎంచుకోండి...",
+ "title": "విస్మరించిన రిపోజిటరీలు"
+ },
+ "settings": {
+ "enabled": {
+ "description": "లోపాలు మరియు ఈవెంట్ల కోసం సిస్టమ్ నోటిఫికేషన్లను చూపించు",
+ "label": "సిస్టమ్ నోటిఫికేషన్లను ప్రారంభించు"
+ },
+ "sound": {
+ "description": "నోటిఫికేషన్లు కనిపించినప్పుడు ధ్వనిని ప్లే చేయి",
+ "label": "ధ్వనిని ప్లే చేయి"
+ },
+ "subagentErrors": {
+ "description": "సబ్ఏజెంట్ సెషన్లలో లోపాలను గుర్తించి తెలియజేయి",
+ "label": "సబ్ఏజెంట్ లోపాలను చేర్చు"
+ },
+ "title": "నోటిఫికేషన్ సెట్టింగ్లు"
+ },
+ "snooze": {
+ "clear": "స్నూజ్ను క్లియర్ చేయి",
+ "description": "నోటిఫికేషన్లను తాత్కాలికంగా పాజ్ చేయి",
+ "descriptionWithTime": "{{time}} వరకు స్నూజ్ చేయబడింది",
+ "label": "నోటిఫికేషన్లను స్నూజ్ చేయి",
+ "options": {
+ "15": "15 నిమిషాలు",
+ "30": "30 నిమిషాలు",
+ "60": "1 గంట",
+ "120": "2 గంటలు",
+ "240": "4 గంటలు",
+ "-1": "రేపటి వరకు"
+ },
+ "selectDuration": "వ్యవధిని ఎంచుకోండి..."
+ },
+ "taskCompletion": {
+ "description": "Claude టాస్క్లను పూర్తి చేసినప్పుడు నేటివ్ OS నోటిఫికేషన్లను పొందండి - ధ్వనులు, బ్యానర్లు మరియు Dock/taskbar బ్యాడ్జ్లు. macOS, Linux మరియు Windows లో పనిచేస్తుంది.",
+ "installPlugin": "claude-notifications-go ప్లగిన్ను ఇన్స్టాల్ చేయి",
+ "title": "టాస్క్ పూర్తి నోటిఫికేషన్లు"
+ },
+ "team": {
+ "allTasksCompleted": {
+ "description": "ఒక టీమ్లోని ప్రతి టాస్క్ పూర్తయిన స్థితికి చేరినప్పుడు తెలియజేయి",
+ "label": "అన్ని టాస్క్లు పూర్తయ్యాయి"
+ },
+ "autoResumeOnRateLimit": {
+ "description": "Claude రీసెట్ సమయాన్ని నివేదించినప్పుడు, పరిమితి రీసెట్ అయిన తర్వాత టీమ్ లీడ్కు ఫాలో-అప్ నడ్జ్ను షెడ్యూల్ చేయి",
+ "label": "రేట్ పరిమితి తర్వాత ఆటో-రెజ్యూమ్"
+ },
+ "clarifications": {
+ "description": "ఒక టాస్క్కు మీ ఇన్పుట్ అవసరమైనప్పుడు నేటివ్ OS నోటిఫికేషన్లను చూపించు",
+ "label": "టాస్క్ స్పష్టీకరణ నోటిఫికేషన్లు"
+ },
+ "crossTeamMessage": {
+ "description": "మరో టీమ్ నుండి సందేశం వచ్చినప్పుడు తెలియజేయి",
+ "label": "క్రాస్-టీమ్ సందేశ నోటిఫికేషన్లు"
+ },
+ "leadInbox": {
+ "description": "టీమ్మేట్లు టీమ్ లీడ్కు సందేశాలు పంపినప్పుడు తెలియజేయి",
+ "label": "లీడ్ ఇన్బాక్స్ నోటిఫికేషన్లు"
+ },
+ "statusChange": {
+ "description": "ఒక టాస్క్ స్థితి మారినప్పుడు నేటివ్ OS నోటిఫికేషన్లను చూపించు",
+ "label": "టాస్క్ స్థితి మార్పు నోటిఫికేషన్లు",
+ "onlySolo": {
+ "description": "టీమ్లో టీమ్మేట్లు లేనప్పుడు మాత్రమే తెలియజేయి",
+ "label": "సోలో మోడ్లో మాత్రమే"
+ },
+ "statuses": {
+ "description": "ఏ లక్ష్య స్థితులు నోటిఫికేషన్ను ట్రిగ్గర్ చేస్తాయి",
+ "label": "ఈ స్థితులపై తెలియజేయి",
+ "options": {
+ "approved": "ఆమోదించబడింది",
+ "completed": "పూర్తయింది",
+ "deleted": "తొలగించబడింది",
+ "in_progress": "ప్రారంభమైంది",
+ "needsFix": "సరిదిద్దాలి",
+ "pending": "పెండింగ్",
+ "review": "సమీక్ష"
+ }
+ }
+ },
+ "taskComments": {
+ "description": "ఏజెంట్లు టాస్క్లపై వ్యాఖ్యానించినప్పుడు నేటివ్ OS నోటిఫికేషన్లను చూపించు",
+ "label": "టాస్క్ వ్యాఖ్య నోటిఫికేషన్లు"
+ },
+ "taskCreated": {
+ "description": "కొత్త టాస్క్ సృష్టించబడినప్పుడు నేటివ్ OS నోటిఫికేషన్లను చూపించు",
+ "label": "టాస్క్ సృష్టి నోటిఫికేషన్లు"
+ },
+ "teamLaunched": {
+ "description": "ఒక టీమ్ లాంచ్ పూర్తి చేసి సిద్ధంగా ఉన్నప్పుడు తెలియజేయి",
+ "label": "టీమ్ లాంచ్ నోటిఫికేషన్లు"
+ },
+ "title": "టీమ్ నోటిఫికేషన్లు",
+ "toolApproval": {
+ "description": "యాప్ ఫోకస్లో లేనప్పుడు ఒక టూల్కు మీ ఆమోదం (Allow/Deny) అవసరమైనప్పుడు తెలియజేయి",
+ "label": "టూల్ ఆమోద నోటిఫికేషన్లు"
+ },
+ "userInbox": {
+ "description": "టీమ్మేట్లు మీకు సందేశాలు పంపినప్పుడు తెలియజేయి",
+ "label": "యూజర్ ఇన్బాక్స్ నోటిఫికేషన్లు"
+ }
+ },
+ "test": {
+ "action": "పరీక్ష పంపు",
+ "description": "డెలివరీని ధృవీకరించడానికి పరీక్ష నోటిఫికేషన్ను పంపు",
+ "failedToSend": "పరీక్ష నోటిఫికేషన్ను పంపడం విఫలమైంది",
+ "label": "పరీక్ష నోటిఫికేషన్",
+ "sending": "పంపుతోంది...",
+ "sent": "పంపబడింది!",
+ "unknownError": "తెలియని లోపం"
+ }
+ },
+ "advanced": {
+ "about": {
+ "appIconAlt": "యాప్ ఐకాన్",
+ "description": "సమాంతరంగా స్వయంప్రతిపత్తితో పనిచేసే, టీమ్ల మధ్య కమ్యూనికేట్ చేసే మరియు kanban బోర్డుపై టాస్క్లను నిర్వహించే AI ఏజెంట్ టీమ్లను అసెంబుల్ చేయండి - అంతర్నిర్మిత కోడ్ సమీక్ష, లైవ్ ప్రాసెస్ పర్యవేక్షణ మరియు పూర్తి టూల్ దృశ్యమానతతో.",
+ "standalone": "స్టాండ్అలోన్",
+ "title": "గురించి",
+ "version": "వెర్షన్ {{version}}"
+ },
+ "configuration": {
+ "editConfig": "కాన్ఫిగ్ సవరించు",
+ "exportConfig": "కాన్ఫిగ్ ఎగుమతి చేయి",
+ "importConfig": "కాన్ఫిగ్ దిగుమతి చేయి",
+ "openInEditor": "ఎడిటర్లో తెరువు",
+ "resetToDefaults": "డిఫాల్ట్లకు రీసెట్ చేయి",
+ "title": "కాన్ఫిగరేషన్"
+ },
+ "updates": {
+ "available": "v{{version}} అందుబాటులో ఉంది",
+ "check": "అప్డేట్ల కోసం తనిఖీ చేయి",
+ "checking": "తనిఖీ చేస్తోంది...",
+ "ready": "అప్డేట్ సిద్ధం",
+ "unknownVersion": "తెలియదు",
+ "upToDate": "తాజాగా ఉంది"
+ },
+ "appName": "Agent Teams AI"
+ },
+ "configEditor": {
+ "errors": {
+ "loadFailed": "కాన్ఫిగ్ను లోడ్ చేయడం విఫలమైంది",
+ "saveFailed": "కాన్ఫిగ్ను సేవ్ చేయడం విఫలమైంది"
+ },
+ "footer": {
+ "autoSave": "సవరించిన తర్వాత మార్పులు స్వయంచాలకంగా సేవ్ అవుతాయి",
+ "toClose": "మూసివేయడానికి",
+ "escapeKey": "Esc"
+ },
+ "loading": "కాన్ఫిగ్ను లోడ్ చేస్తోంది...",
+ "status": {
+ "invalidJson": "చెల్లని JSON",
+ "saveFailed": "సేవ్ విఫలమైంది",
+ "saved": "సేవ్ చేయబడింది",
+ "saving": "సేవ్ చేస్తోంది..."
+ },
+ "title": "కాన్ఫిగరేషన్ సవరించు"
+ },
+ "notificationTriggers": {
+ "add": {
+ "cancel": "రద్దు చేయి",
+ "submit": "ట్రిగ్గర్ జోడించు",
+ "title": "కస్టమ్ ట్రిగ్గర్ జోడించు"
+ },
+ "builtin": {
+ "description": "అప్లికేషన్తో వచ్చే డిఫాల్ట్ ట్రిగ్గర్లు. మీరు వాటిని ప్రారంభించవచ్చు లేదా నిలిపివేయవచ్చు మరియు వాటి నమూనాలను అనుకూలీకరించవచ్చు.",
+ "title": "అంతర్నిర్మిత ట్రిగ్గర్లు"
+ },
+ "card": {
+ "builtinBadge": "అంతర్నిర్మిత",
+ "collapseAriaLabel": "కుదించు",
+ "deleteAriaLabel": "ట్రిగ్గర్ను తొలగించు",
+ "editNameAriaLabel": "పేరును సవరించు",
+ "expandAriaLabel": "విస్తరించు"
+ },
+ "color": {
+ "customHexTitle": "కస్టమ్ hex రంగు",
+ "invalidHex": "చెల్లని hex"
+ },
+ "configuration": {
+ "alertIfGreaterThan": "దీని కంటే ఎక్కువైతే అలర్ట్ చేయి >",
+ "emptyPatternHint": "అన్ని కంటెంట్తో సరిపోల్చడానికి ఖాళీగా ఉంచండి. JavaScript regex సింటాక్స్ను ఉపయోగిస్తుంది.",
+ "errorStatusDescription": "ఒక టూల్ అమలు లోపాన్ని నివేదించినప్పుడు ట్రిగ్గర్ అవుతుంది (is_error: true).",
+ "tokensUnit": "టోకెన్లు",
+ "matchPatternPlaceholder": "ఉదా., error|failed|exception"
+ },
+ "custom": {
+ "description": "నిర్దిష్ట నమూనాలు లేదా టూల్ అవుట్పుట్ల కోసం తెలియజేయడానికి మీ స్వంత ట్రిగ్గర్లను సృష్టించండి.",
+ "empty": "ఇంకా ఏ కస్టమ్ ట్రిగ్గర్లు కాన్ఫిగర్ చేయబడలేదు.",
+ "title": "కస్టమ్ ట్రిగ్గర్లు"
+ },
+ "errors": {
+ "invalidRegexPattern": "చెల్లని regex నమూనా"
+ },
+ "fields": {
+ "contentType": "కంటెంట్ రకం",
+ "matchField": "మ్యాచ్ ఫీల్డ్",
+ "matchPattern": "మ్యాచ్ నమూనా (Regex)",
+ "scopeToolName": "స్కోప్ / టూల్ పేరు",
+ "scopeToolNameOptional": "స్కోప్ / టూల్ పేరు (ఐచ్ఛికం)",
+ "threshold": "థ్రెషోల్డ్",
+ "tokenType": "టోకెన్ రకం",
+ "triggerNamePlaceholder": "ఉదా., బిల్డ్ ఫెయిల్యూర్ అలర్ట్",
+ "triggerNameRequired": "ట్రిగ్గర్ పేరు *"
+ },
+ "ignorePatterns": {
+ "hint": "జోడించడానికి Enter నొక్కండి. ఏదైనా నమూనా సరిపోలితే నోటిఫికేషన్ దాటవేయబడుతుంది.",
+ "placeholder": "ఇగ్నోర్ regex జోడించండి...",
+ "removeAriaLabel": "ఇగ్నోర్ నమూనాను తీసివేయి",
+ "summary": "ఆధునిక: మినహాయింపు నియమాలు",
+ "title": "ఇగ్నోర్ నమూనాలు (సరిపోలితే దాటవేయి)"
+ },
+ "options": {
+ "contentTypes": {
+ "text": "టెక్స్ట్ అవుట్పుట్",
+ "thinking": "ఆలోచన",
+ "tool_result": "టూల్ ఫలితం",
+ "tool_use": "టూల్ వినియోగం"
+ },
+ "matchFields": {
+ "args": "ఆర్గ్యుమెంట్లు",
+ "command": "కమాండ్",
+ "content": "కంటెంట్",
+ "description": "వివరణ",
+ "file_path": "ఫైల్ మార్గం",
+ "fullInput": "పూర్తి ఇన్పుట్ (JSON)",
+ "glob": "Glob ఫిల్టర్",
+ "new_string": "కొత్త స్ట్రింగ్",
+ "old_string": "పాత స్ట్రింగ్",
+ "path": "మార్గం",
+ "pattern": "నమూనా",
+ "prompt": "ప్రాంప్ట్",
+ "query": "క్వెరీ",
+ "skill": "నైపుణ్యం పేరు",
+ "subagent_type": "సబ్ఏజెంట్ రకం",
+ "text": "టెక్స్ట్ కంటెంట్",
+ "thinking": "ఆలోచన కంటెంట్",
+ "url": "URL"
+ },
+ "modes": {
+ "content_match": "కంటెంట్ నమూనా",
+ "error_status": "అమలు లోపం",
+ "token_threshold": "అధిక టోకెన్ వినియోగం"
+ },
+ "tokenTypes": {
+ "input": "ఇన్పుట్ టోకెన్లు",
+ "output": "అవుట్పుట్ టోకెన్లు",
+ "total": "మొత్తం టోకెన్లు"
+ },
+ "toolNames": {
+ "anyTool": "ఏదైనా టూల్"
+ }
+ },
+ "preview": {
+ "defaultTestTriggerName": "పరీక్ష ట్రిగ్గర్",
+ "detectedSuffix": "లోపాలు గుర్తించబడేవి",
+ "more": "...మరియు {{count}} మరిన్ని",
+ "more_few": "...మరియు {{count}} మరిన్ని",
+ "more_many": "...మరియు {{count}} మరిన్ని",
+ "more_one": "...మరియు {{count}} మరింత",
+ "more_other": "...మరియు {{count}} మరిన్ని",
+ "testTrigger": "పరీక్ష ట్రిగ్గర్",
+ "testing": "పరీక్షిస్తోంది...",
+ "title": "ప్రివ్యూ",
+ "truncatedWarning": "శోధన ముందుగానే ఆగిపోయింది (టైమ్అవుట్ లేదా కౌంట్ పరిమితి). వాస్తవ సరిపోలికలు ఎక్కువగా ఉండవచ్చు.",
+ "viewSession": "సెషన్ను చూడండి"
+ },
+ "repositoryScope": {
+ "empty": "ఏ రిపోజిటరీలు ఎంచుకోబడలేదు - ట్రిగ్గర్ అన్ని రిపోజిటరీలకు వర్తిస్తుంది",
+ "hint": "రిపోజిటరీలు ఎంచుకోబడినప్పుడు, ఈ ట్రిగ్గర్ ఆ రిపోజిటరీలలోని లోపాలకు మాత్రమే ఫైర్ అవుతుంది.",
+ "placeholder": "జోడించడానికి రిపోజిటరీని ఎంచుకోండి...",
+ "summary": "ఆధునిక: రిపోజిటరీ స్కోప్",
+ "title": "రిపోజిటరీలకు పరిమితం చేయి (ఎంచుకున్న రిపోజిటరీలకు మాత్రమే వర్తిస్తుంది)"
+ },
+ "sections": {
+ "configuration": "కాన్ఫిగరేషన్",
+ "dotColor": "డాట్ రంగు",
+ "generalInfo": "సాధారణ సమాచారం",
+ "triggerCondition": "ట్రిగ్గర్ షరతు"
+ }
+ },
+ "workspaceProfiles": {
+ "actions": {
+ "addProfile": "ప్రొఫైల్ జోడించు",
+ "cancel": "రద్దు చేయి",
+ "deleteProfile": "ప్రొఫైల్ను తొలగించు",
+ "editProfile": "ప్రొఫైల్ను సవరించు",
+ "save": "సేవ్ చేయి"
+ },
+ "authMethods": {
+ "agent": "SSH Agent",
+ "auto": "Auto (SSH Config నుండి)",
+ "password": "పాస్వర్డ్",
+ "privateKey": "ప్రైవేట్ కీ"
+ },
+ "deleteConfirm": {
+ "confirmLabel": "తొలగించు",
+ "message": "మీరు \"{{name}}\" ను తొలగించాలనుకుంటున్నారని ఖచ్చితంగా ఉన్నారా? దీన్ని రద్దు చేయలేరు.",
+ "title": "ప్రొఫైల్ను తొలగించు"
+ },
+ "description": "త్వరిత పునఃకనెక్షన్ కోసం SSH కనెక్షన్ ప్రొఫైల్లను సేవ్ చేయండి",
+ "empty": {
+ "description": "త్వరగా కనెక్ట్ చేయడానికి SSH ప్రొఫైల్ను జోడించండి",
+ "title": "సేవ్ చేసిన ప్రొఫైల్లు లేవు"
+ },
+ "form": {
+ "authentication": "ప్రామాణీకరణ",
+ "host": "హోస్ట్",
+ "name": "పేరు",
+ "passwordPrompt": "కనెక్ట్ చేసేటప్పుడు మీకు పాస్వర్డ్ కోసం ప్రాంప్ట్ చేయబడుతుంది.",
+ "port": "పోర్ట్",
+ "privateKeyPath": "ప్రైవేట్ కీ మార్గం",
+ "username": "యూజర్నేమ్",
+ "namePlaceholder": "నా సర్వర్",
+ "hostPlaceholder": "హోస్ట్నేమ్ లేదా IP",
+ "usernamePlaceholder": "యూజర్"
+ },
+ "loading": "ప్రొఫైల్లను లోడ్ చేస్తోంది...",
+ "title": "వర్క్స్పేస్ ప్రొఫైల్లు"
+ },
+ "connection": {
+ "actions": {
+ "connect": "కనెక్ట్ చేయి",
+ "connecting": "కనెక్ట్ అవుతోంది...",
+ "disconnect": "డిస్కనెక్ట్ చేయి",
+ "testConnection": "కనెక్షన్ను పరీక్షించు",
+ "testing": "పరీక్షిస్తోంది..."
+ },
+ "currentMode": {
+ "description": "సెషన్ ఫైల్ల కోసం డేటా మూలం",
+ "label": "ప్రస్తుత మోడ్",
+ "local": "స్థానిక ({{path}})"
+ },
+ "description": "అక్కడ రన్ అవుతున్న Claude Code సెషన్లను చూడటానికి రిమోట్ మెషీన్కు కనెక్ట్ చేయండి",
+ "form": {
+ "authentication": "ప్రామాణీకరణ",
+ "host": "హోస్ట్",
+ "password": "పాస్వర్డ్",
+ "port": "పోర్ట్",
+ "privateKeyPath": "ప్రైవేట్ కీ మార్గం",
+ "username": "యూజర్నేమ్",
+ "hostPlaceholder": "హోస్ట్నేమ్ లేదా SSH config అలియాస్",
+ "usernamePlaceholder": "యూజర్"
+ },
+ "savedProfiles": {
+ "title": "సేవ్ చేసిన ప్రొఫైల్లు"
+ },
+ "ssh": {
+ "title": "SSH కనెక్షన్"
+ },
+ "status": {
+ "connectedTo": "{{host}} కు కనెక్ట్ చేయబడింది",
+ "remoteSessions": "SSH ద్వారా రిమోట్ సెషన్లను చూస్తోంది"
+ },
+ "test": {
+ "failed": "కనెక్షన్ విఫలమైంది: {{error}}",
+ "success": "కనెక్షన్ విజయవంతమైంది",
+ "unknownError": "తెలియని లోపం"
+ },
+ "title": "రిమోట్ కనెక్షన్"
+ },
+ "providerRuntime": {
+ "actions": {
+ "cancel": "రద్దు చేయి",
+ "cancelLogin": "లాగిన్ను రద్దు చేయి",
+ "connectChatGpt": "ChatGPT ను కనెక్ట్ చేయి",
+ "delete": "తొలగించు",
+ "disable": "నిలిపివేయి",
+ "disconnectAccount": "ఖాతాను డిస్కనెక్ట్ చేయి",
+ "generateLink": "లింక్ జనరేట్ చేయి",
+ "openLogin": "లాగిన్ తెరువు",
+ "reconnectAnthropic": "Anthropic ను మళ్లీ కనెక్ట్ చేయి",
+ "refresh": "రిఫ్రెష్ చేయి",
+ "replaceKey": "కీని భర్తీ చేయి",
+ "saveEndpoint": "ఎండ్పాయింట్ను సేవ్ చేయి",
+ "saveKey": "కీని సేవ్ చేయి",
+ "saving": "సేవ్ చేస్తోంది...",
+ "setApiKey": "API కీని సెట్ చేయి",
+ "updateKey": "కీని అప్డేట్ చేయి",
+ "useCode": "కోడ్ ఉపయోగించు"
+ },
+ "apiKey": {
+ "loadingStoredCredentials": "నిల్వ చేసిన ఆధారాలను లోడ్ చేస్తోంది...",
+ "projectScope": "ప్రాజెక్ట్",
+ "scope": "స్కోప్",
+ "storedIn": "{{backend}} లో నిల్వ చేయబడింది",
+ "userScope": "యూజర్",
+ "storedInApp": "యాప్లో నిల్వ చేయబడింది",
+ "providers": {
+ "anthropic": {
+ "name": "Anthropic API కీ",
+ "title": "API కీ",
+ "description": "API-బిల్డ్ యాక్సెస్ కోసం నేరుగా Anthropic API కీని ఉపయోగించండి. మీరు తిరిగి మారినప్పుడు మీ Anthropic సబ్స్క్రిప్షన్ సెషన్ అందుబాటులో ఉంటుంది.",
+ "placeholder": "sk-ant-..."
+ },
+ "codex": {
+ "name": "Codex API కీ",
+ "title": "API కీ",
+ "description": "OpenAI API కీని ద్వితీయ Codex auth మార్గంగా ఉపయోగించండి. మీరు Codex ను API కీ మోడ్కు మారిస్తే, నేటివ్ లాంచ్ల కోసం యాప్ OPENAI_API_KEY ను CODEX_API_KEY లోకి మిర్రర్ చేస్తుంది.",
+ "placeholder": "sk-proj-..."
+ },
+ "gemini": {
+ "name": "Gemini API కీ",
+ "title": "API యాక్సెస్",
+ "description": "Gemini API బ్యాకెండ్ కోసం `GEMINI_API_KEY` ను ఉపయోగించండి. CLI SDK మరియు ADC కు ఇది అవసరం లేదు.",
+ "placeholder": "AIza..."
+ }
+ }
+ },
+ "codex": {
+ "account": {
+ "appServer": "App-server: {{state}}",
+ "connected": "కనెక్ట్ చేయబడింది",
+ "description": "సబ్స్క్రిప్షన్-ఆధారిత నేటివ్ లాంచ్లకు శక్తినిచ్చే స్థానిక Codex app-server ఖాతా సెషన్ను నిర్వహించండి.",
+ "loginInProgress": "లాగిన్ ప్రోగ్రెస్లో",
+ "plan": "ప్లాన్: {{plan}}",
+ "reconnectRequired": "మళ్లీ కనెక్ట్ చేయడం అవసరం",
+ "title": "ChatGPT ఖాతా",
+ "hints": {
+ "autoUsesApiKeyUntilChatgpt": "{{message}} ChatGPT కనెక్ట్ అయ్యే వరకు Auto గుర్తించిన API కీని ఉపయోగిస్తూనే ఉంటుంది.",
+ "detectedApiKeyNeedsApiMode": "{{message}} మీరు Codex ను API కీ మోడ్కు మార్చిన తర్వాతే గుర్తించిన API కీ ఉపయోగించబడుతుంది.",
+ "localArtifactsNoSession": "Codex CLI ప్రస్తుతం క్రియాశీల ChatGPT ఖాతా లేదని నివేదిస్తోంది. స్థానిక Codex ఖాతా డేటా ఉంది, కానీ క్రియాశీల మేనేజ్డ్ సెషన్ ఏదీ ఎంపిక చేయబడలేదు. Codex CLI దాన్ని చూసిన తర్వాతే వినియోగ పరిమితులు ఇక్కడ కనిపిస్తాయి.",
+ "noActiveAccount": "Codex CLI ప్రస్తుతం క్రియాశీల ChatGPT ఖాతా లేదని నివేదిస్తోంది. Codex CLI ఒకదాన్ని చూసిన తర్వాతే వినియోగ పరిమితులు ఇక్కడ కనిపిస్తాయి.",
+ "reconnectBeforeUsage": "Codex కు స్థానికంగా ఎంచుకున్న ChatGPT ఖాతా ఉంది, కానీ ఇక్కడ వినియోగ పరిమితులు లోడ్ కావడానికి ముందు ప్రస్తుత సెషన్కు మళ్లీ కనెక్ట్ చేయాలి.",
+ "usageLimitsAfterReport": "కనెక్ట్ చేయబడిన ChatGPT ఖాతా కోసం Codex నివేదించిన తర్వాత వినియోగ పరిమితులు ఇక్కడ కనిపిస్తాయి."
+ }
+ },
+ "install": {
+ "checking": "తనిఖీ చేస్తోంది",
+ "downloading": "డౌన్లోడ్ చేస్తోంది",
+ "installCli": "Codex CLI ను ఇన్స్టాల్ చేయి",
+ "installing": "ఇన్స్టాల్ చేస్తోంది",
+ "retryInstall": "ఇన్స్టాల్ మళ్లీ ప్రయత్నించు",
+ "title": "యాప్ డేటాలోకి Codex CLI ను ఇన్స్టాల్ చేయి"
+ },
+ "rateLimits": {
+ "credits": "క్రెడిట్లు",
+ "creditsDescription": "క్రెడిట్లు విండో-ఆధారిత సబ్స్క్రిప్షన్ వినియోగం నుండి వేరుగా చూపబడతాయి మరియు ప్లాన్-ఆధారిత ChatGPT సెషన్ల కోసం అందుబాటులో ఉండకపోవచ్చు.",
+ "noSecondaryWindow": "ఈ ఖాతా స్నాప్షాట్ కోసం Codex ద్వితీయ విండోను తిరిగి ఇవ్వలేదు.",
+ "notReported": "నివేదించబడలేదు",
+ "primaryReset": "ప్రాథమిక రీసెట్",
+ "primaryUsed": "ప్రాథమికం ఉపయోగించబడింది",
+ "primaryWindow": "ప్రాథమిక విండో",
+ "remainingLeft": "{{value}} మిగిలి ఉంది",
+ "remainingUnknown": "మిగిలినవి తెలియదు",
+ "secondaryReset": "ద్వితీయ రీసెట్",
+ "secondaryUsed": "ద్వితీయం ఉపయోగించబడింది",
+ "secondaryWindow": "ద్వితీయ విండో",
+ "usedQuotaNote": "ఈ శాతాలు ఉపయోగించిన కోటాను చూపిస్తాయి, మిగిలిన కోటాను కాదు.",
+ "weeklyReset": "వారపు రీసెట్",
+ "weeklyUsed": "వారానికి ఉపయోగించబడింది",
+ "weeklyUsedOneWeek": "వారానికి ఉపయోగించబడింది (1w)",
+ "weeklyWindow": "వారపు విండో",
+ "secondaryFallback": "ద్వితీయ",
+ "secondaryWindowNote": " వారపు పరిమితులు {{window}} విండోలో వేరుగా చూపబడతాయి.",
+ "usageExplanationGeneric": "ఉపయోగించిన కోటాను చూపిస్తుంది, మిగిలిన కోటాను కాదు.",
+ "usageExplanationWindowOnly": "ప్రస్తుత {{window}} విండోలో ఉపయోగించిన కోటాను చూపిస్తుంది, మిగిలిన కోటాను కాదు.",
+ "usageExplanationWithRemaining": "{{used}} ఉపయోగించబడింది - ప్రస్తుత {{window}} విండోలో సుమారు {{remaining}} మిగిలి ఉంది."
+ }
+ },
+ "compatibleEndpoint": {
+ "authToken": "Auth టోకెన్",
+ "authTokenMissing": "Auth టోకెన్ కాన్ఫిగర్ చేయబడలేదు.",
+ "baseUrl": "బేస్ URL",
+ "description": "Anthropic-అనుకూల స్థానిక రన్టైమ్ ఎండ్పాయింట్ను ఉపయోగించండి.",
+ "keepSavedToken": "సేవ్ చేసిన టోకెన్ను ఉంచడానికి ఖాళీగా ఉంచండి",
+ "title": "స్థానిక / అనుకూల ఎండ్పాయింట్",
+ "tokenStatus": "టోకెన్ {{status}}",
+ "validation": {
+ "baseUrlRequired": "బేస్ URL అవసరం",
+ "firstPartyAnthropic": "ఫస్ట్-పార్టీ Anthropic కోసం Auto, Subscription లేదా API కీని ఉపయోగించండి",
+ "httpRequired": "బేస్ URL తప్పనిసరిగా http:// లేదా https:// ను ఉపయోగించాలి",
+ "invalidUrl": "చెల్లని URL",
+ "noCredentials": "బేస్ URL ఆధారాలను కలిగి ఉండకూడదు"
+ },
+ "status": {
+ "endpointDisabledTokenKept": "ఎండ్పాయింట్ నిలిపివేయబడింది. సేవ్ చేసిన టోకెన్ ఉంచబడింది.",
+ "endpointSaved": "ఎండ్పాయింట్ సేవ్ చేయబడింది",
+ "endpointSavedTokenMissing": "ఎండ్పాయింట్ సేవ్ చేయబడింది. Auth టోకెన్ కాన్ఫిగర్ చేయబడలేదు."
+ }
+ },
+ "connection": {
+ "authenticationMethod": "ప్రామాణీకరణ పద్ధతి",
+ "descriptions": {
+ "anthropic": "యాప్-లాంచ్ చేసిన Anthropic సెషన్లు ఎలా ప్రామాణీకరించాలో ఎంచుకోండి.",
+ "codex": "నేటివ్ రన్టైమ్ లాంచ్ అయినప్పుడు Codex మీ ChatGPT సబ్స్క్రిప్షన్ను లేదా API కీని ఇష్టపడాలో ఎంచుకోండి.",
+ "gemini": "ఐచ్ఛిక API యాక్సెస్ను కాన్ఫిగర్ చేయండి. CLI SDK మరియు ADC ఇంకా స్వయంచాలకంగా కనుగొనబడతాయి.",
+ "opencode": "OpenCode ప్రామాణీకరణ మరియు ప్రొవైడర్ ఇన్వెంటరీ OpenCode రన్టైమ్ ద్వారా నిర్వహించబడతాయి."
+ },
+ "method": "కనెక్షన్ పద్ధతి",
+ "mode": "మోడ్: {{mode}}",
+ "selected": "ఎంచుకోబడింది",
+ "switching": "మారుతోంది...",
+ "title": "కనెక్షన్"
+ },
+ "connectionCards": {
+ "apiKey": {
+ "title": "API కీ"
+ },
+ "anthropic": {
+ "apiKeyDescription": "ANTHROPIC_API_KEY మరియు Anthropic API బిల్లింగ్ను ఉపయోగించండి.",
+ "autoDescription": "Anthropic రన్టైమ్ డిఫాల్ట్లు మరియు అందుబాటులో ఉన్న ఉత్తమ స్థానిక ఆధారాన్ని ఉపయోగించండి.",
+ "hint": "Auto Anthropic ను దాని డిఫాల్ట్ స్థానిక ఆధార పరిష్కారంపై ఉంచుతుంది.",
+ "subscriptionDescription": "మీ స్థానిక Anthropic సైన్-ఇన్ సెషన్ మరియు సబ్స్క్రిప్షన్ యాక్సెస్ను ఉపయోగించండి.",
+ "subscriptionTitle": "Anthropic సబ్స్క్రిప్షన్"
+ },
+ "auto": {
+ "title": "Auto"
+ },
+ "codex": {
+ "apiKeyDescription": "నేటివ్ Codex లాంచ్ల కోసం OPENAI_API_KEY మరియు CODEX_API_KEY బిల్లింగ్ను ఉపయోగించండి.",
+ "autoDescription": "మీ ChatGPT ఖాతా మరియు సబ్స్క్రిప్షన్ను ఇష్టపడండి. అవసరమైతే మాత్రమే API కీ మోడ్ను ఉపయోగించండి.",
+ "chatgptDescription": "మీ కనెక్ట్ చేసిన ChatGPT ఖాతా మరియు Codex సబ్స్క్రిప్షన్ను ఉపయోగించండి.",
+ "chatgptTitle": "ChatGPT ఖాతా",
+ "hint": "Codex ఎల్లప్పుడూ నేటివ్ రన్టైమ్ ద్వారా రన్ అవుతుంది. API-కీ ఆధారాలకు ఫాల్బ్యాక్ కావడానికి ముందు Auto మీ ChatGPT ఖాతాను ఇష్టపడుతుంది."
+ }
+ },
+ "description": "ప్రతి ప్రొవైడర్ ఎలా కనెక్ట్ అవుతుందో మరియు మద్దతు ఉన్నప్పుడు, మల్టీమోడల్ రన్టైమ్ ఏ బ్యాకెండ్ను ఉపయోగించాలో నిర్వహించండి.",
+ "fastMode": {
+ "defaultOff": "డిఫాల్ట్గా ఆఫ్",
+ "description": "పరిష్కరించబడిన మోడల్ మరియు రన్టైమ్ అనుమతించినప్పుడు కొత్త Anthropic టీమ్ లాంచ్లకు డిఫాల్ట్గా Claude Code Fast మోడ్ను వర్తింపజేయండి.",
+ "disabledHint": "ఒక టీమ్ స్పష్టంగా Fast మోడ్ను ప్రారంభించకపోతే కొత్త Anthropic లాంచ్లు సాధారణ వేగంలోనే ఉంటాయి.",
+ "enabledHint": "పరిష్కరించబడిన మోడల్ మద్దతిస్తే కొత్త Anthropic లాంచ్లు డిఫాల్ట్గా Fast మోడ్ను అభ్యర్థిస్తాయి.",
+ "notExposed": "ఈ Anthropic రన్టైమ్ Fast మోడ్ను బహిర్గతం చేయదు.",
+ "preferFast": "Fast ను ఇష్టపడు",
+ "title": "Fast మోడ్ డిఫాల్ట్",
+ "unavailableForRuntime": "ఈ Anthropic రన్టైమ్ కోసం Fast మోడ్ ప్రస్తుతం అందుబాటులో లేదు."
+ },
+ "alerts": {
+ "anthropicApiKeyMissing": "API కీ మోడ్ ఎంచుకోబడింది, కానీ ఇంకా ఏ Anthropic API ఆధారం అందుబాటులో లేదు.",
+ "anthropicStoredKeyAvailable": "సేవ్ చేసిన API కీ అందుబాటులో ఉంది, కానీ మీరు API కీ మోడ్కు మారిన తర్వాతే యాప్-లాంచ్ చేసిన Anthropic సెషన్లు దాన్ని ఉపయోగిస్తాయి.",
+ "anthropicSubscriptionMissing": "Anthropic సబ్స్క్రిప్షన్ మోడ్ ఎంచుకోబడింది. ఈ ప్రొవైడర్ను ఉపయోగించడానికి Anthropic తో సైన్ ఇన్ చేయండి.",
+ "authTokenMissing": "Auth టోకెన్ కాన్ఫిగర్ చేయబడలేదు. చాలా స్థానిక Anthropic-అనుకూల ఎండ్పాయింట్లకు ఖాళీ కాని టోకెన్ అవసరం.",
+ "chatgptLoginPending": "ChatGPT ఖాతా లాగిన్ పూర్తయ్యే వరకు వేచి ఉంది...",
+ "chatgptLoginStarting": "ChatGPT లాగిన్ను ప్రారంభిస్తోంది...",
+ "codexApiKeyMissing": "API కీ మోడ్ ఎంచుకోబడింది, కానీ ఇంకా ఏ OPENAI_API_KEY లేదా CODEX_API_KEY ఆధారం అందుబాటులో లేదు.",
+ "codexLocalArtifactsNoSession": "Codex CLI కి ప్రస్తుతం క్రియాశీల ChatGPT ఖాతా లేదు. స్థానిక Codex ఖాతా డేటా ఉంది, కానీ క్రియాశీల మేనేజ్డ్ సెషన్ ఏదీ ఎంపిక చేయబడలేదు.",
+ "codexNeedsReconnect": "Codex కు స్థానికంగా ఎంచుకున్న ChatGPT ఖాతా ఉంది, కానీ ప్రస్తుత సెషన్కు మళ్లీ కనెక్ట్ చేయాలి.",
+ "codexNoChatgptAccount": "Codex CLI కి ప్రస్తుతం క్రియాశీల ChatGPT ఖాతా లేదు. మీ సబ్స్క్రిప్షన్ను ఉపయోగించడానికి ChatGPT ను కనెక్ట్ చేయండి.",
+ "codexNoCredential": "ఇంకా ఏ ChatGPT ఖాతా లేదా API కీ అందుబాటులో లేదు.",
+ "geminiApiUnavailable": "Gemini API ప్రస్తుతం అందుబాటులో లేదు. ఇక్కడ `GEMINI_API_KEY` ను కాన్ఫిగర్ చేయండి లేదా చెల్లుబాటు అయ్యే Google ADC ఆధారాలను ఉపయోగించండి.",
+ "withApiKeyFallback": "{{message}} గుర్తించిన API కీని ఉపయోగించడానికి API కీ మోడ్కు మారండి."
+ },
+ "authModeDescriptions": {
+ "anthropic": {
+ "apiKey": "యాప్-లాంచ్ చేసిన Anthropic సెషన్లను API కీ ఆధారాన్ని ఉపయోగించమని బలవంతం చేయండి.",
+ "auto": "రన్టైమ్ డిఫాల్ట్ ప్రవర్తనను ఉపయోగించండి. మీరు API కీ మోడ్కు మారిన తర్వాతే ఈ యాప్లో సేవ్ చేసిన API కీలు ఉపయోగించబడతాయి.",
+ "oauth": "యాప్-లాంచ్ చేసిన Anthropic సెషన్లను స్థానిక Anthropic సబ్స్క్రిప్షన్ సెషన్ను ఉపయోగించమని బలవంతం చేయండి."
+ },
+ "codex": {
+ "apiKey": "నేటివ్ Codex లాంచ్లను OPENAI_API_KEY / CODEX_API_KEY బిల్లింగ్ను ఉపయోగించమని బలవంతం చేయండి.",
+ "auto": "మీ ChatGPT ఖాతా అందుబాటులో ఉన్నప్పుడు దాన్ని ఇష్టపడండి. అవసరమైనప్పుడు మాత్రమే API కీ మోడ్కు ఫాల్బ్యాక్ చేయండి.",
+ "chatgpt": "నేటివ్ Codex లాంచ్లను మీ కనెక్ట్ చేసిన ChatGPT ఖాతా మరియు సబ్స్క్రిప్షన్ను ఉపయోగించమని బలవంతం చేయండి."
+ }
+ },
+ "progress": {
+ "applyingConnectionChanges": "కనెక్షన్ మార్పులను వర్తింపజేస్తోంది...",
+ "refreshingProviderStatus": "ప్రొవైడర్ స్థితిని రిఫ్రెష్ చేస్తోంది...",
+ "savingCompatibleEndpoint": "అనుకూల ఎండ్పాయింట్ను సేవ్ చేస్తోంది...",
+ "switchingAnthropicSubscription": "Anthropic సబ్స్క్రిప్షన్కు మారుతోంది...",
+ "switchingApiKey": "API కీకి మారుతోంది...",
+ "switchingApiKeyMode": "API కీ మోడ్కు మారుతోంది...",
+ "switchingAuto": "Auto కు మారుతోంది...",
+ "switchingChatgpt": "ChatGPT ఖాతా మోడ్కు మారుతోంది..."
+ },
+ "provider": "ప్రొవైడర్",
+ "runtime": {
+ "descriptions": {
+ "anthropic": "Anthropic కు ప్రస్తుతం ప్రత్యేక రన్టైమ్ బ్యాకెండ్ సెలెక్టర్ లేదు.",
+ "codex": "Codex ఇప్పుడు నేటివ్ రన్టైమ్ మార్గం ద్వారా మాత్రమే రన్ అవుతుంది.",
+ "gemini": "మల్టీమోడల్ ఏ Gemini రన్టైమ్ బ్యాకెండ్ను ఉపయోగించాలో ఎంచుకోండి.",
+ "opencode": "OpenCode దాని స్వంత మేనేజ్డ్ రన్టైమ్ హోస్ట్ను ఉపయోగిస్తుంది. డెస్క్టాప్ ప్రస్తుతం స్థితిని మాత్రమే బహిర్గతం చేస్తుంది."
+ },
+ "title": "రన్టైమ్",
+ "updating": "రన్టైమ్ను అప్డేట్ చేస్తోంది..."
+ },
+ "runtimeSummary": "రన్టైమ్: {{runtime}}",
+ "status": {
+ "configured": "కాన్ఫిగర్ చేయబడింది",
+ "enabled": "ప్రారంభించబడింది",
+ "notConfigured": "కాన్ఫిగర్ చేయబడలేదు",
+ "notSet": "సెట్ చేయబడలేదు",
+ "off": "ఆఫ్",
+ "unknown": "తెలియదు"
+ },
+ "title": "ప్రొవైడర్ సెట్టింగ్లు",
+ "usage": {
+ "apiKey": "API కీని ఉపయోగిస్తోంది",
+ "apiKeyRequired": "API కీ అవసరం",
+ "compatibleEndpoint": "అనుకూల ఎండ్పాయింట్ను ఉపయోగిస్తోంది",
+ "notConnected": "కనెక్ట్ కాలేదు",
+ "usingMethod": "{{method}} ను ఉపయోగిస్తోంది"
+ },
+ "errors": {
+ "apiKeyDeletedRefreshFailed": "API కీ తొలగించబడింది, కానీ ప్రొవైడర్ స్థితిని రిఫ్రెష్ చేయడం విఫలమైంది.",
+ "apiKeySavedRefreshFailed": "API కీ సేవ్ చేయబడింది, కానీ ప్రొవైడర్ స్థితిని రిఫ్రెష్ చేయడం విఫలమైంది.",
+ "connectionUpdatedRefreshFailed": "కనెక్షన్ అప్డేట్ అయింది, కానీ ప్రొవైడర్ స్థితిని రిఫ్రెష్ చేయడం విఫలమైంది.",
+ "deleteApiKey": "API కీని తొలగించడం విఫలమైంది",
+ "disableEndpoint": "ఎండ్పాయింట్ను నిలిపివేయడం విఫలమైంది",
+ "endpointDisabledRefreshFailed": "ఎండ్పాయింట్ నిలిపివేయబడింది, కానీ ప్రొవైడర్ స్థితిని రిఫ్రెష్ చేయడం విఫలమైంది.",
+ "endpointSavedRefreshFailed": "ఎండ్పాయింట్ సేవ్ చేయబడింది, కానీ ప్రొవైడర్ స్థితిని రిఫ్రెష్ చేయడం విఫలమైంది.",
+ "refreshCodexAccount": "Codex ఖాతాను రిఫ్రెష్ చేయడం విఫలమైంది",
+ "saveApiKey": "API కీని సేవ్ చేయడం విఫలమైంది",
+ "saveEndpoint": "ఎండ్పాయింట్ను సేవ్ చేయడం విఫలమైంది",
+ "updateAnthropicFastMode": "Anthropic Fast మోడ్ను అప్డేట్ చేయడం విఫలమైంది",
+ "updateConnection": "కనెక్షన్ను అప్డేట్ చేయడం విఫలమైంది",
+ "updateRuntimeBackend": "రన్టైమ్ బ్యాకెండ్ను అప్డేట్ చేయడం విఫలమైంది",
+ "apiKeyRequired": "API కీ అవసరం"
+ },
+ "connectionUi": {
+ "authMode": {
+ "auto": "Auto",
+ "oauth": "సబ్స్క్రిప్షన్ / OAuth",
+ "chatgpt": "ChatGPT ఖాతా",
+ "apiKey": "API కీ",
+ "anthropicSubscription": "Anthropic సబ్స్క్రిప్షన్"
+ },
+ "authMethod": {
+ "apiKey": "API కీ",
+ "apiKeyHelper": "API కీ హెల్పర్",
+ "oauth": "OAuth",
+ "claudeSubscription": "Claude సబ్స్క్రిప్షన్",
+ "geminiCli": "Gemini CLI",
+ "googleAccount": "Google ఖాతా",
+ "serviceAccount": "సర్వీస్ ఖాతా"
+ },
+ "runtime": {
+ "codexNative": "Codex నేటివ్",
+ "currentRuntime": "ప్రస్తుత రన్టైమ్",
+ "selectedRuntime": "ఎంచుకున్న రన్టైమ్",
+ "summary": "{{prefix}}: {{runtime}}"
+ },
+ "status": {
+ "checking": "తనిఖీ చేస్తోంది...",
+ "modelsAvailable": "మోడల్లు అందుబాటులో ఉన్నాయి",
+ "checked": "తనిఖీ చేయబడింది",
+ "providerActivity": "ప్రొవైడర్ కార్యకలాపం",
+ "notConnected": "కనెక్ట్ కాలేదు",
+ "startingChatGptLogin": "ChatGPT లాగిన్ను ప్రారంభిస్తోంది...",
+ "waitingForChatGptLogin": "ChatGPT ఖాతా లాగిన్ కోసం వేచి ఉంది...",
+ "chatGptVerificationDegraded": "ChatGPT ఖాతా గుర్తించబడింది - ఖాతా ధృవీకరణ ప్రస్తుతం క్షీణించింది.",
+ "chatGptAccountReady": "ChatGPT ఖాతా సిద్ధం",
+ "apiKeyReady": "API కీ సిద్ధం",
+ "codexLocalAccountNeedsReconnect": "Codex కు స్థానికంగా ఎంచుకున్న ChatGPT ఖాతా ఉంది, కానీ ప్రస్తుత సెషన్కు మళ్లీ కనెక్ట్ చేయాలి.",
+ "codexNoActiveManagedSession": "Codex CLI క్రియాశీల ChatGPT లాగిన్ లేదని నివేదిస్తోంది. స్థానిక Codex ఖాతా డేటా ఉంది, కానీ క్రియాశీల మేనేజ్డ్ సెషన్ ఏదీ ఎంపిక చేయబడలేదు.",
+ "codexNoActiveChatGptLogin": "Codex CLI క్రియాశీల ChatGPT లాగిన్ లేదని నివేదిస్తోంది",
+ "connectChatGptForSubscription": "మీ Codex సబ్స్క్రిప్షన్ను ఉపయోగించడానికి ChatGPT ఖాతాను కనెక్ట్ చేయండి.",
+ "codexNativeReady": "Codex నేటివ్ సిద్ధం",
+ "codexNativeUnavailable": "Codex నేటివ్ అందుబాటులో లేదు",
+ "unavailableInCurrentRuntime": "ప్రస్తుత రన్టైమ్లో అందుబాటులో లేదు",
+ "connectedViaApiKey": "API కీ ద్వారా కనెక్ట్ చేయబడింది",
+ "apiKeyConfiguredNotVerified": "API కీ కాన్ఫిగర్ చేయబడింది, కానీ ఇంకా ధృవీకరించబడలేదు",
+ "apiKeyModeMissingCredential": "API కీ మోడ్ ఎంచుకోబడింది, కానీ ఏ API కీ కాన్ఫిగర్ చేయబడలేదు",
+ "connectedVia": "{{method}} ద్వారా కనెక్ట్ చేయబడింది",
+ "unableToVerify": "ధృవీకరించడం సాధ్యం కాలేదు"
+ },
+ "mode": {
+ "selectedAuth": "ఎంచుకున్న auth: {{authMode}}",
+ "preferredAuth": "ఇష్టమైన auth: {{authMode}}"
+ },
+ "credential": {
+ "apiKeyConfigured": "API కీ కాన్ఫిగర్ చేయబడింది",
+ "savedApiKeyAvailable": "సేవ్ చేసిన API కీ Manage లో అందుబాటులో ఉంది",
+ "apiKeyAlsoConfigured": "API కీ కూడా Manage లో కాన్ఫిగర్ చేయబడింది",
+ "apiKeyConfiguredInManage": "API కీ Manage లో కాన్ఫిగర్ చేయబడింది",
+ "apiKeyFallbackInManage": "API కీ ఫాల్బ్యాక్గా Manage లో కూడా అందుబాటులో ఉంది",
+ "availableAsFallback": "{{summary}} - ఫాల్బ్యాక్గా అందుబాటులో ఉంది",
+ "savedApiKeyAvailableIfSwitch": "మీరు API కీ మోడ్కు మారితే సేవ్ చేసిన API కీ Manage లో అందుబాటులో ఉంది",
+ "availableIfSwitch": "{{summary}} - మీరు API కీ మోడ్కు మారితే అందుబాటులో ఉంది",
+ "autoWillUseUntilChatGpt": "{{summary}} - ChatGPT కనెక్ట్ అయ్యే వరకు Auto దీన్ని ఉపయోగిస్తుంది"
+ },
+ "actions": {
+ "connect": "కనెక్ట్ చేయి",
+ "connectAnthropic": "Anthropic ను కనెక్ట్ చేయి",
+ "connectChatGpt": "ChatGPT ను కనెక్ట్ చేయి",
+ "disconnect": "డిస్కనెక్ట్ చేయి",
+ "openLogin": "లాగిన్ తెరువు"
+ },
+ "disconnect": {
+ "anthropicTitle": "Anthropic సబ్స్క్రిప్షన్ను డిస్కనెక్ట్ చేయాలా?",
+ "anthropic": "ఇది Claude CLI రన్టైమ్ నుండి స్థానిక Anthropic సబ్స్క్రిప్షన్ సెషన్ను తీసివేస్తుంది.",
+ "anthropicWithApiKey": "ఇది Claude CLI రన్టైమ్ నుండి స్థానిక Anthropic సబ్స్క్రిప్షన్ సెషన్ను తీసివేస్తుంది. Manage లో సేవ్ చేసిన API కీలు అందుబాటులో ఉంటాయి.",
+ "geminiTitle": "Gemini CLI ను డిస్కనెక్ట్ చేయాలా?",
+ "gemini": "ఇది స్థానిక Gemini CLI సెషన్ మెటాడేటాను క్లియర్ చేస్తుంది. బాహ్య ADC ఆధారాలు మరియు సేవ్ చేసిన API కీలు తీసివేయబడవు."
+ }
+ }
+ },
+ "cliRuntime": {
+ "actions": {
+ "checkForUpdates": "అప్డేట్ల కోసం తనిఖీ చేయి",
+ "checking": "తనిఖీ చేస్తోంది...",
+ "extensions": "ఎక్స్టెన్షన్లు",
+ "installRuntime": "{{runtime}} ను ఇన్స్టాల్ చేయి",
+ "manage": "నిర్వహించు",
+ "recheck": "మళ్లీ తనిఖీ చేయి",
+ "reinstallRuntime": "{{runtime}} ను మళ్లీ ఇన్స్టాల్ చేయి",
+ "retry": "మళ్లీ ప్రయత్నించు",
+ "update": "అప్డేట్ చేయి"
+ },
+ "installer": {
+ "checkingLatest": "తాజా వెర్షన్ను తనిఖీ చేస్తోంది...",
+ "downloading": "డౌన్లోడ్ చేస్తోంది...",
+ "failed": "ఇన్స్టాలేషన్ విఫలమైంది",
+ "installed": "v{{version}} ఇన్స్టాల్ చేయబడింది",
+ "installing": "ఇన్స్టాల్ చేస్తోంది...",
+ "latest": "తాజా",
+ "verifying": "చెక్సమ్ను ధృవీకరిస్తోంది..."
+ },
+ "labels": {
+ "multimodel": "మల్టీమోడల్"
+ },
+ "loading": {
+ "aiProviders": "AI ప్రొవైడర్లను తనిఖీ చేస్తోంది...",
+ "claudeCli": "Claude CLI ను తనిఖీ చేస్తోంది..."
+ },
+ "provider": {
+ "backend": "బ్యాకెండ్: {{backend}}",
+ "loadingModels": "మోడల్లను లోడ్ చేస్తోంది...",
+ "modelsUnavailable": "ఈ రన్టైమ్ బిల్డ్ కోసం మోడల్లు అందుబాటులో లేవు",
+ "runtime": "రన్టైమ్: {{runtime}}"
+ },
+ "providerTerminal": {
+ "authFailed": "ప్రామాణీకరణ విఫలమైంది",
+ "authUpdated": "ప్రామాణీకరణ అప్డేట్ అయింది",
+ "loggedOut": "ప్రొవైడర్ లాగ్ అవుట్ అయింది",
+ "login": "లాగిన్",
+ "logout": "లాగ్ అవుట్",
+ "logoutFailed": "లాగ్ అవుట్ విఫలమైంది"
+ },
+ "status": {
+ "configuredNotFound": "కాన్ఫిగర్ చేయబడిన {{runtime}} కనుగొనబడలేదు.",
+ "foundButFailed": "{{runtime}} కనుగొనబడింది కానీ ప్రారంభించడంలో విఫలమైంది",
+ "healthCheckFailed": "కాన్ఫిగర్ చేయబడిన {{runtime}} దాని స్టార్టప్ హెల్త్ చెక్లో విఫలమైంది.",
+ "notInstalled": "{{runtime}} ఇన్స్టాల్ చేయబడలేదు"
+ },
+ "title": "CLI రన్టైమ్"
+ },
+ "cliStatus": {
+ "versionUpgrade": "v{{current}} -> v{{latest}}"
+ }
+}
diff --git a/src/features/localization/renderer/locales/te/team.json b/src/features/localization/renderer/locales/te/team.json
new file mode 100644
index 00000000..35c9dd28
--- /dev/null
+++ b/src/features/localization/renderer/locales/te/team.json
@@ -0,0 +1,2487 @@
+{
+ "activity": {
+ "actions": {
+ "createTaskFromMessage": "సందేశం నుండి టాస్క్ సృష్టించు",
+ "editMessage": "సందేశాన్ని సవరించు",
+ "expandMessage": "సందేశాన్ని విస్తరించు",
+ "replyToMessage": "సందేశానికి ప్రత్యుత్తరం ఇవ్వు",
+ "restartTeam": "టీమ్ను పునఃప్రారంభించు"
+ },
+ "authError": {
+ "description": "ప్రామాణీకరణ విఫలమైంది. టీమ్ను పునఃప్రారంభించడం సెషన్ను రిఫ్రెష్ చేస్తుంది మరియు ఈ సమస్యను పరిష్కరించవచ్చు. సమస్య కొనసాగితే, మీ API ఆధారాలను తనిఖీ చేయండి లేదా తర్వాత మళ్లీ ప్రయత్నించండి."
+ },
+ "automation": {
+ "reviewPickup": "సమీక్షను చేపట్టమని టీమ్మేట్ను అడిగాను",
+ "stallNudge": "నిలిచిపోయిన టాస్క్ను కొనసాగించమని టీమ్మేట్ను అడిగాను",
+ "workSyncBody": "ప్రస్తుత పనిని సింక్ చేయమని టీమ్మేట్ను అడిగాను"
+ },
+ "badges": {
+ "automation": "ఆటోమేషన్",
+ "bootstrap": "బూట్స్ట్రాప్",
+ "command": "కమాండ్",
+ "comment": "వ్యాఖ్య",
+ "live": "లైవ్",
+ "note": "గమనిక",
+ "rateLimited": "రేట్ పరిమితం చేయబడింది",
+ "restart": "పునఃప్రారంభం",
+ "result": "ఫలితం",
+ "session": "సెషన్",
+ "stallNudge": "స్టాల్ నడ్జ్",
+ "start": "ప్రారంభం",
+ "workSync": "వర్క్ సింక్",
+ "agentError": "ఏజెంట్ లోపం",
+ "apiError": "API లోపం"
+ },
+ "bootstrap": {
+ "acknowledged": "బూట్స్ట్రాప్ ధృవీకరించబడింది",
+ "restarting": "టీమ్మేట్ను పునఃప్రారంభిస్తోంది",
+ "starting": "టీమ్మేట్ను ప్రారంభిస్తోంది"
+ },
+ "rawJson": "రా JSON",
+ "unread": "చదవనిది",
+ "thoughts": {
+ "count": "{{count}} ఆలోచనలు",
+ "count_one": "{{count}} ఆలోచన",
+ "expand": "ఆలోచనలను విస్తరించు",
+ "showMore": "మరింత చూపించు",
+ "showLess": "తక్కువ చూపించు",
+ "count_few": "{{count}} ఆలోచనలు",
+ "count_many": "{{count}} ఆలోచనలు",
+ "count_other": "{{count}} ఆలోచనలు",
+ "toolSummary": "🔧 {{summary}}",
+ "titleForMember": "{{name}} - ఆలోచనలు"
+ },
+ "timeline": {
+ "loadingMessages": "సందేశాలను లోడ్ చేస్తోంది...",
+ "noMessages": "సందేశాలు లేవు",
+ "emptyHint": "కార్యకలాపాన్ని చూడటానికి ఒక సభ్యుడికి సందేశం పంపండి.",
+ "newSession": "కొత్త సెషన్",
+ "olderCount": "+{{count}} పాతవి",
+ "showMore": "{{count}} మరిన్ని చూపించు",
+ "showAll": "అన్నీ చూపించు",
+ "olderCount_one": "+{{count}} పాతది",
+ "olderCount_few": "+{{count}} పాతవి",
+ "olderCount_many": "+{{count}} పాతవి",
+ "olderCount_other": "+{{count}} పాతవి"
+ },
+ "pendingReplies": {
+ "title": "ప్రత్యుత్తరాల కోసం వేచి ఉంది",
+ "openMember": "సభ్యుడిని తెరువు",
+ "messageSentAwaitingReply": "సందేశం పంపబడింది, ప్రత్యుత్తరం కోసం వేచి ఉంది",
+ "awaitingReply": "ప్రత్యుత్తరం కోసం వేచి ఉంది",
+ "externalTeam": "బాహ్య టీమ్",
+ "crossTeamAwaitingReply": "క్రాస్-టీమ్ సందేశం పంపబడింది, ప్రత్యుత్తరం కోసం వేచి ఉంది",
+ "user": "యూజర్",
+ "awaitingApproval": "ఆమోదం కోసం వేచి ఉంది"
+ },
+ "reply": {
+ "replyingTo": "దీనికి ప్రత్యుత్తరం ఇస్తోంది",
+ "action": "ప్రత్యుత్తరం"
+ },
+ "activeTasks": {
+ "inProgress": "ప్రోగ్రెస్లో",
+ "expandInProgress": "ప్రోగ్రెస్లో ఉన్నవాటిని విస్తరించు",
+ "collapseInProgress": "ప్రోగ్రెస్లో ఉన్నవాటిని కుదించు",
+ "reviewing": "సమీక్షిస్తోంది",
+ "workingOn": "దీనిపై పనిచేస్తోంది"
+ },
+ "expandDialog": {
+ "description": "విస్తరించిన సందేశ వీక్షణ"
+ }
+ },
+ "create": {
+ "actions": {
+ "create": "సృష్టించు",
+ "creating": "సృష్టిస్తోంది...",
+ "openExisting": "ప్రస్తుత టీమ్ను తెరువు",
+ "skipPreflightAndCreate": "ప్రీఫ్లైట్ దాటవేసి సృష్టించు"
+ },
+ "conflict": {
+ "description": "ఒకే డైరెక్టరీలో రెండు టీమ్లను రన్ చేయడం ప్రమాదకరం - అవి ఒకే ఫైల్లను సవరించడంలో విభేదించవచ్చు. ఐసొలేషన్ కోసం వేరే డైరెక్టరీ లేదా git worktree ఉపయోగించడాన్ని పరిగణించండి.",
+ "title": "ఈ వర్కింగ్ డైరెక్టరీ కోసం మరో టీమ్ \"{{team}}\" ఇప్పటికే రన్ అవుతోంది",
+ "workingDirectory": "వర్కింగ్ డైరెక్టరీ:"
+ },
+ "description": {
+ "copy": "ప్రస్తుత టీమ్ ఆధారంగా కొత్త టీమ్ను సృష్టించండి.",
+ "create": "మీ టీమ్ను సెటప్ చేసి, అది ఎలా ప్రారంభమవుతుందో ఎంచుకోండి."
+ },
+ "errors": {
+ "nameExists": "టీమ్ పేరు ఇప్పటికే ఉంది",
+ "nameLaunching": "ఈ పేరుతో ఉన్న టీమ్ ప్రస్తుతం లాంచ్ అవుతోంది",
+ "createConfigFailed": "టీమ్ కాన్ఫిగ్ను సృష్టించడం విఫలమైంది",
+ "loadProjectsFailed": "ప్రాజెక్ట్లను లోడ్ చేయడం విఫలమైంది"
+ },
+ "fields": {
+ "color": "రంగు (ఐచ్ఛికం)",
+ "description": "వివరణ (ఐచ్ఛికం)",
+ "prompt": "టీమ్ లీడ్ కోసం ప్రాంప్ట్ (ఐచ్ఛికం)",
+ "teamName": "టీమ్ పేరు"
+ },
+ "launchAfterCreate": {
+ "description": "స్థానిక Claude CLI ద్వారా టీమ్ను వెంటనే ప్రారంభించండి.",
+ "label": "సృష్టించిన తర్వాత కమాండ్ రన్ చేయి"
+ },
+ "localOnly": "స్థానిక Electron మోడ్లో మాత్రమే అందుబాటులో ఉంది.",
+ "onDisk": "డిస్క్లో:",
+ "placeholders": {
+ "description": "టీమ్ ప్రయోజనం యొక్క సంక్షిప్త వివరణ",
+ "prompt": "ప్రొవిజనింగ్ సమయంలో టీమ్ లీడ్ కోసం సూచనలు..."
+ },
+ "saved": "సేవ్ చేయబడింది",
+ "solo": {
+ "description": "టీమ్ లీడ్ (ప్రధాన ప్రాసెస్) మాత్రమే ప్రారంభించబడుతుంది - ఏ టీమ్మేట్లు స్పాన్ చేయబడవు. మీరు ఎంచుకున్న రన్టైమ్లో (Claude Code, Codex, OpenCode, Gemini) ఒక సాధారణ ఏజెంట్ సెషన్లా పనిచేస్తుంది, కానీ ప్రణాళిక కోసం టాస్క్ బోర్డు యాక్సెస్తో. టీమ్మేట్ సమన్వయ ఓవర్హెడ్ను నివారించడం ద్వారా టోకెన్లను ఆదా చేస్తుంది. మీరు తర్వాత టీమ్ సెట్టింగ్ల నుండి సభ్యులను జోడించవచ్చు.",
+ "label": "సోలో టీమ్"
+ },
+ "title": {
+ "copy": "టీమ్ను కాపీ చేయి",
+ "create": "టీమ్ను సృష్టించు"
+ },
+ "optional": {
+ "launchSettingsTitle": "ఐచ్ఛిక లాంచ్ సెట్టింగ్లు",
+ "launchSettingsDescription": "మీకు అవసరమైనప్పుడు ప్రాంప్ట్, భద్రత మరియు CLI ఓవర్రైడ్లు ఇక్కడ ఉంటాయి.",
+ "teamDetailsTitle": "ఐచ్ఛిక టీమ్ వివరాలు",
+ "teamDetailsDescription": "డిఫాల్ట్ ఫ్లోను కాంపాక్ట్గా ఉంచండి మరియు మీకు అదనపు కాంటెక్స్ట్ లేదా కస్టమ్ రంగు కావలసినప్పుడు మాత్రమే దీన్ని తెరవండి."
+ },
+ "prepare": {
+ "unsupportedPreload": "ప్రస్తుత ప్రీలోడ్ వెర్షన్ team:prepareProvisioning కు మద్దతు ఇవ్వదు. dev యాప్ను పునఃప్రారంభించండి.",
+ "selectWorkingDirectory": "లాంచ్ ఎన్విరాన్మెంట్ను ధృవీకరించడానికి వర్కింగ్ డైరెక్టరీని ఎంచుకోండి.",
+ "someProvidersNeedAttention": "ఎంచుకున్న కొన్ని ప్రొవైడర్లకు శ్రద్ధ అవసరం.",
+ "readyWithNotes": "ఎంచుకున్న అన్ని ప్రొవైడర్లు సిద్ధం, గమనికలతో.",
+ "ready": "ఎంచుకున్న అన్ని ప్రొవైడర్లు సిద్ధం.",
+ "failed": "ఎంచుకున్న ప్రొవైడర్లను సిద్ధం చేయడం విఫలమైంది",
+ "checkingProviders": "ఎంచుకున్న ప్రొవైడర్లను తనిఖీ చేస్తోంది...",
+ "preparingEnvironment": "ఎన్విరాన్మెంట్ను సిద్ధం చేస్తోంది...",
+ "selectedProvidersReadyWithNotes": "ఎంచుకున్న ప్రొవైడర్లు సిద్ధం (గమనికలతో)",
+ "selectedProvidersReady": "ఎంచుకున్న ప్రొవైడర్లు సిద్ధం"
+ },
+ "validation": {
+ "nameMustContainLetterOrDigit": "పేరులో కనీసం ఒక అక్షరం లేదా అంకె ఉండాలి",
+ "nameTooLong": "పేరు చాలా పొడవుగా ఉంది (గరిష్టం 128 అక్షరాలు)",
+ "selectWorkingDirectory": "వర్కింగ్ డైరెక్టరీని ఎంచుకోండి (cwd)",
+ "memberNameRequired": "సభ్యుని పేరు ఖాళీగా ఉండకూడదు",
+ "memberNameInvalid": "సభ్యుని పేరు తప్పనిసరిగా ఆల్ఫాన్యూమరిక్తో ప్రారంభం కావాలి, [a-zA-Z0-9._-] మాత్రమే ఉపయోగించండి, గరిష్టం 128 అక్షరాలు",
+ "memberNamesUnique": "సభ్యుల పేర్లు ప్రత్యేకంగా ఉండాలి",
+ "openCodeLeadModelRequired": "OpenCode లీడ్కు ఎంచుకున్న మోడల్ అవసరం.",
+ "openCodeTeammateRequired": "OpenCode లీడ్కు కనీసం ఒక OpenCode టీమ్మేట్ అవసరం.",
+ "teamLaunching": "టీమ్ ప్రస్తుతం లాంచ్ అవుతోంది",
+ "teamNameExists": "టీమ్ పేరు ఇప్పటికే ఉంది",
+ "checkFormFields": "ఫారం ఫీల్డ్లను తనిఖీ చేయండి"
+ }
+ },
+ "editTeam": {
+ "actions": {
+ "cancel": "రద్దు చేయి",
+ "save": "సేవ్ చేయి"
+ },
+ "addMemberLockReason": "టీమ్ లైవ్లో ఉన్నప్పుడు కొత్త టీమ్మేట్లను జోడించడానికి ప్రత్యేక Add member డైలాగ్ను ఉపయోగించండి.",
+ "description": "టీమ్ పేరు, వివరణ మరియు రంగును మార్చండి",
+ "errors": {
+ "changesSavedRefreshFailed": "టీమ్ మార్పులు సేవ్ చేయబడ్డాయి, కానీ తాజా వీక్షణను రిఫ్రెష్ చేయడం విఫలమైంది: {{message}}",
+ "liveRenameBlocked": "టీమ్ లైవ్లో ఉన్నప్పుడు ప్రస్తుత టీమ్మేట్ల పేరును మార్చలేరు. పేరు మార్చబడింది: {{names}}",
+ "memberNameEmpty": "సభ్యుని పేరు ఖాళీగా ఉండకూడదు",
+ "memberNameInvalid": "సభ్యుని పేరు తప్పనిసరిగా ఆల్ఫాన్యూమరిక్తో ప్రారంభం కావాలి, [a-zA-Z0-9._-] మాత్రమే ఉపయోగించండి, గరిష్టం 128 అక్షరాలు",
+ "memberNameNumericSuffix": "సభ్యుని పేరు \"{{name}}\" అనుమతించబడదు (Claude CLI ఆటో-సఫిక్స్ కోసం రిజర్వ్ చేయబడింది). బదులుగా \"{{base}}\" ఉపయోగించండి.",
+ "memberNameReserved": "సభ్యుని పేరు \"{{name}}\" రిజర్వ్ చేయబడింది",
+ "memberNamesUnique": "సేవ్ చేయడానికి ముందు సభ్యుల పేర్లు ప్రత్యేకంగా ఉండాలి",
+ "newLiveTeammates": "టీమ్ లైవ్లో ఉన్నప్పుడు ప్రత్యేక Add member డైలాగ్ నుండి కొత్త టీమ్మేట్లను జోడించండి. Edit Team ప్రస్తుత టీమ్మేట్లను అప్డేట్ చేయడాన్ని మాత్రమే మద్దతిస్తుంది.",
+ "provisioning": "ప్రొవిజనింగ్ ఇంకా ప్రోగ్రెస్లో ఉన్నప్పుడు టీమ్ సెట్టింగ్లను సవరించలేరు. లాంచ్ పూర్తయ్యే వరకు వేచి ఉండి, ఆపై మళ్లీ ప్రయత్నించండి.",
+ "restartFailedMany": "టీమ్ సేవ్ చేయబడింది, కానీ ఈ టీమ్మేట్లను పునఃప్రారంభించడం విఫలమైంది: {{failures}}",
+ "restartFailedOne": "టీమ్ సేవ్ చేయబడింది, కానీ ఈ టీమ్మేట్ను పునఃప్రారంభించడం విఫలమైంది: {{failures}}",
+ "saveFailed": "సేవ్ చేయడం విఫలమైంది",
+ "settingsChanged": "ఈ డైలాగ్ తెరిచి ఉన్నప్పుడు టీమ్ సెట్టింగ్లు మారాయి. దాన్ని మళ్లీ తెరిచి, సేవ్ చేయడానికి ముందు తాజా స్థితిని సమీక్షించండి.",
+ "settingsSavedMembersAndRefreshFailed": "టీమ్ సెట్టింగ్లు సేవ్ చేయబడ్డాయి, కానీ సభ్యుల మార్పులు విఫలమయ్యాయి: {{message}}. రిఫ్రెష్ కూడా విఫలమైంది: {{refreshError}}",
+ "settingsSavedMembersFailed": "టీమ్ సెట్టింగ్లు సేవ్ చేయబడ్డాయి, కానీ సభ్యుల మార్పులు విఫలమయ్యాయి: {{message}}",
+ "settingsSavedRefreshFailed": "టీమ్ సెట్టింగ్లు సేవ్ చేయబడ్డాయి, కానీ తాజా వీక్షణను రిఫ్రెష్ చేయడం విఫలమైంది: {{message}}",
+ "teamNameEmpty": "టీమ్ పేరు ఖాళీగా ఉండకూడదు",
+ "unsupportedMixedPrimaryMutation": "మిశ్రమ OpenCode టీమ్లలో ప్రైమరీ-యాజమాన్య టీమ్మేట్లకు లైవ్ సవరణలు ఇంకా మద్దతు లేదు. టీమ్ను ఆపండి, రోస్టర్ను సవరించండి, ఆపై మళ్లీ లాంచ్ చేయండి. ప్రభావితమైనవి: {{names}}"
+ },
+ "fields": {
+ "colorOptional": "రంగు (ఐచ్ఛికం)",
+ "description": "వివరణ",
+ "name": "పేరు"
+ },
+ "memberRestartWarning": "సేవ్ చేయడం రోల్, వర్క్ఫ్లో, worktree ఐసొలేషన్, ప్రొవైడర్, మోడల్, ఎఫర్ట్ లేదా MCP యాక్సెస్ మార్పులను వర్తింపజేయడానికి ఈ టీమ్మేట్ను పునఃప్రారంభిస్తుంది.",
+ "notices": {
+ "liveRenameBlocked": "ప్రస్తుత టీమ్మేట్ల పేరు మార్చబడినందున లైవ్ సేవ్ నిరోధించబడింది. ఆ గుర్తింపు మార్పులను తిరిగి మార్చండి లేదా మొదట టీమ్ను ఆపండి.",
+ "newLiveTeammates": "టీమ్ లైవ్లో ఉన్నప్పుడు Edit Team నుండి కొత్త టీమ్మేట్లను జోడించలేరు. బదులుగా Add member డైలాగ్ను ఉపయోగించండి.",
+ "provisioning": "టీమ్ ప్రొవిజనింగ్ ఇంకా ప్రోగ్రెస్లో ఉంది. లాంచ్ పూర్తయ్యే వరకు సవరణ తాత్కాలికంగా లాక్ చేయబడింది.",
+ "restartMany": "సేవ్ చేయడం రోల్, వర్క్ఫ్లో, worktree ఐసొలేషన్, ప్రొవైడర్, మోడల్, ఎఫర్ట్ లేదా MCP యాక్సెస్ మార్పులను వర్తింపజేయడానికి ఈ టీమ్మేట్లను పునఃప్రారంభిస్తుంది లేదా మళ్లీ లాంచ్ చేస్తుంది: {{names}}.",
+ "restartOne": "సేవ్ చేయడం రోల్, వర్క్ఫ్లో, worktree ఐసొలేషన్, ప్రొవైడర్, మోడల్, ఎఫర్ట్ లేదా MCP యాక్సెస్ మార్పులను వర్తింపజేయడానికి ఈ టీమ్మేట్ను పునఃప్రారంభిస్తుంది లేదా మళ్లీ లాంచ్ చేస్తుంది: {{names}}.",
+ "unsupportedMixedPrimaryMutation": "మిశ్రమ OpenCode టీమ్లలో ప్రైమరీ-యాజమాన్య టీమ్మేట్లకు లైవ్ సవరణలు/తొలగింపులకు టీమ్ను ఆపి మళ్లీ లాంచ్ చేయడం అవసరం: {{names}}."
+ },
+ "placeholders": {
+ "description": "టీమ్ వివరణ (ఐచ్ఛికం)",
+ "teamName": "టీమ్ పేరు"
+ },
+ "teamLead": {
+ "changeRuntime": "లీడ్ రన్టైమ్ను మార్చు",
+ "changeRuntimeDescription": "లీడ్ ప్రొవైడర్, మోడల్ లేదా ఎఫర్ట్ను మార్చడానికి Relaunch Team ను తెరవండి.",
+ "modelLockReason": "టీమ్ లీడ్ రన్టైమ్ Relaunch Team నుండి నిర్వహించబడుతుంది.",
+ "readOnlyHint": "టీమ్ లీడ్ పేరు మరియు రోల్ ఇక్కడ చదవడానికి-మాత్రమే ఉంటాయి. ప్రొవైడర్, మోడల్ లేదా ఎఫర్ట్ను మార్చడానికి లీడ్ వరుసలోని రన్టైమ్ ప్యానెల్ను తెరవండి.",
+ "role": "టీమ్ లీడ్"
+ },
+ "title": "టీమ్ను సవరించు"
+ },
+ "memberDraft": {
+ "actions": {
+ "remove": "సభ్యుడిని తీసివేయి",
+ "removeAria": "{{name}} ను తీసివేయి",
+ "restore": "సభ్యుడిని పునరుద్ధరించు",
+ "restoreAria": "{{name}} ను పునరుద్ధరించు"
+ },
+ "anthropicContext": {
+ "defaultSetting": "డిఫాల్ట్ కాంటెక్స్ట్ సెట్టింగ్",
+ "description": "ఈ లాంచ్ కోసం Anthropic కాంటెక్స్ట్ టీమ్-వ్యాప్తంగా ఉంది: {{mode}}. దాన్ని మార్చడానికి లీడ్ రన్టైమ్ ప్యానెల్లోని Limit context చెక్బాక్స్ను ఉపయోగించండి.",
+ "limitEnabled": "200K పరిమితి ప్రారంభించబడింది"
+ },
+ "mcp": {
+ "buttonInherit": "MCP వారసత్వం",
+ "buttonScopes": "MCP స్కోప్లు",
+ "chooseScopes": "స్కోప్లను ఎంచుకోండి",
+ "inheritLead": "లీడ్ నుండి వారసత్వం",
+ "lockedInfo": "అన్ని టీమ్మేట్లకు Agent Teams MCP మాత్రమే ప్రారంభించబడింది. ఈ టీమ్మేట్ Agent Teams సర్వర్తో మాత్రమే లాంచ్ అవుతుంది.",
+ "mode": "MCP మోడ్",
+ "scopes": {
+ "local": "local",
+ "project": "project",
+ "user": "user"
+ },
+ "serverNames": "సర్వర్ పేర్లు",
+ "settingInfo": "Agent Teams MCP ఈ టీమ్మేట్ను Agent Teams సర్వర్తో మాత్రమే లాంచ్ చేస్తుంది. స్కోప్ మరియు allowlist మోడ్లు ఈ టీమ్మేట్ లాంచ్కు మాత్రమే వర్తిస్తాయి.",
+ "strictAllowlist": "కఠినమైన allowlist",
+ "tooltip": "{{label}}: ఈ సభ్యుని MCP వారసత్వ విధానాన్ని నియంత్రించండి",
+ "agentTeamsMcp": "Agent Teams MCP"
+ },
+ "model": {
+ "ariaLabel": "{{provider}} ప్రొవైడర్, {{model}}",
+ "currentLeadRuntime": "ప్రస్తుత లీడ్ రన్టైమ్",
+ "default": "డిఫాల్ట్",
+ "inheritedTooltip": "సింక్ ప్రారంభించబడి ఉన్నప్పుడు ప్రొవైడర్, మోడల్ మరియు ఎఫర్ట్ లీడ్ నుండి వారసత్వంగా పొందబడతాయి.",
+ "leadSuffix": "{{label}} (లీడ్)",
+ "liveDisabled": "టీమ్ లైవ్లో ఉన్నప్పుడు ప్రొవైడర్, మోడల్ మరియు ఎఫర్ట్ మార్పులు నిలిపివేయబడ్డాయి. వాటిని సురక్షితంగా వర్తింపజేయడానికి టీమ్ను మళ్లీ కనెక్ట్ చేయండి.",
+ "lockedActionFallback": "లీడ్ రన్టైమ్ మార్పులు Relaunch Team ను తెరుస్తాయి, అక్కడ ప్రొవైడర్, మోడల్ మరియు ఎఫర్ట్ అప్డేట్ చేయవచ్చు.",
+ "restartWholeTeam": "ఆ రన్టైమ్ మార్పులను సేవ్ చేయడం మొత్తం టీమ్ను పునఃప్రారంభిస్తుంది."
+ },
+ "nameAria": "సభ్యుడు {{index}} పేరు",
+ "nameFallback": "సభ్యుడు {{index}}",
+ "noRole": "రోల్ లేదు",
+ "removed": "తీసివేయబడింది",
+ "workflow": {
+ "addTooltip": "టీమ్మేట్ వర్క్ఫ్లోను జోడించు",
+ "editTooltip": "టీమ్మేట్ వర్క్ఫ్లోను సవరించు",
+ "label": "వర్క్ఫ్లో (ఐచ్ఛికం)",
+ "placeholder": "ఈ ఏజెంట్ ఎలా ప్రవర్తించాలి, ఇతరులతో ఎలా సంభాషించాలి...",
+ "saved": "సేవ్ చేయబడింది"
+ },
+ "worktree": {
+ "description": "ఈ టీమ్మేట్ను ప్రత్యేక git worktree లో రన్ చేయండి. మార్పులను వర్తింపజేయడం/తిరస్కరించడం లీడ్ వర్క్స్పేస్ కాకుండా ఆ worktree ను లక్ష్యంగా చేసుకుంటుంది.",
+ "label": "Worktree"
+ },
+ "addMembers": {
+ "title": "సభ్యులను జోడించు",
+ "description": "{{teamName}} కు కొత్త సభ్యులను జోడించండి"
+ },
+ "placeholders": {
+ "name": "member-name",
+ "mcpServers": "github, sentry"
+ }
+ },
+ "detail": {
+ "actions": {
+ "add": "జోడించు",
+ "cancel": "రద్దు చేయి",
+ "delete": "తొలగించు",
+ "editCode": "కోడ్ను సవరించు",
+ "launch": "లాంచ్ చేయి",
+ "remove": "తీసివేయి",
+ "stop": "ఆపు",
+ "task": "టాస్క్",
+ "visualize": "విజువలైజ్ చేయి"
+ },
+ "deleteTeam": {
+ "description": "టీమ్ \"{{team}}\" ను తొలగించాలా? ఈ చర్యను తిరిగి మార్చలేరు. అన్ని టీమ్ డేటా మరియు టాస్క్లు తొలగించబడతాయి.",
+ "title": "టీమ్ను తొలగించు"
+ },
+ "draft": {
+ "descriptionPrefix": "ఇది డ్రాఫ్ట్ టీమ్ -",
+ "descriptionSuffix": "{{count}} {{member}} తో కాన్ఫిగర్ చేయబడింది కానీ ఇంకా CLI ద్వారా ప్రొవిజన్ చేయబడలేదు. మోడల్ను ఎంచుకొని టీమ్ను ప్రారంభించడానికి Launch ను క్లిక్ చేయండి.",
+ "descriptionSuffix_few": "{{count}} {{member}} తో కాన్ఫిగర్ చేయబడింది కానీ ఇంకా CLI ద్వారా ప్రొవిజన్ చేయబడలేదు. మోడల్ను ఎంచుకొని టీమ్ను ప్రారంభించడానికి Launch ను క్లిక్ చేయండి.",
+ "descriptionSuffix_many": "{{count}} {{member}} తో కాన్ఫిగర్ చేయబడింది కానీ ఇంకా CLI ద్వారా ప్రొవిజన్ చేయబడలేదు. మోడల్ను ఎంచుకొని టీమ్ను ప్రారంభించడానికి Launch ను క్లిక్ చేయండి.",
+ "descriptionSuffix_one": "{{count}} {{member}} తో కాన్ఫిగర్ చేయబడింది కానీ ఇంకా CLI ద్వారా ప్రొవిజన్ చేయబడలేదు. మోడల్ను ఎంచుకొని టీమ్ను ప్రారంభించడానికి Launch ను క్లిక్ చేయండి.",
+ "descriptionSuffix_other": "{{count}} {{member}} తో కాన్ఫిగర్ చేయబడింది కానీ ఇంకా CLI ద్వారా ప్రొవిజన్ చేయబడలేదు. మోడల్ను ఎంచుకొని టీమ్ను ప్రారంభించడానికి Launch ను క్లిక్ చేయండి.",
+ "member": "సభ్యులు",
+ "member_few": "సభ్యులు",
+ "member_many": "సభ్యులు",
+ "member_one": "సభ్యుడు",
+ "member_other": "సభ్యులు",
+ "title": "టీమ్ ఇంకా లాంచ్ కాలేదు"
+ },
+ "invalidTab": "చెల్లని టీమ్ ట్యాబ్",
+ "kanbanSafeData": "kanban ను పూర్తిగా లోడ్ చేయడం విఫలమైంది. సురక్షిత డేటాను చూపిస్తోంది.",
+ "loadFailed": "టీమ్ను లోడ్ చేయడం విఫలమైంది",
+ "loading": "టీమ్ను లోడ్ చేస్తోంది",
+ "loadingSidebar": "టీమ్ సైడ్బార్ను లోడ్ చేస్తోంది",
+ "offline": {
+ "offline": "టీమ్ ఆఫ్లైన్లో ఉంది",
+ "partialFailed": "చివరి లాంచ్ మధ్యలో విఫలమైంది",
+ "partialMissing": "చివరి లాంచ్ మధ్యలో విఫలమైంది - {{missing}}/{{expected}} టీమ్మేట్లు చేరలేదు",
+ "reconciling": "చివరి లాంచ్ ఇంకా రీకన్సైల్ అవుతోంది"
+ },
+ "previous": "మునుపటి: {{paths}}",
+ "removeMember": {
+ "description": "టీమ్ నుండి \"{{member}}\" ను తీసివేయాలా? టాస్క్లు మరియు సందేశాలు భద్రపరచబడతాయి, కానీ ఈ పేరును మళ్లీ ఉపయోగించలేరు.",
+ "title": "సభ్యుడిని తీసివేయి"
+ },
+ "sections": {
+ "team": "టీమ్"
+ },
+ "solo": "సోలో",
+ "status": {
+ "active": "క్రియాశీలం",
+ "launching": "లాంచ్ చేస్తోంది...",
+ "running": "రన్ అవుతోంది"
+ },
+ "telemetry": {
+ "cpu": "CPU",
+ "memory": "మెమొరీ"
+ },
+ "tooltips": {
+ "deleteTeam": "టీమ్ను తొలగించు",
+ "editTeam": "టీమ్ను సవరించు",
+ "editUnavailableProvisioning": "ప్రొవిజనింగ్ ఇంకా ప్రోగ్రెస్లో ఉన్నప్పుడు టీమ్ సవరణ అందుబాటులో లేదు",
+ "openBuiltInEditor": "అంతర్నిర్మిత ఎడిటర్లో ప్రాజెక్ట్ను తెరువు",
+ "openTeamGraph": "టీమ్ గ్రాఫ్ను తెరువు",
+ "stopTeam": "టీమ్ను ఆపు"
+ },
+ "waitingForProvisioning": "ప్రొవిజనింగ్ పూర్తయిన తర్వాత టీమ్ డేటా కనిపిస్తుంది",
+ "context": {
+ "title": "కాంటెక్స్ట్",
+ "loading": "లోడ్ అవుతోంది...",
+ "noSessionLoaded": "ఏ సెషన్ లోడ్ కాలేదు",
+ "closePanel": "{{team}} కాంటెక్స్ట్ ప్యానెల్ను మూసివేయి",
+ "loadingContext": "కాంటెక్స్ట్ను లోడ్ చేస్తోంది...",
+ "openLeadSession": "కాంటెక్స్ట్ను చూడటానికి టీమ్ లీడ్ సెషన్ను తెరవండి."
+ }
+ },
+ "review": {
+ "fileHeader": {
+ "actions": {
+ "accept": "అంగీకరించు",
+ "discard": "విస్మరించు",
+ "discardTooltip": "ఈ ఫైల్ కోసం అన్ని సవరణలను విస్మరించు",
+ "keepMyDraft": "నా డ్రాఫ్ట్ను ఉంచు",
+ "reject": "తిరస్కరించు",
+ "reloadFromDisk": "డిస్క్ నుండి మళ్లీ లోడ్ చేయి",
+ "restore": "పునరుద్ధరించు",
+ "restoreTooltip": "ప్రివ్యూ నుండి ఈ ఫైల్ను డిస్క్లో సృష్టించు/పునరుద్ధరించు",
+ "saveFile": "ఫైల్ను సేవ్ చేయి",
+ "saveFileTooltip": "ఫైల్ను డిస్క్కు సేవ్ చేయి"
+ },
+ "badges": {
+ "deleted": "తొలగించబడింది",
+ "manualReview": "మాన్యువల్ సమీక్ష",
+ "new": "కొత్త",
+ "worktree": "WORKTREE"
+ },
+ "contentSource": {
+ "disk-current": "ప్రస్తుత డిస్క్",
+ "file-history": "ఫైల్ చరిత్ర",
+ "git-fallback": "Git ఫాల్బ్యాక్",
+ "ledger-exact": "టాస్క్ లెడ్జర్",
+ "ledger-snapshot": "లెడ్జర్ స్నాప్షాట్",
+ "snippet-reconstruction": "పునర్నిర్మించబడింది",
+ "unavailable": "కంటెంట్ అందుబాటులో లేదు"
+ },
+ "contentUnavailable": {
+ "badge": "కంటెంట్ అందుబాటులో లేదు",
+ "description": "ఈ మార్పు కోసం లెడ్జర్ మెటాడేటాను రికార్డ్ చేసింది, కానీ పూర్తి టెక్స్ట్ కంటెంట్ అందుబాటులో లేదు. ఇది సాధారణంగా బైనరీ, పెద్ద లేదా హాష్-మాత్రమే కంటెంట్ను సూచిస్తుంది.",
+ "safety": "అసురక్షిత డిస్క్ రైట్లను నివారించడానికి ఈ ఫైల్ కోసం స్వయంచాలక అంగీకారం/తిరస్కరణ నిలిపివేయబడింది.",
+ "title": "టెక్స్ట్ కంటెంట్ అందుబాటులో లేదు"
+ },
+ "disabled": {
+ "acceptRejectContentUnavailable": "పూర్తి టెక్స్ట్ కంటెంట్ అందుబాటులో లేనందున అంగీకారం/తిరస్కరణ నిలిపివేయబడింది.",
+ "acceptRejectMissingOnDisk": "ఫైల్ డిస్క్లో లేనప్పుడు అంగీకారం/తిరస్కరణ నిలిపివేయబడింది.",
+ "rejectBaselineUnavailable": "అసలు బేస్లైన్ అందుబాటులో లేనందున తిరస్కరణ నిలిపివేయబడింది.",
+ "rejectContentUnavailable": "పూర్తి టెక్స్ట్ కంటెంట్ అందుబాటులో లేనందున తిరస్కరణ నిలిపివేయబడింది.",
+ "rejectManualLedgerReview": "ఈ లెడ్జర్ మార్పులో బైనరీ, పెద్ద లేదా అందుబాటులో లేని కంటెంట్ ఉన్నందున తిరస్కరణ నిలిపివేయబడింది."
+ },
+ "externalChange": {
+ "changedOnDisk": "డిస్క్లో మార్చబడింది",
+ "deletedOnDisk": "డిస్క్లో తొలగించబడింది",
+ "recreatedOnDisk": "డిస్క్లో మళ్లీ సృష్టించబడింది"
+ },
+ "missingOnDisk": {
+ "badge": "డిస్క్లో లేదు",
+ "description": "ఏజెంట్ లాగ్ల నుండి మేము ఇంకా ప్రివ్యూను చూపించగలము, కానీ మీ ఫైల్సిస్టమ్ సింక్లో లేదు.",
+ "restorePrefix": "ఉపయోగించండి",
+ "restoreSuffix": "ప్రివ్యూ కంటెంట్ను తిరిగి డిస్క్కు రాయడానికి.",
+ "restoreUnavailable": "స్వయంచాలకంగా పునరుద్ధరించడానికి పూర్తి ఫైల్ కంటెంట్ అందుబాటులో లేదు.",
+ "title": "ఫైల్ డిస్క్లో లేదు"
+ },
+ "pathChange": {
+ "from": "{{path}} నుండి",
+ "to": "{{path}} కు"
+ },
+ "worktree": {
+ "isolated": "ఐసొలేటెడ్ worktree"
+ }
+ },
+ "toolbar": {
+ "stats": {
+ "pending": "{{count}} పెండింగ్",
+ "pending_one": "{{count}} పెండింగ్",
+ "pending_other": "{{count}} పెండింగ్",
+ "accepted": "{{count}} అంగీకరించబడ్డాయి",
+ "accepted_one": "{{count}} అంగీకరించబడింది",
+ "accepted_other": "{{count}} అంగీకరించబడ్డాయి",
+ "rejected": "{{count}} తిరస్కరించబడ్డాయి",
+ "rejected_one": "{{count}} తిరస్కరించబడింది",
+ "rejected_other": "{{count}} తిరస్కరించబడ్డాయి",
+ "acrossFiles": "{{count}} ఫైల్లలో",
+ "acrossFiles_one": "{{count}} ఫైల్లో",
+ "acrossFiles_other": "{{count}} ఫైల్లలో",
+ "edited": "{{count}} సవరించబడ్డాయి",
+ "edited_one": "{{count}} సవరించబడింది",
+ "edited_other": "{{count}} సవరించబడ్డాయి",
+ "pending_few": "{{count}} పెండింగ్",
+ "pending_many": "{{count}} పెండింగ్",
+ "accepted_few": "{{count}} అంగీకరించబడ్డాయి",
+ "accepted_many": "{{count}} అంగీకరించబడ్డాయి",
+ "rejected_few": "{{count}} తిరస్కరించబడ్డాయి",
+ "rejected_many": "{{count}} తిరస్కరించబడ్డాయి",
+ "acrossFiles_few": "{{count}} ఫైల్లలో",
+ "acrossFiles_many": "{{count}} ఫైల్లలో",
+ "edited_few": "{{count}} సవరించబడ్డాయి",
+ "edited_many": "{{count}} సవరించబడ్డాయి"
+ },
+ "actions": {
+ "auto": "Auto",
+ "undo": "రద్దు చేయి",
+ "acceptAll": "అన్నీ అంగీకరించు",
+ "rejectAll": "అన్నీ తిరస్కరించు",
+ "applying": "వర్తింపజేస్తోంది...",
+ "applyRejections": "తిరస్కరణలను వర్తింపజేయి"
+ },
+ "tooltips": {
+ "autoOn": "చివరికి స్క్రోల్ చేసినప్పుడు ఫైల్లను చూసినట్లు ఆటో-మార్క్ చేయి (ఆన్)",
+ "autoOff": "చివరికి స్క్రోల్ చేసినప్పుడు ఫైల్లను చూసినట్లు ఆటో-మార్క్ చేయి (ఆఫ్)",
+ "undo": "చివరి సమీక్ష ఆపరేషన్ను రద్దు చేయి (Ctrl+Z)",
+ "acceptAll": "అన్ని ఫైల్లలో అన్ని మార్పులను అంగీకరించు",
+ "rejectAll": "అన్ని ఫైల్లలో సురక్షితంగా తిరస్కరించదగిన అన్ని మార్పులను తిరస్కరించు",
+ "rejectAllDisabled": "తిరస్కరించడానికి ఏ పెండింగ్ ఫైల్లకు సురక్షిత అసలు బేస్లైన్ లేదు.",
+ "applyRejections": "తిరస్కరించిన hunks ను డిస్క్కు వర్తింపజేయి; అంగీకరించిన మార్పులు ఉన్నవి ఉన్నట్లుగా ఉంచబడతాయి"
+ }
+ },
+ "diffError": {
+ "title": "diff వీక్షణను రెండర్ చేయడం విఫలమైంది",
+ "unexpected": "diff ను రెండర్ చేస్తున్నప్పుడు ఊహించని లోపం సంభవించింది.",
+ "actions": {
+ "retry": "మళ్లీ ప్రయత్నించు"
+ },
+ "raw": {
+ "show": "రా diff డేటాను చూపించు",
+ "file": "ఫైల్: {{file}}",
+ "original": "--- అసలు",
+ "modified": "+++ మార్చబడింది",
+ "charsTotal": "... (మొత్తం {{count}} అక్షరాలు)",
+ "charsTotal_one": "... (మొత్తం {{count}} అక్షరం)",
+ "charsTotal_other": "... (మొత్తం {{count}} అక్షరాలు)",
+ "charsTotal_few": "... (మొత్తం {{count}} అక్షరాలు)",
+ "charsTotal_many": "... (మొత్తం {{count}} అక్షరాలు)"
+ }
+ },
+ "fileTree": {
+ "viewed": "చూడబడింది",
+ "badges": {
+ "new": "కొత్త",
+ "deleted": "తొలగించబడింది"
+ },
+ "collapseFolder": "{{name}} ను కుదించు",
+ "expandFolder": "{{name}} ను విస్తరించు",
+ "empty": {
+ "noChangedFiles": "మార్చిన ఫైల్లు లేవు",
+ "noMatchingFiles": "సరిపోలే ఫైల్లు లేవు"
+ },
+ "searchPlaceholder": "ఫైల్లను శోధించండి…",
+ "filters": {
+ "unresolved": "పరిష్కరించబడనివి",
+ "rejected": "తిరస్కరించబడ్డాయి",
+ "new": "కొత్త",
+ "clear": "క్లియర్ చేయి"
+ }
+ },
+ "diffControls": {
+ "previousChunk": "మునుపటి భాగం",
+ "nextChunk": "తదుపరి భాగం",
+ "rejectChange": "మార్పును తిరస్కరించు (⌘N)",
+ "acceptChange": "మార్పును అంగీకరించు (⌘Y)",
+ "undo": "రద్దు చేయి",
+ "keep": "ఉంచు",
+ "rejectShortcut": "⌘N",
+ "acceptShortcut": "⌘Y"
+ },
+ "conflict": {
+ "title": "వైరుధ్యం గుర్తించబడింది",
+ "description": "ఏజెంట్ మార్పుల తర్వాత ఈ ఫైల్ సవరించబడింది",
+ "cancel": "రద్దు చేయి",
+ "saveResolution": "పరిష్కారాన్ని సేవ్ చేయి",
+ "editManually": "మాన్యువల్గా సవరించు",
+ "useOriginal": "అసలును ఉపయోగించు",
+ "keepCurrent": "ప్రస్తుతదాన్ని ఉంచు"
+ },
+ "fullDiffLoading": {
+ "titleOne": "పూర్తి diff ను సిద్ధం చేస్తోంది",
+ "titleMany": "{{count}} పూర్తి diff లను సిద్ధం చేస్తోంది",
+ "subtitleForFile": "{{file}} కోసం ఖచ్చితమైన ఎడిటర్ diff ను ఖరారు చేస్తోంది.",
+ "subtitleCurrentFile": "ప్రస్తుత ఫైల్ కోసం ఖచ్చితమైన ఎడిటర్ diff ను ఖరారు చేస్తోంది.",
+ "subtitleMany": "ప్రస్తుతం లోడ్ అవుతున్న ఫైల్ల కోసం ఖచ్చితమైన before/after బేస్లైన్లను పరిష్కరిస్తోంది.",
+ "previewsReady": "{{count}} ప్రివ్యూలు సిద్ధం",
+ "previewsReady_one": "{{count}} ప్రివ్యూ సిద్ధం",
+ "editorViewLoading": "ఎడిటర్ వీక్షణ లోడ్ అవుతోంది",
+ "filesInProgress": "{{count}} ఫైల్లు ప్రోగ్రెస్లో",
+ "filesInProgress_one": "{{count}} ఫైల్ ప్రోగ్రెస్లో",
+ "filesReady": "{{ready}}/{{total}} ఫైల్లు సిద్ధం",
+ "progressDescription": "{{ready}} సిద్ధం, {{loading}} ఇంకా లోడ్ అవుతోంది. మిగిలిన బేస్లైన్లు పరిష్కరించబడుతున్నప్పుడు ప్రివ్యూ diff లు దిగువన కనిపిస్తాయి.",
+ "singleDescription": "ఖచ్చితమైన బేస్లైన్ పరిష్కరించబడుతున్నప్పుడు ప్రివ్యూ diff లు దిగువన కనిపిస్తాయి.",
+ "previewsReady_few": "{{count}} ప్రివ్యూలు సిద్ధం",
+ "previewsReady_many": "{{count}} ప్రివ్యూలు సిద్ధం",
+ "previewsReady_other": "{{count}} ప్రివ్యూలు సిద్ధం",
+ "filesInProgress_few": "{{count}} ఫైల్లు ప్రోగ్రెస్లో",
+ "filesInProgress_many": "{{count}} ఫైల్లు ప్రోగ్రెస్లో",
+ "filesInProgress_other": "{{count}} ఫైల్లు ప్రోగ్రెస్లో"
+ },
+ "fileMissingPrefix": "ఫైల్ డిస్క్లో లేదు. ఈ diff ఏజెంట్ లాగ్ల నుండి కేవలం ప్రివ్యూ మాత్రమే కావచ్చు. ఉపయోగించండి",
+ "restore": "పునరుద్ధరించు",
+ "fileMissingSuffix": "డిస్క్లో ఫైల్ను సృష్టించడానికి.",
+ "filePlaceholder": {
+ "loading": "లోడ్ అవుతోంది",
+ "description": "ఈ ఫైల్ కోసం పూర్తి ఎడిటర్ diff ను సిద్ధం చేస్తోంది."
+ },
+ "loading": {
+ "diff": "DIFF",
+ "ledgerObjectsProcessed": "{{count}} లెడ్జర్ ఆబ్జెక్ట్లు ప్రాసెస్ చేయబడ్డాయి",
+ "ledgerObjectsProcessed_one": "{{count}} లెడ్జర్ ఆబ్జెక్ట్ ప్రాసెస్ చేయబడింది",
+ "ledgerObjectsProcessed_other": "{{count}} లెడ్జర్ ఆబ్జెక్ట్లు ప్రాసెస్ చేయబడ్డాయి",
+ "ledgerObjectsProcessed_few": "{{count}} లెడ్జర్ ఆబ్జెక్ట్లు ప్రాసెస్ చేయబడ్డాయి",
+ "ledgerObjectsProcessed_many": "{{count}} లెడ్జర్ ఆబ్జెక్ట్లు ప్రాసెస్ చేయబడ్డాయి",
+ "phases": {
+ "readingLedger": "టాస్క్ లెడ్జర్ను చదువుతోంది...",
+ "resolvingFiles": "ఫైల్ స్థితులను పరిష్కరిస్తోంది...",
+ "checkingWorktree": "worktree కాంటెక్స్ట్ను తనిఖీ చేస్తోంది...",
+ "preparingDiffs": "సమీక్ష diff లను సిద్ధం చేస్తోంది..."
+ }
+ },
+ "progress": {
+ "viewed": "{{viewed}}/{{total}} చూడబడింది"
+ },
+ "scope": {
+ "readMore": "మరింత చదవండి",
+ "tiers": {
+ "exact": {
+ "title": "టాస్క్ స్కోప్ ఖచ్చితంగా నిర్ధారించబడింది",
+ "detail": "సెషన్ లాగ్లో ప్రారంభం మరియు పూర్తి మార్కర్లు రెండూ కనుగొనబడ్డాయి. diff లో ఈ నిర్దిష్ట టాస్క్ సమయంలో చేసిన మార్పులు మాత్రమే ఉంటాయి - అదే ఫైల్లను సవరించిన ఇతర టాస్క్లు మినహాయించబడ్డాయి."
+ },
+ "endEstimated": {
+ "title": "ముగింపు సరిహద్దు అంచనా వేయబడింది",
+ "detail": "ప్రారంభ మార్కర్ మాత్రమే కనుగొనబడింది - టాస్క్కు ఇంకా పూర్తి మార్కర్ లేదు. టాస్క్ ప్రారంభం నుండి సెషన్ ముగింపు వరకు మార్పులు చూపబడ్డాయి. అదే సెషన్లో దీని తర్వాత ఇతర టాస్క్లు రన్ అయితే, వాటి మార్పులు కూడా చేర్చబడవచ్చు."
+ },
+ "startEstimated": {
+ "title": "ప్రారంభ సరిహద్దు అంచనా వేయబడింది",
+ "detail": "పూర్తి మార్కర్ మాత్రమే కనుగొనబడింది - పని ప్రారంభం క్యాప్చర్ చేయబడలేదు. అదే సెషన్లో దీనికి ముందు ఇతర టాస్క్లు రన్ అయితే, అదే ఫైల్లకు వాటి మార్పులు కూడా చేర్చబడవచ్చు."
+ },
+ "allSession": {
+ "title": "అన్ని సెషన్ మార్పులను చూపిస్తోంది",
+ "detail": "సెషన్ లాగ్లో టాస్క్ మార్కర్లు కనుగొనబడలేదు. ఈ టాస్క్ను వేరు చేయలేరు - ఇతర టాస్క్ల నుండి మార్పులతో సహా మొత్తం సెషన్ నుండి అన్ని ఫైల్ మార్పులు చూపబడ్డాయి. ఇది పాత CLI వెర్షన్లు లేదా నాన్-స్టాండర్డ్ వర్క్ఫ్లోలతో జరగవచ్చు."
+ }
+ },
+ "ledger": {
+ "exact": {
+ "title": "టాస్క్ లెడ్జర్ ద్వారా క్యాప్చర్ చేసిన మార్పులు",
+ "detail": "ఏజెంట్ ఈ టాస్క్పై పనిచేస్తున్నప్పుడు ఆర్కెస్ట్రేటర్ ఈ ఫైల్ మార్పులను క్యాప్చర్ చేసింది.",
+ "badge": "లెడ్జర్ ఖచ్చితం"
+ },
+ "limited": {
+ "title": "పరిమిత సమీక్షణీయతతో క్యాప్చర్ చేసిన మార్పులు",
+ "detail": "ఈ టాస్క్ కోసం ఆర్కెస్ట్రేటర్ ఈ ఫైల్ మార్పులను క్యాప్చర్ చేసింది, కానీ కనీసం ఒక మార్పు స్నాప్షాట్ లేదా మెటాడేటా-మాత్రమే మూలం నుండి క్యాప్చర్ చేయబడింది. అందుబాటులో ఉన్న చోట ఖచ్చితమైన టెక్స్ట్ diff లను సమీక్షించండి; బైనరీ లేదా అందుబాటులో లేని కంటెంట్కు మాన్యువల్ సమీక్ష అవసరం కావచ్చు.",
+ "mixedBadge": "మిశ్రమ సమీక్షణీయత",
+ "needsReviewBadge": "సమీక్ష అవసరం"
+ }
+ },
+ "workInterval": {
+ "title": "నిల్వ చేసిన పని వ్యవధి ద్వారా స్కోప్ చేయబడింది",
+ "detail": "సెషన్ లాగ్లో టాస్క్ ప్రారంభ మార్కర్ అందుబాటులో లేదు, కాబట్టి diff బోర్డులో నిల్వ చేసిన టాస్క్ పని వ్యవధి ద్వారా స్కోప్ చేయబడింది.",
+ "badge": "వ్యవధి స్కోప్ చేయబడింది"
+ },
+ "confidence": {
+ "high": "అధిక విశ్వాసం",
+ "medium": "మధ్యస్థ విశ్వాసం",
+ "low": "తక్కువ విశ్వాసం",
+ "bestEffort": "ఉత్తమ ప్రయత్నం"
+ }
+ },
+ "shortcuts": {
+ "title": "కీబోర్డ్ షార్ట్కట్లు",
+ "actions": {
+ "nextChange": "తదుపరి మార్పు",
+ "previousChange": "మునుపటి మార్పు",
+ "nextFile": "తదుపరి ఫైల్",
+ "previousFile": "మునుపటి ఫైల్",
+ "acceptChange": "మార్పును అంగీకరించు",
+ "rejectChange": "మార్పును తిరస్కరించు",
+ "saveFile": "ఫైల్ను సేవ్ చేయి",
+ "undo": "రద్దు చేయి",
+ "redo": "మళ్లీ చేయి",
+ "toggleShortcuts": "షార్ట్కట్లను టోగుల్ చేయి",
+ "closeDialog": "డైలాగ్ మూసివేయి"
+ }
+ },
+ "timeline": {
+ "empty": "సవరణ ఈవెంట్లు లేవు",
+ "titleWithCount": "సవరణ టైమ్లైన్ ({{count}})"
+ },
+ "continuousScroll": {
+ "empty": "సమీక్షించదగిన ఫైల్ మార్పులు లేవు"
+ },
+ "empty": {
+ "noSafeDiff": "సురక్షిత diff అందుబాటులో లేదు",
+ "noFileChangesRecorded": "ఫైల్ మార్పులు రికార్డ్ చేయబడలేదు",
+ "noSafeDiffDescription": "ఈ టాస్క్ కోసం టాస్క్ లెడ్జర్ సురక్షిత ఫైల్ diff ను బహిర్గతం చేయలేదు.",
+ "noSafeDiffDiagnosticsDescription": "ఈ టాస్క్ కోసం టాస్క్ లెడ్జర్ సురక్షిత ఫైల్ diff ను బహిర్గతం చేయలేదు. దిగువ డయాగ్నొస్టిక్లు దానికి కారణాన్ని వివరిస్తాయి.",
+ "noFileEventsYet": "ఈ టాస్క్ కోసం టాస్క్ లెడ్జర్లో ఇంకా ఫైల్ ఈవెంట్లు లేవు.",
+ "noFileEvents": "ఈ టాస్క్ కోసం టాస్క్ లెడ్జర్లో ఫైల్ ఈవెంట్లు లేవు."
+ }
+ },
+ "messages": {
+ "actions": {
+ "bottomSheetActions": "సందేశ బాటమ్ షీట్ చర్యలు",
+ "collapseAll": "అన్ని సందేశాలను కుదించు",
+ "collapseSheet": "షీట్ను కుదించు",
+ "expandAll": "అన్ని సందేశాలను విస్తరించు",
+ "expandSheet": "షీట్ను విస్తరించు",
+ "floatComposer": "కంపోజర్ను ఫ్లోట్ చేయి",
+ "floatMessagesComposer": "సందేశ కంపోజర్ను ఫ్లోట్ చేయి",
+ "hideSearch": "శోధనను దాచు",
+ "loadOlder": "పాత సందేశాలను లోడ్ చేయి",
+ "markAllRead": "అన్నీ చదివినట్లుగా గుర్తించు",
+ "messageActions": "సందేశ చర్యలు",
+ "moveMessagesToBottomSheet": "సందేశాలను బాటమ్ షీట్కు తరలించు",
+ "moveMessagesToSidebar": "సందేశాలను సైడ్బార్కు తరలించు",
+ "moveToBottomSheet": "బాటమ్ షీట్కు తరలించు",
+ "moveToInline": "ఇన్లైన్కు తరలించు",
+ "moveToSidebar": "సైడ్బార్కు తరలించు",
+ "panelActions": "సందేశ ప్యానెల్ చర్యలు",
+ "searchMessages": "సందేశాలను శోధించు"
+ },
+ "delivery": {
+ "copied": "కాపీ చేయబడింది",
+ "copyDebugDetails": "డీబగ్ వివరాలను కాపీ చేయి",
+ "details": "వివరాలు",
+ "fields": {
+ "acceptanceUnknown": "acceptanceUnknown",
+ "delivered": "delivered",
+ "diagnostics": "diagnostics",
+ "ledgerStatus": "ledgerStatus",
+ "messageId": "messageId",
+ "providerId": "providerId",
+ "queuedBehindMessageId": "queuedBehindMessageId",
+ "reason": "reason",
+ "responsePending": "responsePending",
+ "responseState": "responseState",
+ "statusMessageId": "statusMessageId",
+ "userVisibleMessage": "userVisibleMessage",
+ "userVisibleNextReviewAt": "userVisibleNextReviewAt",
+ "userVisibleReasonCode": "userVisibleReasonCode",
+ "userVisibleState": "userVisibleState",
+ "visibleReplyCorrelation": "visibleReplyCorrelation",
+ "visibleReplyMessageId": "visibleReplyMessageId"
+ }
+ },
+ "panelMode": "సందేశ ప్యానెల్ మోడ్",
+ "title": "సందేశాలు",
+ "unread": {
+ "new": "{{count}} కొత్తవి",
+ "unread": "{{count}} చదవనివి",
+ "new_few": "{{count}} కొత్తవి",
+ "new_many": "{{count}} కొత్తవి",
+ "new_one": "{{count}} కొత్తది",
+ "new_other": "{{count}} కొత్తవి",
+ "unread_few": "{{count}} చదవనివి",
+ "unread_many": "{{count}} చదవనివి",
+ "unread_one": "{{count}} చదవనిది",
+ "unread_other": "{{count}} చదవనివి"
+ },
+ "filter": {
+ "ariaLabel": "సందేశాలను ఫిల్టర్ చేయి",
+ "tooltip": "సందేశాలను ఫిల్టర్ చేయి",
+ "from": "నుండి",
+ "to": "కు",
+ "noData": "డేటా లేదు",
+ "showStatusUpdates": "స్థితి అప్డేట్లను చూపించు (idle/shutdown)",
+ "actions": {
+ "reset": "రీసెట్ చేయి",
+ "save": "సేవ్ చేయి"
+ }
+ },
+ "status": {
+ "title": "స్థితి"
+ },
+ "actionMode": {
+ "label": "చర్య మోడ్"
+ },
+ "search": {
+ "placeholder": "శోధించండి..."
+ }
+ },
+ "modelSelector": {
+ "badges": {
+ "configured": "కాన్ఫిగర్ చేయబడింది",
+ "connected": "కనెక్ట్ చేయబడింది",
+ "failed": "విఫలమైంది",
+ "free": "ఉచితం",
+ "local": "స్థానిక",
+ "needsTest": "పరీక్ష అవసరం",
+ "verified": "ధృవీకరించబడింది",
+ "unavailable": "అందుబాటులో లేదు",
+ "issue": "సమస్య"
+ },
+ "customModelId": "కస్టమ్ మోడల్ id",
+ "label": "మోడల్ (ఐచ్ఛికం)",
+ "multimodelRequired": "Codex మరియు Gemini కు Multimodel మోడ్ అవసరం.",
+ "openCode": {
+ "allSources": "అన్ని OpenCode మూలాలు",
+ "filterSource": "{{source}} ను ఫిల్టర్ చేయి",
+ "filterSources": "OpenCode మూలాలను ఫిల్టర్ చేయి",
+ "freeOnly": "ఉచితం మాత్రమే",
+ "freeTooltip": "OpenCode ఈ మోడల్ను ఉచితంగా గుర్తిస్తుంది.",
+ "loadingModels": "OpenCode మోడల్లను లోడ్ చేస్తోంది...",
+ "noSourcesFound": "మూలాలు కనుగొనబడలేదు.",
+ "recommendedOnly": "సిఫార్సు చేసినవి మాత్రమే",
+ "searchSources": "మూలాలను శోధించండి",
+ "sourcesCount": "{{count}} OpenCode మూలాలు",
+ "sourcesCount_few": "{{count}} OpenCode మూలాలు",
+ "sourcesCount_many": "{{count}} OpenCode మూలాలు",
+ "sourcesCount_one": "{{count}} OpenCode మూలం",
+ "sourcesCount_other": "{{count}} OpenCode మూలాలు"
+ },
+ "reason": "కారణం: {{reason}}",
+ "runtimeModelsSyncing": "స్పష్టమైన మోడల్లు ప్రస్తుత రన్టైమ్ నుండి లోడ్ అవుతాయి. జాబితా సింక్ అవుతున్నప్పుడు డిఫాల్ట్ అందుబాటులో ఉంటుంది.",
+ "fastMode": {
+ "codexLabel": "Fast మోడ్ (2x క్రెడిట్లు)",
+ "optionalLabel": "Fast మోడ్ (ఐచ్ఛికం)",
+ "defaultOff": "డిఫాల్ట్ (ఆఫ్)",
+ "fast": "Fast",
+ "off": "ఆఫ్",
+ "defaultFast": "డిఫాల్ట్ (Fast)",
+ "defaultResolvesTo": "డిఫాల్ట్ ప్రస్తుతం {{mode}} కు పరిష్కరిస్తుంది.",
+ "runtimeBackedHint": "Fast మోడ్ రన్టైమ్-ఆధారితం మరియు పరిష్కరించబడిన Anthropic లాంచ్ మోడల్ మద్దతిచ్చినప్పుడు మాత్రమే అన్లాక్ అవుతుంది."
+ },
+ "anthropicExtraUsage": {
+ "pricingDocs": "Anthropic ధర డాక్స్ను చదవండి"
+ },
+ "searchModels": "మోడల్లను శోధించండి",
+ "defaultModel": "డిఫాల్ట్",
+ "empty": {
+ "noSearchMatches": "ఈ శోధనకు ఏ మోడల్లు సరిపోలడం లేదు.",
+ "recommendedFreeOpenCode": "ప్రస్తుత రన్టైమ్ జాబితాలో సిఫార్సు చేసిన ఉచిత OpenCode మోడల్లు అందుబాటులో లేవు.",
+ "freeOpenCode": "ప్రస్తుత రన్టైమ్ జాబితాలో ఉచిత OpenCode మోడల్లు అందుబాటులో లేవు.",
+ "recommendedOpenCode": "ప్రస్తుత రన్టైమ్ జాబితాలో సిఫార్సు చేసిన OpenCode మోడల్లు అందుబాటులో లేవు.",
+ "noModels": "ప్రస్తుత రన్టైమ్ జాబితాలో మోడల్లు అందుబాటులో లేవు."
+ },
+ "openCodeStatus": {
+ "notReadyTitle": "టీమ్ లాంచ్ కోసం OpenCode సిద్ధంగా లేదు",
+ "freeModelsAvailableTitle": "OpenCode ఉచిత మోడల్లు అందుబాటులో ఉన్నాయి",
+ "providerNotConnectedTitle": "OpenCode ప్రొవైడర్ కనెక్ట్ కాలేదు",
+ "readyTitle": "OpenCode సిద్ధం",
+ "readyMessage": "OpenCode ప్రొవైడర్ సంసిద్ధతను దాటింది. ఈ టీమ్ కోసం OpenCode మోడల్లను ఉపయోగించడానికి దాన్ని ఎంచుకోండి.",
+ "useOpenCode": "OpenCode ఉపయోగించు",
+ "badges": {
+ "check": "తనిఖీ చేయి",
+ "install": "ఇన్స్టాల్ చేయి",
+ "free": "ఉచితం",
+ "setup": "సెటప్"
+ },
+ "summary": {
+ "checking": "OpenCode స్థితి: రన్టైమ్ను తనిఖీ చేస్తోంది",
+ "status": "OpenCode స్థితి: {{parts}}"
+ },
+ "summaryParts": {
+ "teamLaunchBlocked": "టీమ్ లాంచ్ నిరోధించబడింది",
+ "providerOptional": "ప్రొవైడర్ కనెక్షన్ ఐచ్ఛికం",
+ "providerModelsNeedSetup": "ప్రొవైడర్-ఆధారిత మోడల్లకు సెటప్ అవసరం",
+ "teamLaunchReady": "టీమ్ లాంచ్ సిద్ధం",
+ "runtimeDetected": "రన్టైమ్ గుర్తించబడింది",
+ "runtimeMissing": "రన్టైమ్ లేదు",
+ "freeWithoutAuth": "auth లేకుండా ఉచిత మోడల్లు అందుబాటులో ఉన్నాయి",
+ "providerConnected": "ప్రొవైడర్ కనెక్ట్ చేయబడింది",
+ "providerNotConnected": "ప్రొవైడర్ కనెక్ట్ కాలేదు"
+ },
+ "messages": {
+ "checking": "యాప్ ఇంకా OpenCode రన్టైమ్ను తనిఖీ చేస్తోంది. ప్రొవైడర్ స్థితి పూర్తయ్యే వరకు వేచి ఉండి, ఆపై మళ్లీ ప్రయత్నించండి.",
+ "unsupported": "OpenCode ఇన్స్టాల్ కాలేదు, కనుగొనబడలేదు, లేదా గుర్తించిన రన్టైమ్కు మద్దతు లేదు. OpenCode ను ఇన్స్టాల్ చేయండి లేదా అప్డేట్ చేయండి, ఆపై ప్రొవైడర్ స్థితిని రిఫ్రెష్ చేయండి. మీరు హోమ్ పేజీలోని Install బటన్ను కూడా ఉపయోగించవచ్చు.",
+ "freeAvailable": "OpenCode గుర్తించబడింది. ప్రొవైడర్ను కనెక్ట్ చేయకుండానే మీరు Big Pickle వంటి ఉచిత OpenCode మోడల్లను ఉపయోగించవచ్చు. మీకు ప్రొవైడర్-ఆధారిత మోడల్లు కావలసినప్పుడు మాత్రమే ప్రొవైడర్ను కనెక్ట్ చేయండి.",
+ "noFreeListed": "OpenCode గుర్తించబడింది, కానీ ఇంకా ఏ ఉచిత OpenCode మోడల్ జాబితా చేయబడలేదు. ప్రొవైడర్ స్థితిని రిఫ్రెష్ చేయండి, లేదా ప్రొవైడర్-ఆధారిత మోడల్ల కోసం OpenCode లో ప్రొవైడర్ను కనెక్ట్ చేయండి.",
+ "launchBlocked": "OpenCode ఇన్స్టాల్ చేయబడింది మరియు ప్రామాణీకరించబడింది, కానీ Agent Teams లాంచ్ సంసిద్ధత నిరోధించబడింది.",
+ "ready": "టీమ్ లాంచ్ కోసం OpenCode సిద్ధం."
+ },
+ "loadingRuntime": "OpenCode రన్టైమ్ స్థితి ఇంకా లోడ్ అవుతోంది."
+ },
+ "advisory": {
+ "pingNotConfirmed": "Ping ధృవీకరించబడలేదు",
+ "note": "గమనిక"
+ },
+ "placeholders": {
+ "customModelId": "openai/gpt-oss-20b"
+ },
+ "routeGroups": {
+ "openCodeConfig": "OpenCode కాన్ఫిగ్",
+ "builtinFree": "ఉచిత అంతర్నిర్మిత",
+ "connectedProviders": "కనెక్ట్ చేయబడిన ప్రొవైడర్లు",
+ "otherCatalog": "ఇతర OpenCode క్యాటలాగ్"
+ },
+ "pricing": {
+ "free": "ఉచితం",
+ "inputShort": "in {{rate}}",
+ "outputShort": "out {{rate}}",
+ "perMillionSummary": "{{summary}} / 1M",
+ "inputTitle": "ఇన్పుట్: ప్రతి 1M టోకెన్లకు {{rate}}",
+ "outputTitle": "అవుట్పుట్: ప్రతి 1M టోకెన్లకు {{rate}}",
+ "cacheReadTitle": "క్యాష్ రీడ్: ప్రతి 1M టోకెన్లకు {{rate}}",
+ "cacheWriteTitle": "క్యాష్ రైట్: ప్రతి 1M టోకెన్లకు {{rate}}"
+ },
+ "defaultTooltip": {
+ "anthropicCompatibleWithResolved": "Anthropic-అనుకూల ఎండ్పాయింట్ డిఫాల్ట్ మోడల్ను ఉపయోగిస్తుంది.\nప్రస్తుతం {{model}} కు పరిష్కరిస్తుంది.",
+ "anthropicCompatible": "Anthropic-అనుకూల ఎండ్పాయింట్ డిఫాల్ట్ మోడల్ను ఉపయోగిస్తుంది.",
+ "anthropic": "Claude టీమ్ డిఫాల్ట్ మోడల్ను ఉపయోగిస్తుంది.\n1M కాంటెక్స్ట్తో {{longContextModel}} కు పరిష్కరిస్తుంది, లేదా Limit context ప్రారంభించబడినప్పుడు 200K కాంటెక్స్ట్తో {{limitedContextModel}} కు.",
+ "openCodeWithResolved": "OpenCode డిఫాల్ట్ మోడల్ను ఉపయోగిస్తుంది.\nప్రస్తుతం {{model}} కు పరిష్కరిస్తుంది.",
+ "openCode": "OpenCode రన్టైమ్ డిఫాల్ట్ మోడల్ను ఉపయోగిస్తుంది.",
+ "runtime": "ఎంచుకున్న ప్రొవైడర్ కోసం రన్టైమ్ డిఫాల్ట్ను ఉపయోగిస్తుంది."
+ },
+ "multimodelOff": "Multimodel ఆఫ్",
+ "unavailableInRuntime": "ప్రస్తుత రన్టైమ్లో అందుబాటులో లేదు"
+ },
+ "taskDetail": {
+ "actions": {
+ "cancel": "రద్దు చేయి",
+ "delete": "తొలగించు",
+ "markResolved": "పరిష్కరించబడినట్లుగా గుర్తించు",
+ "save": "సేవ్ చేయి"
+ },
+ "attachments": {
+ "commentAttachment": "వ్యాఖ్య అటాచ్మెంట్",
+ "fromComments": "వ్యాఖ్యల నుండి",
+ "preview": "{{filename}} ప్రివ్యూ"
+ },
+ "changes": {
+ "badges": {
+ "attention": "శ్రద్ధ",
+ "noSafeDiff": "సురక్షిత diff లేదు"
+ },
+ "empty": {
+ "noFileChangesRecorded": "ఫైల్ మార్పులు రికార్డ్ చేయబడలేదు",
+ "noFileChangesRecordedYet": "ఇంకా ఫైల్ మార్పులు రికార్డ్ చేయబడలేదు",
+ "noReviewableChangesRecovered": "సమీక్షించదగిన ఫైల్ మార్పులు తిరిగి పొందబడలేదు",
+ "noSafeDiffAvailable": "సురక్షిత diff అందుబాటులో లేదు"
+ },
+ "loadFailed": "టాస్క్ మార్పుల సారాంశాన్ని లోడ్ చేయడం విఫలమైంది",
+ "loading": "మార్పులను లోడ్ చేస్తోంది...",
+ "fileCount": "{{count}} ఫైల్లు",
+ "fileRowsHidden": "{{count}} ఫైల్ వరుసలు దాచబడ్డాయి",
+ "moreDiagnostics": "{{count}} మరిన్ని డయాగ్నొస్టిక్లు",
+ "moreFiles": "{{count}} మరిన్ని ఫైల్లు",
+ "openInEditor": "ఎడిటర్లో తెరువు",
+ "openTask": "టాస్క్ {{subject}} ను తెరువు",
+ "refresh": "మార్పులను రిఫ్రెష్ చేయి",
+ "refreshFailed": "రిఫ్రెష్ విఫలమైంది: {{error}}",
+ "refreshing": "రిఫ్రెష్ చేస్తోంది",
+ "refreshingChanges": "మార్పులను రిఫ్రెష్ చేస్తోంది...",
+ "refreshTeamChanges": "టీమ్ మార్పులను రిఫ్రెష్ చేయి",
+ "refreshShort": "రిఫ్రెష్",
+ "reviewDiff": "diff ను సమీక్షించు",
+ "reviewTaskDiff": "టాస్క్ diff ను సమీక్షించు",
+ "scannedCandidateTasks": "{{eligible}} అభ్యర్థి టాస్క్లలో {{requested}} స్కాన్ చేయబడ్డాయి",
+ "tasksDeferred": "ఈ పాస్లో {{count}} టాస్క్లు వాయిదా వేయబడ్డాయి",
+ "title": "మార్పులు",
+ "fileCount_few": "{{count}} ఫైల్లు",
+ "fileCount_many": "{{count}} ఫైల్లు",
+ "fileCount_one": "{{count}} ఫైల్",
+ "fileCount_other": "{{count}} ఫైల్లు",
+ "fileRowsHidden_few": "{{count}} ఫైల్ వరుసలు దాచబడ్డాయి",
+ "fileRowsHidden_many": "{{count}} ఫైల్ వరుసలు దాచబడ్డాయి",
+ "fileRowsHidden_one": "{{count}} ఫైల్ వరుస దాచబడింది",
+ "fileRowsHidden_other": "{{count}} ఫైల్ వరుసలు దాచబడ్డాయి",
+ "moreDiagnostics_few": "{{count}} మరిన్ని డయాగ్నొస్టిక్లు",
+ "moreDiagnostics_many": "{{count}} మరిన్ని డయాగ్నొస్టిక్లు",
+ "moreDiagnostics_one": "{{count}} మరో డయాగ్నొస్టిక్",
+ "moreDiagnostics_other": "{{count}} మరిన్ని డయాగ్నొస్టిక్లు",
+ "moreFiles_few": "{{count}} మరిన్ని ఫైల్లు",
+ "moreFiles_many": "{{count}} మరిన్ని ఫైల్లు",
+ "moreFiles_one": "{{count}} మరో ఫైల్",
+ "moreFiles_other": "{{count}} మరిన్ని ఫైల్లు",
+ "tasksDeferred_few": "ఈ పాస్లో {{count}} టాస్క్లు వాయిదా వేయబడ్డాయి",
+ "tasksDeferred_many": "ఈ పాస్లో {{count}} టాస్క్లు వాయిదా వేయబడ్డాయి",
+ "tasksDeferred_one": "ఈ పాస్లో {{count}} టాస్క్ వాయిదా వేయబడింది",
+ "tasksDeferred_other": "ఈ పాస్లో {{count}} టాస్క్లు వాయిదా వేయబడ్డాయి"
+ },
+ "clarification": {
+ "awaitingLead": "టీమ్ లీడ్ నుండి స్పష్టీకరణ కోసం వేచి ఉంది",
+ "awaitingUser": "మీ నుండి స్పష్టీకరణ కోసం వేచి ఉంది"
+ },
+ "description": {
+ "add": "వివరణను జోడించడానికి క్లిక్ చేయండి...",
+ "edit": "వివరణను సవరించు",
+ "placeholder": "టాస్క్ వివరణ (markdown కు మద్దతిస్తుంది)"
+ },
+ "loading": {
+ "fetchingTeamData": "టీమ్ డేటాను పొందుతోంది",
+ "title": "టాస్క్ను లోడ్ చేస్తోంది..."
+ },
+ "logs": {
+ "newArriving": "కొత్త టాస్క్ లాగ్లు వస్తున్నాయి"
+ },
+ "notFound": "టాస్క్ కనుగొనబడలేదు",
+ "related": {
+ "blockedBy": "దీని ద్వారా నిరోధించబడింది",
+ "blocks": "నిరోధిస్తుంది",
+ "linkedFrom": "దీని నుండి లింక్ చేయబడింది",
+ "links": "లింక్లు",
+ "title": "సంబంధిత టాస్క్లు"
+ },
+ "review": {
+ "reviewer": "సమీక్షకుడు: {{reviewer}}"
+ },
+ "sections": {
+ "attachments": "అటాచ్మెంట్లు",
+ "changes": "మార్పులు",
+ "comments": "వ్యాఖ్యలు",
+ "description": "వివరణ",
+ "taskLogs": "టాస్క్ లాగ్లు",
+ "workflowHistory": "వర్క్ఫ్లో చరిత్ర"
+ },
+ "unassigned": "కేటాయించబడలేదు",
+ "workflow": {
+ "implementationTimeTitle": "నిల్వ చేసిన పని వ్యవధుల నుండి అమలు సమయం",
+ "inProgressTime": "ప్రోగ్రెస్లో ఉన్న సమయం {{duration}}"
+ },
+ "comments": {
+ "renderLimit": "UI ప్రతిస్పందనగా ఉంచడానికి అత్యంత ఇటీవలి {{formattedCount}} వ్యాఖ్యలను చూపిస్తోంది.",
+ "badges": {
+ "approved": "ఆమోదించబడింది",
+ "reviewRequested": "సమీక్ష అభ్యర్థించబడింది"
+ },
+ "unknownTime": "తెలియని సమయం",
+ "actions": {
+ "reply": "ప్రత్యుత్తరం",
+ "replyToComment": "వ్యాఖ్యకు ప్రత్యుత్తరం ఇవ్వు",
+ "showMore": "మరిన్ని వ్యాఖ్యలను చూపించు ({{visible}}/{{total}})",
+ "cancelReply": "ప్రత్యుత్తరం రద్దు చేయి",
+ "comment": "వ్యాఖ్య"
+ },
+ "attachments": {
+ "previewAlt": "అటాచ్మెంట్ ప్రివ్యూ",
+ "downloadFailed": "డౌన్లోడ్ విఫలమైంది"
+ },
+ "replyingTo": "దీనికి ప్రత్యుత్తరం ఇస్తోంది",
+ "input": {
+ "placeholder": "వ్యాఖ్యను జోడించండి... (పంపడానికి Enter)",
+ "charsLeft": "{{count}} అక్షరాలు మిగిలి ఉన్నాయి",
+ "charsLeft_one": "{{count}} అక్షరం మిగిలి ఉంది",
+ "charsLeft_other": "{{count}} అక్షరాలు మిగిలి ఉన్నాయి",
+ "charsLeft_few": "{{count}} అక్షరాలు మిగిలి ఉన్నాయి",
+ "charsLeft_many": "{{count}} అక్షరాలు మిగిలి ఉన్నాయి"
+ }
+ },
+ "workflowTimeline": {
+ "empty": "వర్క్ఫ్లో చరిత్ర రికార్డ్ చేయబడలేదు",
+ "currentImplementationInterval": "ప్రస్తుత అమలు వ్యవధి",
+ "implementationIntervalEnded": "ఈ పరివర్తన వద్ద అమలు వ్యవధి ముగిసింది",
+ "runningPrefix": "రన్ అవుతోంది ",
+ "createdAs": "ఇలా సృష్టించబడింది",
+ "by": "ద్వారా",
+ "reassigned": "మళ్లీ కేటాయించబడింది",
+ "assignedTo": "దీనికి కేటాయించబడింది",
+ "unassignedFrom": "దీని నుండి కేటాయింపు తీసివేయబడింది",
+ "ownerChanged": "యజమాని మారారు",
+ "reviewRequested": "సమీక్ష అభ్యర్థించబడింది",
+ "reviewStarted": "సమీక్ష ప్రారంభమైంది",
+ "changesRequested": "మార్పులు అభ్యర్థించబడ్డాయి",
+ "approved": "ఆమోదించబడింది",
+ "unknownEvent": "తెలియని ఈవెంట్"
+ },
+ "reviewStates": {
+ "approved": "ఆమోదించబడింది",
+ "needsFix": "సరిదిద్దాలి",
+ "inReview": "సమీక్షలో"
+ }
+ },
+ "tasks": {
+ "createTask": {
+ "assignee": "కేటాయించబడినవారు",
+ "assigneeOptional": "కేటాయించబడినవారు (ఐచ్ఛికం)",
+ "blockedByOptional": "నిరోధించే టాస్క్లు (ఐచ్ఛికం)",
+ "blockedBySummary": "టాస్క్ దీని ద్వారా నిరోధించబడుతుంది: {{tasks}}",
+ "cancel": "రద్దు చేయి",
+ "create": "సృష్టించు",
+ "creating": "సృష్టిస్తోంది...",
+ "description": "టాస్క్ టీమ్ యొక్క tasks/ డైరెక్టరీలో సృష్టించబడుతుంది మరియు Kanban బోర్డులో కనిపిస్తుంది.",
+ "descriptionOptional": "వివరణ (ఐచ్ఛికం)",
+ "detailsPlaceholder": "టాస్క్ వివరాలు (markdown కు మద్దతిస్తుంది)",
+ "hideOptionalFields": "ఐచ్ఛిక ఫీల్డ్లను దాచు",
+ "offlineNotice": {
+ "after": "- అమలును ప్రారంభించడానికి టీమ్ను లాంచ్ చేయండి.",
+ "before": "టీమ్ ఆఫ్లైన్లో ఉంది. టాస్క్ దీనికి జోడించబడుతుంది"
+ },
+ "promptOptional": "కేటాయించబడినవారి కోసం ప్రాంప్ట్ (ఐచ్ఛికం)",
+ "promptPlaceholder": "టీమ్ సభ్యుని కోసం కస్టమ్ సూచనలు...",
+ "relatedOptional": "సంబంధిత టాస్క్లు (ఐచ్ఛికం)",
+ "relatedSummary": "సంబంధిత: {{tasks}}",
+ "saved": "సేవ్ చేయబడింది",
+ "searchTasks": "టాస్క్లను శోధించండి...",
+ "selectMember": "ఒక సభ్యుడిని ఎంచుకోండి",
+ "selectMemberOptional": "సభ్యుడిని ఎంచుకోండి...",
+ "showOptionalFields": "ఐచ్ఛిక ఫీల్డ్లను చూపించు",
+ "startImmediately": "వెంటనే ప్రారంభించు",
+ "startOfflineHint": "టీమ్ ఆఫ్లైన్లో ఉంది. టాస్క్లను వెంటనే ప్రారంభించడానికి మొదట టీమ్ను లాంచ్ చేయండి.",
+ "subject": "విషయం",
+ "subjectPlaceholder": "ఏమి చేయాలి?",
+ "title": "టాస్క్ను సృష్టించు",
+ "todo": "చేయవలసినవి"
+ },
+ "list": {
+ "columns": {
+ "blockedBy": "దీని ద్వారా నిరోధించబడింది",
+ "blocks": "నిరోధిస్తుంది",
+ "id": "ID",
+ "owner": "యజమాని",
+ "status": "స్థితి",
+ "subject": "విషయం"
+ },
+ "empty": "ఈ టీమ్లో టాస్క్లు లేవు",
+ "filters": {
+ "allOwners": "అన్ని యజమానులు",
+ "allStatuses": "అన్ని స్థితులు",
+ "ownerAria": "యజమాని ప్రకారం టాస్క్లను ఫిల్టర్ చేయి",
+ "statusAria": "స్థితి ప్రకారం టాస్క్లను ఫిల్టర్ చేయి"
+ },
+ "showing": "{{total}} లో {{shown}} చూపిస్తోంది"
+ },
+ "status": {
+ "completed": "completed",
+ "deleted": "deleted",
+ "inProgress": "in_progress",
+ "pending": "pending"
+ },
+ "statusSummary": {
+ "progressAria": "టాస్క్లు {{completed}}/{{total}} పూర్తయ్యాయి",
+ "inProgress": "{{count}} in_progress",
+ "inProgress_one": "{{count}} in_progress",
+ "inProgress_other": "{{count}} in_progress",
+ "inProgress_few": "{{count}} in_progress",
+ "inProgress_many": "{{count}} in_progress",
+ "pending": "{{count}} pending",
+ "pending_one": "{{count}} pending",
+ "pending_other": "{{count}} pending",
+ "pending_few": "{{count}} pending",
+ "pending_many": "{{count}} pending",
+ "completed": "{{count}} completed",
+ "completed_one": "{{count}} completed",
+ "completed_other": "{{count}} completed",
+ "completed_few": "{{count}} completed",
+ "completed_many": "{{count}} completed"
+ },
+ "unassigned": "కేటాయించబడలేదు",
+ "teamPrefix": "టీమ్:",
+ "openTask": "టాస్క్ను తెరువు",
+ "deleteConfirm": {
+ "title": "టాస్క్ను తొలగించు",
+ "message": "టాస్క్ #{{taskId}} ను ట్రాష్కు తరలించాలా?",
+ "confirmLabel": "తొలగించు",
+ "cancelLabel": "రద్దు చేయి"
+ }
+ },
+ "editor": {
+ "actions": {
+ "cancel": "రద్దు చేయి",
+ "closeEditor": "ఎడిటర్ను మూసివేయి",
+ "closeTab": "ట్యాబ్ మూసివేయి",
+ "closeTooltip": "ఎడిటర్ను మూసివేయి (Esc)",
+ "discard": "విస్మరించు",
+ "discardAndClose": "విస్మరించి మూసివేయి",
+ "keep": "ఉంచు",
+ "keepMine": "నాది ఉంచు",
+ "keyboardShortcuts": "కీబోర్డ్ షార్ట్కట్లు",
+ "overwrite": "ఓవర్రైట్ చేయి",
+ "refreshAria": "రిఫ్రెష్ (F5)",
+ "refreshTooltip": "git స్థితిని రిఫ్రెష్ చేయి (F5)",
+ "reload": "మళ్లీ లోడ్ చేయి",
+ "retry": "మళ్లీ ప్రయత్నించు",
+ "save": "సేవ్ చేయి",
+ "saveAllAndClose": "అన్నీ సేవ్ చేసి మూసివేయి"
+ },
+ "ariaLabel": "ప్రాజెక్ట్ ఎడిటర్",
+ "dialogs": {
+ "conflictDescription": "మీరు తెరిచినప్పటి నుండి ఫైల్ బాహ్యంగా సవరించబడింది. మీ మార్పులతో ఓవర్రైట్ చేయాలా?",
+ "conflictTitle": "సేవ్ వైరుధ్యం",
+ "unsavedDescription": "మీకు సేవ్ చేయని మార్పులు ఉన్నాయి. మీరు ఏమి చేయాలనుకుంటున్నారు?",
+ "unsavedFileDescription": "ఈ ఫైల్లో సేవ్ చేయని మార్పులు ఉన్నాయి. మీరు ఏమి చేయాలనుకుంటున్నారు?",
+ "unsavedTitle": "సేవ్ చేయని మార్పులు"
+ },
+ "newFile": {
+ "validation": {
+ "nameRequired": "పేరు ఖాళీగా ఉండకూడదు",
+ "invalidName": "చెల్లని పేరు",
+ "invalidCharacters": "పేరులో చెల్లని అక్షరాలు ఉన్నాయి",
+ "nameTooLong": "పేరు చాలా పొడవుగా ఉంది"
+ },
+ "placeholders": {
+ "fileName": "ఫైల్ పేరు...",
+ "folderName": "ఫోల్డర్ పేరు..."
+ },
+ "aria": {
+ "newFileName": "కొత్త ఫైల్ పేరు",
+ "newFolderName": "కొత్త ఫోల్డర్ పేరు"
+ }
+ },
+ "draftRecovered": "మునుపటి సెషన్ నుండి సేవ్ చేయని మార్పులు తిరిగి పొందబడ్డాయి.",
+ "externalChange": {
+ "changed": "ఫైల్ డిస్క్లో మార్చబడింది.",
+ "deleted": "ఫైల్ ఇకపై డిస్క్లో లేదు."
+ },
+ "saveFailed": "సేవ్ విఫలమైంది: {{error}}",
+ "sidebar": {
+ "explorer": "ఎక్స్ప్లోరర్",
+ "hide": "సైడ్బార్ను దాచు",
+ "hideWithShortcut": "సైడ్బార్ను దాచు ({{shortcut}})",
+ "show": "సైడ్బార్ను చూపించు",
+ "showWithShortcut": "సైడ్బార్ను చూపించు ({{shortcut}})"
+ },
+ "searchInFiles": {
+ "title": "ఫైల్లలో శోధించు",
+ "closeSearch": "శోధనను మూసివేయి",
+ "closeSearchShortcut": "శోధనను మూసివేయి (Esc)",
+ "searchPlaceholder": "శోధించండి...",
+ "matchCase": "కేస్ సరిపోల్చు",
+ "matchCaseToggle": "Aa",
+ "noResults": "ఫలితాలు కనుగొనబడలేదు",
+ "resultsSummary": "{{fileCount}} ఫైల్లలో {{count}} సరిపోలికలు",
+ "resultsSummary_one": "{{fileCount}} ఫైల్లలో {{count}} సరిపోలిక",
+ "truncated": "(కుదించబడింది)",
+ "resultsSummary_few": "{{fileCount}} ఫైల్లలో {{count}} సరిపోలికలు",
+ "resultsSummary_many": "{{fileCount}} ఫైల్లలో {{count}} సరిపోలికలు",
+ "resultsSummary_other": "{{fileCount}} ఫైల్లలో {{count}} సరిపోలికలు"
+ },
+ "fileTree": {
+ "failedToLoadFiles": "ఫైల్లను లోడ్ చేయడం విఫలమైంది: {{error}}",
+ "loading": "ఫైల్లను లోడ్ చేస్తోంది...",
+ "empty": "ఫైల్లు కనుగొనబడలేదు",
+ "dropForProjectRoot": "ప్రాజెక్ట్ రూట్ కోసం ఇక్కడ వదలండి",
+ "moveToTrash": "ట్రాష్కు తరలించు",
+ "moveToTrashConfirm": "\"{{name}}\" ను ట్రాష్కు తరలించాలా?",
+ "cancel": "రద్దు చేయి"
+ },
+ "goToLine": {
+ "title": "లైన్కు వెళ్లు",
+ "position": "(ప్రస్తుత: {{current}}, మొత్తం: {{total}})",
+ "placeholder": "లైన్ నంబర్, +offset, -offset, లేదా %",
+ "go": "వెళ్లు"
+ },
+ "searchPanel": {
+ "previousMatch": "మునుపటి సరిపోలిక",
+ "nextMatch": "తదుపరి సరిపోలిక",
+ "close": "మూసివేయి",
+ "replacePlaceholder": "భర్తీ చేయి",
+ "replace": "భర్తీ చేయి",
+ "replaceNext": "తదుపరిది భర్తీ చేయి",
+ "all": "అన్నీ",
+ "replaceAll": "అన్నీ భర్తీ చేయి"
+ },
+ "statusBar": {
+ "position": "Ln {{line}}, Col {{col}}",
+ "enableWatcher": "ఫైల్ వాచర్ను ప్రారంభించు",
+ "disableWatcher": "ఫైల్ వాచర్ను నిలిపివేయి",
+ "watch": "watch",
+ "watching": "watching",
+ "watchExternalChanges": "బాహ్య మార్పుల కోసం వాచ్ చేయి",
+ "disableExternalWatcher": "బాహ్య మార్పు వాచర్ను నిలిపివేయి",
+ "encodingUtf8": "UTF-8",
+ "spaces": "ఖాళీలు: {{count}}"
+ },
+ "imagePreview": {
+ "loading": "ప్రివ్యూను లోడ్ చేస్తోంది...",
+ "openFullSize": "పూర్తి-పరిమాణ ప్రివ్యూను తెరువు",
+ "openSystemViewer": "సిస్టమ్ వ్యూయర్లో తెరువు"
+ },
+ "quickOpen": {
+ "title": "త్వరిత తెరువు",
+ "searchPlaceholder": "పేరు ద్వారా ఫైల్లను శోధించండి...",
+ "loading": "ఫైల్లను లోడ్ చేస్తోంది...",
+ "empty": "ఫైల్లు కనుగొనబడలేదు"
+ },
+ "errorBoundary": {
+ "crashed": "ఎడిటర్ క్రాష్ అయింది",
+ "unknownError": "తెలియని లోపం"
+ },
+ "binaryPlaceholder": {
+ "file": "బైనరీ ఫైల్ ({{size}})"
+ },
+ "unsavedChanges": "సేవ్ చేయని మార్పులు",
+ "empty": {
+ "selectFile": "సవరించడానికి ట్రీ నుండి ఒక ఫైల్ను ఎంచుకోండి"
+ },
+ "search": {
+ "toggleReplace": "భర్తీను టోగుల్ చేయి",
+ "placeholder": "శోధించండి"
+ },
+ "shortcuts": {
+ "title": "కీబోర్డ్ షార్ట్కట్లు",
+ "groups": {
+ "fileOperations": "ఫైల్ ఆపరేషన్లు",
+ "search": "శోధన",
+ "navigation": "నావిగేషన్",
+ "editing": "సవరణ",
+ "markdown": "Markdown",
+ "general": "సాధారణ"
+ },
+ "actions": {
+ "quickOpen": "త్వరిత తెరువు",
+ "save": "సేవ్ చేయి",
+ "saveAll": "అన్నీ సేవ్ చేయి",
+ "closeTab": "ట్యాబ్ మూసివేయి",
+ "findInFile": "ఫైల్లో కనుగొను",
+ "searchInFiles": "ఫైల్లలో శోధించు",
+ "goToLine": "లైన్కు వెళ్లు",
+ "nextTab": "తదుపరి ట్యాబ్",
+ "previousTab": "మునుపటి ట్యాబ్",
+ "cycleTabs": "ట్యాబ్లను చక్రం తిప్పు",
+ "toggleSidebar": "సైడ్బార్ను టోగుల్ చేయి",
+ "undo": "రద్దు చేయి",
+ "redo": "మళ్లీ చేయి",
+ "selectNextMatch": "తదుపరి సరిపోలికను ఎంచుకో",
+ "toggleComment": "వ్యాఖ్యను టోగుల్ చేయి",
+ "splitPreview": "స్ప్లిట్ ప్రివ్యూ",
+ "fullPreview": "పూర్తి ప్రివ్యూ",
+ "closeEditor": "ఎడిటర్ను మూసివేయి"
+ }
+ },
+ "toolbar": {
+ "enableWordWrap": "వర్డ్ ర్యాప్ను ప్రారంభించు",
+ "disableWordWrap": "వర్డ్ ర్యాప్ను నిలిపివేయి",
+ "closeSplitPreview": "స్ప్లిట్ ప్రివ్యూను మూసివేయి",
+ "closePreview": "ప్రివ్యూను మూసివేయి"
+ }
+ },
+ "launch": {
+ "actions": {
+ "createSchedule": "షెడ్యూల్ సృష్టించు",
+ "creating": "సృష్టిస్తోంది...",
+ "goToDashboard": "డాష్బోర్డ్కు వెళ్లండి",
+ "launchTeam": "టీమ్ను లాంచ్ చేయి",
+ "launching": "లాంచ్ చేస్తోంది...",
+ "relaunchTeam": "టీమ్ను మళ్లీ లాంచ్ చేయి",
+ "relaunching": "మళ్లీ లాంచ్ చేస్తోంది...",
+ "saveChanges": "మార్పులను సేవ్ చేయి",
+ "saving": "సేవ్ చేస్తోంది..."
+ },
+ "billing": {
+ "prefix": "జూన్ 15, 2026 నుండి, Anthropic బిల్ చేస్తుంది",
+ "readArticle": "Anthropic వ్యాసాన్ని చదవండి",
+ "suffix": "మరియు Agent SDK వినియోగం నెలవారీ Agent SDK క్రెడిట్ నుండి, ఇంటరాక్టివ్ Claude Code పరిమితుల నుండి వేరుగా. క్రెడిట్ ప్రతి బిల్లింగ్ సైకిల్లో రీసెట్ అవుతుంది మరియు ఉపయోగించని క్రెడిట్ ముందుకు తీసుకువెళ్లబడదు."
+ },
+ "conflict": {
+ "description": "ఒకే డైరెక్టరీలో రెండు టీమ్లను రన్ చేయడం ప్రమాదకరం - అవి ఒకే ఫైల్లను సవరించడంలో విభేదించవచ్చు. ఐసొలేషన్ కోసం వేరే డైరెక్టరీ లేదా git worktree ఉపయోగించడాన్ని పరిగణించండి.",
+ "title": "ఈ వర్కింగ్ డైరెక్టరీ కోసం మరో టీమ్ \"{{team}}\" ఇప్పటికే రన్ అవుతోంది",
+ "workingDirectory": "వర్కింగ్ డైరెక్టరీ:"
+ },
+ "description": {
+ "createSchedule": "స్వయంచాలక Claude టాస్క్ అమలును షెడ్యూల్ చేయి",
+ "createScheduleForTeam": "టీమ్ \"{{team}}\" కోసం స్వయంచాలక రన్లను షెడ్యూల్ చేయి",
+ "editSchedule": "టీమ్ \"{{team}}\" కోసం షెడ్యూల్ను సవరిస్తోంది",
+ "launchPrefix": "టీమ్ను ప్రారంభించు",
+ "launchSuffix": "స్థానిక Claude CLI ద్వారా.",
+ "relaunchPrefix": "దీని కోసం ప్రస్తుత రన్ను ఆపు",
+ "relaunchSuffix": "మరియు స్థానిక Claude CLI ద్వారా మళ్లీ ప్రారంభించు."
+ },
+ "prepare": {
+ "action": {
+ "launch": "లాంచ్",
+ "relaunch": "మళ్లీ లాంచ్"
+ },
+ "blocked": "రన్టైమ్ ఎన్విరాన్మెంట్ అందుబాటులో లేదు - {{action}} నిరోధించబడింది",
+ "checkingProviders": "ఎంచుకున్న ప్రొవైడర్లను తనిఖీ చేస్తోంది...",
+ "failed": "ఎంచుకున్న ప్రొవైడర్లను సిద్ధం చేయడం విఫలమైంది",
+ "preflight": "{{action}} కు ముందు లోపాలను పట్టుకోవడానికి ప్రీ-ఫ్లైట్ తనిఖీ",
+ "preparingEnvironment": "ఎన్విరాన్మెంట్ను సిద్ధం చేస్తోంది...",
+ "ready": "ఎంచుకున్న అన్ని ప్రొవైడర్లు సిద్ధం.",
+ "readyWithNotes": "ఎంచుకున్న అన్ని ప్రొవైడర్లు సిద్ధం, గమనికలతో.",
+ "unsupportedPreload": "ప్రస్తుత ప్రీలోడ్ వెర్షన్ team:prepareProvisioning కు మద్దతు ఇవ్వదు. dev యాప్ను పునఃప్రారంభించండి.",
+ "selectWorkingDirectory": "లాంచ్ ఎన్విరాన్మెంట్ను ధృవీకరించడానికి వర్కింగ్ డైరెక్టరీని ఎంచుకోండి.",
+ "someProvidersNeedAttention": "ఎంచుకున్న కొన్ని ప్రొవైడర్లకు శ్రద్ధ అవసరం."
+ },
+ "prompt": {
+ "label": "ప్రాంప్ట్",
+ "oneShotPrefix": "ఈ ప్రాంప్ట్ దీనికి పంపబడుతుంది",
+ "oneShotSuffix": "వన్-షాట్ అమలు కోసం",
+ "saved": "సేవ్ చేయబడింది",
+ "schedulePlaceholder": "షెడ్యూల్లో Claude అమలు చేయడానికి సూచనలు...",
+ "teamLeadOptional": "టీమ్ లీడ్ కోసం ప్రాంప్ట్ (ఐచ్ఛికం)",
+ "teamLeadPlaceholder": "టీమ్ లీడ్ కోసం సూచనలు..."
+ },
+ "providerChanged": "ప్రొవైడర్ {{from}} నుండి {{to}} కు మార్చబడింది. మునుపటి లీడ్ సెషన్ పునఃప్రారంభించబడదు, మరియు కొత్త రన్టైమ్ సరిగ్గా వర్తింపజేయబడేలా లీడ్ తాజా కాంటెక్స్ట్తో ప్రారంభమవుతుంది.",
+ "relaunchFreshSession": "టీమ్ మళ్లీ లాంచ్ తాజా లీడ్ సెషన్ను ప్రారంభిస్తుంది. మన్నికైన టీమ్ స్థితి, టాస్క్ బోర్డు మరియు సభ్యుల కాన్ఫిగరేషన్ లాంచ్ ప్రాంప్ట్లోకి రీహైడ్రేట్ చేయబడతాయి.",
+ "relaunchWarning": {
+ "description": "ఈ సెట్టింగ్లను సేవ్ చేయడం ప్రస్తుత టీమ్ ప్రాసెస్ను ఆపి, అప్డేట్ చేసిన రోస్టర్ను నిల్వ చేసి, కొత్త రన్టైమ్తో టీమ్ను మళ్లీ లాంచ్ చేస్తుంది.",
+ "title": "మళ్లీ లాంచ్ ప్రస్తుత టీమ్ రన్ను పునఃప్రారంభిస్తుంది"
+ },
+ "schedule": {
+ "labelOptional": "లేబుల్ (ఐచ్ఛికం)",
+ "labelPlaceholder": "ఉదా., రోజువారీ కోడ్ సమీక్ష, నైట్లీ టెస్ట్లు...",
+ "maxBudgetUsd": "గరిష్ట బడ్జెట్ (USD)",
+ "maxTurns": "గరిష్ట టర్న్లు",
+ "noLimit": "పరిమితి లేదు",
+ "noMatches": "మీ శోధనకు ఏ టీమ్లు సరిపోలడం లేదు.",
+ "noTeams": "టీమ్లు అందుబాటులో లేవు. మొదట ఒక టీమ్ను సృష్టించండి.",
+ "searchTeams": "టీమ్లను శోధించండి...",
+ "selectTeam": "ఒక టీమ్ను ఎంచుకోండి...",
+ "team": "టీమ్",
+ "title": "షెడ్యూల్"
+ },
+ "title": {
+ "createSchedule": "షెడ్యూల్ సృష్టించు",
+ "editSchedule": "షెడ్యూల్ను సవరించు",
+ "launch": "టీమ్ను లాంచ్ చేయి",
+ "relaunch": "టీమ్ను మళ్లీ లాంచ్ చేయి"
+ },
+ "errors": {
+ "loadProjectsFailed": "ప్రాజెక్ట్లను లోడ్ చేయడం విఫలమైంది",
+ "saveScheduleFailed": "షెడ్యూల్ను సేవ్ చేయడం విఫలమైంది",
+ "relaunchFailed": "టీమ్ను మళ్లీ లాంచ్ చేయడం విఫలమైంది",
+ "launchFailed": "టీమ్ను లాంచ్ చేయడం విఫలమైంది"
+ },
+ "validation": {
+ "openCodeLeadModelRequired": "OpenCode లీడ్కు ఎంచుకున్న మోడల్ అవసరం.",
+ "openCodeTeammateRequired": "OpenCode లీడ్కు కనీసం ఒక OpenCode టీమ్మేట్ అవసరం.",
+ "selectWorkingDirectory": "వర్కింగ్ డైరెక్టరీని ఎంచుకోండి (cwd)",
+ "fixMemberNames": "లాంచ్కు ముందు సభ్యుల పేర్లను సరిచేయండి",
+ "memberNamesUnique": "లాంచ్కు ముందు సభ్యుల పేర్లు ప్రత్యేకంగా ఉండాలి"
+ },
+ "optionalSettings": {
+ "relaunchTitle": "మళ్లీ లాంచ్ సెట్టింగ్లు",
+ "title": "ఐచ్ఛిక లాంచ్ సెట్టింగ్లు",
+ "relaunchDescription": "టీమ్ను పునఃప్రారంభించడానికి ముందు రోస్టర్ మరియు లీడ్ రన్టైమ్ను సమీక్షించండి.",
+ "description": "లాంచ్ ఫ్లోను ప్రాజెక్ట్ మార్గంపై కేంద్రీకరించి ఉంచండి మరియు మీకు అదనపు నియంత్రణ కావలసినప్పుడు మాత్రమే దీన్ని విస్తరించండి."
+ }
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "టీమ్ను కాపీ చేయి",
+ "createTeam": "టీమ్ను సృష్టించు",
+ "deleteForever": "శాశ్వతంగా తొలగించు",
+ "deletePermanently": "శాశ్వతంగా తొలగించు",
+ "deleteTeam": "టీమ్ను తొలగించు",
+ "launching": "లాంచ్ చేస్తోంది...",
+ "launchTeam": "టీమ్ను లాంచ్ చేయి",
+ "relaunchTeam": "టీమ్ను మళ్లీ లాంచ్ చేయి",
+ "restore": "పునరుద్ధరించు",
+ "restoreTeam": "టీమ్ను పునరుద్ధరించు",
+ "retry": "మళ్లీ ప్రయత్నించు",
+ "stopTeam": "టీమ్ను ఆపు",
+ "stopping": "ఆపుతోంది..."
+ },
+ "electronOnly": {
+ "description": "బ్రౌజర్ మోడ్లో, స్థానిక `~/.claude/teams` డైరెక్టరీలకు యాక్సెస్ అందుబాటులో లేదు.",
+ "title": "టీమ్లు Electron మోడ్లో మాత్రమే అందుబాటులో ఉంది"
+ },
+ "empty": {
+ "description": "ప్రారంభించడానికి ఇక్కడ ఒక టీమ్ను సృష్టించండి. అది జాబితాలో స్వయంచాలకంగా కనిపిస్తుంది.",
+ "localOnly": "టీమ్ సృష్టి స్థానిక Electron మోడ్లో మాత్రమే అందుబాటులో ఉంది.",
+ "title": "టీమ్లు కనుగొనబడలేదు"
+ },
+ "filter": {
+ "clearAll": "అన్నీ క్లియర్ చేయి",
+ "label": "టీమ్లను ఫిల్టర్ చేయి",
+ "projectPriority": "ప్రాజెక్ట్ ప్రాధాన్యత",
+ "status": "స్థితి"
+ },
+ "loadFailed": "టీమ్లను లోడ్ చేయడం విఫలమైంది",
+ "loading": "టీమ్లను లోడ్ చేస్తోంది...",
+ "localOnly": "స్థానిక Electron మోడ్లో మాత్రమే అందుబాటులో ఉంది.",
+ "membersCount": "సభ్యులు: {{count}}",
+ "membersCount_few": "సభ్యులు: {{count}}",
+ "membersCount_many": "సభ్యులు: {{count}}",
+ "membersCount_one": "సభ్యుడు: {{count}}",
+ "membersCount_other": "సభ్యులు: {{count}}",
+ "noDescription": "వివరణ లేదు",
+ "noMatches": "ప్రస్తుత ఫిల్టర్లకు సరిపోలే టీమ్లు లేవు",
+ "partial": {
+ "pending": "చివరి లాంచ్ ఇంకా రీకన్సైల్ అవుతోంది.",
+ "skipped": "చివరి లాంచ్ కొంత టీమ్మేట్లను దాటవేసింది.",
+ "skippedWithCount": "చివరి లాంచ్ {{count}}/{{expected}} టీమ్మేట్ను దాటవేసింది.",
+ "skippedWithCount_few": "చివరి లాంచ్ {{count}}/{{expected}} టీమ్మేట్లను దాటవేసింది.",
+ "skippedWithCount_many": "చివరి లాంచ్ {{count}}/{{expected}} టీమ్మేట్లను దాటవేసింది.",
+ "skippedWithCount_one": "చివరి లాంచ్ {{count}}/{{expected}} టీమ్మేట్ను దాటవేసింది.",
+ "skippedWithCount_other": "చివరి లాంచ్ {{count}}/{{expected}} టీమ్మేట్లను దాటవేసింది.",
+ "stopped": "అన్ని టీమ్మేట్లు చేరడానికి ముందే చివరి లాంచ్ ఆగిపోయింది.",
+ "stoppedWithCount": "{{count}}/{{expected}} టీమ్మేట్ చేరడానికి ముందే చివరి లాంచ్ ఆగిపోయింది.",
+ "stoppedWithCount_few": "{{count}}/{{expected}} టీమ్మేట్లు చేరడానికి ముందే చివరి లాంచ్ ఆగిపోయింది.",
+ "stoppedWithCount_many": "{{count}}/{{expected}} టీమ్మేట్లు చేరడానికి ముందే చివరి లాంచ్ ఆగిపోయింది.",
+ "stoppedWithCount_one": "{{count}}/{{expected}} టీమ్మేట్ చేరడానికి ముందే చివరి లాంచ్ ఆగిపోయింది.",
+ "stoppedWithCount_other": "{{count}}/{{expected}} టీమ్మేట్లు చేరడానికి ముందే చివరి లాంచ్ ఆగిపోయింది."
+ },
+ "searchPlaceholder": "టీమ్లను శోధించండి...",
+ "sections": {
+ "otherTeams": "ఇతర టీమ్లు",
+ "projectTeams": "{{project}} కోసం టీమ్లు",
+ "selectedProject": "ఎంచుకున్న ప్రాజెక్ట్"
+ },
+ "solo": "సోలో",
+ "status": {
+ "active": "క్రియాశీలం",
+ "deleted": "తొలగించబడింది",
+ "launching": "లాంచ్ చేస్తోంది...",
+ "offline": "ఆఫ్లైన్",
+ "partialFailure": "లాంచ్ మధ్యలో విఫలమైంది",
+ "partialPending": "బూట్స్ట్రాప్ పెండింగ్",
+ "partialSkipped": "లాంచ్ సభ్యుడిని దాటవేసింది",
+ "running": "రన్ అవుతోంది"
+ },
+ "title": "టీమ్ను ఎంచుకోండి",
+ "trash": "ట్రాష్ ({{count}})",
+ "trash_few": "ట్రాష్ ({{count}})",
+ "trash_many": "ట్రాష్ ({{count}})",
+ "trash_one": "ట్రాష్ ({{count}})",
+ "trash_other": "ట్రాష్ ({{count}})",
+ "deleteDraft": {
+ "title": "డ్రాఫ్ట్ను తొలగించు",
+ "message": "డ్రాఫ్ట్ టీమ్ \"{{teamName}}\" ను తొలగించాలా? దీన్ని రద్దు చేయలేరు.",
+ "confirmLabel": "తొలగించు",
+ "cancelLabel": "రద్దు చేయి"
+ },
+ "moveToTrash": {
+ "title": "ట్రాష్కు తరలించు",
+ "message": "టీమ్ \"{{teamName}}\" ను ట్రాష్కు తరలించాలా? మీరు దాన్ని తర్వాత పునరుద్ధరించవచ్చు.",
+ "confirmLabel": "ట్రాష్కు తరలించు",
+ "cancelLabel": "రద్దు చేయి"
+ },
+ "deleteForever": {
+ "title": "శాశ్వతంగా తొలగించు",
+ "message": "టీమ్ \"{{teamName}}\" ను శాశ్వతంగా తొలగించాలా? అన్ని డేటా కోల్పోతుంది.",
+ "confirmLabel": "శాశ్వతంగా తొలగించు",
+ "cancelLabel": "రద్దు చేయి"
+ }
+ },
+ "messageComposer": {
+ "crossTeam": {
+ "hint": "చిట్కా: క్రాస్-టీమ్ సందేశాలు లక్ష్య టీమ్ లీడ్కు వెళతాయి. ప్రత్యుత్తరం మీకు కాకుండా మీ టీమ్ లీడ్కు తిరిగి రావాలంటే, దానిని సందేశంలో స్పష్టంగా చెప్పండి."
+ },
+ "attachments": {
+ "attachFiles": "ఫైల్లను జతచేయి (పేస్ట్ చేయండి లేదా డ్రాగ్ & డ్రాప్)",
+ "unavailable": "అటాచ్మెంట్లు అందుబాటులో లేవు",
+ "disabledHint": "ఆన్లైన్ టీమ్ లీడ్ మరియు ఆన్లైన్ OpenCode టీమ్మేట్లకు ఫైల్ అటాచ్మెంట్లు మద్దతిస్తాయి. అటాచ్మెంట్లను తీసివేయండి లేదా గ్రహీతను మార్చండి.",
+ "restrictions": {
+ "crossTeam": "క్రాస్-టీమ్ సందేశాల కోసం ఫైల్ అటాచ్మెంట్లు మద్దతు లేదు",
+ "teamOffline": "ఫైల్లను జతచేయడానికి టీమ్ ఆన్లైన్లో ఉండాలి",
+ "unsupportedRecipient": "ఫైల్లను టీమ్ లీడ్ లేదా OpenCode టీమ్మేట్లకు పంపవచ్చు",
+ "openCodeOffline": "OpenCode టీమ్మేట్ల కోసం ఫైల్లను జతచేయడానికి టీమ్ ఆన్లైన్లో ఉండాలి",
+ "sending": "ఫైల్లను జోడించడానికి ముందు ప్రస్తుత సందేశం పంపడం పూర్తయ్యే వరకు వేచి ఉండండి",
+ "maximumReached": "గరిష్ట అటాచ్మెంట్లు చేరుకున్నాయి",
+ "leadOnly": "ఫైల్లను టీమ్ లీడ్కు మాత్రమే పంపవచ్చు"
+ }
+ },
+ "slash": {
+ "restrictions": {
+ "attachments": "Slash కమాండ్లకు లైవ్ టీమ్ లీడ్ అవసరం మరియు అటాచ్మెంట్లతో పంపలేరు",
+ "crossTeam": "Slash కమాండ్లను ప్రస్తుత టీమ్ లీడ్పై మాత్రమే రన్ చేయవచ్చు",
+ "notLead": "Slash కమాండ్లను టీమ్ లీడ్కు మాత్రమే పంపవచ్చు",
+ "leadOffline": "Slash కమాండ్లకు టీమ్ లీడ్ ఆన్లైన్లో ఉండాలి"
+ }
+ },
+ "status": {
+ "reusedCrossTeamRequest": "ఇటీవలి క్రాస్-టీమ్ అభ్యర్థన మళ్లీ ఉపయోగించబడింది",
+ "teamOffline": "టీమ్ ఆఫ్లైన్"
+ },
+ "revision": {
+ "editing": "మునుపటి సందేశాన్ని సవరిస్తోంది",
+ "cancel": "రద్దు చేయి",
+ "tooltip": "మునుపటి సందేశాన్ని విస్మరించి దాన్ని కంపోజర్కు పునరుద్ధరించమని ఏజెంట్ను అడగండి."
+ },
+ "input": {
+ "charsLeft": "{{count}} అక్షరాలు మిగిలి ఉన్నాయి",
+ "charsLeft_one": "{{count}} అక్షరం మిగిలి ఉంది",
+ "charsLeft_other": "{{count}} అక్షరాలు మిగిలి ఉన్నాయి",
+ "teamLaunchingPlaceholder": "టీమ్ లాంచ్ అవుతోంది... ఇన్బాక్స్ డెలివరీ కోసం సందేశం క్యూ చేయబడుతుంది.",
+ "crossTeamPlaceholder": "{{team}} కు క్రాస్-టీమ్ సందేశం...",
+ "teamFallback": "టీమ్",
+ "placeholder": "ఒక సందేశాన్ని రాయండి... (పంపడానికి Enter, కొత్త లైన్ కోసం Shift+Enter)",
+ "slashTip": "చిట్కా: ఏదైనా Claude కమాండ్లను రన్ చేయడానికి మీరు \"/\" ను ఉపయోగించవచ్చు.",
+ "charsLeft_few": "{{count}} అక్షరాలు మిగిలి ఉన్నాయి",
+ "charsLeft_many": "{{count}} అక్షరాలు మిగిలి ఉన్నాయి"
+ },
+ "teamSelector": {
+ "thisTeam": "ఈ టీమ్",
+ "current": "ప్రస్తుత",
+ "online": "ఆన్లైన్",
+ "offline": "ఆఫ్లైన్",
+ "onlineTitle": "ఆన్లైన్",
+ "offlineTitle": "ఆఫ్లైన్"
+ },
+ "recipient": {
+ "select": "ఎంచుకోండి...",
+ "searchPlaceholder": "శోధించండి...",
+ "noResults": "ఫలితాలు లేవు"
+ },
+ "actions": {
+ "voiceToText": "వాయిస్ టు టెక్స్ట్",
+ "send": "పంపు",
+ "sendingUnavailableLaunching": "టీమ్ లాంచ్ అవుతున్నప్పుడు పంపడం అందుబాటులో లేదు"
+ }
+ },
+ "claudeLogs": {
+ "filter": {
+ "ariaLabel": "లాగ్లను ఫిల్టర్ చేయి",
+ "tooltip": "లాగ్లను ఫిల్టర్ చేయి",
+ "sections": {
+ "stream": "స్ట్రీమ్",
+ "content": "కంటెంట్"
+ },
+ "kinds": {
+ "output": "అవుట్పుట్",
+ "thinking": "ఆలోచన",
+ "tool": "టూల్ కాల్లు"
+ },
+ "actions": {
+ "reset": "రీసెట్ చేయి",
+ "save": "సేవ్ చేయి"
+ },
+ "streams": {
+ "stdout": "stdout",
+ "stderr": "stderr"
+ }
+ },
+ "rawLineCount": "{{formattedCount}} రా లైన్లు",
+ "rawLineCount_one": "{{formattedCount}} రా లైన్",
+ "rawLinesCaptured": "{{count}} క్యాప్చర్ చేయబడ్డాయి",
+ "emptyRawLogs": "{{count}}; ఇంకా ఏవీ అసిస్టెంట్/టూల్ అవుట్పుట్ కాదు.",
+ "noLogsYet": "ఇంకా లాగ్లు లేవు.",
+ "teamNotRunning": "టీమ్ రన్ అవ్వడం లేదు.",
+ "searchPlaceholder": "లాగ్లను శోధించండి...",
+ "clearSearch": "శోధనను క్లియర్ చేయి",
+ "newCount": "+{{count}} కొత్తవి",
+ "loading": "లోడ్ అవుతోంది...",
+ "showMore": "మరింత చూపించు",
+ "noLogsCaptured": "లాగ్లు క్యాప్చర్ చేయబడలేదు.",
+ "noMatchingLogs": "సరిపోలే లాగ్లు లేవు.",
+ "rawLineCount_few": "{{formattedCount}} రా లైన్లు",
+ "rawLineCount_many": "{{formattedCount}} రా లైన్లు",
+ "rawLineCount_other": "{{formattedCount}} రా లైన్లు",
+ "openFullscreen": "ఫుల్స్క్రీన్ లాగ్లను తెరువు",
+ "fullscreen": "ఫుల్స్క్రీన్",
+ "viewingFullscreen": "ఫుల్స్క్రీన్ మోడ్లో చూస్తోంది",
+ "logsTitle": "లాగ్లు",
+ "sourceSelect": {
+ "placeholder": "లాగ్ మూలాన్ని ఎంచుకోండి...",
+ "searchPlaceholder": "లాగ్ మూలాలను శోధించండి...",
+ "emptyMessage": "లాగ్ మూలాలు కనుగొనబడలేదు.",
+ "ariaLabel": "లాగ్ మూలం",
+ "leadLabel": "లీడ్",
+ "selectSourceEmpty": "లాగ్ మూలాన్ని ఎంచుకోండి.",
+ "leadDescription": "టీమ్ లీడ్",
+ "removedLabel": "తీసివేయబడింది",
+ "removedDescription": "తీసివేయబడింది"
+ }
+ },
+ "agentGraph": {
+ "popover": {
+ "externalTeam": "బాహ్య టీమ్",
+ "process": {
+ "startedBy": "దీని ద్వారా ప్రారంభించబడింది:",
+ "at": "వద్ద:",
+ "openUrl": "URL తెరువు"
+ },
+ "overflow": {
+ "hiddenTasks": "దాచిన టాస్క్లు",
+ "empty": "దాచిన టాస్క్లు అందుబాటులో లేవు."
+ },
+ "member": {
+ "lead": "లీడ్",
+ "workingOn": "దీనిపై పనిచేస్తోంది",
+ "recentTools": "ఇటీవలి టూల్స్",
+ "spawn": {
+ "waitingToStart": "ప్రారంభించడానికి వేచి ఉంది",
+ "starting": "ప్రారంభమవుతోంది",
+ "failed": "విఫలమైంది"
+ },
+ "state": {
+ "active": "క్రియాశీలం",
+ "idle": "ఐడిల్",
+ "offline": "ఆఫ్లైన్",
+ "runningTool": "టూల్ రన్ అవుతోంది"
+ },
+ "activeTool": {
+ "running": "టూల్ రన్ అవుతోంది",
+ "failed": "టూల్ విఫలమైంది",
+ "finished": "టూల్ పూర్తయింది"
+ },
+ "actions": {
+ "message": "సందేశం",
+ "profile": "ప్రొఫైల్",
+ "task": "టాస్క్"
+ }
+ }
+ },
+ "logPreview": {
+ "logs": "లాగ్లు",
+ "loading": "లాగ్లను లోడ్ చేస్తోంది",
+ "more": "+{{count}} మరిన్ని",
+ "more_one": "+{{count}} మరింత",
+ "more_other": "+{{count}} మరిన్ని",
+ "more_few": "+{{count}} మరిన్ని",
+ "more_many": "+{{count}} మరిన్ని",
+ "unsupportedProvider": "మద్దతు లేని ప్రొవైడర్",
+ "openCodeLogsDelayed": "OpenCode లాగ్లు ఆలస్యమయ్యాయి",
+ "logsUnavailable": "లాగ్లు అందుబాటులో లేవు",
+ "noRecentLogs": "ఇటీవలి లాగ్లు లేవు",
+ "toolError": "టూల్ లోపం",
+ "toolResult": "టూల్ ఫలితం",
+ "toolUse": "టూల్ వినియోగం",
+ "thinking": "ఆలోచన",
+ "error": "లోపం",
+ "logEvent": "లాగ్ ఈవెంట్",
+ "noErrorOutput": "లోప అవుట్పుట్ లేదు",
+ "noOutput": "అవుట్పుట్ లేదు",
+ "noInput": "ఇన్పుట్ లేదు"
+ },
+ "blockingEdge": {
+ "title": "నిరోధించే డిపెండెన్సీ",
+ "blocks": "నిరోధిస్తుంది",
+ "close": "మూసివేయి",
+ "blockingHiddenTasks": "నిరోధించే దాచిన టాస్క్లు",
+ "blockedHiddenTasks": "నిరోధించబడిన దాచిన టాస్క్లు",
+ "links_one": "{{count}} లింక్",
+ "links_other": "{{count}} లింక్లు",
+ "hiddenBlockingLinks_one": "{{count}} దాచిన నిరోధక లింక్",
+ "hiddenBlockingLinks_other": "{{count}} దాచిన నిరోధక లింక్లు",
+ "hiddenTaskStack": "దాచిన టాస్క్ స్టాక్",
+ "hiddenTasks_one": "{{count}} దాచిన టాస్క్",
+ "hiddenTasks_other": "{{count}} దాచిన టాస్క్లు",
+ "task": "టాస్క్",
+ "openBlockerStack": "నిరోధక స్టాక్ను తెరువు",
+ "openBlockedStack": "నిరోధించబడిన స్టాక్ను తెరువు",
+ "openBlockerTask": "నిరోధక టాస్క్ను తెరువు",
+ "openBlockedTask": "నిరోధించబడిన టాస్క్ను తెరువు"
+ },
+ "activityHud": {
+ "activity": "కార్యకలాపం",
+ "noRecentActivity": "ఇటీవలి కార్యకలాపం లేదు",
+ "more": "+{{count}} మరిన్ని",
+ "more_one": "+{{count}} మరింత",
+ "more_other": "+{{count}} మరిన్ని",
+ "more_few": "+{{count}} మరిన్ని",
+ "more_many": "+{{count}} మరిన్ని"
+ },
+ "provisioning": {
+ "launchDetails": "లాంచ్ వివరాలు",
+ "launchDetailsDescription": "వివరణాత్మక టీమ్ లాంచ్ ప్రోగ్రెస్, లైవ్ అవుట్పుట్ మరియు CLI లాగ్లు."
+ }
+ },
+ "projectPath": {
+ "label": "ప్రాజెక్ట్",
+ "source": {
+ "claude": "Claude ద్వారా కనుగొనబడింది",
+ "codex": "Codex ద్వారా కనుగొనబడింది",
+ "mixed": "Claude మరియు Codex ద్వారా కనుగొనబడింది"
+ },
+ "deleted": {
+ "title": "ప్రాజెక్ట్ ఫోల్డర్ ఇకపై ఉనికిలో లేదు",
+ "label": "తొలగించబడింది"
+ },
+ "mode": {
+ "projectList": "ప్రాజెక్ట్ జాబితా నుండి",
+ "customPath": "కస్టమ్ మార్గం"
+ },
+ "loadingProjects": "ప్రాజెక్ట్లను లోడ్ చేస్తోంది...",
+ "selectProject": "ఒక ప్రాజెక్ట్ను ఎంచుకోండి...",
+ "searchPlaceholder": "పేరు లేదా మార్గం ద్వారా ప్రాజెక్ట్ను శోధించండి",
+ "empty": "ఏమీ కనుగొనబడలేదు",
+ "selectFromList": "జాబితా నుండి ఒక ప్రాజెక్ట్ను ఎంచుకోండి",
+ "noProjects": "ప్రాజెక్ట్లు కనుగొనబడలేదు, కస్టమ్ మార్గానికి మారండి.",
+ "customWorkingDirectory": "కస్టమ్ వర్కింగ్ డైరెక్టరీ",
+ "browse": "బ్రౌజ్ చేయి",
+ "createAutomatically": "డైరెక్టరీ లేకపోతే, అది స్వయంచాలకంగా సృష్టించబడుతుంది."
+ },
+ "members": {
+ "badges": {
+ "worktree": "worktree"
+ },
+ "runtimeTelemetry": {
+ "title": "స్థానిక రన్టైమ్ లోడ్",
+ "description": "పేరెంట్ మరియు చైల్డ్ ప్రాసెస్లు మాత్రమే. రిమోట్ LLM ఇన్ఫరెన్స్ చేర్చబడలేదు.",
+ "cpu": "CPU",
+ "memory": "మెమొరీ",
+ "summedRss": "మొత్తం RSS",
+ "sharedHost": "షేర్ చేయబడిన OpenCode హోస్ట్ మెట్రిక్. ఇది ఈ సభ్యునికి ప్రత్యేకం కాదు.",
+ "processTreeCapped": "ఈ నమూనా కోసం ప్రాసెస్ ట్రీ క్యాప్ చేయబడింది.",
+ "rssHint": "RSS షేర్ చేయబడిన పేజీలను కలిగి ఉండవచ్చు, కాబట్టి ఇది ప్రత్యేక మెమొరీ కాకుండా లోడ్ సిగ్నల్గా చదవడం ఉత్తమం."
+ },
+ "editor": {
+ "title": "సభ్యులు",
+ "addMember": "సభ్యుడిని జోడించు",
+ "editAsJson": "JSON గా సవరించు",
+ "runInSeparateWorktrees": "టీమ్మేట్లను ప్రత్యేక worktrees లో రన్ చేయి",
+ "agentTeamsMcpOnly": "Agent Teams MCP మాత్రమే",
+ "removedCount": "తీసివేయబడింది ({{count}})",
+ "removedModelLockReason": "తీసివేయబడిన సభ్యులు సాఫ్ట్ డిలీట్ చరిత్ర కోసం ఉంచబడ్డారు. సెట్టింగ్లను సవరించడానికి వాటిని పునరుద్ధరించండి.",
+ "memberNamesUnique": "సభ్యుల పేర్లు ప్రత్యేకంగా ఉండాలి"
+ },
+ "stats": {
+ "computing": "గణాంకాలను లెక్కిస్తోంది...",
+ "empty": "గణాంకాలు అందుబాటులో లేవు",
+ "lines": "లైన్లు",
+ "linesInfo": "సుమారు. Edit మరియు Write టూల్స్ కోసం ఖచ్చితమైనది. Bash ఫైల్ రైట్లు కమాండ్ నమూనాల (heredoc, echo, sed) నుండి అంచనా వేయబడతాయి మరియు తక్కువగా నివేదించబడవచ్చు.",
+ "files": "ఫైల్లు",
+ "toolCalls": "టూల్ కాల్లు",
+ "tokens": "టోకెన్లు",
+ "toolUsage": "టూల్ వినియోగం",
+ "filesTouched": "తాకిన ఫైల్లు ({{count}})",
+ "viewAllChanges": "అన్ని మార్పులను చూడండి",
+ "showLess": "తక్కువ చూపించు",
+ "moreFiles": "+{{count}} మరిన్ని",
+ "footer": "{{count}} సెషన్లు · {{computedAgo}} లెక్కించబడింది",
+ "footer_one": "{{count}} సెషన్ · {{computedAgo}} లెక్కించబడింది",
+ "footer_few": "{{count}} సెషన్లు · {{computedAgo}} లెక్కించబడింది",
+ "footer_many": "{{count}} సెషన్లు · {{computedAgo}} లెక్కించబడింది",
+ "footer_other": "{{count}} సెషన్లు · {{computedAgo}} లెక్కించబడింది"
+ },
+ "logs": {
+ "searching": "లాగ్లను శోధిస్తోంది...",
+ "empty": "లాగ్లు కనుగొనబడలేదు",
+ "waitingForTaskActivity": "టాస్క్ ప్రోగ్రెస్లో ఉంది - సెషన్ కార్యకలాపం కోసం వేచి ఉంది (ఆటో-రిఫ్రెష్ అవుతోంది)...",
+ "noTaskActivity": "ఈ టాస్క్ కోసం ఇంకా సెషన్ కార్యకలాపం లేదు",
+ "noMemberActivity": "ఈ సభ్యునికి ఇంకా రికార్డ్ చేసిన సెషన్ కార్యకలాపం లేదు",
+ "leadSessionTooltip": "పూర్తి టీమ్ లీడ్ సెషన్ లాగ్లు - గ్లోబల్ ఆర్కెస్ట్రేషన్ కాంటెక్స్ట్ కోసం ఉపయోగకరం, ఈ ఏజెంట్కు నిర్దిష్టం కాదు",
+ "memberSessionTooltip": "పూర్తి మన్నికైన టీమ్మేట్ సెషన్ లాగ్లు - సబ్ఏజెంట్ ఫైల్కు బదులుగా రూట్ సభ్యుని సెషన్లో పని రన్ అయినప్పుడు ఉపయోగకరం",
+ "startedAt": "{{time}} ప్రారంభమైంది",
+ "active": "క్రియాశీలం",
+ "showDetails": "వివరాలను చూపించు",
+ "hideDetails": "వివరాలను దాచు",
+ "loadingDetails": "వివరాలను లోడ్ చేస్తోంది...",
+ "failedToLoadDetails": "వివరాలను లోడ్ చేయడం విఫలమైంది"
+ },
+ "detail": {
+ "relaunchOpenCode": "OpenCode ను మళ్లీ లాంచ్ చేయి",
+ "restart": "పునఃప్రారంభించు",
+ "legacyLogsFallback": "లెగసీ లాగ్ల ఫాల్బ్యాక్",
+ "copyDiagnostics": "డయాగ్నొస్టిక్లను కాపీ చేయి",
+ "pid": "PID {{pid}}",
+ "removedAt": "{{date}} తీసివేయబడింది",
+ "failedToRestartMember": "సభ్యుడిని పునఃప్రారంభించడం విఫలమైంది",
+ "sendMessage": "సందేశం పంపు",
+ "assignTask": "టాస్క్ను కేటాయించు",
+ "remove": "తీసివేయి"
+ },
+ "list": {
+ "loading": "టీమ్ సభ్యులను లోడ్ చేస్తోంది",
+ "unavailable": "సభ్యుల రోస్టర్ అందుబాటులో లేదు",
+ "unavailableDescription": "{{count}} టీమ్మేట్లు టీమ్ మెటాడేటా నుండి తెలిసినవి, కానీ రోస్టర్ వివరాలు లేవు.",
+ "unavailableDescription_one": "{{count}} టీమ్మేట్ టీమ్ మెటాడేటా నుండి తెలిసినది, కానీ రోస్టర్ వివరాలు లేవు.",
+ "soloLeadOnly": "సోలో టీమ్ - లీడ్ మాత్రమే",
+ "removedCount": "తీసివేయబడింది ({{count}})",
+ "unavailableDescription_few": "{{count}} టీమ్మేట్లు టీమ్ మెటాడేటా నుండి తెలిసినవి, కానీ రోస్టర్ వివరాలు లేవు.",
+ "unavailableDescription_many": "{{count}} టీమ్మేట్లు టీమ్ మెటాడేటా నుండి తెలిసినవి, కానీ రోస్టర్ వివరాలు లేవు.",
+ "unavailableDescription_other": "{{count}} టీమ్మేట్లు టీమ్ మెటాడేటా నుండి తెలిసినవి, కానీ రోస్టర్ వివరాలు లేవు."
+ },
+ "executionLog": {
+ "empty": "చూపించడానికి ఏమీ లేదు",
+ "emptyUserMessage": "{{time}} - (ఖాళీ)",
+ "agentInstructions": "ఏజెంట్ సూచనలు",
+ "memberTurn": "{{member}} టర్న్",
+ "agentTurn": "ఏజెంట్ టర్న్",
+ "turn": "టర్న్"
+ },
+ "recentMessages": {
+ "latest": "తాజా సందేశాలు",
+ "latestForMember": "తాజా సందేశాలు - {{member}}",
+ "loadMore": "మరింత లోడ్ చేయి",
+ "expand": "విస్తరించు",
+ "collapse": "కుదించు"
+ },
+ "leadModel": {
+ "defaultModel": "డిఫాల్ట్",
+ "providerModelAria": "{{provider}} ప్రొవైడర్, {{model}}",
+ "leadShort": "లీడ్",
+ "teamLead": "టీమ్ లీడ్",
+ "syncWithTeammates": "టీమ్మేట్లతో మోడల్ను సింక్ చేయి",
+ "anthropicTeamWide": "Anthropic టీమ్-వ్యాప్తం",
+ "runtimeInheritance": "టీమ్మేట్లు తమ స్వంత ప్రొవైడర్ లేదా మోడల్ను సెట్ చేయకపోతే లీడ్ రన్టైమ్ వారికి వర్తిస్తుంది.",
+ "anthropicContextLimit": "ఈ లాంచ్లో కస్టమ్ Anthropic టీమ్మేట్లతో సహా Anthropic రన్టైమ్ల కోసం 200K కాంటెక్స్ట్ పరిమితి టీమ్-వ్యాప్తం."
+ },
+ "runtimeLogs": {
+ "autoRefresh": "ఆటో-రిఫ్రెష్",
+ "wrapLines": "లైన్లను ర్యాప్ చేయి",
+ "loadingTail": "ప్రాసెస్ లాగ్ టెయిల్ను లోడ్ చేస్తోంది...",
+ "empty": "ఈ సభ్యుని కోసం ఇంకా ప్రాసెస్ లాగ్ ఫైల్ క్యాప్చర్ చేయబడలేదు.",
+ "copy": "కాపీ చేయి",
+ "fileEmpty": "ప్రాసెస్ లాగ్ ఫైల్ ఖాళీగా ఉంది.",
+ "showingLast": "చివరి {{bytes}} చూపిస్తోంది.",
+ "showing": "{{bytes}} చూపిస్తోంది."
+ },
+ "tasks": {
+ "empty": "ఈ సభ్యునికి కేటాయించిన టాస్క్లు లేవు"
+ },
+ "messages": {
+ "loadOlder": "పాత సందేశాలను లోడ్ చేయి",
+ "filters": {
+ "all": "అన్నీ",
+ "messages": "సందేశాలు",
+ "comments": "వ్యాఖ్యలు"
+ },
+ "empty": {
+ "loading": "కార్యకలాపాన్ని లోడ్ చేస్తోంది...",
+ "noComments": "ఈ సభ్యుని కోసం వ్యాఖ్యలు లేవు",
+ "noLoadedMessages": "ఈ సభ్యుని కోసం ఇంకా లోడ్ చేసిన సందేశాలు లేవు",
+ "noMessages": "ఈ సభ్యునితో సందేశాలు లేవు",
+ "noLoadedActivity": "ఈ సభ్యుని కోసం ఇంకా లోడ్ చేసిన కార్యకలాపం లేదు",
+ "noActivity": "ఈ సభ్యునితో కార్యకలాపం లేదు"
+ }
+ },
+ "actions": {
+ "openProfile": "ప్రొఫైల్ను తెరువు",
+ "editRole": "రోల్ను సవరించు",
+ "sendMessage": "సందేశం పంపు",
+ "assignTask": "టాస్క్ను కేటాయించు"
+ },
+ "roleSelect": {
+ "customRolePlaceholder": "కస్టమ్ రోల్ను నమోదు చేయండి..."
+ }
+ },
+ "schedule": {
+ "count": "{{count}} షెడ్యూల్లు",
+ "count_one": "{{count}} షెడ్యూల్",
+ "count_other": "{{count}} షెడ్యూల్లు",
+ "nextRun": "తదుపరి: {{next}}",
+ "actions": {
+ "runNow": "ఇప్పుడే అమలు చేయి",
+ "edit": "సవరించు",
+ "pause": "పాజ్ చేయి",
+ "resume": "కొనసాగించు",
+ "delete": "తొలగించు",
+ "addSchedule": "షెడ్యూల్ జోడించు"
+ },
+ "runHistory": {
+ "loading": "రన్ చరిత్రను లోడ్ చేస్తోంది...",
+ "empty": "ఇంకా రన్లు లేవు"
+ },
+ "count_few": "{{count}} షెడ్యూల్లు",
+ "count_many": "{{count}} షెడ్యూల్లు",
+ "runLog": {
+ "title": "రన్ లాగ్",
+ "exitCode": "నిష్క్రమణ {{code}}",
+ "retryCount": "మళ్లీ ప్రయత్నం {{count}}/{{max}}",
+ "stillRunning": "టాస్క్ ఇంకా రన్ అవుతోంది...",
+ "loadingLogs": "లాగ్లను లోడ్ చేస్తోంది...",
+ "errors": "లోపాలు",
+ "close": "మూసివేయి"
+ },
+ "cron": {
+ "expression": "Cron ఎక్స్ప్రెషన్",
+ "highFrequencyWarning": "అధిక ఫ్రీక్వెన్సీ షెడ్యూల్ (5 నిమిషాల కంటే తక్కువ వ్యవధి)",
+ "nextRuns": "తదుపరి రన్లు:",
+ "timezone": "టైమ్జోన్",
+ "selectTimezone": "టైమ్జోన్ను ఎంచుకోండి",
+ "warmUpTime": "వార్మ్-అప్ సమయం",
+ "warmUpDescription": "షెడ్యూల్ చేసిన అమలుకు ముందు ఎంచుకున్న ప్రొవైడర్లను సిద్ధం చేస్తుంది",
+ "errors": {
+ "enterExpression": "ఒక cron ఎక్స్ప్రెషన్ను నమోదు చేయండి",
+ "invalidExpression": "చెల్లని cron ఎక్స్ప్రెషన్"
+ },
+ "presets": {
+ "everyHour": "ప్రతి గంట",
+ "everySixHours": "ప్రతి 6 గంటలకు",
+ "dailyAtNine": "రోజూ ఉదయం 9 గంటలకు",
+ "weekdaysAtNine": "వారపు రోజులు ఉదయం 9 గంటలకు",
+ "mondayAtNine": "సోమవారం ఉదయం 9 గంటలకు",
+ "everyThirtyMinutes": "ప్రతి 30 నిమిషాలకు"
+ },
+ "warmUpOptions": {
+ "none": "వార్మ్-అప్ లేదు",
+ "fiveMinutes": "5 నిమిషాలు",
+ "tenMinutes": "10 నిమిషాలు",
+ "fifteenMinutes": "15 నిమిషాలు",
+ "thirtyMinutes": "30 నిమిషాలు"
+ }
+ },
+ "empty": {
+ "title": "ఇంకా షెడ్యూల్లు లేవు",
+ "description": "cron షెడ్యూల్లో Claude టాస్క్లను స్వయంచాలకంగా రన్ చేయడానికి షెడ్యూల్ను సృష్టించండి."
+ },
+ "title": "షెడ్యూల్లు",
+ "status": {
+ "active": "క్రియాశీలం",
+ "paused": "పాజ్ చేయబడింది",
+ "disabled": "నిలిపివేయబడింది"
+ },
+ "runStatus": {
+ "pending": "పెండింగ్",
+ "warmingUp": "వార్మింగ్ అప్",
+ "warm": "వార్మ్",
+ "running": "రన్ అవుతోంది",
+ "completed": "పూర్తయింది",
+ "failed": "విఫలమైంది",
+ "interrupted": "అంతరాయం కలిగింది",
+ "cancelled": "రద్దు చేయబడింది"
+ }
+ },
+ "openCodeContextConfigHint": {
+ "summary": "OpenCode స్థానిక మోడల్లు ప్రాంప్ట్-మాత్రమే పరిమితులకు బదులుగా OpenCode కాంటెక్స్ట్ బడ్జెట్ను ఉపయోగించవచ్చు.",
+ "description": "ఈ టీమ్మేట్ ఉపయోగించే ప్రొవైడర్ మరియు మోడల్ కోసం OpenCode కాన్ఫిగ్కు సరిపోలే పరిమితులను జోడించండి. స్థానిక మోడల్లు తమ కాంటెక్స్ట్ విండోను ఓవర్ఫ్లో చేయడానికి ముందు OpenCode కంపాక్ట్ చేయడానికి మరియు ప్రూన్ చేయడానికి ఇది సహాయపడుతుంది.",
+ "replacePrefix": "భర్తీ చేయి",
+ "and": "మరియు",
+ "replaceSuffix": "మీ OpenCode సెటప్ నుండి ప్రొవైడర్ మరియు మోడల్ ID లతో. వంటి ప్రాంప్ట్ సూచనలు",
+ "promptInstructionsSuffix": "బలహీనంగా ఉంటాయి ఎందుకంటే మోడల్ వాటిని చదవడానికి ముందే అభ్యర్థన అసెంబుల్ చేయబడుతుంది.",
+ "providerLimits": "ప్రొవైడర్ పరిమితులు",
+ "compactionConfig": "కంపాక్షన్ కాన్ఫిగ్"
+ },
+ "sessions": {
+ "noProjectPath": "ప్రాజెక్ట్ మార్గం లింక్ చేయబడలేదు",
+ "provisioningHint": "టీమ్ ప్రొవిజనింగ్ తర్వాత సెషన్లు కనిపిస్తాయి",
+ "projectNotFound": "ప్రాజెక్ట్ కనుగొనబడలేదు",
+ "loading": "సెషన్లను లోడ్ చేస్తోంది...",
+ "empty": "సెషన్లు కనుగొనబడలేదు",
+ "showAllSessions": "అన్ని సెషన్ల కోసం చూపించు",
+ "lead": "లీడ్",
+ "removeFilter": "ఫిల్టర్ను తీసివేయి",
+ "filterBySession": "ఈ సెషన్ ద్వారా ఫిల్టర్ చేయి",
+ "openSession": "సెషన్ను తెరువు",
+ "title": "సెషన్లు"
+ },
+ "provisioning": {
+ "pid": "PID {{pid}}",
+ "cancel": "రద్దు చేయి",
+ "moreWarningsHidden": "{{count}} మరిన్ని హెచ్చరికలు దాచబడ్డాయి",
+ "diagnostics": "డయాగ్నొస్టిక్లు",
+ "liveOutput": "లైవ్ అవుట్పుట్",
+ "diagnosticsCopied": "డయాగ్నొస్టిక్లు కాపీ చేయబడ్డాయి",
+ "copyDiagnostics": "డయాగ్నొస్టిక్లను కాపీ చేయి",
+ "copied": "కాపీ చేయబడింది",
+ "noOutput": "ఇంకా అవుట్పుట్ క్యాప్చర్ చేయబడలేదు.",
+ "cliLogs": "CLI లాగ్లు",
+ "steps": {
+ "starting": "ప్రారంభమవుతోంది",
+ "configuring": "టీమ్ సెటప్",
+ "assembling": "సభ్యులు చేరుతున్నారు",
+ "finalizing": "ఖరారు చేస్తోంది"
+ },
+ "providerStatus": {
+ "status": {
+ "checking": "తనిఖీ చేస్తోంది...",
+ "ready": "సరే",
+ "notes": "సరే (గమనికలు)",
+ "failed": "లోపం",
+ "pending": "వేచి ఉంది"
+ },
+ "detailSummary": {
+ "cliBinaryMissing": "CLI బైనరీ లేదు",
+ "openCodeRuntimeMissing": "OpenCode రన్టైమ్ లేదు",
+ "openCodeWindowsAccessBlocked": "OpenCode Windows యాక్సెస్ నిరోధించబడింది",
+ "openCodeNoOutput": "OpenCode రన్టైమ్ తనిఖీ అవుట్పుట్ ఏదీ ఇవ్వలేదు",
+ "openCodeMcpUnreachable": "OpenCode యాప్ MCP చేరుకోలేదు",
+ "workingDirectoryMissing": "వర్కింగ్ డైరెక్టరీ లేదు",
+ "cliBinaryCouldNotStart": "CLI బైనరీని ప్రారంభించలేకపోయింది",
+ "cliPreflightIncomplete": "CLI ప్రీఫ్లైట్ పూర్తి కాలేదు",
+ "authenticationRequired": "ప్రామాణీకరణ అవసరం",
+ "runtimeProviderNotConfigured": "రన్టైమ్ ప్రొవైడర్ కాన్ఫిగర్ చేయబడలేదు",
+ "cliPreflightFailed": "CLI ప్రీఫ్లైట్ విఫలమైంది",
+ "selectedModelCompatible": "ఎంచుకున్న మోడల్ అనుకూలం",
+ "selectedModelCompatibilityPending": "ఎంచుకున్న మోడల్ అనుకూలత పెండింగ్",
+ "selectedModelAvailable": "ఎంచుకున్న మోడల్ అందుబాటులో ఉంది",
+ "selectedModelVerified": "ఎంచుకున్న మోడల్ ధృవీకరించబడింది",
+ "selectedModelUnavailable": "ఎంచుకున్న మోడల్ అందుబాటులో లేదు",
+ "selectedModelTimedOut": "ఎంచుకున్న మోడల్ ధృవీకరణ టైమ్ అవుట్ అయింది",
+ "selectedModelCheckFailed": "ఎంచుకున్న మోడల్ తనిఖీ విఫలమైంది",
+ "selectedModelDeferred": "ఎంచుకున్న మోడల్ ధృవీకరణ వాయిదా వేయబడింది",
+ "selectedModelPingNotConfirmed": "ఎంచుకున్న మోడల్ ping ధృవీకరించబడలేదు",
+ "readyWithNotes": "గమనికలతో సిద్ధం",
+ "needsAttention": "శ్రద్ధ అవసరం"
+ },
+ "modelChecksSummary": "ఎంచుకున్న మోడల్ తనిఖీలు - {{details}}",
+ "modelParts": {
+ "unavailable": "{{count}} మోడల్ అందుబాటులో లేదు",
+ "unavailable_one": "{{count}} మోడల్ అందుబాటులో లేదు",
+ "unavailable_other": "{{count}} మోడల్లు అందుబాటులో లేవు",
+ "checkFailed": "{{count}} మోడల్ తనిఖీ విఫలమైంది",
+ "checkFailed_one": "{{count}} మోడల్ తనిఖీ విఫలమైంది",
+ "checkFailed_other": "{{count}} మోడల్ల తనిఖీ విఫలమైంది",
+ "timedOut": "{{count}} మోడల్ టైమ్ అవుట్ అయింది",
+ "timedOut_one": "{{count}} మోడల్ టైమ్ అవుట్ అయింది",
+ "timedOut_other": "{{count}} మోడల్లు టైమ్ అవుట్ అయ్యాయి",
+ "deferred": "{{count}} ధృవీకరణ వాయిదా వేయబడింది",
+ "deferred_one": "{{count}} ధృవీకరణ వాయిదా వేయబడింది",
+ "deferred_other": "{{count}} ధృవీకరణలు వాయిదా వేయబడ్డాయి",
+ "pingNotConfirmed": "{{count}} ping ధృవీకరించబడలేదు",
+ "pingNotConfirmed_one": "{{count}} ping ధృవీకరించబడలేదు",
+ "pingNotConfirmed_other": "{{count}} pings ధృవీకరించబడలేదు",
+ "compatibilityPending": "{{count}} అనుకూలం, లోతైన ధృవీకరణ పెండింగ్",
+ "compatibilityPending_one": "{{count}} అనుకూలం, లోతైన ధృవీకరణ పెండింగ్",
+ "compatibilityPending_other": "{{count}} అనుకూలం, లోతైన ధృవీకరణ పెండింగ్",
+ "compatible": "{{count}} అనుకూలం",
+ "compatible_one": "{{count}} అనుకూలం",
+ "compatible_other": "{{count}} అనుకూలం",
+ "checking": "{{count}} తనిఖీ చేస్తోంది",
+ "checking_one": "{{count}} తనిఖీ చేస్తోంది",
+ "checking_other": "{{count}} తనిఖీ చేస్తోంది",
+ "available": "{{count}} అందుబాటులో ఉంది",
+ "available_one": "{{count}} అందుబాటులో ఉంది",
+ "available_other": "{{count}} అందుబాటులో ఉన్నాయి",
+ "verified": "{{count}} ధృవీకరించబడింది",
+ "verified_one": "{{count}} ధృవీకరించబడింది",
+ "verified_other": "{{count}} ధృవీకరించబడ్డాయి",
+ "unavailable_few": "{{count}} మోడల్లు అందుబాటులో లేవు",
+ "unavailable_many": "{{count}} మోడల్లు అందుబాటులో లేవు",
+ "checkFailed_few": "{{count}} మోడల్ల తనిఖీ విఫలమైంది",
+ "checkFailed_many": "{{count}} మోడల్ల తనిఖీ విఫలమైంది",
+ "timedOut_few": "{{count}} మోడల్లు టైమ్ అవుట్ అయ్యాయి",
+ "timedOut_many": "{{count}} మోడల్లు టైమ్ అవుట్ అయ్యాయి",
+ "deferred_few": "{{count}} ధృవీకరణలు వాయిదా వేయబడ్డాయి",
+ "deferred_many": "{{count}} ధృవీకరణలు వాయిదా వేయబడ్డాయి",
+ "pingNotConfirmed_few": "{{count}} pings ధృవీకరించబడలేదు",
+ "pingNotConfirmed_many": "{{count}} pings ధృవీకరించబడలేదు",
+ "compatibilityPending_few": "{{count}} అనుకూలం, లోతైన ధృవీకరణ పెండింగ్",
+ "compatibilityPending_many": "{{count}} అనుకూలం, లోతైన ధృవీకరణ పెండింగ్",
+ "compatible_few": "{{count}} అనుకూలం",
+ "compatible_many": "{{count}} అనుకూలం",
+ "checking_few": "{{count}} తనిఖీ చేస్తోంది",
+ "checking_many": "{{count}} తనిఖీ చేస్తోంది",
+ "available_few": "{{count}} అందుబాటులో ఉన్నాయి",
+ "available_many": "{{count}} అందుబాటులో ఉన్నాయి",
+ "verified_few": "{{count}} ధృవీకరించబడ్డాయి",
+ "verified_many": "{{count}} ధృవీకరించబడ్డాయి"
+ },
+ "openProviderSettings": "{{provider}} సెట్టింగ్లను తెరువు",
+ "copied": "కాపీ చేయబడింది",
+ "copyDiagnostics": "డయాగ్నొస్టిక్లను కాపీ చేయి",
+ "deepVerificationPending": "లోతైన ధృవీకరణ ఇంకా రన్ అవుతోంది. OpenCode ఉచిత మోడల్లకు సుమారు 20 సెకన్లు పట్టవచ్చు.",
+ "progress": {
+ "checkingSelectedProviders": "ఎంచుకున్న ప్రొవైడర్లను సమాంతరంగా తనిఖీ చేస్తోంది...",
+ "checkingProvider": "{{provider}} ప్రొవైడర్ను తనిఖీ చేస్తోంది...",
+ "checkingProviders": "{{providers}} ప్రొవైడర్లను తనిఖీ చేస్తోంది..."
+ },
+ "failureHints": {
+ "openCodeAccessDenied": "ఫోల్డర్ అనుమతులను సరిచేయండి లేదా ప్రాజెక్ట్ను యూజర్-రైటబుల్ ఫోల్డర్కు తరలించండి. Administrator గా రన్ చేయడం తాత్కాలిక పరిష్కారం మాత్రమే.",
+ "openCodeBridgeNoOutput": "యాప్ మరియు OpenCode రన్టైమ్ను పునఃప్రారంభించి, ఆపై మళ్లీ ప్రయత్నించండి. ఇది పునరావృతమైతే, డయాగ్నొస్టిక్లను కాపీ చేయండి.",
+ "workingDirectoryMissing": "ప్రస్తుత వర్కింగ్ డైరెక్టరీని ఎంచుకోండి, ఆపై ఈ డైలాగ్ను మళ్లీ తెరవండి.",
+ "authenticationRequired": "Claude CLI లో అవసరమైన ప్రొవైడర్ను ప్రామాణీకరించండి, ఆపై ఈ డైలాగ్ను మళ్లీ తెరవండి.",
+ "runtimeProviderNotConfigured": "ఎంచుకున్న ప్రొవైడర్ రన్టైమ్ను కాన్ఫిగర్ చేయండి, ఆపై ఈ డైలాగ్ను మళ్లీ తెరవండి.",
+ "openCodeRuntimeMissing": "ప్రొవైడర్ స్థితి కార్డు నుండి OpenCode రన్టైమ్ను ఇన్స్టాల్ చేయండి లేదా మళ్లీ ప్రయత్నించండి, ఆపై ఈ డైలాగ్ను మళ్లీ తెరవండి.",
+ "openCodeAppMcpUnreachable": "OpenCode యాప్ MCP వంతెనను రిఫ్రెష్ చేయడానికి లాంచ్ మళ్లీ ప్రయత్నించండి. ఇది పునరావృతమైతే, యాప్ మరియు OpenCode రన్టైమ్ను పునఃప్రారంభించండి.",
+ "cliBinaryMissing": "స్థానిక Claude CLI బైనరీ ఉందని మరియు ప్రారంభించగలదని నిర్ధారించుకోండి, ఆపై ఈ డైలాగ్ను మళ్లీ తెరవండి.",
+ "default": "పై సమస్యను పరిష్కరించండి, ఆపై ఈ డైలాగ్ను మళ్లీ తెరవండి.",
+ "openCodeNodeModulesSymlinkPermission": "Agent Teams AI ను Administrator గా రన్ చేయండి, ఆపై లాంచ్ మళ్లీ ప్రయత్నించండి."
+ }
+ },
+ "presentation": {
+ "awaitingPermission": "{{count}} టీమ్మేట్ అనుమతి ఆమోదం కోసం వేచి ఉంది",
+ "nameListWithMore": "{{names}}, +{{count}} మరిన్ని",
+ "waitingForOpenCode": "OpenCode కోసం వేచి ఉంది: {{names}}",
+ "bootstrapStalled": "బూట్స్ట్రాప్ నిలిచిపోయింది: {{names}}",
+ "bootstrapStalledWithOpenCodeWait": "{{stalled}}; OpenCode కోసం వేచి ఉంది: {{names}}",
+ "namedPendingDiagnostic": "{{label}}: {{names}}",
+ "countPendingDiagnostic": "{{count}} {{label}}",
+ "pendingLabels": {
+ "bootstrapStalled": "బూట్స్ట్రాప్ నిలిచిపోయింది",
+ "shellOnly": "షెల్-మాత్రమే",
+ "waitingForBootstrap": "బూట్స్ట్రాప్ కోసం వేచి ఉంది",
+ "bootstrapUnconfirmed": "బూట్స్ట్రాప్ ధృవీకరించబడలేదు",
+ "awaitingPermission": "అనుమతి కోసం వేచి ఉంది",
+ "waitingForRuntime": "రన్టైమ్ కోసం వేచి ఉంది",
+ "shellOnlyLower": "షెల్-మాత్రమే",
+ "waitingForBootstrapLower": "బూట్స్ట్రాప్ కోసం వేచి ఉంది",
+ "bootstrapUnconfirmedLower": "బూట్స్ట్రాప్ ధృవీకరించబడలేదు",
+ "awaitingPermissionLower": "అనుమతి కోసం వేచి ఉంది",
+ "waitingForRuntimeLower": "రన్టైమ్ కోసం వేచి ఉంది"
+ },
+ "failed": {
+ "memberFailedToStart": "{{name}} ప్రారంభించడంలో విఫలమైంది",
+ "teammatesFailedToStart": "{{count}} టీమ్మేట్లు ప్రారంభించడంలో విఫలమయ్యాయి",
+ "teammatesFailedRatio": "{{count}}/{{total}} టీమ్మేట్లు ప్రారంభించడంలో విఫలమయ్యాయి"
+ },
+ "skipped": {
+ "memberSkipped": "ఈ లాంచ్ కోసం {{name}} దాటవేయబడింది",
+ "memberSkippedWithReason": "ఈ లాంచ్ కోసం {{name}} దాటవేయబడింది - {{reason}}",
+ "memberSkippedCompact": "{{name}} దాటవేయబడింది",
+ "teammatesSkipped": "{{count}} టీమ్మేట్లు దాటవేయబడ్డాయి",
+ "teammatesSkippedList": "దాటవేయబడిన టీమ్మేట్లు: {{list}}",
+ "teammatesSkippedRatio": "ఈ లాంచ్ కోసం {{count}}/{{total}} టీమ్మేట్లు దాటవేయబడ్డాయి"
+ },
+ "joining": {
+ "teammatesStillJoining": "{{count}} టీమ్మేట్లు ఇంకా చేరుతున్నారు",
+ "teammatesStillJoining_one": "{{count}} టీమ్మేట్ ఇంకా చేరుతోంది",
+ "teammatesStillJoining_few": "{{count}} టీమ్మేట్లు ఇంకా చేరుతున్నారు",
+ "teammatesStillJoining_many": "{{count}} టీమ్మేట్లు ఇంకా చేరుతున్నారు",
+ "teammatesStillJoining_other": "{{count}} టీమ్మేట్లు ఇంకా చేరుతున్నారు",
+ "teammatesConfirmedRatio": "{{count}}/{{total}} టీమ్మేట్లు ధృవీకరించబడ్డాయి"
+ },
+ "ready": {
+ "leadOnline": "లీడ్ ఆన్లైన్",
+ "allTeammatesJoined": "మొత్తం {{count}} టీమ్మేట్లు చేరారు",
+ "teamProvisionedLeadOnline": "టీమ్ ప్రొవిజన్ చేయబడింది - లీడ్ ఆన్లైన్",
+ "teamProvisionedAllJoined": "టీమ్ ప్రొవిజన్ చేయబడింది - మొత్తం {{count}} టీమ్మేట్లు చేరారు",
+ "teamProvisionedStillJoining": "టీమ్ ప్రొవిజన్ చేయబడింది - టీమ్మేట్లు ఇంకా చేరుతున్నారు",
+ "launchFinishedWithErrors": "లాంచ్ లోపాలతో పూర్తయింది - {{count}}/{{total}} టీమ్మేట్లు ప్రారంభించడంలో విఫలమయ్యాయి",
+ "launchContinuedSkipped": "లాంచ్ కొనసాగింది - {{count}}/{{total}} టీమ్మేట్లు దాటవేయబడ్డాయి",
+ "teamLaunchedLeadOnline": "టీమ్ లాంచ్ చేయబడింది - లీడ్ ఆన్లైన్",
+ "teamLaunchedAllJoined": "టీమ్ లాంచ్ చేయబడింది - మొత్తం {{count}} టీమ్మేట్లు చేరారు"
+ },
+ "panel": {
+ "launchFailed": "లాంచ్ విఫలమైంది",
+ "launchDetails": "లాంచ్ వివరాలు",
+ "launchFinishedWithErrors": "లాంచ్ లోపాలతో పూర్తయింది",
+ "launchContinuedSkipped": "దాటవేయబడిన టీమ్మేట్లతో లాంచ్ కొనసాగింది",
+ "coreTeamReady": "కోర్ టీమ్ సిద్ధం",
+ "finishingLaunch": "లాంచ్ను పూర్తి చేస్తోంది",
+ "teamLaunched": "టీమ్ లాంచ్ చేయబడింది",
+ "launchingTeam": "టీమ్ను లాంచ్ చేస్తోంది"
+ }
+ }
+ },
+ "liveRuntimeStatus": {
+ "title": "లైవ్ రన్టైమ్ స్థితి",
+ "description": "ప్రదర్శన-మాత్రమే హార్ట్బీట్ మరియు లాంచ్ స్థితి. ప్రాసెస్ నియంత్రణలు దిగువన ఉంటాయి.",
+ "source": "మూలం: {{source}}",
+ "lane": "{{lane}} లేన్",
+ "diagnosticOnly": "డయాగ్నొస్టిక్ మాత్రమే",
+ "updated": "{{value}} అప్డేట్ అయింది",
+ "states": {
+ "running": "రన్ అవుతోంది",
+ "starting": "ప్రారంభమవుతోంది",
+ "waiting": "వేచి ఉంది",
+ "degraded": "శ్రద్ధ అవసరం",
+ "stopped": "ఆగిపోయింది",
+ "unknown": "తెలియదు"
+ }
+ },
+ "taskLogs": {
+ "exact": {
+ "title": "ఖచ్చితమైన టాస్క్ లాగ్లు",
+ "loading": "ఖచ్చితమైన టాస్క్ లాగ్లను లోడ్ చేస్తోంది...",
+ "description": "Logs లో ఉపయోగించే అదే అమలు-లాగ్ కాంపోనెంట్లతో రెండర్ చేయబడిన ఖచ్చితమైన ట్రాన్స్క్రిప్ట్ స్లైస్లు.",
+ "emptyTitle": "ఇంకా ఖచ్చితమైన టాస్క్ లాగ్లు లేవు",
+ "emptyDescription": "స్పష్టమైన టాస్క్-లింక్డ్ ట్రాన్స్క్రిప్ట్ మెటాడేటా అందుబాటులో ఉన్నప్పుడు ఖచ్చితమైన ట్రాన్స్క్రిప్ట్ బండిల్లు ఇక్కడ కనిపిస్తాయి.",
+ "summaryOnly": "సారాంశం మాత్రమే"
+ },
+ "executionSessions": {
+ "title": "అమలు సెషన్లు",
+ "online": "ఆన్లైన్",
+ "updating": "అప్డేట్ చేస్తోంది...",
+ "description": "లెగసీ సెషన్-కేంద్రిత ట్రాన్స్క్రిప్ట్ బ్రౌజింగ్ మరియు ప్రివ్యూలు."
+ },
+ "stream": {
+ "title": "టాస్క్ లాగ్ స్ట్రీమ్"
+ }
+ },
+ "kanban": {
+ "taskCard": {
+ "cancelTask": "టాస్క్ {{taskId}} ను రద్దు చేయి",
+ "cancel": "రద్దు చేయి",
+ "moveBackToTodoConfirm": "ఈ టాస్క్ను తిరిగి TODO కు తరలించి టీమ్కు తెలియజేయాలా?",
+ "confirm": "నిర్ధారించు",
+ "keep": "ఉంచు",
+ "changesNeedAttention": "మార్పులకు శ్రద్ధ అవసరం",
+ "changes": "మార్పులు",
+ "deleteTask": "టాస్క్ను తొలగించు",
+ "taskLogsActive": "టాస్క్ లాగ్లు క్రియాశీలం",
+ "newTaskLogsArriving": "కొత్త టాస్క్ లాగ్లు వస్తున్నాయి",
+ "awaitingUser": "యూజర్ కోసం వేచి ఉంది",
+ "awaitingLead": "లీడ్ కోసం వేచి ఉంది",
+ "blockedBy": "దీని ద్వారా నిరోధించబడింది",
+ "blocks": "నిరోధిస్తుంది",
+ "start": "ప్రారంభించు",
+ "complete": "పూర్తి చేయి",
+ "approve": "ఆమోదించు",
+ "requestReview": "సమీక్షను అభ్యర్థించు",
+ "manualReview": "మాన్యువల్ సమీక్ష",
+ "requestChanges": "మార్పులను అభ్యర్థించు"
+ },
+ "filter": {
+ "title": "టాస్క్లను ఫిల్టర్ చేయి",
+ "session": "సెషన్",
+ "allSessions": "అన్ని సెషన్లు",
+ "teammate": "టీమ్మేట్",
+ "unassigned": "(కేటాయించబడలేదు)",
+ "column": "కాలమ్",
+ "clearAll": "అన్నీ క్లియర్ చేయి"
+ },
+ "board": {
+ "addTask": "టాస్క్ జోడించు",
+ "noTasks": "టాస్క్లు లేవు",
+ "showMore": "{{count}} మరిన్ని చూపించు",
+ "hiddenCount": "{{count}} దాచబడ్డాయి",
+ "trash": "ట్రాష్",
+ "gridView": "గ్రిడ్ వీక్షణ",
+ "columnsView": "కాలమ్ల వీక్షణ"
+ },
+ "trash": {
+ "title": "ట్రాష్",
+ "empty": "తొలగించిన టాస్క్లు లేవు",
+ "subject": "విషయం",
+ "owner": "యజమాని",
+ "deleted": "తొలగించబడింది",
+ "unassigned": "కేటాయించబడలేదు",
+ "restoreTask": "టాస్క్ను పునరుద్ధరించు",
+ "restore": "పునరుద్ధరించు",
+ "close": "మూసివేయి"
+ },
+ "sort": {
+ "title": "టాస్క్లను క్రమబద్ధీకరించు",
+ "sortBy": "దీని ప్రకారం క్రమబద్ధీకరించు",
+ "reset": "రీసెట్ చేయి",
+ "options": {
+ "updatedAt": {
+ "label": "చివరిగా అప్డేట్ చేయబడింది",
+ "description": "ఇటీవల అప్డేట్ చేసినవి మొదట"
+ },
+ "createdAt": {
+ "label": "సృష్టించబడింది",
+ "description": "కొత్తవి మొదట"
+ },
+ "owner": {
+ "label": "యజమాని",
+ "description": "కేటాయించబడినవారి ప్రకారం అక్షర క్రమంలో"
+ },
+ "manual": {
+ "label": "మాన్యువల్",
+ "description": "డ్రాగ్-అండ్-డ్రాప్ క్రమం"
+ }
+ }
+ },
+ "search": {
+ "clearSearch": "శోధనను క్లియర్ చేయి",
+ "tasks": "టాస్క్లు",
+ "createdAgo": "{{time}} సృష్టించబడింది",
+ "updatedAgo": "{{time}} అప్డేట్ చేయబడింది",
+ "placeholder": "టాస్క్లను శోధించండి... (#id లేదా టెక్స్ట్)"
+ },
+ "grid": {
+ "addTask": "టాస్క్ జోడించు",
+ "noTasks": "టాస్క్లు లేవు"
+ },
+ "title": "Kanban",
+ "columns": {
+ "todo": "చేయవలసినవి",
+ "inProgress": "ప్రోగ్రెస్లో",
+ "review": "సమీక్ష",
+ "done": "పూర్తయింది",
+ "approved": "ఆమోదించబడింది"
+ }
+ },
+ "worktreeGitReadiness": {
+ "checking": "టీమ్మేట్ worktrees కోసం Git రిపోజిటరీ స్థితిని తనిఖీ చేస్తోంది...",
+ "ready": "Git worktrees సిద్ధం.",
+ "readyOnBranch": "{{branch}} బ్రాంచ్లో Git worktrees సిద్ధం.",
+ "needsSetup": "Worktree ఐసొలేషన్కు Git సెటప్ అవసరం",
+ "initialCommitNotice": "ప్రారంభ కమిట్ చర్య అన్ని ప్రస్తుత ఫైల్లను సందేశంతో స్టేజ్ చేసి కమిట్ చేస్తుంది",
+ "initializeRepository": "Git రిపోజిటరీని ప్రారంభించు",
+ "createInitialCommit": "ప్రారంభ కమిట్ను సృష్టించు",
+ "initialCommitMessage": "chore: initial commit"
+ },
+ "toolApproval": {
+ "settings": "సెట్టింగ్లు",
+ "autoAllowAllTools": "అన్ని టూల్స్ను ఆటో-అనుమతించు",
+ "autoAllowFileEdits": "ఫైల్ సవరణలను ఆటో-అనుమతించు (Edit, Write, NotebookEdit)",
+ "autoAllowSafeCommands": "సురక్షిత కమాండ్లను ఆటో-అనుమతించు (git, pnpm, npm, ls...)",
+ "onTimeout": "టైమ్అవుట్లో:",
+ "after": "తర్వాత",
+ "secondsShort": "సెకన్లు",
+ "timeoutActions": {
+ "wait": "శాశ్వతంగా వేచి ఉండు",
+ "allow": "అనుమతించు",
+ "deny": "తిరస్కరించు"
+ },
+ "submit": "సమర్పించు",
+ "allow": "అనుమతించు",
+ "deny": "తిరస్కరించు",
+ "allowAll": "అన్నీ అనుమతించు",
+ "pendingCount": "{{count}} పెండింగ్",
+ "autoActionIn": "{{time}} లో ఆటో-{{action}}",
+ "diff": {
+ "previewChanges": "మార్పులను ప్రివ్యూ చేయి",
+ "readingFile": "ఫైల్ను చదువుతోంది...",
+ "binaryFile": "బైనరీ ఫైల్ - ప్రివ్యూ చేయలేరు",
+ "truncated": "ఫైల్ 2MB వద్ద కుదించబడింది - diff అసంపూర్ణంగా ఉండవచ్చు",
+ "newFile": "కొత్త ఫైల్"
+ }
+ },
+ "memberWorkSync": {
+ "details": {
+ "title": "సభ్యుని వర్క్ సింక్",
+ "actionableItems": "చర్య తీసుకోదగిన అంశాలు",
+ "fingerprint": "ఫింగర్ప్రింట్",
+ "report": "నివేదిక",
+ "none": "ఏదీ లేదు",
+ "shadowWouldNudge": "షాడో నడ్జ్ చేస్తుంది",
+ "yes": "అవును",
+ "no": "లేదు",
+ "moreActionableItems": "{{count}} మరిన్ని చర్య తీసుకోదగిన అంశం(లు)",
+ "diagnostics": "డయాగ్నొస్టిక్లు: {{diagnostics}}"
+ },
+ "title": "సభ్యుని వర్క్ సింక్",
+ "loadingDiagnostics": "సభ్యుని వర్క్ సింక్ డయాగ్నొస్టిక్లను లోడ్ చేస్తోంది.",
+ "diagnosticsUnavailable": "సభ్యుని వర్క్ సింక్ డయాగ్నొస్టిక్లు అందుబాటులో లేవు."
+ },
+ "advancedCli": {
+ "title": "ఆధునిక",
+ "useWorktree": "worktree ఉపయోగించు",
+ "recent": "ఇటీవలి",
+ "commandPreview": "కమాండ్ ప్రివ్యూ",
+ "customArguments": "కస్టమ్ ఆర్గ్యుమెంట్లు",
+ "validate": "ధృవీకరించు",
+ "validation": {
+ "allFlagsValid": "అన్ని ఫ్లాగ్లు చెల్లుబాటు అయ్యేవి",
+ "unknownFlags": "తెలియనివి: {{flags}}",
+ "protectedFlags": "రక్షితం: {{flags}}",
+ "failed": "ధృవీకరణ విఫలమైంది"
+ },
+ "placeholders": {
+ "worktreeName": "worktree-name"
+ }
+ },
+ "processes": {
+ "ago": "{{time}} క్రితం",
+ "stoppedAgo": "{{time}} క్రితం ఆగిపోయింది",
+ "running": "రన్ అవుతోంది",
+ "stopped": "ఆగిపోయింది",
+ "stopProcess": "ప్రాసెస్ను ఆపు (SIGTERM)",
+ "kill": "Kill",
+ "openInBrowser": "బ్రౌజర్లో తెరువు",
+ "open": "తెరువు",
+ "pid": "PID{{pid}}",
+ "title": "CLI ప్రాసెస్లు"
+ },
+ "taskActivity": {
+ "loadingDetails": "కార్యకలాప వివరాలను లోడ్ చేస్తోంది...",
+ "contextUnavailable": "ఈ కార్యకలాపం కోసం వివరణాత్మక ట్రాన్స్క్రిప్ట్ కాంటెక్స్ట్ ఇకపై అందుబాటులో లేదు.",
+ "loading": "టాస్క్ కార్యకలాపాన్ని లోడ్ చేస్తోంది...",
+ "lowSignalOnly": "ఇంకా ఏ ముఖ్య టాస్క్ కార్యకలాపం కనుగొనబడలేదు. తక్కువ-స్థాయి అమలు వివరాలు Task Log Stream లో దిగువన అందుబాటులో ఉన్నాయి.",
+ "empty": "అందుబాటులో ఉన్న ట్రాన్స్క్రిప్ట్లలో ఇంకా ఏ స్పష్టమైన టాస్క్ కార్యకలాపం కనుగొనబడలేదు. పాత లేదా హ్యూరిస్టిక్ సెషన్ లాగ్లు ఇంకా Execution Sessions లో దిగువన అందుబాటులో ఉండవచ్చు.",
+ "title": "టాస్క్ కార్యకలాపం",
+ "description": "ట్రాన్స్క్రిప్ట్ మెటాడేటా నుండి ఈ టాస్క్కు లింక్ చేయబడిన ముఖ్య స్పష్టమైన రన్టైమ్ కార్యకలాపం."
+ },
+ "sendMessage": {
+ "title": "సందేశం పంపు",
+ "description": "ఒక టీమ్ సభ్యునికి నేరుగా సందేశం పంపండి.",
+ "recipientLabel": "గ్రహీత",
+ "selectMemberPlaceholder": "సభ్యుడిని ఎంచుకోండి...",
+ "messageLabel": "సందేశం",
+ "placeholder": "మీ సందేశాన్ని రాయండి... (పంపడానికి Enter)",
+ "send": "పంపు",
+ "sending": "పంపుతోంది...",
+ "charsLeft": "{{count}} అక్షరాలు మిగిలి ఉన్నాయి",
+ "saved": "సేవ్ చేయబడింది",
+ "attachments": {
+ "teamOnlineRequired": "ఫైల్లను జతచేయడానికి టీమ్ ఆన్లైన్లో ఉండాలి",
+ "recipientUnsupported": "ఫైల్లను టీమ్ లీడ్ లేదా OpenCode టీమ్మేట్లకు పంపవచ్చు",
+ "openCodeOnlineRequired": "OpenCode టీమ్మేట్ల కోసం ఫైల్లను జతచేయడానికి టీమ్ ఆన్లైన్లో ఉండాలి",
+ "disabledHint": "ఆన్లైన్ టీమ్ లీడ్ మరియు ఆన్లైన్ OpenCode టీమ్మేట్లకు ఫైల్ అటాచ్మెంట్లు మద్దతిస్తాయి. అటాచ్మెంట్లను తీసివేయండి లేదా గ్రహీతను మార్చండి.",
+ "attachFiles": "ఫైల్లను జతచేయి (పేస్ట్ చేయండి లేదా డ్రాగ్ & డ్రాప్)",
+ "unavailable": "అటాచ్మెంట్లు అందుబాటులో లేవు"
+ },
+ "quote": {
+ "remove": "కోట్ను తీసివేయి",
+ "replyingTo": "దీనికి ప్రత్యుత్తరం ఇస్తోంది"
+ }
+ },
+ "taskComments": {
+ "cancelReply": "ప్రత్యుత్తరం రద్దు చేయి",
+ "replyingTo": "దీనికి ప్రత్యుత్తరం ఇస్తోంది",
+ "placeholder": "వ్యాఖ్యను జోడించండి... (పంపడానికి Enter)",
+ "attachFile": "ఫైల్ను జతచేయి (లేదా పేస్ట్ చేయండి)",
+ "voiceToText": "వాయిస్ టు టెక్స్ట్",
+ "comment": "వ్యాఖ్య",
+ "charsLeft": "{{count}} అక్షరాలు మిగిలి ఉన్నాయి",
+ "saved": "సేవ్ చేయబడింది",
+ "awaitingReplyFrom": "దీని నుండి ప్రత్యుత్తరం కోసం వేచి ఉంది",
+ "or": "లేదా"
+ },
+ "taskAttachments": {
+ "dropImageHere": "ఇమేజ్ను ఇక్కడ వదలండి",
+ "attachImage": "ఇమేజ్ను జతచేయి",
+ "pasteOrDragDrop": "లేదా పేస్ట్ చేయండి / డ్రాగ్-డ్రాప్",
+ "fromOriginalMessage": "అసలు సందేశం నుండి",
+ "dropFilesHere": "ఫైల్లను ఇక్కడ వదలండి",
+ "loading": "అటాచ్మెంట్లను లోడ్ చేస్తోంది..."
+ },
+ "permissions": {
+ "autoApproveAllTools": "అన్ని టూల్స్ను ఆటో-ఆమోదించు",
+ "autonomousModeDescription": "స్వయంప్రతిపత్తి మోడ్: టీమ్ టూల్స్ నిర్ధారణ లేకుండా అమలవుతాయి. విశ్వసనీయం కాని కోడ్తో జాగ్రత్తగా ఉండండి.",
+ "manualModeDescription": "మాన్యువల్ మోడ్: మీరు ప్రతి టూల్ కాల్ను రియల్ టైమ్లో ఆమోదిస్తారు లేదా తిరస్కరిస్తారు."
+ },
+ "memberLogStream": {
+ "tabs": {
+ "execution": "అమలు",
+ "process": "ప్రాసెస్"
+ },
+ "filters": {
+ "all": "అన్నీ"
+ },
+ "logs": {
+ "title": "లాగ్లు",
+ "loading": "సభ్యుని లాగ్ స్ట్రీమ్ను లోడ్ చేస్తోంది...",
+ "emptyTitle": "ఈ సభ్యుని కోసం ఇంకా లాగ్ స్ట్రీమ్ ఎంట్రీలు కనుగొనబడలేదు.",
+ "emptyDescription": "అందుబాటులో ఉన్నప్పుడు సభ్యుని-స్కోప్ చేసిన ట్రాన్స్క్రిప్ట్ లేదా రన్టైమ్ లాగ్లు ఇక్కడ కనిపిస్తాయి."
+ }
+ },
+ "reviewDialog": {
+ "placeholder": "ఏమి మార్చాలో వివరించండి... (సమర్పించడానికి Enter)",
+ "submit": "సమర్పించు",
+ "charsLeft": "{{count}} అక్షరాలు మిగిలి ఉన్నాయి",
+ "saved": "సేవ్ చేయబడింది",
+ "title": "మార్పులను అభ్యర్థించు"
+ },
+ "dialogs": {
+ "actions": {
+ "openDashboard": "డాష్బోర్డ్ తెరువు",
+ "openTeam": "టీమ్ను తెరువు",
+ "cancel": "రద్దు చేయి"
+ },
+ "membersJson": {
+ "hide": "JSON దాచు"
+ },
+ "optional": {
+ "badge": "ఐచ్ఛికం"
+ }
+ },
+ "runningTeams": {
+ "title": "రన్ అవుతున్న టీమ్లు",
+ "status": {
+ "active": "క్రియాశీలం",
+ "provisioning": "లాంచ్ చేస్తోంది",
+ "idle": "రన్ అవుతోంది"
+ },
+ "noProject": "ప్రాజెక్ట్ లేదు"
+ },
+ "layout": {
+ "maxPanesReached": "గరిష్టంగా {{count}} పేన్లు చేరుకున్నాయి"
+ },
+ "codexReconnect": {
+ "description": "మీ Codex సెషన్ పాతదిగా కనిపిస్తోంది. కొనసాగించడానికి మళ్లీ కనెక్ట్ చేయండి.",
+ "useCode": "కోడ్ ఉపయోగించు",
+ "generating": "జనరేట్ చేస్తోంది...",
+ "openLogin": "లాగిన్ తెరువు",
+ "generateLink": "లింక్ జనరేట్ చేయి"
+ },
+ "effortLevel": {
+ "label": "ఎఫర్ట్ స్థాయి (ఐచ్ఛికం)",
+ "maxDescription": "కష్టమైన టాస్క్ల కోసం Max మోడల్కు అత్యధిక రీజనింగ్ సమయాన్ని ఇస్తుంది."
+ },
+ "contextLimit": {
+ "limitTo200k": "కాంటెక్స్ట్ను 200K టోకెన్లకు పరిమితం చేయి",
+ "always200k": "(ఈ మోడల్కు ఎల్లప్పుడూ 200K)",
+ "tooltipContent": "మద్దతు ఉన్నప్పుడు లాంచ్లను 200K-టోకెన్ కాంటెక్స్ట్ విండోలో ఉంచుతుంది.",
+ "tooltipTitle": "కాంటెక్స్ట్ పరిమితి"
+ },
+ "roleSelect": {
+ "noRole": "రోల్ లేదు",
+ "customRole": "కస్టమ్ రోల్...",
+ "searchPlaceholder": "రోల్లను శోధించండి...",
+ "empty": "రోల్లు కనుగొనబడలేదు.",
+ "reservedRole": "ఈ రోల్ రిజర్వ్ చేయబడింది",
+ "emptyCustomRole": "రోల్ ఖాళీగా ఉండకూడదు"
+ }
+}
diff --git a/src/features/localization/renderer/locales/th/common.json b/src/features/localization/renderer/locales/th/common.json
new file mode 100644
index 00000000..92df4618
--- /dev/null
+++ b/src/features/localization/renderer/locales/th/common.json
@@ -0,0 +1,927 @@
+{
+ "actions": {
+ "cancel": "ยกเลิก",
+ "close": "ปิด",
+ "copied": "คัดลอกแล้ว",
+ "copyUrl": "คัดลอก URL",
+ "open": "เปิด",
+ "reveal": "แสดง",
+ "retry": "ลองอีกครั้ง",
+ "save": "บันทึก",
+ "showLess": "ดูน้อยลง",
+ "showMore": "ดูเพิ่มเติม",
+ "refresh": "รีเฟรช",
+ "reset": "รีเซ็ต",
+ "copyToClipboard": "คัดลอกไปยังคลิปบอร์ด",
+ "moreActions": "การดำเนินการเพิ่มเติม",
+ "closeDialog": "ปิดกล่องโต้ตอบ",
+ "goToDashboard": "ไปที่แดชบอร์ด",
+ "or": "หรือ",
+ "hide": "ซ่อน",
+ "resetSelection": "รีเซ็ตการเลือก"
+ },
+ "code": {
+ "line": "บรรทัด {{line}}",
+ "lines": "บรรทัด {{from}}-{{to}}",
+ "moreLines": "(อีก {{count}} บรรทัด...)",
+ "moreLines_few": "(อีก {{count}} บรรทัด...)",
+ "moreLines_many": "(อีก {{count}} บรรทัด...)",
+ "moreLines_one": "(อีก {{count}} บรรทัด...)",
+ "moreLines_other": "(อีก {{count}} บรรทัด...)",
+ "code": "โค้ด",
+ "preview": "ตัวอย่าง",
+ "markdownPreview": "ตัวอย่าง Markdown",
+ "linesParenthesized": "(บรรทัด {{from}}-{{to}})",
+ "mermaidSyntaxError": "ข้อผิดพลาดไวยากรณ์ Mermaid"
+ },
+ "contextBadge": {
+ "badge": "คอนเท็กซ์",
+ "breakdown": {
+ "text": "ข้อความ",
+ "thinking": "การคิด"
+ },
+ "detailsAria": "รายละเอียดการแทรกคอนเท็กซ์",
+ "sectionSummary": "{{title}} ({{count}}) ~{{tokens}} โทเค็น",
+ "sections": {
+ "claudeMdFiles": "ไฟล์ CLAUDE.md",
+ "mentionedFiles": "ไฟล์ที่กล่าวถึง",
+ "taskCoordination": "การประสานงาน",
+ "thinkingText": "การคิด + ข้อความ",
+ "toolOutputs": "ผลลัพธ์เครื่องมือ",
+ "userMessages": "ข้อความผู้ใช้"
+ },
+ "title": "คอนเท็กซ์ใหม่ที่แทรกในเทิร์นนี้",
+ "tokenCount": "~{{tokens}} โทเค็น",
+ "totalNewTokens": "โทเค็นใหม่ทั้งหมด",
+ "turn": "เทิร์น {{turn}}",
+ "sectionSummary_few": "{{title}} ({{count}}) ~{{tokens}} โทเค็น",
+ "sectionSummary_many": "{{title}} ({{count}}) ~{{tokens}} โทเค็น",
+ "sectionSummary_one": "{{title}} ({{count}}) ~{{tokens}} โทเค็น",
+ "sectionSummary_other": "{{title}} ({{count}}) ~{{tokens}} โทเค็น"
+ },
+ "locales": {
+ "emptyMessage": "ไม่พบภาษา",
+ "names": {
+ "ar": "อาหรับ",
+ "bn": "เบงกาลี",
+ "de": "เยอรมัน",
+ "en": "อังกฤษ",
+ "es": "สเปน",
+ "fa": "เปอร์เซีย",
+ "fil": "ฟิลิปปินส์",
+ "fr": "ฝรั่งเศส",
+ "hi": "ฮินดี",
+ "id": "อินโดนีเซีย",
+ "it": "อิตาลี",
+ "ja": "ญี่ปุ่น",
+ "ko": "เกาหลี",
+ "mr": "มราฐี",
+ "ms": "มลายู",
+ "nl": "ดัตช์",
+ "pl": "โปแลนด์",
+ "pt": "โปรตุเกส",
+ "ro": "โรมาเนีย",
+ "ru": "รัสเซีย",
+ "sw": "สวาฮีลี",
+ "system": "ระบบ",
+ "ta": "ทมิฬ",
+ "te": "เตลูกู",
+ "th": "ไทย",
+ "tr": "ตุรกี",
+ "uk": "ยูเครน",
+ "ur": "อูรดู",
+ "vi": "เวียดนาม",
+ "zh": "จีน"
+ },
+ "searchPlaceholder": "ค้นหาภาษา...",
+ "selectPlaceholder": "เลือกภาษาของแอป...",
+ "systemWithResolved": "ระบบ - {{locale}}"
+ },
+ "members": {
+ "emptyMessage": "ไม่พบสมาชิก",
+ "searchPlaceholder": "ค้นหาสมาชิก...",
+ "unassigned": "ยังไม่ได้มอบหมาย",
+ "teammateFallback": "เพื่อนร่วมทีม"
+ },
+ "providerRuntime": {
+ "codex": {
+ "install": {
+ "checking": "กำลังตรวจสอบ",
+ "downloading": "กำลังดาวน์โหลด",
+ "installCli": "ติดตั้ง Codex CLI",
+ "installing": "กำลังติดตั้ง",
+ "retryInstall": "ลองติดตั้งอีกครั้ง"
+ }
+ }
+ },
+ "search": {
+ "noMatchingSuggestions": "ไม่มีคำแนะนำที่ตรงกัน",
+ "searching": "กำลังค้นหา...",
+ "searchingFiles": "กำลังค้นหาไฟล์...",
+ "findInConversation": "ค้นหาในบทสนทนา...",
+ "resultCount": "{{current}} จาก {{total}}",
+ "resultCountCapped": "{{current}} จาก {{total}}+",
+ "noResults": "ไม่มีผลลัพธ์",
+ "previousResultShortcut": "ผลลัพธ์ก่อนหน้า (Shift+Enter)",
+ "nextResultShortcut": "ผลลัพธ์ถัดไป (Enter)",
+ "closeShortcut": "ปิด (Esc)",
+ "nothingFound": "ไม่พบสิ่งใด",
+ "placeholder": "ค้นหา..."
+ },
+ "schedules": {
+ "actions": {
+ "addSchedule": "เพิ่มกำหนดการ",
+ "clearFilters": "ล้างตัวกรอง",
+ "createSchedule": "สร้างกำหนดการ",
+ "delete": "ลบ",
+ "edit": "แก้ไข",
+ "pause": "หยุดชั่วคราว",
+ "resume": "ดำเนินการต่อ",
+ "runNow": "รันเลย"
+ },
+ "empty": {
+ "description": "สร้างกำหนดการในทีมใดก็ได้เพื่อรันงาน Claude แบบอัตโนมัติด้วยนิพจน์ cron กำหนดการจากทุกทีมจะปรากฏที่นี่",
+ "noMatches": "ไม่มีกำหนดการที่ตรงกับตัวกรองปัจจุบัน",
+ "title": "ไม่มีงานที่ตั้งกำหนดการไว้"
+ },
+ "filters": {
+ "allTeams": "ทุกทีม"
+ },
+ "item": {
+ "loadingRunHistory": "กำลังโหลดประวัติการรัน...",
+ "nextRun": "ถัดไป: {{value}}",
+ "noRunsYet": "ยังไม่มีการรัน"
+ },
+ "loading": "กำลังโหลดกำหนดการ...",
+ "searchPlaceholder": "ค้นหากำหนดการ...",
+ "status": {
+ "active": "ใช้งานอยู่",
+ "all": "ทั้งหมด",
+ "disabled": "ปิดใช้งาน",
+ "paused": "หยุดชั่วคราว"
+ },
+ "title": "กำหนดการ"
+ },
+ "sessions": {
+ "actions": {
+ "hide": "ซ่อน",
+ "pin": "ปักหมุด",
+ "unhide": "ยกเลิกการซ่อน"
+ },
+ "empty": {
+ "noMatchingSessions": "ไม่มีเซสชันที่ตรงกัน",
+ "noMatchingSessionsDescription": "โปรเจกต์นี้ยังไม่มีเซสชันที่ตรงกัน",
+ "noMatchingSessionsFiltered": "ลองคำค้นหาอื่นหรือรีเซ็ตตัวกรองผู้ให้บริการ",
+ "noSessions": "ไม่พบเซสชัน",
+ "noSessionsDescription": "โปรเจกต์นี้ยังไม่มีเซสชัน",
+ "selectProject": "เลือกโปรเจกต์เพื่อดูเซสชัน"
+ },
+ "errors": {
+ "loading": "เกิดข้อผิดพลาดในการโหลดเซสชัน"
+ },
+ "loadedMatchingMore": "โหลดเซสชันที่ตรงกันแล้ว {{count}} รายการ - เลื่อนลงเพื่อโหลดเพิ่มเติม",
+ "loadingMore": "กำลังโหลดเซสชันเพิ่มเติม...",
+ "pinned": "ปักหมุดแล้ว",
+ "scrollToLoadMore": "เลื่อนเพื่อโหลดเพิ่มเติม",
+ "search": {
+ "clear": "ล้างการค้นหาเซสชัน",
+ "placeholder": "ค้นหาเซสชัน..."
+ },
+ "selection": {
+ "cancel": "ยกเลิกการเลือก",
+ "exitMode": "ออกจากโหมดเลือก",
+ "hideSelected": "ซ่อนเซสชันที่เลือก",
+ "pinSelected": "ปักหมุดเซสชันที่เลือก",
+ "selectSessions": "เลือกเซสชัน",
+ "selected": "เลือกแล้ว {{count}} รายการ",
+ "unhideSelected": "ยกเลิกการซ่อนเซสชันที่เลือก",
+ "selected_few": "เลือกแล้ว {{count}} รายการ",
+ "selected_many": "เลือกแล้ว {{count}} รายการ",
+ "selected_one": "เลือกแล้ว {{count}} รายการ",
+ "selected_other": "เลือกแล้ว {{count}} รายการ"
+ },
+ "sort": {
+ "byContext": "ตามคอนเท็กซ์",
+ "byContextTooltip": "เรียงตามการใช้คอนเท็กซ์",
+ "byRecentTooltip": "เรียงตามล่าสุด",
+ "contextLoadedOnly": "การเรียงตามคอนเท็กซ์จัดอันดับเฉพาะเซสชันที่โหลดแล้วเท่านั้น"
+ },
+ "title": "เซสชัน",
+ "visibility": {
+ "hideHidden": "ซ่อนเซสชันที่ซ่อนอยู่",
+ "showHidden": "แสดงเซสชันที่ซ่อนอยู่"
+ },
+ "worktree": {
+ "switch": "สลับ Worktree"
+ },
+ "loadedMatchingMore_few": "โหลดเซสชันที่ตรงกันแล้ว {{count}} รายการ - เลื่อนลงเพื่อโหลดเพิ่มเติม",
+ "loadedMatchingMore_many": "โหลดเซสชันที่ตรงกันแล้ว {{count}} รายการ - เลื่อนลงเพื่อโหลดเพิ่มเติม",
+ "loadedMatchingMore_one": "โหลดเซสชันที่ตรงกันแล้ว {{count}} รายการ - เลื่อนลงเพื่อโหลดเพิ่มเติม",
+ "loadedMatchingMore_other": "โหลดเซสชันที่ตรงกันแล้ว {{count}} รายการ - เลื่อนลงเพื่อโหลดเพิ่มเติม",
+ "failedToLoad": "โหลดเซสชันไม่สำเร็จ",
+ "loading": "กำลังโหลดเซสชัน...",
+ "filter": {
+ "title": "กรองเซสชัน"
+ },
+ "count": "{{count}} เซสชัน",
+ "count_one": "{{count}} เซสชัน",
+ "count_other": "{{count}} เซสชัน",
+ "count_few": "{{count}} เซสชัน",
+ "count_many": "{{count}} เซสชัน",
+ "inProgress": "เซสชันกำลังดำเนินการ..."
+ },
+ "states": {
+ "loading": "กำลังโหลด...",
+ "offline": "ออฟไลน์",
+ "online": "ออนไลน์",
+ "unknown": "ไม่ทราบ",
+ "error": "ข้อผิดพลาด"
+ },
+ "markdown": {
+ "imageFallback": "[ภาพ: {{label}}]",
+ "largeContentNotice": "เนื้อหามีขนาดใหญ่มาก ({{count}} อักขระ) กำลังแสดงตัวอย่างดิบเพื่อให้ UI ตอบสนองได้ดี",
+ "largeContentTitle": "แสดงเนื้อหาขนาดใหญ่แบบดิบเพื่อป้องกัน UI ค้าง",
+ "raw": "ดิบ",
+ "rawPreview": "ตัวอย่างดิบ",
+ "renderMarkdown": "เรนเดอร์ markdown",
+ "showAll": "แสดงทั้งหมด",
+ "showMore": "ดูเพิ่มเติม",
+ "showRaw": "แสดงแบบดิบ",
+ "showingChars": "กำลังแสดง {{shown}} / {{total}} อักขระ",
+ "largeContentNotice_few": "เนื้อหามีขนาดใหญ่มาก ({{count}} อักขระ) กำลังแสดงตัวอย่างดิบเพื่อให้ UI ตอบสนองได้ดี",
+ "largeContentNotice_many": "เนื้อหามีขนาดใหญ่มาก ({{count}} อักขระ) กำลังแสดงตัวอย่างดิบเพื่อให้ UI ตอบสนองได้ดี",
+ "largeContentNotice_one": "เนื้อหามีขนาดใหญ่มาก ({{count}} อักขระ) กำลังแสดงตัวอย่างดิบเพื่อให้ UI ตอบสนองได้ดี",
+ "largeContentNotice_other": "เนื้อหามีขนาดใหญ่มาก ({{count}} อักขระ) กำลังแสดงตัวอย่างดิบเพื่อให้ UI ตอบสนองได้ดี"
+ },
+ "terminal": {
+ "checkOutputForDetails": "ตรวจสอบผลลัพธ์เทอร์มินัลด้านบนสำหรับรายละเอียด",
+ "closingInSeconds": "จะปิดใน {{count}} วินาที...",
+ "closingInSeconds_few": "จะปิดใน {{count}} วินาที...",
+ "closingInSeconds_many": "จะปิดใน {{count}} วินาที...",
+ "closingInSeconds_one": "จะปิดใน {{count}} วินาที...",
+ "closingInSeconds_other": "จะปิดใน {{count}} วินาที...",
+ "completedSuccessfully": "เสร็จสมบูรณ์",
+ "exitCode": "(โค้ดออก {{code}})",
+ "processFailed": "กระบวนการล้มเหลว",
+ "title": "เทอร์มินัล"
+ },
+ "tokens": {
+ "accumulatedWithoutDuplication": "สะสมตลอดทั้งเซสชันโดยไม่ซ้ำซ้อน",
+ "cacheRead": "อ่านแคช",
+ "cacheWrite": "เขียนแคช",
+ "costUsd": "ต้นทุน (USD)",
+ "inputTokens": "โทเค็นอินพุต",
+ "model": "โมเดล",
+ "outputTokens": "โทเค็นเอาต์พุต",
+ "phase": "เฟส {{phase}}/{{total}}",
+ "promptInputShare": "{{percent}}% ของอินพุตพรอมต์",
+ "taskCoordination": "การประสานงาน",
+ "thinkingText": "การคิด + ข้อความ",
+ "toolOutputs": "ผลลัพธ์เครื่องมือ",
+ "total": "รวม",
+ "userMessages": "ข้อความผู้ใช้",
+ "visibleContext": "คอนเท็กซ์ที่มองเห็น",
+ "includesClaudeMd": "รวม CLAUDE.md ×{{count}}",
+ "claudeMd": "CLAUDE.md",
+ "mentionedFiles": "@files",
+ "percentValue": "({{percent}}%)",
+ "approxTokens": "~{{tokens}} โทเค็น",
+ "approxTokensParenthesized": "(~{{tokens}})"
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "คัดลอกทีม",
+ "createTeam": "สร้างทีม",
+ "deleteForever": "ลบถาวร",
+ "deletePermanently": "ลบอย่างถาวร",
+ "deleteTeam": "ลบทีม",
+ "launching": "กำลังเริ่ม...",
+ "launchTeam": "เริ่มทีม",
+ "relaunchTeam": "เริ่มทีมใหม่",
+ "restore": "กู้คืน",
+ "restoreTeam": "กู้คืนทีม",
+ "retry": "ลองอีกครั้ง",
+ "stopTeam": "หยุดทีม",
+ "stopping": "กำลังหยุด..."
+ },
+ "status": {
+ "active": "ใช้งานอยู่",
+ "deleted": "ลบแล้ว",
+ "launching": "กำลังเริ่ม...",
+ "offline": "ออฟไลน์",
+ "partialFailure": "การเริ่มล้มเหลวกลางคัน",
+ "partialPending": "รอการบูตสแตรป",
+ "partialSkipped": "การเริ่มข้ามสมาชิก",
+ "running": "กำลังทำงาน"
+ },
+ "partial": {
+ "pending": "การเริ่มครั้งล่าสุดยังกำลังปรับให้สอดคล้องกัน",
+ "skipped": "การเริ่มครั้งล่าสุดมีเพื่อนร่วมทีมที่ถูกข้าม",
+ "skippedWithCount": "การเริ่มครั้งล่าสุดข้ามเพื่อนร่วมทีม {{count}}/{{expected}} คน",
+ "skippedWithCount_few": "การเริ่มครั้งล่าสุดข้ามเพื่อนร่วมทีม {{count}}/{{expected}} คน",
+ "skippedWithCount_many": "การเริ่มครั้งล่าสุดข้ามเพื่อนร่วมทีม {{count}}/{{expected}} คน",
+ "skippedWithCount_one": "การเริ่มครั้งล่าสุดข้ามเพื่อนร่วมทีม {{count}}/{{expected}} คน",
+ "skippedWithCount_other": "การเริ่มครั้งล่าสุดข้ามเพื่อนร่วมทีม {{count}}/{{expected}} คน",
+ "stopped": "การเริ่มครั้งล่าสุดหยุดก่อนที่เพื่อนร่วมทีมทุกคนจะเข้าร่วม",
+ "stoppedWithCount": "การเริ่มครั้งล่าสุดหยุดก่อนที่เพื่อนร่วมทีม {{count}}/{{expected}} คนจะเข้าร่วม",
+ "stoppedWithCount_few": "การเริ่มครั้งล่าสุดหยุดก่อนที่เพื่อนร่วมทีม {{count}}/{{expected}} คนจะเข้าร่วม",
+ "stoppedWithCount_many": "การเริ่มครั้งล่าสุดหยุดก่อนที่เพื่อนร่วมทีม {{count}}/{{expected}} คนจะเข้าร่วม",
+ "stoppedWithCount_one": "การเริ่มครั้งล่าสุดหยุดก่อนที่เพื่อนร่วมทีม {{count}}/{{expected}} คนจะเข้าร่วม",
+ "stoppedWithCount_other": "การเริ่มครั้งล่าสุดหยุดก่อนที่เพื่อนร่วมทีม {{count}}/{{expected}} คนจะเข้าร่วม"
+ },
+ "noDescription": "ไม่มีคำอธิบาย",
+ "solo": "เดี่ยว",
+ "membersCount": "สมาชิก: {{count}}",
+ "membersCount_few": "สมาชิก: {{count}}",
+ "membersCount_many": "สมาชิก: {{count}}",
+ "membersCount_one": "สมาชิก: {{count}}",
+ "membersCount_other": "สมาชิก: {{count}}",
+ "all": "ทั้งหมด",
+ "moreCount": "+อีก {{count}}",
+ "moreCount_one": "+อีก {{count}}",
+ "moreCount_other": "+อีก {{count}}",
+ "moreCount_few": "+อีก {{count}}",
+ "moreCount_many": "+อีก {{count}}"
+ },
+ "runtimeProvider": {
+ "defaults": {
+ "scopeDescriptionAllProjects": "ค่าเริ่มต้นสำหรับทุกโปรเจกต์ที่ไม่มีการแทนที่ OpenCode ของตัวเอง",
+ "scopeDescriptionProject": "แทนที่เฉพาะโปรเจกต์ที่เลือก ทีมที่กำลังทำงานจะไม่ถูกเปลี่ยน",
+ "setAllProjectsDefault": "ตั้งค่าเริ่มต้นทุกโปรเจกต์",
+ "setProjectDefault": "ตั้งค่าเริ่มต้นโปรเจกต์",
+ "validationContext": "บริบทการตรวจสอบ",
+ "projectOverrideContext": "บริบทการแทนที่โปรเจกต์",
+ "selectProjectHint": "เลือกโปรเจกต์ก่อนทดสอบโมเดลในเครื่องหรือบันทึกค่าเริ่มต้น",
+ "allProjectsHint": "การทดสอบใช้ {{project}} ค่าเริ่มต้นจะใช้เว้นแต่โปรเจกต์มีการแทนที่",
+ "projectHint": "การบันทึกจะแทนที่เฉพาะ {{project}} เท่านั้น"
+ }
+ },
+ "sessionContext": {
+ "header": {
+ "title": "คอนเท็กซ์",
+ "closePanel": "ปิดแผง",
+ "phase": "เฟส:",
+ "current": "ปัจจุบัน",
+ "view": "มุมมอง:",
+ "category": "หมวดหมู่",
+ "bySize": "ตามขนาด"
+ },
+ "metrics": {
+ "unavailable": "ไม่พร้อมใช้งาน",
+ "contextUsed": "คอนเท็กซ์ที่ใช้",
+ "promptInput": "อินพุตพรอมต์",
+ "visibleContext": "คอนเท็กซ์ที่มองเห็น",
+ "ofContext": "ของคอนเท็กซ์",
+ "ofPrompt": "ของพรอมต์",
+ "codexTelemetryUnavailable": "เทเลเมทรีของรันไทม์ปัจจุบันยังไม่เปิดเผยการใช้งานฝั่งพรอมต์ของ Codex ดังนั้นอินพุตพรอมต์และคอนเท็กซ์ที่ใช้จึงยังไม่พร้อมใช้งานแทนที่จะแสดงค่าศูนย์ปลอม",
+ "sessionCost": "ต้นทุนเซสชัน:",
+ "parentPlus": "หลัก +",
+ "subagents": "เอเจนต์ย่อย",
+ "details": "รายละเอียด"
+ },
+ "help": {
+ "contextUsed": {
+ "title": "คอนเท็กซ์ที่ใช้",
+ "description": "อินพุตพรอมต์บวกกับโทเค็นเอาต์พุตที่กำลังครอบครองหน้าต่างคอนเท็กซ์ของโมเดลอยู่"
+ },
+ "promptInput": {
+ "title": "อินพุตพรอมต์",
+ "description": "โทเค็นที่ส่งไปยังโมเดลก่อนการสร้าง สำหรับ Claude จะรวม `input_tokens + cache_creation_input_tokens + cache_read_input_tokens`"
+ },
+ "visibleContext": {
+ "title": "คอนเท็กซ์ที่มองเห็น",
+ "description": "ส่วนย่อยที่ตรวจสอบได้ของอินพุตพรอมต์: ไฟล์, CLAUDE.md, ผลลัพธ์เครื่องมือ, ข้อความผู้ใช้ และการแทรกอื่น ๆ ที่คุณปรับให้เหมาะสมได้โดยตรง"
+ },
+ "availability": {
+ "title": "ความพร้อมใช้งาน",
+ "description": "หากรันไทม์ของผู้ให้บริการยังไม่เปิดเผยการใช้งานฝั่งพรอมต์ แผงจะแสดงเมตริกเป็นไม่พร้อมใช้งานแทนที่จะแกล้งทำเป็นว่าเป็นศูนย์"
+ }
+ },
+ "items": {
+ "turn": "@เทิร์น {{turn}}",
+ "tokensApprox": "~{{tokens}} โทเค็น",
+ "toolsCount": "{{count}} เครื่องมือ",
+ "toolsCount_one": "{{count}} เครื่องมือ",
+ "toolsCount_other": "{{count}} เครื่องมือ",
+ "toolsCount_few": "{{count}} เครื่องมือ",
+ "toolsCount_many": "{{count}} เครื่องมือ",
+ "itemsCount": "{{count}} รายการ",
+ "itemsCount_one": "{{count}} รายการ",
+ "itemsCount_other": "{{count}} รายการ",
+ "itemsCount_few": "{{count}} รายการ",
+ "itemsCount_many": "{{count}} รายการ",
+ "missing": "ขาดหาย",
+ "thinking": "การคิด",
+ "text": "ข้อความ"
+ },
+ "empty": "ไม่พบการแทรกคอนเท็กซ์ในเซสชันนี้",
+ "view": {
+ "grouped": "จัดกลุ่ม",
+ "flat": "แบบเรียบ"
+ },
+ "claudeMdFiles": "ไฟล์ CLAUDE.md",
+ "mentionedFiles": "ไฟล์ที่กล่าวถึง"
+ },
+ "chat": {
+ "subagent": {
+ "fallbackName": "เอเจนต์ย่อย",
+ "shutdownConfirmed": "ยืนยันการปิดแล้ว",
+ "summary": {
+ "tools": "{{count}} เครื่องมือ",
+ "tools_one": "{{count}} เครื่องมือ",
+ "tools_other": "{{count}} เครื่องมือ",
+ "tools_few": "{{count}} เครื่องมือ",
+ "tools_many": "{{count}} เครื่องมือ"
+ },
+ "meta": {
+ "type": "ประเภท",
+ "duration": "ระยะเวลา",
+ "model": "โมเดล",
+ "id": "ID"
+ },
+ "metrics": {
+ "contextWindow": "หน้าต่างคอนเท็กซ์",
+ "contextUsage": "การใช้คอนเท็กซ์",
+ "mainContext": "คอนเท็กซ์หลัก",
+ "totalOutput": "เอาต์พุตทั้งหมด",
+ "turns": "({{count}} เทิร์น)",
+ "turns_one": "({{count}} เทิร์น)",
+ "turns_other": "({{count}} เทิร์น)",
+ "subagentContext": "คอนเท็กซ์เอเจนต์ย่อย",
+ "phase": "เฟส {{phase}}",
+ "turns_few": "({{count}} เทิร์น)",
+ "turns_many": "({{count}} เทิร์น)"
+ },
+ "trace": {
+ "title": "การติดตามการทำงาน"
+ }
+ },
+ "user": {
+ "you": "คุณ",
+ "showMore": "ดูเพิ่มเติม",
+ "showLess": "ดูน้อยลง",
+ "backgroundTask": "งานเบื้องหลัง",
+ "exitCode": "ออก {{code}}",
+ "imagesAttached": "แนบภาพ {{count}} รูป",
+ "imagesAttached_one": "แนบภาพ {{count}} รูป",
+ "imagesAttached_few": "แนบภาพ {{count}} รูป",
+ "imagesAttached_many": "แนบภาพ {{count}} รูป",
+ "imagesAttached_other": "แนบภาพ {{count}} รูป"
+ },
+ "compact": {
+ "toggle": "สลับเนื้อหาที่บีบอัด",
+ "contextCompacted": "บีบอัดคอนเท็กซ์แล้ว",
+ "freedTokens": "(คืน {{tokens}})",
+ "phase": "เฟส {{phase}}",
+ "conversationCompacted": "บีบอัดบทสนทนาแล้ว",
+ "summary": "ข้อความก่อนหน้าถูกสรุปเพื่อประหยัดคอนเท็กซ์ ประวัติบทสนทนาฉบับเต็มยังคงอยู่ในไฟล์เซสชัน",
+ "compacted": "บีบอัดแล้ว"
+ },
+ "executionTrace": {
+ "empty": "ไม่มีรายการการทำงาน",
+ "nested": "ซ้อน: {{name}}",
+ "input": "อินพุต"
+ },
+ "items": {
+ "empty": "ไม่มีรายการให้แสดง"
+ },
+ "tools": {
+ "teammateSpawned": "สร้างเพื่อนร่วมทีมแล้ว",
+ "shutdownRequested": "ร้องขอการปิด ->",
+ "noResultReceived": "ไม่ได้รับผลลัพธ์",
+ "duration": "ระยะเวลา: {{duration}}",
+ "result": "ผลลัพธ์",
+ "write": {
+ "createdFile": "สร้างไฟล์แล้ว",
+ "wroteToFile": "เขียนลงไฟล์แล้ว"
+ },
+ "skill": {
+ "instructions": "คำแนะนำสกิล",
+ "unknown": "สกิลที่ไม่ทราบ"
+ }
+ },
+ "lastOutput": {
+ "requestInterrupted": "คำขอถูกขัดจังหวะโดยผู้ใช้",
+ "planReadyForApproval": "แผนพร้อมสำหรับการอนุมัติ"
+ },
+ "empty": {
+ "icon": "💬",
+ "title": "ไม่มีประวัติบทสนทนา",
+ "description": "เซสชันนี้ยังไม่มีข้อความใด ๆ"
+ },
+ "context": {
+ "remainingPercent": "(เหลือ {{percent}}%)",
+ "count": "คอนเท็กซ์ ({{count}})",
+ "count_one": "คอนเท็กซ์ ({{count}})",
+ "count_other": "คอนเท็กซ์ ({{count}})",
+ "count_few": "คอนเท็กซ์ ({{count}})",
+ "count_many": "คอนเท็กซ์ ({{count}})"
+ },
+ "scrollToBottom": "เลื่อนลงล่างสุด",
+ "bottom": "ล่างสุด",
+ "teammateMessage": {
+ "message": "ข้อความ",
+ "resent": "ส่งซ้ำแล้ว",
+ "fallback": "ข้อความเพื่อนร่วมทีม"
+ },
+ "system": {
+ "label": "ระบบ"
+ }
+ },
+ "tmuxInstaller": {
+ "summaryTitle": "ยังไม่ได้ติดตั้ง tmux",
+ "detectedOs": "ระบบปฏิบัติการที่ตรวจพบ: {{os}}",
+ "runtimePath": "เส้นทางรันไทม์: {{path}}",
+ "phase": "เฟส: {{phase}}",
+ "actions": {
+ "cancel": "ยกเลิก",
+ "manualGuide": "คู่มือด้วยตนเอง",
+ "hideSetupSteps": "ซ่อนขั้นตอนการตั้งค่า",
+ "showSetupSteps": "แสดงขั้นตอนการตั้งค่า ({{count}})",
+ "showSetupSteps_one": "แสดงขั้นตอนการตั้งค่า ({{count}})",
+ "showSetupSteps_other": "แสดงขั้นตอนการตั้งค่า ({{count}})",
+ "recheck": "ตรวจสอบใหม่",
+ "showSetupSteps_few": "แสดงขั้นตอนการตั้งค่า ({{count}})",
+ "showSetupSteps_many": "แสดงขั้นตอนการตั้งค่า ({{count}})"
+ },
+ "installerProgress": "ความคืบหน้าตัวติดตั้ง",
+ "input": {
+ "placeholder": "ส่งอินพุตไปยังตัวติดตั้ง",
+ "send": "ส่งอินพุต",
+ "passwordNotice": "อินพุตรหัสผ่านจะถูกส่งโดยตรงไปยังเทอร์มินัลของตัวติดตั้งและจะไม่ถูกเพิ่มลงในผลลัพธ์บันทึก"
+ },
+ "details": {
+ "show": "แสดงรายละเอียด",
+ "hide": "ซ่อนรายละเอียด"
+ }
+ },
+ "commandPalette": {
+ "noRecentActivity": "ไม่มีกิจกรรมล่าสุด",
+ "sessionsCount": "{{count}} เซสชัน",
+ "sessionsCount_one": "{{count}} เซสชัน",
+ "sessionsCount_other": "{{count}} เซสชัน",
+ "mode": {
+ "searchProjects": "ค้นหาโปรเจกต์",
+ "searchAcrossProjects": "ค้นหาในทุกโปรเจกต์",
+ "searchInProject": "ค้นหาในโปรเจกต์"
+ },
+ "currentProject": "โปรเจกต์ปัจจุบัน",
+ "global": "ทั่วทุกโปรเจกต์",
+ "placeholders": {
+ "projects": "ค้นหาโปรเจกต์...",
+ "conversations": "ค้นหาบทสนทนา..."
+ },
+ "empty": {
+ "noProjectsForQuery": "ไม่พบโปรเจกต์สำหรับ \"{{query}}\"",
+ "noProjects": "ไม่พบโปรเจกต์",
+ "minChars": "พิมพ์อย่างน้อย 2 อักขระเพื่อค้นหา",
+ "noFastResults": "ไม่มีผลลัพธ์ด่วนในเซสชันล่าสุดสำหรับ \"{{query}}\"",
+ "noResults": "ไม่พบผลลัพธ์สำหรับ \"{{query}}\""
+ },
+ "footer": {
+ "projectsCount": "{{count}} โปรเจกต์",
+ "projectsCount_one": "{{count}} โปรเจกต์",
+ "projectsCount_other": "{{count}} โปรเจกต์",
+ "results": "{{count}} {{speed}}ผลลัพธ์",
+ "results_one": "{{count}} {{speed}}ผลลัพธ์",
+ "results_other": "{{count}} {{speed}}ผลลัพธ์",
+ "resultsAcrossProjects": "{{count}} {{speed}}ผลลัพธ์ในทุกโปรเจกต์",
+ "resultsAcrossProjects_one": "{{count}} {{speed}}ผลลัพธ์ในทุกโปรเจกต์",
+ "resultsAcrossProjects_other": "{{count}} {{speed}}ผลลัพธ์ในทุกโปรเจกต์",
+ "fastPrefix": "ด่วน ",
+ "typeToSearch": "พิมพ์เพื่อค้นหา",
+ "navigate": "นำทาง",
+ "select": "เลือก",
+ "open": "เปิด",
+ "global": "ทั่วทุกโปรเจกต์",
+ "close": "ปิด",
+ "results_few": "{{count}} {{speed}}ผลลัพธ์",
+ "results_many": "{{count}} {{speed}}ผลลัพธ์",
+ "resultsAcrossProjects_few": "{{count}} {{speed}}ผลลัพธ์ในทุกโปรเจกต์",
+ "resultsAcrossProjects_many": "{{count}} {{speed}}ผลลัพธ์ในทุกโปรเจกต์",
+ "projectsCount_few": "{{count}} โปรเจกต์",
+ "projectsCount_many": "{{count}} โปรเจกต์",
+ "upDownKey": "↑↓",
+ "escapeKey": "esc"
+ },
+ "sessionsCount_few": "{{count}} เซสชัน",
+ "sessionsCount_many": "{{count}} เซสชัน"
+ },
+ "tasksPanel": {
+ "title": "งาน",
+ "searchPlaceholder": "ค้นหางาน...",
+ "pinned": "ปักหมุดแล้ว",
+ "groupByLabel": "จัดกลุ่มตาม:",
+ "groupByAria": "จัดกลุ่มตาม",
+ "groupModes": {
+ "none": "ไม่มี",
+ "project": "โปรเจกต์",
+ "time": "เวลา"
+ },
+ "showArchived": "แสดงรายการที่เก็บถาวร",
+ "hideArchived": "ซ่อนรายการที่เก็บถาวร",
+ "empty": {
+ "noMatchingTasks": "ไม่มีงานที่ตรงกัน",
+ "noTasks": "ไม่พบงาน"
+ },
+ "teamLabel": "ทีม: {{team}}",
+ "showMore": "ดูเพิ่มเติม",
+ "showLess": "ดูน้อยลง",
+ "deleteConfirm": {
+ "title": "ลบงาน",
+ "message": "ย้ายงาน #{{taskId}} ไปยังถังขยะหรือไม่?",
+ "confirmLabel": "ลบ",
+ "cancelLabel": "ยกเลิก"
+ },
+ "deleteFailed": {
+ "title": "ลบงานไม่สำเร็จ",
+ "fallbackMessage": "เกิดข้อผิดพลาดที่ไม่คาดคิด",
+ "confirmLabel": "ตกลง"
+ },
+ "sort": {
+ "byTime": "ตามเวลา",
+ "byUnread": "ตามที่ยังไม่อ่าน",
+ "byProject": "ตามโปรเจกต์",
+ "byTeam": "ตามทีม"
+ }
+ },
+ "toolViewer": {
+ "input": "อินพุต",
+ "replaceAll": "(แทนที่ทั้งหมด)",
+ "noInputRecorded": "ไม่มีการบันทึกอินพุตสำหรับการเรียกเครื่องมือนี้",
+ "agent": {
+ "action": "การดำเนินการ",
+ "teammate": "เพื่อนร่วมทีม",
+ "team": "ทีม",
+ "runtime": "รันไทม์",
+ "type": "ประเภท",
+ "startupInstructionsHidden": "คำแนะนำตอนเริ่มต้นถูกซ่อนใน UI"
+ }
+ },
+ "taskContextMenu": {
+ "unpin": "ยกเลิกการปักหมุด",
+ "pin": "ปักหมุด",
+ "rename": "เปลี่ยนชื่อ",
+ "markUnread": "ทำเครื่องหมายว่ายังไม่อ่าน",
+ "unarchive": "ยกเลิกการเก็บถาวร",
+ "archive": "เก็บถาวร",
+ "deleteTask": "ลบงาน"
+ },
+ "updateDialog": {
+ "closeDialog": "ปิดกล่องโต้ตอบ",
+ "updateAvailable": "มีการอัปเดต",
+ "updateReady": "การอัปเดตพร้อมแล้ว",
+ "noReleaseNotes": "ไม่มีบันทึกการเผยแพร่",
+ "viewOnGitHub": "ดูบน GitHub",
+ "later": "ภายหลัง",
+ "restartNow": "รีสตาร์ทเลย",
+ "download": "ดาวน์โหลด"
+ },
+ "errorBoundary": {
+ "title": "เกิดข้อผิดพลาดบางอย่าง",
+ "description": "เกิดข้อผิดพลาดที่ไม่คาดคิดในแอปพลิเคชัน คุณสามารถลองโหลดหน้าใหม่หรือรีเซ็ตสถานะข้อผิดพลาดได้",
+ "componentStack": "Component Stack",
+ "tryAgain": "ลองอีกครั้ง",
+ "copied": "คัดลอกแล้ว",
+ "copyErrorDetails": "คัดลอกรายละเอียดข้อผิดพลาด",
+ "reportBugOnGitHub": "รายงานบั๊กบน GitHub",
+ "reloadApp": "โหลดแอปใหม่",
+ "diagnosticsNotice": "รายงานบั๊กบน GitHub และการวินิจฉัยที่คัดลอกจะรวมข้อความข้อผิดพลาด, สแต็กเทรซ, เวอร์ชันแอป, แท็บที่ใช้งานอยู่, ทีมที่เลือก, บริบทงาน และรายละเอียดสภาพแวดล้อม"
+ },
+ "runtimeBackendSelector": {
+ "label": "แบ็กเอนด์รันไทม์",
+ "resolved": "ที่กำหนด: {{backend}}",
+ "current": "ปัจจุบัน",
+ "recommended": "แนะนำ",
+ "unavailable": "ไม่พร้อมใช้งาน",
+ "cannotSelectYet": "ยังไม่สามารถเลือกแบ็กเอนด์นี้ได้",
+ "auto": "อัตโนมัติ",
+ "autoCurrently": "อัตโนมัติ (ปัจจุบัน: {{backend}})",
+ "audience": {
+ "internal": "ภายใน"
+ },
+ "states": {
+ "locked": "ล็อก",
+ "disabled": "ปิดใช้งาน",
+ "authRequired": "ต้องยืนยันตัวตน",
+ "runtimeMissing": "ไม่มีรันไทม์",
+ "degraded": "ประสิทธิภาพลดลง",
+ "unavailable": "ไม่พร้อมใช้งาน"
+ }
+ },
+ "providerModelBadges": {
+ "checking": "กำลังตรวจสอบ",
+ "unavailable": "ไม่พร้อมใช้งาน",
+ "checkFailed": "ตรวจสอบล้มเหลว",
+ "free": "ฟรี",
+ "freeTooltip": "รายงานโดยเมตาดาตา OpenCode ความพร้อมใช้งานและขีดจำกัดอาจเปลี่ยนแปลงได้"
+ },
+ "taskFilters": {
+ "status": "สถานะ",
+ "clearAll": "ล้างทั้งหมด",
+ "selectAll": "เลือกทั้งหมด",
+ "team": "ทีม",
+ "allTeams": "ทุกทีม",
+ "searchTeams": "ค้นหาทีม...",
+ "noTeamsFound": "ไม่พบทีม",
+ "project": "โปรเจกต์",
+ "allProjects": "ทุกโปรเจกต์",
+ "searchProjects": "ค้นหาโปรเจกต์...",
+ "noProjects": "ไม่มีโปรเจกต์",
+ "comments": "ความคิดเห็น",
+ "apply": "ใช้งาน",
+ "read": {
+ "all": "ทั้งหมด",
+ "unread": "ยังไม่อ่าน",
+ "read": "อ่านแล้ว"
+ },
+ "statusOptions": {
+ "todo": "ต้องทำ",
+ "inProgress": "กำลังดำเนินการ",
+ "needsFix": "ต้องแก้ไข",
+ "done": "เสร็จสิ้น",
+ "review": "รีวิว",
+ "approved": "อนุมัติแล้ว"
+ }
+ },
+ "sessionItem": {
+ "totalContext": "คอนเท็กซ์ทั้งหมด: {{tokens}} โทเค็น",
+ "context": "คอนเท็กซ์: {{tokens}}",
+ "phase": "เฟส {{phase}}:",
+ "compactedTo": "(บีบอัดเหลือ {{tokens}})"
+ },
+ "notifications": {
+ "row": {
+ "team": "ทีม",
+ "subagent": "เอเจนต์ย่อย",
+ "markAsRead": "ทำเครื่องหมายว่าอ่านแล้ว",
+ "delete": "ลบ",
+ "viewInSession": "ดูในเซสชัน"
+ },
+ "title": "การแจ้งเตือน",
+ "loading": "กำลังโหลดการแจ้งเตือน...",
+ "actions": {
+ "markFilteredAsRead": "ทำเครื่องหมายที่กรองแล้วว่าอ่านแล้ว",
+ "markAllAsRead": "ทำเครื่องหมายทั้งหมดว่าอ่านแล้ว",
+ "markFilteredRead": "ทำเครื่องหมายที่กรองว่าอ่านแล้ว",
+ "markAllRead": "ทำเครื่องหมายทั้งหมดว่าอ่านแล้ว",
+ "clearFilteredNotifications": "ล้างการแจ้งเตือนที่กรองแล้ว",
+ "clearAllNotifications": "ล้างการแจ้งเตือนทั้งหมด",
+ "clickToConfirm": "คลิกเพื่อยืนยัน",
+ "clearFiltered": "ล้างที่กรองแล้ว",
+ "clearAll": "ล้างทั้งหมด"
+ },
+ "counts": {
+ "unreadInFilter": "ยังไม่อ่าน {{count}} รายการในตัวกรอง",
+ "unreadInFilter_one": "ยังไม่อ่าน {{count}} รายการในตัวกรอง",
+ "unreadInFilter_few": "ยังไม่อ่าน {{count}} รายการในตัวกรอง",
+ "unreadInFilter_many": "ยังไม่อ่าน {{count}} รายการในตัวกรอง",
+ "unreadInFilter_other": "ยังไม่อ่าน {{count}} รายการในตัวกรอง",
+ "inFilter": "{{count}} รายการในตัวกรอง",
+ "inFilter_one": "{{count}} รายการในตัวกรอง",
+ "inFilter_few": "{{count}} รายการในตัวกรอง",
+ "inFilter_many": "{{count}} รายการในตัวกรอง",
+ "inFilter_other": "{{count}} รายการในตัวกรอง",
+ "unread": "ยังไม่อ่าน {{count}} รายการ",
+ "unread_one": "ยังไม่อ่าน {{count}} รายการ",
+ "unread_few": "ยังไม่อ่าน {{count}} รายการ",
+ "unread_many": "ยังไม่อ่าน {{count}} รายการ",
+ "unread_other": "ยังไม่อ่าน {{count}} รายการ",
+ "total": "{{count}} รายการทั้งหมด",
+ "total_one": "{{count}} รายการทั้งหมด",
+ "total_few": "{{count}} รายการทั้งหมด",
+ "total_many": "{{count}} รายการทั้งหมด",
+ "total_other": "{{count}} รายการทั้งหมด"
+ },
+ "filters": {
+ "other": "อื่น ๆ"
+ },
+ "empty": {
+ "noMatching": "ไม่มีการแจ้งเตือนที่ตรงกัน",
+ "noNotifications": "ไม่มีการแจ้งเตือน",
+ "tryDifferentFilter": "ลองตัวกรองอื่น",
+ "allCaughtUp": "คุณดูครบทั้งหมดแล้ว!"
+ }
+ },
+ "updates": {
+ "restartToUpdate": "รีสตาร์ทเพื่ออัปเดต",
+ "updateApp": "อัปเดตแอป",
+ "downloadedRestartTooltip": "ดาวน์โหลดการอัปเดตแล้ว รีสตาร์ทเพื่อใช้งาน",
+ "newVersionAvailable": "มีเวอร์ชันใหม่",
+ "updatingApp": "กำลังอัปเดตแอป",
+ "updateReady": "การอัปเดตพร้อมแล้ว",
+ "restartNow": "รีสตาร์ทเลย"
+ },
+ "layout": {
+ "github": "GitHub",
+ "discord": "Discord",
+ "expandSidebar": "ขยายแถบด้านข้าง",
+ "collapseSidebarShortcut": "ยุบแถบด้านข้าง ({{shortcut}})",
+ "sidebarView": "มุมมองแถบด้านข้าง",
+ "resizeSidebar": "ปรับขนาดแถบด้านข้าง",
+ "closeTab": "ปิดแท็บ",
+ "openedFromSearch": "เปิดจากการค้นหา",
+ "pinnedSession": "เซสชันที่ปักหมุด",
+ "jumpToSection": "ข้ามไปยังส่วน",
+ "newTab": "แท็บใหม่",
+ "newTabDashboard": "แท็บใหม่ (แดชบอร์ด)",
+ "refreshSession": "รีเฟรชเซสชัน",
+ "refreshSessionWithShortcut": "รีเฟรชเซสชัน ({{shortcut}})",
+ "loadingTab": "กำลังโหลดแท็บ",
+ "menu": {
+ "teams": "ทีม",
+ "settings": "การตั้งค่า",
+ "extensions": "ส่วนขยาย",
+ "search": "ค้นหา",
+ "schedules": "กำหนดการ",
+ "docs": "เอกสาร",
+ "exportMarkdown": "ส่งออกเป็น Markdown",
+ "exportJson": "ส่งออกเป็น JSON",
+ "exportPlainText": "ส่งออกเป็นข้อความธรรมดา",
+ "analyzeSession": "วิเคราะห์เซสชัน"
+ },
+ "tabMenu": {
+ "closeTabs": "ปิด {{count}} แท็บ",
+ "closeTabs_one": "ปิด {{count}} แท็บ",
+ "closeTabs_few": "ปิด {{count}} แท็บ",
+ "closeTabs_many": "ปิด {{count}} แท็บ",
+ "closeTabs_other": "ปิด {{count}} แท็บ",
+ "closeTab": "ปิดแท็บ",
+ "closeOtherTabs": "ปิดแท็บอื่น",
+ "splitRight": "แยกไปทางขวา",
+ "splitLeft": "แยกไปทางซ้าย",
+ "pinToSidebar": "ปักหมุดไปยังแถบด้านข้าง",
+ "unpinFromSidebar": "ยกเลิกการปักหมุดจากแถบด้านข้าง",
+ "hideFromSidebar": "ซ่อนจากแถบด้านข้าง",
+ "unhideFromSidebar": "ยกเลิกการซ่อนจากแถบด้านข้าง",
+ "closeAllTabs": "ปิดแท็บทั้งหมด"
+ },
+ "sections": {
+ "team": "ทีม",
+ "sessions": "เซสชัน",
+ "kanban": "Kanban",
+ "claudeLogs": "บันทึก",
+ "messages": "ข้อความ"
+ }
+ },
+ "editorFormatting": {
+ "bold": "ตัวหนา",
+ "italic": "ตัวเอียง",
+ "strike": "ขีดฆ่า",
+ "code": "โค้ด"
+ },
+ "diff": {
+ "changed": "เปลี่ยนแปลง",
+ "noChangesDetected": "ไม่พบการเปลี่ยนแปลง"
+ },
+ "codexLogin": {
+ "copyLoginLinkAndCode": "คัดลอกลิงก์และโค้ดเข้าสู่ระบบ ChatGPT",
+ "copyLoginLink": "คัดลอกลิงก์เข้าสู่ระบบ ChatGPT",
+ "copyFailed": "คัดลอกล้มเหลว",
+ "copyLinkAndCode": "คัดลอกลิงก์ + โค้ด",
+ "copyLink": "คัดลอกลิงก์",
+ "enterCodeOnLoginPage": "ป้อนโค้ดนี้บนหน้าเข้าสู่ระบบ ChatGPT"
+ },
+ "window": {
+ "minimize": "ย่อ",
+ "maximize": "ขยายใหญ่สุด",
+ "restore": "คืนค่า"
+ },
+ "context": {
+ "local": "ในเครื่อง",
+ "switchingTo": "กำลังสลับไปยัง {{workspace}}",
+ "loadingWorkspace": "กำลังโหลดพื้นที่ทำงาน",
+ "switchWorkspace": "สลับพื้นที่ทำงาน"
+ },
+ "repositories": {
+ "noneAvailable": "ไม่มีที่เก็บโค้ดให้ใช้งาน",
+ "remove": "ลบที่เก็บโค้ด"
+ },
+ "export": {
+ "session": "ส่งออกเซสชัน",
+ "sessionTitle": "ส่งออกเซสชัน"
+ },
+ "brand": {
+ "claude": "Claude"
+ },
+ "sessionReport": {
+ "noSessionData": "ไม่มีข้อมูลเซสชัน",
+ "title": "รายงานเซสชัน"
+ },
+ "sessionFilters": {
+ "project": {
+ "selectProject": "เลือกโปรเจกต์"
+ }
+ },
+ "tasks": {
+ "date": {
+ "updatedPrefix": "อัปเดต",
+ "updatedYesterday": "อัปเดตเมื่อวานนี้",
+ "yesterday": "เมื่อวานนี้"
+ },
+ "reviewState": {
+ "needsFix": "ต้องแก้ไข"
+ },
+ "unassigned": "ยังไม่ได้มอบหมาย"
+ }
+}
diff --git a/src/features/localization/renderer/locales/th/dashboard.json b/src/features/localization/renderer/locales/th/dashboard.json
new file mode 100644
index 00000000..6849e752
--- /dev/null
+++ b/src/features/localization/renderer/locales/th/dashboard.json
@@ -0,0 +1,197 @@
+{
+ "cliStatus": {
+ "actions": {
+ "alreadyLoggedIn": "เข้าสู่ระบบแล้ว?",
+ "becomeSponsor": "เป็นผู้สนับสนุน",
+ "cancel": "ยกเลิก",
+ "checkNow": "ตรวจสอบเลย",
+ "checkUpdates": "ตรวจสอบการอัปเดต",
+ "checking": "กำลังตรวจสอบ...",
+ "connect": "เชื่อมต่อ",
+ "extensions": "ส่วนขยาย",
+ "login": "เข้าสู่ระบบ",
+ "manage": "จัดการ",
+ "manageProviders": "จัดการผู้ให้บริการ",
+ "plan": "แผน",
+ "recheck": "ตรวจสอบใหม่",
+ "recheckProvider": "ตรวจสอบ {{provider}} ใหม่",
+ "retry": "ลองอีกครั้ง",
+ "updateTo": "อัปเดตเป็น v{{version}}",
+ "useCode": "ใช้โค้ด"
+ },
+ "atlas": {
+ "alt": "Atlas Cloud",
+ "description": "Atlas Cloud เป็นแพลตฟอร์มการอนุมาน AI แบบครบทุกโมดัลที่ให้นักพัฒนาใช้ AI API เดียวเพื่อเข้าถึงการสร้างวิดีโอ การสร้างภาพ และ LLM API แทนที่จะต้องจัดการการเชื่อมต่อกับผู้ให้บริการหลายราย คุณเชื่อมต่อเพียงครั้งเดียวและเข้าถึงโมเดลที่คัดสรรกว่า 300 รายการในทุกโมดัลแบบรวมศูนย์ ดูโปรโมชันแผนการเขียนโค้ดใหม่ของ Atlas Cloud เพื่อเข้าถึง API ที่คุ้มงบประมาณยิ่งขึ้น",
+ "openCodeProvider": "ผู้ให้บริการ OpenCode",
+ "plan": "แผนการเขียนโค้ด Atlas Cloud",
+ "sponsor": "ผู้สนับสนุน"
+ },
+ "errors": {
+ "checkStatusFailed": "ตรวจสอบสถานะ CLI ไม่สำเร็จ",
+ "installationFailed": "การติดตั้งล้มเหลว",
+ "refreshFailed": "ตรวจสอบการอัปเดตไม่สำเร็จ โปรดตรวจสอบการเชื่อมต่อเครือข่ายแล้วลองอีกครั้ง",
+ "runtimeUpdatedRefreshFailed": "อัปเดตรันไทม์แล้ว แต่รีเฟรชสถานะผู้ให้บริการไม่สำเร็จ"
+ },
+ "hints": {
+ "backgroundStatus": "จะตรวจสอบสถานะ {{runtime}} ในเบื้องหลัง",
+ "codexApiKeyFallback": "{{hint}} สามารถใช้ API key สำรองได้หากคุณสลับโหมดการยืนยันตัวตน",
+ "codexAutoApiKey": "{{hint}} โหมดอัตโนมัติจะใช้ API key ต่อไปจนกว่าจะเชื่อมต่อ ChatGPT",
+ "codexFinishLogin": "ดำเนินการเข้าสู่ระบบ ChatGPT ในเบราว์เซอร์ให้เสร็จ ป้อนโค้ดที่แสดงหากระบบร้องขอ",
+ "codexNoActiveLogin": "ขีดจำกัดการใช้งานจะปรากฏหลังจาก Codex CLI เห็นบัญชี ChatGPT ที่ใช้งานอยู่เท่านั้น ขณะนี้รายงานว่าไม่มีการเข้าสู่ระบบ ChatGPT ที่ใช้งานอยู่",
+ "codexNoActiveManagedSession": "ขีดจำกัดการใช้งานจะปรากฏหลังจาก Codex CLI เห็นบัญชี ChatGPT ที่ใช้งานอยู่เท่านั้น มีข้อมูลบัญชี Codex ในเครื่องอยู่ แต่ยังไม่ได้เลือกเซสชันที่จัดการซึ่งใช้งานอยู่ในขณะนี้",
+ "codexReconnectNeeded": "ขีดจำกัดการใช้งานจะปรากฏหลังจาก Codex รีเฟรชเซสชัน ChatGPT ที่เลือกอยู่ในปัจจุบันเท่านั้น ขณะนี้เซสชันในเครื่องต้องเชื่อมต่อใหม่",
+ "firstCheckSlow": "การตรวจสอบครั้งแรกอาจใช้เวลาถึง 30 วินาที",
+ "loginRequiredForTeams": "การเรียกดูเซสชันและโปรเจกต์ใช้งานได้โดยไม่ต้องเข้าสู่ระบบ การเข้าสู่ระบบจำเป็นเฉพาะตอนรันทีมเอเจนต์เท่านั้น",
+ "troubleshootTitle": "หากแน่ใจว่าเข้าสู่ระบบแล้ว ลองทำตามขั้นตอนเหล่านี้:"
+ },
+ "installer": {
+ "checkingLatest": "กำลังตรวจสอบเวอร์ชันล่าสุด...",
+ "downloading": "กำลังดาวน์โหลด {{runtime}}...",
+ "installing": "กำลังติดตั้ง {{runtime}}...",
+ "success": "ติดตั้ง {{runtime}} v{{version}} สำเร็จ",
+ "verifying": "กำลังตรวจสอบ checksum..."
+ },
+ "labels": {
+ "apiKeyRequired": "ต้องใช้ API key",
+ "comingSoon": "เร็ว ๆ นี้",
+ "collapseProviderDetails": "ยุบรายละเอียดผู้ให้บริการ",
+ "expandProviderDetails": "ขยายรายละเอียดผู้ให้บริการ",
+ "generateLink": "สร้างลิงก์",
+ "loadingRateLimits": "กำลังโหลดขีดจำกัดอัตรา",
+ "loggedOut": "ผู้ให้บริการออกจากระบบแล้ว",
+ "loginAuthFailed": "การยืนยันตัวตนล้มเหลว",
+ "loginAuthUpdated": "อัปเดตการยืนยันตัวตนแล้ว",
+ "loginComplete": "เข้าสู่ระบบเสร็จสมบูรณ์",
+ "loginFailed": "เข้าสู่ระบบล้มเหลว",
+ "loginTitle": "เข้าสู่ระบบ",
+ "logoutFailed": "ออกจากระบบล้มเหลว",
+ "logoutTitle": "ออกจากระบบ",
+ "notLoggedIn": "ยังไม่ได้เข้าสู่ระบบ",
+ "openLogin": "เปิดหน้าเข้าสู่ระบบ",
+ "providerActionRequired": "ต้องดำเนินการกับผู้ให้บริการ",
+ "resets": "รีเซ็ต {{time}}",
+ "runtimeLoginTitle": "เข้าสู่ระบบ {{runtime}}"
+ },
+ "loading": {
+ "aiProviders": "กำลังตรวจสอบผู้ให้บริการ AI...",
+ "claudeCli": "กำลังตรวจสอบ Claude CLI..."
+ },
+ "provider": {
+ "authenticated": "ยืนยันตัวตนแล้ว",
+ "backend": "แบ็กเอนด์: {{backend}}",
+ "checkingAuthentication": "กำลังตรวจสอบการยืนยันตัวตน...",
+ "checkingProviders": "กำลังตรวจสอบผู้ให้บริการ...",
+ "configuredLocalCount": "ตั้งค่าในเครื่องแล้ว {{count}} รายการ",
+ "configuredLocalCount_few": "ตั้งค่าในเครื่องแล้ว {{count}} รายการ",
+ "configuredLocalCount_many": "ตั้งค่าในเครื่องแล้ว {{count}} รายการ",
+ "configuredLocalCount_one": "ตั้งค่าในเครื่องแล้ว {{count}} รายการ",
+ "configuredLocalCount_other": "ตั้งค่าในเครื่องแล้ว {{count}} รายการ",
+ "configuredLocalTitle": "เส้นทาง OpenCode ในเครื่องที่นำเข้าจากการตั้งค่า OpenCode ของคุณ",
+ "connectedCount": "ผู้ให้บริการ: เชื่อมต่อแล้ว {{connected}}/{{denominator}}",
+ "freeModels": "โมเดลฟรี",
+ "freeModelsTitle": "OpenCode มีตัวเลือกโมเดลฟรี เช่น Big Pickle เมื่อมีในการตั้งค่าของคุณ OpenRouter ผ่าน OpenCode ก็สามารถเปิดเผยโมเดลฟรีได้เช่นกัน แต่ไม่ใช่ทุกโมเดล OpenCode/OpenRouter จะฟรี ความพร้อมใช้งานและขีดจำกัดอาจเปลี่ยนแปลงได้",
+ "loadingModels": "กำลังโหลดโมเดล...",
+ "modelsUnavailable": "ไม่มีโมเดลสำหรับรันไทม์บิลด์นี้",
+ "runtime": "รันไทม์: {{runtime}}",
+ "verifiedCount": "ยืนยันแล้ว {{count}} รายการ",
+ "verifiedCount_few": "ยืนยันแล้ว {{count}} รายการ",
+ "verifiedCount_many": "ยืนยันแล้ว {{count}} รายการ",
+ "verifiedCount_one": "ยืนยันแล้ว {{count}} รายการ",
+ "verifiedCount_other": "ยืนยันแล้ว {{count}} รายการ",
+ "verifiedTitle": "เส้นทาง OpenCode ที่มีหลักฐานการทำงานสำเร็จ"
+ },
+ "runtime": {
+ "configuredHealthCheckFailed": "{{runtime}} ที่ตั้งค่าไว้ไม่ผ่านการตรวจสอบความพร้อมตอนเริ่มต้น",
+ "configuredNotFound": "ไม่พบ {{runtime}} ที่ตั้งค่าไว้",
+ "foundButFailed": "พบ {{runtime}} แต่เริ่มต้นไม่สำเร็จ",
+ "healthCheckFailedDescription": "แอปพบ {{runtime}} ที่ตั้งค่าไว้ แต่การตรวจสอบความพร้อมตอนเริ่มต้นล้มเหลว ซ่อมแซมหรือติดตั้งใหม่แล้วลองอีกครั้ง",
+ "install": "ติดตั้ง {{runtime}}",
+ "installRequiredDescription": "ต้องใช้ {{runtime}} สำหรับการจัดเตรียมทีมและการจัดการเซสชัน ติดตั้งเพื่อเริ่มต้นใช้งาน",
+ "isRequired": "ต้องใช้ {{runtime}}",
+ "reinstall": "ติดตั้ง {{runtime}} ใหม่"
+ },
+ "runtimeInstall": {
+ "checking": "กำลังตรวจสอบ",
+ "codexTitle": "ติดตั้ง Codex CLI ลงในข้อมูลแอป",
+ "downloading": "กำลังดาวน์โหลด",
+ "downloadingPercent": "กำลังดาวน์โหลด {{percent}}%",
+ "install": "ติดตั้ง",
+ "installing": "กำลังติดตั้ง",
+ "openCodeTitle": "ติดตั้งรันไทม์ OpenCode ลงในข้อมูลแอป",
+ "retryInstall": "ลองติดตั้งอีกครั้ง"
+ },
+ "troubleshoot": {
+ "again": "อีกครั้ง",
+ "authStatusCommand": "คำสั่งตรวจสอบสถานะการยืนยันตัวตน CLI ที่คุณตั้งค่าไว้",
+ "checkLoggedIn": "- ตรวจสอบว่าแสดง \"Logged in\" หรือไม่",
+ "click": "คลิก",
+ "loginCommand": "คำสั่งเข้าสู่ระบบของรันไทม์",
+ "logoutCommand": "คำสั่งออกจากระบบของรันไทม์",
+ "openTerminal": "เปิดเทอร์มินัลแล้วรัน:",
+ "reloginPrefix": "หากแสดงว่าเข้าสู่ระบบแล้วแต่แอปมองไม่เห็น ลอง:",
+ "sameRuntime": "ตรวจสอบให้แน่ใจว่า CLI ในเทอร์มินัลของคุณเป็นรันไทม์เดียวกับที่แอปใช้",
+ "statusCacheHint": "- บางครั้งสถานะถูกแคชไว้ไม่กี่วินาที",
+ "then": "จากนั้น"
+ },
+ "warnings": {
+ "multipleApiKeysMissing": "มีผู้ให้บริการหนึ่งรายหรือมากกว่าตั้งค่าเป็นโหมด API key แต่ยังไม่ได้ตั้งค่า API key เปิดจัดการผู้ให้บริการเพื่อเพิ่ม key หรือสลับโหมดการเชื่อมต่อ",
+ "multipleApiKeysNeedAttention": "มีผู้ให้บริการหนึ่งรายหรือมากกว่าตั้งค่าเป็นโหมด API key และต้องการการดูแล เปิดจัดการผู้ให้บริการเพื่อตรวจสอบ key ที่บันทึกไว้หรือสลับโหมดการเชื่อมต่อ",
+ "notAuthenticated": "ติดตั้ง {{runtime}} แล้วแต่คุณยังไม่ได้ยืนยันตัวตน ต้องเข้าสู่ระบบเพื่อจัดเตรียมทีมและใช้ฟีเจอร์ AI",
+ "singleApiKeyMissing": "{{provider}} ตั้งค่าเป็นโหมด API key แต่ยังไม่ได้ตั้งค่า API key เปิดจัดการผู้ให้บริการเพื่อเพิ่ม key หรือสลับโหมดการเชื่อมต่อ",
+ "singleApiKeyNeedsAttention": "{{provider}} ตั้งค่าเป็นโหมด API key แต่ยังไม่ได้เชื่อมต่อ เปิดจัดการผู้ให้บริการเพื่อตรวจสอบ key ที่บันทึกไว้หรือสลับโหมดการเชื่อมต่อ"
+ }
+ },
+ "recentProjects": {
+ "selectFolderTitle": "เลือกโฟลเดอร์โปรเจกต์",
+ "selectFolder": "เลือกโฟลเดอร์",
+ "failedToLoad": "โหลดโปรเจกต์ไม่สำเร็จ",
+ "retry": "ลองอีกครั้ง",
+ "noProjects": "ไม่พบโปรเจกต์",
+ "noMatches": "ไม่มีผลลัพธ์สำหรับ \"{{query}}\"",
+ "noRecentProjects": "ไม่พบโปรเจกต์ล่าสุด",
+ "emptyDescription": "กิจกรรมล่าสุดของ Claude และ Codex จะปรากฏที่นี่",
+ "loadMore": "โหลดเพิ่มเติม",
+ "card": {
+ "deleted": "ลบแล้ว",
+ "projectFolderMissing": "โฟลเดอร์โปรเจกต์ไม่มีอยู่อีกต่อไป",
+ "taskCounts": {
+ "active": "ใช้งานอยู่ {{count}} รายการ",
+ "active_one": "ใช้งานอยู่ {{count}} รายการ",
+ "active_other": "ใช้งานอยู่ {{count}} รายการ",
+ "active_few": "ใช้งานอยู่ {{count}} รายการ",
+ "active_many": "ใช้งานอยู่ {{count}} รายการ",
+ "pending": "รอดำเนินการ {{count}} รายการ",
+ "pending_one": "รอดำเนินการ {{count}} รายการ",
+ "pending_other": "รอดำเนินการ {{count}} รายการ",
+ "pending_few": "รอดำเนินการ {{count}} รายการ",
+ "pending_many": "รอดำเนินการ {{count}} รายการ",
+ "done": "เสร็จแล้ว {{count}} รายการ",
+ "done_one": "เสร็จแล้ว {{count}} รายการ",
+ "done_other": "เสร็จแล้ว {{count}} รายการ",
+ "done_few": "เสร็จแล้ว {{count}} รายการ",
+ "done_many": "เสร็จแล้ว {{count}} รายการ"
+ }
+ },
+ "title": "โปรเจกต์ล่าสุด",
+ "searchResults": "ผลการค้นหา",
+ "searchPlaceholder": "ค้นหาโปรเจกต์..."
+ },
+ "actions": {
+ "selectTeam": "เลือกทีม",
+ "or": "หรือ",
+ "clearSearch": "ล้างการค้นหา"
+ },
+ "windowsAdmin": {
+ "title": "แนะนำให้ใช้โหมดผู้ดูแลระบบ Windows",
+ "description": "การตรวจสอบรันไทม์ OpenCode อาจหมดเวลาเมื่อ Agent Teams AI ไม่ได้รันด้วยสิทธิ์ที่ยกระดับ รีสตาร์ทแอปด้วย Run as administrator ก่อนเริ่มทีม OpenCode"
+ },
+ "webPreview": {
+ "title": "เปิดแอปเดสก์ท็อปเพื่อใช้งานเต็มรูปแบบ",
+ "description": "เวอร์ชันเบราว์เซอร์ยังอยู่ระหว่างการพัฒนา การดำเนินการกับโปรเจกต์ การเชื่อมต่อ และการอัปเดตสถานะแบบสดอาจมีข้อจำกัดที่นี่ ใช้แอปเดสก์ท็อปเพื่อเข้าถึงทุกฟีเจอร์ได้อย่างเชื่อถือได้"
+ },
+ "updateBanner": {
+ "newVersionAvailable": "มีเวอร์ชันใหม่",
+ "restartNow": "รีสตาร์ทเลย",
+ "viewDetails": "ดูรายละเอียด"
+ }
+}
diff --git a/src/features/localization/renderer/locales/th/errors.json b/src/features/localization/renderer/locales/th/errors.json
new file mode 100644
index 00000000..6e19fe3c
--- /dev/null
+++ b/src/features/localization/renderer/locales/th/errors.json
@@ -0,0 +1,3 @@
+{
+ "fallback": "เกิดข้อผิดพลาดบางอย่าง"
+}
diff --git a/src/features/localization/renderer/locales/th/extensions.json b/src/features/localization/renderer/locales/th/extensions.json
new file mode 100644
index 00000000..8cb8ae14
--- /dev/null
+++ b/src/features/localization/renderer/locales/th/extensions.json
@@ -0,0 +1,688 @@
+{
+ "store": {
+ "actions": {
+ "addCustom": "เพิ่มแบบกำหนดเอง",
+ "openDashboard": "เปิดแดชบอร์ด",
+ "refreshCatalog": "รีเฟรชแคตตาล็อก"
+ },
+ "capabilities": {
+ "mcp": "MCP: {{status}}",
+ "plugins": "ปลั๊กอิน: {{status}}",
+ "skills": "สกิล: {{status}}"
+ },
+ "desktopOnly": "ใช้งานได้เฉพาะในแอปเดสก์ท็อปเท่านั้น",
+ "provider": {
+ "checkingStatus": "กำลังตรวจสอบสถานะผู้ให้บริการ...",
+ "connected": "เชื่อมต่อแล้ว",
+ "loading": "กำลังโหลด...",
+ "needsSetup": "ต้องตั้งค่า",
+ "readyToConfigure": "พร้อมตั้งค่า",
+ "unsupported": "ไม่รองรับ"
+ },
+ "runtime": {
+ "checkingAvailabilityDescription": "ส่วนขยายต้องใช้รันไทม์ที่ตั้งค่าไว้เพื่อจัดการปลั๊กอิน, เซิร์ฟเวอร์ MCP, สกิล และการเชื่อมต่อผู้ให้บริการ",
+ "checkingAvailabilityTitle": "กำลังตรวจสอบความพร้อมใช้งานของรันไทม์ส่วนขยาย",
+ "failedToStartDescription": "ส่วนขยายจะถูกปิดใช้งานจนกว่ารันไทม์จะผ่านการตรวจสอบสุขภาพตอนเริ่มต้น เปิดแดชบอร์ดเพื่อซ่อมแซมหรือติดตั้งใหม่",
+ "failedToStartTitle": "พบรันไทม์ที่ตั้งค่าไว้แต่เริ่มต้นไม่สำเร็จ",
+ "multimodelCapabilitiesDescription": "การรองรับผู้ให้บริการอาจแตกต่างกันในแต่ละส่วน ปลั๊กอินจะแสดงเฉพาะที่รันไทม์ประกาศการรองรับไว้อย่างชัดเจน",
+ "multimodelCapabilitiesTitle": "ความสามารถของรันไทม์หลายโมเดล",
+ "needsSignInDescription": "พบ {{runtime}}{{version}} แล้ว แต่การติดตั้งปลั๊กอินจะถูกปิดใช้งานจนกว่าคุณจะเข้าสู่ระบบจากแดชบอร์ด",
+ "needsSignInTitle": "{{runtime}} ต้องเข้าสู่ระบบ",
+ "notAvailableDescription": "ส่วนขยายจะถูกปิดใช้งานจนกว่าจะติดตั้งรันไทม์ เปิดแดชบอร์ดเพื่อติดตั้งแล้วลองอีกครั้ง",
+ "notAvailableTitle": "ไม่สามารถใช้รันไทม์ที่ตั้งค่าไว้ได้",
+ "readyDescription": "สามารถติดตั้งปลั๊กอินได้จากหน้านี้{{versionSuffix}}",
+ "readyTitle": "{{runtime}} พร้อมใช้งาน",
+ "requiredForMutations": "ต้องใช้รันไทม์ที่ตั้งค่าไว้เพื่อติดตั้งหรือถอนการติดตั้งส่วนขยาย ติดตั้งหรือซ่อมแซมจากแดชบอร์ด"
+ },
+ "sessionsRestartWarning": "เซสชันที่กำลังทำงานจะไม่รับการเปลี่ยนแปลงส่วนขยายจนกว่าจะรีสตาร์ท",
+ "tabs": {
+ "apiKeys": {
+ "description": "คีย์ลับสำหรับบริการออนไลน์ เพิ่มที่นี่เพื่อให้ปลั๊กอิน เซิร์ฟเวอร์ และการเชื่อมต่อสามารถเชื่อมต่อและทำงานได้",
+ "label": "API Keys"
+ },
+ "mcpServers": {
+ "description": "การเชื่อมต่อกับเครื่องมือและแอปภายนอก ช่วยให้รันไทม์อ่านข้อมูลหรือดำเนินการนอกเหนือจากแอปนี้",
+ "label": "เซิร์ฟเวอร์ MCP"
+ },
+ "plugins": {
+ "description": "ส่วนเสริมขนาดเล็กสำหรับรันไทม์ ในโหมดหลายโมเดล ปัจจุบันใช้กับเซสชัน Anthropic เมื่อรองรับ การรองรับผู้ให้บริการที่กว้างขึ้นกำลังพัฒนาอยู่",
+ "label": "ปลั๊กอิน"
+ },
+ "skills": {
+ "description": "คำสั่งสำเร็จรูปสำหรับงานทั่วไป ช่วยให้รันไทม์จัดการงานที่ทำซ้ำได้อย่างสม่ำเสมอยิ่งขึ้น",
+ "label": "สกิล"
+ }
+ },
+ "title": "ส่วนขยาย"
+ },
+ "pluginsPanel": {
+ "activeFilters": "ใช้งานอยู่ {{count}} รายการ",
+ "browseByFit": "เรียกดูตามความเหมาะสม",
+ "capabilities": "ความสามารถ",
+ "categories": "หมวดหมู่",
+ "clearAllFilters": "ล้างตัวกรองทั้งหมด",
+ "clearFilters": "ล้างตัวกรอง",
+ "counts": {
+ "capabilities": "{{count}} ความสามารถ",
+ "categories": "{{count}} หมวดหมู่",
+ "plugins": "{{count}} ปลั๊กอิน",
+ "capabilities_few": "{{count}} ความสามารถ",
+ "capabilities_many": "{{count}} ความสามารถ",
+ "capabilities_one": "{{count}} ความสามารถ",
+ "capabilities_other": "{{count}} ความสามารถ",
+ "categories_few": "{{count}} หมวดหมู่",
+ "categories_many": "{{count}} หมวดหมู่",
+ "categories_one": "{{count}} หมวดหมู่",
+ "categories_other": "{{count}} หมวดหมู่",
+ "plugins_few": "{{count}} ปลั๊กอิน",
+ "plugins_many": "{{count}} ปลั๊กอิน",
+ "plugins_one": "{{count}} ปลั๊กอิน",
+ "plugins_other": "{{count}} ปลั๊กอิน"
+ },
+ "empty": {
+ "description": "กลับมาดูใหม่ภายหลังสำหรับปลั๊กอินใหม่",
+ "filteredDescription": "ลองปรับการค้นหาหรือเงื่อนไขตัวกรอง",
+ "filteredTitle": "ไม่มีปลั๊กอินที่ตรงกับตัวกรองของคุณ",
+ "title": "ไม่มีปลั๊กอินให้ใช้งาน"
+ },
+ "filterDescription": "จำกัดแคตตาล็อกตามหมวดหมู่ ความสามารถ หรือสถานะการติดตั้ง",
+ "installedOnly": "ที่ติดตั้งแล้วเท่านั้น",
+ "providerSupportNotice": "ปัจจุบันการรองรับปลั๊กอินรับประกันเฉพาะเซสชัน Anthropic (Claude) เท่านั้น เรากำลังพัฒนาเพื่อรองรับปลั๊กอินในทุกเอเจนต์",
+ "resultsUpdateInstantly": "ผลลัพธ์จะอัปเดตทันทีเมื่อคุณปรับตัวกรอง",
+ "searchPlaceholder": "ค้นหาปลั๊กอิน...",
+ "selectedCount": "เลือกแล้ว {{count}} รายการ",
+ "showing": "แสดง {{shown}} จาก {{total}} ปลั๊กอิน",
+ "sort": {
+ "category": "หมวดหมู่",
+ "nameAsc": "ชื่อ A-Z",
+ "nameDesc": "ชื่อ Z-A",
+ "popular": "ยอดนิยม"
+ },
+ "activeFilters_few": "ใช้งานอยู่ {{count}} รายการ",
+ "activeFilters_many": "ใช้งานอยู่ {{count}} รายการ",
+ "activeFilters_one": "ใช้งานอยู่ {{count}} รายการ",
+ "activeFilters_other": "ใช้งานอยู่ {{count}} รายการ",
+ "selectedCount_few": "เลือกแล้ว {{count}} รายการ",
+ "selectedCount_many": "เลือกแล้ว {{count}} รายการ",
+ "selectedCount_one": "เลือกแล้ว {{count}} รายการ",
+ "selectedCount_other": "เลือกแล้ว {{count}} รายการ"
+ },
+ "customMcp": {
+ "actions": {
+ "add": "เพิ่ม",
+ "cancel": "ยกเลิก",
+ "install": "ติดตั้ง",
+ "installing": "กำลังติดตั้ง..."
+ },
+ "description": "เพิ่มเซิร์ฟเวอร์ด้วยตนเองโดยไม่ใช้แคตตาล็อก",
+ "errors": {
+ "installFailed": "การติดตั้งล้มเหลว",
+ "invalidServerName": "ชื่อเซิร์ฟเวอร์ไม่ถูกต้อง ใช้ตัวอักษรและตัวเลข ขีดกลาง ขีดล่าง และจุด",
+ "npmPackageRequired": "ต้องระบุชื่อแพ็กเกจ npm",
+ "serverNameRequired": "ต้องระบุชื่อเซิร์ฟเวอร์",
+ "serverUrlRequired": "ต้องระบุ URL เซิร์ฟเวอร์"
+ },
+ "fields": {
+ "environmentVariables": "ตัวแปรสภาพแวดล้อม",
+ "headers": "เฮดเดอร์",
+ "npmPackage": "แพ็กเกจ npm",
+ "scope": "ขอบเขต",
+ "serverName": "ชื่อเซิร์ฟเวอร์",
+ "serverUrl": "URL เซิร์ฟเวอร์",
+ "transport": "Transport",
+ "transportType": "ประเภท Transport",
+ "versionOptional": "เวอร์ชัน (ไม่บังคับ)"
+ },
+ "title": "เพิ่มเซิร์ฟเวอร์ MCP แบบกำหนดเอง",
+ "transport": {
+ "httpSse": "HTTP / SSE",
+ "stdio": "Stdio (npm)"
+ },
+ "placeholders": {
+ "headerName": "Header-Name",
+ "envVarName": "ENV_VAR_NAME",
+ "serverName": "my-server",
+ "latest": "latest",
+ "value": "value",
+ "serverUrl": "https://api.example.com/mcp"
+ }
+ },
+ "mcpDetail": {
+ "auth": {
+ "remoteMayNeedHeaders": "เซิร์ฟเวอร์ MCP ระยะไกลอาจยังต้องใช้เฮดเดอร์แบบกำหนดเองหรือ API key แม้ว่ารีจิสทรีจะไม่ได้ระบุไว้ก็ตาม หากการเชื่อมต่อล้มเหลวหลังการติดตั้ง ให้ตรวจสอบเอกสารของผู้ให้บริการ",
+ "required": "เซิร์ฟเวอร์นี้ต้องมีการยืนยันตัวตน"
+ },
+ "diagnostics": {
+ "launchTarget": "เป้าหมายการเริ่มต้น"
+ },
+ "form": {
+ "autoFilled": "กรอกอัตโนมัติ",
+ "environmentVariables": "ตัวแปรสภาพแวดล้อม",
+ "headers": "เฮดเดอร์",
+ "scope": "ขอบเขต",
+ "serverName": "ชื่อเซิร์ฟเวอร์"
+ },
+ "install": {
+ "httpTransport": "HTTP: {{transport}}",
+ "manualSetupDescription": "เซิร์ฟเวอร์นี้ต้องตั้งค่าด้วยตนเอง ตรวจสอบคำแนะนำการติดตั้งในที่เก็บโค้ด",
+ "manualSetupRequired": "ต้องตั้งค่าด้วยตนเอง",
+ "npmPackage": "npm: {{package}}",
+ "manage": "จัดการการติดตั้ง",
+ "install": "ติดตั้งเซิร์ฟเวอร์"
+ },
+ "links": {
+ "glama": "Glama",
+ "repository": "ที่เก็บโค้ด",
+ "website": "เว็บไซต์"
+ },
+ "metadata": {
+ "author": "ผู้สร้าง",
+ "githubStars": "ดาว GitHub",
+ "hosting": "โฮสติ้ง",
+ "installType": "ประเภทการติดตั้ง",
+ "license": "สัญญาอนุญาต",
+ "published": "เผยแพร่",
+ "source": "แหล่งที่มา",
+ "updated": "อัปเดต",
+ "version": "เวอร์ชัน"
+ },
+ "scope": {
+ "local": "ในเครื่อง",
+ "project": "โปรเจกต์"
+ },
+ "tools": {
+ "title": "เครื่องมือ ({{count}})",
+ "title_few": "เครื่องมือ ({{count}})",
+ "title_many": "เครื่องมือ ({{count}})",
+ "title_one": "เครื่องมือ ({{count}})",
+ "title_other": "เครื่องมือ ({{count}})"
+ },
+ "placeholders": {
+ "serverName": "my-server"
+ }
+ },
+ "skillEditor": {
+ "actions": {
+ "cancel": "ยกเลิก",
+ "createSkill": "สร้างสกิล",
+ "preparing": "กำลังเตรียม...",
+ "reviewAndCreate": "ตรวจสอบและสร้าง",
+ "reviewAndSave": "ตรวจสอบและบันทึก",
+ "saveSkill": "บันทึกสกิล"
+ },
+ "advanced": {
+ "customDescription": "สกิลนี้ใช้รูปแบบ markdown แบบกำหนดเอง จึงต้องแก้ไขที่นี่โดยตรง",
+ "customTitle": "2. ตัวแก้ไข SKILL.md",
+ "description": "คนส่วนใหญ่ข้ามส่วนนี้ได้ เปิดเฉพาะเมื่อคุณต้องการควบคุมไฟล์ markdown ดิบโดยตรง",
+ "hide": "ซ่อนตัวแก้ไขขั้นสูง",
+ "resetFromStructuredFields": "รีเซ็ตจากฟิลด์แบบมีโครงสร้าง",
+ "show": "แสดงตัวแก้ไขขั้นสูง",
+ "title": "4. ตัวแก้ไข SKILL.md ขั้นสูง"
+ },
+ "basics": {
+ "description": "ตั้งชื่อสกิลนี้ให้ชัดเจน เลือกผู้ที่สามารถใช้ได้ และกำหนดว่าจะเก็บไว้ที่ใด",
+ "title": "1. พื้นฐาน"
+ },
+ "description": {
+ "create": "อธิบายขั้นตอนการทำงานด้วยภาษาธรรมดา ตรวจสอบไฟล์ที่จะสร้าง จากนั้นบันทึก",
+ "edit": "อัปเดตสกิลนี้ ตรวจสอบการเปลี่ยนแปลงไฟล์ที่เกิดขึ้น จากนั้นบันทึก"
+ },
+ "extraFiles": {
+ "addedFiles": "ไฟล์ที่เพิ่ม:",
+ "assets": "แอสเซต",
+ "assetsDescription": "เพิ่มภาพหน้าจอหรือสื่อที่รวมไว้เฉพาะเมื่อช่วยอธิบายขั้นตอนการทำงาน",
+ "description": "เพิ่มเอกสารประกอบ สคริปต์ หรือแอสเซตเฉพาะเมื่อสกิลนี้จำเป็นต้องใช้จริง ๆ",
+ "lockedForEdits": "รากและโฟลเดอร์ถูกล็อกการแก้ไข",
+ "optionalDescription": "เพิ่มไฟล์เริ่มต้นที่จะรวมอยู่ในการตรวจสอบและเขียนพร้อมกับ `SKILL.md`",
+ "optionalTitle": "ไฟล์เพิ่มเติม",
+ "references": "เอกสารอ้างอิง",
+ "referencesDescription": "เพิ่มเอกสารประกอบ ลิงก์ หรือตัวอย่างที่รันไทม์สามารถดูได้",
+ "scripts": "สคริปต์",
+ "scriptsDescription": "เพิ่มคำสั่งช่วยเหลือหรือบันทึกการตั้งค่า ตรวจสอบอย่างรอบคอบก่อนแชร์สกิลนี้",
+ "title": "3. ไฟล์เพิ่มเติม"
+ },
+ "fields": {
+ "compatibility": "ความเข้ากันได้",
+ "description": "คำอธิบาย",
+ "folderName": "ชื่อโฟลเดอร์",
+ "folderNameHint": "เราแนะนำชื่อนี้อัตโนมัติจากชื่อสกิลเพื่อให้การตรวจสอบทำงานได้ทันที",
+ "invocation": "ควรใช้อย่างไร",
+ "license": "สัญญาอนุญาต",
+ "name": "ชื่อสกิล",
+ "notes": "บันทึกเพิ่มเติมหรือข้อควรระวัง",
+ "root": "เก็บไว้ที่ใด",
+ "scope": "ใครใช้ได้บ้าง",
+ "steps": "ขั้นตอนหลักที่ต้องทำ",
+ "whenToUse": "ควรใช้เมื่อใด"
+ },
+ "instructions": {
+ "description": "ส่วนเหล่านี้สร้างไฟล์สกิลให้คุณ คุณจึงไม่จำเป็นต้องแก้ไข markdown เว้นแต่ต้องการ",
+ "locked": "ฟิลด์แบบมีโครงสร้างถูกล็อกเพราะคุณสลับไปแก้ไข `SKILL.md` ด้วยตนเองด้านล่าง",
+ "title": "2. คำแนะนำ"
+ },
+ "invocation": {
+ "auto": "ใช้งานได้อัตโนมัติ",
+ "manualOnly": "เฉพาะเมื่อคุณร้องขอเท่านั้น"
+ },
+ "placeholders": {
+ "description": "สกิลนี้ช่วยอะไรได้บ้าง",
+ "name": "เขียนชื่อสกิลให้กระชับ",
+ "notes": "ตัวอย่าง: ชี้ให้เห็นการทดสอบที่ขาดหาย การถดถอย และสมมติฐานที่เสี่ยง",
+ "steps": "1. ตรวจสอบไฟล์ที่เกี่ยวข้อง\n2. อธิบายความเสี่ยงหลักก่อน\n3. แนะนำวิธีแก้ที่ปลอดภัยที่สุด",
+ "whenToUse": "ตัวอย่าง: ใช้เมื่องานเป็นการรีวิวโค้ดหรือการคัดแยกบั๊ก",
+ "license": "MIT",
+ "compatibility": "claude-code, cursor"
+ },
+ "review": {
+ "creating": "กำลังสร้างสกิล",
+ "hint": "ตรวจสอบการเปลี่ยนแปลงไฟล์ก่อน จากนั้นยืนยันการบันทึกในขั้นตอนถัดไป",
+ "saving": "กำลังบันทึกสกิลนี้"
+ },
+ "root": {
+ "codexOnly": " - Codex เท่านั้น",
+ "shared": " - ใช้ร่วมกัน"
+ },
+ "scope": {
+ "project": "โปรเจกต์: {{project}}",
+ "projectUnavailable": "ไม่สามารถใช้โปรเจกต์ได้",
+ "user": "ผู้ใช้"
+ },
+ "title": {
+ "create": "สร้างสกิล",
+ "edit": "แก้ไขสกิล"
+ }
+ },
+ "skillDetail": {
+ "actions": {
+ "cancel": "ยกเลิก",
+ "delete": "ลบ",
+ "deleteSkill": "ลบสกิล",
+ "deleting": "กำลังลบ...",
+ "editSkill": "แก้ไขสกิล",
+ "openFolder": "เปิดโฟลเดอร์",
+ "openSkillFile": "เปิด SKILL.md",
+ "retry": "ลองอีกครั้ง"
+ },
+ "badges": {
+ "assets": "แอสเซต",
+ "autoUse": "ใช้อัตโนมัติ",
+ "hasScripts": "มีสคริปต์",
+ "manualUse": "ใช้ด้วยตนเอง",
+ "references": "เอกสารอ้างอิง",
+ "storedIn": "เก็บไว้ใน {{root}}"
+ },
+ "deleteDialog": {
+ "description": "ลบสกิลนี้และย้ายไปยังถังขยะหรือไม่?",
+ "descriptionWithName": "ลบ \"{{name}}\" และย้ายไปยังถังขยะหรือไม่? คุณสามารถกู้คืนได้ภายหลังจากถังขยะหากจำเป็น",
+ "title": "ลบสกิลหรือไม่?"
+ },
+ "descriptionFallback": "ตรวจสอบเมตาดาตาของสกิลที่พบและคำแนะนำดิบ",
+ "errors": {
+ "deleteFailed": "ลบสกิลไม่สำเร็จ",
+ "loadFailed": "ไม่สามารถโหลดสกิลนี้ได้"
+ },
+ "files": {
+ "advancedDetails": "รายละเอียดไฟล์ขั้นสูง",
+ "assets": "แอสเซต",
+ "references": "เอกสารอ้างอิง",
+ "scripts": "สคริปต์",
+ "storedAt": "เก็บไว้ที่"
+ },
+ "includes": {
+ "assets": "แอสเซต",
+ "instructionsOnly": "เฉพาะคำแนะนำของสกิล",
+ "references": "เอกสารอ้างอิง",
+ "scripts": "สคริปต์"
+ },
+ "invocation": {
+ "auto": "รันอัตโนมัติเมื่อตรงกับงาน",
+ "manualOnly": "รันเฉพาะเมื่อคุณร้องขออย่างชัดเจน"
+ },
+ "issues": {
+ "bundledScripts": "สกิลนี้มีสคริปต์ที่รวมมาด้วย",
+ "reviewCarefully": "ตรวจสอบสกิลนี้อย่างรอบคอบก่อนใช้งาน"
+ },
+ "loading": "กำลังโหลดรายละเอียดสกิล...",
+ "scope": {
+ "personal": "สกิลส่วนตัวของคุณ",
+ "projectOnly": "โปรเจกต์นี้เท่านั้น"
+ },
+ "summary": {
+ "howUsed": "ใช้อย่างไร",
+ "included": "มีอะไรรวมมาด้วย",
+ "whoCanUse": "ใครใช้ได้บ้าง"
+ },
+ "titleFallback": "รายละเอียดสกิล"
+ },
+ "skillsPanel": {
+ "actions": {
+ "createSkill": "สร้างสกิล",
+ "import": "นำเข้า"
+ },
+ "badges": {
+ "assets": "แอสเซต",
+ "hasScripts": "มีสคริปต์",
+ "needsAttention": "ต้องดูแล",
+ "references": "เอกสารอ้างอิง",
+ "storedIn": "เก็บไว้ใน {{root}}"
+ },
+ "configuredRuntime": "รันไทม์ที่ตั้งค่าไว้",
+ "counts": {
+ "codexOnly": "{{count}} Codex เท่านั้น",
+ "personal": "{{count}} ส่วนตัว",
+ "project": "{{count}} โปรเจกต์",
+ "shared": "{{count}} ใช้ร่วมกัน",
+ "total": "{{count}} ทั้งหมด",
+ "codexOnly_few": "{{count}} Codex เท่านั้น",
+ "codexOnly_many": "{{count}} Codex เท่านั้น",
+ "codexOnly_one": "{{count}} Codex เท่านั้น",
+ "codexOnly_other": "{{count}} Codex เท่านั้น",
+ "personal_few": "{{count}} ส่วนตัว",
+ "personal_many": "{{count}} ส่วนตัว",
+ "personal_one": "{{count}} ส่วนตัว",
+ "personal_other": "{{count}} ส่วนตัว",
+ "project_few": "{{count}} โปรเจกต์",
+ "project_many": "{{count}} โปรเจกต์",
+ "project_one": "{{count}} โปรเจกต์",
+ "project_other": "{{count}} โปรเจกต์",
+ "shared_few": "{{count}} ใช้ร่วมกัน",
+ "shared_many": "{{count}} ใช้ร่วมกัน",
+ "shared_one": "{{count}} ใช้ร่วมกัน",
+ "shared_other": "{{count}} ใช้ร่วมกัน",
+ "total_few": "{{count}} ทั้งหมด",
+ "total_many": "{{count}} ทั้งหมด",
+ "total_one": "{{count}} ทั้งหมด",
+ "total_other": "{{count}} ทั้งหมด"
+ },
+ "empty": {
+ "noMatches": "ไม่มีสกิลที่ตรงกับการค้นหาของคุณ",
+ "noMatchesDescription": "ลองคำค้นหาอื่นหรือสลับตัวกรอง",
+ "noSkills": "ยังไม่มีสกิล",
+ "noSkillsDescription": "สร้างสกิลแรกของคุณเพื่อสอนขั้นตอนการทำงานที่ทำซ้ำได้ หรือนำเข้าสกิลที่คุณใช้อยู่แล้ว"
+ },
+ "filters": {
+ "all": "สกิลทั้งหมด",
+ "codexOnly": "Codex เท่านั้น",
+ "hasScripts": "มีสคริปต์",
+ "needsAttention": "ต้องดูแล",
+ "personal": "ส่วนตัว",
+ "project": "โปรเจกต์",
+ "shared": "ใช้ร่วมกัน"
+ },
+ "hero": {
+ "codexAvailable": "ใช้ `.codex` เมื่อต้องการให้สกิลเป็น Codex เท่านั้น",
+ "codexUnavailable": "สกิล `.codex` ที่มีอยู่ยังแก้ไขได้ที่นี่ แต่สกิล Codex เท่านั้นที่สร้างใหม่ต้องเปิดใช้งานรันไทม์ Codex",
+ "description": "สกิลคือคำแนะนำที่นำกลับมาใช้ใหม่ได้ ช่วยให้รันไทม์จัดการงานประเภทเดียวกันได้อย่างสม่ำเสมอยิ่งขึ้น",
+ "guidance": "ใช้สกิลส่วนตัวสำหรับนิสัยที่คุณต้องการให้มีทุกที่ ใช้สกิลโปรเจกต์สำหรับขั้นตอนการทำงานที่เหมาะกับโค้ดเบสเดียวเท่านั้น",
+ "personalContext": "ขณะนี้คุณเห็นเฉพาะสกิลส่วนตัวของคุณเท่านั้น",
+ "projectContext": "คุณกำลังดูสกิลสำหรับ {{project}} รวมถึงสกิลส่วนตัวของคุณ",
+ "title": "สอนงานที่ทำซ้ำได้"
+ },
+ "invocation": {
+ "auto": "รันอัตโนมัติเมื่อเหมาะสม",
+ "manualOnly": "รันเฉพาะเมื่อคุณร้องขออย่างชัดเจน"
+ },
+ "loading": {
+ "loading": "กำลังโหลดสกิล...",
+ "refreshing": "กำลังรีเฟรชสกิล..."
+ },
+ "runtimeAudience": "สกิลที่ใช้ร่วมกันใน `.claude`, `.cursor` และ `.agents` พร้อมใช้งานสำหรับ {{audience}} สกิลที่เก็บใน `.codex` จะเป็น Codex เท่านั้นเมื่อมีการรองรับ Codex",
+ "scope": {
+ "project": "โปรเจกต์นี้",
+ "user": "ส่วนตัว"
+ },
+ "searchPlaceholder": "ค้นหาตามชื่อสกิลหรือสิ่งที่ช่วยได้...",
+ "sections": {
+ "personal": {
+ "description": "นิสัยและคำแนะนำที่คุณต้องการให้มีทุกที่",
+ "title": "สกิลส่วนตัว"
+ },
+ "project": {
+ "description": "ขั้นตอนการทำงานที่เหมาะกับโค้ดเบสนี้เท่านั้น",
+ "title": "สกิลโปรเจกต์"
+ }
+ },
+ "sort": {
+ "label": "เรียงลำดับสกิล",
+ "name": "ชื่อ",
+ "recent": "ล่าสุด"
+ },
+ "status": {
+ "hasScripts": "มีสคริปต์ จึงควรตรวจสอบอย่างรอบคอบ",
+ "needsAttention": "ต้องดูแลก่อนที่คุณจะพึ่งพาได้",
+ "ready": "พร้อมใช้งาน"
+ },
+ "success": {
+ "created": "สร้างสกิลสำเร็จ",
+ "imported": "นำเข้าสกิลสำเร็จ",
+ "saved": "บันทึกสกิลสำเร็จ"
+ }
+ },
+ "pluginDetail": {
+ "unknown": "ไม่ทราบ",
+ "metadata": {
+ "author": "ผู้สร้าง",
+ "category": "หมวดหมู่",
+ "source": "แหล่งที่มา",
+ "version": "เวอร์ชัน",
+ "capabilities": "ความสามารถ",
+ "installs": "การติดตั้ง"
+ },
+ "scope": {
+ "label": "ขอบเขต:",
+ "options": {
+ "user": "ผู้ใช้ (ทั่วทั้งระบบ)",
+ "project": "โปรเจกต์ (ใช้ร่วมกัน)",
+ "local": "ในเครื่อง (ถูก gitignore)"
+ }
+ },
+ "links": {
+ "homepage": "หน้าแรก",
+ "contact": "ติดต่อ"
+ },
+ "readme": {
+ "loading": "กำลังโหลด README...",
+ "empty": "ไม่มี README"
+ }
+ },
+ "skillImport": {
+ "title": "นำเข้าสกิล",
+ "description": "เลือกโฟลเดอร์สกิลที่มีอยู่ ตรวจสอบสิ่งที่จะคัดลอก จากนั้นนำเข้าไปยังตำแหน่งสกิลที่รองรับตำแหน่งใดตำแหน่งหนึ่งของคุณ",
+ "steps": {
+ "chooseFolder": {
+ "title": "1. เลือกโฟลเดอร์สกิล",
+ "description": "ควรเป็นโฟลเดอร์ที่มีไฟล์ `SKILL.md`, `Skill.md` หรือ `skill.md` อยู่แล้ว"
+ },
+ "location": {
+ "title": "2. กำหนดว่าควรอยู่ที่ใด",
+ "description": "สกิลส่วนตัวใช้งานได้ทุกที่ สกิลโปรเจกต์จะแสดงเฉพาะในโค้ดเบสเดียวเท่านั้น"
+ }
+ },
+ "fields": {
+ "sourceFolder": "โฟลเดอร์ต้นทาง",
+ "destinationFolderName": "ชื่อโฟลเดอร์ปลายทาง",
+ "audience": "ใครใช้ได้บ้าง",
+ "storage": "เก็บไว้ที่ใด"
+ },
+ "placeholders": {
+ "defaultFolderName": "ค่าเริ่มต้นเป็นชื่อโฟลเดอร์ต้นทาง"
+ },
+ "actions": {
+ "browse": "เรียกดู",
+ "cancel": "ยกเลิก",
+ "preparing": "กำลังเตรียม...",
+ "reviewAndImport": "ตรวจสอบและนำเข้า",
+ "importSkill": "นำเข้าสกิล",
+ "backToImport": "กลับไปนำเข้า"
+ },
+ "scope": {
+ "user": "ผู้ใช้",
+ "project": "โปรเจกต์: {{project}}",
+ "projectUnavailable": "ไม่สามารถใช้โปรเจกต์ได้"
+ },
+ "rootSuffix": {
+ "codexOnly": " - Codex เท่านั้น",
+ "shared": " - ใช้ร่วมกัน"
+ },
+ "reviewHint": "ตรวจสอบไฟล์ที่คัดลอกก่อน จากนั้นยืนยันการนำเข้าในขั้นตอนถัดไป",
+ "reviewLabel": "กำลังนำเข้าสกิลนี้",
+ "errors": {
+ "missingSkillFile": "โฟลเดอร์นี้ยังไม่ดูเหมือนสกิล ต้องมีไฟล์ SKILL.md, Skill.md หรือ skill.md",
+ "symbolicLinks": "โฟลเดอร์นี้มีลิงก์สัญลักษณ์ นำเข้าไฟล์จริงแทนลิงก์",
+ "tooManyFiles": "โฟลเดอร์สกิลนี้ใหญ่เกินกว่าจะนำเข้าในครั้งเดียว ลบไฟล์ส่วนเกินแล้วลองอีกครั้ง",
+ "tooLarge": "โฟลเดอร์สกิลนี้ใหญ่เกินกว่าจะนำเข้าได้อย่างปลอดภัย ลดขนาดแอสเซตขนาดใหญ่แล้วลองอีกครั้ง",
+ "invalidFolderName": "เลือกชื่อโฟลเดอร์ปลายทางที่ง่ายกว่าโดยใช้ตัวอักษร ตัวเลข จุด ขีดกลาง หรือขีดล่าง",
+ "mustBeDirectory": "เลือกโฟลเดอร์เพื่อนำเข้า ไม่ใช่ไฟล์เดียว",
+ "reviewFailed": "ตรวจสอบการเปลี่ยนแปลงการนำเข้าไม่สำเร็จ",
+ "importFailed": "นำเข้าสกิลไม่สำเร็จ"
+ }
+ },
+ "mcpPanel": {
+ "sort": {
+ "nameAsc": "ชื่อ A→Z",
+ "nameDesc": "ชื่อ Z→A",
+ "toolsDesc": "เครื่องมือมากที่สุด"
+ },
+ "health": {
+ "title": "สถานะการทำงาน MCP",
+ "checkingViaRuntime": "กำลังตรวจสอบเซิร์ฟเวอร์ MCP ที่ติดตั้งผ่าน {{runtime}} ...",
+ "lastChecked": "ตรวจสอบล่าสุด {{time}}",
+ "description": "รันการวินิจฉัยจากหน้านี้เพื่อยืนยันการเชื่อมต่อ MCP ที่ติดตั้งไว้",
+ "checking": "กำลังตรวจสอบ...",
+ "checkStatus": "ตรวจสอบสถานะ"
+ },
+ "diagnostics": {
+ "title": "การวินิจฉัย MCP ของรันไทม์",
+ "serversCount": "{{count}} เซิร์ฟเวอร์",
+ "serversCount_one": "{{count}} เซิร์ฟเวอร์",
+ "serversCount_other": "{{count}} เซิร์ฟเวอร์",
+ "waiting": "กำลังรอผลการวินิจฉัย...",
+ "disableReasons": {
+ "checkingRuntimeStatus": "กำลังตรวจสอบสถานะรันไทม์...",
+ "checkingRuntimeAvailability": "กำลังตรวจสอบความพร้อมใช้งานของรันไทม์...",
+ "runtimeFailedToStart": "พบรันไทม์ที่ตั้งค่าไว้แต่เริ่มต้นไม่สำเร็จ เปิดแดชบอร์ดเพื่อซ่อมแซมหรือติดตั้งใหม่",
+ "runtimeRequired": "ต้องใช้รันไทม์ที่ตั้งค่าไว้ ติดตั้งหรือซ่อมแซมจากแดชบอร์ด"
+ },
+ "serversCount_few": "{{count}} เซิร์ฟเวอร์",
+ "serversCount_many": "{{count}} เซิร์ฟเวอร์"
+ },
+ "searchPlaceholder": "ค้นหาเซิร์ฟเวอร์ MCP...",
+ "runtime": {
+ "notAvailable": "{{runtime}} ไม่พร้อมใช้งาน",
+ "notInstalled": "{{runtime}} ยังไม่ได้ติดตั้ง",
+ "requiredDescription": "การตรวจสอบสถานะ MCP ต้องใช้ {{runtime}} ไปที่แดชบอร์ดเพื่อติดตั้งหรือซ่อมแซม"
+ },
+ "empty": {
+ "searchTitle": "ไม่พบเซิร์ฟเวอร์",
+ "title": "ไม่มีเซิร์ฟเวอร์ MCP ให้ใช้งาน",
+ "searchDescription": "ลองคำค้นหาอื่น",
+ "description": "กลับมาดูใหม่ภายหลังสำหรับเซิร์ฟเวอร์ใหม่"
+ },
+ "loadMore": "โหลดเพิ่มเติม"
+ },
+ "apiKeys": {
+ "description": "จัดเก็บ API key อย่างปลอดภัยเพื่อกรอกอัตโนมัติเมื่อติดตั้งเซิร์ฟเวอร์ MCP",
+ "storage": {
+ "osKeychain": "คีย์ถูกเข้ารหัสผ่าน {{backend}} และจัดเก็บด้วยสิทธิ์ไฟล์ที่จำกัด (เจ้าของเท่านั้น)",
+ "localEncryption": "ไม่สามารถใช้ keychain ของระบบปฏิบัติการได้ - คีย์ถูกเข้ารหัสในเครื่องด้วย AES-256 เพื่อการป้องกันที่แข็งแกร่งขึ้น ติดตั้งบริการ keyring (gnome-keyring, kwallet)"
+ },
+ "actions": {
+ "add": "เพิ่ม API Key",
+ "addFirst": "เพิ่มคีย์แรกของคุณ",
+ "edit": "แก้ไข",
+ "copied": "คัดลอกแล้ว!",
+ "copyEnvVarName": "คัดลอกชื่อตัวแปรสภาพแวดล้อม",
+ "confirmDelete": "คลิกอีกครั้งเพื่อยืนยัน",
+ "delete": "ลบ"
+ },
+ "empty": {
+ "title": "ยังไม่มี API key ที่บันทึกไว้",
+ "description": "เพิ่มคีย์เพื่อกรอกตัวแปรสภาพแวดล้อมอัตโนมัติเมื่อติดตั้งเซิร์ฟเวอร์ MCP"
+ },
+ "form": {
+ "addTitle": "เพิ่ม API Key",
+ "editTitle": "แก้ไข API Key",
+ "addDescription": "จัดเก็บ API key เพื่อกรอกอัตโนมัติในการติดตั้งเซิร์ฟเวอร์ MCP",
+ "editDescription": "อัปเดตรายละเอียดคีย์ คุณต้องป้อนค่าใหม่อีกครั้ง",
+ "keychainUnavailable": "ไม่สามารถใช้ keychain ของระบบปฏิบัติการได้ - คีย์ถูกเข้ารหัสด้วย AES-256 ในเครื่อง ติดตั้ง gnome-keyring เพื่อการป้องกันระดับระบบปฏิบัติการ",
+ "name": "ชื่อ",
+ "namePlaceholder": "เช่น OpenAI Production",
+ "environmentVariableName": "ชื่อตัวแปรสภาพแวดล้อม",
+ "envVarPlaceholder": "เช่น OPENAI_API_KEY",
+ "value": "ค่า",
+ "reenterValue": "ป้อนค่าคีย์อีกครั้ง",
+ "valuePlaceholder": "sk-...",
+ "scope": "ขอบเขต",
+ "userScopeLabel": "ผู้ใช้ (ทั่วทั้งระบบ)",
+ "projectScopeLabel": "โปรเจกต์: {{project}}",
+ "projectUnavailable": "ไม่สามารถใช้โปรเจกต์ได้",
+ "boundTo": "ผูกกับ {{path}}",
+ "cancel": "ยกเลิก",
+ "saving": "กำลังบันทึก...",
+ "update": "อัปเดต",
+ "save": "บันทึก",
+ "errors": {
+ "invalidEnvVarFormat": "ใช้ตัวอักษร ตัวเลข ขีดล่าง ต้องเริ่มต้นด้วยตัวอักษรหรือขีดล่าง",
+ "nameRequired": "ต้องระบุชื่อ",
+ "envVarRequired": "ต้องระบุชื่อตัวแปรสภาพแวดล้อม",
+ "invalidEnvVar": "ชื่อตัวแปรสภาพแวดล้อมไม่ถูกต้อง",
+ "valueRequired": "ต้องระบุค่าคีย์",
+ "projectScopeRequiresProject": "API key ที่กำหนดขอบเขตโปรเจกต์ต้องมีโปรเจกต์ที่ใช้งานอยู่",
+ "saveFailed": "บันทึกไม่สำเร็จ"
+ }
+ }
+ },
+ "skillReview": {
+ "title": "ตรวจสอบการเปลี่ยนแปลงสกิล",
+ "description": "{{reviewLabel}} แสดงตัวอย่างการเปลี่ยนแปลงในระบบไฟล์ก่อน จะไม่มีการเขียนใด ๆ จนกว่าคุณจะยืนยันด้านล่าง",
+ "noPreview": "ไม่มีตัวอย่างให้แสดง",
+ "confirmPromptPrefix": "ตรวจสอบ diff ด้านล่าง จากนั้นใช้",
+ "confirmPromptSuffix": "เพื่อใช้การเปลี่ยนแปลงเหล่านี้",
+ "noChanges": "ยังไม่พบการเปลี่ยนแปลงไฟล์",
+ "binaryBadge": "ไบนารี",
+ "binaryPreviewHidden": "ไม่แสดงตัวอย่างไฟล์ไบนารี ไฟล์จะถูกคัดลอกตามเดิม",
+ "summary": {
+ "fileChanges": "เปลี่ยนแปลงไฟล์ {{count}} รายการ",
+ "fileChanges_one": "เปลี่ยนแปลงไฟล์ {{count}} รายการ",
+ "fileChanges_other": "เปลี่ยนแปลงไฟล์ {{count}} รายการ",
+ "new": "ใหม่ {{count}} รายการ",
+ "updated": "อัปเดต {{count}} รายการ",
+ "removed": "ลบ {{count}} รายการ",
+ "binary": "ไบนารี {{count}} รายการ",
+ "fileChanges_few": "เปลี่ยนแปลงไฟล์ {{count}} รายการ",
+ "fileChanges_many": "เปลี่ยนแปลงไฟล์ {{count}} รายการ"
+ }
+ },
+ "mcpCard": {
+ "toolsCount": "{{count}} เครื่องมือ",
+ "toolsCount_one": "{{count}} เครื่องมือ",
+ "toolsCount_other": "{{count}} เครื่องมือ",
+ "envCount": "{{count}} ตัวแปร",
+ "envCount_one": "{{count}} ตัวแปร",
+ "envCount_other": "{{count}} ตัวแปร",
+ "auth": "การยืนยันตัวตน",
+ "byAuthor": "โดย {{author}}",
+ "hosting": {
+ "remote": "ระยะไกล",
+ "local": "ในเครื่อง",
+ "both": "ทั้งสอง"
+ },
+ "toolsCount_few": "{{count}} เครื่องมือ",
+ "toolsCount_many": "{{count}} เครื่องมือ",
+ "envCount_few": "{{count}} ตัวแปร",
+ "envCount_many": "{{count}} ตัวแปร",
+ "repository": "ที่เก็บโค้ด",
+ "website": "เว็บไซต์"
+ },
+ "installButton": {
+ "installing": "กำลังติดตั้ง...",
+ "removing": "กำลังลบ...",
+ "done": "เสร็จสิ้น",
+ "retry": "ลองอีกครั้ง",
+ "uninstall": "ถอนการติดตั้ง",
+ "install": "ติดตั้ง"
+ },
+ "pluginCard": {
+ "official": "ทางการ"
+ }
+}
diff --git a/src/features/localization/renderer/locales/th/report.json b/src/features/localization/renderer/locales/th/report.json
new file mode 100644
index 00000000..8124ece1
--- /dev/null
+++ b/src/features/localization/renderer/locales/th/report.json
@@ -0,0 +1,217 @@
+{
+ "cost": {
+ "breakdownTitle": "รายละเอียดต้นทุน (ต่อ 1M โทเค็น)",
+ "cacheRead": "อ่านแคช",
+ "cacheWrite": "เขียนแคช",
+ "cost": "ต้นทุน",
+ "input": "อินพุต",
+ "noCommits": "ไม่มีคอมมิต",
+ "noLinesChanged": "ไม่มีบรรทัดที่เปลี่ยน",
+ "output": "เอาต์พุต",
+ "parent": "หลัก: {{cost}}",
+ "parentCost": "ต้นทุนหลัก",
+ "perCommit": "ต่อคอมมิต",
+ "perCommitFormula": "ต้นทุนรวม ÷ {{count}} คอมมิต",
+ "perCommitFormula_few": "ต้นทุนรวม ÷ {{count}} คอมมิต",
+ "perCommitFormula_many": "ต้นทุนรวม ÷ {{count}} คอมมิต",
+ "perCommitFormula_one": "ต้นทุนรวม ÷ {{count}} คอมมิต",
+ "perCommitFormula_other": "ต้นทุนรวม ÷ {{count}} คอมมิต",
+ "perLineChanged": "ต่อบรรทัดที่เปลี่ยน",
+ "perLineFormula": "ต้นทุนรวม ÷ {{count}} บรรทัด",
+ "perLineFormula_few": "ต้นทุนรวม ÷ {{count}} บรรทัด",
+ "perLineFormula_many": "ต้นทุนรวม ÷ {{count}} บรรทัด",
+ "perLineFormula_one": "ต้นทุนรวม ÷ {{count}} บรรทัด",
+ "perLineFormula_other": "ต้นทุนรวม ÷ {{count}} บรรทัด",
+ "subagent": "เอเจนต์ย่อย: {{cost}}",
+ "subagentCost": "ต้นทุนเอเจนต์ย่อย",
+ "title": "การวิเคราะห์ต้นทุน",
+ "total": "รวม"
+ },
+ "insights": {
+ "agent": "เอเจนต์",
+ "agent_few": "เอเจนต์",
+ "agent_many": "เอเจนต์",
+ "agent_one": "เอเจนต์",
+ "agent_other": "เอเจนต์",
+ "agentTree": "แผนผังเอเจนต์ ({{count}} {{unit}})",
+ "background": "(เบื้องหลัง)",
+ "bashCommands": "คำสั่ง Bash",
+ "outOfScopeFindings": "สิ่งที่พบนอกขอบเขต ({{count}})",
+ "questionsAsked": "คำถามที่ถาม ({{count}})",
+ "repeated": "ซ้ำ",
+ "skillsInvoked": "สกิลที่เรียกใช้ ({{count}})",
+ "taskDispatches": "การจ่ายงาน ({{count}})",
+ "tasksCreated": "งานที่สร้าง ({{count}})",
+ "teamMode": "โหมดทีม",
+ "teams": "ทีม: {{teams}}",
+ "title": "ข้อมูลเชิงลึกของเซสชัน",
+ "total": "รวม",
+ "unique": "ไม่ซ้ำ",
+ "skillsInvoked_few": "สกิลที่เรียกใช้ ({{count}})",
+ "skillsInvoked_many": "สกิลที่เรียกใช้ ({{count}})",
+ "skillsInvoked_one": "สกิลที่เรียกใช้ ({{count}})",
+ "skillsInvoked_other": "สกิลที่เรียกใช้ ({{count}})",
+ "taskDispatches_few": "การจ่ายงาน ({{count}})",
+ "taskDispatches_many": "การจ่ายงาน ({{count}})",
+ "taskDispatches_one": "การจ่ายงาน ({{count}})",
+ "taskDispatches_other": "การจ่ายงาน ({{count}})",
+ "tasksCreated_few": "งานที่สร้าง ({{count}})",
+ "tasksCreated_many": "งานที่สร้าง ({{count}})",
+ "tasksCreated_one": "งานที่สร้าง ({{count}})",
+ "tasksCreated_other": "งานที่สร้าง ({{count}})",
+ "questionsAsked_few": "คำถามที่ถาม ({{count}})",
+ "questionsAsked_many": "คำถามที่ถาม ({{count}})",
+ "questionsAsked_one": "คำถามที่ถาม ({{count}})",
+ "questionsAsked_other": "คำถามที่ถาม ({{count}})",
+ "agentTree_few": "แผนผังเอเจนต์ ({{count}} {{unit}})",
+ "agentTree_many": "แผนผังเอเจนต์ ({{count}} {{unit}})",
+ "agentTree_one": "แผนผังเอเจนต์ ({{count}} {{unit}})",
+ "agentTree_other": "แผนผังเอเจนต์ ({{count}} {{unit}})",
+ "outOfScopeFindings_few": "สิ่งที่พบนอกขอบเขต ({{count}})",
+ "outOfScopeFindings_many": "สิ่งที่พบนอกขอบเขต ({{count}})",
+ "outOfScopeFindings_one": "สิ่งที่พบนอกขอบเขต ({{count}})",
+ "outOfScopeFindings_other": "สิ่งที่พบนอกขอบเขต ({{count}})",
+ "keyTakeaways": "ประเด็นสำคัญ"
+ },
+ "quality": {
+ "chars": "อักขระ",
+ "corrections": "การแก้ไข",
+ "failed": "ล้มเหลว",
+ "fileReadRedundancy": "ความซ้ำซ้อนในการอ่านไฟล์",
+ "firstMessage": "ข้อความแรก",
+ "firstRun": "การรันครั้งแรก",
+ "frictionRate": "อัตราความติดขัด",
+ "lastRun": "การรันครั้งล่าสุด",
+ "messagesBeforeWork": "ข้อความก่อนเริ่มงาน",
+ "passed": "ผ่าน",
+ "promptQuality": "คุณภาพพรอมต์",
+ "readsPerUniqueFile": "การอ่าน/ไฟล์ไม่ซ้ำ",
+ "snapshot": "สแนปช็อต",
+ "snapshot_few": "สแนปช็อต",
+ "snapshot_many": "สแนปช็อต",
+ "snapshot_one": "สแนปช็อต",
+ "snapshot_other": "สแนปช็อต",
+ "startupOverhead": "ค่าใช้จ่ายตอนเริ่มต้น",
+ "testProgression": "ความคืบหน้าการทดสอบ",
+ "title": "สัญญาณคุณภาพ",
+ "tokensBeforeWork": "โทเค็นก่อนเริ่มงาน",
+ "totalReads": "การอ่านทั้งหมด",
+ "uniqueFiles": "ไฟล์ไม่ซ้ำ",
+ "userMessages": "ข้อความผู้ใช้",
+ "percentOfTotal": "% ของทั้งหมด"
+ },
+ "tokens": {
+ "apiCalls": "การเรียก API",
+ "cacheCreate": "สร้างแคช",
+ "cacheEfficiency": "ประสิทธิภาพแคช",
+ "cacheRead": "อ่านแคช",
+ "cacheReadPct": "% อ่านแคช",
+ "coldStart": "Cold Start",
+ "cost": "ต้นทุน",
+ "input": "อินพุต",
+ "model": "โมเดล",
+ "no": "ไม่",
+ "output": "เอาต์พุต",
+ "readWriteRatio": "อัตราส่วน R/W",
+ "title": "การใช้โทเค็น",
+ "total": "รวม",
+ "yes": "ใช่"
+ },
+ "subagents": {
+ "title": "เอเจนต์ย่อย",
+ "metrics": {
+ "count": "จำนวน",
+ "totalTokens": "โทเค็นทั้งหมด",
+ "totalDuration": "ระยะเวลาทั้งหมด",
+ "totalCost": "ต้นทุนทั้งหมด"
+ },
+ "table": {
+ "description": "คำอธิบาย",
+ "type": "ประเภท",
+ "tokens": "โทเค็น",
+ "duration": "ระยะเวลา",
+ "cost": "ต้นทุน"
+ }
+ },
+ "overview": {
+ "title": "ภาพรวม",
+ "yes": "ใช่",
+ "no": "ไม่",
+ "metrics": {
+ "duration": "ระยะเวลา",
+ "messages": "ข้อความ",
+ "contextUsage": "การใช้คอนเท็กซ์",
+ "compactions": "การบีบอัด",
+ "branch": "สาขา",
+ "subagents": "เอเจนต์ย่อย",
+ "project": "โปรเจกต์",
+ "sessionId": "รหัสเซสชัน"
+ }
+ },
+ "timeline": {
+ "title": "ไทม์ไลน์และกิจกรรม",
+ "idleAnalysis": "การวิเคราะห์ช่วงว่าง",
+ "metrics": {
+ "idleGaps": "ช่วงว่าง",
+ "totalIdle": "ช่วงว่างทั้งหมด",
+ "activeTime": "เวลาทำงาน",
+ "idlePercent": "% ว่าง"
+ },
+ "modelSwitches": "การสลับโมเดล ({{count}})",
+ "modelSwitches_one": "การสลับโมเดล ({{count}})",
+ "modelSwitches_other": "การสลับโมเดล ({{count}})",
+ "messageNumber": "ข้อความ #{{number}}",
+ "keyEvents": "เหตุการณ์สำคัญ",
+ "modelSwitches_few": "การสลับโมเดล ({{count}})",
+ "modelSwitches_many": "การสลับโมเดล ({{count}})"
+ },
+ "tools": {
+ "title": "การใช้เครื่องมือ",
+ "summary": "เรียกทั้งหมด {{formattedCount}} ครั้ง จาก {{toolCount}} เครื่องมือ",
+ "columns": {
+ "tool": "เครื่องมือ",
+ "calls": "การเรียก",
+ "errors": "ข้อผิดพลาด",
+ "successPercent": "% สำเร็จ",
+ "health": "สถานะ"
+ }
+ },
+ "git": {
+ "title": "กิจกรรม Git",
+ "commits": "คอมมิต",
+ "pushes": "พุช",
+ "linesAdded": "บรรทัดที่เพิ่ม",
+ "linesRemoved": "บรรทัดที่ลบ",
+ "branchesCreated": "สาขาที่สร้าง"
+ },
+ "friction": {
+ "title": "สัญญาณความติดขัด",
+ "rate": "อัตราความติดขัด: {{rate}}%",
+ "correctionsCount": "การแก้ไข {{count}} ครั้ง",
+ "correctionsCount_one": "การแก้ไข {{count}} ครั้ง",
+ "corrections": "การแก้ไข",
+ "thrashingSignals": "สัญญาณการวนซ้ำ",
+ "repeatedBashCommands": "คำสั่ง Bash ที่ซ้ำ",
+ "reworkedFiles": "ไฟล์ที่แก้ซ้ำ (3+ ครั้ง)",
+ "correctionsCount_few": "การแก้ไข {{count}} ครั้ง",
+ "correctionsCount_many": "การแก้ไข {{count}} ครั้ง",
+ "correctionsCount_other": "การแก้ไข {{count}} ครั้ง"
+ },
+ "errors": {
+ "title": "ข้อผิดพลาด",
+ "permissionDenied": "ปฏิเสธสิทธิ์",
+ "messageIndex": "ข้อความ #{{index}}",
+ "input": "อินพุต",
+ "error": "ข้อผิดพลาด",
+ "count": "ข้อผิดพลาด {{count}} รายการ",
+ "count_one": "ข้อผิดพลาด {{count}} รายการ",
+ "permissionDenialCount": "การปฏิเสธสิทธิ์ {{count}} ครั้ง",
+ "permissionDenialCount_one": "การปฏิเสธสิทธิ์ {{count}} ครั้ง",
+ "count_few": "ข้อผิดพลาด {{count}} รายการ",
+ "count_many": "ข้อผิดพลาด {{count}} รายการ",
+ "count_other": "ข้อผิดพลาด {{count}} รายการ",
+ "permissionDenialCount_few": "การปฏิเสธสิทธิ์ {{count}} ครั้ง",
+ "permissionDenialCount_many": "การปฏิเสธสิทธิ์ {{count}} ครั้ง",
+ "permissionDenialCount_other": "การปฏิเสธสิทธิ์ {{count}} ครั้ง"
+ }
+}
diff --git a/src/features/localization/renderer/locales/th/settings.json b/src/features/localization/renderer/locales/th/settings.json
new file mode 100644
index 00000000..eaeeb210
--- /dev/null
+++ b/src/features/localization/renderer/locales/th/settings.json
@@ -0,0 +1,994 @@
+{
+ "tabs": {
+ "advanced": {
+ "description": "ตัวเลือกสำหรับผู้ใช้ขั้นสูง: ส่งออก/นำเข้าการตั้งค่า, รีเซ็ตค่าเริ่มต้น และแก้ไขการกำหนดค่าดิบ",
+ "label": "ขั้นสูง"
+ },
+ "general": {
+ "description": "การตั้งค่าหลักของแอป เช่น ธีม, ภาษา, ความหนาแน่นในการแสดงผล และพฤติกรรมตอนเริ่มต้น",
+ "label": "ทั่วไป"
+ },
+ "infoAriaLabel": "{{label}} คืออะไร?",
+ "notifications": {
+ "description": "ควบคุมว่าจะได้รับการแจ้งเตือนเกี่ยวกับกิจกรรมของเอเจนต์ การทำงานเสร็จ และข้อผิดพลาดเมื่อใดและอย่างไร",
+ "label": "การแจ้งเตือน"
+ }
+ },
+ "view": {
+ "description": "จัดการการตั้งค่าแอปของคุณ",
+ "loading": "กำลังโหลดการตั้งค่า...",
+ "title": "การตั้งค่า"
+ },
+ "runtimeProvider": {
+ "actions": {
+ "cancel": "ยกเลิก",
+ "test": "ทดสอบ"
+ },
+ "defaults": {
+ "allProjects": "ทุกโปรเจกต์",
+ "allProjectsHint": "การทดสอบใช้ {{project}} ค่าเริ่มต้นจะใช้เว้นแต่โปรเจกต์มีการแทนที่",
+ "loadingContexts": "กำลังโหลดบริบท...",
+ "projectHint": "การบันทึกจะแทนที่เฉพาะ {{project}} เท่านั้น",
+ "projectOverrideContext": "บริบทการแทนที่โปรเจกต์",
+ "scopeDescriptionAllProjects": "ค่าเริ่มต้นสำหรับทุกโปรเจกต์ที่ไม่มีการแทนที่ OpenCode ของตัวเอง",
+ "scopeDescriptionProject": "แทนที่เฉพาะโปรเจกต์ที่เลือก ทีมที่กำลังทำงานจะไม่ถูกเปลี่ยน",
+ "selectProjectContext": "เลือกบริบทโปรเจกต์",
+ "selectProjectHint": "เลือกโปรเจกต์ก่อนทดสอบโมเดลในเครื่องหรือบันทึกค่าเริ่มต้น",
+ "selectValidationContext": "เลือกบริบทการตรวจสอบ",
+ "setAllProjectsDefault": "ตั้งค่าเริ่มต้นทุกโปรเจกต์",
+ "setProjectDefault": "ตั้งค่าเริ่มต้นโปรเจกต์",
+ "thisProject": "โปรเจกต์นี้",
+ "title": "ค่าเริ่มต้น OpenCode",
+ "validationContext": "บริบทการตรวจสอบ"
+ },
+ "diagnostics": {
+ "copied": "คัดลอกการวินิจฉัยแล้ว",
+ "copiedShort": "คัดลอกแล้ว",
+ "copy": "คัดลอกการวินิจฉัย",
+ "hints": "คำใบ้",
+ "likelyCause": "สาเหตุที่เป็นไปได้:",
+ "windowsSymlinkAdminHint": "Windows: รัน Agent Teams AI ในฐานะผู้ดูแลระบบ"
+ },
+ "models": {
+ "alreadyDefault": "นี่เป็นค่าเริ่มต้น OpenCode ที่เลือกอยู่แล้ว",
+ "empty": "ไม่พบโมเดล",
+ "emptyFree": "ไม่พบโมเดลฟรี",
+ "emptyRecommended": "ไม่พบโมเดลที่แนะนำ",
+ "emptyRecommendedFree": "ไม่พบโมเดลฟรีที่แนะนำ",
+ "freeOnly": "ฟรีเท่านั้น",
+ "launchableDescription": "เส้นทางที่รู้จักจากการตั้งค่า OpenCode, โมเดลฟรีในตัว และค่าเริ่มต้นปัจจุบัน เส้นทางในเครื่องต้องผ่านการทดสอบสำเร็จก่อนจึงจะพร้อมสำหรับการเริ่มทีม",
+ "launchableTitle": "เส้นทางโมเดล OpenCode",
+ "loadingRoutes": "กำลังโหลดเส้นทางโมเดล OpenCode...",
+ "noRoutesMatch": "ไม่มีเส้นทางโมเดล OpenCode ที่ตรงกับ \"{{query}}\"",
+ "noneReported": "ยังไม่มีการรายงานเส้นทางโมเดล OpenCode ตั้งค่าเส้นทางในเครื่องใน OpenCode หรือใช้แท็บผู้ให้บริการเพื่อตรวจสอบผู้ให้บริการในแคตตาล็อก",
+ "recommendedOnly": "ที่แนะนำเท่านั้น",
+ "searchPlaceholder": "ค้นหาโมเดล",
+ "selectProjectBeforeTesting": "เลือกบริบทโปรเจกต์ก่อนทดสอบโมเดล",
+ "selectProjectBeforeTestingDefaults": "เลือกบริบทโปรเจกต์ก่อนทดสอบหรือบันทึกค่าเริ่มต้น OpenCode",
+ "testInProgress": "การทดสอบโมเดลกำลังทำงานอยู่แล้ว",
+ "useInTeamPicker": "บันทึกสำหรับตัวเลือกทีม",
+ "validationContextRequired": "เลือกบริบทการตรวจสอบด้านบนเพื่อเปิดใช้งานการทดสอบและตั้งเป็นค่าเริ่มต้น การบันทึกสำหรับตัวเลือกทีมจะจัดเก็บเส้นทางสำหรับทีมใหม่เท่านั้น",
+ "actionsUnavailable": "การดำเนินการไม่พร้อมใช้งานชั่วคราว",
+ "defaultSaveInProgress": "กำลังบันทึกค่าเริ่มต้น OpenCode",
+ "routeUnavailableAuth": "ผู้ให้บริการนี้ต้องมีการยืนยันตัวตนก่อนจึงจะใช้โมเดลนี้ได้",
+ "routeUnavailableFailed": "เส้นทางโมเดลนี้ไม่ผ่านการทดสอบการทำงานครั้งล่าสุด",
+ "routeUnavailableGeneric": "เส้นทางโมเดลนี้ไม่สามารถใช้ได้ในขณะนี้",
+ "routeUnavailableUnknown": "โมเดลนี้เป็นค่าเริ่มต้น OpenCode ปัจจุบัน แต่ยังไม่พร้อมใช้งานในแคตตาล็อกสด"
+ },
+ "providers": {
+ "catalog": "แคตตาล็อกผู้ให้บริการ OpenCode",
+ "countFallback": "ผู้ให้บริการ OpenCode",
+ "description": "{{count}} ผู้ให้บริการที่เชื่อมต่อและแนะนำจะแสดงก่อน",
+ "loadMore": "โหลดผู้ให้บริการเพิ่มเติม",
+ "loading": "กำลังโหลดผู้ให้บริการ OpenCode",
+ "noMatches": "ไม่มีผู้ให้บริการที่ตรงกับการค้นหานั้น",
+ "noneReported": "ไม่มีการรายงานผู้ให้บริการ OpenCode จากรันไทม์ที่จัดการ",
+ "recommended": "แนะนำ",
+ "refreshCatalog": "รีเฟรชแคตตาล็อก",
+ "searchPlaceholder": "ค้นหาผู้ให้บริการ",
+ "description_few": "{{count}} ผู้ให้บริการที่เชื่อมต่อและแนะนำจะแสดงก่อน",
+ "description_many": "{{count}} ผู้ให้บริการที่เชื่อมต่อและแนะนำจะแสดงก่อน",
+ "description_one": "{{count}} ผู้ให้บริการที่เชื่อมต่อและแนะนำจะแสดงก่อน",
+ "description_other": "{{count}} ผู้ให้บริการที่เชื่อมต่อและแนะนำจะแสดงก่อน"
+ },
+ "setup": {
+ "loading": "กำลังโหลดการตั้งค่าผู้ให้บริการ..."
+ },
+ "summary": {
+ "defaultModel": "ค่าเริ่มต้น OpenCode: {{model}}",
+ "loading": "กำลังโหลดรันไทม์ OpenCode ที่จัดการ, ผู้ให้บริการที่เชื่อมต่อ และค่าเริ่มต้นของโมเดล...",
+ "source": "แหล่งที่มา: {{source}}",
+ "title": "รันไทม์ OpenCode"
+ },
+ "tabs": {
+ "models": "โมเดล",
+ "providers": "ผู้ให้บริการ"
+ },
+ "modelRoutes": {
+ "searchPlaceholder": "ค้นหาเส้นทางโมเดล"
+ },
+ "badges": {
+ "usedInTeamPicker": "บันทึกสำหรับตัวเลือกทีมแล้ว",
+ "free": "ฟรี",
+ "local": "ในเครื่อง",
+ "configured": "ตั้งค่าแล้ว",
+ "knownRoute": "เส้นทางที่รู้จัก",
+ "connected": "เชื่อมต่อแล้ว",
+ "verified": "ยืนยันแล้ว",
+ "needsTest": "ต้องทดสอบ",
+ "failed": "ล้มเหลว",
+ "unknown": "ไม่ทราบ",
+ "default": "ค่าเริ่มต้น"
+ },
+ "compatibleEndpoint": {
+ "baseUrlPlaceholder": "http://localhost:1234"
+ }
+ },
+ "general": {
+ "agentLanguage": {
+ "description": "ภาษาสำหรับการสื่อสารของเอเจนต์",
+ "descriptionWithDetected": "ภาษาสำหรับการสื่อสารของเอเจนต์ (ตรวจพบ: {{detected}})",
+ "emptyMessage": "ไม่พบภาษา",
+ "label": "ภาษา",
+ "searchPlaceholder": "ค้นหาภาษา...",
+ "selectPlaceholder": "เลือกภาษา...",
+ "title": "ภาษาเอเจนต์"
+ },
+ "appLanguage": {
+ "description": "ภาษาสำหรับอินเทอร์เฟซแอปพลิเคชัน",
+ "label": "ภาษา",
+ "title": "ภาษาแอป"
+ },
+ "appearance": {
+ "autoExpandAIGroups": {
+ "description": "ขยายแต่ละเทิร์นของการตอบกลับโดยอัตโนมัติเมื่อเปิดทรานสคริปต์หรือได้รับข้อความใหม่",
+ "label": "ขยายการตอบกลับของ AI โดยค่าเริ่มต้น"
+ },
+ "nativeTitleBar": {
+ "description": "ใช้กรอบหน้าต่างระบบเริ่มต้นแทนแถบชื่อแบบกำหนดเอง",
+ "label": "ใช้แถบชื่อดั้งเดิม",
+ "restartConfirm": {
+ "confirmLabel": "รีสตาร์ท",
+ "message": "แอปต้องรีสตาร์ทเพื่อใช้การเปลี่ยนแปลงแถบชื่อ รีสตาร์ทเลยหรือไม่?",
+ "title": "ต้องรีสตาร์ท"
+ }
+ },
+ "theme": {
+ "description": "เลือกธีมสีที่คุณต้องการ",
+ "label": "ธีม",
+ "options": {
+ "dark": "มืด",
+ "light": "สว่าง",
+ "system": "ระบบ"
+ }
+ },
+ "title": "รูปลักษณ์"
+ },
+ "browserAccess": {
+ "serverMode": {
+ "description": "เริ่มเซิร์ฟเวอร์ HTTP เพื่อเข้าถึง UI จากเบราว์เซอร์หรือฝังใน iframe",
+ "label": "เปิดใช้งานโหมดเซิร์ฟเวอร์"
+ },
+ "title": "การเข้าถึงผ่านเบราว์เซอร์"
+ },
+ "localClaudeRoot": {
+ "actions": {
+ "selectFolder": "เลือกโฟลเดอร์",
+ "selectFolderManually": "เลือกโฟลเดอร์ด้วยตนเอง",
+ "useAutoDetect": "ใช้การตรวจหาอัตโนมัติ",
+ "useFolder": "ใช้โฟลเดอร์",
+ "usePath": "ใช้เส้นทาง",
+ "useThisPath": "ใช้เส้นทางนี้",
+ "useWsl": "ใช้ Linux/WSL อยู่?"
+ },
+ "confirm": {
+ "noProjectsDir": {
+ "message": "โฟลเดอร์นี้ไม่มีไดเรกทอรี \"projects\" ดำเนินการต่อหรือไม่?",
+ "title": "ไม่พบไดเรกทอรี projects"
+ },
+ "notClaudeDir": {
+ "message": "โฟลเดอร์นี้ชื่อ \"{{folderName}}\" ไม่ใช่ \".claude\" ดำเนินการต่อหรือไม่?",
+ "title": "โฟลเดอร์ที่เลือกไม่ใช่ .claude"
+ },
+ "noWslPaths": {
+ "message": "ไม่พบ WSL distro ที่มีข้อมูล Claude โดยอัตโนมัติ เลือกโฟลเดอร์ด้วยตนเองหรือไม่?",
+ "title": "ไม่พบเส้นทาง Claude ใน WSL"
+ },
+ "wslNoProjectsDir": {
+ "message": "\"{{path}}\" ไม่มีไดเรกทอรี \"projects\" ดำเนินการต่อหรือไม่?",
+ "title": "เส้นทาง WSL ไม่มีไดเรกทอรี projects"
+ }
+ },
+ "current": {
+ "autoDetected": "ตรวจพบอัตโนมัติ: {{path}}",
+ "autoDetectedPath": "กำลังใช้เส้นทางที่ตรวจพบอัตโนมัติ",
+ "customPath": "กำลังใช้เส้นทางแบบกำหนดเอง",
+ "label": "รากในเครื่องปัจจุบัน"
+ },
+ "description": "เลือกว่าโฟลเดอร์ในเครื่องใดจะถูกใช้เป็นรากข้อมูล Claude ของคุณ",
+ "errors": {
+ "detectWslFailed": "ตรวจหาเส้นทางราก Claude ใน WSL ไม่สำเร็จ",
+ "loadFailed": "โหลดการตั้งค่าราก Claude ในเครื่องไม่สำเร็จ",
+ "updateFailed": "อัปเดตราก Claude ไม่สำเร็จ"
+ },
+ "title": "ราก Claude ในเครื่อง",
+ "wslModal": {
+ "closeAriaLabel": "ปิดหน้าต่างเส้นทาง WSL",
+ "description": "WSL distribution ที่ตรวจพบและตัวเลือกราก Claude",
+ "noProjectsDir": "ไม่พบไดเรกทอรี projects",
+ "title": "เลือกราก Claude ใน WSL"
+ }
+ },
+ "privacy": {
+ "telemetry": {
+ "description": "ช่วยปรับปรุงแอปโดยส่งข้อมูลการขัดข้องและประสิทธิภาพแบบไม่ระบุตัวตน",
+ "label": "ส่งรายงานการขัดข้อง"
+ },
+ "title": "ความเป็นส่วนตัว"
+ },
+ "server": {
+ "runningOn": "กำลังทำงานบน",
+ "standaloneModeDescription": "กำลังทำงานในโหมดสแตนด์อโลน เซิร์ฟเวอร์ HTTP ทำงานอยู่เสมอ การแจ้งเตือนของระบบไม่พร้อมใช้งาน - ทริกเกอร์การแจ้งเตือนจะถูกบันทึกในแอปเท่านั้น",
+ "title": "เซิร์ฟเวอร์"
+ },
+ "startup": {
+ "launchAtLogin": {
+ "description": "เริ่มแอปโดยอัตโนมัติเมื่อคุณเข้าสู่ระบบ",
+ "label": "เริ่มเมื่อเข้าสู่ระบบ"
+ },
+ "showDockIcon": {
+ "description": "แสดงไอคอนแอปใน dock (macOS)",
+ "label": "แสดงไอคอนใน dock"
+ },
+ "title": "การเริ่มต้น"
+ }
+ },
+ "notifications": {
+ "dev": {
+ "descriptionPrefix": "การแจ้งเตือนอาจไม่ทำงานในโหมดพัฒนา macOS ระบุแอปเป็น \"Electron\" (bundle ID",
+ "descriptionSuffix": ") แทนชื่อแอปสำหรับใช้งานจริง ตรวจสอบ System Settings > Notifications > Electron เพื่อยืนยันสิทธิ์",
+ "title": "โหมดพัฒนา"
+ },
+ "ignoredRepositories": {
+ "description": "การแจ้งเตือนจากที่เก็บโค้ดเหล่านี้จะถูกละเว้น",
+ "empty": "ไม่มีที่เก็บโค้ดที่ละเว้น",
+ "selectPlaceholder": "เลือกที่เก็บโค้ดที่จะละเว้น...",
+ "title": "ที่เก็บโค้ดที่ละเว้น"
+ },
+ "settings": {
+ "enabled": {
+ "description": "แสดงการแจ้งเตือนของระบบสำหรับข้อผิดพลาดและเหตุการณ์",
+ "label": "เปิดใช้งานการแจ้งเตือนของระบบ"
+ },
+ "sound": {
+ "description": "เล่นเสียงเมื่อมีการแจ้งเตือนปรากฏ",
+ "label": "เล่นเสียง"
+ },
+ "subagentErrors": {
+ "description": "ตรวจหาและแจ้งเตือนเกี่ยวกับข้อผิดพลาดในเซสชันเอเจนต์ย่อย",
+ "label": "รวมข้อผิดพลาดของเอเจนต์ย่อย"
+ },
+ "title": "การตั้งค่าการแจ้งเตือน"
+ },
+ "snooze": {
+ "clear": "ล้างการเลื่อน",
+ "description": "หยุดการแจ้งเตือนชั่วคราว",
+ "descriptionWithTime": "เลื่อนจนถึง {{time}}",
+ "label": "เลื่อนการแจ้งเตือน",
+ "options": {
+ "15": "15 นาที",
+ "30": "30 นาที",
+ "60": "1 ชั่วโมง",
+ "120": "2 ชั่วโมง",
+ "240": "4 ชั่วโมง",
+ "-1": "จนถึงพรุ่งนี้"
+ },
+ "selectDuration": "เลือกระยะเวลา..."
+ },
+ "taskCompletion": {
+ "description": "รับการแจ้งเตือนระบบปฏิบัติการเมื่อ Claude ทำงานเสร็จ - เสียง, แบนเนอร์ และป้ายบน Dock/แถบงาน ใช้งานได้บน macOS, Linux และ Windows",
+ "installPlugin": "ติดตั้งปลั๊กอิน claude-notifications-go",
+ "title": "การแจ้งเตือนเมื่องานเสร็จ"
+ },
+ "team": {
+ "allTasksCompleted": {
+ "description": "แจ้งเตือนเมื่อทุกงานในทีมถึงสถานะเสร็จสิ้น",
+ "label": "งานทั้งหมดเสร็จสิ้น"
+ },
+ "autoResumeOnRateLimit": {
+ "description": "เมื่อ Claude รายงานเวลารีเซ็ต ให้กำหนดการกระตุ้นติดตามผลสำหรับหัวหน้าทีมหลังจากขีดจำกัดรีเซ็ต",
+ "label": "ดำเนินการต่ออัตโนมัติหลังถึงขีดจำกัดอัตรา"
+ },
+ "clarifications": {
+ "description": "แสดงการแจ้งเตือนระบบปฏิบัติการเมื่องานต้องการข้อมูลจากคุณ",
+ "label": "การแจ้งเตือนการชี้แจงงาน"
+ },
+ "crossTeamMessage": {
+ "description": "แจ้งเตือนเมื่อมีข้อความมาจากอีกทีมหนึ่ง",
+ "label": "การแจ้งเตือนข้อความข้ามทีม"
+ },
+ "leadInbox": {
+ "description": "แจ้งเตือนเมื่อเพื่อนร่วมทีมส่งข้อความถึงหัวหน้าทีม",
+ "label": "การแจ้งเตือนกล่องข้อความหัวหน้าทีม"
+ },
+ "statusChange": {
+ "description": "แสดงการแจ้งเตือนระบบปฏิบัติการเมื่อสถานะของงานเปลี่ยนแปลง",
+ "label": "การแจ้งเตือนการเปลี่ยนสถานะงาน",
+ "onlySolo": {
+ "description": "แจ้งเตือนเฉพาะเมื่อทีมไม่มีเพื่อนร่วมทีม",
+ "label": "เฉพาะในโหมดเดี่ยว"
+ },
+ "statuses": {
+ "description": "สถานะเป้าหมายใดที่จะกระตุ้นการแจ้งเตือน",
+ "label": "แจ้งเตือนในสถานะเหล่านี้",
+ "options": {
+ "approved": "อนุมัติแล้ว",
+ "completed": "เสร็จสิ้น",
+ "deleted": "ลบแล้ว",
+ "in_progress": "เริ่มแล้ว",
+ "needsFix": "ต้องแก้ไข",
+ "pending": "รอดำเนินการ",
+ "review": "รีวิว"
+ }
+ }
+ },
+ "taskComments": {
+ "description": "แสดงการแจ้งเตือนระบบปฏิบัติการเมื่อเอเจนต์แสดงความคิดเห็นในงาน",
+ "label": "การแจ้งเตือนความคิดเห็นในงาน"
+ },
+ "taskCreated": {
+ "description": "แสดงการแจ้งเตือนระบบปฏิบัติการเมื่อมีการสร้างงานใหม่",
+ "label": "การแจ้งเตือนการสร้างงาน"
+ },
+ "teamLaunched": {
+ "description": "แจ้งเตือนเมื่อทีมเริ่มเสร็จและพร้อมใช้งาน",
+ "label": "การแจ้งเตือนการเริ่มทีม"
+ },
+ "title": "การแจ้งเตือนของทีม",
+ "toolApproval": {
+ "description": "แจ้งเตือนเมื่อเครื่องมือต้องการการอนุมัติจากคุณ (อนุญาต/ปฏิเสธ) ขณะที่แอปไม่ได้โฟกัส",
+ "label": "การแจ้งเตือนการอนุมัติเครื่องมือ"
+ },
+ "userInbox": {
+ "description": "แจ้งเตือนเมื่อเพื่อนร่วมทีมส่งข้อความถึงคุณ",
+ "label": "การแจ้งเตือนกล่องข้อความผู้ใช้"
+ }
+ },
+ "test": {
+ "action": "ส่งทดสอบ",
+ "description": "ส่งการแจ้งเตือนทดสอบเพื่อยืนยันการส่ง",
+ "failedToSend": "ส่งการแจ้งเตือนทดสอบไม่สำเร็จ",
+ "label": "การแจ้งเตือนทดสอบ",
+ "sending": "กำลังส่ง...",
+ "sent": "ส่งแล้ว!",
+ "unknownError": "ข้อผิดพลาดที่ไม่ทราบ"
+ }
+ },
+ "advanced": {
+ "about": {
+ "appIconAlt": "ไอคอนแอป",
+ "description": "ประกอบทีมเอเจนต์ AI ที่ทำงานอัตโนมัติแบบขนาน สื่อสารข้ามทีม และจัดการงานบนบอร์ด Kanban - พร้อมการรีวิวโค้ดในตัว การตรวจสอบกระบวนการแบบสด และการมองเห็นเครื่องมืออย่างเต็มที่",
+ "standalone": "สแตนด์อโลน",
+ "title": "เกี่ยวกับ",
+ "version": "เวอร์ชัน {{version}}"
+ },
+ "configuration": {
+ "editConfig": "แก้ไขการตั้งค่า",
+ "exportConfig": "ส่งออกการตั้งค่า",
+ "importConfig": "นำเข้าการตั้งค่า",
+ "openInEditor": "เปิดในตัวแก้ไข",
+ "resetToDefaults": "รีเซ็ตเป็นค่าเริ่มต้น",
+ "title": "การกำหนดค่า"
+ },
+ "updates": {
+ "available": "มี v{{version}}",
+ "check": "ตรวจสอบการอัปเดต",
+ "checking": "กำลังตรวจสอบ...",
+ "ready": "การอัปเดตพร้อมแล้ว",
+ "unknownVersion": "ไม่ทราบ",
+ "upToDate": "เป็นเวอร์ชันล่าสุด"
+ },
+ "appName": "Agent Teams AI"
+ },
+ "configEditor": {
+ "errors": {
+ "loadFailed": "โหลดการตั้งค่าไม่สำเร็จ",
+ "saveFailed": "บันทึกการตั้งค่าไม่สำเร็จ"
+ },
+ "footer": {
+ "autoSave": "การเปลี่ยนแปลงจะบันทึกอัตโนมัติหลังการแก้ไข",
+ "toClose": "เพื่อปิด",
+ "escapeKey": "Esc"
+ },
+ "loading": "กำลังโหลดการตั้งค่า...",
+ "status": {
+ "invalidJson": "JSON ไม่ถูกต้อง",
+ "saveFailed": "บันทึกล้มเหลว",
+ "saved": "บันทึกแล้ว",
+ "saving": "กำลังบันทึก..."
+ },
+ "title": "แก้ไขการกำหนดค่า"
+ },
+ "notificationTriggers": {
+ "add": {
+ "cancel": "ยกเลิก",
+ "submit": "เพิ่มทริกเกอร์",
+ "title": "เพิ่มทริกเกอร์แบบกำหนดเอง"
+ },
+ "builtin": {
+ "description": "ทริกเกอร์เริ่มต้นที่มาพร้อมกับแอปพลิเคชัน คุณสามารถเปิดหรือปิดใช้งานและปรับแต่งรูปแบบได้",
+ "title": "ทริกเกอร์ในตัว"
+ },
+ "card": {
+ "builtinBadge": "ในตัว",
+ "collapseAriaLabel": "ยุบ",
+ "deleteAriaLabel": "ลบทริกเกอร์",
+ "editNameAriaLabel": "แก้ไขชื่อ",
+ "expandAriaLabel": "ขยาย"
+ },
+ "color": {
+ "customHexTitle": "สี hex แบบกำหนดเอง",
+ "invalidHex": "hex ไม่ถูกต้อง"
+ },
+ "configuration": {
+ "alertIfGreaterThan": "แจ้งเตือนถ้า >",
+ "emptyPatternHint": "เว้นว่างไว้เพื่อจับคู่เนื้อหาทั้งหมด ใช้ไวยากรณ์ regex ของ JavaScript",
+ "errorStatusDescription": "ทริกเกอร์เมื่อการทำงานของเครื่องมือรายงานข้อผิดพลาด (is_error: true)",
+ "tokensUnit": "โทเค็น",
+ "matchPatternPlaceholder": "เช่น error|failed|exception"
+ },
+ "custom": {
+ "description": "สร้างทริกเกอร์ของคุณเองเพื่อรับการแจ้งเตือนสำหรับรูปแบบหรือผลลัพธ์เครื่องมือที่เจาะจง",
+ "empty": "ยังไม่ได้ตั้งค่าทริกเกอร์แบบกำหนดเอง",
+ "title": "ทริกเกอร์แบบกำหนดเอง"
+ },
+ "errors": {
+ "invalidRegexPattern": "รูปแบบ regex ไม่ถูกต้อง"
+ },
+ "fields": {
+ "contentType": "ประเภทเนื้อหา",
+ "matchField": "ฟิลด์ที่จับคู่",
+ "matchPattern": "รูปแบบที่จับคู่ (Regex)",
+ "scopeToolName": "ขอบเขต / ชื่อเครื่องมือ",
+ "scopeToolNameOptional": "ขอบเขต / ชื่อเครื่องมือ (ไม่บังคับ)",
+ "threshold": "เกณฑ์",
+ "tokenType": "ประเภทโทเค็น",
+ "triggerNamePlaceholder": "เช่น แจ้งเตือนเมื่อ Build ล้มเหลว",
+ "triggerNameRequired": "ชื่อทริกเกอร์ *"
+ },
+ "ignorePatterns": {
+ "hint": "กด Enter เพื่อเพิ่ม การแจ้งเตือนจะถูกข้ามหากมีรูปแบบใดตรงกัน",
+ "placeholder": "เพิ่ม regex ที่จะละเว้น...",
+ "removeAriaLabel": "ลบรูปแบบที่ละเว้น",
+ "summary": "ขั้นสูง: กฎการยกเว้น",
+ "title": "รูปแบบที่ละเว้น (ข้ามหากตรงกัน)"
+ },
+ "options": {
+ "contentTypes": {
+ "text": "ผลลัพธ์ข้อความ",
+ "thinking": "การคิด",
+ "tool_result": "ผลลัพธ์เครื่องมือ",
+ "tool_use": "การใช้เครื่องมือ"
+ },
+ "matchFields": {
+ "args": "อาร์กิวเมนต์",
+ "command": "คำสั่ง",
+ "content": "เนื้อหา",
+ "description": "คำอธิบาย",
+ "file_path": "เส้นทางไฟล์",
+ "fullInput": "อินพุตเต็ม (JSON)",
+ "glob": "ตัวกรอง Glob",
+ "new_string": "สตริงใหม่",
+ "old_string": "สตริงเก่า",
+ "path": "เส้นทาง",
+ "pattern": "รูปแบบ",
+ "prompt": "พรอมต์",
+ "query": "คำค้นหา",
+ "skill": "ชื่อสกิล",
+ "subagent_type": "ประเภทเอเจนต์ย่อย",
+ "text": "เนื้อหาข้อความ",
+ "thinking": "เนื้อหาการคิด",
+ "url": "URL"
+ },
+ "modes": {
+ "content_match": "รูปแบบเนื้อหา",
+ "error_status": "ข้อผิดพลาดการทำงาน",
+ "token_threshold": "การใช้โทเค็นสูง"
+ },
+ "tokenTypes": {
+ "input": "โทเค็นอินพุต",
+ "output": "โทเค็นเอาต์พุต",
+ "total": "โทเค็นทั้งหมด"
+ },
+ "toolNames": {
+ "anyTool": "เครื่องมือใดก็ได้"
+ }
+ },
+ "preview": {
+ "defaultTestTriggerName": "ทริกเกอร์ทดสอบ",
+ "detectedSuffix": "ข้อผิดพลาดจะถูกตรวจพบ",
+ "more": "...และอีก {{count}}",
+ "more_few": "...และอีก {{count}}",
+ "more_many": "...และอีก {{count}}",
+ "more_one": "...และอีก {{count}}",
+ "more_other": "...และอีก {{count}}",
+ "testTrigger": "ทดสอบทริกเกอร์",
+ "testing": "กำลังทดสอบ...",
+ "title": "ตัวอย่าง",
+ "truncatedWarning": "การค้นหาหยุดก่อนกำหนด (หมดเวลาหรือถึงขีดจำกัดจำนวน) ผลลัพธ์ที่ตรงกันจริงอาจมีมากกว่า",
+ "viewSession": "ดูเซสชัน"
+ },
+ "repositoryScope": {
+ "empty": "ไม่ได้เลือกที่เก็บโค้ด - ทริกเกอร์ใช้กับทุกที่เก็บโค้ด",
+ "hint": "เมื่อเลือกที่เก็บโค้ด ทริกเกอร์นี้จะทำงานเฉพาะกับข้อผิดพลาดในที่เก็บโค้ดเหล่านั้นเท่านั้น",
+ "placeholder": "เลือกที่เก็บโค้ดที่จะเพิ่ม...",
+ "summary": "ขั้นสูง: ขอบเขตที่เก็บโค้ด",
+ "title": "จำกัดเฉพาะที่เก็บโค้ด (ใช้กับที่เก็บโค้ดที่เลือกเท่านั้น)"
+ },
+ "sections": {
+ "configuration": "การกำหนดค่า",
+ "dotColor": "สีจุด",
+ "generalInfo": "ข้อมูลทั่วไป",
+ "triggerCondition": "เงื่อนไขทริกเกอร์"
+ }
+ },
+ "workspaceProfiles": {
+ "actions": {
+ "addProfile": "เพิ่มโปรไฟล์",
+ "cancel": "ยกเลิก",
+ "deleteProfile": "ลบโปรไฟล์",
+ "editProfile": "แก้ไขโปรไฟล์",
+ "save": "บันทึก"
+ },
+ "authMethods": {
+ "agent": "SSH Agent",
+ "auto": "อัตโนมัติ (จาก SSH Config)",
+ "password": "รหัสผ่าน",
+ "privateKey": "Private Key"
+ },
+ "deleteConfirm": {
+ "confirmLabel": "ลบ",
+ "message": "คุณแน่ใจหรือไม่ว่าต้องการลบ \"{{name}}\"? การดำเนินการนี้ไม่สามารถยกเลิกได้",
+ "title": "ลบโปรไฟล์"
+ },
+ "description": "บันทึกโปรไฟล์การเชื่อมต่อ SSH เพื่อการเชื่อมต่อใหม่อย่างรวดเร็ว",
+ "empty": {
+ "description": "เพิ่มโปรไฟล์ SSH เพื่อเชื่อมต่ออย่างรวดเร็ว",
+ "title": "ไม่มีโปรไฟล์ที่บันทึกไว้"
+ },
+ "form": {
+ "authentication": "การยืนยันตัวตน",
+ "host": "โฮสต์",
+ "name": "ชื่อ",
+ "passwordPrompt": "คุณจะถูกถามรหัสผ่านเมื่อเชื่อมต่อ",
+ "port": "พอร์ต",
+ "privateKeyPath": "เส้นทาง Private Key",
+ "username": "ชื่อผู้ใช้",
+ "namePlaceholder": "เซิร์ฟเวอร์ของฉัน",
+ "hostPlaceholder": "ชื่อโฮสต์หรือ IP",
+ "usernamePlaceholder": "user"
+ },
+ "loading": "กำลังโหลดโปรไฟล์...",
+ "title": "โปรไฟล์พื้นที่ทำงาน"
+ },
+ "connection": {
+ "actions": {
+ "connect": "เชื่อมต่อ",
+ "connecting": "กำลังเชื่อมต่อ...",
+ "disconnect": "ตัดการเชื่อมต่อ",
+ "testConnection": "ทดสอบการเชื่อมต่อ",
+ "testing": "กำลังทดสอบ..."
+ },
+ "currentMode": {
+ "description": "แหล่งข้อมูลสำหรับไฟล์เซสชัน",
+ "label": "โหมดปัจจุบัน",
+ "local": "ในเครื่อง ({{path}})"
+ },
+ "description": "เชื่อมต่อกับเครื่องระยะไกลเพื่อดูเซสชัน Claude Code ที่ทำงานอยู่ที่นั่น",
+ "form": {
+ "authentication": "การยืนยันตัวตน",
+ "host": "โฮสต์",
+ "password": "รหัสผ่าน",
+ "port": "พอร์ต",
+ "privateKeyPath": "เส้นทาง Private Key",
+ "username": "ชื่อผู้ใช้",
+ "hostPlaceholder": "ชื่อโฮสต์หรือชื่อแทนใน SSH config",
+ "usernamePlaceholder": "user"
+ },
+ "savedProfiles": {
+ "title": "โปรไฟล์ที่บันทึกไว้"
+ },
+ "ssh": {
+ "title": "การเชื่อมต่อ SSH"
+ },
+ "status": {
+ "connectedTo": "เชื่อมต่อกับ {{host}}",
+ "remoteSessions": "กำลังดูเซสชันระยะไกลผ่าน SSH"
+ },
+ "test": {
+ "failed": "การเชื่อมต่อล้มเหลว: {{error}}",
+ "success": "เชื่อมต่อสำเร็จ",
+ "unknownError": "ข้อผิดพลาดที่ไม่ทราบ"
+ },
+ "title": "การเชื่อมต่อระยะไกล"
+ },
+ "providerRuntime": {
+ "actions": {
+ "cancel": "ยกเลิก",
+ "cancelLogin": "ยกเลิกการเข้าสู่ระบบ",
+ "connectChatGpt": "เชื่อมต่อ ChatGPT",
+ "delete": "ลบ",
+ "disable": "ปิดใช้งาน",
+ "disconnectAccount": "ตัดการเชื่อมต่อบัญชี",
+ "generateLink": "สร้างลิงก์",
+ "openLogin": "เปิดหน้าเข้าสู่ระบบ",
+ "reconnectAnthropic": "เชื่อมต่อ Anthropic ใหม่",
+ "refresh": "รีเฟรช",
+ "replaceKey": "แทนที่คีย์",
+ "saveEndpoint": "บันทึก endpoint",
+ "saveKey": "บันทึกคีย์",
+ "saving": "กำลังบันทึก...",
+ "setApiKey": "ตั้งค่า API key",
+ "updateKey": "อัปเดตคีย์",
+ "useCode": "ใช้โค้ด"
+ },
+ "apiKey": {
+ "loadingStoredCredentials": "กำลังโหลดข้อมูลรับรองที่จัดเก็บ...",
+ "projectScope": "โปรเจกต์",
+ "scope": "ขอบเขต",
+ "storedIn": "จัดเก็บใน {{backend}}",
+ "userScope": "ผู้ใช้",
+ "storedInApp": "จัดเก็บในแอป",
+ "providers": {
+ "anthropic": {
+ "name": "Anthropic API Key",
+ "title": "API key",
+ "description": "ใช้ Anthropic API key โดยตรงสำหรับการเข้าถึงที่เรียกเก็บผ่าน API เซสชันการสมัครสมาชิก Anthropic ของคุณยังคงใช้งานได้เมื่อคุณสลับกลับ",
+ "placeholder": "sk-ant-..."
+ },
+ "codex": {
+ "name": "Codex API Key",
+ "title": "API key",
+ "description": "ใช้ OpenAI API key เป็นเส้นทางยืนยันตัวตนรองของ Codex หากคุณสลับ Codex เป็นโหมด API key แอปจะมิเรอร์ OPENAI_API_KEY ไปยัง CODEX_API_KEY สำหรับการเริ่มแบบ native",
+ "placeholder": "sk-proj-..."
+ },
+ "gemini": {
+ "name": "Gemini API Key",
+ "title": "การเข้าถึง API",
+ "description": "ใช้ `GEMINI_API_KEY` สำหรับแบ็กเอนด์ Gemini API CLI SDK และ ADC ไม่จำเป็นต้องใช้",
+ "placeholder": "AIza..."
+ }
+ }
+ },
+ "codex": {
+ "account": {
+ "appServer": "App-server: {{state}}",
+ "connected": "เชื่อมต่อแล้ว",
+ "description": "จัดการเซสชันบัญชี Codex app-server ในเครื่องที่ขับเคลื่อนการเริ่มแบบ native ที่รองรับการสมัครสมาชิก",
+ "loginInProgress": "กำลังเข้าสู่ระบบ",
+ "plan": "แผน: {{plan}}",
+ "reconnectRequired": "ต้องเชื่อมต่อใหม่",
+ "title": "บัญชี ChatGPT",
+ "hints": {
+ "autoUsesApiKeyUntilChatgpt": "{{message}} โหมดอัตโนมัติจะใช้ API key ที่ตรวจพบต่อไปจนกว่าจะเชื่อมต่อ ChatGPT",
+ "detectedApiKeyNeedsApiMode": "{{message}} API key ที่ตรวจพบจะถูกใช้เฉพาะหลังจากคุณสลับ Codex เป็นโหมด API key",
+ "localArtifactsNoSession": "ขณะนี้ Codex CLI รายงานว่าไม่มีบัญชี ChatGPT ที่ใช้งานอยู่ มีข้อมูลบัญชี Codex ในเครื่องอยู่ แต่ยังไม่ได้เลือกเซสชันที่จัดการซึ่งใช้งานอยู่ ขีดจำกัดการใช้งานจะปรากฏที่นี่เฉพาะหลังจาก Codex CLI เห็นบัญชีนั้น",
+ "noActiveAccount": "ขณะนี้ Codex CLI รายงานว่าไม่มีบัญชี ChatGPT ที่ใช้งานอยู่ ขีดจำกัดการใช้งานจะปรากฏที่นี่เฉพาะหลังจาก Codex CLI เห็นบัญชี",
+ "reconnectBeforeUsage": "Codex มีบัญชี ChatGPT ที่เลือกไว้ในเครื่อง แต่เซสชันปัจจุบันต้องเชื่อมต่อใหม่ก่อนที่ขีดจำกัดการใช้งานจะโหลดที่นี่ได้",
+ "usageLimitsAfterReport": "ขีดจำกัดการใช้งานจะปรากฏที่นี่หลังจาก Codex รายงานสำหรับบัญชี ChatGPT ที่เชื่อมต่ออยู่"
+ }
+ },
+ "install": {
+ "checking": "กำลังตรวจสอบ",
+ "downloading": "กำลังดาวน์โหลด",
+ "installCli": "ติดตั้ง Codex CLI",
+ "installing": "กำลังติดตั้ง",
+ "retryInstall": "ลองติดตั้งอีกครั้ง",
+ "title": "ติดตั้ง Codex CLI ลงในข้อมูลแอป"
+ },
+ "rateLimits": {
+ "credits": "เครดิต",
+ "creditsDescription": "เครดิตจะแสดงแยกจากการใช้งานการสมัครสมาชิกตามหน้าต่างเวลา และอาจไม่พร้อมใช้งานสำหรับเซสชัน ChatGPT ที่รองรับด้วยแผน",
+ "noSecondaryWindow": "Codex ไม่ได้คืนค่าหน้าต่างรองสำหรับสแนปช็อตบัญชีนี้",
+ "notReported": "ไม่ได้รายงาน",
+ "primaryReset": "รีเซ็ตหลัก",
+ "primaryUsed": "ใช้ไปหลัก",
+ "primaryWindow": "หน้าต่างหลัก",
+ "remainingLeft": "เหลือ {{value}}",
+ "remainingUnknown": "ไม่ทราบจำนวนที่เหลือ",
+ "secondaryReset": "รีเซ็ตรอง",
+ "secondaryUsed": "ใช้ไปรอง",
+ "secondaryWindow": "หน้าต่างรอง",
+ "usedQuotaNote": "เปอร์เซ็นต์เหล่านี้แสดงโควตาที่ใช้ไป ไม่ใช่โควตาที่เหลือ",
+ "weeklyReset": "รีเซ็ตรายสัปดาห์",
+ "weeklyUsed": "ใช้ไปรายสัปดาห์",
+ "weeklyUsedOneWeek": "ใช้ไปรายสัปดาห์ (1 สัปดาห์)",
+ "weeklyWindow": "หน้าต่างรายสัปดาห์",
+ "secondaryFallback": "รอง",
+ "secondaryWindowNote": " ขีดจำกัดรายสัปดาห์จะแสดงแยกในหน้าต่าง {{window}}",
+ "usageExplanationGeneric": "แสดงโควตาที่ใช้ไป ไม่ใช่โควตาที่เหลือ",
+ "usageExplanationWindowOnly": "แสดงโควตาที่ใช้ไปในหน้าต่าง {{window}} ปัจจุบัน ไม่ใช่โควตาที่เหลือ",
+ "usageExplanationWithRemaining": "ใช้ไป {{used}} - เหลือประมาณ {{remaining}} ในหน้าต่าง {{window}} ปัจจุบัน"
+ }
+ },
+ "compatibleEndpoint": {
+ "authToken": "Auth token",
+ "authTokenMissing": "ยังไม่ได้ตั้งค่า auth token",
+ "baseUrl": "Base URL",
+ "description": "ใช้ endpoint รันไทม์ในเครื่องที่เข้ากันได้กับ Anthropic",
+ "keepSavedToken": "เว้นว่างไว้เพื่อเก็บ token ที่บันทึกไว้",
+ "title": "Endpoint ในเครื่อง / ที่เข้ากันได้",
+ "tokenStatus": "Token {{status}}",
+ "validation": {
+ "baseUrlRequired": "ต้องระบุ Base URL",
+ "firstPartyAnthropic": "ใช้อัตโนมัติ, การสมัครสมาชิก หรือ API key สำหรับ Anthropic แบบ first-party",
+ "httpRequired": "Base URL ต้องใช้ http:// หรือ https://",
+ "invalidUrl": "URL ไม่ถูกต้อง",
+ "noCredentials": "Base URL ต้องไม่มีข้อมูลรับรอง"
+ },
+ "status": {
+ "endpointDisabledTokenKept": "ปิดใช้งาน endpoint แล้ว เก็บ token ที่บันทึกไว้",
+ "endpointSaved": "บันทึก endpoint แล้ว",
+ "endpointSavedTokenMissing": "บันทึก endpoint แล้ว ยังไม่ได้ตั้งค่า auth token"
+ }
+ },
+ "connection": {
+ "authenticationMethod": "วิธีการยืนยันตัวตน",
+ "descriptions": {
+ "anthropic": "เลือกว่าเซสชัน Anthropic ที่เปิดจากแอปจะยืนยันตัวตนอย่างไร",
+ "codex": "เลือกว่า Codex ควรเลือกใช้การสมัครสมาชิก ChatGPT ของคุณหรือ API key เมื่อรันไทม์ native เริ่มทำงาน",
+ "gemini": "ตั้งค่าการเข้าถึง API แบบไม่บังคับ CLI SDK และ ADC ยังคงถูกค้นพบโดยอัตโนมัติ",
+ "opencode": "การยืนยันตัวตนและรายการผู้ให้บริการของ OpenCode จัดการโดยรันไทม์ OpenCode"
+ },
+ "method": "วิธีการเชื่อมต่อ",
+ "mode": "โหมด: {{mode}}",
+ "selected": "เลือกแล้ว",
+ "switching": "กำลังสลับ...",
+ "title": "การเชื่อมต่อ"
+ },
+ "connectionCards": {
+ "apiKey": {
+ "title": "API key"
+ },
+ "anthropic": {
+ "apiKeyDescription": "ใช้ ANTHROPIC_API_KEY และการเรียกเก็บผ่าน Anthropic API",
+ "autoDescription": "ใช้ค่าเริ่มต้นของรันไทม์ Anthropic และข้อมูลรับรองในเครื่องที่ดีที่สุดที่มี",
+ "hint": "อัตโนมัติจะให้ Anthropic ใช้การแก้ปัญหาข้อมูลรับรองในเครื่องตามค่าเริ่มต้น",
+ "subscriptionDescription": "ใช้เซสชันการเข้าสู่ระบบ Anthropic ในเครื่องและการเข้าถึงการสมัครสมาชิกของคุณ",
+ "subscriptionTitle": "การสมัครสมาชิก Anthropic"
+ },
+ "auto": {
+ "title": "อัตโนมัติ"
+ },
+ "codex": {
+ "apiKeyDescription": "ใช้การเรียกเก็บผ่าน OPENAI_API_KEY และ CODEX_API_KEY สำหรับการเริ่ม Codex แบบ native",
+ "autoDescription": "เลือกใช้บัญชี ChatGPT และการสมัครสมาชิกของคุณ ใช้โหมด API key เฉพาะเมื่อจำเป็น",
+ "chatgptDescription": "ใช้บัญชี ChatGPT ที่เชื่อมต่อและการสมัครสมาชิก Codex ของคุณ",
+ "chatgptTitle": "บัญชี ChatGPT",
+ "hint": "Codex ทำงานผ่านรันไทม์ native เสมอ อัตโนมัติจะเลือกใช้บัญชี ChatGPT ของคุณก่อนที่จะกลับไปใช้ข้อมูลรับรอง API key"
+ }
+ },
+ "description": "จัดการว่าผู้ให้บริการแต่ละรายเชื่อมต่ออย่างไร และเมื่อรองรับ ว่ารันไทม์หลายโมเดลควรใช้แบ็กเอนด์ใด",
+ "fastMode": {
+ "defaultOff": "ปิดโดยค่าเริ่มต้น",
+ "description": "ใช้โหมด Claude Code Fast โดยค่าเริ่มต้นสำหรับการเริ่มทีม Anthropic ใหม่เมื่อโมเดลและรันไทม์ที่กำหนดอนุญาต",
+ "disabledHint": "การเริ่ม Anthropic ใหม่จะใช้ความเร็วปกติเว้นแต่ทีมเปิดใช้งานโหมด Fast อย่างชัดเจน",
+ "enabledHint": "การเริ่ม Anthropic ใหม่จะร้องขอโหมด Fast โดยค่าเริ่มต้นเมื่อโมเดลที่กำหนดรองรับ",
+ "notExposed": "รันไทม์ Anthropic นี้ไม่เปิดเผยโหมด Fast",
+ "preferFast": "เลือกใช้ Fast",
+ "title": "ค่าเริ่มต้นโหมด Fast",
+ "unavailableForRuntime": "โหมด Fast ไม่พร้อมใช้งานสำหรับรันไทม์ Anthropic นี้ในขณะนี้"
+ },
+ "alerts": {
+ "anthropicApiKeyMissing": "เลือกโหมด API key แล้ว แต่ยังไม่มีข้อมูลรับรอง Anthropic API",
+ "anthropicStoredKeyAvailable": "มี API key ที่บันทึกไว้ แต่เซสชัน Anthropic ที่เปิดจากแอปจะใช้เฉพาะหลังจากคุณสลับเป็นโหมด API key",
+ "anthropicSubscriptionMissing": "เลือกโหมดการสมัครสมาชิก Anthropic แล้ว เข้าสู่ระบบด้วย Anthropic เพื่อใช้ผู้ให้บริการนี้",
+ "authTokenMissing": "ยังไม่ได้ตั้งค่า auth token endpoint ที่เข้ากันได้กับ Anthropic ในเครื่องหลายแห่งต้องการ token ที่ไม่ว่างเปล่า",
+ "chatgptLoginPending": "กำลังรอการเข้าสู่ระบบบัญชี ChatGPT ให้เสร็จ...",
+ "chatgptLoginStarting": "กำลังเริ่มการเข้าสู่ระบบ ChatGPT...",
+ "codexApiKeyMissing": "เลือกโหมด API key แล้ว แต่ยังไม่มีข้อมูลรับรอง OPENAI_API_KEY หรือ CODEX_API_KEY",
+ "codexLocalArtifactsNoSession": "ขณะนี้ Codex CLI ไม่มีบัญชี ChatGPT ที่ใช้งานอยู่ มีข้อมูลบัญชี Codex ในเครื่องอยู่ แต่ยังไม่ได้เลือกเซสชันที่จัดการซึ่งใช้งานอยู่",
+ "codexNeedsReconnect": "Codex มีบัญชี ChatGPT ที่เลือกไว้ในเครื่อง แต่เซสชันปัจจุบันต้องเชื่อมต่อใหม่",
+ "codexNoChatgptAccount": "ขณะนี้ Codex CLI ไม่มีบัญชี ChatGPT ที่ใช้งานอยู่ เชื่อมต่อ ChatGPT เพื่อใช้การสมัครสมาชิกของคุณ",
+ "codexNoCredential": "ยังไม่มีบัญชี ChatGPT หรือ API key",
+ "geminiApiUnavailable": "Gemini API ไม่พร้อมใช้งานในขณะนี้ ตั้งค่า `GEMINI_API_KEY` ที่นี่หรือใช้ข้อมูลรับรอง Google ADC ที่ถูกต้อง",
+ "withApiKeyFallback": "{{message}} สลับเป็นโหมด API key เพื่อใช้ API key ที่ตรวจพบ"
+ },
+ "authModeDescriptions": {
+ "anthropic": {
+ "apiKey": "บังคับให้เซสชัน Anthropic ที่เปิดจากแอปใช้ข้อมูลรับรอง API key",
+ "auto": "ใช้พฤติกรรมเริ่มต้นของรันไทม์ API key ที่บันทึกไว้ในแอปนี้จะถูกใช้เฉพาะหลังจากคุณสลับเป็นโหมด API key",
+ "oauth": "บังคับให้เซสชัน Anthropic ที่เปิดจากแอปใช้เซสชันการสมัครสมาชิก Anthropic ในเครื่อง"
+ },
+ "codex": {
+ "apiKey": "บังคับให้การเริ่ม Codex แบบ native ใช้การเรียกเก็บผ่าน OPENAI_API_KEY / CODEX_API_KEY",
+ "auto": "เลือกใช้บัญชี ChatGPT ของคุณเมื่อพร้อมใช้งาน กลับไปใช้โหมด API key เฉพาะเมื่อจำเป็น",
+ "chatgpt": "บังคับให้การเริ่ม Codex แบบ native ใช้บัญชี ChatGPT ที่เชื่อมต่อและการสมัครสมาชิกของคุณ"
+ }
+ },
+ "progress": {
+ "applyingConnectionChanges": "กำลังใช้การเปลี่ยนแปลงการเชื่อมต่อ...",
+ "refreshingProviderStatus": "กำลังรีเฟรชสถานะผู้ให้บริการ...",
+ "savingCompatibleEndpoint": "กำลังบันทึก endpoint ที่เข้ากันได้...",
+ "switchingAnthropicSubscription": "กำลังสลับไปยังการสมัครสมาชิก Anthropic...",
+ "switchingApiKey": "กำลังสลับไปยัง API key...",
+ "switchingApiKeyMode": "กำลังสลับไปยังโหมด API key...",
+ "switchingAuto": "กำลังสลับไปยังอัตโนมัติ...",
+ "switchingChatgpt": "กำลังสลับไปยังโหมดบัญชี ChatGPT..."
+ },
+ "provider": "ผู้ให้บริการ",
+ "runtime": {
+ "descriptions": {
+ "anthropic": "ปัจจุบัน Anthropic ไม่มีตัวเลือกแบ็กเอนด์รันไทม์แยกต่างหาก",
+ "codex": "ขณะนี้ Codex ทำงานผ่านเส้นทางรันไทม์ native เท่านั้น",
+ "gemini": "เลือกว่าแบ็กเอนด์รันไทม์ Gemini ใดที่หลายโมเดลควรใช้",
+ "opencode": "OpenCode ใช้โฮสต์รันไทม์ที่จัดการของตัวเอง ขณะนี้เดสก์ท็อปเปิดเผยเฉพาะสถานะเท่านั้น"
+ },
+ "title": "รันไทม์",
+ "updating": "กำลังอัปเดตรันไทม์..."
+ },
+ "runtimeSummary": "รันไทม์: {{runtime}}",
+ "status": {
+ "configured": "ตั้งค่าแล้ว",
+ "enabled": "เปิดใช้งาน",
+ "notConfigured": "ยังไม่ได้ตั้งค่า",
+ "notSet": "ยังไม่ได้ตั้งค่า",
+ "off": "ปิด",
+ "unknown": "ไม่ทราบ"
+ },
+ "title": "การตั้งค่าผู้ให้บริการ",
+ "usage": {
+ "apiKey": "กำลังใช้ API key",
+ "apiKeyRequired": "ต้องใช้ API key",
+ "compatibleEndpoint": "กำลังใช้ endpoint ที่เข้ากันได้",
+ "notConnected": "ยังไม่ได้เชื่อมต่อ",
+ "usingMethod": "กำลังใช้ {{method}}"
+ },
+ "errors": {
+ "apiKeyDeletedRefreshFailed": "ลบ API key แล้ว แต่รีเฟรชสถานะผู้ให้บริการไม่สำเร็จ",
+ "apiKeySavedRefreshFailed": "บันทึก API key แล้ว แต่รีเฟรชสถานะผู้ให้บริการไม่สำเร็จ",
+ "connectionUpdatedRefreshFailed": "อัปเดตการเชื่อมต่อแล้ว แต่รีเฟรชสถานะผู้ให้บริการไม่สำเร็จ",
+ "deleteApiKey": "ลบ API key ไม่สำเร็จ",
+ "disableEndpoint": "ปิดใช้งาน endpoint ไม่สำเร็จ",
+ "endpointDisabledRefreshFailed": "ปิดใช้งาน endpoint แล้ว แต่รีเฟรชสถานะผู้ให้บริการไม่สำเร็จ",
+ "endpointSavedRefreshFailed": "บันทึก endpoint แล้ว แต่รีเฟรชสถานะผู้ให้บริการไม่สำเร็จ",
+ "refreshCodexAccount": "รีเฟรชบัญชี Codex ไม่สำเร็จ",
+ "saveApiKey": "บันทึก API key ไม่สำเร็จ",
+ "saveEndpoint": "บันทึก endpoint ไม่สำเร็จ",
+ "updateAnthropicFastMode": "อัปเดตโหมด Fast ของ Anthropic ไม่สำเร็จ",
+ "updateConnection": "อัปเดตการเชื่อมต่อไม่สำเร็จ",
+ "updateRuntimeBackend": "อัปเดตแบ็กเอนด์รันไทม์ไม่สำเร็จ",
+ "apiKeyRequired": "ต้องระบุ API key"
+ },
+ "connectionUi": {
+ "authMode": {
+ "auto": "อัตโนมัติ",
+ "oauth": "การสมัครสมาชิก / OAuth",
+ "chatgpt": "บัญชี ChatGPT",
+ "apiKey": "API key",
+ "anthropicSubscription": "การสมัครสมาชิก Anthropic"
+ },
+ "authMethod": {
+ "apiKey": "API key",
+ "apiKeyHelper": "ตัวช่วย API key",
+ "oauth": "OAuth",
+ "claudeSubscription": "การสมัครสมาชิก Claude",
+ "geminiCli": "Gemini CLI",
+ "googleAccount": "บัญชี Google",
+ "serviceAccount": "บัญชีบริการ"
+ },
+ "runtime": {
+ "codexNative": "Codex native",
+ "currentRuntime": "รันไทม์ปัจจุบัน",
+ "selectedRuntime": "รันไทม์ที่เลือก",
+ "summary": "{{prefix}}: {{runtime}}"
+ },
+ "status": {
+ "checking": "กำลังตรวจสอบ...",
+ "modelsAvailable": "มีโมเดลให้ใช้งาน",
+ "checked": "ตรวจสอบแล้ว",
+ "providerActivity": "กิจกรรมผู้ให้บริการ",
+ "notConnected": "ยังไม่ได้เชื่อมต่อ",
+ "startingChatGptLogin": "กำลังเริ่มการเข้าสู่ระบบ ChatGPT...",
+ "waitingForChatGptLogin": "กำลังรอการเข้าสู่ระบบบัญชี ChatGPT...",
+ "chatGptVerificationDegraded": "ตรวจพบบัญชี ChatGPT - การยืนยันบัญชีลดประสิทธิภาพลงในขณะนี้",
+ "chatGptAccountReady": "บัญชี ChatGPT พร้อมแล้ว",
+ "apiKeyReady": "API key พร้อมแล้ว",
+ "codexLocalAccountNeedsReconnect": "Codex มีบัญชี ChatGPT ที่เลือกไว้ในเครื่อง แต่เซสชันปัจจุบันต้องเชื่อมต่อใหม่",
+ "codexNoActiveManagedSession": "Codex CLI รายงานว่าไม่มีการเข้าสู่ระบบ ChatGPT ที่ใช้งานอยู่ มีข้อมูลบัญชี Codex ในเครื่องอยู่ แต่ยังไม่ได้เลือกเซสชันที่จัดการซึ่งใช้งานอยู่",
+ "codexNoActiveChatGptLogin": "Codex CLI รายงานว่าไม่มีการเข้าสู่ระบบ ChatGPT ที่ใช้งานอยู่",
+ "connectChatGptForSubscription": "เชื่อมต่อบัญชี ChatGPT เพื่อใช้การสมัครสมาชิก Codex ของคุณ",
+ "codexNativeReady": "Codex native พร้อมแล้ว",
+ "codexNativeUnavailable": "Codex native ไม่พร้อมใช้งาน",
+ "unavailableInCurrentRuntime": "ไม่พร้อมใช้งานในรันไทม์ปัจจุบัน",
+ "connectedViaApiKey": "เชื่อมต่อผ่าน API key",
+ "apiKeyConfiguredNotVerified": "ตั้งค่า API key แล้ว แต่ยังไม่ได้ยืนยัน",
+ "apiKeyModeMissingCredential": "เลือกโหมด API key แล้ว แต่ยังไม่ได้ตั้งค่า API key",
+ "connectedVia": "เชื่อมต่อผ่าน {{method}}",
+ "unableToVerify": "ไม่สามารถยืนยันได้"
+ },
+ "mode": {
+ "selectedAuth": "การยืนยันตัวตนที่เลือก: {{authMode}}",
+ "preferredAuth": "การยืนยันตัวตนที่ต้องการ: {{authMode}}"
+ },
+ "credential": {
+ "apiKeyConfigured": "ตั้งค่า API key แล้ว",
+ "savedApiKeyAvailable": "มี API key ที่บันทึกไว้ในส่วนจัดการ",
+ "apiKeyAlsoConfigured": "ตั้งค่า API key ในส่วนจัดการด้วย",
+ "apiKeyConfiguredInManage": "ตั้งค่า API key ในส่วนจัดการแล้ว",
+ "apiKeyFallbackInManage": "มี API key ในส่วนจัดการเป็นตัวสำรองด้วย",
+ "availableAsFallback": "{{summary}} - ใช้เป็นตัวสำรองได้",
+ "savedApiKeyAvailableIfSwitch": "มี API key ที่บันทึกไว้ในส่วนจัดการ หากคุณสลับเป็นโหมด API key",
+ "availableIfSwitch": "{{summary}} - ใช้ได้หากคุณสลับเป็นโหมด API key",
+ "autoWillUseUntilChatGpt": "{{summary}} - อัตโนมัติจะใช้สิ่งนี้จนกว่าจะเชื่อมต่อ ChatGPT"
+ },
+ "actions": {
+ "connect": "เชื่อมต่อ",
+ "connectAnthropic": "เชื่อมต่อ Anthropic",
+ "connectChatGpt": "เชื่อมต่อ ChatGPT",
+ "disconnect": "ตัดการเชื่อมต่อ",
+ "openLogin": "เปิดหน้าเข้าสู่ระบบ"
+ },
+ "disconnect": {
+ "anthropicTitle": "ตัดการเชื่อมต่อการสมัครสมาชิก Anthropic หรือไม่?",
+ "anthropic": "การดำเนินการนี้จะลบเซสชันการสมัครสมาชิก Anthropic ในเครื่องออกจากรันไทม์ Claude CLI",
+ "anthropicWithApiKey": "การดำเนินการนี้จะลบเซสชันการสมัครสมาชิก Anthropic ในเครื่องออกจากรันไทม์ Claude CLI โดย API key ที่บันทึกไว้ในส่วนจัดการยังคงใช้งานได้",
+ "geminiTitle": "ตัดการเชื่อมต่อ Gemini CLI หรือไม่?",
+ "gemini": "การดำเนินการนี้จะล้างเมตาดาตาเซสชัน Gemini CLI ในเครื่อง ข้อมูลรับรอง ADC ภายนอกและ API key ที่บันทึกไว้จะไม่ถูกลบ"
+ }
+ }
+ },
+ "cliRuntime": {
+ "actions": {
+ "checkForUpdates": "ตรวจสอบการอัปเดต",
+ "checking": "กำลังตรวจสอบ...",
+ "extensions": "ส่วนขยาย",
+ "installRuntime": "ติดตั้ง {{runtime}}",
+ "manage": "จัดการ",
+ "recheck": "ตรวจสอบใหม่",
+ "reinstallRuntime": "ติดตั้ง {{runtime}} ใหม่",
+ "retry": "ลองอีกครั้ง",
+ "update": "อัปเดต"
+ },
+ "installer": {
+ "checkingLatest": "กำลังตรวจสอบเวอร์ชันล่าสุด...",
+ "downloading": "กำลังดาวน์โหลด...",
+ "failed": "การติดตั้งล้มเหลว",
+ "installed": "ติดตั้ง v{{version}} แล้ว",
+ "installing": "กำลังติดตั้ง...",
+ "latest": "ล่าสุด",
+ "verifying": "กำลังตรวจสอบ checksum..."
+ },
+ "labels": {
+ "multimodel": "หลายโมเดล"
+ },
+ "loading": {
+ "aiProviders": "กำลังตรวจสอบผู้ให้บริการ AI...",
+ "claudeCli": "กำลังตรวจสอบ Claude CLI..."
+ },
+ "provider": {
+ "backend": "แบ็กเอนด์: {{backend}}",
+ "loadingModels": "กำลังโหลดโมเดล...",
+ "modelsUnavailable": "ไม่มีโมเดลสำหรับรันไทม์บิลด์นี้",
+ "runtime": "รันไทม์: {{runtime}}"
+ },
+ "providerTerminal": {
+ "authFailed": "การยืนยันตัวตนล้มเหลว",
+ "authUpdated": "อัปเดตการยืนยันตัวตนแล้ว",
+ "loggedOut": "ผู้ให้บริการออกจากระบบแล้ว",
+ "login": "เข้าสู่ระบบ",
+ "logout": "ออกจากระบบ",
+ "logoutFailed": "ออกจากระบบล้มเหลว"
+ },
+ "status": {
+ "configuredNotFound": "ไม่พบ {{runtime}} ที่ตั้งค่าไว้",
+ "foundButFailed": "พบ {{runtime}} แต่เริ่มต้นไม่สำเร็จ",
+ "healthCheckFailed": "{{runtime}} ที่ตั้งค่าไว้ไม่ผ่านการตรวจสอบความพร้อมตอนเริ่มต้น",
+ "notInstalled": "{{runtime}} ยังไม่ได้ติดตั้ง"
+ },
+ "title": "รันไทม์ CLI"
+ },
+ "cliStatus": {
+ "versionUpgrade": "v{{current}} -> v{{latest}}"
+ }
+}
diff --git a/src/features/localization/renderer/locales/th/team.json b/src/features/localization/renderer/locales/th/team.json
new file mode 100644
index 00000000..f881473c
--- /dev/null
+++ b/src/features/localization/renderer/locales/th/team.json
@@ -0,0 +1,2487 @@
+{
+ "activity": {
+ "actions": {
+ "createTaskFromMessage": "สร้างงานจากข้อความ",
+ "editMessage": "แก้ไขข้อความ",
+ "expandMessage": "ขยายข้อความ",
+ "replyToMessage": "ตอบกลับข้อความ",
+ "restartTeam": "รีสตาร์ททีม"
+ },
+ "authError": {
+ "description": "การยืนยันตัวตนล้มเหลว การรีสตาร์ททีมจะรีเฟรชเซสชันและอาจแก้ไขปัญหานี้ได้ หากปัญหายังคงอยู่ ให้ตรวจสอบข้อมูลรับรอง API ของคุณหรือลองใหม่อีกครั้งในภายหลัง"
+ },
+ "automation": {
+ "reviewPickup": "ขอให้เพื่อนร่วมทีมรับการรีวิว",
+ "stallNudge": "ขอให้เพื่อนร่วมทีมดำเนินงานที่ค้างอยู่ต่อ",
+ "workSyncBody": "ขอให้เพื่อนร่วมทีมซิงค์งานปัจจุบัน"
+ },
+ "badges": {
+ "automation": "ระบบอัตโนมัติ",
+ "bootstrap": "บูตสแตรป",
+ "command": "คำสั่ง",
+ "comment": "ความคิดเห็น",
+ "live": "สด",
+ "note": "บันทึก",
+ "rateLimited": "ถูกจำกัดอัตรา",
+ "restart": "รีสตาร์ท",
+ "result": "ผลลัพธ์",
+ "session": "เซสชัน",
+ "stallNudge": "กระตุ้นงานค้าง",
+ "start": "เริ่ม",
+ "workSync": "ซิงค์งาน",
+ "agentError": "ข้อผิดพลาดเอเจนต์",
+ "apiError": "ข้อผิดพลาด API"
+ },
+ "bootstrap": {
+ "acknowledged": "รับทราบการบูตสแตรปแล้ว",
+ "restarting": "กำลังรีสตาร์ทเพื่อนร่วมทีม",
+ "starting": "กำลังเริ่มเพื่อนร่วมทีม"
+ },
+ "rawJson": "JSON ดิบ",
+ "unread": "ยังไม่อ่าน",
+ "thoughts": {
+ "count": "{{count}} ความคิด",
+ "count_one": "{{count}} ความคิด",
+ "expand": "ขยายความคิด",
+ "showMore": "ดูเพิ่มเติม",
+ "showLess": "ดูน้อยลง",
+ "count_few": "{{count}} ความคิด",
+ "count_many": "{{count}} ความคิด",
+ "count_other": "{{count}} ความคิด",
+ "toolSummary": "🔧 {{summary}}",
+ "titleForMember": "{{name}} - ความคิด"
+ },
+ "timeline": {
+ "loadingMessages": "กำลังโหลดข้อความ...",
+ "noMessages": "ไม่มีข้อความ",
+ "emptyHint": "ส่งข้อความถึงสมาชิกเพื่อดูกิจกรรม",
+ "newSession": "เซสชันใหม่",
+ "olderCount": "+{{count}} ที่เก่ากว่า",
+ "showMore": "แสดงอีก {{count}} รายการ",
+ "showAll": "แสดงทั้งหมด",
+ "olderCount_one": "+{{count}} ที่เก่ากว่า",
+ "olderCount_few": "+{{count}} ที่เก่ากว่า",
+ "olderCount_many": "+{{count}} ที่เก่ากว่า",
+ "olderCount_other": "+{{count}} ที่เก่ากว่า"
+ },
+ "pendingReplies": {
+ "title": "รอการตอบกลับ",
+ "openMember": "เปิดสมาชิก",
+ "messageSentAwaitingReply": "ส่งข้อความแล้ว รอการตอบกลับ",
+ "awaitingReply": "รอการตอบกลับ",
+ "externalTeam": "ทีมภายนอก",
+ "crossTeamAwaitingReply": "ส่งข้อความข้ามทีมแล้ว รอการตอบกลับ",
+ "user": "ผู้ใช้",
+ "awaitingApproval": "รอการอนุมัติ"
+ },
+ "reply": {
+ "replyingTo": "กำลังตอบกลับถึง",
+ "action": "ตอบกลับ"
+ },
+ "activeTasks": {
+ "inProgress": "กำลังดำเนินการ",
+ "expandInProgress": "ขยายงานที่กำลังดำเนินการ",
+ "collapseInProgress": "ยุบงานที่กำลังดำเนินการ",
+ "reviewing": "กำลังรีวิว",
+ "workingOn": "กำลังทำ"
+ },
+ "expandDialog": {
+ "description": "มุมมองข้อความแบบขยาย"
+ }
+ },
+ "create": {
+ "actions": {
+ "create": "สร้าง",
+ "creating": "กำลังสร้าง...",
+ "openExisting": "เปิดทีมที่มีอยู่",
+ "skipPreflightAndCreate": "ข้ามการตรวจสอบก่อนเริ่มและสร้าง"
+ },
+ "conflict": {
+ "description": "การรันสองทีมในไดเรกทอรีเดียวกันมีความเสี่ยง - อาจขัดแย้งกันในการแก้ไขไฟล์เดียวกัน ลองพิจารณาใช้ไดเรกทอรีอื่นหรือ git worktree เพื่อแยกการทำงาน",
+ "title": "ทีม \"{{team}}\" อีกทีมหนึ่งกำลังทำงานอยู่สำหรับไดเรกทอรีทำงานนี้",
+ "workingDirectory": "ไดเรกทอรีทำงาน:"
+ },
+ "description": {
+ "copy": "สร้างทีมใหม่จากทีมที่มีอยู่",
+ "create": "ตั้งค่าทีมของคุณและเลือกวิธีเริ่มต้น"
+ },
+ "errors": {
+ "nameExists": "มีชื่อทีมนี้อยู่แล้ว",
+ "nameLaunching": "ทีมที่ใช้ชื่อนี้กำลังเริ่มอยู่",
+ "createConfigFailed": "สร้างการตั้งค่าทีมไม่สำเร็จ",
+ "loadProjectsFailed": "โหลดโปรเจกต์ไม่สำเร็จ"
+ },
+ "fields": {
+ "color": "สี (ไม่บังคับ)",
+ "description": "คำอธิบาย (ไม่บังคับ)",
+ "prompt": "พรอมต์สำหรับหัวหน้าทีม (ไม่บังคับ)",
+ "teamName": "ชื่อทีม"
+ },
+ "launchAfterCreate": {
+ "description": "เริ่มทีมทันทีผ่าน Claude CLI ในเครื่อง",
+ "label": "รันคำสั่งหลังจากสร้าง"
+ },
+ "localOnly": "ใช้งานได้เฉพาะในโหมด Electron ในเครื่องเท่านั้น",
+ "onDisk": "บนดิสก์:",
+ "placeholders": {
+ "description": "คำอธิบายสั้น ๆ เกี่ยวกับวัตถุประสงค์ของทีม",
+ "prompt": "คำแนะนำสำหรับหัวหน้าทีมระหว่างการจัดเตรียม..."
+ },
+ "saved": "บันทึกแล้ว",
+ "solo": {
+ "description": "จะเริ่มเฉพาะหัวหน้าทีม (กระบวนการหลัก) เท่านั้น - จะไม่สร้างเพื่อนร่วมทีม ทำงานเหมือนเซสชันเอเจนต์ปกติในรันไทม์ที่คุณเลือก (Claude Code, Codex, OpenCode, Gemini) แต่สามารถเข้าถึงบอร์ดงานสำหรับการวางแผนได้ ช่วยประหยัดโทเค็นโดยหลีกเลี่ยงค่าใช้จ่ายในการประสานงานเพื่อนร่วมทีม คุณสามารถเพิ่มสมาชิกได้ในภายหลังจากการตั้งค่าทีม",
+ "label": "ทีมเดี่ยว"
+ },
+ "title": {
+ "copy": "คัดลอกทีม",
+ "create": "สร้างทีม"
+ },
+ "optional": {
+ "launchSettingsTitle": "การตั้งค่าการเริ่มเพิ่มเติม",
+ "launchSettingsDescription": "พรอมต์ ความปลอดภัย และการแทนที่ CLI อยู่ที่นี่เมื่อคุณต้องการ",
+ "teamDetailsTitle": "รายละเอียดทีมเพิ่มเติม",
+ "teamDetailsDescription": "เก็บโฟลว์เริ่มต้นให้กระชับ และเปิดส่วนนี้เฉพาะเมื่อคุณต้องการบริบทเพิ่มเติมหรือสีกำหนดเอง"
+ },
+ "prepare": {
+ "unsupportedPreload": "เวอร์ชัน preload ปัจจุบันไม่รองรับ team:prepareProvisioning รีสตาร์ทแอป dev",
+ "selectWorkingDirectory": "เลือกไดเรกทอรีทำงานเพื่อตรวจสอบความถูกต้องของสภาพแวดล้อมการเริ่ม",
+ "someProvidersNeedAttention": "ผู้ให้บริการบางรายที่เลือกต้องการความสนใจ",
+ "readyWithNotes": "ผู้ให้บริการที่เลือกทั้งหมดพร้อมแล้ว พร้อมหมายเหตุ",
+ "ready": "ผู้ให้บริการที่เลือกทั้งหมดพร้อมแล้ว",
+ "failed": "เตรียมผู้ให้บริการที่เลือกไม่สำเร็จ",
+ "checkingProviders": "กำลังตรวจสอบผู้ให้บริการที่เลือก...",
+ "preparingEnvironment": "กำลังเตรียมสภาพแวดล้อม...",
+ "selectedProvidersReadyWithNotes": "ผู้ให้บริการที่เลือกพร้อมแล้ว (พร้อมหมายเหตุ)",
+ "selectedProvidersReady": "ผู้ให้บริการที่เลือกพร้อมแล้ว"
+ },
+ "validation": {
+ "nameMustContainLetterOrDigit": "ชื่อต้องมีตัวอักษรหรือตัวเลขอย่างน้อยหนึ่งตัว",
+ "nameTooLong": "ชื่อยาวเกินไป (สูงสุด 128 อักขระ)",
+ "selectWorkingDirectory": "เลือกไดเรกทอรีทำงาน (cwd)",
+ "memberNameRequired": "ชื่อสมาชิกต้องไม่ว่างเปล่า",
+ "memberNameInvalid": "ชื่อสมาชิกต้องขึ้นต้นด้วยตัวอักษรหรือตัวเลข ใช้ได้เฉพาะ [a-zA-Z0-9._-] สูงสุด 128 อักขระ",
+ "memberNamesUnique": "ชื่อสมาชิกต้องไม่ซ้ำกัน",
+ "openCodeLeadModelRequired": "หัวหน้า OpenCode ต้องเลือกโมเดล",
+ "openCodeTeammateRequired": "หัวหน้า OpenCode ต้องมีเพื่อนร่วมทีม OpenCode อย่างน้อยหนึ่งคน",
+ "teamLaunching": "ทีมกำลังเริ่มอยู่",
+ "teamNameExists": "มีชื่อทีมนี้อยู่แล้ว",
+ "checkFormFields": "ตรวจสอบช่องในฟอร์ม"
+ }
+ },
+ "editTeam": {
+ "actions": {
+ "cancel": "ยกเลิก",
+ "save": "บันทึก"
+ },
+ "addMemberLockReason": "ใช้กล่องโต้ตอบเพิ่มสมาชิกเฉพาะเพื่อเพิ่มเพื่อนร่วมทีมใหม่ขณะที่ทีมกำลังทำงานสด",
+ "description": "เปลี่ยนชื่อทีม คำอธิบาย และสี",
+ "errors": {
+ "changesSavedRefreshFailed": "บันทึกการเปลี่ยนแปลงทีมแล้ว แต่รีเฟรชมุมมองล่าสุดไม่สำเร็จ: {{message}}",
+ "liveRenameBlocked": "ไม่สามารถเปลี่ยนชื่อเพื่อนร่วมทีมที่มีอยู่ขณะทีมทำงานสดได้ ที่เปลี่ยนชื่อ: {{names}}",
+ "memberNameEmpty": "ชื่อสมาชิกต้องไม่ว่างเปล่า",
+ "memberNameInvalid": "ชื่อสมาชิกต้องขึ้นต้นด้วยตัวอักษรหรือตัวเลข ใช้ได้เฉพาะ [a-zA-Z0-9._-] สูงสุด 128 อักขระ",
+ "memberNameNumericSuffix": "ไม่อนุญาตให้ใช้ชื่อสมาชิก \"{{name}}\" (สงวนไว้สำหรับคำต่อท้ายอัตโนมัติของ Claude CLI) ใช้ \"{{base}}\" แทน",
+ "memberNameReserved": "ชื่อสมาชิก \"{{name}}\" ถูกสงวนไว้",
+ "memberNamesUnique": "ชื่อสมาชิกต้องไม่ซ้ำกันก่อนบันทึก",
+ "newLiveTeammates": "เพิ่มเพื่อนร่วมทีมใหม่จากกล่องโต้ตอบเพิ่มสมาชิกเฉพาะขณะที่ทีมทำงานสด แก้ไขทีมรองรับเฉพาะการอัปเดตเพื่อนร่วมทีมที่มีอยู่เท่านั้น",
+ "provisioning": "ไม่สามารถแก้ไขการตั้งค่าทีมขณะที่การจัดเตรียมยังดำเนินอยู่ รอให้การเริ่มเสร็จสิ้น แล้วลองอีกครั้ง",
+ "restartFailedMany": "บันทึกทีมแล้ว แต่รีสตาร์ทเพื่อนร่วมทีมเหล่านี้ไม่สำเร็จ: {{failures}}",
+ "restartFailedOne": "บันทึกทีมแล้ว แต่รีสตาร์ทเพื่อนร่วมทีมคนนี้ไม่สำเร็จ: {{failures}}",
+ "saveFailed": "บันทึกไม่สำเร็จ",
+ "settingsChanged": "การตั้งค่าทีมเปลี่ยนแปลงขณะกล่องโต้ตอบนี้เปิดอยู่ เปิดใหม่และตรวจสอบสถานะล่าสุดก่อนบันทึก",
+ "settingsSavedMembersAndRefreshFailed": "บันทึกการตั้งค่าทีมแล้ว แต่การเปลี่ยนแปลงสมาชิกล้มเหลว: {{message}} การรีเฟรชก็ล้มเหลวด้วย: {{refreshError}}",
+ "settingsSavedMembersFailed": "บันทึกการตั้งค่าทีมแล้ว แต่การเปลี่ยนแปลงสมาชิกล้มเหลว: {{message}}",
+ "settingsSavedRefreshFailed": "บันทึกการตั้งค่าทีมแล้ว แต่รีเฟรชมุมมองล่าสุดไม่สำเร็จ: {{message}}",
+ "teamNameEmpty": "ชื่อทีมต้องไม่ว่างเปล่า",
+ "unsupportedMixedPrimaryMutation": "ยังไม่รองรับการแก้ไขสดสำหรับเพื่อนร่วมทีมที่หลักเป็นเจ้าของในทีม OpenCode แบบผสม หยุดทีม แก้ไขรายชื่อ แล้วเริ่มใหม่ ที่ได้รับผลกระทบ: {{names}}"
+ },
+ "fields": {
+ "colorOptional": "สี (ไม่บังคับ)",
+ "description": "คำอธิบาย",
+ "name": "ชื่อ"
+ },
+ "memberRestartWarning": "การบันทึกจะรีสตาร์ทเพื่อนร่วมทีมคนนี้เพื่อใช้การเปลี่ยนแปลงบทบาท เวิร์กโฟลว์ การแยก worktree ผู้ให้บริการ โมเดล ระดับความพยายาม หรือการเข้าถึง MCP",
+ "notices": {
+ "liveRenameBlocked": "การบันทึกแบบสดถูกบล็อกเนื่องจากมีการเปลี่ยนชื่อเพื่อนร่วมทีมที่มีอยู่ ยกเลิกการเปลี่ยนชื่อเหล่านั้นหรือหยุดทีมก่อน",
+ "newLiveTeammates": "ไม่สามารถเพิ่มเพื่อนร่วมทีมใหม่จากแก้ไขทีมขณะทีมทำงานสดได้ ใช้กล่องโต้ตอบเพิ่มสมาชิกแทน",
+ "provisioning": "การจัดเตรียมทีมยังดำเนินอยู่ การแก้ไขถูกล็อกชั่วคราวจนกว่าการเริ่มจะเสร็จสิ้น",
+ "restartMany": "การบันทึกจะรีสตาร์ทหรือเริ่มเพื่อนร่วมทีมเหล่านี้ใหม่เพื่อใช้การเปลี่ยนแปลงบทบาท เวิร์กโฟลว์ การแยก worktree ผู้ให้บริการ โมเดล ระดับความพยายาม หรือการเข้าถึง MCP: {{names}}",
+ "restartOne": "การบันทึกจะรีสตาร์ทหรือเริ่มเพื่อนร่วมทีมคนนี้ใหม่เพื่อใช้การเปลี่ยนแปลงบทบาท เวิร์กโฟลว์ การแยก worktree ผู้ให้บริการ โมเดล ระดับความพยายาม หรือการเข้าถึง MCP: {{names}}",
+ "unsupportedMixedPrimaryMutation": "การแก้ไข/ลบแบบสดสำหรับเพื่อนร่วมทีมที่หลักเป็นเจ้าของในทีม OpenCode แบบผสมต้องหยุดและเริ่มทีมใหม่: {{names}}"
+ },
+ "placeholders": {
+ "description": "คำอธิบายทีม (ไม่บังคับ)",
+ "teamName": "ชื่อทีม"
+ },
+ "teamLead": {
+ "changeRuntime": "เปลี่ยนรันไทม์ของหัวหน้า",
+ "changeRuntimeDescription": "เปิดเริ่มทีมใหม่เพื่อเปลี่ยนผู้ให้บริการ โมเดล หรือระดับความพยายามของหัวหน้า",
+ "modelLockReason": "รันไทม์ของหัวหน้าทีมจัดการจากเริ่มทีมใหม่",
+ "readOnlyHint": "ชื่อและบทบาทของหัวหน้าทีมเป็นแบบอ่านอย่างเดียวที่นี่ เปิดแผงรันไทม์ในแถวของหัวหน้าเพื่อเปลี่ยนผู้ให้บริการ โมเดล หรือระดับความพยายาม",
+ "role": "หัวหน้าทีม"
+ },
+ "title": "แก้ไขทีม"
+ },
+ "memberDraft": {
+ "actions": {
+ "remove": "ลบสมาชิก",
+ "removeAria": "ลบ {{name}}",
+ "restore": "กู้คืนสมาชิก",
+ "restoreAria": "กู้คืน {{name}}"
+ },
+ "anthropicContext": {
+ "defaultSetting": "การตั้งค่าคอนเท็กซ์เริ่มต้น",
+ "description": "คอนเท็กซ์ของ Anthropic ใช้ทั้งทีมสำหรับการเริ่มนี้: {{mode}} ใช้ช่องทำเครื่องหมายจำกัดคอนเท็กซ์ในแผงรันไทม์ของหัวหน้าเพื่อเปลี่ยน",
+ "limitEnabled": "เปิดใช้งานขีดจำกัด 200K"
+ },
+ "mcp": {
+ "buttonInherit": "สืบทอด MCP",
+ "buttonScopes": "ขอบเขต MCP",
+ "chooseScopes": "เลือกขอบเขต",
+ "inheritLead": "สืบทอดจากหัวหน้า",
+ "lockedInfo": "เปิดใช้งาน Agent Teams MCP เท่านั้นสำหรับเพื่อนร่วมทีมทุกคน เพื่อนร่วมทีมคนนี้จะเริ่มด้วยเซิร์ฟเวอร์ Agent Teams เท่านั้น",
+ "mode": "โหมด MCP",
+ "scopes": {
+ "local": "ในเครื่อง",
+ "project": "โปรเจกต์",
+ "user": "ผู้ใช้"
+ },
+ "serverNames": "ชื่อเซิร์ฟเวอร์",
+ "settingInfo": "Agent Teams MCP เริ่มเพื่อนร่วมทีมคนนี้ด้วยเซิร์ฟเวอร์ Agent Teams เท่านั้น โหมดขอบเขตและรายการอนุญาตใช้กับการเริ่มเพื่อนร่วมทีมคนนี้เท่านั้น",
+ "strictAllowlist": "รายการอนุญาตเข้มงวด",
+ "tooltip": "{{label}}: ควบคุมนโยบายการสืบทอด MCP ของสมาชิกคนนี้",
+ "agentTeamsMcp": "Agent Teams MCP"
+ },
+ "model": {
+ "ariaLabel": "ผู้ให้บริการ {{provider}}, {{model}}",
+ "currentLeadRuntime": "รันไทม์ปัจจุบันของหัวหน้า",
+ "default": "ค่าเริ่มต้น",
+ "inheritedTooltip": "ผู้ให้บริการ โมเดล และระดับความพยายามสืบทอดจากหัวหน้าขณะที่เปิดใช้งานการซิงค์",
+ "leadSuffix": "{{label}} (หัวหน้า)",
+ "liveDisabled": "การเปลี่ยนผู้ให้บริการ โมเดล และระดับความพยายามถูกปิดใช้งานขณะทีมทำงานสด เชื่อมต่อทีมใหม่เพื่อใช้การเปลี่ยนแปลงอย่างปลอดภัย",
+ "lockedActionFallback": "การเปลี่ยนรันไทม์ของหัวหน้าจะเปิดเริ่มทีมใหม่ ซึ่งสามารถอัปเดตผู้ให้บริการ โมเดล และระดับความพยายามได้",
+ "restartWholeTeam": "การบันทึกการเปลี่ยนรันไทม์เหล่านั้นจะรีสตาร์ททั้งทีม"
+ },
+ "nameAria": "ชื่อสมาชิก {{index}}",
+ "nameFallback": "สมาชิก {{index}}",
+ "noRole": "ไม่มีบทบาท",
+ "removed": "ลบแล้ว",
+ "workflow": {
+ "addTooltip": "เพิ่มเวิร์กโฟลว์เพื่อนร่วมทีม",
+ "editTooltip": "แก้ไขเวิร์กโฟลว์เพื่อนร่วมทีม",
+ "label": "เวิร์กโฟลว์ (ไม่บังคับ)",
+ "placeholder": "เอเจนต์นี้ควรทำงานอย่างไร โต้ตอบกับผู้อื่นอย่างไร...",
+ "saved": "บันทึกแล้ว"
+ },
+ "worktree": {
+ "description": "รันเพื่อนร่วมทีมคนนี้ใน git worktree แยกต่างหาก การยอมรับ/ปฏิเสธการเปลี่ยนแปลงจะกำหนดเป้าหมายไปที่ worktree นั้น ไม่ใช่พื้นที่ทำงานของหัวหน้า",
+ "label": "Worktree"
+ },
+ "addMembers": {
+ "title": "เพิ่มสมาชิก",
+ "description": "เพิ่มสมาชิกใหม่ไปยัง {{teamName}}"
+ },
+ "placeholders": {
+ "name": "member-name",
+ "mcpServers": "github, sentry"
+ }
+ },
+ "detail": {
+ "actions": {
+ "add": "เพิ่ม",
+ "cancel": "ยกเลิก",
+ "delete": "ลบ",
+ "editCode": "แก้ไขโค้ด",
+ "launch": "เริ่ม",
+ "remove": "ลบออก",
+ "stop": "หยุด",
+ "task": "งาน",
+ "visualize": "แสดงภาพ"
+ },
+ "deleteTeam": {
+ "description": "ลบทีม \"{{team}}\" หรือไม่ การดำเนินการนี้ไม่สามารถย้อนกลับได้ ข้อมูลและงานทั้งหมดของทีมจะถูกลบ",
+ "title": "ลบทีม"
+ },
+ "draft": {
+ "descriptionPrefix": "นี่คือทีมแบบร่าง -",
+ "descriptionSuffix": "ได้รับการกำหนดค่าด้วย {{count}} {{member}} แต่ยังไม่ได้จัดเตรียมโดย CLI คลิกเริ่มเพื่อเลือกโมเดลและเริ่มทีม",
+ "descriptionSuffix_few": "ได้รับการกำหนดค่าด้วย {{count}} {{member}} แต่ยังไม่ได้จัดเตรียมโดย CLI คลิกเริ่มเพื่อเลือกโมเดลและเริ่มทีม",
+ "descriptionSuffix_many": "ได้รับการกำหนดค่าด้วย {{count}} {{member}} แต่ยังไม่ได้จัดเตรียมโดย CLI คลิกเริ่มเพื่อเลือกโมเดลและเริ่มทีม",
+ "descriptionSuffix_one": "ได้รับการกำหนดค่าด้วย {{count}} {{member}} แต่ยังไม่ได้จัดเตรียมโดย CLI คลิกเริ่มเพื่อเลือกโมเดลและเริ่มทีม",
+ "descriptionSuffix_other": "ได้รับการกำหนดค่าด้วย {{count}} {{member}} แต่ยังไม่ได้จัดเตรียมโดย CLI คลิกเริ่มเพื่อเลือกโมเดลและเริ่มทีม",
+ "member": "สมาชิก",
+ "member_few": "สมาชิก",
+ "member_many": "สมาชิก",
+ "member_one": "สมาชิก",
+ "member_other": "สมาชิก",
+ "title": "ยังไม่ได้เริ่มทีม"
+ },
+ "invalidTab": "แท็บทีมไม่ถูกต้อง",
+ "kanbanSafeData": "โหลด Kanban ได้ไม่ครบถ้วน กำลังแสดงข้อมูลที่ปลอดภัย",
+ "loadFailed": "โหลดทีมไม่สำเร็จ",
+ "loading": "กำลังโหลดทีม",
+ "loadingSidebar": "กำลังโหลดแถบด้านข้างของทีม",
+ "offline": {
+ "offline": "ทีมออฟไลน์",
+ "partialFailed": "การเริ่มครั้งล่าสุดล้มเหลวกลางคัน",
+ "partialMissing": "การเริ่มครั้งล่าสุดล้มเหลวกลางคัน - เพื่อนร่วมทีม {{missing}}/{{expected}} คนไม่ได้เข้าร่วม",
+ "reconciling": "การเริ่มครั้งล่าสุดยังกำลังปรับให้สอดคล้องกัน"
+ },
+ "previous": "ก่อนหน้า: {{paths}}",
+ "removeMember": {
+ "description": "ลบ \"{{member}}\" ออกจากทีมหรือไม่ งานและข้อความจะถูกเก็บไว้ แต่ชื่อนี้ไม่สามารถนำกลับมาใช้ได้",
+ "title": "ลบสมาชิก"
+ },
+ "sections": {
+ "team": "ทีม"
+ },
+ "solo": "เดี่ยว",
+ "status": {
+ "active": "ใช้งานอยู่",
+ "launching": "กำลังเริ่ม...",
+ "running": "กำลังทำงาน"
+ },
+ "telemetry": {
+ "cpu": "CPU",
+ "memory": "หน่วยความจำ"
+ },
+ "tooltips": {
+ "deleteTeam": "ลบทีม",
+ "editTeam": "แก้ไขทีม",
+ "editUnavailableProvisioning": "ไม่สามารถแก้ไขทีมขณะที่การจัดเตรียมยังดำเนินอยู่",
+ "openBuiltInEditor": "เปิดโปรเจกต์ในเครื่องมือแก้ไขในตัว",
+ "openTeamGraph": "เปิดกราฟทีม",
+ "stopTeam": "หยุดทีม"
+ },
+ "waitingForProvisioning": "ข้อมูลทีมจะปรากฏเมื่อการจัดเตรียมเสร็จสมบูรณ์",
+ "context": {
+ "title": "คอนเท็กซ์",
+ "loading": "กำลังโหลด...",
+ "noSessionLoaded": "ยังไม่ได้โหลดเซสชัน",
+ "closePanel": "ปิดแผงคอนเท็กซ์ {{team}}",
+ "loadingContext": "กำลังโหลดคอนเท็กซ์...",
+ "openLeadSession": "เปิดเซสชันหัวหน้าทีมเพื่อดูคอนเท็กซ์"
+ }
+ },
+ "review": {
+ "fileHeader": {
+ "actions": {
+ "accept": "ยอมรับ",
+ "discard": "ละทิ้ง",
+ "discardTooltip": "ละทิ้งการแก้ไขทั้งหมดของไฟล์นี้",
+ "keepMyDraft": "เก็บแบบร่างของฉัน",
+ "reject": "ปฏิเสธ",
+ "reloadFromDisk": "โหลดใหม่จากดิสก์",
+ "restore": "กู้คืน",
+ "restoreTooltip": "สร้าง/กู้คืนไฟล์นี้บนดิสก์จากตัวอย่าง",
+ "saveFile": "บันทึกไฟล์",
+ "saveFileTooltip": "บันทึกไฟล์ลงดิสก์"
+ },
+ "badges": {
+ "deleted": "ลบแล้ว",
+ "manualReview": "รีวิวด้วยตนเอง",
+ "new": "ใหม่",
+ "worktree": "WORKTREE"
+ },
+ "contentSource": {
+ "disk-current": "ดิสก์ปัจจุบัน",
+ "file-history": "ประวัติไฟล์",
+ "git-fallback": "Git Fallback",
+ "ledger-exact": "บัญชีงาน",
+ "ledger-snapshot": "สแนปช็อตบัญชี",
+ "snippet-reconstruction": "สร้างใหม่",
+ "unavailable": "เนื้อหาไม่พร้อมใช้งาน"
+ },
+ "contentUnavailable": {
+ "badge": "เนื้อหาไม่พร้อมใช้งาน",
+ "description": "บัญชีบันทึกเมตาดาตาของการเปลี่ยนแปลงนี้ไว้ แต่เนื้อหาข้อความฉบับเต็มไม่พร้อมใช้งาน โดยทั่วไปหมายถึงเนื้อหาแบบไบนารี ขนาดใหญ่ หรือมีเฉพาะแฮช",
+ "safety": "การยอมรับ/ปฏิเสธอัตโนมัติถูกปิดใช้งานสำหรับไฟล์นี้เพื่อหลีกเลี่ยงการเขียนดิสก์ที่ไม่ปลอดภัย",
+ "title": "เนื้อหาข้อความไม่พร้อมใช้งาน"
+ },
+ "disabled": {
+ "acceptRejectContentUnavailable": "การยอมรับ/ปฏิเสธถูกปิดใช้งานเนื่องจากเนื้อหาข้อความฉบับเต็มไม่พร้อมใช้งาน",
+ "acceptRejectMissingOnDisk": "การยอมรับ/ปฏิเสธถูกปิดใช้งานขณะที่ไฟล์หายไปจากดิสก์",
+ "rejectBaselineUnavailable": "การปฏิเสธถูกปิดใช้งานเนื่องจากเส้นฐานเดิมไม่พร้อมใช้งาน",
+ "rejectContentUnavailable": "การปฏิเสธถูกปิดใช้งานเนื่องจากเนื้อหาข้อความฉบับเต็มไม่พร้อมใช้งาน",
+ "rejectManualLedgerReview": "การปฏิเสธถูกปิดใช้งานเนื่องจากการเปลี่ยนแปลงในบัญชีนี้มีเนื้อหาแบบไบนารี ขนาดใหญ่ หรือไม่พร้อมใช้งาน"
+ },
+ "externalChange": {
+ "changedOnDisk": "เปลี่ยนแปลงบนดิสก์",
+ "deletedOnDisk": "ลบบนดิสก์",
+ "recreatedOnDisk": "สร้างใหม่บนดิสก์"
+ },
+ "missingOnDisk": {
+ "badge": "หายไปจากดิสก์",
+ "description": "เรายังสามารถแสดงตัวอย่างจากบันทึกของเอเจนต์ได้ แต่ระบบไฟล์ของคุณไม่ซิงค์กัน",
+ "restorePrefix": "ใช้",
+ "restoreSuffix": "เพื่อเขียนเนื้อหาตัวอย่างกลับลงดิสก์",
+ "restoreUnavailable": "เนื้อหาไฟล์ฉบับเต็มไม่พร้อมใช้งานสำหรับการกู้คืนอัตโนมัติ",
+ "title": "ไฟล์หายไปจากดิสก์"
+ },
+ "pathChange": {
+ "from": "จาก {{path}}",
+ "to": "ไปยัง {{path}}"
+ },
+ "worktree": {
+ "isolated": "Worktree ที่แยกต่างหาก"
+ }
+ },
+ "toolbar": {
+ "stats": {
+ "pending": "{{count}} รอดำเนินการ",
+ "pending_one": "{{count}} รอดำเนินการ",
+ "pending_other": "{{count}} รอดำเนินการ",
+ "accepted": "{{count}} ยอมรับแล้ว",
+ "accepted_one": "{{count}} ยอมรับแล้ว",
+ "accepted_other": "{{count}} ยอมรับแล้ว",
+ "rejected": "{{count}} ปฏิเสธแล้ว",
+ "rejected_one": "{{count}} ปฏิเสธแล้ว",
+ "rejected_other": "{{count}} ปฏิเสธแล้ว",
+ "acrossFiles": "ใน {{count}} ไฟล์",
+ "acrossFiles_one": "ใน {{count}} ไฟล์",
+ "acrossFiles_other": "ใน {{count}} ไฟล์",
+ "edited": "{{count}} แก้ไขแล้ว",
+ "edited_one": "{{count}} แก้ไขแล้ว",
+ "edited_other": "{{count}} แก้ไขแล้ว",
+ "pending_few": "{{count}} รอดำเนินการ",
+ "pending_many": "{{count}} รอดำเนินการ",
+ "accepted_few": "{{count}} ยอมรับแล้ว",
+ "accepted_many": "{{count}} ยอมรับแล้ว",
+ "rejected_few": "{{count}} ปฏิเสธแล้ว",
+ "rejected_many": "{{count}} ปฏิเสธแล้ว",
+ "acrossFiles_few": "ใน {{count}} ไฟล์",
+ "acrossFiles_many": "ใน {{count}} ไฟล์",
+ "edited_few": "{{count}} แก้ไขแล้ว",
+ "edited_many": "{{count}} แก้ไขแล้ว"
+ },
+ "actions": {
+ "auto": "อัตโนมัติ",
+ "undo": "เลิกทำ",
+ "acceptAll": "ยอมรับทั้งหมด",
+ "rejectAll": "ปฏิเสธทั้งหมด",
+ "applying": "กำลังใช้งาน...",
+ "applyRejections": "ใช้การปฏิเสธ"
+ },
+ "tooltips": {
+ "autoOn": "ทำเครื่องหมายไฟล์ว่าดูแล้วอัตโนมัติเมื่อเลื่อนถึงท้าย (เปิด)",
+ "autoOff": "ทำเครื่องหมายไฟล์ว่าดูแล้วอัตโนมัติเมื่อเลื่อนถึงท้าย (ปิด)",
+ "undo": "เลิกทำการรีวิวครั้งล่าสุด (Ctrl+Z)",
+ "acceptAll": "ยอมรับการเปลี่ยนแปลงทั้งหมดในทุกไฟล์",
+ "rejectAll": "ปฏิเสธการเปลี่ยนแปลงที่ปฏิเสธได้อย่างปลอดภัยทั้งหมดในทุกไฟล์",
+ "rejectAllDisabled": "ไม่มีไฟล์ที่รอดำเนินการซึ่งมีเส้นฐานเดิมที่ปลอดภัยให้ปฏิเสธ",
+ "applyRejections": "ใช้ส่วนที่ปฏิเสธลงดิสก์ การเปลี่ยนแปลงที่ยอมรับจะคงไว้ตามเดิม"
+ }
+ },
+ "diffError": {
+ "title": "เรนเดอร์มุมมอง diff ไม่สำเร็จ",
+ "unexpected": "เกิดข้อผิดพลาดที่ไม่คาดคิดขณะเรนเดอร์ diff",
+ "actions": {
+ "retry": "ลองอีกครั้ง"
+ },
+ "raw": {
+ "show": "แสดงข้อมูล diff ดิบ",
+ "file": "ไฟล์: {{file}}",
+ "original": "--- ต้นฉบับ",
+ "modified": "+++ แก้ไขแล้ว",
+ "charsTotal": "... (รวม {{count}} อักขระ)",
+ "charsTotal_one": "... (รวม {{count}} อักขระ)",
+ "charsTotal_other": "... (รวม {{count}} อักขระ)",
+ "charsTotal_few": "... (รวม {{count}} อักขระ)",
+ "charsTotal_many": "... (รวม {{count}} อักขระ)"
+ }
+ },
+ "fileTree": {
+ "viewed": "ดูแล้ว",
+ "badges": {
+ "new": "ใหม่",
+ "deleted": "ลบแล้ว"
+ },
+ "collapseFolder": "ยุบ {{name}}",
+ "expandFolder": "ขยาย {{name}}",
+ "empty": {
+ "noChangedFiles": "ไม่มีไฟล์ที่เปลี่ยนแปลง",
+ "noMatchingFiles": "ไม่มีไฟล์ที่ตรงกัน"
+ },
+ "searchPlaceholder": "ค้นหาไฟล์…",
+ "filters": {
+ "unresolved": "ยังไม่ได้แก้ไข",
+ "rejected": "ปฏิเสธแล้ว",
+ "new": "ใหม่",
+ "clear": "ล้าง"
+ }
+ },
+ "diffControls": {
+ "previousChunk": "ส่วนก่อนหน้า",
+ "nextChunk": "ส่วนถัดไป",
+ "rejectChange": "ปฏิเสธการเปลี่ยนแปลง (⌘N)",
+ "acceptChange": "ยอมรับการเปลี่ยนแปลง (⌘Y)",
+ "undo": "เลิกทำ",
+ "keep": "เก็บไว้",
+ "rejectShortcut": "⌘N",
+ "acceptShortcut": "⌘Y"
+ },
+ "conflict": {
+ "title": "ตรวจพบความขัดแย้ง",
+ "description": "ไฟล์นี้ถูกแก้ไขหลังจากการเปลี่ยนแปลงของเอเจนต์",
+ "cancel": "ยกเลิก",
+ "saveResolution": "บันทึกการแก้ไข",
+ "editManually": "แก้ไขด้วยตนเอง",
+ "useOriginal": "ใช้ต้นฉบับ",
+ "keepCurrent": "เก็บปัจจุบัน"
+ },
+ "fullDiffLoading": {
+ "titleOne": "กำลังเตรียม Diff ฉบับเต็ม",
+ "titleMany": "กำลังเตรียม Diff ฉบับเต็ม {{count}} รายการ",
+ "subtitleForFile": "กำลังสรุป diff ของเครื่องมือแก้ไขที่แม่นยำสำหรับ {{file}}",
+ "subtitleCurrentFile": "กำลังสรุป diff ของเครื่องมือแก้ไขที่แม่นยำสำหรับไฟล์ปัจจุบัน",
+ "subtitleMany": "กำลังหาเส้นฐานก่อน/หลังที่แม่นยำสำหรับไฟล์ที่กำลังโหลดอยู่",
+ "previewsReady": "ตัวอย่าง {{count}} รายการพร้อมแล้ว",
+ "previewsReady_one": "ตัวอย่าง {{count}} รายการพร้อมแล้ว",
+ "editorViewLoading": "กำลังโหลดมุมมองเครื่องมือแก้ไข",
+ "filesInProgress": "{{count}} ไฟล์กำลังดำเนินการ",
+ "filesInProgress_one": "{{count}} ไฟล์กำลังดำเนินการ",
+ "filesReady": "{{ready}}/{{total}} ไฟล์พร้อมแล้ว",
+ "progressDescription": "{{ready}} พร้อมแล้ว, {{loading}} ยังกำลังโหลด ตัวอย่าง diff จะยังคงแสดงด้านล่างขณะที่กำลังหาเส้นฐานที่เหลือ",
+ "singleDescription": "ตัวอย่าง diff จะยังคงแสดงด้านล่างขณะที่กำลังหาเส้นฐานที่แม่นยำ",
+ "previewsReady_few": "ตัวอย่าง {{count}} รายการพร้อมแล้ว",
+ "previewsReady_many": "ตัวอย่าง {{count}} รายการพร้อมแล้ว",
+ "previewsReady_other": "ตัวอย่าง {{count}} รายการพร้อมแล้ว",
+ "filesInProgress_few": "{{count}} ไฟล์กำลังดำเนินการ",
+ "filesInProgress_many": "{{count}} ไฟล์กำลังดำเนินการ",
+ "filesInProgress_other": "{{count}} ไฟล์กำลังดำเนินการ"
+ },
+ "fileMissingPrefix": "ไฟล์หายไปจากดิสก์ diff นี้อาจเป็นเพียงตัวอย่างจากบันทึกของเอเจนต์ ใช้",
+ "restore": "กู้คืน",
+ "fileMissingSuffix": "เพื่อสร้างไฟล์บนดิสก์",
+ "filePlaceholder": {
+ "loading": "กำลังโหลด",
+ "description": "กำลังเตรียม diff ของเครื่องมือแก้ไขฉบับเต็มสำหรับไฟล์นี้"
+ },
+ "loading": {
+ "diff": "DIFF",
+ "ledgerObjectsProcessed": "ประมวลผลออบเจกต์บัญชีแล้ว {{count}} รายการ",
+ "ledgerObjectsProcessed_one": "ประมวลผลออบเจกต์บัญชีแล้ว {{count}} รายการ",
+ "ledgerObjectsProcessed_other": "ประมวลผลออบเจกต์บัญชีแล้ว {{count}} รายการ",
+ "ledgerObjectsProcessed_few": "ประมวลผลออบเจกต์บัญชีแล้ว {{count}} รายการ",
+ "ledgerObjectsProcessed_many": "ประมวลผลออบเจกต์บัญชีแล้ว {{count}} รายการ",
+ "phases": {
+ "readingLedger": "กำลังอ่านบัญชีงาน...",
+ "resolvingFiles": "กำลังหาสถานะไฟล์...",
+ "checkingWorktree": "กำลังตรวจสอบบริบท worktree...",
+ "preparingDiffs": "กำลังเตรียม diff สำหรับรีวิว..."
+ }
+ },
+ "progress": {
+ "viewed": "{{viewed}}/{{total}} ดูแล้ว"
+ },
+ "scope": {
+ "readMore": "อ่านเพิ่มเติม",
+ "tiers": {
+ "exact": {
+ "title": "กำหนดขอบเขตงานได้อย่างแม่นยำ",
+ "detail": "พบทั้งเครื่องหมายเริ่มต้นและเสร็จสิ้นในบันทึกเซสชัน diff รวมเฉพาะการเปลี่ยนแปลงที่ทำระหว่างงานนี้โดยเฉพาะ - งานอื่นที่แก้ไขไฟล์เดียวกันจะถูกยกเว้น"
+ },
+ "endEstimated": {
+ "title": "ประมาณการขอบเขตสิ้นสุด",
+ "detail": "พบเฉพาะเครื่องหมายเริ่มต้น - งานยังไม่มีเครื่องหมายเสร็จสิ้น การเปลี่ยนแปลงแสดงตั้งแต่เริ่มงานจนถึงสิ้นสุดเซสชัน หากมีงานอื่นรันหลังจากงานนี้ในเซสชันเดียวกัน การเปลี่ยนแปลงของงานเหล่านั้นอาจถูกรวมไว้ด้วย"
+ },
+ "startEstimated": {
+ "title": "ประมาณการขอบเขตเริ่มต้น",
+ "detail": "พบเฉพาะเครื่องหมายเสร็จสิ้น - การเริ่มงานไม่ถูกบันทึก หากมีงานอื่นรันก่อนหน้างานนี้ในเซสชันเดียวกัน การเปลี่ยนแปลงของงานเหล่านั้นในไฟล์เดียวกันอาจถูกรวมไว้ด้วย"
+ },
+ "allSession": {
+ "title": "กำลังแสดงการเปลี่ยนแปลงทั้งเซสชัน",
+ "detail": "ไม่พบเครื่องหมายงานในบันทึกเซสชัน ไม่สามารถแยกงานนี้ได้ - แสดงการเปลี่ยนแปลงไฟล์ทั้งหมดจากทั้งเซสชัน รวมถึงการเปลี่ยนแปลงจากงานอื่น สิ่งนี้อาจเกิดขึ้นกับ CLI เวอร์ชันเก่าหรือเวิร์กโฟลว์ที่ไม่เป็นมาตรฐาน"
+ }
+ },
+ "ledger": {
+ "exact": {
+ "title": "บันทึกการเปลี่ยนแปลงโดยบัญชีงาน",
+ "detail": "ตัวจัดการบันทึกการเปลี่ยนแปลงไฟล์เหล่านี้ขณะที่เอเจนต์ทำงานนี้อยู่",
+ "badge": "บัญชีแม่นยำ"
+ },
+ "limited": {
+ "title": "บันทึกการเปลี่ยนแปลงด้วยความสามารถในการรีวิวที่จำกัด",
+ "detail": "ตัวจัดการบันทึกการเปลี่ยนแปลงไฟล์เหล่านี้สำหรับงานนี้ แต่มีอย่างน้อยหนึ่งการเปลี่ยนแปลงที่บันทึกจากสแนปช็อตหรือแหล่งที่มีเฉพาะเมตาดาตา รีวิว diff ข้อความที่แม่นยำตามที่มี เนื้อหาแบบไบนารีหรือที่ไม่พร้อมใช้งานอาจต้องรีวิวด้วยตนเอง",
+ "mixedBadge": "ความสามารถในการรีวิวแบบผสม",
+ "needsReviewBadge": "ต้องรีวิว"
+ }
+ },
+ "workInterval": {
+ "title": "กำหนดขอบเขตตามช่วงเวลาทำงานที่บันทึกไว้",
+ "detail": "เครื่องหมายเริ่มต้นงานไม่มีในบันทึกเซสชัน ดังนั้น diff จึงกำหนดขอบเขตตามช่วงเวลาทำงานของงานที่เก็บไว้บนบอร์ด",
+ "badge": "กำหนดขอบเขตตามช่วงเวลา"
+ },
+ "confidence": {
+ "high": "ความเชื่อมั่นสูง",
+ "medium": "ความเชื่อมั่นปานกลาง",
+ "low": "ความเชื่อมั่นต่ำ",
+ "bestEffort": "ทำเต็มที่"
+ }
+ },
+ "shortcuts": {
+ "title": "แป้นพิมพ์ลัด",
+ "actions": {
+ "nextChange": "การเปลี่ยนแปลงถัดไป",
+ "previousChange": "การเปลี่ยนแปลงก่อนหน้า",
+ "nextFile": "ไฟล์ถัดไป",
+ "previousFile": "ไฟล์ก่อนหน้า",
+ "acceptChange": "ยอมรับการเปลี่ยนแปลง",
+ "rejectChange": "ปฏิเสธการเปลี่ยนแปลง",
+ "saveFile": "บันทึกไฟล์",
+ "undo": "เลิกทำ",
+ "redo": "ทำซ้ำ",
+ "toggleShortcuts": "สลับแป้นพิมพ์ลัด",
+ "closeDialog": "ปิดกล่องโต้ตอบ"
+ }
+ },
+ "timeline": {
+ "empty": "ไม่มีเหตุการณ์การแก้ไข",
+ "titleWithCount": "ไทม์ไลน์การแก้ไข ({{count}})"
+ },
+ "continuousScroll": {
+ "empty": "ไม่มีการเปลี่ยนแปลงไฟล์ที่รีวิวได้"
+ },
+ "empty": {
+ "noSafeDiff": "ไม่มี diff ที่ปลอดภัย",
+ "noFileChangesRecorded": "ไม่มีการบันทึกการเปลี่ยนแปลงไฟล์",
+ "noSafeDiffDescription": "บัญชีงานไม่ได้เปิดเผย diff ไฟล์ที่ปลอดภัยสำหรับงานนี้",
+ "noSafeDiffDiagnosticsDescription": "บัญชีงานไม่ได้เปิดเผย diff ไฟล์ที่ปลอดภัยสำหรับงานนี้ การวินิจฉัยด้านล่างอธิบายสาเหตุ",
+ "noFileEventsYet": "บัญชีงานยังไม่มีเหตุการณ์ไฟล์สำหรับงานนี้",
+ "noFileEvents": "บัญชีงานไม่มีเหตุการณ์ไฟล์สำหรับงานนี้"
+ }
+ },
+ "messages": {
+ "actions": {
+ "bottomSheetActions": "การดำเนินการชีตด้านล่างของข้อความ",
+ "collapseAll": "ยุบข้อความทั้งหมด",
+ "collapseSheet": "ยุบชีต",
+ "expandAll": "ขยายข้อความทั้งหมด",
+ "expandSheet": "ขยายชีต",
+ "floatComposer": "ลอยตัวเขียนข้อความ",
+ "floatMessagesComposer": "ลอยตัวเขียนข้อความ",
+ "hideSearch": "ซ่อนการค้นหา",
+ "loadOlder": "โหลดข้อความที่เก่ากว่า",
+ "markAllRead": "ทำเครื่องหมายทั้งหมดว่าอ่านแล้ว",
+ "messageActions": "การดำเนินการข้อความ",
+ "moveMessagesToBottomSheet": "ย้ายข้อความไปยังชีตด้านล่าง",
+ "moveMessagesToSidebar": "ย้ายข้อความไปยังแถบด้านข้าง",
+ "moveToBottomSheet": "ย้ายไปยังชีตด้านล่าง",
+ "moveToInline": "ย้ายไปแบบอินไลน์",
+ "moveToSidebar": "ย้ายไปยังแถบด้านข้าง",
+ "panelActions": "การดำเนินการแผงข้อความ",
+ "searchMessages": "ค้นหาข้อความ"
+ },
+ "delivery": {
+ "copied": "คัดลอกแล้ว",
+ "copyDebugDetails": "คัดลอกรายละเอียดดีบัก",
+ "details": "รายละเอียด",
+ "fields": {
+ "acceptanceUnknown": "acceptanceUnknown",
+ "delivered": "delivered",
+ "diagnostics": "diagnostics",
+ "ledgerStatus": "ledgerStatus",
+ "messageId": "messageId",
+ "providerId": "providerId",
+ "queuedBehindMessageId": "queuedBehindMessageId",
+ "reason": "reason",
+ "responsePending": "responsePending",
+ "responseState": "responseState",
+ "statusMessageId": "statusMessageId",
+ "userVisibleMessage": "userVisibleMessage",
+ "userVisibleNextReviewAt": "userVisibleNextReviewAt",
+ "userVisibleReasonCode": "userVisibleReasonCode",
+ "userVisibleState": "userVisibleState",
+ "visibleReplyCorrelation": "visibleReplyCorrelation",
+ "visibleReplyMessageId": "visibleReplyMessageId"
+ }
+ },
+ "panelMode": "โหมดแผงข้อความ",
+ "title": "ข้อความ",
+ "unread": {
+ "new": "{{count}} ใหม่",
+ "unread": "{{count}} ยังไม่อ่าน",
+ "new_few": "{{count}} ใหม่",
+ "new_many": "{{count}} ใหม่",
+ "new_one": "{{count}} ใหม่",
+ "new_other": "{{count}} ใหม่",
+ "unread_few": "{{count}} ยังไม่อ่าน",
+ "unread_many": "{{count}} ยังไม่อ่าน",
+ "unread_one": "{{count}} ยังไม่อ่าน",
+ "unread_other": "{{count}} ยังไม่อ่าน"
+ },
+ "filter": {
+ "ariaLabel": "กรองข้อความ",
+ "tooltip": "กรองข้อความ",
+ "from": "จาก",
+ "to": "ถึง",
+ "noData": "ไม่มีข้อมูล",
+ "showStatusUpdates": "แสดงการอัปเดตสถานะ (idle/shutdown)",
+ "actions": {
+ "reset": "รีเซ็ต",
+ "save": "บันทึก"
+ }
+ },
+ "status": {
+ "title": "สถานะ"
+ },
+ "actionMode": {
+ "label": "โหมดการดำเนินการ"
+ },
+ "search": {
+ "placeholder": "ค้นหา..."
+ }
+ },
+ "modelSelector": {
+ "badges": {
+ "configured": "กำหนดค่าแล้ว",
+ "connected": "เชื่อมต่อแล้ว",
+ "failed": "ล้มเหลว",
+ "free": "ฟรี",
+ "local": "ในเครื่อง",
+ "needsTest": "ต้องทดสอบ",
+ "verified": "ยืนยันแล้ว",
+ "unavailable": "ไม่พร้อมใช้งาน",
+ "issue": "ปัญหา"
+ },
+ "customModelId": "ID โมเดลกำหนดเอง",
+ "label": "โมเดล (ไม่บังคับ)",
+ "multimodelRequired": "Codex และ Gemini ต้องใช้โหมด Multimodel",
+ "openCode": {
+ "allSources": "แหล่งที่มา OpenCode ทั้งหมด",
+ "filterSource": "กรอง {{source}}",
+ "filterSources": "กรองแหล่งที่มา OpenCode",
+ "freeOnly": "เฉพาะฟรี",
+ "freeTooltip": "OpenCode ทำเครื่องหมายโมเดลนี้ว่าฟรี",
+ "loadingModels": "กำลังโหลดโมเดล OpenCode...",
+ "noSourcesFound": "ไม่พบแหล่งที่มา",
+ "recommendedOnly": "เฉพาะที่แนะนำ",
+ "searchSources": "ค้นหาแหล่งที่มา",
+ "sourcesCount": "{{count}} แหล่งที่มา OpenCode",
+ "sourcesCount_few": "{{count}} แหล่งที่มา OpenCode",
+ "sourcesCount_many": "{{count}} แหล่งที่มา OpenCode",
+ "sourcesCount_one": "{{count}} แหล่งที่มา OpenCode",
+ "sourcesCount_other": "{{count}} แหล่งที่มา OpenCode"
+ },
+ "reason": "เหตุผล: {{reason}}",
+ "runtimeModelsSyncing": "โมเดลที่ระบุชัดเจนโหลดจากรันไทม์ปัจจุบัน ค่าเริ่มต้นยังคงใช้ได้ขณะที่รายการกำลังซิงค์",
+ "fastMode": {
+ "codexLabel": "โหมดเร็ว (เครดิต 2 เท่า)",
+ "optionalLabel": "โหมดเร็ว (ไม่บังคับ)",
+ "defaultOff": "ค่าเริ่มต้น (ปิด)",
+ "fast": "เร็ว",
+ "off": "ปิด",
+ "defaultFast": "ค่าเริ่มต้น (เร็ว)",
+ "defaultResolvesTo": "ค่าเริ่มต้นปัจจุบันกำหนดเป็น {{mode}}",
+ "runtimeBackedHint": "โหมดเร็วได้รับการสนับสนุนจากรันไทม์และปลดล็อกเฉพาะเมื่อโมเดลเริ่มต้นของ Anthropic ที่กำหนดรองรับเท่านั้น"
+ },
+ "anthropicExtraUsage": {
+ "pricingDocs": "อ่านเอกสารราคาของ Anthropic"
+ },
+ "searchModels": "ค้นหาโมเดล",
+ "defaultModel": "ค่าเริ่มต้น",
+ "empty": {
+ "noSearchMatches": "ไม่มีโมเดลที่ตรงกับการค้นหานี้",
+ "recommendedFreeOpenCode": "ไม่มีโมเดล OpenCode ฟรีที่แนะนำในรายการรันไทม์ปัจจุบัน",
+ "freeOpenCode": "ไม่มีโมเดล OpenCode ฟรีในรายการรันไทม์ปัจจุบัน",
+ "recommendedOpenCode": "ไม่มีโมเดล OpenCode ที่แนะนำในรายการรันไทม์ปัจจุบัน",
+ "noModels": "ไม่มีโมเดลในรายการรันไทม์ปัจจุบัน"
+ },
+ "openCodeStatus": {
+ "notReadyTitle": "OpenCode ยังไม่พร้อมสำหรับการเริ่มทีม",
+ "freeModelsAvailableTitle": "มีโมเดล OpenCode ฟรีให้ใช้งาน",
+ "providerNotConnectedTitle": "ผู้ให้บริการ OpenCode ยังไม่เชื่อมต่อ",
+ "readyTitle": "OpenCode พร้อมแล้ว",
+ "readyMessage": "OpenCode ผ่านการตรวจสอบความพร้อมของผู้ให้บริการ เลือกเพื่อใช้โมเดล OpenCode สำหรับทีมนี้",
+ "useOpenCode": "ใช้ OpenCode",
+ "badges": {
+ "check": "ตรวจสอบ",
+ "install": "ติดตั้ง",
+ "free": "ฟรี",
+ "setup": "ตั้งค่า"
+ },
+ "summary": {
+ "checking": "สถานะ OpenCode: กำลังตรวจสอบรันไทม์",
+ "status": "สถานะ OpenCode: {{parts}}"
+ },
+ "summaryParts": {
+ "teamLaunchBlocked": "การเริ่มทีมถูกบล็อก",
+ "providerOptional": "การเชื่อมต่อผู้ให้บริการไม่บังคับ",
+ "providerModelsNeedSetup": "โมเดลที่สนับสนุนโดยผู้ให้บริการต้องตั้งค่า",
+ "teamLaunchReady": "การเริ่มทีมพร้อมแล้ว",
+ "runtimeDetected": "ตรวจพบรันไทม์",
+ "runtimeMissing": "ไม่มีรันไทม์",
+ "freeWithoutAuth": "มีโมเดลฟรีให้ใช้โดยไม่ต้องยืนยันตัวตน",
+ "providerConnected": "ผู้ให้บริการเชื่อมต่อแล้ว",
+ "providerNotConnected": "ผู้ให้บริการยังไม่เชื่อมต่อ"
+ },
+ "messages": {
+ "checking": "แอปยังคงตรวจสอบรันไทม์ OpenCode รอให้สถานะผู้ให้บริการเสร็จสิ้น แล้วลองอีกครั้ง",
+ "unsupported": "ไม่ได้ติดตั้ง OpenCode ไม่พบ หรือรันไทม์ที่ตรวจพบไม่รองรับ ติดตั้งหรืออัปเดต OpenCode แล้วรีเฟรชสถานะผู้ให้บริการ คุณยังสามารถใช้ปุ่มติดตั้งบนหน้าแรกได้",
+ "freeAvailable": "ตรวจพบ OpenCode คุณสามารถใช้โมเดล OpenCode ฟรีเช่น Big Pickle ได้โดยไม่ต้องเชื่อมต่อผู้ให้บริการ เชื่อมต่อผู้ให้บริการเฉพาะเมื่อคุณต้องการโมเดลที่สนับสนุนโดยผู้ให้บริการ",
+ "noFreeListed": "ตรวจพบ OpenCode แต่ยังไม่มีรายการโมเดล OpenCode ฟรี รีเฟรชสถานะผู้ให้บริการ หรือเชื่อมต่อผู้ให้บริการใน OpenCode สำหรับโมเดลที่สนับสนุนโดยผู้ให้บริการ",
+ "launchBlocked": "OpenCode ติดตั้งและยืนยันตัวตนแล้ว แต่ความพร้อมในการเริ่ม Agent Teams ถูกบล็อก",
+ "ready": "OpenCode พร้อมสำหรับการเริ่มทีม"
+ },
+ "loadingRuntime": "สถานะรันไทม์ OpenCode ยังกำลังโหลด"
+ },
+ "advisory": {
+ "pingNotConfirmed": "ยังไม่ยืนยัน ping",
+ "note": "หมายเหตุ"
+ },
+ "placeholders": {
+ "customModelId": "openai/gpt-oss-20b"
+ },
+ "routeGroups": {
+ "openCodeConfig": "การตั้งค่า OpenCode",
+ "builtinFree": "ในตัวฟรี",
+ "connectedProviders": "ผู้ให้บริการที่เชื่อมต่อ",
+ "otherCatalog": "แคตตาล็อก OpenCode อื่น"
+ },
+ "pricing": {
+ "free": "ฟรี",
+ "inputShort": "เข้า {{rate}}",
+ "outputShort": "ออก {{rate}}",
+ "perMillionSummary": "{{summary}} / 1M",
+ "inputTitle": "อินพุต: {{rate}} ต่อ 1M โทเค็น",
+ "outputTitle": "เอาต์พุต: {{rate}} ต่อ 1M โทเค็น",
+ "cacheReadTitle": "อ่านแคช: {{rate}} ต่อ 1M โทเค็น",
+ "cacheWriteTitle": "เขียนแคช: {{rate}} ต่อ 1M โทเค็น"
+ },
+ "defaultTooltip": {
+ "anthropicCompatibleWithResolved": "ใช้โมเดลเริ่มต้นของเอนด์พอยต์ที่เข้ากันได้กับ Anthropic\nปัจจุบันกำหนดเป็น {{model}}",
+ "anthropicCompatible": "ใช้โมเดลเริ่มต้นของเอนด์พอยต์ที่เข้ากันได้กับ Anthropic",
+ "anthropic": "ใช้โมเดลเริ่มต้นของทีม Claude\nกำหนดเป็น {{longContextModel}} ด้วยคอนเท็กซ์ 1M หรือ {{limitedContextModel}} ด้วยคอนเท็กซ์ 200K เมื่อเปิดใช้งานจำกัดคอนเท็กซ์",
+ "openCodeWithResolved": "ใช้โมเดลเริ่มต้นของ OpenCode\nปัจจุบันกำหนดเป็น {{model}}",
+ "openCode": "ใช้โมเดลเริ่มต้นของรันไทม์ OpenCode",
+ "runtime": "ใช้ค่าเริ่มต้นของรันไทม์สำหรับผู้ให้บริการที่เลือก"
+ },
+ "multimodelOff": "ปิด Multimodel",
+ "unavailableInRuntime": "ไม่พร้อมใช้งานในรันไทม์ปัจจุบัน"
+ },
+ "taskDetail": {
+ "actions": {
+ "cancel": "ยกเลิก",
+ "delete": "ลบ",
+ "markResolved": "ทำเครื่องหมายว่าแก้ไขแล้ว",
+ "save": "บันทึก"
+ },
+ "attachments": {
+ "commentAttachment": "ไฟล์แนบความคิดเห็น",
+ "fromComments": "จากความคิดเห็น",
+ "preview": "ดูตัวอย่าง {{filename}}"
+ },
+ "changes": {
+ "badges": {
+ "attention": "ต้องการความสนใจ",
+ "noSafeDiff": "ไม่มี diff ที่ปลอดภัย"
+ },
+ "empty": {
+ "noFileChangesRecorded": "ไม่มีการบันทึกการเปลี่ยนแปลงไฟล์",
+ "noFileChangesRecordedYet": "ยังไม่มีการบันทึกการเปลี่ยนแปลงไฟล์",
+ "noReviewableChangesRecovered": "ไม่มีการเปลี่ยนแปลงไฟล์ที่รีวิวได้ถูกกู้คืน",
+ "noSafeDiffAvailable": "ไม่มี diff ที่ปลอดภัย"
+ },
+ "loadFailed": "โหลดสรุปการเปลี่ยนแปลงงานไม่สำเร็จ",
+ "loading": "กำลังโหลดการเปลี่ยนแปลง...",
+ "fileCount": "{{count}} ไฟล์",
+ "fileRowsHidden": "ซ่อนแถวไฟล์ {{count}} แถว",
+ "moreDiagnostics": "การวินิจฉัยอีก {{count}} รายการ",
+ "moreFiles": "ไฟล์อีก {{count}} รายการ",
+ "openInEditor": "เปิดในเครื่องมือแก้ไข",
+ "openTask": "เปิดงาน {{subject}}",
+ "refresh": "รีเฟรชการเปลี่ยนแปลง",
+ "refreshFailed": "รีเฟรชไม่สำเร็จ: {{error}}",
+ "refreshing": "กำลังรีเฟรช",
+ "refreshingChanges": "กำลังรีเฟรชการเปลี่ยนแปลง...",
+ "refreshTeamChanges": "รีเฟรชการเปลี่ยนแปลงของทีม",
+ "refreshShort": "รีเฟรช",
+ "reviewDiff": "รีวิว diff",
+ "reviewTaskDiff": "รีวิว diff ของงาน",
+ "scannedCandidateTasks": "สแกนแล้ว {{requested}} จาก {{eligible}} งานที่เป็นไปได้",
+ "tasksDeferred": "เลื่อน {{count}} งานในรอบนี้",
+ "title": "การเปลี่ยนแปลง",
+ "fileCount_few": "{{count}} ไฟล์",
+ "fileCount_many": "{{count}} ไฟล์",
+ "fileCount_one": "{{count}} ไฟล์",
+ "fileCount_other": "{{count}} ไฟล์",
+ "fileRowsHidden_few": "ซ่อนแถวไฟล์ {{count}} แถว",
+ "fileRowsHidden_many": "ซ่อนแถวไฟล์ {{count}} แถว",
+ "fileRowsHidden_one": "ซ่อนแถวไฟล์ {{count}} แถว",
+ "fileRowsHidden_other": "ซ่อนแถวไฟล์ {{count}} แถว",
+ "moreDiagnostics_few": "การวินิจฉัยอีก {{count}} รายการ",
+ "moreDiagnostics_many": "การวินิจฉัยอีก {{count}} รายการ",
+ "moreDiagnostics_one": "การวินิจฉัยอีก {{count}} รายการ",
+ "moreDiagnostics_other": "การวินิจฉัยอีก {{count}} รายการ",
+ "moreFiles_few": "ไฟล์อีก {{count}} รายการ",
+ "moreFiles_many": "ไฟล์อีก {{count}} รายการ",
+ "moreFiles_one": "ไฟล์อีก {{count}} รายการ",
+ "moreFiles_other": "ไฟล์อีก {{count}} รายการ",
+ "tasksDeferred_few": "เลื่อน {{count}} งานในรอบนี้",
+ "tasksDeferred_many": "เลื่อน {{count}} งานในรอบนี้",
+ "tasksDeferred_one": "เลื่อน {{count}} งานในรอบนี้",
+ "tasksDeferred_other": "เลื่อน {{count}} งานในรอบนี้"
+ },
+ "clarification": {
+ "awaitingLead": "รอคำชี้แจงจากหัวหน้าทีม",
+ "awaitingUser": "รอคำชี้แจงจากคุณ"
+ },
+ "description": {
+ "add": "คลิกเพื่อเพิ่มคำอธิบาย...",
+ "edit": "แก้ไขคำอธิบาย",
+ "placeholder": "คำอธิบายงาน (รองรับ markdown)"
+ },
+ "loading": {
+ "fetchingTeamData": "กำลังดึงข้อมูลทีม",
+ "title": "กำลังโหลดงาน..."
+ },
+ "logs": {
+ "newArriving": "บันทึกงานใหม่กำลังมาถึง"
+ },
+ "notFound": "ไม่พบงาน",
+ "related": {
+ "blockedBy": "ถูกบล็อกโดย",
+ "blocks": "บล็อก",
+ "linkedFrom": "เชื่อมโยงจาก",
+ "links": "ลิงก์",
+ "title": "งานที่เกี่ยวข้อง"
+ },
+ "review": {
+ "reviewer": "ผู้รีวิว: {{reviewer}}"
+ },
+ "sections": {
+ "attachments": "ไฟล์แนบ",
+ "changes": "การเปลี่ยนแปลง",
+ "comments": "ความคิดเห็น",
+ "description": "คำอธิบาย",
+ "taskLogs": "บันทึกงาน",
+ "workflowHistory": "ประวัติเวิร์กโฟลว์"
+ },
+ "unassigned": "ยังไม่ได้มอบหมาย",
+ "workflow": {
+ "implementationTimeTitle": "เวลาในการพัฒนาจากช่วงเวลาทำงานที่บันทึกไว้",
+ "inProgressTime": "เวลาที่กำลังดำเนินการ {{duration}}"
+ },
+ "comments": {
+ "renderLimit": "กำลังแสดงความคิดเห็นล่าสุด {{formattedCount}} รายการเพื่อให้ UI ตอบสนองได้ดี",
+ "badges": {
+ "approved": "อนุมัติแล้ว",
+ "reviewRequested": "ขอรีวิวแล้ว"
+ },
+ "unknownTime": "เวลาที่ไม่ทราบ",
+ "actions": {
+ "reply": "ตอบกลับ",
+ "replyToComment": "ตอบกลับความคิดเห็น",
+ "showMore": "แสดงความคิดเห็นเพิ่มเติม ({{visible}}/{{total}})",
+ "cancelReply": "ยกเลิกการตอบกลับ",
+ "comment": "ความคิดเห็น"
+ },
+ "attachments": {
+ "previewAlt": "ตัวอย่างไฟล์แนบ",
+ "downloadFailed": "ดาวน์โหลดล้มเหลว"
+ },
+ "replyingTo": "กำลังตอบกลับถึง",
+ "input": {
+ "placeholder": "เพิ่มความคิดเห็น... (Enter เพื่อส่ง)",
+ "charsLeft": "เหลือ {{count}} อักขระ",
+ "charsLeft_one": "เหลือ {{count}} อักขระ",
+ "charsLeft_other": "เหลือ {{count}} อักขระ",
+ "charsLeft_few": "เหลือ {{count}} อักขระ",
+ "charsLeft_many": "เหลือ {{count}} อักขระ"
+ }
+ },
+ "workflowTimeline": {
+ "empty": "ไม่มีประวัติเวิร์กโฟลว์ที่บันทึกไว้",
+ "currentImplementationInterval": "ช่วงเวลาการพัฒนาปัจจุบัน",
+ "implementationIntervalEnded": "ช่วงเวลาการพัฒนาสิ้นสุดที่การเปลี่ยนนี้",
+ "runningPrefix": "กำลังทำงาน ",
+ "createdAs": "สร้างเป็น",
+ "by": "โดย",
+ "reassigned": "มอบหมายใหม่",
+ "assignedTo": "มอบหมายให้",
+ "unassignedFrom": "ยกเลิกการมอบหมายจาก",
+ "ownerChanged": "เปลี่ยนเจ้าของ",
+ "reviewRequested": "ขอรีวิวแล้ว",
+ "reviewStarted": "เริ่มรีวิวแล้ว",
+ "changesRequested": "ขอให้แก้ไขแล้ว",
+ "approved": "อนุมัติแล้ว",
+ "unknownEvent": "เหตุการณ์ที่ไม่ทราบ"
+ },
+ "reviewStates": {
+ "approved": "อนุมัติแล้ว",
+ "needsFix": "ต้องแก้ไข",
+ "inReview": "กำลังรีวิว"
+ }
+ },
+ "tasks": {
+ "createTask": {
+ "assignee": "ผู้รับมอบหมาย",
+ "assigneeOptional": "ผู้รับมอบหมาย (ไม่บังคับ)",
+ "blockedByOptional": "งานที่บล็อก (ไม่บังคับ)",
+ "blockedBySummary": "งานจะถูกบล็อกโดย: {{tasks}}",
+ "cancel": "ยกเลิก",
+ "create": "สร้าง",
+ "creating": "กำลังสร้าง...",
+ "description": "งานจะถูกสร้างในไดเรกทอรี tasks/ ของทีมและปรากฏบนบอร์ด Kanban",
+ "descriptionOptional": "คำอธิบาย (ไม่บังคับ)",
+ "detailsPlaceholder": "รายละเอียดงาน (รองรับ markdown)",
+ "hideOptionalFields": "ซ่อนช่องที่ไม่บังคับ",
+ "offlineNotice": {
+ "after": "- เริ่มทีมเพื่อเริ่มการทำงาน",
+ "before": "ทีมออฟไลน์ งานจะถูกเพิ่มไปยัง"
+ },
+ "promptOptional": "พรอมต์สำหรับผู้รับมอบหมาย (ไม่บังคับ)",
+ "promptPlaceholder": "คำแนะนำกำหนดเองสำหรับสมาชิกทีม...",
+ "relatedOptional": "งานที่เกี่ยวข้อง (ไม่บังคับ)",
+ "relatedSummary": "ที่เกี่ยวข้อง: {{tasks}}",
+ "saved": "บันทึกแล้ว",
+ "searchTasks": "ค้นหางาน...",
+ "selectMember": "เลือกสมาชิก",
+ "selectMemberOptional": "เลือกสมาชิก...",
+ "showOptionalFields": "แสดงช่องที่ไม่บังคับ",
+ "startImmediately": "เริ่มทันที",
+ "startOfflineHint": "ทีมออฟไลน์ เริ่มทีมก่อนเพื่อเริ่มงานทันที",
+ "subject": "หัวเรื่อง",
+ "subjectPlaceholder": "ต้องทำอะไรบ้าง?",
+ "title": "สร้างงาน",
+ "todo": "TODO"
+ },
+ "list": {
+ "columns": {
+ "blockedBy": "ถูกบล็อกโดย",
+ "blocks": "บล็อก",
+ "id": "ID",
+ "owner": "เจ้าของ",
+ "status": "สถานะ",
+ "subject": "หัวเรื่อง"
+ },
+ "empty": "ไม่มีงานในทีมนี้",
+ "filters": {
+ "allOwners": "เจ้าของทั้งหมด",
+ "allStatuses": "สถานะทั้งหมด",
+ "ownerAria": "กรองงานตามเจ้าของ",
+ "statusAria": "กรองงานตามสถานะ"
+ },
+ "showing": "กำลังแสดง {{shown}} จาก {{total}}"
+ },
+ "status": {
+ "completed": "completed",
+ "deleted": "deleted",
+ "inProgress": "in_progress",
+ "pending": "pending"
+ },
+ "statusSummary": {
+ "progressAria": "งาน {{completed}}/{{total}} เสร็จสิ้น",
+ "inProgress": "{{count}} in_progress",
+ "inProgress_one": "{{count}} in_progress",
+ "inProgress_other": "{{count}} in_progress",
+ "inProgress_few": "{{count}} in_progress",
+ "inProgress_many": "{{count}} in_progress",
+ "pending": "{{count}} pending",
+ "pending_one": "{{count}} pending",
+ "pending_other": "{{count}} pending",
+ "pending_few": "{{count}} pending",
+ "pending_many": "{{count}} pending",
+ "completed": "{{count}} completed",
+ "completed_one": "{{count}} completed",
+ "completed_other": "{{count}} completed",
+ "completed_few": "{{count}} completed",
+ "completed_many": "{{count}} completed"
+ },
+ "unassigned": "ยังไม่ได้มอบหมาย",
+ "teamPrefix": "ทีม:",
+ "openTask": "เปิดงาน",
+ "deleteConfirm": {
+ "title": "ลบงาน",
+ "message": "ย้ายงาน #{{taskId}} ไปยังถังขยะหรือไม่?",
+ "confirmLabel": "ลบ",
+ "cancelLabel": "ยกเลิก"
+ }
+ },
+ "editor": {
+ "actions": {
+ "cancel": "ยกเลิก",
+ "closeEditor": "ปิดเครื่องมือแก้ไข",
+ "closeTab": "ปิดแท็บ",
+ "closeTooltip": "ปิดเครื่องมือแก้ไข (Esc)",
+ "discard": "ละทิ้ง",
+ "discardAndClose": "ละทิ้งและปิด",
+ "keep": "เก็บไว้",
+ "keepMine": "เก็บของฉัน",
+ "keyboardShortcuts": "แป้นพิมพ์ลัด",
+ "overwrite": "เขียนทับ",
+ "refreshAria": "รีเฟรช (F5)",
+ "refreshTooltip": "รีเฟรชสถานะ git (F5)",
+ "reload": "โหลดใหม่",
+ "retry": "ลองอีกครั้ง",
+ "save": "บันทึก",
+ "saveAllAndClose": "บันทึกทั้งหมดและปิด"
+ },
+ "ariaLabel": "เครื่องมือแก้ไขโปรเจกต์",
+ "dialogs": {
+ "conflictDescription": "ไฟล์ถูกแก้ไขจากภายนอกตั้งแต่คุณเปิด เขียนทับด้วยการเปลี่ยนแปลงของคุณหรือไม่?",
+ "conflictTitle": "ความขัดแย้งในการบันทึก",
+ "unsavedDescription": "คุณมีการเปลี่ยนแปลงที่ยังไม่ได้บันทึก คุณต้องการทำอะไร?",
+ "unsavedFileDescription": "ไฟล์นี้มีการเปลี่ยนแปลงที่ยังไม่ได้บันทึก คุณต้องการทำอะไร?",
+ "unsavedTitle": "การเปลี่ยนแปลงที่ยังไม่ได้บันทึก"
+ },
+ "newFile": {
+ "validation": {
+ "nameRequired": "ชื่อต้องไม่ว่างเปล่า",
+ "invalidName": "ชื่อไม่ถูกต้อง",
+ "invalidCharacters": "ชื่อมีอักขระที่ไม่ถูกต้อง",
+ "nameTooLong": "ชื่อยาวเกินไป"
+ },
+ "placeholders": {
+ "fileName": "ชื่อไฟล์...",
+ "folderName": "ชื่อโฟลเดอร์..."
+ },
+ "aria": {
+ "newFileName": "ชื่อไฟล์ใหม่",
+ "newFolderName": "ชื่อโฟลเดอร์ใหม่"
+ }
+ },
+ "draftRecovered": "กู้คืนการเปลี่ยนแปลงที่ยังไม่ได้บันทึกจากเซสชันก่อนหน้าแล้ว",
+ "externalChange": {
+ "changed": "ไฟล์เปลี่ยนแปลงบนดิสก์",
+ "deleted": "ไฟล์ไม่มีอยู่บนดิสก์อีกต่อไป"
+ },
+ "saveFailed": "บันทึกไม่สำเร็จ: {{error}}",
+ "sidebar": {
+ "explorer": "ตัวสำรวจ",
+ "hide": "ซ่อนแถบด้านข้าง",
+ "hideWithShortcut": "ซ่อนแถบด้านข้าง ({{shortcut}})",
+ "show": "แสดงแถบด้านข้าง",
+ "showWithShortcut": "แสดงแถบด้านข้าง ({{shortcut}})"
+ },
+ "searchInFiles": {
+ "title": "ค้นหาในไฟล์",
+ "closeSearch": "ปิดการค้นหา",
+ "closeSearchShortcut": "ปิดการค้นหา (Esc)",
+ "searchPlaceholder": "ค้นหา...",
+ "matchCase": "ตรงตามตัวพิมพ์",
+ "matchCaseToggle": "Aa",
+ "noResults": "ไม่พบผลลัพธ์",
+ "resultsSummary": "{{count}} ที่ตรงกันใน {{fileCount}} ไฟล์",
+ "resultsSummary_one": "{{count}} ที่ตรงกันใน {{fileCount}} ไฟล์",
+ "truncated": "(ตัดทอน)",
+ "resultsSummary_few": "{{count}} ที่ตรงกันใน {{fileCount}} ไฟล์",
+ "resultsSummary_many": "{{count}} ที่ตรงกันใน {{fileCount}} ไฟล์",
+ "resultsSummary_other": "{{count}} ที่ตรงกันใน {{fileCount}} ไฟล์"
+ },
+ "fileTree": {
+ "failedToLoadFiles": "โหลดไฟล์ไม่สำเร็จ: {{error}}",
+ "loading": "กำลังโหลดไฟล์...",
+ "empty": "ไม่พบไฟล์",
+ "dropForProjectRoot": "วางที่นี่สำหรับรากโปรเจกต์",
+ "moveToTrash": "ย้ายไปถังขยะ",
+ "moveToTrashConfirm": "ย้าย \"{{name}}\" ไปถังขยะหรือไม่?",
+ "cancel": "ยกเลิก"
+ },
+ "goToLine": {
+ "title": "ไปยังบรรทัด",
+ "position": "(ปัจจุบัน: {{current}}, ทั้งหมด: {{total}})",
+ "placeholder": "หมายเลขบรรทัด, +ออฟเซ็ต, -ออฟเซ็ต หรือ %",
+ "go": "ไป"
+ },
+ "searchPanel": {
+ "previousMatch": "ที่ตรงกันก่อนหน้า",
+ "nextMatch": "ที่ตรงกันถัดไป",
+ "close": "ปิด",
+ "replacePlaceholder": "แทนที่",
+ "replace": "แทนที่",
+ "replaceNext": "แทนที่ถัดไป",
+ "all": "ทั้งหมด",
+ "replaceAll": "แทนที่ทั้งหมด"
+ },
+ "statusBar": {
+ "position": "บรรทัด {{line}}, คอลัมน์ {{col}}",
+ "enableWatcher": "เปิดใช้งานตัวเฝ้าดูไฟล์",
+ "disableWatcher": "ปิดใช้งานตัวเฝ้าดูไฟล์",
+ "watch": "เฝ้าดู",
+ "watching": "กำลังเฝ้าดู",
+ "watchExternalChanges": "เฝ้าดูการเปลี่ยนแปลงจากภายนอก",
+ "disableExternalWatcher": "ปิดใช้งานตัวเฝ้าดูการเปลี่ยนแปลงจากภายนอก",
+ "encodingUtf8": "UTF-8",
+ "spaces": "ช่องว่าง: {{count}}"
+ },
+ "imagePreview": {
+ "loading": "กำลังโหลดตัวอย่าง...",
+ "openFullSize": "เปิดตัวอย่างขนาดเต็ม",
+ "openSystemViewer": "เปิดในโปรแกรมดูของระบบ"
+ },
+ "quickOpen": {
+ "title": "เปิดด่วน",
+ "searchPlaceholder": "ค้นหาไฟล์ตามชื่อ...",
+ "loading": "กำลังโหลดไฟล์...",
+ "empty": "ไม่พบไฟล์"
+ },
+ "errorBoundary": {
+ "crashed": "เครื่องมือแก้ไขขัดข้อง",
+ "unknownError": "ข้อผิดพลาดที่ไม่ทราบ"
+ },
+ "binaryPlaceholder": {
+ "file": "ไฟล์ไบนารี ({{size}})"
+ },
+ "unsavedChanges": "การเปลี่ยนแปลงที่ยังไม่ได้บันทึก",
+ "empty": {
+ "selectFile": "เลือกไฟล์จากโครงสร้างเพื่อแก้ไข"
+ },
+ "search": {
+ "toggleReplace": "สลับการแทนที่",
+ "placeholder": "ค้นหา"
+ },
+ "shortcuts": {
+ "title": "แป้นพิมพ์ลัด",
+ "groups": {
+ "fileOperations": "การดำเนินการไฟล์",
+ "search": "ค้นหา",
+ "navigation": "การนำทาง",
+ "editing": "การแก้ไข",
+ "markdown": "Markdown",
+ "general": "ทั่วไป"
+ },
+ "actions": {
+ "quickOpen": "เปิดด่วน",
+ "save": "บันทึก",
+ "saveAll": "บันทึกทั้งหมด",
+ "closeTab": "ปิดแท็บ",
+ "findInFile": "ค้นหาในไฟล์",
+ "searchInFiles": "ค้นหาในไฟล์",
+ "goToLine": "ไปยังบรรทัด",
+ "nextTab": "แท็บถัดไป",
+ "previousTab": "แท็บก่อนหน้า",
+ "cycleTabs": "วนแท็บ",
+ "toggleSidebar": "สลับแถบด้านข้าง",
+ "undo": "เลิกทำ",
+ "redo": "ทำซ้ำ",
+ "selectNextMatch": "เลือกที่ตรงกันถัดไป",
+ "toggleComment": "สลับคอมเมนต์โค้ด",
+ "splitPreview": "แยกตัวอย่าง",
+ "fullPreview": "ตัวอย่างเต็ม",
+ "closeEditor": "ปิดเครื่องมือแก้ไข"
+ }
+ },
+ "toolbar": {
+ "enableWordWrap": "เปิดใช้งานการตัดคำ",
+ "disableWordWrap": "ปิดใช้งานการตัดคำ",
+ "closeSplitPreview": "ปิดตัวอย่างแบบแยก",
+ "closePreview": "ปิดตัวอย่าง"
+ }
+ },
+ "launch": {
+ "actions": {
+ "createSchedule": "สร้างกำหนดการ",
+ "creating": "กำลังสร้าง...",
+ "goToDashboard": "ไปที่แดชบอร์ด",
+ "launchTeam": "เริ่มทีม",
+ "launching": "กำลังเริ่ม...",
+ "relaunchTeam": "เริ่มทีมใหม่",
+ "relaunching": "กำลังเริ่มใหม่...",
+ "saveChanges": "บันทึกการเปลี่ยนแปลง",
+ "saving": "กำลังบันทึก..."
+ },
+ "billing": {
+ "prefix": "เริ่มตั้งแต่วันที่ 15 มิถุนายน 2026 Anthropic จะเรียกเก็บค่า",
+ "readArticle": "อ่านบทความของ Anthropic",
+ "suffix": "และการใช้งาน Agent SDK จากเครดิต Agent SDK รายเดือน แยกจากขีดจำกัด Claude Code แบบโต้ตอบ เครดิตจะรีเซ็ตทุกรอบบิล และเครดิตที่ไม่ได้ใช้จะไม่ยกยอดไป"
+ },
+ "conflict": {
+ "description": "การรันสองทีมในไดเรกทอรีเดียวกันมีความเสี่ยง - อาจขัดแย้งกันในการแก้ไขไฟล์เดียวกัน ลองพิจารณาใช้ไดเรกทอรีอื่นหรือ git worktree เพื่อแยกการทำงาน",
+ "title": "ทีม \"{{team}}\" อีกทีมหนึ่งกำลังทำงานอยู่สำหรับไดเรกทอรีทำงานนี้",
+ "workingDirectory": "ไดเรกทอรีทำงาน:"
+ },
+ "description": {
+ "createSchedule": "ตั้งกำหนดการรันงาน Claude อัตโนมัติ",
+ "createScheduleForTeam": "ตั้งกำหนดการรันอัตโนมัติสำหรับทีม \"{{team}}\"",
+ "editSchedule": "กำลังแก้ไขกำหนดการสำหรับทีม \"{{team}}\"",
+ "launchPrefix": "เริ่มทีม",
+ "launchSuffix": "ผ่าน Claude CLI ในเครื่อง",
+ "relaunchPrefix": "หยุดการรันปัจจุบันสำหรับ",
+ "relaunchSuffix": "และเริ่มอีกครั้งผ่าน Claude CLI ในเครื่อง"
+ },
+ "prepare": {
+ "action": {
+ "launch": "เริ่ม",
+ "relaunch": "เริ่มใหม่"
+ },
+ "blocked": "สภาพแวดล้อมรันไทม์ไม่พร้อมใช้งาน - {{action}} ถูกบล็อก",
+ "checkingProviders": "กำลังตรวจสอบผู้ให้บริการที่เลือก...",
+ "failed": "เตรียมผู้ให้บริการที่เลือกไม่สำเร็จ",
+ "preflight": "การตรวจสอบก่อนเริ่มเพื่อตรวจจับข้อผิดพลาดก่อน{{action}}",
+ "preparingEnvironment": "กำลังเตรียมสภาพแวดล้อม...",
+ "ready": "ผู้ให้บริการที่เลือกทั้งหมดพร้อมแล้ว",
+ "readyWithNotes": "ผู้ให้บริการที่เลือกทั้งหมดพร้อมแล้ว พร้อมหมายเหตุ",
+ "unsupportedPreload": "เวอร์ชัน preload ปัจจุบันไม่รองรับ team:prepareProvisioning รีสตาร์ทแอป dev",
+ "selectWorkingDirectory": "เลือกไดเรกทอรีทำงานเพื่อตรวจสอบความถูกต้องของสภาพแวดล้อมการเริ่ม",
+ "someProvidersNeedAttention": "ผู้ให้บริการบางรายที่เลือกต้องการความสนใจ"
+ },
+ "prompt": {
+ "label": "พรอมต์",
+ "oneShotPrefix": "พรอมต์นี้จะถูกส่งไปยัง",
+ "oneShotSuffix": "เพื่อการรันแบบครั้งเดียว",
+ "saved": "บันทึกแล้ว",
+ "schedulePlaceholder": "คำแนะนำให้ Claude รันตามกำหนดการ...",
+ "teamLeadOptional": "พรอมต์สำหรับหัวหน้าทีม (ไม่บังคับ)",
+ "teamLeadPlaceholder": "คำแนะนำสำหรับหัวหน้าทีม..."
+ },
+ "providerChanged": "เปลี่ยนผู้ให้บริการจาก {{from}} เป็น {{to}} เซสชันหัวหน้าก่อนหน้าจะไม่ถูกดำเนินการต่อ และหัวหน้าจะเริ่มด้วยคอนเท็กซ์ใหม่เพื่อให้ใช้รันไทม์ใหม่ได้อย่างถูกต้อง",
+ "relaunchFreshSession": "การเริ่มทีมใหม่จะเริ่มเซสชันหัวหน้าใหม่ สถานะทีมที่คงทน บอร์ดงาน และการกำหนดค่าสมาชิกจะถูกนำกลับเข้าสู่พรอมต์การเริ่ม",
+ "relaunchWarning": {
+ "description": "การบันทึกการตั้งค่าเหล่านี้จะหยุดกระบวนการทีมปัจจุบัน คงรายชื่อที่อัปเดตไว้ และเริ่มทีมอีกครั้งด้วยรันไทม์ใหม่",
+ "title": "การเริ่มใหม่จะรีสตาร์ทการรันทีมปัจจุบัน"
+ },
+ "schedule": {
+ "labelOptional": "ป้ายกำกับ (ไม่บังคับ)",
+ "labelPlaceholder": "เช่น รีวิวโค้ดรายวัน, ทดสอบกลางคืน...",
+ "maxBudgetUsd": "งบประมาณสูงสุด (USD)",
+ "maxTurns": "เทิร์นสูงสุด",
+ "noLimit": "ไม่จำกัด",
+ "noMatches": "ไม่มีทีมที่ตรงกับการค้นหาของคุณ",
+ "noTeams": "ไม่มีทีมให้ใช้งาน สร้างทีมก่อน",
+ "searchTeams": "ค้นหาทีม...",
+ "selectTeam": "เลือกทีม...",
+ "team": "ทีม",
+ "title": "กำหนดการ"
+ },
+ "title": {
+ "createSchedule": "สร้างกำหนดการ",
+ "editSchedule": "แก้ไขกำหนดการ",
+ "launch": "เริ่มทีม",
+ "relaunch": "เริ่มทีมใหม่"
+ },
+ "errors": {
+ "loadProjectsFailed": "โหลดโปรเจกต์ไม่สำเร็จ",
+ "saveScheduleFailed": "บันทึกกำหนดการไม่สำเร็จ",
+ "relaunchFailed": "เริ่มทีมใหม่ไม่สำเร็จ",
+ "launchFailed": "เริ่มทีมไม่สำเร็จ"
+ },
+ "validation": {
+ "openCodeLeadModelRequired": "หัวหน้า OpenCode ต้องเลือกโมเดล",
+ "openCodeTeammateRequired": "หัวหน้า OpenCode ต้องมีเพื่อนร่วมทีม OpenCode อย่างน้อยหนึ่งคน",
+ "selectWorkingDirectory": "เลือกไดเรกทอรีทำงาน (cwd)",
+ "fixMemberNames": "แก้ไขชื่อสมาชิกก่อนเริ่ม",
+ "memberNamesUnique": "ชื่อสมาชิกต้องไม่ซ้ำกันก่อนเริ่ม"
+ },
+ "optionalSettings": {
+ "relaunchTitle": "การตั้งค่าการเริ่มใหม่",
+ "title": "การตั้งค่าการเริ่มเพิ่มเติม",
+ "relaunchDescription": "ตรวจสอบรายชื่อและรันไทม์ของหัวหน้าก่อนรีสตาร์ททีม",
+ "description": "เก็บโฟลว์การเริ่มให้เน้นที่เส้นทางโปรเจกต์ และขยายส่วนนี้เฉพาะเมื่อคุณต้องการควบคุมเพิ่มเติม"
+ }
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "คัดลอกทีม",
+ "createTeam": "สร้างทีม",
+ "deleteForever": "ลบถาวร",
+ "deletePermanently": "ลบอย่างถาวร",
+ "deleteTeam": "ลบทีม",
+ "launching": "กำลังเริ่ม...",
+ "launchTeam": "เริ่มทีม",
+ "relaunchTeam": "เริ่มทีมใหม่",
+ "restore": "กู้คืน",
+ "restoreTeam": "กู้คืนทีม",
+ "retry": "ลองอีกครั้ง",
+ "stopTeam": "หยุดทีม",
+ "stopping": "กำลังหยุด..."
+ },
+ "electronOnly": {
+ "description": "ในโหมดเบราว์เซอร์ ไม่สามารถเข้าถึงไดเรกทอรี `~/.claude/teams` ในเครื่องได้",
+ "title": "ทีมใช้งานได้เฉพาะในโหมด Electron เท่านั้น"
+ },
+ "empty": {
+ "description": "สร้างทีมที่นี่เพื่อเริ่มต้น ทีมจะปรากฏในรายการโดยอัตโนมัติ",
+ "localOnly": "การสร้างทีมใช้งานได้เฉพาะในโหมด Electron ในเครื่องเท่านั้น",
+ "title": "ไม่พบทีม"
+ },
+ "filter": {
+ "clearAll": "ล้างทั้งหมด",
+ "label": "กรองทีม",
+ "projectPriority": "ลำดับความสำคัญของโปรเจกต์",
+ "status": "สถานะ"
+ },
+ "loadFailed": "โหลดทีมไม่สำเร็จ",
+ "loading": "กำลังโหลดทีม...",
+ "localOnly": "ใช้งานได้เฉพาะในโหมด Electron ในเครื่องเท่านั้น",
+ "membersCount": "สมาชิก: {{count}}",
+ "membersCount_few": "สมาชิก: {{count}}",
+ "membersCount_many": "สมาชิก: {{count}}",
+ "membersCount_one": "สมาชิก: {{count}}",
+ "membersCount_other": "สมาชิก: {{count}}",
+ "noDescription": "ไม่มีคำอธิบาย",
+ "noMatches": "ไม่มีทีมที่ตรงกับตัวกรองปัจจุบัน",
+ "partial": {
+ "pending": "การเริ่มครั้งล่าสุดยังกำลังปรับให้สอดคล้องกัน",
+ "skipped": "การเริ่มครั้งล่าสุดมีเพื่อนร่วมทีมที่ถูกข้าม",
+ "skippedWithCount": "การเริ่มครั้งล่าสุดข้ามเพื่อนร่วมทีม {{count}}/{{expected}} คน",
+ "skippedWithCount_few": "การเริ่มครั้งล่าสุดข้ามเพื่อนร่วมทีม {{count}}/{{expected}} คน",
+ "skippedWithCount_many": "การเริ่มครั้งล่าสุดข้ามเพื่อนร่วมทีม {{count}}/{{expected}} คน",
+ "skippedWithCount_one": "การเริ่มครั้งล่าสุดข้ามเพื่อนร่วมทีม {{count}}/{{expected}} คน",
+ "skippedWithCount_other": "การเริ่มครั้งล่าสุดข้ามเพื่อนร่วมทีม {{count}}/{{expected}} คน",
+ "stopped": "การเริ่มครั้งล่าสุดหยุดก่อนที่เพื่อนร่วมทีมทุกคนจะเข้าร่วม",
+ "stoppedWithCount": "การเริ่มครั้งล่าสุดหยุดก่อนที่เพื่อนร่วมทีม {{count}}/{{expected}} คนจะเข้าร่วม",
+ "stoppedWithCount_few": "การเริ่มครั้งล่าสุดหยุดก่อนที่เพื่อนร่วมทีม {{count}}/{{expected}} คนจะเข้าร่วม",
+ "stoppedWithCount_many": "การเริ่มครั้งล่าสุดหยุดก่อนที่เพื่อนร่วมทีม {{count}}/{{expected}} คนจะเข้าร่วม",
+ "stoppedWithCount_one": "การเริ่มครั้งล่าสุดหยุดก่อนที่เพื่อนร่วมทีม {{count}}/{{expected}} คนจะเข้าร่วม",
+ "stoppedWithCount_other": "การเริ่มครั้งล่าสุดหยุดก่อนที่เพื่อนร่วมทีม {{count}}/{{expected}} คนจะเข้าร่วม"
+ },
+ "searchPlaceholder": "ค้นหาทีม...",
+ "sections": {
+ "otherTeams": "ทีมอื่น",
+ "projectTeams": "ทีมสำหรับ {{project}}",
+ "selectedProject": "โปรเจกต์ที่เลือก"
+ },
+ "solo": "เดี่ยว",
+ "status": {
+ "active": "ใช้งานอยู่",
+ "deleted": "ลบแล้ว",
+ "launching": "กำลังเริ่ม...",
+ "offline": "ออฟไลน์",
+ "partialFailure": "การเริ่มล้มเหลวกลางคัน",
+ "partialPending": "รอการบูตสแตรป",
+ "partialSkipped": "การเริ่มข้ามสมาชิก",
+ "running": "กำลังทำงาน"
+ },
+ "title": "เลือกทีม",
+ "trash": "ถังขยะ ({{count}})",
+ "trash_few": "ถังขยะ ({{count}})",
+ "trash_many": "ถังขยะ ({{count}})",
+ "trash_one": "ถังขยะ ({{count}})",
+ "trash_other": "ถังขยะ ({{count}})",
+ "deleteDraft": {
+ "title": "ลบแบบร่าง",
+ "message": "ลบทีมแบบร่าง \"{{teamName}}\" หรือไม่ การดำเนินการนี้ไม่สามารถยกเลิกได้",
+ "confirmLabel": "ลบ",
+ "cancelLabel": "ยกเลิก"
+ },
+ "moveToTrash": {
+ "title": "ย้ายไปถังขยะ",
+ "message": "ย้ายทีม \"{{teamName}}\" ไปถังขยะหรือไม่ คุณสามารถกู้คืนได้ในภายหลัง",
+ "confirmLabel": "ย้ายไปถังขยะ",
+ "cancelLabel": "ยกเลิก"
+ },
+ "deleteForever": {
+ "title": "ลบอย่างถาวร",
+ "message": "ลบทีม \"{{teamName}}\" อย่างถาวรหรือไม่ ข้อมูลทั้งหมดจะสูญหาย",
+ "confirmLabel": "ลบถาวร",
+ "cancelLabel": "ยกเลิก"
+ }
+ },
+ "messageComposer": {
+ "crossTeam": {
+ "hint": "เคล็ดลับ: ข้อความข้ามทีมจะไปยังหัวหน้าทีมเป้าหมาย หากคุณต้องการให้การตอบกลับกลับไปยังหัวหน้าทีมของคุณแทนที่จะเป็นคุณ ให้ระบุอย่างชัดเจนในข้อความ"
+ },
+ "attachments": {
+ "attachFiles": "แนบไฟล์ (วางหรือลากแล้ววาง)",
+ "unavailable": "ไฟล์แนบไม่พร้อมใช้งาน",
+ "disabledHint": "รองรับไฟล์แนบสำหรับหัวหน้าทีมออนไลน์และเพื่อนร่วมทีม OpenCode ออนไลน์ ลบไฟล์แนบหรือเปลี่ยนผู้รับ",
+ "restrictions": {
+ "crossTeam": "ไม่รองรับไฟล์แนบสำหรับข้อความข้ามทีม",
+ "teamOffline": "ทีมต้องออนไลน์เพื่อแนบไฟล์",
+ "unsupportedRecipient": "สามารถส่งไฟล์ไปยังหัวหน้าทีมหรือเพื่อนร่วมทีม OpenCode ได้",
+ "openCodeOffline": "ทีมต้องออนไลน์เพื่อแนบไฟล์สำหรับเพื่อนร่วมทีม OpenCode",
+ "sending": "รอให้ข้อความปัจจุบันส่งเสร็จก่อนเพิ่มไฟล์",
+ "maximumReached": "แนบไฟล์ถึงจำนวนสูงสุดแล้ว",
+ "leadOnly": "สามารถส่งไฟล์ไปยังหัวหน้าทีมเท่านั้น"
+ }
+ },
+ "slash": {
+ "restrictions": {
+ "attachments": "คำสั่งสแลชต้องมีหัวหน้าทีมที่ทำงานสดและไม่สามารถส่งพร้อมไฟล์แนบได้",
+ "crossTeam": "คำสั่งสแลชสามารถรันได้บนหัวหน้าทีมปัจจุบันเท่านั้น",
+ "notLead": "คำสั่งสแลชสามารถส่งไปยังหัวหน้าทีมเท่านั้น",
+ "leadOffline": "คำสั่งสแลชต้องให้หัวหน้าทีมออนไลน์"
+ }
+ },
+ "status": {
+ "reusedCrossTeamRequest": "นำคำขอข้ามทีมล่าสุดมาใช้ซ้ำ",
+ "teamOffline": "ทีมออฟไลน์"
+ },
+ "revision": {
+ "editing": "กำลังแก้ไขข้อความก่อนหน้า",
+ "cancel": "ยกเลิก",
+ "tooltip": "ขอให้เอเจนต์ละเว้นข้อความก่อนหน้าและกู้คืนไปยังตัวเขียนข้อความ"
+ },
+ "input": {
+ "charsLeft": "เหลือ {{count}} อักขระ",
+ "charsLeft_one": "เหลือ {{count}} อักขระ",
+ "charsLeft_other": "เหลือ {{count}} อักขระ",
+ "teamLaunchingPlaceholder": "ทีมกำลังเริ่ม... ข้อความจะถูกจัดคิวเพื่อส่งไปยังกล่องขาเข้า",
+ "crossTeamPlaceholder": "ข้อความข้ามทีมถึง {{team}}...",
+ "teamFallback": "ทีม",
+ "placeholder": "เขียนข้อความ... (Enter เพื่อส่ง, Shift+Enter สำหรับขึ้นบรรทัดใหม่)",
+ "slashTip": "เคล็ดลับ: คุณสามารถใช้ \"/\" เพื่อรันคำสั่ง Claude ใดก็ได้",
+ "charsLeft_few": "เหลือ {{count}} อักขระ",
+ "charsLeft_many": "เหลือ {{count}} อักขระ"
+ },
+ "teamSelector": {
+ "thisTeam": "ทีมนี้",
+ "current": "ปัจจุบัน",
+ "online": "ออนไลน์",
+ "offline": "ออฟไลน์",
+ "onlineTitle": "ออนไลน์",
+ "offlineTitle": "ออฟไลน์"
+ },
+ "recipient": {
+ "select": "เลือก...",
+ "searchPlaceholder": "ค้นหา...",
+ "noResults": "ไม่มีผลลัพธ์"
+ },
+ "actions": {
+ "voiceToText": "เสียงเป็นข้อความ",
+ "send": "ส่ง",
+ "sendingUnavailableLaunching": "ไม่สามารถส่งได้ขณะที่ทีมกำลังเริ่ม"
+ }
+ },
+ "claudeLogs": {
+ "filter": {
+ "ariaLabel": "กรองบันทึก",
+ "tooltip": "กรองบันทึก",
+ "sections": {
+ "stream": "สตรีม",
+ "content": "เนื้อหา"
+ },
+ "kinds": {
+ "output": "เอาต์พุต",
+ "thinking": "การคิด",
+ "tool": "การเรียกเครื่องมือ"
+ },
+ "actions": {
+ "reset": "รีเซ็ต",
+ "save": "บันทึก"
+ },
+ "streams": {
+ "stdout": "stdout",
+ "stderr": "stderr"
+ }
+ },
+ "rawLineCount": "{{formattedCount}} บรรทัดดิบ",
+ "rawLineCount_one": "{{formattedCount}} บรรทัดดิบ",
+ "rawLinesCaptured": "บันทึกแล้ว {{count}} รายการ",
+ "emptyRawLogs": "{{count}}; ยังไม่มีรายการใดเป็นเอาต์พุตของผู้ช่วย/เครื่องมือ",
+ "noLogsYet": "ยังไม่มีบันทึก",
+ "teamNotRunning": "ทีมไม่ได้ทำงาน",
+ "searchPlaceholder": "ค้นหาบันทึก...",
+ "clearSearch": "ล้างการค้นหา",
+ "newCount": "+{{count}} ใหม่",
+ "loading": "กำลังโหลด...",
+ "showMore": "ดูเพิ่มเติม",
+ "noLogsCaptured": "ไม่มีบันทึกที่ถูกจับ",
+ "noMatchingLogs": "ไม่มีบันทึกที่ตรงกัน",
+ "rawLineCount_few": "{{formattedCount}} บรรทัดดิบ",
+ "rawLineCount_many": "{{formattedCount}} บรรทัดดิบ",
+ "rawLineCount_other": "{{formattedCount}} บรรทัดดิบ",
+ "openFullscreen": "เปิดบันทึกแบบเต็มหน้าจอ",
+ "fullscreen": "เต็มหน้าจอ",
+ "viewingFullscreen": "กำลังดูในโหมดเต็มหน้าจอ",
+ "logsTitle": "บันทึก",
+ "sourceSelect": {
+ "placeholder": "เลือกแหล่งบันทึก...",
+ "searchPlaceholder": "ค้นหาแหล่งบันทึก...",
+ "emptyMessage": "ไม่พบแหล่งบันทึก",
+ "ariaLabel": "แหล่งบันทึก",
+ "leadLabel": "หัวหน้า",
+ "selectSourceEmpty": "เลือกแหล่งบันทึก",
+ "leadDescription": "หัวหน้าทีม",
+ "removedLabel": "ลบแล้ว",
+ "removedDescription": "ลบแล้ว"
+ }
+ },
+ "agentGraph": {
+ "popover": {
+ "externalTeam": "ทีมภายนอก",
+ "process": {
+ "startedBy": "เริ่มโดย:",
+ "at": "ที่:",
+ "openUrl": "เปิด URL"
+ },
+ "overflow": {
+ "hiddenTasks": "งานที่ซ่อน",
+ "empty": "ไม่มีงานที่ซ่อน"
+ },
+ "member": {
+ "lead": "หัวหน้า",
+ "workingOn": "กำลังทำ",
+ "recentTools": "เครื่องมือล่าสุด",
+ "spawn": {
+ "waitingToStart": "รอเริ่ม",
+ "starting": "กำลังเริ่ม",
+ "failed": "ล้มเหลว"
+ },
+ "state": {
+ "active": "ใช้งานอยู่",
+ "idle": "ว่าง",
+ "offline": "ออฟไลน์",
+ "runningTool": "กำลังรันเครื่องมือ"
+ },
+ "activeTool": {
+ "running": "กำลังรันเครื่องมือ",
+ "failed": "เครื่องมือล้มเหลว",
+ "finished": "เครื่องมือเสร็จสิ้น"
+ },
+ "actions": {
+ "message": "ข้อความ",
+ "profile": "โปรไฟล์",
+ "task": "งาน"
+ }
+ }
+ },
+ "logPreview": {
+ "logs": "บันทึก",
+ "loading": "กำลังโหลดบันทึก",
+ "more": "+{{count}} เพิ่มเติม",
+ "more_one": "+{{count}} เพิ่มเติม",
+ "more_other": "+{{count}} เพิ่มเติม",
+ "more_few": "+{{count}} เพิ่มเติม",
+ "more_many": "+{{count}} เพิ่มเติม",
+ "unsupportedProvider": "ผู้ให้บริการที่ไม่รองรับ",
+ "openCodeLogsDelayed": "บันทึก OpenCode ล่าช้า",
+ "logsUnavailable": "บันทึกไม่พร้อมใช้งาน",
+ "noRecentLogs": "ไม่มีบันทึกล่าสุด",
+ "toolError": "ข้อผิดพลาดเครื่องมือ",
+ "toolResult": "ผลลัพธ์เครื่องมือ",
+ "toolUse": "การใช้เครื่องมือ",
+ "thinking": "การคิด",
+ "error": "ข้อผิดพลาด",
+ "logEvent": "เหตุการณ์บันทึก",
+ "noErrorOutput": "ไม่มีเอาต์พุตข้อผิดพลาด",
+ "noOutput": "ไม่มีเอาต์พุต",
+ "noInput": "ไม่มีอินพุต"
+ },
+ "blockingEdge": {
+ "title": "การพึ่งพาที่บล็อก",
+ "blocks": "บล็อก",
+ "close": "ปิด",
+ "blockingHiddenTasks": "บล็อกงานที่ซ่อน",
+ "blockedHiddenTasks": "งานที่ซ่อนซึ่งถูกบล็อก",
+ "links_one": "{{count}} ลิงก์",
+ "links_other": "{{count}} ลิงก์",
+ "hiddenBlockingLinks_one": "{{count}} ลิงก์บล็อกที่ซ่อน",
+ "hiddenBlockingLinks_other": "{{count}} ลิงก์บล็อกที่ซ่อน",
+ "hiddenTaskStack": "สแตกงานที่ซ่อน",
+ "hiddenTasks_one": "{{count}} งานที่ซ่อน",
+ "hiddenTasks_other": "{{count}} งานที่ซ่อน",
+ "task": "งาน",
+ "openBlockerStack": "เปิดสแตกตัวบล็อก",
+ "openBlockedStack": "เปิดสแตกที่ถูกบล็อก",
+ "openBlockerTask": "เปิดงานตัวบล็อก",
+ "openBlockedTask": "เปิดงานที่ถูกบล็อก"
+ },
+ "activityHud": {
+ "activity": "กิจกรรม",
+ "noRecentActivity": "ไม่มีกิจกรรมล่าสุด",
+ "more": "+{{count}} เพิ่มเติม",
+ "more_one": "+{{count}} เพิ่มเติม",
+ "more_other": "+{{count}} เพิ่มเติม",
+ "more_few": "+{{count}} เพิ่มเติม",
+ "more_many": "+{{count}} เพิ่มเติม"
+ },
+ "provisioning": {
+ "launchDetails": "รายละเอียดการเริ่ม",
+ "launchDetailsDescription": "ความคืบหน้าการเริ่มทีมโดยละเอียด เอาต์พุตสด และบันทึก CLI"
+ }
+ },
+ "projectPath": {
+ "label": "โปรเจกต์",
+ "source": {
+ "claude": "พบโดย Claude",
+ "codex": "พบโดย Codex",
+ "mixed": "พบโดย Claude และ Codex"
+ },
+ "deleted": {
+ "title": "โฟลเดอร์โปรเจกต์ไม่มีอยู่อีกต่อไป",
+ "label": "ลบแล้ว"
+ },
+ "mode": {
+ "projectList": "จากรายการโปรเจกต์",
+ "customPath": "เส้นทางกำหนดเอง"
+ },
+ "loadingProjects": "กำลังโหลดโปรเจกต์...",
+ "selectProject": "เลือกโปรเจกต์...",
+ "searchPlaceholder": "ค้นหาโปรเจกต์ตามชื่อหรือเส้นทาง",
+ "empty": "ไม่พบสิ่งใด",
+ "selectFromList": "เลือกโปรเจกต์จากรายการ",
+ "noProjects": "ไม่พบโปรเจกต์ สลับไปยังเส้นทางกำหนดเอง",
+ "customWorkingDirectory": "ไดเรกทอรีทำงานกำหนดเอง",
+ "browse": "เรียกดู",
+ "createAutomatically": "หากไดเรกทอรีไม่มีอยู่ จะถูกสร้างขึ้นโดยอัตโนมัติ"
+ },
+ "members": {
+ "badges": {
+ "worktree": "worktree"
+ },
+ "runtimeTelemetry": {
+ "title": "โหลดรันไทม์ในเครื่อง",
+ "description": "เฉพาะกระบวนการหลักและกระบวนการลูกเท่านั้น ไม่รวมการอนุมาน LLM ระยะไกล",
+ "cpu": "CPU",
+ "memory": "หน่วยความจำ",
+ "summedRss": "RSS รวม",
+ "sharedHost": "เมตริกโฮสต์ OpenCode ที่ใช้ร่วมกัน ไม่ได้เป็นเฉพาะสมาชิกคนนี้",
+ "processTreeCapped": "โครงสร้างกระบวนการถูกจำกัดสำหรับตัวอย่างนี้",
+ "rssHint": "RSS อาจรวมเพจที่ใช้ร่วมกัน จึงควรอ่านเป็นสัญญาณโหลด ไม่ใช่หน่วยความจำเฉพาะ"
+ },
+ "editor": {
+ "title": "สมาชิก",
+ "addMember": "เพิ่มสมาชิก",
+ "editAsJson": "แก้ไขเป็น JSON",
+ "runInSeparateWorktrees": "รันเพื่อนร่วมทีมใน worktree แยกต่างหาก",
+ "agentTeamsMcpOnly": "Agent Teams MCP เท่านั้น",
+ "removedCount": "ลบแล้ว ({{count}})",
+ "removedModelLockReason": "สมาชิกที่ถูกลบจะถูกเก็บไว้สำหรับประวัติการลบแบบนุ่มนวล กู้คืนเพื่อแก้ไขการตั้งค่า",
+ "memberNamesUnique": "ชื่อสมาชิกต้องไม่ซ้ำกัน"
+ },
+ "stats": {
+ "computing": "กำลังคำนวณสถิติ...",
+ "empty": "ไม่มีสถิติให้ใช้งาน",
+ "lines": "บรรทัด",
+ "linesInfo": "โดยประมาณ แม่นยำสำหรับเครื่องมือ Edit และ Write การเขียนไฟล์ผ่าน Bash จะประมาณการจากรูปแบบคำสั่ง (heredoc, echo, sed) และอาจรายงานต่ำกว่าจริง",
+ "files": "ไฟล์",
+ "toolCalls": "การเรียกเครื่องมือ",
+ "tokens": "โทเค็น",
+ "toolUsage": "การใช้เครื่องมือ",
+ "filesTouched": "ไฟล์ที่แตะต้อง ({{count}})",
+ "viewAllChanges": "ดูการเปลี่ยนแปลงทั้งหมด",
+ "showLess": "ดูน้อยลง",
+ "moreFiles": "+{{count}} เพิ่มเติม",
+ "footer": "{{count}} เซสชัน · คำนวณ {{computedAgo}}",
+ "footer_one": "{{count}} เซสชัน · คำนวณ {{computedAgo}}",
+ "footer_few": "{{count}} เซสชัน · คำนวณ {{computedAgo}}",
+ "footer_many": "{{count}} เซสชัน · คำนวณ {{computedAgo}}",
+ "footer_other": "{{count}} เซสชัน · คำนวณ {{computedAgo}}"
+ },
+ "logs": {
+ "searching": "กำลังค้นหาบันทึก...",
+ "empty": "ไม่พบบันทึก",
+ "waitingForTaskActivity": "งานกำลังดำเนินการ - รอกิจกรรมเซสชัน (รีเฟรชอัตโนมัติ)...",
+ "noTaskActivity": "ยังไม่มีกิจกรรมเซสชันสำหรับงานนี้",
+ "noMemberActivity": "สมาชิกคนนี้ยังไม่มีกิจกรรมเซสชันที่บันทึกไว้",
+ "leadSessionTooltip": "บันทึกเซสชันหัวหน้าทีมฉบับเต็ม - มีประโยชน์สำหรับบริบทการประสานงานโดยรวม ไม่เฉพาะเจาะจงกับเอเจนต์นี้",
+ "memberSessionTooltip": "บันทึกเซสชันเพื่อนร่วมทีมที่คงทนฉบับเต็ม - มีประโยชน์เมื่องานรันในเซสชันสมาชิกหลักแทนที่จะเป็นไฟล์เอเจนต์ย่อย",
+ "startedAt": "เริ่มเมื่อ {{time}}",
+ "active": "ใช้งานอยู่",
+ "showDetails": "แสดงรายละเอียด",
+ "hideDetails": "ซ่อนรายละเอียด",
+ "loadingDetails": "กำลังโหลดรายละเอียด...",
+ "failedToLoadDetails": "โหลดรายละเอียดไม่สำเร็จ"
+ },
+ "detail": {
+ "relaunchOpenCode": "เริ่ม OpenCode ใหม่",
+ "restart": "รีสตาร์ท",
+ "legacyLogsFallback": "บันทึกแบบเดิม (Fallback)",
+ "copyDiagnostics": "คัดลอกการวินิจฉัย",
+ "pid": "PID {{pid}}",
+ "removedAt": "ลบเมื่อ {{date}}",
+ "failedToRestartMember": "รีสตาร์ทสมาชิกไม่สำเร็จ",
+ "sendMessage": "ส่งข้อความ",
+ "assignTask": "มอบหมายงาน",
+ "remove": "ลบ"
+ },
+ "list": {
+ "loading": "กำลังโหลดสมาชิกทีม",
+ "unavailable": "รายชื่อสมาชิกไม่พร้อมใช้งาน",
+ "unavailableDescription": "ทราบเพื่อนร่วมทีม {{count}} คนจากเมตาดาตาของทีม แต่ขาดรายละเอียดรายชื่อ",
+ "unavailableDescription_one": "ทราบเพื่อนร่วมทีม {{count}} คนจากเมตาดาตาของทีม แต่ขาดรายละเอียดรายชื่อ",
+ "soloLeadOnly": "ทีมเดี่ยว - หัวหน้าเท่านั้น",
+ "removedCount": "ลบแล้ว ({{count}})",
+ "unavailableDescription_few": "ทราบเพื่อนร่วมทีม {{count}} คนจากเมตาดาตาของทีม แต่ขาดรายละเอียดรายชื่อ",
+ "unavailableDescription_many": "ทราบเพื่อนร่วมทีม {{count}} คนจากเมตาดาตาของทีม แต่ขาดรายละเอียดรายชื่อ",
+ "unavailableDescription_other": "ทราบเพื่อนร่วมทีม {{count}} คนจากเมตาดาตาของทีม แต่ขาดรายละเอียดรายชื่อ"
+ },
+ "executionLog": {
+ "empty": "ไม่มีอะไรให้แสดง",
+ "emptyUserMessage": "{{time}} - (ว่างเปล่า)",
+ "agentInstructions": "คำแนะนำเอเจนต์",
+ "memberTurn": "เทิร์นของ {{member}}",
+ "agentTurn": "เทิร์นของเอเจนต์",
+ "turn": "เทิร์น"
+ },
+ "recentMessages": {
+ "latest": "ข้อความล่าสุด",
+ "latestForMember": "ข้อความล่าสุด - {{member}}",
+ "loadMore": "โหลดเพิ่มเติม",
+ "expand": "ขยาย",
+ "collapse": "ยุบ"
+ },
+ "leadModel": {
+ "defaultModel": "ค่าเริ่มต้น",
+ "providerModelAria": "ผู้ให้บริการ {{provider}}, {{model}}",
+ "leadShort": "หัวหน้า",
+ "teamLead": "หัวหน้าทีม",
+ "syncWithTeammates": "ซิงค์โมเดลกับเพื่อนร่วมทีม",
+ "anthropicTeamWide": "Anthropic ทั้งทีม",
+ "runtimeInheritance": "รันไทม์ของหัวหน้าใช้กับเพื่อนร่วมทีม เว้นแต่พวกเขาตั้งผู้ให้บริการหรือโมเดลของตัวเอง",
+ "anthropicContextLimit": "ขีดจำกัดคอนเท็กซ์ 200K ใช้ทั้งทีมสำหรับรันไทม์ Anthropic ในการเริ่มนี้ รวมถึงเพื่อนร่วมทีม Anthropic แบบกำหนดเอง"
+ },
+ "runtimeLogs": {
+ "autoRefresh": "รีเฟรชอัตโนมัติ",
+ "wrapLines": "ตัดบรรทัด",
+ "loadingTail": "กำลังโหลดส่วนท้ายของบันทึกกระบวนการ...",
+ "empty": "ยังไม่มีไฟล์บันทึกกระบวนการที่ถูกจับสำหรับสมาชิกคนนี้",
+ "copy": "คัดลอก",
+ "fileEmpty": "ไฟล์บันทึกกระบวนการว่างเปล่า",
+ "showingLast": "กำลังแสดง {{bytes}} ล่าสุด",
+ "showing": "กำลังแสดง {{bytes}}"
+ },
+ "tasks": {
+ "empty": "ไม่มีงานที่มอบหมายให้สมาชิกคนนี้"
+ },
+ "messages": {
+ "loadOlder": "โหลดข้อความที่เก่ากว่า",
+ "filters": {
+ "all": "ทั้งหมด",
+ "messages": "ข้อความ",
+ "comments": "ความคิดเห็น"
+ },
+ "empty": {
+ "loading": "กำลังโหลดกิจกรรม...",
+ "noComments": "ไม่มีความคิดเห็นสำหรับสมาชิกคนนี้",
+ "noLoadedMessages": "ยังไม่มีข้อความที่โหลดสำหรับสมาชิกคนนี้",
+ "noMessages": "ไม่มีข้อความกับสมาชิกคนนี้",
+ "noLoadedActivity": "ยังไม่มีกิจกรรมที่โหลดสำหรับสมาชิกคนนี้",
+ "noActivity": "ไม่มีกิจกรรมกับสมาชิกคนนี้"
+ }
+ },
+ "actions": {
+ "openProfile": "เปิดโปรไฟล์",
+ "editRole": "แก้ไขบทบาท",
+ "sendMessage": "ส่งข้อความ",
+ "assignTask": "มอบหมายงาน"
+ },
+ "roleSelect": {
+ "customRolePlaceholder": "ป้อนบทบาทกำหนดเอง..."
+ }
+ },
+ "schedule": {
+ "count": "{{count}} กำหนดการ",
+ "count_one": "{{count}} กำหนดการ",
+ "count_other": "{{count}} กำหนดการ",
+ "nextRun": "ถัดไป: {{next}}",
+ "actions": {
+ "runNow": "รันเลย",
+ "edit": "แก้ไข",
+ "pause": "หยุดชั่วคราว",
+ "resume": "ดำเนินการต่อ",
+ "delete": "ลบ",
+ "addSchedule": "เพิ่มกำหนดการ"
+ },
+ "runHistory": {
+ "loading": "กำลังโหลดประวัติการรัน...",
+ "empty": "ยังไม่มีการรัน"
+ },
+ "count_few": "{{count}} กำหนดการ",
+ "count_many": "{{count}} กำหนดการ",
+ "runLog": {
+ "title": "บันทึกการรัน",
+ "exitCode": "ออก {{code}}",
+ "retryCount": "ลองใหม่ {{count}}/{{max}}",
+ "stillRunning": "งานยังกำลังทำงาน...",
+ "loadingLogs": "กำลังโหลดบันทึก...",
+ "errors": "ข้อผิดพลาด",
+ "close": "ปิด"
+ },
+ "cron": {
+ "expression": "นิพจน์ Cron",
+ "highFrequencyWarning": "กำหนดการความถี่สูง (ช่วงน้อยกว่า 5 นาที)",
+ "nextRuns": "การรันถัดไป:",
+ "timezone": "เขตเวลา",
+ "selectTimezone": "เลือกเขตเวลา",
+ "warmUpTime": "เวลาวอร์มอัป",
+ "warmUpDescription": "เตรียมผู้ให้บริการที่เลือกก่อนการรันตามกำหนดการ",
+ "errors": {
+ "enterExpression": "ป้อนนิพจน์ cron",
+ "invalidExpression": "นิพจน์ cron ไม่ถูกต้อง"
+ },
+ "presets": {
+ "everyHour": "ทุกชั่วโมง",
+ "everySixHours": "ทุก 6 ชั่วโมง",
+ "dailyAtNine": "ทุกวันเวลา 9 น.",
+ "weekdaysAtNine": "วันธรรมดาเวลา 9 น.",
+ "mondayAtNine": "วันจันทร์เวลา 9 น.",
+ "everyThirtyMinutes": "ทุก 30 นาที"
+ },
+ "warmUpOptions": {
+ "none": "ไม่วอร์มอัป",
+ "fiveMinutes": "5 นาที",
+ "tenMinutes": "10 นาที",
+ "fifteenMinutes": "15 นาที",
+ "thirtyMinutes": "30 นาที"
+ }
+ },
+ "empty": {
+ "title": "ยังไม่มีกำหนดการ",
+ "description": "สร้างกำหนดการเพื่อรันงาน Claude โดยอัตโนมัติด้วยกำหนดการ cron"
+ },
+ "title": "กำหนดการ",
+ "status": {
+ "active": "ใช้งานอยู่",
+ "paused": "หยุดชั่วคราว",
+ "disabled": "ปิดใช้งาน"
+ },
+ "runStatus": {
+ "pending": "รอดำเนินการ",
+ "warmingUp": "กำลังวอร์มอัป",
+ "warm": "พร้อม",
+ "running": "กำลังทำงาน",
+ "completed": "เสร็จสมบูรณ์",
+ "failed": "ล้มเหลว",
+ "interrupted": "ถูกขัดจังหวะ",
+ "cancelled": "ยกเลิกแล้ว"
+ }
+ },
+ "openCodeContextConfigHint": {
+ "summary": "โมเดลในเครื่องของ OpenCode สามารถใช้งบประมาณคอนเท็กซ์ของ OpenCode แทนขีดจำกัดเฉพาะพรอมต์ได้",
+ "description": "เพิ่มขีดจำกัดที่ตรงกันลงในการตั้งค่า OpenCode สำหรับผู้ให้บริการและโมเดลที่เพื่อนร่วมทีมคนนี้ใช้ สิ่งนี้ช่วยให้ OpenCode บีบอัดและตัดทอนก่อนที่โมเดลในเครื่องจะล้นหน้าต่างคอนเท็กซ์",
+ "replacePrefix": "แทนที่",
+ "and": "และ",
+ "replaceSuffix": "ด้วย ID ของผู้ให้บริการและโมเดลจากการตั้งค่า OpenCode ของคุณ คำแนะนำในพรอมต์เช่น",
+ "promptInstructionsSuffix": "อ่อนแอกว่าเพราะคำขอถูกประกอบขึ้นก่อนที่โมเดลจะอ่าน",
+ "providerLimits": "ขีดจำกัดผู้ให้บริการ",
+ "compactionConfig": "การตั้งค่าการบีบอัด"
+ },
+ "sessions": {
+ "noProjectPath": "ไม่มีเส้นทางโปรเจกต์ที่เชื่อมโยง",
+ "provisioningHint": "เซสชันจะปรากฏหลังจากการจัดเตรียมทีม",
+ "projectNotFound": "ไม่พบโปรเจกต์",
+ "loading": "กำลังโหลดเซสชัน...",
+ "empty": "ไม่พบเซสชัน",
+ "showAllSessions": "แสดงสำหรับทุกเซสชัน",
+ "lead": "หัวหน้า",
+ "removeFilter": "ลบตัวกรอง",
+ "filterBySession": "กรองตามเซสชันนี้",
+ "openSession": "เปิดเซสชัน",
+ "title": "เซสชัน"
+ },
+ "provisioning": {
+ "pid": "PID {{pid}}",
+ "cancel": "ยกเลิก",
+ "moreWarningsHidden": "ซ่อนคำเตือนอีก {{count}} รายการ",
+ "diagnostics": "การวินิจฉัย",
+ "liveOutput": "เอาต์พุตสด",
+ "diagnosticsCopied": "คัดลอกการวินิจฉัยแล้ว",
+ "copyDiagnostics": "คัดลอกการวินิจฉัย",
+ "copied": "คัดลอกแล้ว",
+ "noOutput": "ยังไม่มีเอาต์พุตที่ถูกจับ",
+ "cliLogs": "บันทึก CLI",
+ "steps": {
+ "starting": "กำลังเริ่ม",
+ "configuring": "ตั้งค่าทีม",
+ "assembling": "สมาชิกกำลังเข้าร่วม",
+ "finalizing": "กำลังสรุป"
+ },
+ "providerStatus": {
+ "status": {
+ "checking": "กำลังตรวจสอบ...",
+ "ready": "ตกลง",
+ "notes": "ตกลง (หมายเหตุ)",
+ "failed": "ผิดพลาด",
+ "pending": "กำลังรอ"
+ },
+ "detailSummary": {
+ "cliBinaryMissing": "ไม่มีไบนารี CLI",
+ "openCodeRuntimeMissing": "ไม่มีรันไทม์ OpenCode",
+ "openCodeWindowsAccessBlocked": "การเข้าถึง OpenCode บน Windows ถูกบล็อก",
+ "openCodeNoOutput": "การตรวจสอบรันไทม์ OpenCode ไม่ได้คืนเอาต์พุต",
+ "openCodeMcpUnreachable": "ไม่สามารถเข้าถึง MCP ของแอป OpenCode",
+ "workingDirectoryMissing": "ไม่มีไดเรกทอรีทำงาน",
+ "cliBinaryCouldNotStart": "ไม่สามารถเริ่มไบนารี CLI ได้",
+ "cliPreflightIncomplete": "การตรวจสอบก่อนเริ่มของ CLI ไม่เสร็จสมบูรณ์",
+ "authenticationRequired": "ต้องยืนยันตัวตน",
+ "runtimeProviderNotConfigured": "ผู้ให้บริการรันไทม์ยังไม่ได้กำหนดค่า",
+ "cliPreflightFailed": "การตรวจสอบก่อนเริ่มของ CLI ล้มเหลว",
+ "selectedModelCompatible": "โมเดลที่เลือกเข้ากันได้",
+ "selectedModelCompatibilityPending": "รอการตรวจสอบความเข้ากันได้ของโมเดลที่เลือก",
+ "selectedModelAvailable": "โมเดลที่เลือกพร้อมใช้งาน",
+ "selectedModelVerified": "ยืนยันโมเดลที่เลือกแล้ว",
+ "selectedModelUnavailable": "โมเดลที่เลือกไม่พร้อมใช้งาน",
+ "selectedModelTimedOut": "การยืนยันโมเดลที่เลือกหมดเวลา",
+ "selectedModelCheckFailed": "การตรวจสอบโมเดลที่เลือกล้มเหลว",
+ "selectedModelDeferred": "เลื่อนการยืนยันโมเดลที่เลือก",
+ "selectedModelPingNotConfirmed": "ยังไม่ยืนยัน ping ของโมเดลที่เลือก",
+ "readyWithNotes": "พร้อม (มีหมายเหตุ)",
+ "needsAttention": "ต้องการความสนใจ"
+ },
+ "modelChecksSummary": "การตรวจสอบโมเดลที่เลือก - {{details}}",
+ "modelParts": {
+ "unavailable": "{{count}} โมเดลไม่พร้อมใช้งาน",
+ "unavailable_one": "{{count}} โมเดลไม่พร้อมใช้งาน",
+ "unavailable_other": "{{count}} โมเดลไม่พร้อมใช้งาน",
+ "checkFailed": "{{count}} โมเดลตรวจสอบล้มเหลว",
+ "checkFailed_one": "{{count}} โมเดลตรวจสอบล้มเหลว",
+ "checkFailed_other": "{{count}} โมเดลตรวจสอบล้มเหลว",
+ "timedOut": "{{count}} โมเดลหมดเวลา",
+ "timedOut_one": "{{count}} โมเดลหมดเวลา",
+ "timedOut_other": "{{count}} โมเดลหมดเวลา",
+ "deferred": "{{count}} การยืนยันถูกเลื่อน",
+ "deferred_one": "{{count}} การยืนยันถูกเลื่อน",
+ "deferred_other": "{{count}} การยืนยันถูกเลื่อน",
+ "pingNotConfirmed": "{{count}} ยังไม่ยืนยัน ping",
+ "pingNotConfirmed_one": "{{count}} ยังไม่ยืนยัน ping",
+ "pingNotConfirmed_other": "{{count}} ยังไม่ยืนยัน ping",
+ "compatibilityPending": "{{count}} เข้ากันได้ รอการยืนยันเชิงลึก",
+ "compatibilityPending_one": "{{count}} เข้ากันได้ รอการยืนยันเชิงลึก",
+ "compatibilityPending_other": "{{count}} เข้ากันได้ รอการยืนยันเชิงลึก",
+ "compatible": "{{count}} เข้ากันได้",
+ "compatible_one": "{{count}} เข้ากันได้",
+ "compatible_other": "{{count}} เข้ากันได้",
+ "checking": "{{count}} กำลังตรวจสอบ",
+ "checking_one": "{{count}} กำลังตรวจสอบ",
+ "checking_other": "{{count}} กำลังตรวจสอบ",
+ "available": "{{count}} พร้อมใช้งาน",
+ "available_one": "{{count}} พร้อมใช้งาน",
+ "available_other": "{{count}} พร้อมใช้งาน",
+ "verified": "{{count}} ยืนยันแล้ว",
+ "verified_one": "{{count}} ยืนยันแล้ว",
+ "verified_other": "{{count}} ยืนยันแล้ว",
+ "unavailable_few": "{{count}} โมเดลไม่พร้อมใช้งาน",
+ "unavailable_many": "{{count}} โมเดลไม่พร้อมใช้งาน",
+ "checkFailed_few": "{{count}} โมเดลตรวจสอบล้มเหลว",
+ "checkFailed_many": "{{count}} โมเดลตรวจสอบล้มเหลว",
+ "timedOut_few": "{{count}} โมเดลหมดเวลา",
+ "timedOut_many": "{{count}} โมเดลหมดเวลา",
+ "deferred_few": "{{count}} การยืนยันถูกเลื่อน",
+ "deferred_many": "{{count}} การยืนยันถูกเลื่อน",
+ "pingNotConfirmed_few": "{{count}} ยังไม่ยืนยัน ping",
+ "pingNotConfirmed_many": "{{count}} ยังไม่ยืนยัน ping",
+ "compatibilityPending_few": "{{count}} เข้ากันได้ รอการยืนยันเชิงลึก",
+ "compatibilityPending_many": "{{count}} เข้ากันได้ รอการยืนยันเชิงลึก",
+ "compatible_few": "{{count}} เข้ากันได้",
+ "compatible_many": "{{count}} เข้ากันได้",
+ "checking_few": "{{count}} กำลังตรวจสอบ",
+ "checking_many": "{{count}} กำลังตรวจสอบ",
+ "available_few": "{{count}} พร้อมใช้งาน",
+ "available_many": "{{count}} พร้อมใช้งาน",
+ "verified_few": "{{count}} ยืนยันแล้ว",
+ "verified_many": "{{count}} ยืนยันแล้ว"
+ },
+ "openProviderSettings": "เปิดการตั้งค่า {{provider}}",
+ "copied": "คัดลอกแล้ว",
+ "copyDiagnostics": "คัดลอกการวินิจฉัย",
+ "deepVerificationPending": "การยืนยันเชิงลึกยังกำลังทำงาน โมเดล OpenCode ฟรีอาจใช้เวลาประมาณ 20 วินาที",
+ "progress": {
+ "checkingSelectedProviders": "กำลังตรวจสอบผู้ให้บริการที่เลือกพร้อมกัน...",
+ "checkingProvider": "กำลังตรวจสอบผู้ให้บริการ {{provider}}...",
+ "checkingProviders": "กำลังตรวจสอบผู้ให้บริการ {{providers}}..."
+ },
+ "failureHints": {
+ "openCodeAccessDenied": "แก้ไขสิทธิ์โฟลเดอร์หรือย้ายโปรเจกต์ไปยังโฟลเดอร์ที่ผู้ใช้เขียนได้ การรันในฐานะผู้ดูแลระบบเป็นเพียงวิธีแก้ไขชั่วคราวเท่านั้น",
+ "openCodeBridgeNoOutput": "รีสตาร์ทแอปและรันไทม์ OpenCode แล้วลองอีกครั้ง หากเกิดขึ้นซ้ำ ให้คัดลอกการวินิจฉัย",
+ "workingDirectoryMissing": "เลือกไดเรกทอรีทำงานที่มีอยู่ แล้วเปิดกล่องโต้ตอบนี้ใหม่",
+ "authenticationRequired": "ยืนยันตัวตนผู้ให้บริการที่ต้องการใน Claude CLI แล้วเปิดกล่องโต้ตอบนี้ใหม่",
+ "runtimeProviderNotConfigured": "กำหนดค่ารันไทม์ของผู้ให้บริการที่เลือก แล้วเปิดกล่องโต้ตอบนี้ใหม่",
+ "openCodeRuntimeMissing": "ติดตั้งหรือลองรันไทม์ OpenCode อีกครั้งจากการ์ดสถานะผู้ให้บริการ แล้วเปิดกล่องโต้ตอบนี้ใหม่",
+ "openCodeAppMcpUnreachable": "ลองเริ่มอีกครั้งเพื่อรีเฟรช MCP บริดจ์ของแอป OpenCode หากเกิดขึ้นซ้ำ ให้รีสตาร์ทแอปและรันไทม์ OpenCode",
+ "cliBinaryMissing": "ตรวจสอบให้แน่ใจว่าไบนารี Claude CLI ในเครื่องมีอยู่และสามารถเริ่มได้ แล้วเปิดกล่องโต้ตอบนี้ใหม่",
+ "default": "แก้ไขปัญหาด้านบน แล้วเปิดกล่องโต้ตอบนี้ใหม่",
+ "openCodeNodeModulesSymlinkPermission": "รัน Agent Teams AI ในฐานะผู้ดูแลระบบ แล้วลองเริ่มอีกครั้ง"
+ }
+ },
+ "presentation": {
+ "awaitingPermission": "เพื่อนร่วมทีม {{count}} คนรอการอนุมัติสิทธิ์",
+ "nameListWithMore": "{{names}}, +{{count}} เพิ่มเติม",
+ "waitingForOpenCode": "กำลังรอ OpenCode: {{names}}",
+ "bootstrapStalled": "การบูตสแตรปค้าง: {{names}}",
+ "bootstrapStalledWithOpenCodeWait": "{{stalled}}; กำลังรอ OpenCode: {{names}}",
+ "namedPendingDiagnostic": "{{label}}: {{names}}",
+ "countPendingDiagnostic": "{{count}} {{label}}",
+ "pendingLabels": {
+ "bootstrapStalled": "การบูตสแตรปค้าง",
+ "shellOnly": "เชลล์เท่านั้น",
+ "waitingForBootstrap": "กำลังรอการบูตสแตรป",
+ "bootstrapUnconfirmed": "ยังไม่ยืนยันการบูตสแตรป",
+ "awaitingPermission": "รอการอนุมัติสิทธิ์",
+ "waitingForRuntime": "กำลังรอรันไทม์",
+ "shellOnlyLower": "เชลล์เท่านั้น",
+ "waitingForBootstrapLower": "กำลังรอการบูตสแตรป",
+ "bootstrapUnconfirmedLower": "ยังไม่ยืนยันการบูตสแตรป",
+ "awaitingPermissionLower": "รอการอนุมัติสิทธิ์",
+ "waitingForRuntimeLower": "กำลังรอรันไทม์"
+ },
+ "failed": {
+ "memberFailedToStart": "{{name}} เริ่มไม่สำเร็จ",
+ "teammatesFailedToStart": "เพื่อนร่วมทีม {{count}} คนเริ่มไม่สำเร็จ",
+ "teammatesFailedRatio": "เพื่อนร่วมทีม {{count}}/{{total}} คนเริ่มไม่สำเร็จ"
+ },
+ "skipped": {
+ "memberSkipped": "{{name}} ถูกข้ามสำหรับการเริ่มนี้",
+ "memberSkippedWithReason": "{{name}} ถูกข้ามสำหรับการเริ่มนี้ - {{reason}}",
+ "memberSkippedCompact": "{{name}} ถูกข้าม",
+ "teammatesSkipped": "เพื่อนร่วมทีม {{count}} คนถูกข้าม",
+ "teammatesSkippedList": "เพื่อนร่วมทีมที่ถูกข้าม: {{list}}",
+ "teammatesSkippedRatio": "เพื่อนร่วมทีม {{count}}/{{total}} คนถูกข้ามสำหรับการเริ่มนี้"
+ },
+ "joining": {
+ "teammatesStillJoining": "เพื่อนร่วมทีม {{count}} คนยังกำลังเข้าร่วม",
+ "teammatesStillJoining_one": "เพื่อนร่วมทีม {{count}} คนยังกำลังเข้าร่วม",
+ "teammatesStillJoining_few": "เพื่อนร่วมทีม {{count}} คนยังกำลังเข้าร่วม",
+ "teammatesStillJoining_many": "เพื่อนร่วมทีม {{count}} คนยังกำลังเข้าร่วม",
+ "teammatesStillJoining_other": "เพื่อนร่วมทีม {{count}} คนยังกำลังเข้าร่วม",
+ "teammatesConfirmedRatio": "ยืนยันเพื่อนร่วมทีม {{count}}/{{total}} คนแล้ว"
+ },
+ "ready": {
+ "leadOnline": "หัวหน้าออนไลน์",
+ "allTeammatesJoined": "เพื่อนร่วมทีมทั้ง {{count}} คนเข้าร่วมแล้ว",
+ "teamProvisionedLeadOnline": "จัดเตรียมทีมแล้ว - หัวหน้าออนไลน์",
+ "teamProvisionedAllJoined": "จัดเตรียมทีมแล้ว - เพื่อนร่วมทีมทั้ง {{count}} คนเข้าร่วมแล้ว",
+ "teamProvisionedStillJoining": "จัดเตรียมทีมแล้ว - เพื่อนร่วมทีมยังกำลังเข้าร่วม",
+ "launchFinishedWithErrors": "การเริ่มเสร็จสิ้นพร้อมข้อผิดพลาด - เพื่อนร่วมทีม {{count}}/{{total}} คนเริ่มไม่สำเร็จ",
+ "launchContinuedSkipped": "การเริ่มดำเนินต่อ - เพื่อนร่วมทีม {{count}}/{{total}} คนถูกข้าม",
+ "teamLaunchedLeadOnline": "เริ่มทีมแล้ว - หัวหน้าออนไลน์",
+ "teamLaunchedAllJoined": "เริ่มทีมแล้ว - เพื่อนร่วมทีมทั้ง {{count}} คนเข้าร่วมแล้ว"
+ },
+ "panel": {
+ "launchFailed": "การเริ่มล้มเหลว",
+ "launchDetails": "รายละเอียดการเริ่ม",
+ "launchFinishedWithErrors": "การเริ่มเสร็จสิ้นพร้อมข้อผิดพลาด",
+ "launchContinuedSkipped": "การเริ่มดำเนินต่อพร้อมเพื่อนร่วมทีมที่ถูกข้าม",
+ "coreTeamReady": "ทีมหลักพร้อมแล้ว",
+ "finishingLaunch": "กำลังสรุปการเริ่ม",
+ "teamLaunched": "เริ่มทีมแล้ว",
+ "launchingTeam": "กำลังเริ่มทีม"
+ }
+ }
+ },
+ "liveRuntimeStatus": {
+ "title": "สถานะรันไทม์สด",
+ "description": "การเต้นหัวใจและสถานะการเริ่มแบบแสดงผลเท่านั้น การควบคุมกระบวนการยังคงอยู่ด้านล่าง",
+ "source": "แหล่งที่มา: {{source}}",
+ "lane": "เลน {{lane}}",
+ "diagnosticOnly": "การวินิจฉัยเท่านั้น",
+ "updated": "อัปเดต {{value}}",
+ "states": {
+ "running": "กำลังทำงาน",
+ "starting": "กำลังเริ่ม",
+ "waiting": "กำลังรอ",
+ "degraded": "ต้องการความสนใจ",
+ "stopped": "หยุดแล้ว",
+ "unknown": "ไม่ทราบ"
+ }
+ },
+ "taskLogs": {
+ "exact": {
+ "title": "บันทึกงานที่แม่นยำ",
+ "loading": "กำลังโหลดบันทึกงานที่แม่นยำ...",
+ "description": "ส่วนทรานสคริปต์ที่แม่นยำซึ่งเรนเดอร์ด้วยส่วนประกอบบันทึกการทำงานเดียวกับที่ใช้ในบันทึก",
+ "emptyTitle": "ยังไม่มีบันทึกงานที่แม่นยำ",
+ "emptyDescription": "ชุดทรานสคริปต์ที่แม่นยำจะปรากฏที่นี่เมื่อมีเมตาดาตาทรานสคริปต์ที่เชื่อมโยงกับงานอย่างชัดเจน",
+ "summaryOnly": "เฉพาะสรุป"
+ },
+ "executionSessions": {
+ "title": "เซสชันการทำงาน",
+ "online": "ออนไลน์",
+ "updating": "กำลังอัปเดต...",
+ "description": "การเรียกดูและตัวอย่างทรานสคริปต์แบบเดิมที่เน้นเซสชัน"
+ },
+ "stream": {
+ "title": "สตรีมบันทึกงาน"
+ }
+ },
+ "kanban": {
+ "taskCard": {
+ "cancelTask": "ยกเลิกงาน {{taskId}}",
+ "cancel": "ยกเลิก",
+ "moveBackToTodoConfirm": "ย้ายงานนี้กลับไปยัง TODO และแจ้งทีมหรือไม่?",
+ "confirm": "ยืนยัน",
+ "keep": "เก็บไว้",
+ "changesNeedAttention": "การเปลี่ยนแปลงต้องการความสนใจ",
+ "changes": "การเปลี่ยนแปลง",
+ "deleteTask": "ลบงาน",
+ "taskLogsActive": "บันทึกงานทำงานอยู่",
+ "newTaskLogsArriving": "บันทึกงานใหม่กำลังมาถึง",
+ "awaitingUser": "รอผู้ใช้",
+ "awaitingLead": "รอหัวหน้า",
+ "blockedBy": "ถูกบล็อกโดย",
+ "blocks": "บล็อก",
+ "start": "เริ่ม",
+ "complete": "เสร็จสิ้น",
+ "approve": "อนุมัติ",
+ "requestReview": "ขอรีวิว",
+ "manualReview": "รีวิวด้วยตนเอง",
+ "requestChanges": "ขอให้แก้ไข"
+ },
+ "filter": {
+ "title": "กรองงาน",
+ "session": "เซสชัน",
+ "allSessions": "ทุกเซสชัน",
+ "teammate": "เพื่อนร่วมทีม",
+ "unassigned": "(ยังไม่ได้มอบหมาย)",
+ "column": "คอลัมน์",
+ "clearAll": "ล้างทั้งหมด"
+ },
+ "board": {
+ "addTask": "เพิ่มงาน",
+ "noTasks": "ไม่มีงาน",
+ "showMore": "แสดงอีก {{count}} รายการ",
+ "hiddenCount": "{{count}} ที่ซ่อน",
+ "trash": "ถังขยะ",
+ "gridView": "มุมมองตาราง",
+ "columnsView": "มุมมองคอลัมน์"
+ },
+ "trash": {
+ "title": "ถังขยะ",
+ "empty": "ไม่มีงานที่ถูกลบ",
+ "subject": "หัวเรื่อง",
+ "owner": "เจ้าของ",
+ "deleted": "ลบแล้ว",
+ "unassigned": "ยังไม่ได้มอบหมาย",
+ "restoreTask": "กู้คืนงาน",
+ "restore": "กู้คืน",
+ "close": "ปิด"
+ },
+ "sort": {
+ "title": "เรียงงาน",
+ "sortBy": "เรียงตาม",
+ "reset": "รีเซ็ต",
+ "options": {
+ "updatedAt": {
+ "label": "อัปเดตล่าสุด",
+ "description": "ที่อัปเดตล่าสุดก่อน"
+ },
+ "createdAt": {
+ "label": "สร้างเมื่อ",
+ "description": "ใหม่สุดก่อน"
+ },
+ "owner": {
+ "label": "เจ้าของ",
+ "description": "เรียงตามตัวอักษรตามผู้รับมอบหมาย"
+ },
+ "manual": {
+ "label": "ด้วยตนเอง",
+ "description": "ลำดับแบบลากแล้ววาง"
+ }
+ }
+ },
+ "search": {
+ "clearSearch": "ล้างการค้นหา",
+ "tasks": "งาน",
+ "createdAgo": "สร้างเมื่อ {{time}}",
+ "updatedAgo": "อัปเดตเมื่อ {{time}}",
+ "placeholder": "ค้นหางาน... (#id หรือข้อความ)"
+ },
+ "grid": {
+ "addTask": "เพิ่มงาน",
+ "noTasks": "ไม่มีงาน"
+ },
+ "title": "Kanban",
+ "columns": {
+ "todo": "TODO",
+ "inProgress": "IN PROGRESS",
+ "review": "REVIEW",
+ "done": "DONE",
+ "approved": "APPROVED"
+ }
+ },
+ "worktreeGitReadiness": {
+ "checking": "กำลังตรวจสอบสถานะที่เก็บ Git สำหรับ worktree ของเพื่อนร่วมทีม...",
+ "ready": "Git worktree พร้อมแล้ว",
+ "readyOnBranch": "Git worktree พร้อมแล้วบนสาขา {{branch}}",
+ "needsSetup": "การแยก worktree ต้องตั้งค่า Git",
+ "initialCommitNotice": "การคอมมิตเริ่มต้นจะ stage และคอมมิตไฟล์ปัจจุบันทั้งหมดด้วยข้อความ",
+ "initializeRepository": "เริ่มต้นที่เก็บ Git",
+ "createInitialCommit": "สร้างคอมมิตเริ่มต้น",
+ "initialCommitMessage": "chore: initial commit"
+ },
+ "toolApproval": {
+ "settings": "การตั้งค่า",
+ "autoAllowAllTools": "อนุญาตเครื่องมือทั้งหมดอัตโนมัติ",
+ "autoAllowFileEdits": "อนุญาตการแก้ไขไฟล์อัตโนมัติ (Edit, Write, NotebookEdit)",
+ "autoAllowSafeCommands": "อนุญาตคำสั่งที่ปลอดภัยอัตโนมัติ (git, pnpm, npm, ls...)",
+ "onTimeout": "เมื่อหมดเวลา:",
+ "after": "หลังจาก",
+ "secondsShort": "วินาที",
+ "timeoutActions": {
+ "wait": "รอตลอดไป",
+ "allow": "อนุญาต",
+ "deny": "ปฏิเสธ"
+ },
+ "submit": "ส่ง",
+ "allow": "อนุญาต",
+ "deny": "ปฏิเสธ",
+ "allowAll": "อนุญาตทั้งหมด",
+ "pendingCount": "{{count}} รอดำเนินการ",
+ "autoActionIn": "อัตโนมัติ-{{action}} ใน {{time}}",
+ "diff": {
+ "previewChanges": "ดูตัวอย่างการเปลี่ยนแปลง",
+ "readingFile": "กำลังอ่านไฟล์...",
+ "binaryFile": "ไฟล์ไบนารี - ไม่สามารถดูตัวอย่างได้",
+ "truncated": "ไฟล์ถูกตัดทอนที่ 2MB - diff อาจไม่สมบูรณ์",
+ "newFile": "ไฟล์ใหม่"
+ }
+ },
+ "memberWorkSync": {
+ "details": {
+ "title": "การซิงค์งานของสมาชิก",
+ "actionableItems": "รายการที่ดำเนินการได้",
+ "fingerprint": "ลายนิ้วมือ",
+ "report": "รายงาน",
+ "none": "ไม่มี",
+ "shadowWouldNudge": "Shadow จะกระตุ้น",
+ "yes": "ใช่",
+ "no": "ไม่",
+ "moreActionableItems": "รายการที่ดำเนินการได้อีก {{count}} รายการ",
+ "diagnostics": "การวินิจฉัย: {{diagnostics}}"
+ },
+ "title": "การซิงค์งานของสมาชิก",
+ "loadingDiagnostics": "กำลังโหลดการวินิจฉัยการซิงค์งานของสมาชิก",
+ "diagnosticsUnavailable": "การวินิจฉัยการซิงค์งานของสมาชิกไม่พร้อมใช้งาน"
+ },
+ "advancedCli": {
+ "title": "ขั้นสูง",
+ "useWorktree": "ใช้ worktree",
+ "recent": "ล่าสุด",
+ "commandPreview": "ตัวอย่างคำสั่ง",
+ "customArguments": "อาร์กิวเมนต์กำหนดเอง",
+ "validate": "ตรวจสอบ",
+ "validation": {
+ "allFlagsValid": "แฟล็กทั้งหมดถูกต้อง",
+ "unknownFlags": "ไม่ทราบ: {{flags}}",
+ "protectedFlags": "ที่ป้องกัน: {{flags}}",
+ "failed": "การตรวจสอบล้มเหลว"
+ },
+ "placeholders": {
+ "worktreeName": "worktree-name"
+ }
+ },
+ "processes": {
+ "ago": "{{time}} ที่แล้ว",
+ "stoppedAgo": "หยุดเมื่อ {{time}} ที่แล้ว",
+ "running": "กำลังทำงาน",
+ "stopped": "หยุดแล้ว",
+ "stopProcess": "หยุดกระบวนการ (SIGTERM)",
+ "kill": "Kill",
+ "openInBrowser": "เปิดในเบราว์เซอร์",
+ "open": "เปิด",
+ "pid": "PID{{pid}}",
+ "title": "กระบวนการ CLI"
+ },
+ "taskActivity": {
+ "loadingDetails": "กำลังโหลดรายละเอียดกิจกรรม...",
+ "contextUnavailable": "บริบททรานสคริปต์โดยละเอียดไม่พร้อมใช้งานสำหรับกิจกรรมนี้อีกต่อไป",
+ "loading": "กำลังโหลดกิจกรรมงาน...",
+ "lowSignalOnly": "ยังไม่พบกิจกรรมงานสำคัญ รายละเอียดการทำงานระดับล่างมีอยู่ด้านล่างในสตรีมบันทึกงาน",
+ "empty": "ยังไม่พบกิจกรรมงานที่ชัดเจนในทรานสคริปต์ที่มี บันทึกเซสชันที่เก่ากว่าหรือแบบฮิวริสติกอาจยังมีอยู่ด้านล่างในเซสชันการทำงาน",
+ "title": "กิจกรรมงาน",
+ "description": "กิจกรรมรันไทม์ที่ชัดเจนสำคัญซึ่งเชื่อมโยงกับงานนี้จากเมตาดาตาทรานสคริปต์"
+ },
+ "sendMessage": {
+ "title": "ส่งข้อความ",
+ "description": "ส่งข้อความโดยตรงถึงสมาชิกทีม",
+ "recipientLabel": "ผู้รับ",
+ "selectMemberPlaceholder": "เลือกสมาชิก...",
+ "messageLabel": "ข้อความ",
+ "placeholder": "เขียนข้อความของคุณ... (Enter เพื่อส่ง)",
+ "send": "ส่ง",
+ "sending": "กำลังส่ง...",
+ "charsLeft": "เหลือ {{count}} อักขระ",
+ "saved": "บันทึกแล้ว",
+ "attachments": {
+ "teamOnlineRequired": "ทีมต้องออนไลน์เพื่อแนบไฟล์",
+ "recipientUnsupported": "สามารถส่งไฟล์ไปยังหัวหน้าทีมหรือเพื่อนร่วมทีม OpenCode ได้",
+ "openCodeOnlineRequired": "ทีมต้องออนไลน์เพื่อแนบไฟล์สำหรับเพื่อนร่วมทีม OpenCode",
+ "disabledHint": "รองรับไฟล์แนบสำหรับหัวหน้าทีมออนไลน์และเพื่อนร่วมทีม OpenCode ออนไลน์ ลบไฟล์แนบหรือเปลี่ยนผู้รับ",
+ "attachFiles": "แนบไฟล์ (วางหรือลากแล้ววาง)",
+ "unavailable": "ไฟล์แนบไม่พร้อมใช้งาน"
+ },
+ "quote": {
+ "remove": "ลบคำอ้างอิง",
+ "replyingTo": "กำลังตอบกลับถึง"
+ }
+ },
+ "taskComments": {
+ "cancelReply": "ยกเลิกการตอบกลับ",
+ "replyingTo": "กำลังตอบกลับถึง",
+ "placeholder": "เพิ่มความคิดเห็น... (Enter เพื่อส่ง)",
+ "attachFile": "แนบไฟล์ (หรือวาง)",
+ "voiceToText": "เสียงเป็นข้อความ",
+ "comment": "ความคิดเห็น",
+ "charsLeft": "เหลือ {{count}} อักขระ",
+ "saved": "บันทึกแล้ว",
+ "awaitingReplyFrom": "รอการตอบกลับจาก",
+ "or": "หรือ"
+ },
+ "taskAttachments": {
+ "dropImageHere": "วางภาพที่นี่",
+ "attachImage": "แนบภาพ",
+ "pasteOrDragDrop": "หรือวาง / ลากแล้ววาง",
+ "fromOriginalMessage": "จากข้อความต้นฉบับ",
+ "dropFilesHere": "วางไฟล์ที่นี่",
+ "loading": "กำลังโหลดไฟล์แนบ..."
+ },
+ "permissions": {
+ "autoApproveAllTools": "อนุมัติเครื่องมือทั้งหมดอัตโนมัติ",
+ "autonomousModeDescription": "โหมดอัตโนมัติ: เครื่องมือทีมทำงานโดยไม่ต้องยืนยัน ระวังกับโค้ดที่ไม่น่าเชื่อถือ",
+ "manualModeDescription": "โหมดด้วยตนเอง: คุณจะอนุมัติหรือปฏิเสธการเรียกเครื่องมือแต่ละครั้งแบบเรียลไทม์"
+ },
+ "memberLogStream": {
+ "tabs": {
+ "execution": "การทำงาน",
+ "process": "กระบวนการ"
+ },
+ "filters": {
+ "all": "ทั้งหมด"
+ },
+ "logs": {
+ "title": "บันทึก",
+ "loading": "กำลังโหลดสตรีมบันทึกของสมาชิก...",
+ "emptyTitle": "ยังไม่พบรายการสตรีมบันทึกสำหรับสมาชิกคนนี้",
+ "emptyDescription": "บันทึกทรานสคริปต์หรือรันไทม์ที่กำหนดขอบเขตต่อสมาชิกจะปรากฏที่นี่เมื่อมี"
+ }
+ },
+ "reviewDialog": {
+ "placeholder": "อธิบายสิ่งที่ต้องเปลี่ยน... (Enter เพื่อส่ง)",
+ "submit": "ส่ง",
+ "charsLeft": "เหลือ {{count}} อักขระ",
+ "saved": "บันทึกแล้ว",
+ "title": "ขอให้แก้ไข"
+ },
+ "dialogs": {
+ "actions": {
+ "openDashboard": "เปิดแดชบอร์ด",
+ "openTeam": "เปิดทีม",
+ "cancel": "ยกเลิก"
+ },
+ "membersJson": {
+ "hide": "ซ่อน JSON"
+ },
+ "optional": {
+ "badge": "ไม่บังคับ"
+ }
+ },
+ "runningTeams": {
+ "title": "ทีมที่กำลังทำงาน",
+ "status": {
+ "active": "ใช้งานอยู่",
+ "provisioning": "กำลังเริ่ม",
+ "idle": "กำลังทำงาน"
+ },
+ "noProject": "ไม่มีโปรเจกต์"
+ },
+ "layout": {
+ "maxPanesReached": "ถึงจำนวนแผงสูงสุด {{count}} แผงแล้ว"
+ },
+ "codexReconnect": {
+ "description": "เซสชัน Codex ของคุณดูเหมือนจะเก่า เชื่อมต่อใหม่เพื่อดำเนินการต่อ",
+ "useCode": "ใช้โค้ด",
+ "generating": "กำลังสร้าง...",
+ "openLogin": "เปิดการเข้าสู่ระบบ",
+ "generateLink": "สร้างลิงก์"
+ },
+ "effortLevel": {
+ "label": "ระดับความพยายาม (ไม่บังคับ)",
+ "maxDescription": "Max ให้เวลาการให้เหตุผลแก่โมเดลมากที่สุดสำหรับงานที่ยาก"
+ },
+ "contextLimit": {
+ "limitTo200k": "จำกัดคอนเท็กซ์ไว้ที่ 200K โทเค็น",
+ "always200k": "(200K เสมอสำหรับโมเดลนี้)",
+ "tooltipContent": "คงการเริ่มไว้ในหน้าต่างคอนเท็กซ์ 200K โทเค็นเมื่อรองรับ",
+ "tooltipTitle": "ขีดจำกัดคอนเท็กซ์"
+ },
+ "roleSelect": {
+ "noRole": "ไม่มีบทบาท",
+ "customRole": "บทบาทกำหนดเอง...",
+ "searchPlaceholder": "ค้นหาบทบาท...",
+ "empty": "ไม่พบบทบาท",
+ "reservedRole": "บทบาทนี้ถูกสงวนไว้",
+ "emptyCustomRole": "บทบาทต้องไม่ว่างเปล่า"
+ }
+}
diff --git a/src/features/localization/renderer/locales/tr/common.json b/src/features/localization/renderer/locales/tr/common.json
new file mode 100644
index 00000000..d604ed5d
--- /dev/null
+++ b/src/features/localization/renderer/locales/tr/common.json
@@ -0,0 +1,927 @@
+{
+ "actions": {
+ "cancel": "İptal",
+ "close": "Kapat",
+ "copied": "Kopyalandı",
+ "copyUrl": "URL'yi kopyala",
+ "open": "Aç",
+ "reveal": "Göster",
+ "retry": "Yeniden dene",
+ "save": "Kaydet",
+ "showLess": "Daha az göster",
+ "showMore": "Daha fazla göster",
+ "refresh": "Yenile",
+ "reset": "Sıfırla",
+ "copyToClipboard": "Panoya kopyala",
+ "moreActions": "Daha fazla eylem",
+ "closeDialog": "İletişim kutusunu kapat",
+ "goToDashboard": "Panoya git",
+ "or": "veya",
+ "hide": "Gizle",
+ "resetSelection": "Seçimi sıfırla"
+ },
+ "code": {
+ "line": "satır {{line}}",
+ "lines": "satır {{from}}-{{to}}",
+ "moreLines": "({{count}} satır daha...)",
+ "moreLines_few": "({{count}} satır daha...)",
+ "moreLines_many": "({{count}} satır daha...)",
+ "moreLines_one": "({{count}} satır daha...)",
+ "moreLines_other": "({{count}} satır daha...)",
+ "code": "Kod",
+ "preview": "Önizleme",
+ "markdownPreview": "Markdown Önizleme",
+ "linesParenthesized": "(satır {{from}}-{{to}})",
+ "mermaidSyntaxError": "Mermaid sözdizimi hatası"
+ },
+ "contextBadge": {
+ "badge": "Bağlam",
+ "breakdown": {
+ "text": "Metin",
+ "thinking": "Düşünme"
+ },
+ "detailsAria": "Bağlam enjeksiyonu ayrıntıları",
+ "sectionSummary": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sections": {
+ "claudeMdFiles": "CLAUDE.md Dosyaları",
+ "mentionedFiles": "Bahsedilen Dosyalar",
+ "taskCoordination": "Görev Koordinasyonu",
+ "thinkingText": "Düşünme + Metin",
+ "toolOutputs": "Araç Çıktıları",
+ "userMessages": "Kullanıcı Mesajları"
+ },
+ "title": "Bu Turda Enjekte Edilen Yeni Bağlam",
+ "tokenCount": "~{{tokens}} token",
+ "totalNewTokens": "Toplam yeni token",
+ "turn": "Tur {{turn}}",
+ "sectionSummary_few": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sectionSummary_many": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sectionSummary_one": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sectionSummary_other": "{{title}} ({{count}}) ~{{tokens}} token"
+ },
+ "locales": {
+ "emptyMessage": "Dil bulunamadı.",
+ "names": {
+ "ar": "Arapça",
+ "bn": "Bengalce",
+ "de": "Almanca",
+ "en": "İngilizce",
+ "es": "İspanyolca",
+ "fa": "Farsça",
+ "fil": "Filipince",
+ "fr": "Fransızca",
+ "hi": "Hintçe",
+ "id": "Endonezce",
+ "it": "İtalyanca",
+ "ja": "Japonca",
+ "ko": "Korece",
+ "mr": "Marathice",
+ "ms": "Malayca",
+ "nl": "Felemenkçe",
+ "pl": "Lehçe",
+ "pt": "Portekizce",
+ "ro": "Romence",
+ "ru": "Rusça",
+ "sw": "Svahilice",
+ "system": "Sistem",
+ "ta": "Tamilce",
+ "te": "Teluguca",
+ "th": "Tayca",
+ "tr": "Türkçe",
+ "uk": "Ukraynaca",
+ "ur": "Urduca",
+ "vi": "Vietnamca",
+ "zh": "Çince"
+ },
+ "searchPlaceholder": "Dil ara...",
+ "selectPlaceholder": "Uygulama dilini seç...",
+ "systemWithResolved": "Sistem - {{locale}}"
+ },
+ "members": {
+ "emptyMessage": "Üye bulunamadı.",
+ "searchPlaceholder": "Üye ara...",
+ "unassigned": "Atanmamış",
+ "teammateFallback": "takım arkadaşı"
+ },
+ "providerRuntime": {
+ "codex": {
+ "install": {
+ "checking": "Kontrol ediliyor",
+ "downloading": "İndiriliyor",
+ "installCli": "Codex CLI kur",
+ "installing": "Kuruluyor",
+ "retryInstall": "Kurulumu yeniden dene"
+ }
+ }
+ },
+ "search": {
+ "noMatchingSuggestions": "Eşleşen öneri yok",
+ "searching": "Aranıyor...",
+ "searchingFiles": "Dosyalar aranıyor...",
+ "findInConversation": "Konuşmada bul...",
+ "resultCount": "{{current}} / {{total}}",
+ "resultCountCapped": "{{current}} / {{total}}+",
+ "noResults": "Sonuç yok",
+ "previousResultShortcut": "Önceki sonuç (Shift+Enter)",
+ "nextResultShortcut": "Sonraki sonuç (Enter)",
+ "closeShortcut": "Kapat (Esc)",
+ "nothingFound": "Hiçbir şey bulunamadı",
+ "placeholder": "Ara..."
+ },
+ "schedules": {
+ "actions": {
+ "addSchedule": "Zamanlama Ekle",
+ "clearFilters": "Filtreleri temizle",
+ "createSchedule": "Zamanlama Oluştur",
+ "delete": "Sil",
+ "edit": "Düzenle",
+ "pause": "Duraklat",
+ "resume": "Devam ettir",
+ "runNow": "Şimdi çalıştır"
+ },
+ "empty": {
+ "description": "Cron ifadeleriyle Claude görev yürütmesini otomatikleştirmek için herhangi bir ekipte bir zamanlama oluşturun. Tüm ekiplerin zamanlamaları burada görünecek.",
+ "noMatches": "Geçerli filtrelerle eşleşen zamanlama yok",
+ "title": "Zamanlanmış görev yok"
+ },
+ "filters": {
+ "allTeams": "Tüm ekipler"
+ },
+ "item": {
+ "loadingRunHistory": "Çalıştırma geçmişi yükleniyor...",
+ "nextRun": "Sonraki: {{value}}",
+ "noRunsYet": "Henüz çalıştırma yok"
+ },
+ "loading": "Zamanlamalar yükleniyor...",
+ "searchPlaceholder": "Zamanlamalarda ara...",
+ "status": {
+ "active": "Etkin",
+ "all": "Tümü",
+ "disabled": "Devre dışı",
+ "paused": "Duraklatıldı"
+ },
+ "title": "Zamanlamalar"
+ },
+ "sessions": {
+ "actions": {
+ "hide": "Gizle",
+ "pin": "Sabitle",
+ "unhide": "Göster"
+ },
+ "empty": {
+ "noMatchingSessions": "Eşleşen oturum yok",
+ "noMatchingSessionsDescription": "Bu projenin henüz eşleşen oturumu yok.",
+ "noMatchingSessionsFiltered": "Başka bir sorgu deneyin veya sağlayıcı filtresini sıfırlayın.",
+ "noSessions": "Oturum bulunamadı",
+ "noSessionsDescription": "Bu projenin henüz oturumu yok",
+ "selectProject": "Oturumları görüntülemek için bir proje seçin"
+ },
+ "errors": {
+ "loading": "Oturumlar yüklenirken hata oluştu"
+ },
+ "loadedMatchingMore": "Şu ana kadar {{count}} eşleşen oturum yüklendi - daha fazlasını yüklemek için aşağı kaydırın.",
+ "loadingMore": "Daha fazla oturum yükleniyor...",
+ "pinned": "Sabitlenmiş",
+ "scrollToLoadMore": "Daha fazlasını yüklemek için kaydırın",
+ "search": {
+ "clear": "Oturum aramasını temizle",
+ "placeholder": "Oturumlarda ara..."
+ },
+ "selection": {
+ "cancel": "Seçimi iptal et",
+ "exitMode": "Seçim modundan çık",
+ "hideSelected": "Seçili oturumları gizle",
+ "pinSelected": "Seçili oturumları sabitle",
+ "selectSessions": "Oturum seç",
+ "selected": "{{count}} seçili",
+ "unhideSelected": "Seçili oturumları göster",
+ "selected_few": "{{count}} seçili",
+ "selected_many": "{{count}} seçili",
+ "selected_one": "{{count}} seçili",
+ "selected_other": "{{count}} seçili"
+ },
+ "sort": {
+ "byContext": "Bağlama Göre",
+ "byContextTooltip": "Bağlam tüketimine göre sırala",
+ "byRecentTooltip": "En yeniye göre sırala",
+ "contextLoadedOnly": "Bağlam sıralaması yalnızca yüklenmiş oturumları sıralar."
+ },
+ "title": "Oturumlar",
+ "visibility": {
+ "hideHidden": "Gizli oturumları gizle",
+ "showHidden": "Gizli oturumları göster"
+ },
+ "worktree": {
+ "switch": "Worktree Değiştir"
+ },
+ "loadedMatchingMore_few": "Şu ana kadar {{count}} eşleşen oturum yüklendi - daha fazlasını yüklemek için aşağı kaydırın.",
+ "loadedMatchingMore_many": "Şu ana kadar {{count}} eşleşen oturum yüklendi - daha fazlasını yüklemek için aşağı kaydırın.",
+ "loadedMatchingMore_one": "Şu ana kadar {{count}} eşleşen oturum yüklendi - daha fazlasını yüklemek için aşağı kaydırın.",
+ "loadedMatchingMore_other": "Şu ana kadar {{count}} eşleşen oturum yüklendi - daha fazlasını yüklemek için aşağı kaydırın.",
+ "failedToLoad": "Oturum yüklenemedi",
+ "loading": "Oturum yükleniyor...",
+ "filter": {
+ "title": "Oturumları filtrele"
+ },
+ "count": "{{count}} oturum",
+ "count_one": "{{count}} oturum",
+ "count_other": "{{count}} oturum",
+ "count_few": "{{count}} oturum",
+ "count_many": "{{count}} oturum",
+ "inProgress": "Oturum devam ediyor..."
+ },
+ "states": {
+ "loading": "Yükleniyor...",
+ "offline": "Çevrimdışı",
+ "online": "Çevrimiçi",
+ "unknown": "Bilinmiyor",
+ "error": "Hata"
+ },
+ "markdown": {
+ "imageFallback": "[Görsel: {{label}}]",
+ "largeContentNotice": "İçerik çok büyük ({{count}} karakter). Arayüzü duyarlı tutmak için ham önizleme gösteriliyor.",
+ "largeContentTitle": "Arayüzün donmasını önlemek için büyük içerik ham olarak gösteriliyor",
+ "raw": "Ham",
+ "rawPreview": "Ham önizleme",
+ "renderMarkdown": "Markdown'ı işle",
+ "showAll": "Tümünü göster",
+ "showMore": "Daha fazla göster",
+ "showRaw": "Ham göster",
+ "showingChars": "{{shown}} / {{total}} karakter gösteriliyor",
+ "largeContentNotice_few": "İçerik çok büyük ({{count}} karakter). Arayüzü duyarlı tutmak için ham önizleme gösteriliyor.",
+ "largeContentNotice_many": "İçerik çok büyük ({{count}} karakter). Arayüzü duyarlı tutmak için ham önizleme gösteriliyor.",
+ "largeContentNotice_one": "İçerik çok büyük ({{count}} karakter). Arayüzü duyarlı tutmak için ham önizleme gösteriliyor.",
+ "largeContentNotice_other": "İçerik çok büyük ({{count}} karakter). Arayüzü duyarlı tutmak için ham önizleme gösteriliyor."
+ },
+ "terminal": {
+ "checkOutputForDetails": "Ayrıntılar için yukarıdaki terminal çıktısını kontrol edin",
+ "closingInSeconds": "{{count}}sn içinde kapanıyor...",
+ "closingInSeconds_few": "{{count}}sn içinde kapanıyor...",
+ "closingInSeconds_many": "{{count}}sn içinde kapanıyor...",
+ "closingInSeconds_one": "{{count}}sn içinde kapanıyor...",
+ "closingInSeconds_other": "{{count}}sn içinde kapanıyor...",
+ "completedSuccessfully": "Başarıyla tamamlandı",
+ "exitCode": "(çıkış kodu {{code}})",
+ "processFailed": "İşlem başarısız oldu",
+ "title": "Terminal"
+ },
+ "tokens": {
+ "accumulatedWithoutDuplication": "Tüm oturum boyunca yinelenmeden toplandı",
+ "cacheRead": "Önbellek Okuma",
+ "cacheWrite": "Önbellek Yazma",
+ "costUsd": "Maliyet (USD)",
+ "inputTokens": "Girdi Token'ları",
+ "model": "Model",
+ "outputTokens": "Çıktı Token'ları",
+ "phase": "Aşama {{phase}}/{{total}}",
+ "promptInputShare": "komut isteminin %{{percent}}'i",
+ "taskCoordination": "Görev Koordinasyonu",
+ "thinkingText": "Düşünme + Metin",
+ "toolOutputs": "Araç Çıktıları",
+ "total": "Toplam",
+ "userMessages": "Kullanıcı Mesajları",
+ "visibleContext": "Görünür Bağlam",
+ "includesClaudeMd": "CLAUDE.md ×{{count}} dahil",
+ "claudeMd": "CLAUDE.md",
+ "mentionedFiles": "@dosyalar",
+ "percentValue": "(%{{percent}})",
+ "approxTokens": "~{{tokens}} token",
+ "approxTokensParenthesized": "(~{{tokens}})"
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Ekibi kopyala",
+ "createTeam": "Ekip Oluştur",
+ "deleteForever": "Kalıcı olarak sil",
+ "deletePermanently": "Kalıcı olarak sil",
+ "deleteTeam": "Ekibi sil",
+ "launching": "Başlatılıyor...",
+ "launchTeam": "Ekibi başlat",
+ "relaunchTeam": "Ekibi yeniden başlat",
+ "restore": "Geri yükle",
+ "restoreTeam": "Ekibi geri yükle",
+ "retry": "Yeniden dene",
+ "stopTeam": "Ekibi durdur",
+ "stopping": "Durduruluyor..."
+ },
+ "status": {
+ "active": "Etkin",
+ "deleted": "Silindi",
+ "launching": "Başlatılıyor...",
+ "offline": "Çevrimdışı",
+ "partialFailure": "Başlatma yarıda başarısız oldu",
+ "partialPending": "Bootstrap beklemede",
+ "partialSkipped": "Başlatma üyeyi atladı",
+ "running": "Çalışıyor"
+ },
+ "partial": {
+ "pending": "Son başlatma hâlâ uzlaştırılıyor.",
+ "skipped": "Son başlatma takım arkadaşlarını atladı.",
+ "skippedWithCount": "Son başlatma {{count}}/{{expected}} takım arkadaşını atladı.",
+ "skippedWithCount_few": "Son başlatma {{count}}/{{expected}} takım arkadaşını atladı.",
+ "skippedWithCount_many": "Son başlatma {{count}}/{{expected}} takım arkadaşını atladı.",
+ "skippedWithCount_one": "Son başlatma {{count}}/{{expected}} takım arkadaşını atladı.",
+ "skippedWithCount_other": "Son başlatma {{count}}/{{expected}} takım arkadaşını atladı.",
+ "stopped": "Son başlatma tüm takım arkadaşları katılmadan durdu.",
+ "stoppedWithCount": "Son başlatma {{count}}/{{expected}} takım arkadaşı katılmadan durdu.",
+ "stoppedWithCount_few": "Son başlatma {{count}}/{{expected}} takım arkadaşı katılmadan durdu.",
+ "stoppedWithCount_many": "Son başlatma {{count}}/{{expected}} takım arkadaşı katılmadan durdu.",
+ "stoppedWithCount_one": "Son başlatma {{count}}/{{expected}} takım arkadaşı katılmadan durdu.",
+ "stoppedWithCount_other": "Son başlatma {{count}}/{{expected}} takım arkadaşı katılmadan durdu."
+ },
+ "noDescription": "Açıklama yok",
+ "solo": "Tekli",
+ "membersCount": "Üyeler: {{count}}",
+ "membersCount_few": "Üyeler: {{count}}",
+ "membersCount_many": "Üyeler: {{count}}",
+ "membersCount_one": "Üye: {{count}}",
+ "membersCount_other": "Üyeler: {{count}}",
+ "all": "Tümü",
+ "moreCount": "+{{count}} daha",
+ "moreCount_one": "+{{count}} daha",
+ "moreCount_other": "+{{count}} daha",
+ "moreCount_few": "+{{count}} daha",
+ "moreCount_many": "+{{count}} daha"
+ },
+ "runtimeProvider": {
+ "defaults": {
+ "scopeDescriptionAllProjects": "Kendi OpenCode geçersiz kılması olmayan her proje için varsayılan.",
+ "scopeDescriptionProject": "Yalnızca seçili projeyi geçersiz kıl. Çalışan ekipler değiştirilmez.",
+ "setAllProjectsDefault": "Tüm projeler varsayılanını ayarla",
+ "setProjectDefault": "Proje varsayılanını ayarla",
+ "validationContext": "Doğrulama bağlamı",
+ "projectOverrideContext": "Proje geçersiz kılma bağlamı",
+ "selectProjectHint": "Yerel modelleri test etmeden veya varsayılanları kaydetmeden önce bir proje seçin.",
+ "allProjectsHint": "Testler {{project}} kullanır. Bir projenin geçersiz kılması olmadıkça varsayılan geçerlidir.",
+ "projectHint": "Kaydetme yalnızca {{project}} öğesini geçersiz kılar."
+ }
+ },
+ "sessionContext": {
+ "header": {
+ "title": "Bağlam",
+ "closePanel": "Paneli kapat",
+ "phase": "Aşama:",
+ "current": "Geçerli",
+ "view": "Görünüm:",
+ "category": "Kategori",
+ "bySize": "Boyuta Göre"
+ },
+ "metrics": {
+ "unavailable": "Kullanılamıyor",
+ "contextUsed": "Kullanılan Bağlam",
+ "promptInput": "Komut İstemi Girdisi",
+ "visibleContext": "Görünür Bağlam",
+ "ofContext": "bağlamın",
+ "ofPrompt": "komut isteminin",
+ "codexTelemetryUnavailable": "Codex komut istemi tarafı kullanımı henüz mevcut çalışma zamanı telemetrisi tarafından sunulmuyor, bu nedenle Komut İstemi Girdisi ve Kullanılan Bağlam sahte bir sıfır göstermek yerine kullanılamaz durumda kalır.",
+ "sessionCost": "Oturum Maliyeti:",
+ "parentPlus": "üst +",
+ "subagents": "alt agent'lar",
+ "details": "ayrıntılar"
+ },
+ "help": {
+ "contextUsed": {
+ "title": "Kullanılan Bağlam",
+ "description": "Şu anda modelin bağlam penceresini işgal eden komut istemi girdisi artı çıktı token'ları."
+ },
+ "promptInput": {
+ "title": "Komut İstemi Girdisi",
+ "description": "Üretimden önce modele gönderilen token'lar. Claude için bu, `input_tokens + cache_creation_input_tokens + cache_read_input_tokens` değerlerini içerir."
+ },
+ "visibleContext": {
+ "title": "Görünür Bağlam",
+ "description": "Komut istemi girdisinin incelenebilir alt kümesi: dosyalar, CLAUDE.md, araç çıktıları, kullanıcı mesajları ve doğrudan optimize edebileceğiniz benzer enjeksiyonlar."
+ },
+ "availability": {
+ "title": "Kullanılabilirlik",
+ "description": "Bir sağlayıcı çalışma zamanı henüz komut istemi tarafı kullanımı sunmuyorsa, panel metrikleri sıfırmış gibi göstermek yerine kullanılamaz olarak gösterir."
+ }
+ },
+ "items": {
+ "turn": "@Tur {{turn}}",
+ "tokensApprox": "~{{tokens}} token",
+ "toolsCount": "{{count}} araç",
+ "toolsCount_one": "{{count}} araç",
+ "toolsCount_other": "{{count}} araç",
+ "toolsCount_few": "{{count}} araç",
+ "toolsCount_many": "{{count}} araç",
+ "itemsCount": "{{count}} öğe",
+ "itemsCount_one": "{{count}} öğe",
+ "itemsCount_other": "{{count}} öğe",
+ "itemsCount_few": "{{count}} öğe",
+ "itemsCount_many": "{{count}} öğe",
+ "missing": "eksik",
+ "thinking": "Düşünme",
+ "text": "Metin"
+ },
+ "empty": "Bu oturumda bağlam enjeksiyonu algılanmadı",
+ "view": {
+ "grouped": "Gruplanmış",
+ "flat": "Düz"
+ },
+ "claudeMdFiles": "CLAUDE.md Dosyaları",
+ "mentionedFiles": "Bahsedilen Dosyalar"
+ },
+ "chat": {
+ "subagent": {
+ "fallbackName": "Alt agent",
+ "shutdownConfirmed": "Kapatma onaylandı",
+ "summary": {
+ "tools": "{{count}} araç",
+ "tools_one": "{{count}} araç",
+ "tools_other": "{{count}} araç",
+ "tools_few": "{{count}} araç",
+ "tools_many": "{{count}} araç"
+ },
+ "meta": {
+ "type": "Tür",
+ "duration": "Süre",
+ "model": "Model",
+ "id": "Kimlik"
+ },
+ "metrics": {
+ "contextWindow": "Bağlam Penceresi",
+ "contextUsage": "Bağlam Kullanımı",
+ "mainContext": "Ana Bağlam",
+ "totalOutput": "Toplam Çıktı",
+ "turns": "({{count}} tur)",
+ "turns_one": "({{count}} tur)",
+ "turns_other": "({{count}} tur)",
+ "subagentContext": "Alt Agent Bağlamı",
+ "phase": "Aşama {{phase}}",
+ "turns_few": "({{count}} tur)",
+ "turns_many": "({{count}} tur)"
+ },
+ "trace": {
+ "title": "Yürütme İzi"
+ }
+ },
+ "user": {
+ "you": "Siz",
+ "showMore": "Daha fazla göster",
+ "showLess": "Daha az göster",
+ "backgroundTask": "Arka plan görevi",
+ "exitCode": "çıkış {{code}}",
+ "imagesAttached": "{{count}} görsel eklendi",
+ "imagesAttached_one": "{{count}} görsel eklendi",
+ "imagesAttached_few": "{{count}} görsel eklendi",
+ "imagesAttached_many": "{{count}} görsel eklendi",
+ "imagesAttached_other": "{{count}} görsel eklendi"
+ },
+ "compact": {
+ "toggle": "Sıkıştırılmış içeriği aç/kapat",
+ "contextCompacted": "Bağlam sıkıştırıldı",
+ "freedTokens": "({{tokens}} serbest bırakıldı)",
+ "phase": "Aşama {{phase}}",
+ "conversationCompacted": "Konuşma Sıkıştırıldı",
+ "summary": "Önceki mesajlar bağlamı korumak için özetlendi. Tam konuşma geçmişi oturum dosyasında saklanır.",
+ "compacted": "Sıkıştırıldı"
+ },
+ "executionTrace": {
+ "empty": "Yürütme öğesi yok",
+ "nested": "İç içe: {{name}}",
+ "input": "Girdi"
+ },
+ "items": {
+ "empty": "Görüntülenecek öğe yok"
+ },
+ "tools": {
+ "teammateSpawned": "Takım arkadaşı oluşturuldu",
+ "shutdownRequested": "Kapatma istendi ->",
+ "noResultReceived": "Sonuç alınmadı",
+ "duration": "Süre: {{duration}}",
+ "result": "Sonuç",
+ "write": {
+ "createdFile": "Dosya oluşturuldu",
+ "wroteToFile": "Dosyaya yazıldı"
+ },
+ "skill": {
+ "instructions": "Beceri Talimatları",
+ "unknown": "Bilinmeyen Beceri"
+ }
+ },
+ "lastOutput": {
+ "requestInterrupted": "İstek kullanıcı tarafından kesildi",
+ "planReadyForApproval": "Plan Onaya Hazır"
+ },
+ "empty": {
+ "icon": "💬",
+ "title": "Konuşma geçmişi yok",
+ "description": "Bu oturum henüz herhangi bir mesaj içermiyor."
+ },
+ "context": {
+ "remainingPercent": "(%{{percent}} kaldı)",
+ "count": "Bağlam ({{count}})",
+ "count_one": "Bağlam ({{count}})",
+ "count_other": "Bağlam ({{count}})",
+ "count_few": "Bağlam ({{count}})",
+ "count_many": "Bağlam ({{count}})"
+ },
+ "scrollToBottom": "En alta kaydır",
+ "bottom": "Alt",
+ "teammateMessage": {
+ "message": "Mesaj",
+ "resent": "Yeniden gönderildi",
+ "fallback": "Takım arkadaşı mesajı"
+ },
+ "system": {
+ "label": "Sistem"
+ }
+ },
+ "tmuxInstaller": {
+ "summaryTitle": "tmux kurulu değil",
+ "detectedOs": "Algılanan İS: {{os}}",
+ "runtimePath": "Çalışma zamanı yolu: {{path}}",
+ "phase": "Aşama: {{phase}}",
+ "actions": {
+ "cancel": "İptal",
+ "manualGuide": "Manuel kılavuz",
+ "hideSetupSteps": "Kurulum adımlarını gizle",
+ "showSetupSteps": "Kurulum adımlarını göster ({{count}})",
+ "showSetupSteps_one": "Kurulum adımını göster ({{count}})",
+ "showSetupSteps_other": "Kurulum adımlarını göster ({{count}})",
+ "recheck": "Yeniden kontrol et",
+ "showSetupSteps_few": "Kurulum adımlarını göster ({{count}})",
+ "showSetupSteps_many": "Kurulum adımlarını göster ({{count}})"
+ },
+ "installerProgress": "Kurulum ilerlemesi",
+ "input": {
+ "placeholder": "Kuruluma girdi gönder",
+ "send": "Girdi gönder",
+ "passwordNotice": "Parola girdisi doğrudan kurulum terminaline gönderilir ve günlük çıktısına eklenmez."
+ },
+ "details": {
+ "show": "Ayrıntıları göster",
+ "hide": "Ayrıntıları gizle"
+ }
+ },
+ "commandPalette": {
+ "noRecentActivity": "Son etkinlik yok",
+ "sessionsCount": "{{count}} oturum",
+ "sessionsCount_one": "{{count}} oturum",
+ "sessionsCount_other": "{{count}} oturum",
+ "mode": {
+ "searchProjects": "Projelerde ara",
+ "searchAcrossProjects": "Tüm projelerde ara",
+ "searchInProject": "Projede ara"
+ },
+ "currentProject": "Geçerli proje",
+ "global": "Genel",
+ "placeholders": {
+ "projects": "Projelerde ara...",
+ "conversations": "Konuşmalarda ara..."
+ },
+ "empty": {
+ "noProjectsForQuery": "\"{{query}}\" için proje bulunamadı",
+ "noProjects": "Proje bulunamadı",
+ "minChars": "Aramak için en az 2 karakter yazın",
+ "noFastResults": "\"{{query}}\" için son oturumlarda hızlı sonuç yok",
+ "noResults": "\"{{query}}\" için sonuç bulunamadı"
+ },
+ "footer": {
+ "projectsCount": "{{count}} proje",
+ "projectsCount_one": "{{count}} proje",
+ "projectsCount_other": "{{count}} proje",
+ "results": "{{count}} {{speed}}sonuç",
+ "results_one": "{{count}} {{speed}}sonuç",
+ "results_other": "{{count}} {{speed}}sonuç",
+ "resultsAcrossProjects": "tüm projelerde {{count}} {{speed}}sonuç",
+ "resultsAcrossProjects_one": "tüm projelerde {{count}} {{speed}}sonuç",
+ "resultsAcrossProjects_other": "tüm projelerde {{count}} {{speed}}sonuç",
+ "fastPrefix": "hızlı ",
+ "typeToSearch": "Aramak için yazın",
+ "navigate": "gezin",
+ "select": "seç",
+ "open": "aç",
+ "global": "genel",
+ "close": "kapat",
+ "results_few": "{{count}} {{speed}}sonuç",
+ "results_many": "{{count}} {{speed}}sonuç",
+ "resultsAcrossProjects_few": "tüm projelerde {{count}} {{speed}}sonuç",
+ "resultsAcrossProjects_many": "tüm projelerde {{count}} {{speed}}sonuç",
+ "projectsCount_few": "{{count}} proje",
+ "projectsCount_many": "{{count}} proje",
+ "upDownKey": "↑↓",
+ "escapeKey": "esc"
+ },
+ "sessionsCount_few": "{{count}} oturum",
+ "sessionsCount_many": "{{count}} oturum"
+ },
+ "tasksPanel": {
+ "title": "Görevler",
+ "searchPlaceholder": "Görevlerde ara...",
+ "pinned": "Sabitlenmiş",
+ "groupByLabel": "Gruplama ölçütü:",
+ "groupByAria": "Gruplama ölçütü",
+ "groupModes": {
+ "none": "Yok",
+ "project": "Proje",
+ "time": "Zaman"
+ },
+ "showArchived": "Arşivlenenleri göster",
+ "hideArchived": "Arşivlenenleri gizle",
+ "empty": {
+ "noMatchingTasks": "Eşleşen görev yok",
+ "noTasks": "Görev bulunamadı"
+ },
+ "teamLabel": "Ekip: {{team}}",
+ "showMore": "Daha fazla göster",
+ "showLess": "Daha az göster",
+ "deleteConfirm": {
+ "title": "Görevi sil",
+ "message": "#{{taskId}} görevi çöpe taşınsın mı?",
+ "confirmLabel": "Sil",
+ "cancelLabel": "İptal"
+ },
+ "deleteFailed": {
+ "title": "Görev silinemedi",
+ "fallbackMessage": "Beklenmeyen bir hata oluştu",
+ "confirmLabel": "Tamam"
+ },
+ "sort": {
+ "byTime": "Zamana göre",
+ "byUnread": "Okunmamışa göre",
+ "byProject": "Projeye göre",
+ "byTeam": "Ekibe göre"
+ }
+ },
+ "toolViewer": {
+ "input": "Girdi",
+ "replaceAll": "(tümünü değiştir)",
+ "noInputRecorded": "Bu araç çağrısı için girdi kaydedilmedi.",
+ "agent": {
+ "action": "eylem",
+ "teammate": "takım arkadaşı",
+ "team": "ekip",
+ "runtime": "çalışma zamanı",
+ "type": "tür",
+ "startupInstructionsHidden": "Başlangıç talimatları arayüzde gizlidir."
+ }
+ },
+ "taskContextMenu": {
+ "unpin": "Sabitlemeyi kaldır",
+ "pin": "Sabitle",
+ "rename": "Yeniden adlandır",
+ "markUnread": "Okunmadı olarak işaretle",
+ "unarchive": "Arşivden çıkar",
+ "archive": "Arşivle",
+ "deleteTask": "Görevi sil"
+ },
+ "updateDialog": {
+ "closeDialog": "İletişim kutusunu kapat",
+ "updateAvailable": "Güncelleme mevcut",
+ "updateReady": "Güncelleme Hazır",
+ "noReleaseNotes": "Sürüm notu yok.",
+ "viewOnGitHub": "GitHub'da görüntüle",
+ "later": "Sonra",
+ "restartNow": "Şimdi yeniden başlat",
+ "download": "İndir"
+ },
+ "errorBoundary": {
+ "title": "Bir şeyler ters gitti",
+ "description": "Uygulamada beklenmeyen bir hata oluştu. Sayfayı yeniden yüklemeyi veya hata durumunu sıfırlamayı deneyebilirsiniz.",
+ "componentStack": "Bileşen Yığını",
+ "tryAgain": "Yeniden Dene",
+ "copied": "Kopyalandı",
+ "copyErrorDetails": "Hata Ayrıntılarını Kopyala",
+ "reportBugOnGitHub": "GitHub'da Hata Bildir",
+ "reloadApp": "Uygulamayı Yeniden Yükle",
+ "diagnosticsNotice": "GitHub hata raporları ve kopyalanan tanılamalar; hata mesajını, yığın izlerini, uygulama sürümünü, etkin sekmeyi, seçili ekibi, görev bağlamını ve ortam ayrıntılarını içerir."
+ },
+ "runtimeBackendSelector": {
+ "label": "Çalışma zamanı arka ucu",
+ "resolved": "Çözümlendi: {{backend}}",
+ "current": "Geçerli",
+ "recommended": "Önerilen",
+ "unavailable": "Kullanılamıyor",
+ "cannotSelectYet": "Bu arka uç henüz seçilemez.",
+ "auto": "Otomatik",
+ "autoCurrently": "Otomatik (şu anda: {{backend}})",
+ "audience": {
+ "internal": "Dahili"
+ },
+ "states": {
+ "locked": "Kilitli",
+ "disabled": "Devre dışı",
+ "authRequired": "Kimlik doğrulama gerekli",
+ "runtimeMissing": "Çalışma zamanı eksik",
+ "degraded": "Düşük performanslı",
+ "unavailable": "Kullanılamıyor"
+ }
+ },
+ "providerModelBadges": {
+ "checking": "Kontrol ediliyor",
+ "unavailable": "Kullanılamıyor",
+ "checkFailed": "Kontrol başarısız oldu",
+ "free": "Ücretsiz",
+ "freeTooltip": "OpenCode meta verileri tarafından bildirildi. Kullanılabilirlik ve limitler değişebilir."
+ },
+ "taskFilters": {
+ "status": "Durum",
+ "clearAll": "Tümünü temizle",
+ "selectAll": "Tümünü seç",
+ "team": "Ekip",
+ "allTeams": "Tüm ekipler",
+ "searchTeams": "Ekiplerde ara...",
+ "noTeamsFound": "Ekip bulunamadı",
+ "project": "Proje",
+ "allProjects": "Tüm Projeler",
+ "searchProjects": "Projelerde ara...",
+ "noProjects": "Proje yok",
+ "comments": "Yorumlar",
+ "apply": "Uygula",
+ "read": {
+ "all": "Tümü",
+ "unread": "Okunmamış",
+ "read": "Okunmuş"
+ },
+ "statusOptions": {
+ "todo": "YAPILACAK",
+ "inProgress": "DEVAM EDİYOR",
+ "needsFix": "DÜZELTME GEREKİR",
+ "done": "BİTTİ",
+ "review": "İNCELEME",
+ "approved": "ONAYLANDI"
+ }
+ },
+ "sessionItem": {
+ "totalContext": "Toplam Bağlam: {{tokens}} token",
+ "context": "Bağlam: {{tokens}}",
+ "phase": "Aşama {{phase}}:",
+ "compactedTo": "({{tokens}} olarak sıkıştırıldı)"
+ },
+ "notifications": {
+ "row": {
+ "team": "ekip",
+ "subagent": "alt agent",
+ "markAsRead": "Okundu olarak işaretle",
+ "delete": "Sil",
+ "viewInSession": "Oturumda görüntüle"
+ },
+ "title": "Bildirimler",
+ "loading": "Bildirimler yükleniyor...",
+ "actions": {
+ "markFilteredAsRead": "Filtrelenmişleri okundu işaretle",
+ "markAllAsRead": "Tümünü okundu işaretle",
+ "markFilteredRead": "Filtrelenmişleri okundu işaretle",
+ "markAllRead": "Tümünü okundu işaretle",
+ "clearFilteredNotifications": "Filtrelenmiş bildirimleri temizle",
+ "clearAllNotifications": "Tüm bildirimleri temizle",
+ "clickToConfirm": "Onaylamak için tıklayın",
+ "clearFiltered": "Filtrelenmişleri temizle",
+ "clearAll": "Tümünü temizle"
+ },
+ "counts": {
+ "unreadInFilter": "filtrede {{count}} okunmamış",
+ "unreadInFilter_one": "filtrede {{count}} okunmamış",
+ "unreadInFilter_few": "filtrede {{count}} okunmamış",
+ "unreadInFilter_many": "filtrede {{count}} okunmamış",
+ "unreadInFilter_other": "filtrede {{count}} okunmamış",
+ "inFilter": "filtrede {{count}}",
+ "inFilter_one": "filtrede {{count}}",
+ "inFilter_few": "filtrede {{count}}",
+ "inFilter_many": "filtrede {{count}}",
+ "inFilter_other": "filtrede {{count}}",
+ "unread": "{{count}} okunmamış",
+ "unread_one": "{{count}} okunmamış",
+ "unread_few": "{{count}} okunmamış",
+ "unread_many": "{{count}} okunmamış",
+ "unread_other": "{{count}} okunmamış",
+ "total": "{{count}} toplam",
+ "total_one": "{{count}} toplam",
+ "total_few": "{{count}} toplam",
+ "total_many": "{{count}} toplam",
+ "total_other": "{{count}} toplam"
+ },
+ "filters": {
+ "other": "Diğer"
+ },
+ "empty": {
+ "noMatching": "Eşleşen bildirim yok",
+ "noNotifications": "Bildirim yok",
+ "tryDifferentFilter": "Farklı bir filtre deneyin",
+ "allCaughtUp": "Her şeyi gördünüz!"
+ }
+ },
+ "updates": {
+ "restartToUpdate": "Güncellemek için yeniden başlat",
+ "updateApp": "Uygulamayı güncelle",
+ "downloadedRestartTooltip": "Güncelleme indirildi, uygulamak için yeniden başlatın",
+ "newVersionAvailable": "Yeni sürüm mevcut",
+ "updatingApp": "Uygulama güncelleniyor",
+ "updateReady": "Güncelleme hazır",
+ "restartNow": "Şimdi yeniden başlat"
+ },
+ "layout": {
+ "github": "GitHub",
+ "discord": "Discord",
+ "expandSidebar": "Kenar çubuğunu genişlet",
+ "collapseSidebarShortcut": "Kenar çubuğunu daralt ({{shortcut}})",
+ "sidebarView": "Kenar çubuğu görünümü",
+ "resizeSidebar": "Kenar çubuğunu yeniden boyutlandır",
+ "closeTab": "Sekmeyi kapat",
+ "openedFromSearch": "Aramadan açıldı",
+ "pinnedSession": "Sabitlenmiş oturum",
+ "jumpToSection": "Bölüme atla",
+ "newTab": "Yeni sekme",
+ "newTabDashboard": "Yeni sekme (Pano)",
+ "refreshSession": "Oturumu yenile",
+ "refreshSessionWithShortcut": "Oturumu Yenile ({{shortcut}})",
+ "loadingTab": "Sekme yükleniyor",
+ "menu": {
+ "teams": "Ekipler",
+ "settings": "Ayarlar",
+ "extensions": "Eklentiler",
+ "search": "Ara",
+ "schedules": "Zamanlamalar",
+ "docs": "Dokümanlar",
+ "exportMarkdown": "Markdown olarak dışa aktar",
+ "exportJson": "JSON olarak dışa aktar",
+ "exportPlainText": "Düz Metin olarak dışa aktar",
+ "analyzeSession": "Oturumu Analiz Et"
+ },
+ "tabMenu": {
+ "closeTabs": "{{count}} Sekmeyi Kapat",
+ "closeTabs_one": "{{count}} Sekmeyi Kapat",
+ "closeTabs_few": "{{count}} Sekmeyi Kapat",
+ "closeTabs_many": "{{count}} Sekmeyi Kapat",
+ "closeTabs_other": "{{count}} Sekmeyi Kapat",
+ "closeTab": "Sekmeyi Kapat",
+ "closeOtherTabs": "Diğer Sekmeleri Kapat",
+ "splitRight": "Sağa Böl",
+ "splitLeft": "Sola Böl",
+ "pinToSidebar": "Kenar Çubuğuna Sabitle",
+ "unpinFromSidebar": "Kenar Çubuğundan Sabitlemeyi Kaldır",
+ "hideFromSidebar": "Kenar Çubuğundan Gizle",
+ "unhideFromSidebar": "Kenar Çubuğunda Göster",
+ "closeAllTabs": "Tüm Sekmeleri Kapat"
+ },
+ "sections": {
+ "team": "Ekip",
+ "sessions": "Oturumlar",
+ "kanban": "Kanban",
+ "claudeLogs": "Günlükler",
+ "messages": "Mesajlar"
+ }
+ },
+ "editorFormatting": {
+ "bold": "Kalın",
+ "italic": "İtalik",
+ "strike": "Üstü çizili",
+ "code": "Kod"
+ },
+ "diff": {
+ "changed": "Değiştirildi",
+ "noChangesDetected": "Değişiklik algılanmadı"
+ },
+ "codexLogin": {
+ "copyLoginLinkAndCode": "ChatGPT giriş bağlantısını ve kodunu kopyala",
+ "copyLoginLink": "ChatGPT giriş bağlantısını kopyala",
+ "copyFailed": "Kopyalama başarısız oldu",
+ "copyLinkAndCode": "Bağlantı + kod kopyala",
+ "copyLink": "Bağlantıyı kopyala",
+ "enterCodeOnLoginPage": "Bu kodu ChatGPT giriş sayfasına girin"
+ },
+ "window": {
+ "minimize": "Simge durumuna küçült",
+ "maximize": "Büyüt",
+ "restore": "Geri yükle"
+ },
+ "context": {
+ "local": "Yerel",
+ "switchingTo": "{{workspace}} öğesine geçiliyor",
+ "loadingWorkspace": "Çalışma alanı yükleniyor",
+ "switchWorkspace": "Çalışma Alanını Değiştir"
+ },
+ "repositories": {
+ "noneAvailable": "Kullanılabilir depo yok",
+ "remove": "Depoyu kaldır"
+ },
+ "export": {
+ "session": "Oturumu dışa aktar",
+ "sessionTitle": "Oturumu Dışa Aktar"
+ },
+ "brand": {
+ "claude": "Claude"
+ },
+ "sessionReport": {
+ "noSessionData": "Oturum verisi yok",
+ "title": "Oturum Raporu"
+ },
+ "sessionFilters": {
+ "project": {
+ "selectProject": "Proje Seç"
+ }
+ },
+ "tasks": {
+ "date": {
+ "updatedPrefix": "günc.",
+ "updatedYesterday": "dün güncellendi",
+ "yesterday": "Dün"
+ },
+ "reviewState": {
+ "needsFix": "Düzeltme Gerekir"
+ },
+ "unassigned": "atanmamış"
+ }
+}
diff --git a/src/features/localization/renderer/locales/tr/dashboard.json b/src/features/localization/renderer/locales/tr/dashboard.json
new file mode 100644
index 00000000..8ae77394
--- /dev/null
+++ b/src/features/localization/renderer/locales/tr/dashboard.json
@@ -0,0 +1,197 @@
+{
+ "cliStatus": {
+ "actions": {
+ "alreadyLoggedIn": "Zaten giriş yaptınız mı?",
+ "becomeSponsor": "Sponsor olun",
+ "cancel": "İptal",
+ "checkNow": "Şimdi kontrol et",
+ "checkUpdates": "Güncellemeleri Kontrol Et",
+ "checking": "Kontrol ediliyor...",
+ "connect": "Bağlan",
+ "extensions": "Eklentiler",
+ "login": "Giriş yap",
+ "manage": "Yönet",
+ "manageProviders": "Sağlayıcıları Yönet",
+ "plan": "Plan",
+ "recheck": "Yeniden kontrol et",
+ "recheckProvider": "{{provider}} sağlayıcısını yeniden kontrol et",
+ "retry": "Yeniden dene",
+ "updateTo": "v{{version}} sürümüne güncelle",
+ "useCode": "Kodu kullan"
+ },
+ "atlas": {
+ "alt": "Atlas Cloud",
+ "description": "Atlas Cloud, geliştiricilere video üretimi, görsel üretimi ve LLM API'lerine erişim sağlayan tek bir yapay zeka API'si sunan tam modlu bir yapay zeka çıkarım platformudur. Birden fazla satıcı entegrasyonunu yönetmek yerine, bir kez bağlanırsınız ve tüm modaliteler genelinde 300+ özenle seçilmiş modele birleşik erişim elde edersiniz. Daha bütçe dostu API erişimi için Atlas Cloud'un yeni kodlama planı kampanyasına göz atın.",
+ "openCodeProvider": "OpenCode sağlayıcısı",
+ "plan": "Atlas Cloud kodlama planı",
+ "sponsor": "Sponsor"
+ },
+ "errors": {
+ "checkStatusFailed": "CLI durumu kontrol edilemedi",
+ "installationFailed": "Kurulum başarısız oldu",
+ "refreshFailed": "Güncellemeler kontrol edilemedi. Ağ bağlantınızı kontrol edip tekrar deneyin.",
+ "runtimeUpdatedRefreshFailed": "Çalışma zamanı güncellendi, ancak sağlayıcı durumu yenilenemedi."
+ },
+ "hints": {
+ "backgroundStatus": "{{runtime}} durumu arka planda kontrol edilecek.",
+ "codexApiKeyFallback": "{{hint}} Kimlik doğrulama modunu değiştirirseniz API anahtarı yedeği kullanılabilir.",
+ "codexAutoApiKey": "{{hint}} Otomatik mod, ChatGPT bağlanana kadar API anahtarını kullanmaya devam eder.",
+ "codexFinishLogin": "Tarayıcıda ChatGPT girişini tamamlayın. İstenirse gösterilen kodu girin.",
+ "codexNoActiveLogin": "Kullanım limitleri yalnızca Codex CLI etkin bir ChatGPT hesabı gördükten sonra görünür. Şu anda etkin bir ChatGPT girişi olmadığını bildiriyor.",
+ "codexNoActiveManagedSession": "Kullanım limitleri yalnızca Codex CLI etkin bir ChatGPT hesabı gördükten sonra görünür. Yerel Codex hesap verisi mevcut, ancak şu anda etkin bir yönetilen oturum seçili değil.",
+ "codexReconnectNeeded": "Kullanım limitleri yalnızca Codex şu anda seçili olan ChatGPT oturumunu yeniledikten sonra görünür. Şu anda yerel oturumun yeniden bağlanması gerekiyor.",
+ "firstCheckSlow": "İlk kontrol 30 saniyeye kadar sürebilir",
+ "loginRequiredForTeams": "Oturumlara ve projelere göz atmak için giriş yapmanız gerekmez. Giriş yalnızca Agent Teams ekiplerini çalıştırmak için gereklidir.",
+ "troubleshootTitle": "Giriş yaptığınızdan eminseniz şu adımları deneyin:"
+ },
+ "installer": {
+ "checkingLatest": "En son sürüm kontrol ediliyor...",
+ "downloading": "{{runtime}} indiriliyor...",
+ "installing": "{{runtime}} kuruluyor...",
+ "success": "{{runtime}} v{{version}} başarıyla kuruldu",
+ "verifying": "Sağlama toplamı doğrulanıyor..."
+ },
+ "labels": {
+ "apiKeyRequired": "API anahtarı gerekli",
+ "comingSoon": "Yakında",
+ "collapseProviderDetails": "Sağlayıcı ayrıntılarını daralt",
+ "expandProviderDetails": "Sağlayıcı ayrıntılarını genişlet",
+ "generateLink": "Bağlantı oluştur",
+ "loadingRateLimits": "Hız limitleri yükleniyor",
+ "loggedOut": "Sağlayıcı oturumu kapatıldı",
+ "loginAuthFailed": "Kimlik doğrulama başarısız oldu",
+ "loginAuthUpdated": "Kimlik doğrulama güncellendi",
+ "loginComplete": "Giriş tamamlandı",
+ "loginFailed": "Giriş başarısız oldu",
+ "loginTitle": "Giriş yap",
+ "logoutFailed": "Oturum kapatma başarısız oldu",
+ "logoutTitle": "Oturumu kapat",
+ "notLoggedIn": "Giriş yapılmadı",
+ "openLogin": "Girişi aç",
+ "providerActionRequired": "Sağlayıcı eylemi gerekli",
+ "resets": "{{time}} sıfırlanır",
+ "runtimeLoginTitle": "{{runtime}} Girişi"
+ },
+ "loading": {
+ "aiProviders": "Yapay Zeka Sağlayıcıları kontrol ediliyor...",
+ "claudeCli": "Claude CLI kontrol ediliyor..."
+ },
+ "provider": {
+ "authenticated": "Kimlik doğrulandı",
+ "backend": "Arka uç: {{backend}}",
+ "checkingAuthentication": "Kimlik doğrulama kontrol ediliyor...",
+ "checkingProviders": "Sağlayıcılar kontrol ediliyor...",
+ "configuredLocalCount": "{{count}} yapılandırılmış yerel",
+ "configuredLocalCount_few": "{{count}} yapılandırılmış yerel",
+ "configuredLocalCount_many": "{{count}} yapılandırılmış yerel",
+ "configuredLocalCount_one": "{{count}} yapılandırılmış yerel",
+ "configuredLocalCount_other": "{{count}} yapılandırılmış yerel",
+ "configuredLocalTitle": "OpenCode yapılandırmanızdan içe aktarılan yerel OpenCode rotaları.",
+ "connectedCount": "Sağlayıcılar: {{connected}}/{{denominator}} bağlı",
+ "freeModels": "Ücretsiz modeller",
+ "freeModelsTitle": "OpenCode, kurulumunuzda mevcut olduğunda Big Pickle gibi ücretsiz model seçenekleri içerir. OpenCode üzerinden OpenRouter da ücretsiz modeller sunabilir, ancak her OpenCode/OpenRouter modeli ücretsiz değildir. Kullanılabilirlik ve limitler değişebilir.",
+ "loadingModels": "Modeller yükleniyor...",
+ "modelsUnavailable": "Bu çalışma zamanı yapısı için modeller kullanılamıyor",
+ "runtime": "Çalışma zamanı: {{runtime}}",
+ "verifiedCount": "{{count}} doğrulanmış",
+ "verifiedCount_few": "{{count}} doğrulanmış",
+ "verifiedCount_many": "{{count}} doğrulanmış",
+ "verifiedCount_one": "{{count}} doğrulanmış",
+ "verifiedCount_other": "{{count}} doğrulanmış",
+ "verifiedTitle": "Başarılı yürütme kanıtı olan OpenCode rotaları."
+ },
+ "runtime": {
+ "configuredHealthCheckFailed": "Yapılandırılmış {{runtime}}, başlangıç sağlık kontrolünde başarısız oldu.",
+ "configuredNotFound": "Yapılandırılmış {{runtime}} bulunamadı.",
+ "foundButFailed": "{{runtime}} bulundu ancak başlatılamadı",
+ "healthCheckFailedDescription": "Uygulama yapılandırılmış {{runtime}} öğesini buldu, ancak başlangıç sağlık kontrolü başarısız oldu. Onarın veya yeniden kurun, ardından tekrar deneyin.",
+ "install": "{{runtime}} kur",
+ "installRequiredDescription": "{{runtime}}, ekip sağlama ve oturum yönetimi için gereklidir. Başlamak için kurun.",
+ "isRequired": "{{runtime}} gereklidir",
+ "reinstall": "{{runtime}} yeniden kur"
+ },
+ "runtimeInstall": {
+ "checking": "Kontrol ediliyor",
+ "codexTitle": "Codex CLI'yi uygulama verilerine kur",
+ "downloading": "İndiriliyor",
+ "downloadingPercent": "%{{percent}} indiriliyor",
+ "install": "Kur",
+ "installing": "Kuruluyor",
+ "openCodeTitle": "OpenCode çalışma zamanını uygulama verilerine kur",
+ "retryInstall": "Kurulumu yeniden dene"
+ },
+ "troubleshoot": {
+ "again": "tekrar",
+ "authStatusCommand": "yapılandırdığınız CLI kimlik doğrulama durumu komutu",
+ "checkLoggedIn": "- \"Giriş yapıldı\" gösterip göstermediğini kontrol edin",
+ "click": "Tıklayın",
+ "loginCommand": "çalışma zamanı giriş komutu",
+ "logoutCommand": "çalışma zamanı oturum kapatma komutu",
+ "openTerminal": "Terminalinizi açıp şunu çalıştırın:",
+ "reloginPrefix": "Giriş yapıldığını söylüyor ancak uygulama görmüyorsa şunu deneyin:",
+ "sameRuntime": "Terminalinizdeki CLI'nin, uygulamanın kullandığı çalışma zamanıyla aynı olduğundan emin olun",
+ "statusCacheHint": "- bazen durum birkaç saniye boyunca önbelleğe alınır",
+ "then": "ardından"
+ },
+ "warnings": {
+ "multipleApiKeysMissing": "Bir veya daha fazla sağlayıcı API anahtarı moduna ayarlı, ancak yapılandırılmış bir API anahtarı yok. Anahtar eklemek veya bağlantı modunu değiştirmek için Sağlayıcıları Yönet'i açın.",
+ "multipleApiKeysNeedAttention": "Bir veya daha fazla sağlayıcı API anahtarı moduna ayarlı ve ilgilenilmesi gerekiyor. Kaydedilmiş anahtarları gözden geçirmek veya bağlantı modunu değiştirmek için Sağlayıcıları Yönet'i açın.",
+ "notAuthenticated": "{{runtime}} kuruldu ancak kimlik doğrulaması yapmadınız. Ekip sağlama ve yapay zeka özellikleri için giriş gereklidir.",
+ "singleApiKeyMissing": "{{provider}} API anahtarı moduna ayarlı, ancak yapılandırılmış bir API anahtarı yok. Anahtar eklemek veya bağlantı modunu değiştirmek için Sağlayıcıları Yönet'i açın.",
+ "singleApiKeyNeedsAttention": "{{provider}} API anahtarı moduna ayarlı, ancak bağlı değil. Kaydedilmiş anahtarı gözden geçirmek veya bağlantı modunu değiştirmek için Sağlayıcıları Yönet'i açın."
+ }
+ },
+ "recentProjects": {
+ "selectFolderTitle": "Bir proje klasörü seçin",
+ "selectFolder": "Klasör Seç",
+ "failedToLoad": "Projeler yüklenemedi",
+ "retry": "Yeniden dene",
+ "noProjects": "Proje bulunamadı",
+ "noMatches": "\"{{query}}\" için eşleşme yok",
+ "noRecentProjects": "Son proje bulunamadı",
+ "emptyDescription": "Son Claude ve Codex etkinlikleri burada görünecek.",
+ "loadMore": "Daha fazla yükle",
+ "card": {
+ "deleted": "Silindi",
+ "projectFolderMissing": "Proje klasörü artık mevcut değil",
+ "taskCounts": {
+ "active": "{{count}} etkin",
+ "active_one": "{{count}} etkin",
+ "active_other": "{{count}} etkin",
+ "active_few": "{{count}} etkin",
+ "active_many": "{{count}} etkin",
+ "pending": "{{count}} beklemede",
+ "pending_one": "{{count}} beklemede",
+ "pending_other": "{{count}} beklemede",
+ "pending_few": "{{count}} beklemede",
+ "pending_many": "{{count}} beklemede",
+ "done": "{{count}} tamamlandı",
+ "done_one": "{{count}} tamamlandı",
+ "done_other": "{{count}} tamamlandı",
+ "done_few": "{{count}} tamamlandı",
+ "done_many": "{{count}} tamamlandı"
+ }
+ },
+ "title": "Son Projeler",
+ "searchResults": "Arama Sonuçları",
+ "searchPlaceholder": "Projelerde ara..."
+ },
+ "actions": {
+ "selectTeam": "Ekip Seç",
+ "or": "veya",
+ "clearSearch": "Aramayı temizle"
+ },
+ "windowsAdmin": {
+ "title": "Windows Yönetici modu önerilir",
+ "description": "Agent Teams AI yükseltilmediğinde OpenCode çalışma zamanı kontrolleri zaman aşımına uğrayabilir. OpenCode ekiplerini başlatmadan önce uygulamayı Yönetici olarak çalıştır ile yeniden başlatın."
+ },
+ "webPreview": {
+ "title": "Tüm işlevsellik için masaüstü uygulamasını açın",
+ "description": "Tarayıcı sürümü hâlâ geliştirme aşamasında. Proje eylemleri, entegrasyonlar ve canlı durum güncellemeleri burada sınırlı olabilir. Tüm özelliklere güvenilir şekilde erişmek için masaüstü uygulamasını kullanın."
+ },
+ "updateBanner": {
+ "newVersionAvailable": "Yeni sürüm mevcut",
+ "restartNow": "Şimdi yeniden başlat",
+ "viewDetails": "Ayrıntıları görüntüle"
+ }
+}
diff --git a/src/features/localization/renderer/locales/tr/errors.json b/src/features/localization/renderer/locales/tr/errors.json
new file mode 100644
index 00000000..96f7aacc
--- /dev/null
+++ b/src/features/localization/renderer/locales/tr/errors.json
@@ -0,0 +1,3 @@
+{
+ "fallback": "Bir şeyler ters gitti."
+}
diff --git a/src/features/localization/renderer/locales/tr/extensions.json b/src/features/localization/renderer/locales/tr/extensions.json
new file mode 100644
index 00000000..2a67167e
--- /dev/null
+++ b/src/features/localization/renderer/locales/tr/extensions.json
@@ -0,0 +1,688 @@
+{
+ "store": {
+ "actions": {
+ "addCustom": "Özel Ekle",
+ "openDashboard": "Panoyu Aç",
+ "refreshCatalog": "Kataloğu yenile"
+ },
+ "capabilities": {
+ "mcp": "MCP: {{status}}",
+ "plugins": "Eklentiler: {{status}}",
+ "skills": "Beceriler: {{status}}"
+ },
+ "desktopOnly": "Yalnızca masaüstü uygulamasında kullanılabilir.",
+ "provider": {
+ "checkingStatus": "Sağlayıcı durumu kontrol ediliyor...",
+ "connected": "Bağlandı",
+ "loading": "Yükleniyor...",
+ "needsSetup": "Kurulum gerekiyor",
+ "readyToConfigure": "Yapılandırmaya hazır",
+ "unsupported": "Desteklenmiyor"
+ },
+ "runtime": {
+ "checkingAvailabilityDescription": "Eklentiler; eklentileri, MCP sunucularını, becerileri ve sağlayıcı bağlantılarını yönetmek için yapılandırılmış çalışma zamanına ihtiyaç duyar.",
+ "checkingAvailabilityTitle": "Eklenti çalışma zamanı kullanılabilirliği kontrol ediliyor",
+ "failedToStartDescription": "Çalışma zamanı başlangıç sağlık kontrolünü geçene kadar eklentiler devre dışıdır. Onarmak veya yeniden kurmak için Panoyu açın.",
+ "failedToStartTitle": "Yapılandırılmış çalışma zamanı bulundu ancak başlatılamadı",
+ "multimodelCapabilitiesDescription": "Sağlayıcı desteği bölüme göre değişebilir. Eklentiler yalnızca çalışma zamanının açıkça destek beyan ettiği yerlerde gösterilir.",
+ "multimodelCapabilitiesTitle": "Çoklu model çalışma zamanı yetenekleri",
+ "needsSignInDescription": "{{runtime}} bulundu{{version}}, ancak Panodan giriş yapana kadar eklenti kurulumları devre dışıdır.",
+ "needsSignInTitle": "{{runtime}} giriş gerektiriyor",
+ "notAvailableDescription": "Çalışma zamanı kurulana kadar eklentiler devre dışıdır. Kurmak ve tekrar denemek için Panoyu açın.",
+ "notAvailableTitle": "Yapılandırılmış çalışma zamanı kullanılamıyor",
+ "readyDescription": "Eklentiler bu sayfadan kurulabilir{{versionSuffix}}.",
+ "readyTitle": "{{runtime}} hazır",
+ "requiredForMutations": "Eklentileri kurmak veya kaldırmak için yapılandırılmış çalışma zamanı gereklidir. Panodan kurun veya onarın."
+ },
+ "sessionsRestartWarning": "Çalışan oturumlar yeniden başlatılana kadar eklenti değişikliklerini almaz.",
+ "tabs": {
+ "apiKeys": {
+ "description": "Çevrimiçi hizmetler için gizli anahtarlar. Eklentilerin, sunucuların ve entegrasyonların bağlanıp çalışabilmesi için bunları buraya ekleyin.",
+ "label": "API Anahtarları"
+ },
+ "mcpServers": {
+ "description": "Dış araçlara ve uygulamalara bağlantılar. Çalışma zamanının bu uygulamanın ötesinde veri okumasına veya işlem yapmasına olanak tanır.",
+ "label": "MCP Sunucuları"
+ },
+ "plugins": {
+ "description": "Çalışma zamanı için küçük eklentiler. Çoklu model modunda şu anda desteklendiğinde Anthropic oturumlarına uygulanır. Daha geniş sağlayıcı desteği geliştirme aşamasındadır.",
+ "label": "Eklentiler"
+ },
+ "skills": {
+ "description": "Yaygın işler için hazır talimatlar. Çalışma zamanının tekrarlanabilir görevleri daha tutarlı şekilde yönetmesine yardımcı olur.",
+ "label": "Beceriler"
+ }
+ },
+ "title": "Eklentiler"
+ },
+ "pluginsPanel": {
+ "activeFilters": "{{count}} etkin",
+ "browseByFit": "Uygunluğa göre göz at",
+ "capabilities": "Yetenekler",
+ "categories": "Kategoriler",
+ "clearAllFilters": "Tüm filtreleri temizle",
+ "clearFilters": "Filtreleri temizle",
+ "counts": {
+ "capabilities": "{{count}} yetenek",
+ "categories": "{{count}} kategori",
+ "plugins": "{{count}} eklenti",
+ "capabilities_few": "{{count}} yetenek",
+ "capabilities_many": "{{count}} yetenek",
+ "capabilities_one": "{{count}} yetenek",
+ "capabilities_other": "{{count}} yetenek",
+ "categories_few": "{{count}} kategori",
+ "categories_many": "{{count}} kategori",
+ "categories_one": "{{count}} kategori",
+ "categories_other": "{{count}} kategori",
+ "plugins_few": "{{count}} eklenti",
+ "plugins_many": "{{count}} eklenti",
+ "plugins_one": "{{count}} eklenti",
+ "plugins_other": "{{count}} eklenti"
+ },
+ "empty": {
+ "description": "Yeni eklentiler için daha sonra tekrar kontrol edin",
+ "filteredDescription": "Arama veya filtre ölçütlerinizi ayarlamayı deneyin",
+ "filteredTitle": "Filtrelerinize uyan eklenti yok",
+ "title": "Kullanılabilir eklenti yok"
+ },
+ "filterDescription": "Kataloğu kategoriye, yeteneğe veya kurulu duruma göre daraltın.",
+ "installedOnly": "Yalnızca kurulu",
+ "providerSupportNotice": "Eklenti desteği şu anda yalnızca Anthropic (Claude) oturumları için garanti edilmektedir. Tüm agent'lar genelinde eklentileri desteklemeye çalışıyoruz.",
+ "resultsUpdateInstantly": "Filtreleri düzenledikçe sonuçlar anında güncellenir.",
+ "searchPlaceholder": "Eklentilerde ara...",
+ "selectedCount": "{{count}} seçili",
+ "showing": "{{total}} eklentiden {{shown}} tanesi gösteriliyor",
+ "sort": {
+ "category": "Kategori",
+ "nameAsc": "Ad A-Z",
+ "nameDesc": "Ad Z-A",
+ "popular": "Popüler"
+ },
+ "activeFilters_few": "{{count}} etkin",
+ "activeFilters_many": "{{count}} etkin",
+ "activeFilters_one": "{{count}} etkin",
+ "activeFilters_other": "{{count}} etkin",
+ "selectedCount_few": "{{count}} seçili",
+ "selectedCount_many": "{{count}} seçili",
+ "selectedCount_one": "{{count}} seçili",
+ "selectedCount_other": "{{count}} seçili"
+ },
+ "customMcp": {
+ "actions": {
+ "add": "Ekle",
+ "cancel": "İptal",
+ "install": "Kur",
+ "installing": "Kuruluyor..."
+ },
+ "description": "Katalog olmadan manuel olarak bir sunucu ekleyin.",
+ "errors": {
+ "installFailed": "Kurulum başarısız oldu",
+ "invalidServerName": "Geçersiz sunucu adı. Alfasayısal karakterler, tireler, alt çizgiler, noktalar kullanın.",
+ "npmPackageRequired": "npm paket adı gereklidir",
+ "serverNameRequired": "Sunucu adı gereklidir",
+ "serverUrlRequired": "Sunucu URL'si gereklidir"
+ },
+ "fields": {
+ "environmentVariables": "Ortam Değişkenleri",
+ "headers": "Başlıklar",
+ "npmPackage": "npm Paketi",
+ "scope": "Kapsam",
+ "serverName": "Sunucu Adı",
+ "serverUrl": "Sunucu URL'si",
+ "transport": "Aktarım",
+ "transportType": "Aktarım Türü",
+ "versionOptional": "Sürüm (isteğe bağlı)"
+ },
+ "title": "Özel MCP Sunucusu Ekle",
+ "transport": {
+ "httpSse": "HTTP / SSE",
+ "stdio": "Stdio (npm)"
+ },
+ "placeholders": {
+ "headerName": "Header-Name",
+ "envVarName": "ENV_VAR_NAME",
+ "serverName": "my-server",
+ "latest": "latest",
+ "value": "değer",
+ "serverUrl": "https://api.example.com/mcp"
+ }
+ },
+ "mcpDetail": {
+ "auth": {
+ "remoteMayNeedHeaders": "Uzak MCP sunucuları, kayıt defteri bunları açıklamasa bile yine de özel başlıklar veya API anahtarları gerektirebilir. Kurulumdan sonra bağlantı başarısız olursa sağlayıcı dokümanlarını kontrol edin.",
+ "required": "Bu sunucu kimlik doğrulama gerektiriyor"
+ },
+ "diagnostics": {
+ "launchTarget": "Başlatma Hedefi"
+ },
+ "form": {
+ "autoFilled": "Otomatik dolduruldu",
+ "environmentVariables": "Ortam Değişkenleri",
+ "headers": "Başlıklar",
+ "scope": "Kapsam",
+ "serverName": "Sunucu Adı"
+ },
+ "install": {
+ "httpTransport": "HTTP: {{transport}}",
+ "manualSetupDescription": "Bu sunucu manuel kurulum gerektiriyor. Kurulum talimatları için depoyu kontrol edin.",
+ "manualSetupRequired": "Manuel kurulum gerekli",
+ "npmPackage": "npm: {{package}}",
+ "manage": "Kurulumu Yönet",
+ "install": "Sunucuyu Kur"
+ },
+ "links": {
+ "glama": "Glama",
+ "repository": "Depo",
+ "website": "Web sitesi"
+ },
+ "metadata": {
+ "author": "Yazar",
+ "githubStars": "GitHub Yıldızları",
+ "hosting": "Barındırma",
+ "installType": "Kurulum Türü",
+ "license": "Lisans",
+ "published": "Yayımlandı",
+ "source": "Kaynak",
+ "updated": "Güncellendi",
+ "version": "Sürüm"
+ },
+ "scope": {
+ "local": "Yerel",
+ "project": "Proje"
+ },
+ "tools": {
+ "title": "Araçlar ({{count}})",
+ "title_few": "Araçlar ({{count}})",
+ "title_many": "Araçlar ({{count}})",
+ "title_one": "Araçlar ({{count}})",
+ "title_other": "Araçlar ({{count}})"
+ },
+ "placeholders": {
+ "serverName": "my-server"
+ }
+ },
+ "skillEditor": {
+ "actions": {
+ "cancel": "İptal",
+ "createSkill": "Beceri Oluştur",
+ "preparing": "Hazırlanıyor...",
+ "reviewAndCreate": "İncele Ve Oluştur",
+ "reviewAndSave": "İncele Ve Kaydet",
+ "saveSkill": "Beceriyi Kaydet"
+ },
+ "advanced": {
+ "customDescription": "Bu beceri özel bir markdown biçimi kullanır, bu yüzden doğrudan burada düzenleyin.",
+ "customTitle": "2. SKILL.md düzenleyicisi",
+ "description": "Çoğu kişi bunu atlayabilir. Yalnızca ham markdown dosyası üzerinde doğrudan kontrol istiyorsanız açın.",
+ "hide": "Gelişmiş Düzenleyiciyi Gizle",
+ "resetFromStructuredFields": "Yapılandırılmış Alanlardan Sıfırla",
+ "show": "Gelişmiş Düzenleyiciyi Göster",
+ "title": "4. Gelişmiş SKILL.md düzenleyicisi"
+ },
+ "basics": {
+ "description": "Bu beceriye açık bir ad verin, kimin kullanabileceğini seçin ve nerede bulunacağına karar verin.",
+ "title": "1. Temel Bilgiler"
+ },
+ "description": {
+ "create": "İş akışını sade bir dille açıklayın, oluşturulacak dosyaları inceleyin ve ardından kaydedin.",
+ "edit": "Bu beceriyi güncelleyin, ortaya çıkan dosya değişikliklerini inceleyin ve ardından kaydedin."
+ },
+ "extraFiles": {
+ "addedFiles": "Eklenen dosyalar:",
+ "assets": "Varlıklar",
+ "assetsDescription": "Yalnızca iş akışını açıklamaya yardımcı oluyorsa ekran görüntüleri veya paketlenmiş medya ekleyin.",
+ "description": "Yalnızca bu beceri gerçekten ihtiyaç duyuyorsa destekleyici dokümanlar, betikler veya varlıklar ekleyin.",
+ "lockedForEdits": "Kök ve klasör düzenlemeler için kilitli",
+ "optionalDescription": "İncelemeye dahil edilecek ve `SKILL.md` ile birlikte yazılacak başlangıç dosyaları ekleyin.",
+ "optionalTitle": "İsteğe bağlı dosyalar",
+ "references": "Referanslar",
+ "referencesDescription": "Çalışma zamanının bakabileceği destekleyici dokümanlar, bağlantılar veya örnekler ekleyin.",
+ "scripts": "Betikler",
+ "scriptsDescription": "Yardımcı komutlar veya kurulum notları ekleyin. Bu beceriyi paylaşmadan önce dikkatlice inceleyin.",
+ "title": "3. Ek dosyalar"
+ },
+ "fields": {
+ "compatibility": "Uyumluluk",
+ "description": "Açıklama",
+ "folderName": "Klasör adı",
+ "folderNameHint": "İncelemenin hemen çalışması için bunu beceri adından otomatik olarak öneririz.",
+ "invocation": "Nasıl kullanılması gerektiği",
+ "license": "Lisans",
+ "name": "Beceri adı",
+ "notes": "Ek notlar veya koruma önlemleri",
+ "root": "Nerede saklanacağı",
+ "scope": "Kimin kullanabileceği",
+ "steps": "İzlenecek ana adımlar",
+ "whenToUse": "Buna ne zaman başvurulacağı"
+ },
+ "instructions": {
+ "description": "Bu bölümler beceri dosyasını sizin için oluşturur, bu yüzden istemediğiniz sürece markdown düzenlemenize gerek yoktur.",
+ "locked": "Aşağıda manuel `SKILL.md` düzenlemesine geçtiğiniz için yapılandırılmış alanlar kilitli.",
+ "title": "2. Talimatlar"
+ },
+ "invocation": {
+ "auto": "Otomatik olarak kullanılabilir",
+ "manualOnly": "Yalnızca siz istediğinizde"
+ },
+ "placeholders": {
+ "description": "Bu becerinin neye yardımcı olduğu",
+ "name": "Kısa bir beceri adı yazın",
+ "notes": "Örnek: Eksik testleri, gerilemeleri ve riskli varsayımları belirtin.",
+ "steps": "1. İlgili dosyaları inceleyin.\n2. Önce ana riski açıklayın.\n3. En güvenli düzeltmeyi önerin.",
+ "whenToUse": "Örnek: Görev bir kod incelemesi veya hata önceliklendirme isteği olduğunda bunu kullanın.",
+ "license": "MIT",
+ "compatibility": "claude-code, cursor"
+ },
+ "review": {
+ "creating": "Beceri oluşturuluyor",
+ "hint": "Önce dosya değişikliklerini inceleyin, ardından bir sonraki adımda kaydetmeyi onaylayın.",
+ "saving": "Bu beceri kaydediliyor"
+ },
+ "root": {
+ "codexOnly": " - Yalnızca Codex",
+ "shared": " - Paylaşılan"
+ },
+ "scope": {
+ "project": "Proje: {{project}}",
+ "projectUnavailable": "Proje kullanılamıyor",
+ "user": "Kullanıcı"
+ },
+ "title": {
+ "create": "Beceri oluştur",
+ "edit": "Beceriyi düzenle"
+ }
+ },
+ "skillDetail": {
+ "actions": {
+ "cancel": "İptal",
+ "delete": "Sil",
+ "deleteSkill": "Beceriyi Sil",
+ "deleting": "Siliniyor...",
+ "editSkill": "Beceriyi Düzenle",
+ "openFolder": "Klasörü Aç",
+ "openSkillFile": "SKILL.md'yi Aç",
+ "retry": "Yeniden dene"
+ },
+ "badges": {
+ "assets": "Varlıklar",
+ "autoUse": "Otomatik kullanım",
+ "hasScripts": "Betikler içerir",
+ "manualUse": "Manuel kullanım",
+ "references": "Referanslar",
+ "storedIn": "{{root}} içinde saklanır"
+ },
+ "deleteDialog": {
+ "description": "Bu beceri silinip Çöp Kutusu'na taşınsın mı?",
+ "descriptionWithName": "\"{{name}}\" silinip Çöp Kutusu'na taşınsın mı? Gerekirse daha sonra Çöp Kutusu'ndan geri yükleyebilirsiniz.",
+ "title": "Beceri silinsin mi?"
+ },
+ "descriptionFallback": "Keşfedilen beceri meta verilerini ve ham talimatları inceleyin.",
+ "errors": {
+ "deleteFailed": "Beceri silinemedi",
+ "loadFailed": "Bu beceri yüklenemiyor."
+ },
+ "files": {
+ "advancedDetails": "Gelişmiş dosya ayrıntıları",
+ "assets": "Varlıklar",
+ "references": "Referanslar",
+ "scripts": "Betikler",
+ "storedAt": "Saklandığı yer"
+ },
+ "includes": {
+ "assets": "varlıklar",
+ "instructionsOnly": "Yalnızca beceri talimatları",
+ "references": "referanslar",
+ "scripts": "betikler"
+ },
+ "invocation": {
+ "auto": "Göreve uyduğunda otomatik olarak çalışır.",
+ "manualOnly": "Yalnızca açıkça istediğinizde çalışır."
+ },
+ "issues": {
+ "bundledScripts": "Bu beceri paketlenmiş betikler içerir",
+ "reviewCarefully": "Kullanmadan önce bu beceriyi dikkatlice inceleyin"
+ },
+ "loading": "Beceri ayrıntıları yükleniyor...",
+ "scope": {
+ "personal": "Kişisel becerileriniz",
+ "projectOnly": "Yalnızca bu proje"
+ },
+ "summary": {
+ "howUsed": "Nasıl kullanıldığı",
+ "included": "Nelerin dahil olduğu",
+ "whoCanUse": "Kimin kullanabileceği"
+ },
+ "titleFallback": "Beceri ayrıntıları"
+ },
+ "skillsPanel": {
+ "actions": {
+ "createSkill": "Beceri Oluştur",
+ "import": "İçe Aktar"
+ },
+ "badges": {
+ "assets": "Varlıklar",
+ "hasScripts": "Betikler içerir",
+ "needsAttention": "İlgilenilmesi gerekiyor",
+ "references": "Referanslar",
+ "storedIn": "{{root}} içinde saklanır"
+ },
+ "configuredRuntime": "yapılandırılmış çalışma zamanı",
+ "counts": {
+ "codexOnly": "{{count}} yalnızca Codex",
+ "personal": "{{count}} kişisel",
+ "project": "{{count}} proje",
+ "shared": "{{count}} paylaşılan",
+ "total": "{{count}} toplam",
+ "codexOnly_few": "{{count}} yalnızca Codex",
+ "codexOnly_many": "{{count}} yalnızca Codex",
+ "codexOnly_one": "{{count}} yalnızca Codex",
+ "codexOnly_other": "{{count}} yalnızca Codex",
+ "personal_few": "{{count}} kişisel",
+ "personal_many": "{{count}} kişisel",
+ "personal_one": "{{count}} kişisel",
+ "personal_other": "{{count}} kişisel",
+ "project_few": "{{count}} proje",
+ "project_many": "{{count}} proje",
+ "project_one": "{{count}} proje",
+ "project_other": "{{count}} proje",
+ "shared_few": "{{count}} paylaşılan",
+ "shared_many": "{{count}} paylaşılan",
+ "shared_one": "{{count}} paylaşılan",
+ "shared_other": "{{count}} paylaşılan",
+ "total_few": "{{count}} toplam",
+ "total_many": "{{count}} toplam",
+ "total_one": "{{count}} toplam",
+ "total_other": "{{count}} toplam"
+ },
+ "empty": {
+ "noMatches": "Aramanızla eşleşen beceri yok",
+ "noMatchesDescription": "Farklı bir arama terimi deneyin veya filtreleri değiştirin.",
+ "noSkills": "Henüz beceri yok",
+ "noSkillsDescription": "Tekrarlanabilir bir iş akışını öğretmek için ilk becerinizi oluşturun veya halihazırda kullandığınız birini içe aktarın."
+ },
+ "filters": {
+ "all": "Tüm beceriler",
+ "codexOnly": "Yalnızca Codex",
+ "hasScripts": "Betikler içerir",
+ "needsAttention": "İlgilenilmesi gerekiyor",
+ "personal": "Kişisel",
+ "project": "Proje",
+ "shared": "Paylaşılan"
+ },
+ "hero": {
+ "codexAvailable": "Bir beceri yalnızca Codex'e özel kalmalıysa `.codex` kullanın.",
+ "codexUnavailable": "Mevcut `.codex` becerileri burada düzenlenebilir kalır, ancak yeni yalnızca Codex becerileri Codex çalışma zamanının etkinleştirilmesini gerektirir.",
+ "description": "Beceriler, çalışma zamanının aynı türdeki görevi daha tutarlı şekilde yönetmesine yardımcı olan yeniden kullanılabilir talimatlardır.",
+ "guidance": "Her yerde istediğiniz alışkanlıklar için kişisel becerileri kullanın. Yalnızca tek bir kod tabanı içinde anlamlı olan iş akışları için proje becerilerini kullanın.",
+ "personalContext": "Şu anda yalnızca kişisel becerilerinizi görüyorsunuz.",
+ "projectContext": "{{project}} için olan becerilerle birlikte kişisel becerilerinizi görüyorsunuz.",
+ "title": "Tekrarlanabilir işleri öğretin"
+ },
+ "invocation": {
+ "auto": "Uyduğunda otomatik olarak çalışır",
+ "manualOnly": "Yalnızca açıkça istediğinizde çalışır"
+ },
+ "loading": {
+ "loading": "Beceriler yükleniyor...",
+ "refreshing": "Beceriler yenileniyor..."
+ },
+ "runtimeAudience": "`.claude`, `.cursor` ve `.agents` içindeki paylaşılan beceriler {{audience}} için kullanılabilir. `.codex` içinde saklanan beceriler, Codex desteği mevcut olduğunda yalnızca Codex'e özel kalır.",
+ "scope": {
+ "project": "Bu proje",
+ "user": "Kişisel"
+ },
+ "searchPlaceholder": "Beceri adına veya neye yardımcı olduğuna göre ara...",
+ "sections": {
+ "personal": {
+ "description": "Her yerde kullanılabilir olmasını istediğiniz alışkanlıklar ve talimatlar.",
+ "title": "Kişisel beceriler"
+ },
+ "project": {
+ "description": "Yalnızca bu kod tabanı için anlamlı olan iş akışları.",
+ "title": "Proje becerileri"
+ }
+ },
+ "sort": {
+ "label": "Becerileri sırala",
+ "name": "Ad",
+ "recent": "Son"
+ },
+ "status": {
+ "hasScripts": "Betikler içerir, bu yüzden dikkatlice inceleyin",
+ "needsAttention": "Güvenmeden önce ilgilenilmesi gerekiyor",
+ "ready": "Kullanıma hazır"
+ },
+ "success": {
+ "created": "Beceri başarıyla oluşturuldu.",
+ "imported": "Beceri başarıyla içe aktarıldı.",
+ "saved": "Beceri başarıyla kaydedildi."
+ }
+ },
+ "pluginDetail": {
+ "unknown": "Bilinmiyor",
+ "metadata": {
+ "author": "Yazar",
+ "category": "Kategori",
+ "source": "Kaynak",
+ "version": "Sürüm",
+ "capabilities": "Yetenekler",
+ "installs": "Kurulumlar"
+ },
+ "scope": {
+ "label": "Kapsam:",
+ "options": {
+ "user": "Kullanıcı (genel)",
+ "project": "Proje (paylaşılan)",
+ "local": "Yerel (gitignore'lı)"
+ }
+ },
+ "links": {
+ "homepage": "Ana sayfa",
+ "contact": "İletişim"
+ },
+ "readme": {
+ "loading": "README yükleniyor...",
+ "empty": "README yok."
+ }
+ },
+ "skillImport": {
+ "title": "Beceriyi içe aktar",
+ "description": "Mevcut bir beceri klasörü seçin, nelerin kopyalanacağını inceleyin, ardından desteklenen beceri konumlarınızdan birine içe aktarın.",
+ "steps": {
+ "chooseFolder": {
+ "title": "1. Bir beceri klasörü seçin",
+ "description": "Bu, halihazırda bir `SKILL.md`, `Skill.md` veya `skill.md` dosyası içeren bir klasör olmalıdır."
+ },
+ "location": {
+ "title": "2. Nereye ait olduğuna karar verin",
+ "description": "Kişisel beceriler her yerde çalışır. Proje becerileri yalnızca tek bir kod tabanı için görünür."
+ }
+ },
+ "fields": {
+ "sourceFolder": "Kaynak klasör",
+ "destinationFolderName": "Hedef klasör adı",
+ "audience": "Kimin kullanabileceği",
+ "storage": "Nerede saklanacağı"
+ },
+ "placeholders": {
+ "defaultFolderName": "Varsayılan olarak kaynak klasör adı"
+ },
+ "actions": {
+ "browse": "Gözat",
+ "cancel": "İptal",
+ "preparing": "Hazırlanıyor...",
+ "reviewAndImport": "İncele Ve İçe Aktar",
+ "importSkill": "Beceriyi İçe Aktar",
+ "backToImport": "İçe Aktarmaya Dön"
+ },
+ "scope": {
+ "user": "Kullanıcı",
+ "project": "Proje: {{project}}",
+ "projectUnavailable": "Proje kullanılamıyor"
+ },
+ "rootSuffix": {
+ "codexOnly": " - Yalnızca Codex",
+ "shared": " - Paylaşılan"
+ },
+ "reviewHint": "Önce kopyalanan dosyaları inceleyin, ardından bir sonraki adımda içe aktarmayı onaylayın.",
+ "reviewLabel": "Bu beceri içe aktarılıyor",
+ "errors": {
+ "missingSkillFile": "Bu klasör henüz bir beceriye benzemiyor. Bir SKILL.md, Skill.md veya skill.md dosyasına ihtiyacı var.",
+ "symbolicLinks": "Bu klasör sembolik bağlantılar içeriyor. Bağlantılar yerine gerçek dosyaları içe aktarın.",
+ "tooManyFiles": "Bu beceri klasörü bir kerede içe aktarılamayacak kadar büyük. Fazladan dosyaları kaldırıp tekrar deneyin.",
+ "tooLarge": "Bu beceri klasörü güvenli şekilde içe aktarılamayacak kadar büyük. Büyük varlıkları azaltıp tekrar deneyin.",
+ "invalidFolderName": "Harfler, sayılar, noktalar, tireler veya alt çizgiler kullanarak daha basit bir hedef klasör adı seçin.",
+ "mustBeDirectory": "İçe aktarmak için tek bir dosya değil, bir klasör seçin.",
+ "reviewFailed": "İçe aktarma değişiklikleri incelenemedi",
+ "importFailed": "Beceri içe aktarılamadı"
+ }
+ },
+ "mcpPanel": {
+ "sort": {
+ "nameAsc": "Ad A→Z",
+ "nameDesc": "Ad Z→A",
+ "toolsDesc": "En çok araç"
+ },
+ "health": {
+ "title": "MCP Sağlık Durumu",
+ "checkingViaRuntime": "Kurulu MCP sunucuları {{runtime}} aracılığıyla kontrol ediliyor ...",
+ "lastChecked": "Son kontrol {{time}}",
+ "description": "Kurulu MCP bağlantısını doğrulamak için bu sayfadan tanılama çalıştırın.",
+ "checking": "Kontrol ediliyor...",
+ "checkStatus": "Durumu Kontrol Et"
+ },
+ "diagnostics": {
+ "title": "Çalışma Zamanı MCP Tanılaması",
+ "serversCount": "{{count}} sunucu",
+ "serversCount_one": "{{count}} sunucu",
+ "serversCount_other": "{{count}} sunucu",
+ "waiting": "Tanılama sonuçları bekleniyor...",
+ "disableReasons": {
+ "checkingRuntimeStatus": "Çalışma zamanı durumu kontrol ediliyor...",
+ "checkingRuntimeAvailability": "Çalışma zamanı kullanılabilirliği kontrol ediliyor...",
+ "runtimeFailedToStart": "Yapılandırılmış çalışma zamanı bulundu ancak başlatılamadı. Onarmak veya yeniden kurmak için Panoyu açın.",
+ "runtimeRequired": "Yapılandırılmış çalışma zamanı gereklidir. Panodan kurun veya onarın."
+ },
+ "serversCount_few": "{{count}} sunucu",
+ "serversCount_many": "{{count}} sunucu"
+ },
+ "searchPlaceholder": "MCP sunucularında ara...",
+ "runtime": {
+ "notAvailable": "{{runtime}} kullanılamıyor",
+ "notInstalled": "{{runtime}} kurulu değil",
+ "requiredDescription": "MCP sağlık kontrolleri {{runtime}} gerektirir. Kurmak veya onarmak için Panoya gidin."
+ },
+ "empty": {
+ "searchTitle": "Sunucu bulunamadı",
+ "title": "Kullanılabilir MCP sunucusu yok",
+ "searchDescription": "Farklı bir arama terimi deneyin",
+ "description": "Yeni sunucular için daha sonra tekrar kontrol edin"
+ },
+ "loadMore": "Daha fazla yükle"
+ },
+ "apiKeys": {
+ "description": "MCP sunucularını kurarken otomatik doldurmak için API anahtarlarını güvenli şekilde saklayın.",
+ "storage": {
+ "osKeychain": "Anahtarlar {{backend}} aracılığıyla şifrelenir ve kısıtlı dosya izinleriyle (yalnızca sahip) saklanır.",
+ "localEncryption": "İşletim sistemi anahtarlığı kullanılamıyor - anahtarlar AES-256 ile yerel olarak şifrelenir. Daha güçlü koruma için bir anahtarlık hizmeti kurun (gnome-keyring, kwallet)."
+ },
+ "actions": {
+ "add": "API Anahtarı Ekle",
+ "addFirst": "İlk anahtarınızı ekleyin",
+ "edit": "Düzenle",
+ "copied": "Kopyalandı!",
+ "copyEnvVarName": "Ortam değişkeni adını kopyala",
+ "confirmDelete": "Onaylamak için tekrar tıklayın",
+ "delete": "Sil"
+ },
+ "empty": {
+ "title": "Kaydedilmiş API anahtarı yok",
+ "description": "MCP sunucularını kurarken ortam değişkenlerini otomatik doldurmak için anahtarlar ekleyin."
+ },
+ "form": {
+ "addTitle": "API Anahtarı Ekle",
+ "editTitle": "API Anahtarını Düzenle",
+ "addDescription": "MCP sunucu kurulumlarında otomatik doldurmak için bir API anahtarı saklayın.",
+ "editDescription": "Anahtar ayrıntılarını güncelleyin. Değeri yeniden girmeniz gerekir.",
+ "keychainUnavailable": "İşletim sistemi anahtarlığı kullanılamıyor - anahtarlar AES-256 ile yerel olarak şifrelenir. İşletim sistemi düzeyinde koruma için gnome-keyring kurun.",
+ "name": "Ad",
+ "namePlaceholder": "ör. OpenAI Production",
+ "environmentVariableName": "Ortam Değişkeni Adı",
+ "envVarPlaceholder": "ör. OPENAI_API_KEY",
+ "value": "Değer",
+ "reenterValue": "Anahtar değerini yeniden girin",
+ "valuePlaceholder": "sk-...",
+ "scope": "Kapsam",
+ "userScopeLabel": "Kullanıcı (genel)",
+ "projectScopeLabel": "Proje: {{project}}",
+ "projectUnavailable": "Proje kullanılamıyor",
+ "boundTo": "{{path}} öğesine bağlı",
+ "cancel": "İptal",
+ "saving": "Kaydediliyor...",
+ "update": "Güncelle",
+ "save": "Kaydet",
+ "errors": {
+ "invalidEnvVarFormat": "Harf, rakam, alt çizgi kullanın. Bir harf veya alt çizgiyle başlamalıdır.",
+ "nameRequired": "Ad gereklidir",
+ "envVarRequired": "Ortam değişkeni adı gereklidir",
+ "invalidEnvVar": "Geçersiz ortam değişkeni adı",
+ "valueRequired": "Anahtar değeri gereklidir",
+ "projectScopeRequiresProject": "Proje kapsamlı API anahtarları etkin bir proje gerektirir",
+ "saveFailed": "Kaydedilemedi"
+ }
+ }
+ },
+ "skillReview": {
+ "title": "Beceri değişikliklerini incele",
+ "description": "{{reviewLabel}} önce dosya sistemi değişikliklerini önizler. Aşağıda onaylayana kadar hiçbir şey yazılmaz.",
+ "noPreview": "Önizleme yok.",
+ "confirmPromptPrefix": "Aşağıdaki farkı inceleyin, ardından şunu kullanın:",
+ "confirmPromptSuffix": "bu değişiklikleri uygulamak için.",
+ "noChanges": "Henüz dosya değişikliği algılanmadı.",
+ "binaryBadge": "ikili",
+ "binaryPreviewHidden": "İkili dosya önizlemesi gösterilmez. Dosya olduğu gibi kopyalanacak.",
+ "summary": {
+ "fileChanges": "{{count}} dosya değişikliği",
+ "fileChanges_one": "{{count}} dosya değişikliği",
+ "fileChanges_other": "{{count}} dosya değişikliği",
+ "new": "{{count}} yeni",
+ "updated": "{{count}} güncellendi",
+ "removed": "{{count}} kaldırıldı",
+ "binary": "{{count}} ikili",
+ "fileChanges_few": "{{count}} dosya değişikliği",
+ "fileChanges_many": "{{count}} dosya değişikliği"
+ }
+ },
+ "mcpCard": {
+ "toolsCount": "{{count}} araç",
+ "toolsCount_one": "{{count}} araç",
+ "toolsCount_other": "{{count}} araç",
+ "envCount": "{{count}} ortam değişkeni",
+ "envCount_one": "{{count}} ortam değişkeni",
+ "envCount_other": "{{count}} ortam değişkeni",
+ "auth": "Kimlik doğrulama",
+ "byAuthor": "yazan: {{author}}",
+ "hosting": {
+ "remote": "Uzak",
+ "local": "Yerel",
+ "both": "Her ikisi"
+ },
+ "toolsCount_few": "{{count}} araç",
+ "toolsCount_many": "{{count}} araç",
+ "envCount_few": "{{count}} ortam değişkeni",
+ "envCount_many": "{{count}} ortam değişkeni",
+ "repository": "Depo",
+ "website": "Web sitesi"
+ },
+ "installButton": {
+ "installing": "Kuruluyor...",
+ "removing": "Kaldırılıyor...",
+ "done": "Bitti",
+ "retry": "Yeniden dene",
+ "uninstall": "Kaldır",
+ "install": "Kur"
+ },
+ "pluginCard": {
+ "official": "Resmi"
+ }
+}
diff --git a/src/features/localization/renderer/locales/tr/report.json b/src/features/localization/renderer/locales/tr/report.json
new file mode 100644
index 00000000..0dfbd208
--- /dev/null
+++ b/src/features/localization/renderer/locales/tr/report.json
@@ -0,0 +1,217 @@
+{
+ "cost": {
+ "breakdownTitle": "Maliyet Dökümü (1M token başına)",
+ "cacheRead": "Önbellek Okuma",
+ "cacheWrite": "Önbellek Yazma",
+ "cost": "Maliyet",
+ "input": "Girdi",
+ "noCommits": "commit yok",
+ "noLinesChanged": "değişen satır yok",
+ "output": "Çıktı",
+ "parent": "Üst: {{cost}}",
+ "parentCost": "Üst Maliyet",
+ "perCommit": "Commit Başına",
+ "perCommitFormula": "toplam maliyet ÷ {{count}} commit",
+ "perCommitFormula_few": "toplam maliyet ÷ {{count}} commit",
+ "perCommitFormula_many": "toplam maliyet ÷ {{count}} commit",
+ "perCommitFormula_one": "toplam maliyet ÷ {{count}} commit",
+ "perCommitFormula_other": "toplam maliyet ÷ {{count}} commit",
+ "perLineChanged": "Değişen Satır Başına",
+ "perLineFormula": "toplam maliyet ÷ {{count}} satır",
+ "perLineFormula_few": "toplam maliyet ÷ {{count}} satır",
+ "perLineFormula_many": "toplam maliyet ÷ {{count}} satır",
+ "perLineFormula_one": "toplam maliyet ÷ {{count}} satır",
+ "perLineFormula_other": "toplam maliyet ÷ {{count}} satır",
+ "subagent": "Alt agent: {{cost}}",
+ "subagentCost": "Alt Agent Maliyeti",
+ "title": "Maliyet Analizi",
+ "total": "Toplam"
+ },
+ "insights": {
+ "agent": "agent",
+ "agent_few": "agent",
+ "agent_many": "agent",
+ "agent_one": "agent",
+ "agent_other": "agent",
+ "agentTree": "Agent Ağacı ({{count}} {{unit}})",
+ "background": "(arka plan)",
+ "bashCommands": "Bash Komutları",
+ "outOfScopeFindings": "Kapsam Dışı Bulgular ({{count}})",
+ "questionsAsked": "Sorulan Sorular ({{count}})",
+ "repeated": "Tekrarlanan",
+ "skillsInvoked": "Çağrılan Beceriler ({{count}})",
+ "taskDispatches": "Görev Sevkleri ({{count}})",
+ "tasksCreated": "Oluşturulan Görevler ({{count}})",
+ "teamMode": "Ekip Modu",
+ "teams": "Ekipler: {{teams}}",
+ "title": "Oturum İçgörüleri",
+ "total": "Toplam",
+ "unique": "Benzersiz",
+ "skillsInvoked_few": "Çağrılan Beceriler ({{count}})",
+ "skillsInvoked_many": "Çağrılan Beceriler ({{count}})",
+ "skillsInvoked_one": "Çağrılan Beceriler ({{count}})",
+ "skillsInvoked_other": "Çağrılan Beceriler ({{count}})",
+ "taskDispatches_few": "Görev Sevkleri ({{count}})",
+ "taskDispatches_many": "Görev Sevkleri ({{count}})",
+ "taskDispatches_one": "Görev Sevkleri ({{count}})",
+ "taskDispatches_other": "Görev Sevkleri ({{count}})",
+ "tasksCreated_few": "Oluşturulan Görevler ({{count}})",
+ "tasksCreated_many": "Oluşturulan Görevler ({{count}})",
+ "tasksCreated_one": "Oluşturulan Görevler ({{count}})",
+ "tasksCreated_other": "Oluşturulan Görevler ({{count}})",
+ "questionsAsked_few": "Sorulan Sorular ({{count}})",
+ "questionsAsked_many": "Sorulan Sorular ({{count}})",
+ "questionsAsked_one": "Sorulan Sorular ({{count}})",
+ "questionsAsked_other": "Sorulan Sorular ({{count}})",
+ "agentTree_few": "Agent Ağacı ({{count}} {{unit}})",
+ "agentTree_many": "Agent Ağacı ({{count}} {{unit}})",
+ "agentTree_one": "Agent Ağacı ({{count}} {{unit}})",
+ "agentTree_other": "Agent Ağacı ({{count}} {{unit}})",
+ "outOfScopeFindings_few": "Kapsam Dışı Bulgular ({{count}})",
+ "outOfScopeFindings_many": "Kapsam Dışı Bulgular ({{count}})",
+ "outOfScopeFindings_one": "Kapsam Dışı Bulgular ({{count}})",
+ "outOfScopeFindings_other": "Kapsam Dışı Bulgular ({{count}})",
+ "keyTakeaways": "Önemli Çıkarımlar"
+ },
+ "quality": {
+ "chars": "karakter",
+ "corrections": "Düzeltmeler",
+ "failed": "başarısız",
+ "fileReadRedundancy": "Dosya Okuma Fazlalığı",
+ "firstMessage": "İlk Mesaj",
+ "firstRun": "İlk Çalıştırma",
+ "frictionRate": "Sürtünme Oranı",
+ "lastRun": "Son Çalıştırma",
+ "messagesBeforeWork": "İşten Önceki Mesajlar",
+ "passed": "başarılı",
+ "promptQuality": "Komut İstemi Kalitesi",
+ "readsPerUniqueFile": "Okuma/Benzersiz Dosya",
+ "snapshot": "anlık görüntü",
+ "snapshot_few": "anlık görüntü",
+ "snapshot_many": "anlık görüntü",
+ "snapshot_one": "anlık görüntü",
+ "snapshot_other": "anlık görüntü",
+ "startupOverhead": "Başlangıç Yükü",
+ "testProgression": "Test İlerlemesi",
+ "title": "Kalite Sinyalleri",
+ "tokensBeforeWork": "İşten Önceki Token'lar",
+ "totalReads": "Toplam Okuma",
+ "uniqueFiles": "Benzersiz Dosyalar",
+ "userMessages": "Kullanıcı Mesajları",
+ "percentOfTotal": "Toplamın %'si"
+ },
+ "tokens": {
+ "apiCalls": "API Çağrıları",
+ "cacheCreate": "Önbellek Oluşturma",
+ "cacheEfficiency": "Önbellek Verimliliği",
+ "cacheRead": "Önbellek Okuma",
+ "cacheReadPct": "Önbellek Okuma %",
+ "coldStart": "Soğuk Başlangıç",
+ "cost": "Maliyet",
+ "input": "Girdi",
+ "model": "Model",
+ "no": "Hayır",
+ "output": "Çıktı",
+ "readWriteRatio": "O/Y Oranı",
+ "title": "Token Kullanımı",
+ "total": "Toplam",
+ "yes": "Evet"
+ },
+ "subagents": {
+ "title": "Alt agent'lar",
+ "metrics": {
+ "count": "Sayı",
+ "totalTokens": "Toplam Token",
+ "totalDuration": "Toplam Süre",
+ "totalCost": "Toplam Maliyet"
+ },
+ "table": {
+ "description": "Açıklama",
+ "type": "Tür",
+ "tokens": "Token",
+ "duration": "Süre",
+ "cost": "Maliyet"
+ }
+ },
+ "overview": {
+ "title": "Genel Bakış",
+ "yes": "Evet",
+ "no": "Hayır",
+ "metrics": {
+ "duration": "Süre",
+ "messages": "Mesajlar",
+ "contextUsage": "Bağlam Kullanımı",
+ "compactions": "Sıkıştırmalar",
+ "branch": "Dal",
+ "subagents": "Alt agent'lar",
+ "project": "Proje",
+ "sessionId": "Oturum Kimliği"
+ }
+ },
+ "timeline": {
+ "title": "Zaman Çizelgesi ve Etkinlik",
+ "idleAnalysis": "Boşta Kalma Analizi",
+ "metrics": {
+ "idleGaps": "Boşta Kalma Boşlukları",
+ "totalIdle": "Toplam Boşta Kalma",
+ "activeTime": "Etkin Süre",
+ "idlePercent": "Boşta %"
+ },
+ "modelSwitches": "Model Geçişleri ({{count}})",
+ "modelSwitches_one": "Model Geçişleri ({{count}})",
+ "modelSwitches_other": "Model Geçişleri ({{count}})",
+ "messageNumber": "mesaj #{{number}}",
+ "keyEvents": "Önemli Olaylar",
+ "modelSwitches_few": "Model Geçişleri ({{count}})",
+ "modelSwitches_many": "Model Geçişleri ({{count}})"
+ },
+ "tools": {
+ "title": "Araç Kullanımı",
+ "summary": "{{toolCount}} araç genelinde toplam {{formattedCount}} çağrı",
+ "columns": {
+ "tool": "Araç",
+ "calls": "Çağrılar",
+ "errors": "Hatalar",
+ "successPercent": "Başarı %",
+ "health": "Sağlık"
+ }
+ },
+ "git": {
+ "title": "Git Etkinliği",
+ "commits": "Commit'ler",
+ "pushes": "Push'lar",
+ "linesAdded": "Eklenen Satırlar",
+ "linesRemoved": "Kaldırılan Satırlar",
+ "branchesCreated": "Oluşturulan Dallar"
+ },
+ "friction": {
+ "title": "Sürtünme Sinyalleri",
+ "rate": "Sürtünme Oranı: %{{rate}}",
+ "correctionsCount": "{{count}} düzeltme",
+ "correctionsCount_one": "{{count}} düzeltme",
+ "corrections": "Düzeltmeler",
+ "thrashingSignals": "Çırpınma Sinyalleri",
+ "repeatedBashCommands": "Tekrarlanan Bash Komutları",
+ "reworkedFiles": "Yeniden İşlenen Dosyalar (3+ düzenleme)",
+ "correctionsCount_few": "{{count}} düzeltme",
+ "correctionsCount_many": "{{count}} düzeltme",
+ "correctionsCount_other": "{{count}} düzeltme"
+ },
+ "errors": {
+ "title": "Hatalar",
+ "permissionDenied": "İzin Reddedildi",
+ "messageIndex": "mesaj #{{index}}",
+ "input": "Girdi",
+ "error": "Hata",
+ "count": "{{count}} hata",
+ "count_one": "{{count}} hata",
+ "permissionDenialCount": "{{count}} izin reddi",
+ "permissionDenialCount_one": "{{count}} izin reddi",
+ "count_few": "{{count}} hata",
+ "count_many": "{{count}} hata",
+ "count_other": "{{count}} hata",
+ "permissionDenialCount_few": "{{count}} izin reddi",
+ "permissionDenialCount_many": "{{count}} izin reddi",
+ "permissionDenialCount_other": "{{count}} izin reddi"
+ }
+}
diff --git a/src/features/localization/renderer/locales/tr/settings.json b/src/features/localization/renderer/locales/tr/settings.json
new file mode 100644
index 00000000..ecee68f2
--- /dev/null
+++ b/src/features/localization/renderer/locales/tr/settings.json
@@ -0,0 +1,994 @@
+{
+ "tabs": {
+ "advanced": {
+ "description": "İleri düzey kullanıcı seçenekleri: yapılandırmayı dışa/içe aktarma, varsayılanlara sıfırlama ve ham yapılandırma düzenleme.",
+ "label": "Gelişmiş"
+ },
+ "general": {
+ "description": "Tema, dil, görüntü yoğunluğu ve başlangıç davranışı gibi temel uygulama tercihleri.",
+ "label": "Genel"
+ },
+ "infoAriaLabel": "{{label}} nedir?",
+ "notifications": {
+ "description": "Agent etkinliği, görev tamamlamaları ve hatalar hakkında ne zaman ve nasıl bilgilendirileceğinizi kontrol edin.",
+ "label": "Bildirimler"
+ }
+ },
+ "view": {
+ "description": "Uygulama tercihlerinizi yönetin",
+ "loading": "Ayarlar yükleniyor...",
+ "title": "Ayarlar"
+ },
+ "runtimeProvider": {
+ "actions": {
+ "cancel": "İptal",
+ "test": "Test et"
+ },
+ "defaults": {
+ "allProjects": "Tüm projeler",
+ "allProjectsHint": "Testler {{project}} kullanır. Bir projenin geçersiz kılması olmadıkça varsayılan geçerlidir.",
+ "loadingContexts": "Bağlamlar yükleniyor...",
+ "projectHint": "Kaydetme yalnızca {{project}} öğesini geçersiz kılar.",
+ "projectOverrideContext": "Proje geçersiz kılma bağlamı",
+ "scopeDescriptionAllProjects": "Kendi OpenCode geçersiz kılması olmayan her proje için varsayılan.",
+ "scopeDescriptionProject": "Yalnızca seçili projeyi geçersiz kıl. Çalışan ekipler değiştirilmez.",
+ "selectProjectContext": "Proje bağlamını seç",
+ "selectProjectHint": "Yerel modelleri test etmeden veya varsayılanları kaydetmeden önce bir proje seçin.",
+ "selectValidationContext": "Doğrulama bağlamını seç",
+ "setAllProjectsDefault": "Tüm projeler varsayılanını ayarla",
+ "setProjectDefault": "Proje varsayılanını ayarla",
+ "thisProject": "Bu proje",
+ "title": "OpenCode varsayılanları",
+ "validationContext": "Doğrulama bağlamı"
+ },
+ "diagnostics": {
+ "copied": "Tanılama kopyalandı",
+ "copiedShort": "Kopyalandı",
+ "copy": "Tanılamayı kopyala",
+ "hints": "İpuçları",
+ "likelyCause": "Olası neden:",
+ "windowsSymlinkAdminHint": "Windows: Agent Teams AI'yi Yönetici olarak çalıştırın"
+ },
+ "models": {
+ "alreadyDefault": "Bu zaten seçili OpenCode varsayılanı.",
+ "empty": "Model bulunamadı.",
+ "emptyFree": "Ücretsiz model bulunamadı.",
+ "emptyRecommended": "Önerilen model bulunamadı.",
+ "emptyRecommendedFree": "Önerilen ücretsiz model bulunamadı.",
+ "freeOnly": "Yalnızca ücretsiz",
+ "launchableDescription": "OpenCode yapılandırmasından bilinen rotalar, ücretsiz yerleşik modeller ve geçerli varsayılan. Yerel rotalar, ekip başlatmaları için hazır olmadan önce başarılı bir test gerektirir.",
+ "launchableTitle": "OpenCode model rotaları",
+ "loadingRoutes": "OpenCode model rotaları yükleniyor...",
+ "noRoutesMatch": "\"{{query}}\" ile eşleşen OpenCode model rotası yok.",
+ "noneReported": "Henüz OpenCode model rotası bildirilmedi. OpenCode'da yerel bir rota yapılandırın veya katalog sağlayıcılarını incelemek için Sağlayıcılar sekmesini kullanın.",
+ "recommendedOnly": "Yalnızca önerilen",
+ "searchPlaceholder": "Modellerde ara",
+ "selectProjectBeforeTesting": "Modelleri test etmeden önce bir proje bağlamı seçin.",
+ "selectProjectBeforeTestingDefaults": "OpenCode varsayılanlarını test etmeden veya kaydetmeden önce bir proje bağlamı seçin.",
+ "testInProgress": "Model testi zaten çalışıyor.",
+ "useInTeamPicker": "Ekip seçicisi için kaydet",
+ "validationContextRequired": "Test ve Varsayılan olarak ayarla seçeneklerini etkinleştirmek için yukarıdan bir doğrulama bağlamı seçin. Ekip seçicisi için kaydetmek yalnızca yeni ekipler için rotayı saklar.",
+ "actionsUnavailable": "Eylemler geçici olarak kullanılamıyor.",
+ "defaultSaveInProgress": "OpenCode varsayılanı kaydediliyor.",
+ "routeUnavailableAuth": "Bu model kullanılabilmeden önce bu sağlayıcı kimlik doğrulama gerektirir.",
+ "routeUnavailableFailed": "Bu model rotası son yürütme testinde başarısız oldu.",
+ "routeUnavailableGeneric": "Bu model rotası şu anda kullanılamıyor.",
+ "routeUnavailableUnknown": "Bu model geçerli OpenCode varsayılanı, ancak henüz canlı katalogda mevcut değil."
+ },
+ "providers": {
+ "catalog": "OpenCode sağlayıcı kataloğu",
+ "countFallback": "OpenCode sağlayıcıları",
+ "description": "{{count}}. Bağlı ve önerilen sağlayıcılar önce gösterilir.",
+ "loadMore": "Daha fazla sağlayıcı yükle",
+ "loading": "OpenCode sağlayıcıları yükleniyor",
+ "noMatches": "Bu aramayla eşleşen sağlayıcı yok.",
+ "noneReported": "Yönetilen çalışma zamanı tarafından bildirilen OpenCode sağlayıcısı yok.",
+ "recommended": "Önerilen",
+ "refreshCatalog": "Kataloğu yenile",
+ "searchPlaceholder": "Sağlayıcılarda ara",
+ "description_few": "{{count}}. Bağlı ve önerilen sağlayıcılar önce gösterilir.",
+ "description_many": "{{count}}. Bağlı ve önerilen sağlayıcılar önce gösterilir.",
+ "description_one": "{{count}}. Bağlı ve önerilen sağlayıcılar önce gösterilir.",
+ "description_other": "{{count}}. Bağlı ve önerilen sağlayıcılar önce gösterilir."
+ },
+ "setup": {
+ "loading": "Sağlayıcı kurulumu yükleniyor..."
+ },
+ "summary": {
+ "defaultModel": "OpenCode varsayılanı: {{model}}",
+ "loading": "Yönetilen OpenCode çalışma zamanı, bağlı sağlayıcılar ve model varsayılanları yükleniyor...",
+ "source": "Kaynak: {{source}}",
+ "title": "OpenCode çalışma zamanı"
+ },
+ "tabs": {
+ "models": "Modeller",
+ "providers": "Sağlayıcılar"
+ },
+ "modelRoutes": {
+ "searchPlaceholder": "Model rotalarında ara"
+ },
+ "badges": {
+ "usedInTeamPicker": "Ekip seçicisi için kaydedildi",
+ "free": "ücretsiz",
+ "local": "yerel",
+ "configured": "yapılandırılmış",
+ "knownRoute": "bilinen rota",
+ "connected": "bağlı",
+ "verified": "doğrulanmış",
+ "needsTest": "test gerekiyor",
+ "failed": "başarısız",
+ "unknown": "bilinmiyor",
+ "default": "varsayılan"
+ },
+ "compatibleEndpoint": {
+ "baseUrlPlaceholder": "http://localhost:1234"
+ }
+ },
+ "general": {
+ "agentLanguage": {
+ "description": "Agent iletişimi için dil",
+ "descriptionWithDetected": "Agent iletişimi için dil (algılanan: {{detected}})",
+ "emptyMessage": "Dil bulunamadı.",
+ "label": "Dil",
+ "searchPlaceholder": "Dil ara...",
+ "selectPlaceholder": "Dil seç...",
+ "title": "Agent Dili"
+ },
+ "appLanguage": {
+ "description": "Uygulama arayüzü için dil.",
+ "label": "Dil",
+ "title": "Uygulama Dili"
+ },
+ "appearance": {
+ "autoExpandAIGroups": {
+ "description": "Bir transkript açarken veya yeni bir mesaj alırken her yanıt turunu otomatik olarak genişlet",
+ "label": "AI yanıtlarını varsayılan olarak genişlet"
+ },
+ "nativeTitleBar": {
+ "description": "Özel başlık çubuğu yerine varsayılan sistem pencere çerçevesini kullan",
+ "label": "Yerel başlık çubuğunu kullan",
+ "restartConfirm": {
+ "confirmLabel": "Yeniden başlat",
+ "message": "Başlık çubuğu değişikliğini uygulamak için uygulamanın yeniden başlatılması gerekiyor. Şimdi yeniden başlatılsın mı?",
+ "title": "Yeniden başlatma gerekli"
+ }
+ },
+ "theme": {
+ "description": "Tercih ettiğiniz renk temasını seçin",
+ "label": "Tema",
+ "options": {
+ "dark": "Koyu",
+ "light": "Açık",
+ "system": "Sistem"
+ }
+ },
+ "title": "Görünüm"
+ },
+ "browserAccess": {
+ "serverMode": {
+ "description": "Arayüze bir tarayıcıdan erişmek veya iframe'lere yerleştirmek için bir HTTP sunucusu başlat",
+ "label": "Sunucu modunu etkinleştir"
+ },
+ "title": "Tarayıcı Erişimi"
+ },
+ "localClaudeRoot": {
+ "actions": {
+ "selectFolder": "Klasör Seç",
+ "selectFolderManually": "Klasörü Manuel Seç",
+ "useAutoDetect": "Otomatik Algılamayı Kullan",
+ "useFolder": "Klasörü Kullan",
+ "usePath": "Yolu Kullan",
+ "useThisPath": "Bu Yolu Kullan",
+ "useWsl": "Linux/WSL mi kullanıyorsunuz?"
+ },
+ "confirm": {
+ "noProjectsDir": {
+ "message": "Bu klasör bir \"projects\" dizini içermiyor. Yine de devam edilsin mi?",
+ "title": "projects dizini bulunamadı"
+ },
+ "notClaudeDir": {
+ "message": "Bu klasör \".claude\" değil, \"{{folderName}}\" olarak adlandırılmış. Yine de devam edilsin mi?",
+ "title": "Seçili klasör .claude değil"
+ },
+ "noWslPaths": {
+ "message": "Claude verisi olan WSL dağıtımları otomatik olarak bulunamadı. Klasör manuel olarak seçilsin mi?",
+ "title": "WSL Claude yolu bulunamadı"
+ },
+ "wslNoProjectsDir": {
+ "message": "\"{{path}}\" bir \"projects\" dizini içermiyor. Yine de devam edilsin mi?",
+ "title": "WSL yolunda projects dizini eksik"
+ }
+ },
+ "current": {
+ "autoDetected": "Otomatik algılandı: {{path}}",
+ "autoDetectedPath": "Otomatik algılanan yol kullanılıyor",
+ "customPath": "Özel yol kullanılıyor",
+ "label": "Geçerli Yerel Kök"
+ },
+ "description": "Hangi yerel klasörün Claude veri kökünüz olarak değerlendirileceğini seçin",
+ "errors": {
+ "detectWslFailed": "WSL Claude kök yolları algılanamadı",
+ "loadFailed": "Yerel Claude kök ayarları yüklenemedi",
+ "updateFailed": "Claude kökü güncellenemedi"
+ },
+ "title": "Yerel Claude Kökü",
+ "wslModal": {
+ "closeAriaLabel": "WSL yol penceresini kapat",
+ "description": "Algılanan WSL dağıtımları ve Claude kök adayları",
+ "noProjectsDir": "projects dizini algılanmadı",
+ "title": "WSL Claude Kökünü Seç"
+ }
+ },
+ "privacy": {
+ "telemetry": {
+ "description": "Anonim çökme ve performans verisi göndererek uygulamanın iyileştirilmesine yardımcı olun",
+ "label": "Çökme raporları gönder"
+ },
+ "title": "Gizlilik"
+ },
+ "server": {
+ "runningOn": "Çalıştığı yer",
+ "standaloneModeDescription": "Bağımsız modda çalışıyor. HTTP sunucusu her zaman etkindir. Sistem bildirimleri kullanılamaz - bildirim tetikleyicileri yalnızca uygulama içinde günlüğe kaydedilir.",
+ "title": "Sunucu"
+ },
+ "startup": {
+ "launchAtLogin": {
+ "description": "Oturum açtığınızda uygulamayı otomatik olarak başlat",
+ "label": "Oturum açıldığında başlat"
+ },
+ "showDockIcon": {
+ "description": "Uygulama simgesini dock'ta göster (macOS)",
+ "label": "Dock simgesini göster"
+ },
+ "title": "Başlangıç"
+ }
+ },
+ "notifications": {
+ "dev": {
+ "descriptionPrefix": "Bildirimler geliştirme modunda çalışmayabilir. macOS, uygulamayı üretim uygulama adı yerine \"Electron\" olarak tanımlar (paket kimliği",
+ "descriptionSuffix": "). İzinleri doğrulamak için Sistem Ayarları > Bildirimler > Electron yolunu kontrol edin.",
+ "title": "Geliştirme Modu"
+ },
+ "ignoredRepositories": {
+ "description": "Bu depolardan gelen bildirimler yok sayılacak",
+ "empty": "Yok sayılan depo yok",
+ "selectPlaceholder": "Yok sayılacak depoyu seç...",
+ "title": "Yok Sayılan Depolar"
+ },
+ "settings": {
+ "enabled": {
+ "description": "Hatalar ve olaylar için sistem bildirimlerini göster",
+ "label": "Sistem Bildirimlerini Etkinleştir"
+ },
+ "sound": {
+ "description": "Bildirimler göründüğünde bir ses çal",
+ "label": "Ses çal"
+ },
+ "subagentErrors": {
+ "description": "Alt agent oturumlarındaki hataları algıla ve bildir",
+ "label": "Alt agent hatalarını dahil et"
+ },
+ "title": "Bildirim Ayarları"
+ },
+ "snooze": {
+ "clear": "Ertelemeyi Temizle",
+ "description": "Bildirimleri geçici olarak duraklat",
+ "descriptionWithTime": "{{time}} saatine kadar ertelendi",
+ "label": "Bildirimleri ertele",
+ "options": {
+ "15": "15 dakika",
+ "30": "30 dakika",
+ "60": "1 saat",
+ "120": "2 saat",
+ "240": "4 saat",
+ "-1": "Yarına kadar"
+ },
+ "selectDuration": "Süre seç..."
+ },
+ "taskCompletion": {
+ "description": "Claude görevleri bitirdiğinde yerel işletim sistemi bildirimleri alın - sesler, başlıklar ve Dock/görev çubuğu rozetleri. macOS, Linux ve Windows'ta çalışır.",
+ "installPlugin": "claude-notifications-go eklentisini kur",
+ "title": "Görev Tamamlama Bildirimleri"
+ },
+ "team": {
+ "allTasksCompleted": {
+ "description": "Bir ekipteki her görev tamamlandı durumuna ulaştığında bildir",
+ "label": "Tüm görevler tamamlandı"
+ },
+ "autoResumeOnRateLimit": {
+ "description": "Claude bir sıfırlama zamanı bildirdiğinde, limit sıfırlandıktan sonra ekip liderine bir hatırlatma planla",
+ "label": "Hız limitinden sonra otomatik devam et"
+ },
+ "clarifications": {
+ "description": "Bir görev girdinize ihtiyaç duyduğunda yerel işletim sistemi bildirimleri göster",
+ "label": "Görev açıklaması bildirimleri"
+ },
+ "crossTeamMessage": {
+ "description": "Başka bir ekipten bir mesaj geldiğinde bildir",
+ "label": "Ekipler arası mesaj bildirimleri"
+ },
+ "leadInbox": {
+ "description": "Takım arkadaşları ekip liderine mesaj gönderdiğinde bildir",
+ "label": "Lider gelen kutusu bildirimleri"
+ },
+ "statusChange": {
+ "description": "Bir görevin durumu değiştiğinde yerel işletim sistemi bildirimleri göster",
+ "label": "Görev durumu değişikliği bildirimleri",
+ "onlySolo": {
+ "description": "Yalnızca ekipte takım arkadaşı olmadığında bildir",
+ "label": "Yalnızca Tekli modda"
+ },
+ "statuses": {
+ "description": "Hangi hedef durumların bildirim tetiklediği",
+ "label": "Bu durumlarda bildir",
+ "options": {
+ "approved": "Onaylandı",
+ "completed": "Tamamlandı",
+ "deleted": "Silindi",
+ "in_progress": "Başladı",
+ "needsFix": "Düzeltme Gerekir",
+ "pending": "Beklemede",
+ "review": "İnceleme"
+ }
+ }
+ },
+ "taskComments": {
+ "description": "Agent'lar görevlere yorum yaptığında yerel işletim sistemi bildirimleri göster",
+ "label": "Görev yorumu bildirimleri"
+ },
+ "taskCreated": {
+ "description": "Yeni bir görev oluşturulduğunda yerel işletim sistemi bildirimleri göster",
+ "label": "Görev oluşturuldu bildirimleri"
+ },
+ "teamLaunched": {
+ "description": "Bir ekip başlatmayı bitirip hazır olduğunda bildir",
+ "label": "Ekip başlatıldı bildirimleri"
+ },
+ "title": "Ekip Bildirimleri",
+ "toolApproval": {
+ "description": "Uygulama odakta değilken bir araç onayınızı (İzin Ver/Reddet) gerektirdiğinde bildir",
+ "label": "Araç onayı bildirimleri"
+ },
+ "userInbox": {
+ "description": "Takım arkadaşları size mesaj gönderdiğinde bildir",
+ "label": "Kullanıcı gelen kutusu bildirimleri"
+ }
+ },
+ "test": {
+ "action": "Test Gönder",
+ "description": "Teslimatı doğrulamak için bir test bildirimi gönder",
+ "failedToSend": "Test bildirimi gönderilemedi",
+ "label": "Test bildirimi",
+ "sending": "Gönderiliyor...",
+ "sent": "Gönderildi!",
+ "unknownError": "Bilinmeyen hata"
+ }
+ },
+ "advanced": {
+ "about": {
+ "appIconAlt": "Uygulama simgesi",
+ "description": "Paralel olarak özerk çalışan, ekipler arası iletişim kuran ve kanban panosunda görevleri yöneten yapay zeka agent ekipleri oluşturun - yerleşik kod incelemesi, canlı süreç izleme ve tam araç görünürlüğü ile.",
+ "standalone": "Bağımsız",
+ "title": "Hakkında",
+ "version": "Sürüm {{version}}"
+ },
+ "configuration": {
+ "editConfig": "Yapılandırmayı Düzenle",
+ "exportConfig": "Yapılandırmayı Dışa Aktar",
+ "importConfig": "Yapılandırmayı İçe Aktar",
+ "openInEditor": "Düzenleyicide Aç",
+ "resetToDefaults": "Varsayılanlara Sıfırla",
+ "title": "Yapılandırma"
+ },
+ "updates": {
+ "available": "v{{version}} mevcut",
+ "check": "Güncellemeleri Kontrol Et",
+ "checking": "Kontrol ediliyor...",
+ "ready": "Güncelleme hazır",
+ "unknownVersion": "bilinmiyor",
+ "upToDate": "Güncel"
+ },
+ "appName": "Agent Teams AI"
+ },
+ "configEditor": {
+ "errors": {
+ "loadFailed": "Yapılandırma yüklenemedi",
+ "saveFailed": "Yapılandırma kaydedilemedi"
+ },
+ "footer": {
+ "autoSave": "Değişiklikler düzenlemeden sonra otomatik kaydedilir",
+ "toClose": "kapatmak için",
+ "escapeKey": "Esc"
+ },
+ "loading": "Yapılandırma yükleniyor...",
+ "status": {
+ "invalidJson": "Geçersiz JSON",
+ "saveFailed": "Kaydetme başarısız oldu",
+ "saved": "Kaydedildi",
+ "saving": "Kaydediliyor..."
+ },
+ "title": "Yapılandırmayı Düzenle"
+ },
+ "notificationTriggers": {
+ "add": {
+ "cancel": "İptal",
+ "submit": "Tetikleyici Ekle",
+ "title": "Özel Tetikleyici Ekle"
+ },
+ "builtin": {
+ "description": "Uygulamayla birlikte gelen varsayılan tetikleyiciler. Bunları etkinleştirebilir veya devre dışı bırakabilir ve kalıplarını özelleştirebilirsiniz.",
+ "title": "Yerleşik Tetikleyiciler"
+ },
+ "card": {
+ "builtinBadge": "Yerleşik",
+ "collapseAriaLabel": "Daralt",
+ "deleteAriaLabel": "Tetikleyiciyi sil",
+ "editNameAriaLabel": "Adı düzenle",
+ "expandAriaLabel": "Genişlet"
+ },
+ "color": {
+ "customHexTitle": "Özel hex renk",
+ "invalidHex": "Geçersiz hex"
+ },
+ "configuration": {
+ "alertIfGreaterThan": "Şundan büyükse uyar:",
+ "emptyPatternHint": "Tüm içerikle eşleştirmek için boş bırakın. JavaScript regex sözdizimi kullanır.",
+ "errorStatusDescription": "Bir araç yürütmesi bir hata bildirdiğinde tetiklenir (is_error: true).",
+ "tokensUnit": "token",
+ "matchPatternPlaceholder": "ör. error|failed|exception"
+ },
+ "custom": {
+ "description": "Belirli kalıplar veya araç çıktıları için bildirim almak üzere kendi tetikleyicilerinizi oluşturun.",
+ "empty": "Henüz özel tetikleyici yapılandırılmadı.",
+ "title": "Özel Tetikleyiciler"
+ },
+ "errors": {
+ "invalidRegexPattern": "Geçersiz regex kalıbı"
+ },
+ "fields": {
+ "contentType": "İçerik Türü",
+ "matchField": "Eşleşme Alanı",
+ "matchPattern": "Eşleşme Kalıbı (Regex)",
+ "scopeToolName": "Kapsam / Araç Adı",
+ "scopeToolNameOptional": "Kapsam / Araç Adı (isteğe bağlı)",
+ "threshold": "Eşik",
+ "tokenType": "Token Türü",
+ "triggerNamePlaceholder": "ör. Derleme Hatası Uyarısı",
+ "triggerNameRequired": "Tetikleyici Adı *"
+ },
+ "ignorePatterns": {
+ "hint": "Eklemek için Enter'a basın. Herhangi bir kalıp eşleşirse bildirim atlanır.",
+ "placeholder": "Yok sayma regex'i ekle...",
+ "removeAriaLabel": "Yok sayma kalıbını kaldır",
+ "summary": "Gelişmiş: Hariç Tutma Kuralları",
+ "title": "Yok Sayma Kalıpları (eşleşirse atla)"
+ },
+ "options": {
+ "contentTypes": {
+ "text": "Metin Çıktısı",
+ "thinking": "Düşünme",
+ "tool_result": "Araç Sonucu",
+ "tool_use": "Araç Kullanımı"
+ },
+ "matchFields": {
+ "args": "Argümanlar",
+ "command": "Komut",
+ "content": "İçerik",
+ "description": "Açıklama",
+ "file_path": "Dosya Yolu",
+ "fullInput": "Tam Girdi (JSON)",
+ "glob": "Glob Filtresi",
+ "new_string": "Yeni Dize",
+ "old_string": "Eski Dize",
+ "path": "Yol",
+ "pattern": "Kalıp",
+ "prompt": "Komut İstemi",
+ "query": "Sorgu",
+ "skill": "Beceri Adı",
+ "subagent_type": "Alt Agent Türü",
+ "text": "Metin İçeriği",
+ "thinking": "Düşünme İçeriği",
+ "url": "URL"
+ },
+ "modes": {
+ "content_match": "İçerik Kalıbı",
+ "error_status": "Yürütme Hatası",
+ "token_threshold": "Yüksek Token Kullanımı"
+ },
+ "tokenTypes": {
+ "input": "Girdi Token'ları",
+ "output": "Çıktı Token'ları",
+ "total": "Toplam Token"
+ },
+ "toolNames": {
+ "anyTool": "Herhangi Bir Araç"
+ }
+ },
+ "preview": {
+ "defaultTestTriggerName": "Test Tetikleyicisi",
+ "detectedSuffix": "hata algılanmış olurdu",
+ "more": "...ve {{count}} tane daha",
+ "more_few": "...ve {{count}} tane daha",
+ "more_many": "...ve {{count}} tane daha",
+ "more_one": "...ve {{count}} tane daha",
+ "more_other": "...ve {{count}} tane daha",
+ "testTrigger": "Tetikleyiciyi Test Et",
+ "testing": "Test ediliyor...",
+ "title": "Önizleme",
+ "truncatedWarning": "Arama erken durdu (zaman aşımı veya sayı limiti). Gerçek eşleşmeler daha yüksek olabilir.",
+ "viewSession": "Oturumu Görüntüle"
+ },
+ "repositoryScope": {
+ "empty": "Seçili depo yok - tetikleyici tüm depolara uygulanır",
+ "hint": "Depolar seçildiğinde, bu tetikleyici yalnızca o depolardaki hatalar için çalışır.",
+ "placeholder": "Eklenecek depoyu seç...",
+ "summary": "Gelişmiş: Depo Kapsamı",
+ "title": "Depolarla Sınırla (yalnızca seçili depolara uygulanır)"
+ },
+ "sections": {
+ "configuration": "Yapılandırma",
+ "dotColor": "Nokta Rengi",
+ "generalInfo": "Genel Bilgi",
+ "triggerCondition": "Tetikleme Koşulu"
+ }
+ },
+ "workspaceProfiles": {
+ "actions": {
+ "addProfile": "Profil Ekle",
+ "cancel": "İptal",
+ "deleteProfile": "Profili sil",
+ "editProfile": "Profili düzenle",
+ "save": "Kaydet"
+ },
+ "authMethods": {
+ "agent": "SSH Agent",
+ "auto": "Otomatik (SSH Yapılandırmasından)",
+ "password": "Parola",
+ "privateKey": "Özel Anahtar"
+ },
+ "deleteConfirm": {
+ "confirmLabel": "Sil",
+ "message": "\"{{name}}\" profilini silmek istediğinizden emin misiniz? Bu geri alınamaz.",
+ "title": "Profili Sil"
+ },
+ "description": "Hızlı yeniden bağlanma için SSH bağlantı profillerini kaydedin",
+ "empty": {
+ "description": "Hızlı bağlanmak için bir SSH profili ekleyin",
+ "title": "Kaydedilmiş profil yok"
+ },
+ "form": {
+ "authentication": "Kimlik Doğrulama",
+ "host": "Ana Bilgisayar",
+ "name": "Ad",
+ "passwordPrompt": "Bağlanırken parola istenecektir.",
+ "port": "Port",
+ "privateKeyPath": "Özel Anahtar Yolu",
+ "username": "Kullanıcı Adı",
+ "namePlaceholder": "Sunucum",
+ "hostPlaceholder": "ana bilgisayar adı veya IP",
+ "usernamePlaceholder": "kullanıcı"
+ },
+ "loading": "Profiller yükleniyor...",
+ "title": "Çalışma Alanı Profilleri"
+ },
+ "connection": {
+ "actions": {
+ "connect": "Bağlan",
+ "connecting": "Bağlanıyor...",
+ "disconnect": "Bağlantıyı kes",
+ "testConnection": "Bağlantıyı Test Et",
+ "testing": "Test ediliyor..."
+ },
+ "currentMode": {
+ "description": "Oturum dosyaları için veri kaynağı",
+ "label": "Geçerli Mod",
+ "local": "Yerel ({{path}})"
+ },
+ "description": "Orada çalışan Claude Code oturumlarını görüntülemek için uzak bir makineye bağlanın",
+ "form": {
+ "authentication": "Kimlik Doğrulama",
+ "host": "Ana Bilgisayar",
+ "password": "Parola",
+ "port": "Port",
+ "privateKeyPath": "Özel Anahtar Yolu",
+ "username": "Kullanıcı Adı",
+ "hostPlaceholder": "ana bilgisayar adı veya SSH yapılandırma takma adı",
+ "usernamePlaceholder": "kullanıcı"
+ },
+ "savedProfiles": {
+ "title": "Kaydedilmiş Profiller"
+ },
+ "ssh": {
+ "title": "SSH Bağlantısı"
+ },
+ "status": {
+ "connectedTo": "{{host}} öğesine bağlandı",
+ "remoteSessions": "SSH aracılığıyla uzak oturumlar görüntüleniyor"
+ },
+ "test": {
+ "failed": "Bağlantı başarısız oldu: {{error}}",
+ "success": "Bağlantı başarılı",
+ "unknownError": "Bilinmeyen hata"
+ },
+ "title": "Uzak Bağlantı"
+ },
+ "providerRuntime": {
+ "actions": {
+ "cancel": "İptal",
+ "cancelLogin": "Girişi iptal et",
+ "connectChatGpt": "ChatGPT'ye bağlan",
+ "delete": "Sil",
+ "disable": "Devre dışı bırak",
+ "disconnectAccount": "Hesabın bağlantısını kes",
+ "generateLink": "Bağlantı oluştur",
+ "openLogin": "Girişi aç",
+ "reconnectAnthropic": "Anthropic'e yeniden bağlan",
+ "refresh": "Yenile",
+ "replaceKey": "Anahtarı değiştir",
+ "saveEndpoint": "Uç noktayı kaydet",
+ "saveKey": "Anahtarı kaydet",
+ "saving": "Kaydediliyor...",
+ "setApiKey": "API anahtarı ayarla",
+ "updateKey": "Anahtarı güncelle",
+ "useCode": "Kodu kullan"
+ },
+ "apiKey": {
+ "loadingStoredCredentials": "Saklanan kimlik bilgileri yükleniyor...",
+ "projectScope": "Proje",
+ "scope": "Kapsam",
+ "storedIn": "{{backend}} içinde saklanır",
+ "userScope": "Kullanıcı",
+ "storedInApp": "Uygulamada saklanır",
+ "providers": {
+ "anthropic": {
+ "name": "Anthropic API Anahtarı",
+ "title": "API anahtarı",
+ "description": "API faturalı erişim için doğrudan bir Anthropic API anahtarı kullanın. Geri döndüğünüzde Anthropic abonelik oturumunuz kullanılabilir kalır.",
+ "placeholder": "sk-ant-..."
+ },
+ "codex": {
+ "name": "Codex API Anahtarı",
+ "title": "API anahtarı",
+ "description": "İkincil bir Codex kimlik doğrulama yolu olarak bir OpenAI API anahtarı kullanın. Codex'i API anahtarı moduna geçirirseniz, uygulama yerel başlatmalar için OPENAI_API_KEY'i CODEX_API_KEY'e yansıtır.",
+ "placeholder": "sk-proj-..."
+ },
+ "gemini": {
+ "name": "Gemini API Anahtarı",
+ "title": "API erişimi",
+ "description": "Gemini API arka ucu için `GEMINI_API_KEY` kullanın. CLI SDK ve ADC bunu gerektirmez.",
+ "placeholder": "AIza..."
+ }
+ }
+ },
+ "codex": {
+ "account": {
+ "appServer": "Uygulama sunucusu: {{state}}",
+ "connected": "Bağlandı",
+ "description": "Abonelik destekli yerel başlatmaları besleyen yerel Codex uygulama sunucusu hesap oturumunu yönetin.",
+ "loginInProgress": "Giriş devam ediyor",
+ "plan": "Plan: {{plan}}",
+ "reconnectRequired": "Yeniden bağlanma gerekli",
+ "title": "ChatGPT hesabı",
+ "hints": {
+ "autoUsesApiKeyUntilChatgpt": "{{message}} Otomatik mod, ChatGPT bağlanana kadar algılanan API anahtarını kullanmaya devam eder.",
+ "detectedApiKeyNeedsApiMode": "{{message}} Algılanan API anahtarı yalnızca Codex'i API anahtarı moduna geçirdikten sonra kullanılır.",
+ "localArtifactsNoSession": "Codex CLI şu anda etkin bir ChatGPT hesabı bildirmiyor. Yerel Codex hesap verisi mevcut, ancak etkin bir yönetilen oturum seçili değil. Kullanım limitleri burada yalnızca Codex CLI bir tane gördükten sonra görünür.",
+ "noActiveAccount": "Codex CLI şu anda etkin bir ChatGPT hesabı bildirmiyor. Kullanım limitleri burada yalnızca Codex CLI bir tane gördükten sonra görünür.",
+ "reconnectBeforeUsage": "Codex'in yerel olarak seçili bir ChatGPT hesabı var, ancak kullanım limitleri burada yüklenmeden önce geçerli oturumun yeniden bağlanması gerekiyor.",
+ "usageLimitsAfterReport": "Kullanım limitleri, Codex bunları bağlı ChatGPT hesabı için bildirdikten sonra burada görünür."
+ }
+ },
+ "install": {
+ "checking": "Kontrol ediliyor",
+ "downloading": "İndiriliyor",
+ "installCli": "Codex CLI kur",
+ "installing": "Kuruluyor",
+ "retryInstall": "Kurulumu yeniden dene",
+ "title": "Codex CLI'yi uygulama verilerine kur"
+ },
+ "rateLimits": {
+ "credits": "Krediler",
+ "creditsDescription": "Krediler, pencere tabanlı abonelik kullanımından ayrı olarak gösterilir ve plan destekli ChatGPT oturumları için kullanılamayabilir.",
+ "noSecondaryWindow": "Codex bu hesap anlık görüntüsü için ikincil bir pencere döndürmedi.",
+ "notReported": "Bildirilmedi",
+ "primaryReset": "Birincil sıfırlama",
+ "primaryUsed": "Birincil kullanılan",
+ "primaryWindow": "Birincil pencere",
+ "remainingLeft": "{{value}} kaldı",
+ "remainingUnknown": "Kalan bilinmiyor",
+ "secondaryReset": "İkincil sıfırlama",
+ "secondaryUsed": "İkincil kullanılan",
+ "secondaryWindow": "İkincil pencere",
+ "usedQuotaNote": "Bu yüzdeler kalan kotayı değil, kullanılan kotayı gösterir.",
+ "weeklyReset": "Haftalık sıfırlama",
+ "weeklyUsed": "Haftalık kullanılan",
+ "weeklyUsedOneWeek": "Haftalık kullanılan (1 hf)",
+ "weeklyWindow": "Haftalık pencere",
+ "secondaryFallback": "ikincil",
+ "secondaryWindowNote": " Haftalık limitler {{window}} penceresinde ayrı olarak gösterilir.",
+ "usageExplanationGeneric": "Kalan kotayı değil, kullanılan kotayı gösterir.",
+ "usageExplanationWindowOnly": "Geçerli {{window}} penceresinde kalan kotayı değil, kullanılan kotayı gösterir.",
+ "usageExplanationWithRemaining": "{{used}} kullanıldı - geçerli {{window}} penceresinde yaklaşık {{remaining}} kaldı."
+ }
+ },
+ "compatibleEndpoint": {
+ "authToken": "Kimlik doğrulama belirteci",
+ "authTokenMissing": "Kimlik doğrulama belirteci yapılandırılmadı.",
+ "baseUrl": "Temel URL",
+ "description": "Anthropic uyumlu bir yerel çalışma zamanı uç noktası kullanın.",
+ "keepSavedToken": "Kaydedilmiş belirteci korumak için boş bırakın",
+ "title": "Yerel / uyumlu uç nokta",
+ "tokenStatus": "Belirteç {{status}}",
+ "validation": {
+ "baseUrlRequired": "Temel URL gereklidir",
+ "firstPartyAnthropic": "Birinci taraf Anthropic için Otomatik, Abonelik veya API anahtarı kullanın",
+ "httpRequired": "Temel URL http:// veya https:// kullanmalıdır",
+ "invalidUrl": "Geçersiz URL",
+ "noCredentials": "Temel URL kimlik bilgileri içermemelidir"
+ },
+ "status": {
+ "endpointDisabledTokenKept": "Uç nokta devre dışı bırakıldı. Kaydedilmiş belirteç korundu.",
+ "endpointSaved": "Uç nokta kaydedildi",
+ "endpointSavedTokenMissing": "Uç nokta kaydedildi. Kimlik doğrulama belirteci yapılandırılmadı."
+ }
+ },
+ "connection": {
+ "authenticationMethod": "Kimlik doğrulama yöntemi",
+ "descriptions": {
+ "anthropic": "Uygulama tarafından başlatılan Anthropic oturumlarının nasıl kimlik doğrulayacağını seçin.",
+ "codex": "Yerel çalışma zamanı başlatıldığında Codex'in ChatGPT aboneliğinizi mi yoksa bir API anahtarını mı tercih edeceğini seçin.",
+ "gemini": "İsteğe bağlı API erişimini yapılandırın. CLI SDK ve ADC hâlâ otomatik olarak keşfedilir.",
+ "opencode": "OpenCode kimlik doğrulaması ve sağlayıcı envanteri OpenCode çalışma zamanı tarafından yönetilir."
+ },
+ "method": "Bağlantı yöntemi",
+ "mode": "Mod: {{mode}}",
+ "selected": "Seçili",
+ "switching": "Geçiliyor...",
+ "title": "Bağlantı"
+ },
+ "connectionCards": {
+ "apiKey": {
+ "title": "API anahtarı"
+ },
+ "anthropic": {
+ "apiKeyDescription": "ANTHROPIC_API_KEY ve Anthropic API faturalandırmasını kullanın.",
+ "autoDescription": "Anthropic çalışma zamanı varsayılanlarını ve mevcut en iyi yerel kimlik bilgisini kullanın.",
+ "hint": "Otomatik mod, Anthropic'i varsayılan yerel kimlik bilgisi çözümlemesinde tutar.",
+ "subscriptionDescription": "Yerel Anthropic oturum açma oturumunuzu ve abonelik erişiminizi kullanın.",
+ "subscriptionTitle": "Anthropic aboneliği"
+ },
+ "auto": {
+ "title": "Otomatik"
+ },
+ "codex": {
+ "apiKeyDescription": "Yerel Codex başlatmaları için OPENAI_API_KEY ve CODEX_API_KEY faturalandırmasını kullanın.",
+ "autoDescription": "ChatGPT hesabınızı ve aboneliğinizi tercih edin. API anahtarı modunu yalnızca gerekirse kullanın.",
+ "chatgptDescription": "Bağlı ChatGPT hesabınızı ve Codex aboneliğinizi kullanın.",
+ "chatgptTitle": "ChatGPT hesabı",
+ "hint": "Codex her zaman yerel çalışma zamanı üzerinden çalışır. Otomatik mod, API anahtarı kimlik bilgilerine geri dönmeden önce ChatGPT hesabınızı tercih eder."
+ }
+ },
+ "description": "Her sağlayıcının nasıl bağlandığını ve desteklendiğinde çoklu model çalışma zamanının hangi arka ucu kullanması gerektiğini yönetin.",
+ "fastMode": {
+ "defaultOff": "Varsayılan Kapalı",
+ "description": "Çözümlenen model ve çalışma zamanı izin verdiğinde yeni Anthropic ekip başlatmaları için Claude Code Hızlı modunu varsayılan olarak uygula.",
+ "disabledHint": "Bir ekip Hızlı modu açıkça etkinleştirmedikçe yeni Anthropic başlatmaları normal hızda kalır.",
+ "enabledHint": "Çözümlenen model desteklediğinde yeni Anthropic başlatmaları varsayılan olarak Hızlı mod isteyecek.",
+ "notExposed": "Bu Anthropic çalışma zamanı Hızlı modu sunmuyor.",
+ "preferFast": "Hızlıyı Tercih Et",
+ "title": "Hızlı mod varsayılanı",
+ "unavailableForRuntime": "Hızlı mod şu anda bu Anthropic çalışma zamanı için kullanılamıyor."
+ },
+ "alerts": {
+ "anthropicApiKeyMissing": "API anahtarı modu seçili, ancak henüz bir Anthropic API kimlik bilgisi mevcut değil.",
+ "anthropicStoredKeyAvailable": "Kaydedilmiş bir API anahtarı mevcut, ancak uygulama tarafından başlatılan Anthropic oturumları bunu yalnızca API anahtarı moduna geçtikten sonra kullanır.",
+ "anthropicSubscriptionMissing": "Anthropic abonelik modu seçili. Bu sağlayıcıyı kullanmak için Anthropic ile giriş yapın.",
+ "authTokenMissing": "Kimlik doğrulama belirteci yapılandırılmadı. Birçok yerel Anthropic uyumlu uç nokta boş olmayan bir belirteç gerektirir.",
+ "chatgptLoginPending": "ChatGPT hesap girişinin tamamlanması bekleniyor...",
+ "chatgptLoginStarting": "ChatGPT girişi başlatılıyor...",
+ "codexApiKeyMissing": "API anahtarı modu seçili, ancak henüz bir OPENAI_API_KEY veya CODEX_API_KEY kimlik bilgisi mevcut değil.",
+ "codexLocalArtifactsNoSession": "Codex CLI'de şu anda etkin bir ChatGPT hesabı yok. Yerel Codex hesap verisi mevcut, ancak etkin bir yönetilen oturum seçili değil.",
+ "codexNeedsReconnect": "Codex'in yerel olarak seçili bir ChatGPT hesabı var, ancak geçerli oturumun yeniden bağlanması gerekiyor.",
+ "codexNoChatgptAccount": "Codex CLI'de şu anda etkin bir ChatGPT hesabı yok. Aboneliğinizi kullanmak için ChatGPT'ye bağlanın.",
+ "codexNoCredential": "Henüz bir ChatGPT hesabı veya API anahtarı mevcut değil.",
+ "geminiApiUnavailable": "Gemini API şu anda kullanılamıyor. Burada `GEMINI_API_KEY` yapılandırın veya geçerli Google ADC kimlik bilgilerini kullanın.",
+ "withApiKeyFallback": "{{message}} Algılanan API anahtarını kullanmak için API anahtarı moduna geçin."
+ },
+ "authModeDescriptions": {
+ "anthropic": {
+ "apiKey": "Uygulama tarafından başlatılan Anthropic oturumlarını bir API anahtarı kimlik bilgisi kullanmaya zorla.",
+ "auto": "Çalışma zamanı varsayılan davranışını kullan. Bu uygulamadaki kaydedilmiş API anahtarları yalnızca API anahtarı moduna geçtikten sonra kullanılır.",
+ "oauth": "Uygulama tarafından başlatılan Anthropic oturumlarını yerel Anthropic abonelik oturumunu kullanmaya zorla."
+ },
+ "codex": {
+ "apiKey": "Yerel Codex başlatmalarını OPENAI_API_KEY / CODEX_API_KEY faturalandırmasını kullanmaya zorla.",
+ "auto": "ChatGPT hesabınız mevcut olduğunda onu tercih et. Yalnızca gerektiğinde API anahtarı moduna geri dön.",
+ "chatgpt": "Yerel Codex başlatmalarını bağlı ChatGPT hesabınızı ve aboneliğinizi kullanmaya zorla."
+ }
+ },
+ "progress": {
+ "applyingConnectionChanges": "Bağlantı değişiklikleri uygulanıyor...",
+ "refreshingProviderStatus": "Sağlayıcı durumu yenileniyor...",
+ "savingCompatibleEndpoint": "Uyumlu uç nokta kaydediliyor...",
+ "switchingAnthropicSubscription": "Anthropic aboneliğine geçiliyor...",
+ "switchingApiKey": "API anahtarına geçiliyor...",
+ "switchingApiKeyMode": "API anahtarı moduna geçiliyor...",
+ "switchingAuto": "Otomatik moda geçiliyor...",
+ "switchingChatgpt": "ChatGPT hesabı moduna geçiliyor..."
+ },
+ "provider": "Sağlayıcı",
+ "runtime": {
+ "descriptions": {
+ "anthropic": "Anthropic'in şu anda ayrı bir çalışma zamanı arka ucu seçicisi yok.",
+ "codex": "Codex artık yalnızca yerel çalışma zamanı yolu üzerinden çalışıyor.",
+ "gemini": "Çoklu modelin hangi Gemini çalışma zamanı arka ucunu kullanması gerektiğini seçin.",
+ "opencode": "OpenCode kendi yönetilen çalışma zamanı ana bilgisayarını kullanır. Masaüstü şu anda yalnızca durumu sunar."
+ },
+ "title": "Çalışma Zamanı",
+ "updating": "Çalışma zamanı güncelleniyor..."
+ },
+ "runtimeSummary": "Çalışma zamanı: {{runtime}}",
+ "status": {
+ "configured": "yapılandırılmış",
+ "enabled": "Etkin",
+ "notConfigured": "Yapılandırılmamış",
+ "notSet": "ayarlanmadı",
+ "off": "Kapalı",
+ "unknown": "Bilinmiyor"
+ },
+ "title": "Sağlayıcı Ayarları",
+ "usage": {
+ "apiKey": "API anahtarı kullanılıyor",
+ "apiKeyRequired": "API anahtarı gerekli",
+ "compatibleEndpoint": "Uyumlu uç nokta kullanılıyor",
+ "notConnected": "Bağlı değil",
+ "usingMethod": "{{method}} kullanılıyor"
+ },
+ "errors": {
+ "apiKeyDeletedRefreshFailed": "API anahtarı silindi, ancak sağlayıcı durumu yenilenemedi.",
+ "apiKeySavedRefreshFailed": "API anahtarı kaydedildi, ancak sağlayıcı durumu yenilenemedi.",
+ "connectionUpdatedRefreshFailed": "Bağlantı güncellendi, ancak sağlayıcı durumu yenilenemedi.",
+ "deleteApiKey": "API anahtarı silinemedi",
+ "disableEndpoint": "Uç nokta devre dışı bırakılamadı",
+ "endpointDisabledRefreshFailed": "Uç nokta devre dışı bırakıldı, ancak sağlayıcı durumu yenilenemedi.",
+ "endpointSavedRefreshFailed": "Uç nokta kaydedildi, ancak sağlayıcı durumu yenilenemedi.",
+ "refreshCodexAccount": "Codex hesabı yenilenemedi",
+ "saveApiKey": "API anahtarı kaydedilemedi",
+ "saveEndpoint": "Uç nokta kaydedilemedi",
+ "updateAnthropicFastMode": "Anthropic Hızlı modu güncellenemedi",
+ "updateConnection": "Bağlantı güncellenemedi",
+ "updateRuntimeBackend": "Çalışma zamanı arka ucu güncellenemedi",
+ "apiKeyRequired": "API anahtarı gereklidir"
+ },
+ "connectionUi": {
+ "authMode": {
+ "auto": "Otomatik",
+ "oauth": "Abonelik / OAuth",
+ "chatgpt": "ChatGPT hesabı",
+ "apiKey": "API anahtarı",
+ "anthropicSubscription": "Anthropic aboneliği"
+ },
+ "authMethod": {
+ "apiKey": "API anahtarı",
+ "apiKeyHelper": "API anahtarı yardımcısı",
+ "oauth": "OAuth",
+ "claudeSubscription": "Claude aboneliği",
+ "geminiCli": "Gemini CLI",
+ "googleAccount": "Google hesabı",
+ "serviceAccount": "hizmet hesabı"
+ },
+ "runtime": {
+ "codexNative": "Codex yerel",
+ "currentRuntime": "Geçerli çalışma zamanı",
+ "selectedRuntime": "Seçili çalışma zamanı",
+ "summary": "{{prefix}}: {{runtime}}"
+ },
+ "status": {
+ "checking": "Kontrol ediliyor...",
+ "modelsAvailable": "Modeller mevcut",
+ "checked": "Kontrol edildi",
+ "providerActivity": "Sağlayıcı Etkinliği",
+ "notConnected": "Bağlı değil",
+ "startingChatGptLogin": "ChatGPT girişi başlatılıyor...",
+ "waitingForChatGptLogin": "ChatGPT hesap girişi bekleniyor...",
+ "chatGptVerificationDegraded": "ChatGPT hesabı algılandı - hesap doğrulaması şu anda düşük performanslı.",
+ "chatGptAccountReady": "ChatGPT hesabı hazır",
+ "apiKeyReady": "API anahtarı hazır",
+ "codexLocalAccountNeedsReconnect": "Codex'in yerel olarak seçili bir ChatGPT hesabı var, ancak geçerli oturumun yeniden bağlanması gerekiyor.",
+ "codexNoActiveManagedSession": "Codex CLI etkin bir ChatGPT girişi bildirmiyor. Yerel Codex hesap verisi mevcut, ancak etkin bir yönetilen oturum seçili değil.",
+ "codexNoActiveChatGptLogin": "Codex CLI etkin bir ChatGPT girişi bildirmiyor",
+ "connectChatGptForSubscription": "Codex aboneliğinizi kullanmak için bir ChatGPT hesabı bağlayın.",
+ "codexNativeReady": "Codex yerel hazır",
+ "codexNativeUnavailable": "Codex yerel kullanılamıyor",
+ "unavailableInCurrentRuntime": "Geçerli çalışma zamanında kullanılamıyor",
+ "connectedViaApiKey": "API anahtarı aracılığıyla bağlandı",
+ "apiKeyConfiguredNotVerified": "API anahtarı yapılandırıldı, ancak henüz doğrulanmadı",
+ "apiKeyModeMissingCredential": "API anahtarı modu seçili, ancak yapılandırılmış bir API anahtarı yok",
+ "connectedVia": "{{method}} aracılığıyla bağlandı",
+ "unableToVerify": "Doğrulanamıyor"
+ },
+ "mode": {
+ "selectedAuth": "Seçili kimlik doğrulama: {{authMode}}",
+ "preferredAuth": "Tercih edilen kimlik doğrulama: {{authMode}}"
+ },
+ "credential": {
+ "apiKeyConfigured": "API anahtarı yapılandırıldı",
+ "savedApiKeyAvailable": "Kaydedilmiş API anahtarı Yönet'te mevcut",
+ "apiKeyAlsoConfigured": "API anahtarı ayrıca Yönet'te yapılandırıldı",
+ "apiKeyConfiguredInManage": "API anahtarı Yönet'te yapılandırıldı",
+ "apiKeyFallbackInManage": "API anahtarı ayrıca yedek olarak Yönet'te mevcut",
+ "availableAsFallback": "{{summary}} - yedek olarak mevcut",
+ "savedApiKeyAvailableIfSwitch": "API anahtarı moduna geçerseniz kaydedilmiş API anahtarı Yönet'te mevcut",
+ "availableIfSwitch": "{{summary}} - API anahtarı moduna geçerseniz mevcut",
+ "autoWillUseUntilChatGpt": "{{summary}} - Otomatik mod, ChatGPT bağlanana kadar bunu kullanır"
+ },
+ "actions": {
+ "connect": "Bağlan",
+ "connectAnthropic": "Anthropic'e bağlan",
+ "connectChatGpt": "ChatGPT'ye bağlan",
+ "disconnect": "Bağlantıyı kes",
+ "openLogin": "Girişi Aç"
+ },
+ "disconnect": {
+ "anthropicTitle": "Anthropic aboneliğinin bağlantısı kesilsin mi?",
+ "anthropic": "Bu, yerel Anthropic abonelik oturumunu Claude CLI çalışma zamanından kaldırır.",
+ "anthropicWithApiKey": "Bu, yerel Anthropic abonelik oturumunu Claude CLI çalışma zamanından kaldırır. Yönet'teki kaydedilmiş API anahtarları kullanılabilir kalır.",
+ "geminiTitle": "Gemini CLI bağlantısı kesilsin mi?",
+ "gemini": "Bu, yerel Gemini CLI oturum meta verilerini temizler. Harici ADC kimlik bilgileri ve kaydedilmiş API anahtarları kaldırılmaz."
+ }
+ }
+ },
+ "cliRuntime": {
+ "actions": {
+ "checkForUpdates": "Güncellemeleri Kontrol Et",
+ "checking": "Kontrol ediliyor...",
+ "extensions": "Eklentiler",
+ "installRuntime": "{{runtime}} kur",
+ "manage": "Yönet",
+ "recheck": "Yeniden kontrol et",
+ "reinstallRuntime": "{{runtime}} yeniden kur",
+ "retry": "Yeniden dene",
+ "update": "Güncelle"
+ },
+ "installer": {
+ "checkingLatest": "En son sürüm kontrol ediliyor...",
+ "downloading": "İndiriliyor...",
+ "failed": "Kurulum başarısız oldu",
+ "installed": "v{{version}} kuruldu",
+ "installing": "Kuruluyor...",
+ "latest": "en son",
+ "verifying": "Sağlama toplamı doğrulanıyor..."
+ },
+ "labels": {
+ "multimodel": "Çoklu model"
+ },
+ "loading": {
+ "aiProviders": "Yapay Zeka Sağlayıcıları kontrol ediliyor...",
+ "claudeCli": "Claude CLI kontrol ediliyor..."
+ },
+ "provider": {
+ "backend": "Arka uç: {{backend}}",
+ "loadingModels": "Modeller yükleniyor...",
+ "modelsUnavailable": "Bu çalışma zamanı yapısı için modeller kullanılamıyor",
+ "runtime": "Çalışma zamanı: {{runtime}}"
+ },
+ "providerTerminal": {
+ "authFailed": "Kimlik doğrulama başarısız oldu",
+ "authUpdated": "Kimlik doğrulama güncellendi",
+ "loggedOut": "Sağlayıcı oturumu kapatıldı",
+ "login": "Giriş yap",
+ "logout": "Oturumu kapat",
+ "logoutFailed": "Oturum kapatma başarısız oldu"
+ },
+ "status": {
+ "configuredNotFound": "Yapılandırılmış {{runtime}} bulunamadı.",
+ "foundButFailed": "{{runtime}} bulundu ancak başlatılamadı",
+ "healthCheckFailed": "Yapılandırılmış {{runtime}}, başlangıç sağlık kontrolünde başarısız oldu.",
+ "notInstalled": "{{runtime}} kurulu değil"
+ },
+ "title": "CLI Çalışma Zamanı"
+ },
+ "cliStatus": {
+ "versionUpgrade": "v{{current}} -> v{{latest}}"
+ }
+}
diff --git a/src/features/localization/renderer/locales/tr/team.json b/src/features/localization/renderer/locales/tr/team.json
new file mode 100644
index 00000000..afdce6b9
--- /dev/null
+++ b/src/features/localization/renderer/locales/tr/team.json
@@ -0,0 +1,2487 @@
+{
+ "activity": {
+ "actions": {
+ "createTaskFromMessage": "Mesajdan görev oluştur",
+ "editMessage": "Mesajı düzenle",
+ "expandMessage": "Mesajı genişlet",
+ "replyToMessage": "Mesajı yanıtla",
+ "restartTeam": "Ekibi yeniden başlat"
+ },
+ "authError": {
+ "description": "Kimlik doğrulama başarısız oldu. Ekibi yeniden başlatmak oturumu yeniler ve bu sorunu çözebilir. Sorun devam ederse API kimlik bilgilerinizi kontrol edin veya daha sonra tekrar deneyin."
+ },
+ "automation": {
+ "reviewPickup": "Takım arkadaşından incelemeyi devralması istendi",
+ "stallNudge": "Takım arkadaşından durmuş göreve devam etmesi istendi",
+ "workSyncBody": "Takım arkadaşından mevcut işi senkronize etmesi istendi"
+ },
+ "badges": {
+ "automation": "otomasyon",
+ "bootstrap": "bootstrap",
+ "command": "komut",
+ "comment": "Yorum",
+ "live": "canlı",
+ "note": "not",
+ "rateLimited": "Hız Sınırlı",
+ "restart": "yeniden başlatma",
+ "result": "sonuç",
+ "session": "oturum",
+ "stallNudge": "durma hatırlatması",
+ "start": "başlat",
+ "workSync": "iş senkronizasyonu",
+ "agentError": "Agent Hatası",
+ "apiError": "API Hatası"
+ },
+ "bootstrap": {
+ "acknowledged": "Bootstrap onaylandı",
+ "restarting": "Takım arkadaşı yeniden başlatılıyor",
+ "starting": "Takım arkadaşı başlatılıyor"
+ },
+ "rawJson": "Ham JSON",
+ "unread": "Okunmamış",
+ "thoughts": {
+ "count": "{{count}} düşünce",
+ "count_one": "{{count}} düşünce",
+ "expand": "Düşünceleri genişlet",
+ "showMore": "Daha fazla göster",
+ "showLess": "Daha az göster",
+ "count_few": "{{count}} düşünce",
+ "count_many": "{{count}} düşünce",
+ "count_other": "{{count}} düşünce",
+ "toolSummary": "🔧 {{summary}}",
+ "titleForMember": "{{name}} - düşünceler"
+ },
+ "timeline": {
+ "loadingMessages": "Mesajlar yükleniyor...",
+ "noMessages": "Mesaj yok",
+ "emptyHint": "Etkinliği görmek için bir üyeye mesaj gönderin.",
+ "newSession": "Yeni oturum",
+ "olderCount": "+{{count}} eski",
+ "showMore": "{{count}} tane daha göster",
+ "showAll": "Tümünü göster",
+ "olderCount_one": "+{{count}} eski",
+ "olderCount_few": "+{{count}} eski",
+ "olderCount_many": "+{{count}} eski",
+ "olderCount_other": "+{{count}} eski"
+ },
+ "pendingReplies": {
+ "title": "Yanıtlar bekleniyor",
+ "openMember": "Üyeyi aç",
+ "messageSentAwaitingReply": "Mesaj gönderildi, yanıt bekleniyor",
+ "awaitingReply": "yanıt bekleniyor",
+ "externalTeam": "harici ekip",
+ "crossTeamAwaitingReply": "Ekipler arası mesaj gönderildi, yanıt bekleniyor",
+ "user": "kullanıcı",
+ "awaitingApproval": "onay bekleniyor"
+ },
+ "reply": {
+ "replyingTo": "Şuna yanıt veriliyor:",
+ "action": "Yanıtla"
+ },
+ "activeTasks": {
+ "inProgress": "Devam ediyor",
+ "expandInProgress": "Devam edenleri genişlet",
+ "collapseInProgress": "Devam edenleri daralt",
+ "reviewing": "inceliyor",
+ "workingOn": "üzerinde çalışıyor"
+ },
+ "expandDialog": {
+ "description": "Genişletilmiş mesaj görünümü"
+ }
+ },
+ "create": {
+ "actions": {
+ "create": "Oluştur",
+ "creating": "Oluşturuluyor...",
+ "openExisting": "Mevcut Ekibi Aç",
+ "skipPreflightAndCreate": "Ön kontrolü atla ve oluştur"
+ },
+ "conflict": {
+ "description": "Aynı dizinde iki ekip çalıştırmak risklidir - aynı dosyaları düzenlerken çakışabilirler. Yalıtım için farklı bir dizin veya bir git worktree kullanmayı düşünün.",
+ "title": "Bu çalışma dizini için başka bir \"{{team}}\" ekibi zaten çalışıyor",
+ "workingDirectory": "Çalışma dizini:"
+ },
+ "description": {
+ "copy": "Mevcut bir ekibe dayalı yeni bir ekip oluşturun.",
+ "create": "Ekibinizi kurun ve nasıl başlayacağını seçin."
+ },
+ "errors": {
+ "nameExists": "Ekip adı zaten mevcut",
+ "nameLaunching": "Bu ada sahip bir ekip şu anda başlatılıyor",
+ "createConfigFailed": "Ekip yapılandırması oluşturulamadı",
+ "loadProjectsFailed": "Projeler yüklenemedi"
+ },
+ "fields": {
+ "color": "Renk (isteğe bağlı)",
+ "description": "Açıklama (isteğe bağlı)",
+ "prompt": "Ekip lideri için komut istemi (isteğe bağlı)",
+ "teamName": "Ekip adı"
+ },
+ "launchAfterCreate": {
+ "description": "Ekibi yerel Claude CLI aracılığıyla hemen başlat.",
+ "label": "Oluşturduktan sonra komutu çalıştır"
+ },
+ "localOnly": "Yalnızca yerel Electron modunda kullanılabilir.",
+ "onDisk": "Diskte:",
+ "placeholders": {
+ "description": "Ekibin amacının kısa açıklaması",
+ "prompt": "Sağlama sırasında ekip lideri için talimatlar..."
+ },
+ "saved": "Kaydedildi",
+ "solo": {
+ "description": "Yalnızca ekip lideri (ana süreç) başlatılacak - hiçbir takım arkadaşı oluşturulmayacak. Seçtiğiniz çalışma zamanında (Claude Code, Codex, OpenCode, Gemini) normal bir agent oturumu gibi çalışır, ancak planlama için görev panosuna erişim sağlar. Takım arkadaşı koordinasyon yükünden kaçınarak token tasarrufu yapar. Üyeleri daha sonra ekip ayarlarından ekleyebilirsiniz.",
+ "label": "Tekli ekip"
+ },
+ "title": {
+ "copy": "Ekibi Kopyala",
+ "create": "Ekip Oluştur"
+ },
+ "optional": {
+ "launchSettingsTitle": "İsteğe bağlı başlatma ayarları",
+ "launchSettingsDescription": "Komut istemi, güvenlik ve CLI geçersiz kılmaları ihtiyaç duyduğunuzda burada bulunur.",
+ "teamDetailsTitle": "İsteğe bağlı ekip ayrıntıları",
+ "teamDetailsDescription": "Varsayılan akışı kompakt tutun ve yalnızca ekstra bağlam veya özel bir renk istediğinizde bunu açın."
+ },
+ "prepare": {
+ "unsupportedPreload": "Geçerli preload sürümü team:prepareProvisioning öğesini desteklemiyor. Geliştirme uygulamasını yeniden başlatın.",
+ "selectWorkingDirectory": "Başlatma ortamını doğrulamak için bir çalışma dizini seçin.",
+ "someProvidersNeedAttention": "Seçili bazı sağlayıcıların ilgilenilmesi gerekiyor.",
+ "readyWithNotes": "Seçili tüm sağlayıcılar hazır, notlarla birlikte.",
+ "ready": "Seçili tüm sağlayıcılar hazır.",
+ "failed": "Seçili sağlayıcılar hazırlanamadı",
+ "checkingProviders": "Seçili sağlayıcılar kontrol ediliyor...",
+ "preparingEnvironment": "Ortam hazırlanıyor...",
+ "selectedProvidersReadyWithNotes": "Seçili sağlayıcılar hazır (notlarla birlikte)",
+ "selectedProvidersReady": "Seçili sağlayıcılar hazır"
+ },
+ "validation": {
+ "nameMustContainLetterOrDigit": "Ad en az bir harf veya rakam içermelidir",
+ "nameTooLong": "Ad çok uzun (en fazla 128 karakter)",
+ "selectWorkingDirectory": "Çalışma dizinini seçin (cwd)",
+ "memberNameRequired": "Üye adı boş olamaz",
+ "memberNameInvalid": "Üye adı alfasayısal ile başlamalı, yalnızca [a-zA-Z0-9._-] kullanmalı, en fazla 128 karakter olmalıdır",
+ "memberNamesUnique": "Üye adları benzersiz olmalıdır",
+ "openCodeLeadModelRequired": "OpenCode lideri seçili bir model gerektirir.",
+ "openCodeTeammateRequired": "OpenCode lideri en az bir OpenCode takım arkadaşı gerektirir.",
+ "teamLaunching": "Ekip şu anda başlatılıyor",
+ "teamNameExists": "Ekip adı zaten mevcut",
+ "checkFormFields": "Form alanlarını kontrol edin"
+ }
+ },
+ "editTeam": {
+ "actions": {
+ "cancel": "İptal",
+ "save": "Kaydet"
+ },
+ "addMemberLockReason": "Ekip canlıyken yeni takım arkadaşları eklemek için özel Üye ekle iletişim kutusunu kullanın.",
+ "description": "Ekip adını, açıklamasını ve rengini değiştir",
+ "errors": {
+ "changesSavedRefreshFailed": "Ekip değişiklikleri kaydedildi, ancak en son görünüm yenilenemedi: {{message}}",
+ "liveRenameBlocked": "Mevcut takım arkadaşları ekip canlıyken yeniden adlandırılamaz. yeniden adlandırılan: {{names}}",
+ "memberNameEmpty": "Üye adı boş olamaz",
+ "memberNameInvalid": "Üye adı alfasayısal ile başlamalı, yalnızca [a-zA-Z0-9._-] kullanmalı, en fazla 128 karakter olmalıdır",
+ "memberNameNumericSuffix": "\"{{name}}\" üye adına izin verilmiyor (Claude CLI otomatik son ekine ayrılmıştır). Bunun yerine \"{{base}}\" kullanın.",
+ "memberNameReserved": "\"{{name}}\" üye adı ayrılmıştır",
+ "memberNamesUnique": "Kaydetmeden önce üye adları benzersiz olmalıdır",
+ "newLiveTeammates": "Ekip canlıyken yeni takım arkadaşlarını özel Üye ekle iletişim kutusundan ekleyin. Ekibi Düzenle yalnızca mevcut takım arkadaşlarını güncellemeyi destekler.",
+ "provisioning": "Sağlama hâlâ devam ederken ekip ayarları düzenlenemez. Başlatmanın bitmesini bekleyin, ardından tekrar deneyin.",
+ "restartFailedMany": "Ekip kaydedildi, ancak şu takım arkadaşları yeniden başlatılamadı: {{failures}}",
+ "restartFailedOne": "Ekip kaydedildi, ancak şu takım arkadaşı yeniden başlatılamadı: {{failures}}",
+ "saveFailed": "Kaydedilemedi",
+ "settingsChanged": "Bu iletişim kutusu açıkken ekip ayarları değişti. Kaydetmeden önce yeniden açıp en son durumu gözden geçirin.",
+ "settingsSavedMembersAndRefreshFailed": "Ekip ayarları kaydedildi, ancak üye değişiklikleri başarısız oldu: {{message}}. Yenileme de başarısız oldu: {{refreshError}}",
+ "settingsSavedMembersFailed": "Ekip ayarları kaydedildi, ancak üye değişiklikleri başarısız oldu: {{message}}",
+ "settingsSavedRefreshFailed": "Ekip ayarları kaydedildi, ancak en son görünüm yenilenemedi: {{message}}",
+ "teamNameEmpty": "Ekip adı boş olamaz",
+ "unsupportedMixedPrimaryMutation": "Karışık OpenCode ekiplerinde birincil sahipli takım arkadaşlarında canlı düzenlemeler henüz desteklenmiyor. Ekibi durdurun, kadroyu düzenleyin, ardından yeniden başlatın. Etkilenenler: {{names}}"
+ },
+ "fields": {
+ "colorOptional": "Renk (isteğe bağlı)",
+ "description": "Açıklama",
+ "name": "Ad"
+ },
+ "memberRestartWarning": "Kaydetme; rol, iş akışı, worktree yalıtımı, sağlayıcı, model, çaba veya MCP erişim değişikliklerini uygulamak için bu takım arkadaşını yeniden başlatacak.",
+ "notices": {
+ "liveRenameBlocked": "Mevcut takım arkadaşları yeniden adlandırıldığı için canlı kaydetme engellendi. Bu kimlik değişikliklerini geri alın veya önce ekibi durdurun.",
+ "newLiveTeammates": "Ekip canlıyken Ekibi Düzenle'den yeni takım arkadaşları eklenemez. Bunun yerine Üye ekle iletişim kutusunu kullanın.",
+ "provisioning": "Ekip sağlama hâlâ devam ediyor. Başlatma bitene kadar düzenleme geçici olarak kilitli.",
+ "restartMany": "Kaydetme; rol, iş akışı, worktree yalıtımı, sağlayıcı, model, çaba veya MCP erişim değişikliklerini uygulamak için bu takım arkadaşlarını yeniden başlatacak veya baştan başlatacaktır: {{names}}.",
+ "restartOne": "Kaydetme; rol, iş akışı, worktree yalıtımı, sağlayıcı, model, çaba veya MCP erişim değişikliklerini uygulamak için bu takım arkadaşını yeniden başlatacak veya baştan başlatacaktır: {{names}}.",
+ "unsupportedMixedPrimaryMutation": "Karışık OpenCode ekiplerinde birincil sahipli takım arkadaşları için canlı düzenlemeler/kaldırmalar ekibin durdurulup yeniden başlatılmasını gerektirir: {{names}}."
+ },
+ "placeholders": {
+ "description": "Ekip açıklaması (isteğe bağlı)",
+ "teamName": "Ekip adı"
+ },
+ "teamLead": {
+ "changeRuntime": "Lider çalışma zamanını değiştir",
+ "changeRuntimeDescription": "Lider sağlayıcısını, modelini veya çabasını değiştirmek için Ekibi Yeniden Başlat'ı açın.",
+ "modelLockReason": "Ekip lideri çalışma zamanı Ekibi Yeniden Başlat'tan yönetilir.",
+ "readOnlyHint": "Ekip lideri adı ve rolü burada salt okunur kalır. Sağlayıcıyı, modeli veya çabayı değiştirmek için lider satırındaki çalışma zamanı panelini açın.",
+ "role": "Ekip Lideri"
+ },
+ "title": "Ekibi Düzenle"
+ },
+ "memberDraft": {
+ "actions": {
+ "remove": "Üyeyi kaldır",
+ "removeAria": "{{name}} öğesini kaldır",
+ "restore": "Üyeyi geri yükle",
+ "restoreAria": "{{name}} öğesini geri yükle"
+ },
+ "anthropicContext": {
+ "defaultSetting": "varsayılan bağlam ayarı",
+ "description": "Anthropic bağlamı bu başlatma için ekip genelidir: {{mode}}. Bunu değiştirmek için lider çalışma zamanı panelinin Bağlamı sınırla onay kutusunu kullanın.",
+ "limitEnabled": "200K limiti etkin"
+ },
+ "mcp": {
+ "buttonInherit": "MCP devral",
+ "buttonScopes": "MCP kapsamları",
+ "chooseScopes": "Kapsamları seç",
+ "inheritLead": "Lideri devral",
+ "lockedInfo": "Tüm takım arkadaşları için yalnızca Agent Teams MCP etkindir. Bu takım arkadaşı yalnızca Agent Teams sunucusuyla başlatılacak.",
+ "mode": "MCP modu",
+ "scopes": {
+ "local": "yerel",
+ "project": "proje",
+ "user": "kullanıcı"
+ },
+ "serverNames": "Sunucu adları",
+ "settingInfo": "Agent Teams MCP, bu takım arkadaşını yalnızca Agent Teams sunucusuyla başlatır. Kapsam ve izin listesi modları yalnızca bu takım arkadaşı başlatmasına uygulanır.",
+ "strictAllowlist": "Katı izin listesi",
+ "tooltip": "{{label}}: Bu üyenin MCP devralma politikasını kontrol edin",
+ "agentTeamsMcp": "Agent Teams MCP"
+ },
+ "model": {
+ "ariaLabel": "{{provider}} sağlayıcısı, {{model}}",
+ "currentLeadRuntime": "Geçerli lider çalışma zamanı",
+ "default": "Varsayılan",
+ "inheritedTooltip": "Senkronizasyon etkinken sağlayıcı, model ve çaba liderden devralınır.",
+ "leadSuffix": "{{label}} (lider)",
+ "liveDisabled": "Ekip canlıyken sağlayıcı, model ve çaba değişiklikleri devre dışıdır. Bunları güvenli şekilde uygulamak için ekibe yeniden bağlanın.",
+ "lockedActionFallback": "Lider çalışma zamanı değişiklikleri, sağlayıcı, model ve çabanın güncellenebileceği Ekibi Yeniden Başlat'ı açar.",
+ "restartWholeTeam": "Bu çalışma zamanı değişikliklerini kaydetmek tüm ekibi yeniden başlatır."
+ },
+ "nameAria": "Üye {{index}} adı",
+ "nameFallback": "üye {{index}}",
+ "noRole": "Rol yok",
+ "removed": "Kaldırıldı",
+ "workflow": {
+ "addTooltip": "Takım arkadaşı iş akışı ekle",
+ "editTooltip": "Takım arkadaşı iş akışını düzenle",
+ "label": "İş akışı (isteğe bağlı)",
+ "placeholder": "Bu agent'ın nasıl davranması, diğerleriyle nasıl etkileşim kurması gerektiği...",
+ "saved": "Kaydedildi"
+ },
+ "worktree": {
+ "description": "Bu takım arkadaşını ayrı bir git worktree'de çalıştır. Değişiklikleri uygula/reddet, lider çalışma alanını değil o worktree'yi hedefler.",
+ "label": "Worktree"
+ },
+ "addMembers": {
+ "title": "Üye Ekle",
+ "description": "{{teamName}} ekibine yeni üyeler ekle"
+ },
+ "placeholders": {
+ "name": "uye-adi",
+ "mcpServers": "github, sentry"
+ }
+ },
+ "detail": {
+ "actions": {
+ "add": "Ekle",
+ "cancel": "İptal",
+ "delete": "Sil",
+ "editCode": "Kodu düzenle",
+ "launch": "Başlat",
+ "remove": "Kaldır",
+ "stop": "Durdur",
+ "task": "Görev",
+ "visualize": "Görselleştir"
+ },
+ "deleteTeam": {
+ "description": "\"{{team}}\" ekibi silinsin mi? Bu işlem geri alınamaz. Tüm ekip verileri ve görevler silinecek.",
+ "title": "Ekibi sil"
+ },
+ "draft": {
+ "descriptionPrefix": "Bu bir taslak ekip -",
+ "descriptionSuffix": "{{count}} {{member}} ile yapılandırıldı ancak henüz CLI tarafından sağlanmadı. Bir model seçip ekibi başlatmak için Başlat'a tıklayın.",
+ "descriptionSuffix_few": "{{count}} {{member}} ile yapılandırıldı ancak henüz CLI tarafından sağlanmadı. Bir model seçip ekibi başlatmak için Başlat'a tıklayın.",
+ "descriptionSuffix_many": "{{count}} {{member}} ile yapılandırıldı ancak henüz CLI tarafından sağlanmadı. Bir model seçip ekibi başlatmak için Başlat'a tıklayın.",
+ "descriptionSuffix_one": "{{count}} {{member}} ile yapılandırıldı ancak henüz CLI tarafından sağlanmadı. Bir model seçip ekibi başlatmak için Başlat'a tıklayın.",
+ "descriptionSuffix_other": "{{count}} {{member}} ile yapılandırıldı ancak henüz CLI tarafından sağlanmadı. Bir model seçip ekibi başlatmak için Başlat'a tıklayın.",
+ "member": "üye",
+ "member_few": "üye",
+ "member_many": "üye",
+ "member_one": "üye",
+ "member_other": "üye",
+ "title": "Ekip henüz başlatılmadı"
+ },
+ "invalidTab": "Geçersiz ekip sekmesi",
+ "kanbanSafeData": "Kanban tam olarak yüklenemedi. Güvenli veri gösteriliyor.",
+ "loadFailed": "Ekip yüklenemedi",
+ "loading": "Ekip yükleniyor",
+ "loadingSidebar": "Ekip kenar çubuğu yükleniyor",
+ "offline": {
+ "offline": "Ekip çevrimdışı",
+ "partialFailed": "Son başlatma yarıda başarısız oldu",
+ "partialMissing": "Son başlatma yarıda başarısız oldu - {{missing}}/{{expected}} takım arkadaşı katılmadı",
+ "reconciling": "Son başlatma hâlâ uzlaştırılıyor"
+ },
+ "previous": "Önceki: {{paths}}",
+ "removeMember": {
+ "description": "\"{{member}}\" ekipten kaldırılsın mı? Görevler ve mesajlar korunacak, ancak bu ad yeniden kullanılamaz.",
+ "title": "Üyeyi kaldır"
+ },
+ "sections": {
+ "team": "Ekip"
+ },
+ "solo": "Tekli",
+ "status": {
+ "active": "Etkin",
+ "launching": "Başlatılıyor...",
+ "running": "Çalışıyor"
+ },
+ "telemetry": {
+ "cpu": "CPU",
+ "memory": "Bellek"
+ },
+ "tooltips": {
+ "deleteTeam": "Ekibi sil",
+ "editTeam": "Ekibi düzenle",
+ "editUnavailableProvisioning": "Sağlama hâlâ devam ederken ekibi düzenleme kullanılamaz",
+ "openBuiltInEditor": "Projeyi yerleşik düzenleyicide aç",
+ "openTeamGraph": "Ekip grafiğini aç",
+ "stopTeam": "Ekibi durdur"
+ },
+ "waitingForProvisioning": "Sağlama tamamlandığında ekip verileri görünecek",
+ "context": {
+ "title": "Bağlam",
+ "loading": "Yükleniyor...",
+ "noSessionLoaded": "Yüklenmiş oturum yok",
+ "closePanel": "{{team}} bağlam panelini kapat",
+ "loadingContext": "Bağlam yükleniyor...",
+ "openLeadSession": "Bağlamı görüntülemek için ekip lideri oturumunu açın."
+ }
+ },
+ "review": {
+ "fileHeader": {
+ "actions": {
+ "accept": "Kabul et",
+ "discard": "At",
+ "discardTooltip": "Bu dosya için tüm düzenlemeleri at",
+ "keepMyDraft": "Taslağımı koru",
+ "reject": "Reddet",
+ "reloadFromDisk": "Diskten yeniden yükle",
+ "restore": "Geri yükle",
+ "restoreTooltip": "Önizlemeden bu dosyayı diskte oluştur/geri yükle",
+ "saveFile": "Dosyayı Kaydet",
+ "saveFileTooltip": "Dosyayı diske kaydet"
+ },
+ "badges": {
+ "deleted": "SİLİNDİ",
+ "manualReview": "MANUEL İNCELEME",
+ "new": "YENİ",
+ "worktree": "WORKTREE"
+ },
+ "contentSource": {
+ "disk-current": "Geçerli Disk",
+ "file-history": "Dosya Geçmişi",
+ "git-fallback": "Git Yedeği",
+ "ledger-exact": "Görev Defteri",
+ "ledger-snapshot": "Defter Anlık Görüntüsü",
+ "snippet-reconstruction": "Yeniden Oluşturuldu",
+ "unavailable": "İçerik kullanılamıyor"
+ },
+ "contentUnavailable": {
+ "badge": "İçerik kullanılamıyor",
+ "description": "Defter bu değişiklik için meta veri kaydetti, ancak tam metin içeriği mevcut değil. Bu genellikle ikili, büyük veya yalnızca hash içeriği anlamına gelir.",
+ "safety": "Güvensiz disk yazmalarını önlemek için bu dosya için otomatik kabul etme/reddetme devre dışıdır.",
+ "title": "Metin içeriği kullanılamıyor"
+ },
+ "disabled": {
+ "acceptRejectContentUnavailable": "Tam metin içeriği kullanılamadığı için Kabul Et/Reddet devre dışıdır.",
+ "acceptRejectMissingOnDisk": "Dosya diskte eksikken Kabul Et/Reddet devre dışıdır.",
+ "rejectBaselineUnavailable": "Orijinal temel kullanılamadığı için Reddet devre dışıdır.",
+ "rejectContentUnavailable": "Tam metin içeriği kullanılamadığı için Reddet devre dışıdır.",
+ "rejectManualLedgerReview": "Bu defter değişikliği ikili, büyük veya kullanılamayan içeriğe sahip olduğu için Reddet devre dışıdır."
+ },
+ "externalChange": {
+ "changedOnDisk": "Diskte değiştirildi",
+ "deletedOnDisk": "Diskten silindi",
+ "recreatedOnDisk": "Diskte yeniden oluşturuldu"
+ },
+ "missingOnDisk": {
+ "badge": "Diskte eksik",
+ "description": "Agent günlüklerinden bir önizleme gösterebiliriz, ancak dosya sisteminiz senkronize değil.",
+ "restorePrefix": "Önizleme içeriğini diske geri yazmak için",
+ "restoreSuffix": "kullanın.",
+ "restoreUnavailable": "Otomatik olarak geri yüklemek için tam dosya içeriği mevcut değil.",
+ "title": "Dosya diskte eksik"
+ },
+ "pathChange": {
+ "from": "{{path}} yolundan",
+ "to": "{{path}} yoluna"
+ },
+ "worktree": {
+ "isolated": "Yalıtılmış worktree"
+ }
+ },
+ "toolbar": {
+ "stats": {
+ "pending": "{{count}} beklemede",
+ "pending_one": "{{count}} beklemede",
+ "pending_other": "{{count}} beklemede",
+ "accepted": "{{count}} kabul edildi",
+ "accepted_one": "{{count}} kabul edildi",
+ "accepted_other": "{{count}} kabul edildi",
+ "rejected": "{{count}} reddedildi",
+ "rejected_one": "{{count}} reddedildi",
+ "rejected_other": "{{count}} reddedildi",
+ "acrossFiles": "{{count}} dosya genelinde",
+ "acrossFiles_one": "{{count}} dosya genelinde",
+ "acrossFiles_other": "{{count}} dosya genelinde",
+ "edited": "{{count}} düzenlendi",
+ "edited_one": "{{count}} düzenlendi",
+ "edited_other": "{{count}} düzenlendi",
+ "pending_few": "{{count}} beklemede",
+ "pending_many": "{{count}} beklemede",
+ "accepted_few": "{{count}} kabul edildi",
+ "accepted_many": "{{count}} kabul edildi",
+ "rejected_few": "{{count}} reddedildi",
+ "rejected_many": "{{count}} reddedildi",
+ "acrossFiles_few": "{{count}} dosya genelinde",
+ "acrossFiles_many": "{{count}} dosya genelinde",
+ "edited_few": "{{count}} düzenlendi",
+ "edited_many": "{{count}} düzenlendi"
+ },
+ "actions": {
+ "auto": "Otomatik",
+ "undo": "Geri al",
+ "acceptAll": "Tümünü Kabul Et",
+ "rejectAll": "Tümünü Reddet",
+ "applying": "Uygulanıyor...",
+ "applyRejections": "Reddetmeleri Uygula"
+ },
+ "tooltips": {
+ "autoOn": "Sona kaydırıldığında dosyaları görüntülendi olarak otomatik işaretle (AÇIK)",
+ "autoOff": "Sona kaydırıldığında dosyaları görüntülendi olarak otomatik işaretle (KAPALI)",
+ "undo": "Son inceleme işlemini geri al (Ctrl+Z)",
+ "acceptAll": "Tüm dosyalardaki tüm değişiklikleri kabul et",
+ "rejectAll": "Tüm dosyalardaki güvenli şekilde reddedilebilir tüm değişiklikleri reddet",
+ "rejectAllDisabled": "Bekleyen hiçbir dosyanın reddedilecek güvenli bir orijinal temeli yok.",
+ "applyRejections": "Reddedilen hunk'ları diske uygula; kabul edilen değişiklikler olduğu gibi korunur"
+ }
+ },
+ "diffError": {
+ "title": "Fark görünümü işlenemedi",
+ "unexpected": "Fark işlenirken beklenmeyen bir hata oluştu.",
+ "actions": {
+ "retry": "Yeniden dene"
+ },
+ "raw": {
+ "show": "Ham fark verilerini göster",
+ "file": "Dosya: {{file}}",
+ "original": "--- Orijinal",
+ "modified": "+++ Değiştirilmiş",
+ "charsTotal": "... (toplam {{count}} karakter)",
+ "charsTotal_one": "... (toplam {{count}} karakter)",
+ "charsTotal_other": "... (toplam {{count}} karakter)",
+ "charsTotal_few": "... (toplam {{count}} karakter)",
+ "charsTotal_many": "... (toplam {{count}} karakter)"
+ }
+ },
+ "fileTree": {
+ "viewed": "Görüntülendi",
+ "badges": {
+ "new": "yeni",
+ "deleted": "silindi"
+ },
+ "collapseFolder": "{{name}} öğesini daralt",
+ "expandFolder": "{{name}} öğesini genişlet",
+ "empty": {
+ "noChangedFiles": "Değiştirilmiş dosya yok",
+ "noMatchingFiles": "Eşleşen dosya yok"
+ },
+ "searchPlaceholder": "Dosyalarda ara…",
+ "filters": {
+ "unresolved": "Çözülmemiş",
+ "rejected": "Reddedildi",
+ "new": "Yeni",
+ "clear": "Temizle"
+ }
+ },
+ "diffControls": {
+ "previousChunk": "Önceki parça",
+ "nextChunk": "Sonraki parça",
+ "rejectChange": "Değişikliği reddet (⌘N)",
+ "acceptChange": "Değişikliği kabul et (⌘Y)",
+ "undo": "Geri al",
+ "keep": "Koru",
+ "rejectShortcut": "⌘N",
+ "acceptShortcut": "⌘Y"
+ },
+ "conflict": {
+ "title": "Çakışma Algılandı",
+ "description": "Bu dosya, agent'ın değişikliklerinden bu yana değiştirildi",
+ "cancel": "İptal",
+ "saveResolution": "Çözümü Kaydet",
+ "editManually": "Manuel Düzenle",
+ "useOriginal": "Orijinali Kullan",
+ "keepCurrent": "Geçerli Olanı Koru"
+ },
+ "fullDiffLoading": {
+ "titleOne": "Tam Fark Hazırlanıyor",
+ "titleMany": "{{count}} Tam Fark Hazırlanıyor",
+ "subtitleForFile": "{{file}} için tam düzenleyici farkı sonlandırılıyor.",
+ "subtitleCurrentFile": "Geçerli dosya için tam düzenleyici farkı sonlandırılıyor.",
+ "subtitleMany": "Şu anda yüklenen dosyalar için tam öncesi/sonrası temeller çözümleniyor.",
+ "previewsReady": "{{count}} önizleme hazır",
+ "previewsReady_one": "{{count}} önizleme hazır",
+ "editorViewLoading": "Düzenleyici görünümü yükleniyor",
+ "filesInProgress": "{{count}} dosya işleniyor",
+ "filesInProgress_one": "{{count}} dosya işleniyor",
+ "filesReady": "{{ready}}/{{total}} dosya hazır",
+ "progressDescription": "{{ready}} hazır, {{loading}} hâlâ yükleniyor. Kalan temeller çözümlenirken önizleme farkları aşağıda görünür kalır.",
+ "singleDescription": "Tam temel çözümlenirken önizleme farkları aşağıda görünür kalır.",
+ "previewsReady_few": "{{count}} önizleme hazır",
+ "previewsReady_many": "{{count}} önizleme hazır",
+ "previewsReady_other": "{{count}} önizleme hazır",
+ "filesInProgress_few": "{{count}} dosya işleniyor",
+ "filesInProgress_many": "{{count}} dosya işleniyor",
+ "filesInProgress_other": "{{count}} dosya işleniyor"
+ },
+ "fileMissingPrefix": "Dosya diskte eksik. Bu fark yalnızca agent günlüklerinden bir önizleme olabilir. Dosyayı diskte oluşturmak için",
+ "restore": "Geri yükle",
+ "fileMissingSuffix": "kullanın.",
+ "filePlaceholder": {
+ "loading": "Yükleniyor",
+ "description": "Bu dosya için tam bir düzenleyici farkı hazırlanıyor."
+ },
+ "loading": {
+ "diff": "FARK",
+ "ledgerObjectsProcessed": "{{count}} defter nesnesi işlendi",
+ "ledgerObjectsProcessed_one": "{{count}} defter nesnesi işlendi",
+ "ledgerObjectsProcessed_other": "{{count}} defter nesnesi işlendi",
+ "ledgerObjectsProcessed_few": "{{count}} defter nesnesi işlendi",
+ "ledgerObjectsProcessed_many": "{{count}} defter nesnesi işlendi",
+ "phases": {
+ "readingLedger": "Görev defteri okunuyor...",
+ "resolvingFiles": "Dosya durumları çözümleniyor...",
+ "checkingWorktree": "Worktree bağlamı kontrol ediliyor...",
+ "preparingDiffs": "İnceleme farkları hazırlanıyor..."
+ }
+ },
+ "progress": {
+ "viewed": "{{viewed}}/{{total}} görüntülendi"
+ },
+ "scope": {
+ "readMore": "Daha fazla oku",
+ "tiers": {
+ "exact": {
+ "title": "Görev kapsamı tam olarak belirlendi",
+ "detail": "Oturum günlüğünde hem başlangıç hem de tamamlanma işaretçileri bulundu. Fark yalnızca bu belirli görev sırasında yapılan değişiklikleri içerir - aynı dosyaları değiştiren diğer görevler hariç tutulur."
+ },
+ "endEstimated": {
+ "title": "Bitiş sınırı tahmin edildi",
+ "detail": "Yalnızca başlangıç işaretçisi bulundu - görevin henüz tamamlanma işaretçisi yok. Görev başlangıcından oturum sonuna kadar olan değişiklikler gösterilir. Aynı oturumda bundan sonra başka görevler çalıştıysa, onların değişiklikleri de dahil edilebilir."
+ },
+ "startEstimated": {
+ "title": "Başlangıç sınırı tahmin edildi",
+ "detail": "Yalnızca tamamlanma işaretçisi bulundu - işin başlangıcı yakalanmadı. Aynı oturumda bundan önce başka görevler çalıştıysa, onların aynı dosyalardaki değişiklikleri de dahil edilebilir."
+ },
+ "allSession": {
+ "title": "Tüm oturum değişiklikleri gösteriliyor",
+ "detail": "Oturum günlüğünde görev işaretçisi bulunamadı. Bu görev yalıtılamıyor - diğer görevlerin değişiklikleri dahil tüm oturumdan tüm dosya değişiklikleri gösterilir. Bu, eski CLI sürümleri veya standart olmayan iş akışlarıyla olabilir."
+ }
+ },
+ "ledger": {
+ "exact": {
+ "title": "Değişiklikler görev defteri tarafından yakalandı",
+ "detail": "Orkestratör, agent bu görev üzerinde çalışırken bu dosya değişikliklerini yakaladı.",
+ "badge": "Defter tam"
+ },
+ "limited": {
+ "title": "Değişiklikler sınırlı incelenebilirlikle yakalandı",
+ "detail": "Orkestratör bu görev için bu dosya değişikliklerini yakaladı, ancak en az bir değişiklik bir anlık görüntüden veya yalnızca meta veri kaynağından yakalandı. Mevcut olduğunda tam metin farklarını inceleyin; ikili veya kullanılamayan içerik manuel inceleme gerektirebilir.",
+ "mixedBadge": "Karışık incelenebilirlik",
+ "needsReviewBadge": "İnceleme gerekiyor"
+ }
+ },
+ "workInterval": {
+ "title": "Kalıcı iş aralığıyla kapsamlandı",
+ "detail": "Görev başlangıç işaretçisi oturum günlüğünde mevcut değildi, bu yüzden fark, panoda saklanan görev iş aralığıyla kapsamlandırılır.",
+ "badge": "Aralık kapsamlı"
+ },
+ "confidence": {
+ "high": "Yüksek güven",
+ "medium": "Orta güven",
+ "low": "Düşük güven",
+ "bestEffort": "En iyi çaba"
+ }
+ },
+ "shortcuts": {
+ "title": "Klavye Kısayolları",
+ "actions": {
+ "nextChange": "Sonraki değişiklik",
+ "previousChange": "Önceki değişiklik",
+ "nextFile": "Sonraki dosya",
+ "previousFile": "Önceki dosya",
+ "acceptChange": "Değişikliği kabul et",
+ "rejectChange": "Değişikliği reddet",
+ "saveFile": "Dosyayı kaydet",
+ "undo": "Geri al",
+ "redo": "Yinele",
+ "toggleShortcuts": "Kısayolları aç/kapat",
+ "closeDialog": "İletişim kutusunu kapat"
+ }
+ },
+ "timeline": {
+ "empty": "Düzenleme olayı yok",
+ "titleWithCount": "Düzenleme Zaman Çizelgesi ({{count}})"
+ },
+ "continuousScroll": {
+ "empty": "İncelenebilir dosya değişikliği yok"
+ },
+ "empty": {
+ "noSafeDiff": "Güvenli fark mevcut değil",
+ "noFileChangesRecorded": "Kaydedilmiş dosya değişikliği yok",
+ "noSafeDiffDescription": "Görev defteri bu görev için güvenli bir dosya farkı sunmadı.",
+ "noSafeDiffDiagnosticsDescription": "Görev defteri bu görev için güvenli bir dosya farkı sunmadı. Aşağıdaki tanılamalar nedenini açıklıyor.",
+ "noFileEventsYet": "Görev defterinin bu görev için henüz dosya olayı yok.",
+ "noFileEvents": "Görev defterinin bu görev için dosya olayı yok."
+ }
+ },
+ "messages": {
+ "actions": {
+ "bottomSheetActions": "Mesaj alt sayfa eylemleri",
+ "collapseAll": "Tüm mesajları daralt",
+ "collapseSheet": "Sayfayı daralt",
+ "expandAll": "Tüm mesajları genişlet",
+ "expandSheet": "Sayfayı genişlet",
+ "floatComposer": "Yazma alanını kaydır",
+ "floatMessagesComposer": "Mesaj yazma alanını kaydır",
+ "hideSearch": "Aramayı gizle",
+ "loadOlder": "Eski mesajları yükle",
+ "markAllRead": "Tümünü okundu işaretle",
+ "messageActions": "Mesaj eylemleri",
+ "moveMessagesToBottomSheet": "Mesajları alt sayfaya taşı",
+ "moveMessagesToSidebar": "Mesajları kenar çubuğuna taşı",
+ "moveToBottomSheet": "Alt sayfaya taşı",
+ "moveToInline": "Satır içine taşı",
+ "moveToSidebar": "Kenar çubuğuna taşı",
+ "panelActions": "Mesaj paneli eylemleri",
+ "searchMessages": "Mesajlarda ara"
+ },
+ "delivery": {
+ "copied": "Kopyalandı",
+ "copyDebugDetails": "Hata ayıklama ayrıntılarını kopyala",
+ "details": "Ayrıntılar",
+ "fields": {
+ "acceptanceUnknown": "acceptanceUnknown",
+ "delivered": "delivered",
+ "diagnostics": "diagnostics",
+ "ledgerStatus": "ledgerStatus",
+ "messageId": "messageId",
+ "providerId": "providerId",
+ "queuedBehindMessageId": "queuedBehindMessageId",
+ "reason": "reason",
+ "responsePending": "responsePending",
+ "responseState": "responseState",
+ "statusMessageId": "statusMessageId",
+ "userVisibleMessage": "userVisibleMessage",
+ "userVisibleNextReviewAt": "userVisibleNextReviewAt",
+ "userVisibleReasonCode": "userVisibleReasonCode",
+ "userVisibleState": "userVisibleState",
+ "visibleReplyCorrelation": "visibleReplyCorrelation",
+ "visibleReplyMessageId": "visibleReplyMessageId"
+ }
+ },
+ "panelMode": "Mesaj paneli modu",
+ "title": "Mesajlar",
+ "unread": {
+ "new": "{{count}} yeni",
+ "unread": "{{count}} okunmamış",
+ "new_few": "{{count}} yeni",
+ "new_many": "{{count}} yeni",
+ "new_one": "{{count}} yeni",
+ "new_other": "{{count}} yeni",
+ "unread_few": "{{count}} okunmamış",
+ "unread_many": "{{count}} okunmamış",
+ "unread_one": "{{count}} okunmamış",
+ "unread_other": "{{count}} okunmamış"
+ },
+ "filter": {
+ "ariaLabel": "Mesajları filtrele",
+ "tooltip": "Mesajları filtrele",
+ "from": "Kimden",
+ "to": "Kime",
+ "noData": "Veri yok",
+ "showStatusUpdates": "Durum güncellemelerini göster (boşta/kapatma)",
+ "actions": {
+ "reset": "Sıfırla",
+ "save": "Kaydet"
+ }
+ },
+ "status": {
+ "title": "Durum"
+ },
+ "actionMode": {
+ "label": "Eylem modu"
+ },
+ "search": {
+ "placeholder": "Ara..."
+ }
+ },
+ "modelSelector": {
+ "badges": {
+ "configured": "Yapılandırılmış",
+ "connected": "Bağlandı",
+ "failed": "Başarısız",
+ "free": "Ücretsiz",
+ "local": "Yerel",
+ "needsTest": "Test gerekiyor",
+ "verified": "Doğrulandı",
+ "unavailable": "Kullanılamıyor",
+ "issue": "Sorun"
+ },
+ "customModelId": "Özel model kimliği",
+ "label": "Model (isteğe bağlı)",
+ "multimodelRequired": "Codex ve Gemini, Çoklu model modu gerektirir.",
+ "openCode": {
+ "allSources": "Tüm OpenCode kaynakları",
+ "filterSource": "{{source}} filtrele",
+ "filterSources": "OpenCode kaynaklarını filtrele",
+ "freeOnly": "Yalnızca ücretsiz",
+ "freeTooltip": "OpenCode bu modeli ücretsiz olarak işaretliyor.",
+ "loadingModels": "OpenCode modelleri yükleniyor...",
+ "noSourcesFound": "Kaynak bulunamadı.",
+ "recommendedOnly": "Yalnızca önerilen",
+ "searchSources": "Kaynaklarda ara",
+ "sourcesCount": "{{count}} OpenCode kaynağı",
+ "sourcesCount_few": "{{count}} OpenCode kaynağı",
+ "sourcesCount_many": "{{count}} OpenCode kaynağı",
+ "sourcesCount_one": "{{count}} OpenCode kaynağı",
+ "sourcesCount_other": "{{count}} OpenCode kaynağı"
+ },
+ "reason": "Neden: {{reason}}",
+ "runtimeModelsSyncing": "Açık modeller geçerli çalışma zamanından yüklenir. Liste senkronize olurken Varsayılan kullanılabilir kalır.",
+ "fastMode": {
+ "codexLabel": "Hızlı mod (2x kredi)",
+ "optionalLabel": "Hızlı mod (isteğe bağlı)",
+ "defaultOff": "Varsayılan (Kapalı)",
+ "fast": "Hızlı",
+ "off": "Kapalı",
+ "defaultFast": "Varsayılan (Hızlı)",
+ "defaultResolvesTo": "Varsayılan şu anda {{mode}} olarak çözümleniyor.",
+ "runtimeBackedHint": "Hızlı mod çalışma zamanı destekli olup yalnızca çözümlenen Anthropic başlatma modeli desteklediğinde açılır."
+ },
+ "anthropicExtraUsage": {
+ "pricingDocs": "Anthropic fiyatlandırma dokümanlarını oku"
+ },
+ "searchModels": "Modellerde ara",
+ "defaultModel": "Varsayılan",
+ "empty": {
+ "noSearchMatches": "Bu aramayla eşleşen model yok.",
+ "recommendedFreeOpenCode": "Geçerli çalışma zamanı listesinde önerilen ücretsiz OpenCode modeli yok.",
+ "freeOpenCode": "Geçerli çalışma zamanı listesinde ücretsiz OpenCode modeli yok.",
+ "recommendedOpenCode": "Geçerli çalışma zamanı listesinde önerilen OpenCode modeli yok.",
+ "noModels": "Geçerli çalışma zamanı listesinde model yok."
+ },
+ "openCodeStatus": {
+ "notReadyTitle": "OpenCode ekip başlatması için hazır değil",
+ "freeModelsAvailableTitle": "OpenCode ücretsiz modeller mevcut",
+ "providerNotConnectedTitle": "OpenCode sağlayıcısı bağlı değil",
+ "readyTitle": "OpenCode hazır",
+ "readyMessage": "OpenCode sağlayıcı hazırlığını geçti. Bu ekip için OpenCode modellerini kullanmak için seçin.",
+ "useOpenCode": "OpenCode'u kullan",
+ "badges": {
+ "check": "Kontrol et",
+ "install": "Kur",
+ "free": "Ücretsiz",
+ "setup": "Kurulum"
+ },
+ "summary": {
+ "checking": "OpenCode durumu: çalışma zamanı kontrol ediliyor",
+ "status": "OpenCode durumu: {{parts}}"
+ },
+ "summaryParts": {
+ "teamLaunchBlocked": "ekip başlatması engellendi",
+ "providerOptional": "sağlayıcı bağlantısı isteğe bağlı",
+ "providerModelsNeedSetup": "sağlayıcı destekli modeller kurulum gerektiriyor",
+ "teamLaunchReady": "ekip başlatması hazır",
+ "runtimeDetected": "çalışma zamanı algılandı",
+ "runtimeMissing": "çalışma zamanı eksik",
+ "freeWithoutAuth": "kimlik doğrulaması olmadan ücretsiz modeller mevcut",
+ "providerConnected": "sağlayıcı bağlandı",
+ "providerNotConnected": "sağlayıcı bağlı değil"
+ },
+ "messages": {
+ "checking": "Uygulama hâlâ OpenCode çalışma zamanını kontrol ediyor. Sağlayıcı durumunun bitmesini bekleyin, ardından tekrar deneyin.",
+ "unsupported": "OpenCode kurulu değil, bulunamadı veya algılanan çalışma zamanı desteklenmiyor. OpenCode'u kurun veya güncelleyin, ardından sağlayıcı durumunu yenileyin. Ayrıca ana sayfadaki Kur düğmesini de kullanabilirsiniz.",
+ "freeAvailable": "OpenCode algılandı. Bir sağlayıcı bağlamadan Big Pickle gibi ücretsiz OpenCode modellerini kullanabilirsiniz. Yalnızca sağlayıcı destekli modeller istediğinizde bir sağlayıcı bağlayın.",
+ "noFreeListed": "OpenCode algılandı, ancak henüz hiçbir ücretsiz OpenCode modeli listelenmedi. Sağlayıcı durumunu yenileyin veya sağlayıcı destekli modeller için OpenCode'da bir sağlayıcı bağlayın.",
+ "launchBlocked": "OpenCode kurulu ve kimlik doğrulaması yapılmış, ancak Agent Teams başlatma hazırlığı engellendi.",
+ "ready": "OpenCode ekip başlatması için hazır."
+ },
+ "loadingRuntime": "OpenCode çalışma zamanı durumu hâlâ yükleniyor."
+ },
+ "advisory": {
+ "pingNotConfirmed": "Ping onaylanmadı",
+ "note": "Not"
+ },
+ "placeholders": {
+ "customModelId": "openai/gpt-oss-20b"
+ },
+ "routeGroups": {
+ "openCodeConfig": "OpenCode yapılandırması",
+ "builtinFree": "Ücretsiz yerleşik",
+ "connectedProviders": "Bağlı sağlayıcılar",
+ "otherCatalog": "Diğer OpenCode kataloğu"
+ },
+ "pricing": {
+ "free": "Ücretsiz",
+ "inputShort": "giriş {{rate}}",
+ "outputShort": "çıkış {{rate}}",
+ "perMillionSummary": "{{summary}} / 1M",
+ "inputTitle": "Girdi: 1M token başına {{rate}}",
+ "outputTitle": "Çıktı: 1M token başına {{rate}}",
+ "cacheReadTitle": "Önbellek okuma: 1M token başına {{rate}}",
+ "cacheWriteTitle": "Önbellek yazma: 1M token başına {{rate}}"
+ },
+ "defaultTooltip": {
+ "anthropicCompatibleWithResolved": "Anthropic uyumlu uç nokta varsayılan modelini kullanır.\nŞu anda {{model}} olarak çözümleniyor.",
+ "anthropicCompatible": "Anthropic uyumlu uç nokta varsayılan modelini kullanır.",
+ "anthropic": "Claude ekip varsayılan modelini kullanır.\n1M bağlamla {{longContextModel}} olarak veya Bağlamı sınırla etkinleştirildiğinde 200K bağlamla {{limitedContextModel}} olarak çözümlenir.",
+ "openCodeWithResolved": "OpenCode varsayılan modelini kullanır.\nŞu anda {{model}} olarak çözümleniyor.",
+ "openCode": "OpenCode çalışma zamanı varsayılan modelini kullanır.",
+ "runtime": "Seçili sağlayıcı için çalışma zamanı varsayılanını kullanır."
+ },
+ "multimodelOff": "Çoklu model kapalı",
+ "unavailableInRuntime": "Geçerli çalışma zamanında kullanılamıyor"
+ },
+ "taskDetail": {
+ "actions": {
+ "cancel": "İptal",
+ "delete": "Sil",
+ "markResolved": "Çözüldü olarak işaretle",
+ "save": "Kaydet"
+ },
+ "attachments": {
+ "commentAttachment": "Yorum eki",
+ "fromComments": "Yorumlardan",
+ "preview": "{{filename}} önizle"
+ },
+ "changes": {
+ "badges": {
+ "attention": "dikkat",
+ "noSafeDiff": "güvenli fark yok"
+ },
+ "empty": {
+ "noFileChangesRecorded": "Kaydedilmiş dosya değişikliği yok",
+ "noFileChangesRecordedYet": "Henüz kaydedilmiş dosya değişikliği yok",
+ "noReviewableChangesRecovered": "İncelenebilir dosya değişikliği kurtarılmadı",
+ "noSafeDiffAvailable": "Güvenli fark mevcut değil"
+ },
+ "loadFailed": "Görev değişiklikleri özeti yüklenemedi",
+ "loading": "Değişiklikler yükleniyor...",
+ "fileCount": "{{count}} dosya",
+ "fileRowsHidden": "{{count}} dosya satırı gizli",
+ "moreDiagnostics": "{{count}} tanılama daha",
+ "moreFiles": "{{count}} dosya daha",
+ "openInEditor": "Düzenleyicide aç",
+ "openTask": "{{subject}} görevini aç",
+ "refresh": "Değişiklikleri yenile",
+ "refreshFailed": "Yenileme başarısız oldu: {{error}}",
+ "refreshing": "Yenileniyor",
+ "refreshingChanges": "Değişiklikler yenileniyor...",
+ "refreshTeamChanges": "Ekip değişikliklerini yenile",
+ "refreshShort": "Yenile",
+ "reviewDiff": "Farkı incele",
+ "reviewTaskDiff": "Görev farkını incele",
+ "scannedCandidateTasks": "{{eligible}} aday görevden {{requested}} tanesi tarandı",
+ "tasksDeferred": "Bu geçişte {{count}} görev ertelendi",
+ "title": "Değişiklikler",
+ "fileCount_few": "{{count}} dosya",
+ "fileCount_many": "{{count}} dosya",
+ "fileCount_one": "{{count}} dosya",
+ "fileCount_other": "{{count}} dosya",
+ "fileRowsHidden_few": "{{count}} dosya satırı gizli",
+ "fileRowsHidden_many": "{{count}} dosya satırı gizli",
+ "fileRowsHidden_one": "{{count}} dosya satırı gizli",
+ "fileRowsHidden_other": "{{count}} dosya satırı gizli",
+ "moreDiagnostics_few": "{{count}} tanılama daha",
+ "moreDiagnostics_many": "{{count}} tanılama daha",
+ "moreDiagnostics_one": "{{count}} tanılama daha",
+ "moreDiagnostics_other": "{{count}} tanılama daha",
+ "moreFiles_few": "{{count}} dosya daha",
+ "moreFiles_many": "{{count}} dosya daha",
+ "moreFiles_one": "{{count}} dosya daha",
+ "moreFiles_other": "{{count}} dosya daha",
+ "tasksDeferred_few": "Bu geçişte {{count}} görev ertelendi",
+ "tasksDeferred_many": "Bu geçişte {{count}} görev ertelendi",
+ "tasksDeferred_one": "Bu geçişte {{count}} görev ertelendi",
+ "tasksDeferred_other": "Bu geçişte {{count}} görev ertelendi"
+ },
+ "clarification": {
+ "awaitingLead": "Ekip liderinden açıklama bekleniyor",
+ "awaitingUser": "Sizden açıklama bekleniyor"
+ },
+ "description": {
+ "add": "Açıklama eklemek için tıklayın...",
+ "edit": "Açıklamayı düzenle",
+ "placeholder": "Görev açıklaması (markdown destekler)"
+ },
+ "loading": {
+ "fetchingTeamData": "Ekip verileri alınıyor",
+ "title": "Görev yükleniyor..."
+ },
+ "logs": {
+ "newArriving": "Yeni görev günlükleri geliyor"
+ },
+ "notFound": "Görev bulunamadı",
+ "related": {
+ "blockedBy": "Şununla engellendi:",
+ "blocks": "Şunu engelliyor:",
+ "linkedFrom": "Şuradan bağlandı:",
+ "links": "Bağlantılar",
+ "title": "İlgili görevler"
+ },
+ "review": {
+ "reviewer": "İnceleyen: {{reviewer}}"
+ },
+ "sections": {
+ "attachments": "Ekler",
+ "changes": "Değişiklikler",
+ "comments": "Yorumlar",
+ "description": "Açıklama",
+ "taskLogs": "Görev Günlükleri",
+ "workflowHistory": "İş Akışı Geçmişi"
+ },
+ "unassigned": "Atanmamış",
+ "workflow": {
+ "implementationTimeTitle": "Kalıcı iş aralıklarından uygulama süresi",
+ "inProgressTime": "Devam süresi {{duration}}"
+ },
+ "comments": {
+ "renderLimit": "Arayüzü duyarlı tutmak için en son {{formattedCount}} yorum gösteriliyor.",
+ "badges": {
+ "approved": "Onaylandı",
+ "reviewRequested": "İnceleme istendi"
+ },
+ "unknownTime": "bilinmeyen zaman",
+ "actions": {
+ "reply": "Yanıtla",
+ "replyToComment": "Yoruma yanıt ver",
+ "showMore": "Daha fazla yorum göster ({{visible}}/{{total}})",
+ "cancelReply": "Yanıtı iptal et",
+ "comment": "Yorum"
+ },
+ "attachments": {
+ "previewAlt": "Ek önizlemesi",
+ "downloadFailed": "İndirme başarısız oldu"
+ },
+ "replyingTo": "Şuna yanıt veriliyor:",
+ "input": {
+ "placeholder": "Bir yorum ekleyin... (göndermek için Enter)",
+ "charsLeft": "{{count}} karakter kaldı",
+ "charsLeft_one": "{{count}} karakter kaldı",
+ "charsLeft_other": "{{count}} karakter kaldı",
+ "charsLeft_few": "{{count}} karakter kaldı",
+ "charsLeft_many": "{{count}} karakter kaldı"
+ }
+ },
+ "workflowTimeline": {
+ "empty": "Kaydedilmiş iş akışı geçmişi yok",
+ "currentImplementationInterval": "Geçerli uygulama aralığı",
+ "implementationIntervalEnded": "Uygulama aralığı bu geçişte sona erdi",
+ "runningPrefix": "çalışıyor ",
+ "createdAs": "Şu olarak oluşturuldu:",
+ "by": "tarafından",
+ "reassigned": "Yeniden atandı",
+ "assignedTo": "Şuna atandı:",
+ "unassignedFrom": "Şundan atama kaldırıldı:",
+ "ownerChanged": "Sahip değiştirildi",
+ "reviewRequested": "İnceleme istendi",
+ "reviewStarted": "İnceleme başladı",
+ "changesRequested": "Değişiklik istendi",
+ "approved": "Onaylandı",
+ "unknownEvent": "Bilinmeyen olay"
+ },
+ "reviewStates": {
+ "approved": "Onaylandı",
+ "needsFix": "Düzeltme gerekir",
+ "inReview": "İncelemede"
+ }
+ },
+ "tasks": {
+ "createTask": {
+ "assignee": "Atanan kişi",
+ "assigneeOptional": "Atanan kişi (isteğe bağlı)",
+ "blockedByOptional": "Engelleyen görevler (isteğe bağlı)",
+ "blockedBySummary": "Görev şununla engellenecek: {{tasks}}",
+ "cancel": "İptal",
+ "create": "Oluştur",
+ "creating": "Oluşturuluyor...",
+ "description": "Görev, ekibin tasks/ dizininde oluşturulacak ve Kanban panosunda görünecek.",
+ "descriptionOptional": "Açıklama (isteğe bağlı)",
+ "detailsPlaceholder": "Görev ayrıntıları (markdown destekler)",
+ "hideOptionalFields": "İsteğe bağlı alanları gizle",
+ "offlineNotice": {
+ "after": "- yürütmeyi başlatmak için ekibi başlatın.",
+ "before": "Ekip çevrimdışı. Görev şuraya eklenecek:"
+ },
+ "promptOptional": "Atanan kişi için komut istemi (isteğe bağlı)",
+ "promptPlaceholder": "Ekip üyesi için özel talimatlar...",
+ "relatedOptional": "İlgili görevler (isteğe bağlı)",
+ "relatedSummary": "İlgili: {{tasks}}",
+ "saved": "Kaydedildi",
+ "searchTasks": "Görevlerde ara...",
+ "selectMember": "Bir üye seç",
+ "selectMemberOptional": "Üye seç...",
+ "showOptionalFields": "İsteğe bağlı alanları göster",
+ "startImmediately": "Hemen başlat",
+ "startOfflineHint": "Ekip çevrimdışı. Görevleri hemen başlatmak için önce ekibi başlatın.",
+ "subject": "Konu",
+ "subjectPlaceholder": "Ne yapılması gerekiyor?",
+ "title": "Görev Oluştur",
+ "todo": "YAPILACAK"
+ },
+ "list": {
+ "columns": {
+ "blockedBy": "Engelleyen",
+ "blocks": "Engelliyor",
+ "id": "Kimlik",
+ "owner": "Sahip",
+ "status": "Durum",
+ "subject": "Konu"
+ },
+ "empty": "Bu ekipte görev yok",
+ "filters": {
+ "allOwners": "Tüm sahipler",
+ "allStatuses": "Tüm durumlar",
+ "ownerAria": "Görevleri sahibe göre filtrele",
+ "statusAria": "Görevleri duruma göre filtrele"
+ },
+ "showing": "{{total}} öğeden {{shown}} tanesi gösteriliyor"
+ },
+ "status": {
+ "completed": "tamamlandı",
+ "deleted": "silindi",
+ "inProgress": "devam_ediyor",
+ "pending": "beklemede"
+ },
+ "statusSummary": {
+ "progressAria": "Görevler {{completed}}/{{total}} tamamlandı",
+ "inProgress": "{{count}} devam_ediyor",
+ "inProgress_one": "{{count}} devam_ediyor",
+ "inProgress_other": "{{count}} devam_ediyor",
+ "inProgress_few": "{{count}} devam_ediyor",
+ "inProgress_many": "{{count}} devam_ediyor",
+ "pending": "{{count}} beklemede",
+ "pending_one": "{{count}} beklemede",
+ "pending_other": "{{count}} beklemede",
+ "pending_few": "{{count}} beklemede",
+ "pending_many": "{{count}} beklemede",
+ "completed": "{{count}} tamamlandı",
+ "completed_one": "{{count}} tamamlandı",
+ "completed_other": "{{count}} tamamlandı",
+ "completed_few": "{{count}} tamamlandı",
+ "completed_many": "{{count}} tamamlandı"
+ },
+ "unassigned": "Atanmamış",
+ "teamPrefix": "Ekip:",
+ "openTask": "Görevi aç",
+ "deleteConfirm": {
+ "title": "Görevi sil",
+ "message": "#{{taskId}} görevi çöpe taşınsın mı?",
+ "confirmLabel": "Sil",
+ "cancelLabel": "İptal"
+ }
+ },
+ "editor": {
+ "actions": {
+ "cancel": "İptal",
+ "closeEditor": "Düzenleyiciyi kapat",
+ "closeTab": "Sekmeyi kapat",
+ "closeTooltip": "Düzenleyiciyi kapat (Esc)",
+ "discard": "At",
+ "discardAndClose": "At ve Kapat",
+ "keep": "Koru",
+ "keepMine": "Benimkini koru",
+ "keyboardShortcuts": "Klavye kısayolları",
+ "overwrite": "Üzerine yaz",
+ "refreshAria": "Yenile (F5)",
+ "refreshTooltip": "Git durumunu yenile (F5)",
+ "reload": "Yeniden yükle",
+ "retry": "Yeniden dene",
+ "save": "Kaydet",
+ "saveAllAndClose": "Tümünü Kaydet ve Kapat"
+ },
+ "ariaLabel": "Proje Düzenleyici",
+ "dialogs": {
+ "conflictDescription": "Dosya, siz açtığınızdan beri harici olarak değiştirildi. Değişikliklerinizle üzerine yazılsın mı?",
+ "conflictTitle": "Kaydetme Çakışması",
+ "unsavedDescription": "Kaydedilmemiş değişiklikleriniz var. Ne yapmak istersiniz?",
+ "unsavedFileDescription": "Bu dosyada kaydedilmemiş değişiklikler var. Ne yapmak istersiniz?",
+ "unsavedTitle": "Kaydedilmemiş Değişiklikler"
+ },
+ "newFile": {
+ "validation": {
+ "nameRequired": "Ad boş olamaz",
+ "invalidName": "Geçersiz ad",
+ "invalidCharacters": "Ad geçersiz karakterler içeriyor",
+ "nameTooLong": "Ad çok uzun"
+ },
+ "placeholders": {
+ "fileName": "Dosya adı...",
+ "folderName": "Klasör adı..."
+ },
+ "aria": {
+ "newFileName": "Yeni dosya adı",
+ "newFolderName": "Yeni klasör adı"
+ }
+ },
+ "draftRecovered": "Önceki oturumdan kaydedilmemiş değişiklikler kurtarıldı.",
+ "externalChange": {
+ "changed": "Dosya diskte değiştirildi.",
+ "deleted": "Dosya artık diskte mevcut değil."
+ },
+ "saveFailed": "Kaydetme başarısız oldu: {{error}}",
+ "sidebar": {
+ "explorer": "Gezgin",
+ "hide": "Kenar çubuğunu gizle",
+ "hideWithShortcut": "Kenar çubuğunu gizle ({{shortcut}})",
+ "show": "Kenar çubuğunu göster",
+ "showWithShortcut": "Kenar çubuğunu göster ({{shortcut}})"
+ },
+ "searchInFiles": {
+ "title": "Dosyalarda Ara",
+ "closeSearch": "Aramayı kapat",
+ "closeSearchShortcut": "Aramayı kapat (Esc)",
+ "searchPlaceholder": "Ara...",
+ "matchCase": "Büyük/Küçük Harf Eşleştir",
+ "matchCaseToggle": "Aa",
+ "noResults": "Sonuç bulunamadı",
+ "resultsSummary": "{{fileCount}} dosyada {{count}} eşleşme",
+ "resultsSummary_one": "{{fileCount}} dosyada {{count}} eşleşme",
+ "truncated": "(kısaltıldı)",
+ "resultsSummary_few": "{{fileCount}} dosyada {{count}} eşleşme",
+ "resultsSummary_many": "{{fileCount}} dosyada {{count}} eşleşme",
+ "resultsSummary_other": "{{fileCount}} dosyada {{count}} eşleşme"
+ },
+ "fileTree": {
+ "failedToLoadFiles": "Dosyalar yüklenemedi: {{error}}",
+ "loading": "Dosyalar yükleniyor...",
+ "empty": "Dosya bulunamadı",
+ "dropForProjectRoot": "Proje kökü için buraya bırakın",
+ "moveToTrash": "Çöpe Taşı",
+ "moveToTrashConfirm": "\"{{name}}\" çöpe taşınsın mı?",
+ "cancel": "İptal"
+ },
+ "goToLine": {
+ "title": "Satıra Git",
+ "position": "(geçerli: {{current}}, toplam: {{total}})",
+ "placeholder": "Satır numarası, +ofset, -ofset veya %",
+ "go": "Git"
+ },
+ "searchPanel": {
+ "previousMatch": "Önceki Eşleşme",
+ "nextMatch": "Sonraki Eşleşme",
+ "close": "Kapat",
+ "replacePlaceholder": "Değiştir",
+ "replace": "Değiştir",
+ "replaceNext": "Sonrakini Değiştir",
+ "all": "Tümü",
+ "replaceAll": "Tümünü Değiştir"
+ },
+ "statusBar": {
+ "position": "Sat {{line}}, Süt {{col}}",
+ "enableWatcher": "Dosya izleyiciyi etkinleştir",
+ "disableWatcher": "Dosya izleyiciyi devre dışı bırak",
+ "watch": "izle",
+ "watching": "izleniyor",
+ "watchExternalChanges": "Harici değişiklikleri izle",
+ "disableExternalWatcher": "Harici değişiklik izleyiciyi devre dışı bırak",
+ "encodingUtf8": "UTF-8",
+ "spaces": "Boşluklar: {{count}}"
+ },
+ "imagePreview": {
+ "loading": "Önizleme yükleniyor...",
+ "openFullSize": "Tam boyut önizlemeyi aç",
+ "openSystemViewer": "Sistem Görüntüleyicide Aç"
+ },
+ "quickOpen": {
+ "title": "Hızlı Aç",
+ "searchPlaceholder": "Dosyaları ada göre ara...",
+ "loading": "Dosyalar yükleniyor...",
+ "empty": "Dosya bulunamadı"
+ },
+ "errorBoundary": {
+ "crashed": "Düzenleyici çöktü",
+ "unknownError": "Bilinmeyen hata"
+ },
+ "binaryPlaceholder": {
+ "file": "İkili dosya ({{size}})"
+ },
+ "unsavedChanges": "Kaydedilmemiş değişiklikler",
+ "empty": {
+ "selectFile": "Düzenlemek için ağaçtan bir dosya seçin"
+ },
+ "search": {
+ "toggleReplace": "Değiştirmeyi Aç/Kapat",
+ "placeholder": "Ara"
+ },
+ "shortcuts": {
+ "title": "Klavye Kısayolları",
+ "groups": {
+ "fileOperations": "Dosya İşlemleri",
+ "search": "Arama",
+ "navigation": "Gezinme",
+ "editing": "Düzenleme",
+ "markdown": "Markdown",
+ "general": "Genel"
+ },
+ "actions": {
+ "quickOpen": "Hızlı Aç",
+ "save": "Kaydet",
+ "saveAll": "Tümünü Kaydet",
+ "closeTab": "Sekmeyi Kapat",
+ "findInFile": "Dosyada Bul",
+ "searchInFiles": "Dosyalarda Ara",
+ "goToLine": "Satıra Git",
+ "nextTab": "Sonraki Sekme",
+ "previousTab": "Önceki Sekme",
+ "cycleTabs": "Sekmeler Arasında Geçiş",
+ "toggleSidebar": "Kenar Çubuğunu Aç/Kapat",
+ "undo": "Geri Al",
+ "redo": "Yinele",
+ "selectNextMatch": "Sonraki Eşleşmeyi Seç",
+ "toggleComment": "Yorumu Aç/Kapat",
+ "splitPreview": "Bölünmüş Önizleme",
+ "fullPreview": "Tam Önizleme",
+ "closeEditor": "Düzenleyiciyi Kapat"
+ }
+ },
+ "toolbar": {
+ "enableWordWrap": "Sözcük kaydırmayı etkinleştir",
+ "disableWordWrap": "Sözcük kaydırmayı devre dışı bırak",
+ "closeSplitPreview": "Bölünmüş önizlemeyi kapat",
+ "closePreview": "Önizlemeyi kapat"
+ }
+ },
+ "launch": {
+ "actions": {
+ "createSchedule": "Zamanlama Oluştur",
+ "creating": "Oluşturuluyor...",
+ "goToDashboard": "Panoya git",
+ "launchTeam": "Ekibi başlat",
+ "launching": "Başlatılıyor...",
+ "relaunchTeam": "Ekibi yeniden başlat",
+ "relaunching": "Yeniden başlatılıyor...",
+ "saveChanges": "Değişiklikleri Kaydet",
+ "saving": "Kaydediliyor..."
+ },
+ "billing": {
+ "prefix": "15 Haziran 2026'dan itibaren Anthropic",
+ "readArticle": "Anthropic makalesini oku",
+ "suffix": "ve Agent SDK kullanımını, etkileşimli Claude Code limitlerinden ayrı olarak aylık Agent SDK kredisinden faturalandırır. Kredi her faturalandırma döneminde sıfırlanır ve kullanılmayan kredi devredilmez."
+ },
+ "conflict": {
+ "description": "Aynı dizinde iki ekip çalıştırmak risklidir - aynı dosyaları düzenlerken çakışabilirler. Yalıtım için farklı bir dizin veya bir git worktree kullanmayı düşünün.",
+ "title": "Bu çalışma dizini için başka bir \"{{team}}\" ekibi zaten çalışıyor",
+ "workingDirectory": "Çalışma dizini:"
+ },
+ "description": {
+ "createSchedule": "Otomatik Claude görev yürütmesini zamanla",
+ "createScheduleForTeam": "\"{{team}}\" ekibi için otomatik çalıştırmaları zamanla",
+ "editSchedule": "\"{{team}}\" ekibi için zamanlama düzenleniyor",
+ "launchPrefix": "Ekibi başlat",
+ "launchSuffix": "yerel Claude CLI aracılığıyla.",
+ "relaunchPrefix": "Şunun geçerli çalıştırmasını durdur:",
+ "relaunchSuffix": "ve yerel Claude CLI aracılığıyla yeniden başlat."
+ },
+ "prepare": {
+ "action": {
+ "launch": "başlatma",
+ "relaunch": "yeniden başlatma"
+ },
+ "blocked": "Çalışma zamanı ortamı kullanılamıyor - {{action}} engellendi",
+ "checkingProviders": "Seçili sağlayıcılar kontrol ediliyor...",
+ "failed": "Seçili sağlayıcılar hazırlanamadı",
+ "preflight": "{{action}} öncesi hataları yakalamak için ön kontrol",
+ "preparingEnvironment": "Ortam hazırlanıyor...",
+ "ready": "Seçili tüm sağlayıcılar hazır.",
+ "readyWithNotes": "Seçili tüm sağlayıcılar hazır, notlarla birlikte.",
+ "unsupportedPreload": "Geçerli preload sürümü team:prepareProvisioning öğesini desteklemiyor. Geliştirme uygulamasını yeniden başlatın.",
+ "selectWorkingDirectory": "Başlatma ortamını doğrulamak için bir çalışma dizini seçin.",
+ "someProvidersNeedAttention": "Seçili bazı sağlayıcıların ilgilenilmesi gerekiyor."
+ },
+ "prompt": {
+ "label": "Komut İstemi",
+ "oneShotPrefix": "Bu komut istemi şuraya iletilecek:",
+ "oneShotSuffix": "tek seferlik yürütme için",
+ "saved": "Kaydedildi",
+ "schedulePlaceholder": "Claude'un zamanlamaya göre yürütmesi için talimatlar...",
+ "teamLeadOptional": "Ekip lideri için komut istemi (isteğe bağlı)",
+ "teamLeadPlaceholder": "Ekip lideri için talimatlar..."
+ },
+ "providerChanged": "Sağlayıcı {{from}} öğesinden {{to}} öğesine değiştirildi. Önceki lider oturumu devam ettirilmeyecek ve yeni çalışma zamanının doğru uygulanması için lider taze bağlamla başlayacak.",
+ "relaunchFreshSession": "Ekip yeniden başlatma taze bir lider oturumu başlatır. Kalıcı ekip durumu, görev panosu ve üye yapılandırması başlatma komut istemine yeniden yüklenir.",
+ "relaunchWarning": {
+ "description": "Bu ayarları kaydetmek geçerli ekip sürecini durduracak, güncellenmiş kadroyu kalıcı hale getirecek ve ekibi yeni çalışma zamanıyla yeniden başlatacaktır.",
+ "title": "Yeniden başlatma geçerli ekip çalıştırmasını yeniden başlatacak"
+ },
+ "schedule": {
+ "labelOptional": "Etiket (isteğe bağlı)",
+ "labelPlaceholder": "ör. Günlük kod incelemesi, Gece testleri...",
+ "maxBudgetUsd": "Maks. bütçe (USD)",
+ "maxTurns": "Maks. tur",
+ "noLimit": "Limit yok",
+ "noMatches": "Aramanızla eşleşen ekip yok.",
+ "noTeams": "Kullanılabilir ekip yok. Önce bir ekip oluşturun.",
+ "searchTeams": "Ekiplerde ara...",
+ "selectTeam": "Bir ekip seç...",
+ "team": "Ekip",
+ "title": "Zamanlama"
+ },
+ "title": {
+ "createSchedule": "Zamanlama Oluştur",
+ "editSchedule": "Zamanlamayı Düzenle",
+ "launch": "Ekibi Başlat",
+ "relaunch": "Ekibi Yeniden Başlat"
+ },
+ "errors": {
+ "loadProjectsFailed": "Projeler yüklenemedi",
+ "saveScheduleFailed": "Zamanlama kaydedilemedi",
+ "relaunchFailed": "Ekip yeniden başlatılamadı",
+ "launchFailed": "Ekip başlatılamadı"
+ },
+ "validation": {
+ "openCodeLeadModelRequired": "OpenCode lideri seçili bir model gerektirir.",
+ "openCodeTeammateRequired": "OpenCode lideri en az bir OpenCode takım arkadaşı gerektirir.",
+ "selectWorkingDirectory": "Çalışma dizinini seçin (cwd)",
+ "fixMemberNames": "Başlatmadan önce üye adlarını düzeltin",
+ "memberNamesUnique": "Başlatmadan önce üye adları benzersiz olmalıdır"
+ },
+ "optionalSettings": {
+ "relaunchTitle": "Yeniden başlatma ayarları",
+ "title": "İsteğe bağlı başlatma ayarları",
+ "relaunchDescription": "Ekibi yeniden başlatmadan önce kadroyu ve lider çalışma zamanını gözden geçirin.",
+ "description": "Başlatma akışını proje yoluna odaklı tutun ve yalnızca ekstra kontrol istediğinizde bunu genişletin."
+ }
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Ekibi kopyala",
+ "createTeam": "Ekip Oluştur",
+ "deleteForever": "Kalıcı olarak sil",
+ "deletePermanently": "Kalıcı olarak sil",
+ "deleteTeam": "Ekibi sil",
+ "launching": "Başlatılıyor...",
+ "launchTeam": "Ekibi başlat",
+ "relaunchTeam": "Ekibi yeniden başlat",
+ "restore": "Geri yükle",
+ "restoreTeam": "Ekibi geri yükle",
+ "retry": "Yeniden dene",
+ "stopTeam": "Ekibi durdur",
+ "stopping": "Durduruluyor..."
+ },
+ "electronOnly": {
+ "description": "Tarayıcı modunda, yerel `~/.claude/teams` dizinlerine erişim kullanılamaz.",
+ "title": "Ekipler yalnızca Electron modunda kullanılabilir"
+ },
+ "empty": {
+ "description": "Başlamak için burada bir ekip oluşturun. Listede otomatik olarak görünecek.",
+ "localOnly": "Ekip oluşturma yalnızca yerel Electron modunda kullanılabilir.",
+ "title": "Ekip bulunamadı"
+ },
+ "filter": {
+ "clearAll": "Tümünü temizle",
+ "label": "Ekipleri filtrele",
+ "projectPriority": "Proje önceliği",
+ "status": "Durum"
+ },
+ "loadFailed": "Ekipler yüklenemedi",
+ "loading": "Ekipler yükleniyor...",
+ "localOnly": "Yalnızca yerel Electron modunda kullanılabilir.",
+ "membersCount": "Üyeler: {{count}}",
+ "membersCount_few": "Üyeler: {{count}}",
+ "membersCount_many": "Üyeler: {{count}}",
+ "membersCount_one": "Üye: {{count}}",
+ "membersCount_other": "Üyeler: {{count}}",
+ "noDescription": "Açıklama yok",
+ "noMatches": "Geçerli filtrelerle eşleşen ekip yok",
+ "partial": {
+ "pending": "Son başlatma hâlâ uzlaştırılıyor.",
+ "skipped": "Son başlatma takım arkadaşlarını atladı.",
+ "skippedWithCount": "Son başlatma {{count}}/{{expected}} takım arkadaşını atladı.",
+ "skippedWithCount_few": "Son başlatma {{count}}/{{expected}} takım arkadaşını atladı.",
+ "skippedWithCount_many": "Son başlatma {{count}}/{{expected}} takım arkadaşını atladı.",
+ "skippedWithCount_one": "Son başlatma {{count}}/{{expected}} takım arkadaşını atladı.",
+ "skippedWithCount_other": "Son başlatma {{count}}/{{expected}} takım arkadaşını atladı.",
+ "stopped": "Son başlatma tüm takım arkadaşları katılmadan durdu.",
+ "stoppedWithCount": "Son başlatma {{count}}/{{expected}} takım arkadaşı katılmadan durdu.",
+ "stoppedWithCount_few": "Son başlatma {{count}}/{{expected}} takım arkadaşı katılmadan durdu.",
+ "stoppedWithCount_many": "Son başlatma {{count}}/{{expected}} takım arkadaşı katılmadan durdu.",
+ "stoppedWithCount_one": "Son başlatma {{count}}/{{expected}} takım arkadaşı katılmadan durdu.",
+ "stoppedWithCount_other": "Son başlatma {{count}}/{{expected}} takım arkadaşı katılmadan durdu."
+ },
+ "searchPlaceholder": "Ekiplerde ara...",
+ "sections": {
+ "otherTeams": "Diğer ekipler",
+ "projectTeams": "{{project}} için ekipler",
+ "selectedProject": "seçili proje"
+ },
+ "solo": "Tekli",
+ "status": {
+ "active": "Etkin",
+ "deleted": "Silindi",
+ "launching": "Başlatılıyor...",
+ "offline": "Çevrimdışı",
+ "partialFailure": "Başlatma yarıda başarısız oldu",
+ "partialPending": "Bootstrap beklemede",
+ "partialSkipped": "Başlatma üyeyi atladı",
+ "running": "Çalışıyor"
+ },
+ "title": "Ekip Seç",
+ "trash": "Çöp ({{count}})",
+ "trash_few": "Çöp ({{count}})",
+ "trash_many": "Çöp ({{count}})",
+ "trash_one": "Çöp ({{count}})",
+ "trash_other": "Çöp ({{count}})",
+ "deleteDraft": {
+ "title": "Taslağı sil",
+ "message": "\"{{teamName}}\" taslak ekibi silinsin mi? Bu geri alınamaz.",
+ "confirmLabel": "Sil",
+ "cancelLabel": "İptal"
+ },
+ "moveToTrash": {
+ "title": "Çöpe taşı",
+ "message": "\"{{teamName}}\" ekibi çöpe taşınsın mı? Daha sonra geri yükleyebilirsiniz.",
+ "confirmLabel": "Çöpe taşı",
+ "cancelLabel": "İptal"
+ },
+ "deleteForever": {
+ "title": "Kalıcı olarak sil",
+ "message": "\"{{teamName}}\" ekibi kalıcı olarak silinsin mi? Tüm veriler kaybolacak.",
+ "confirmLabel": "Kalıcı olarak sil",
+ "cancelLabel": "İptal"
+ }
+ },
+ "messageComposer": {
+ "crossTeam": {
+ "hint": "İpucu: Ekipler arası mesajlar hedef ekip liderine gider. Yanıtın size değil de ekip liderinize geri gelmesini istiyorsanız, bunu mesajda açıkça belirtin."
+ },
+ "attachments": {
+ "attachFiles": "Dosya ekle (yapıştır veya sürükle bırak)",
+ "unavailable": "Ekler kullanılamıyor",
+ "disabledHint": "Dosya ekleri çevrimiçi ekip lideri ve çevrimiçi OpenCode takım arkadaşları için desteklenir. Ekleri kaldırın veya alıcıyı değiştirin.",
+ "restrictions": {
+ "crossTeam": "Ekipler arası mesajlar için dosya ekleri desteklenmiyor",
+ "teamOffline": "Dosya eklemek için ekip çevrimiçi olmalıdır",
+ "unsupportedRecipient": "Dosyalar ekip liderine veya OpenCode takım arkadaşlarına gönderilebilir",
+ "openCodeOffline": "OpenCode takım arkadaşları için dosya eklemek üzere ekip çevrimiçi olmalıdır",
+ "sending": "Dosya eklemeden önce geçerli mesajın gönderilmesini bekleyin",
+ "maximumReached": "Maksimum ek sayısına ulaşıldı",
+ "leadOnly": "Dosyalar yalnızca ekip liderine gönderilebilir"
+ }
+ },
+ "slash": {
+ "restrictions": {
+ "attachments": "Eğik çizgi komutları canlı bir ekip lideri gerektirir ve eklerle gönderilemez",
+ "crossTeam": "Eğik çizgi komutları yalnızca geçerli ekip liderinde çalıştırılabilir",
+ "notLead": "Eğik çizgi komutları yalnızca ekip liderine gönderilebilir",
+ "leadOffline": "Eğik çizgi komutları ekip liderinin çevrimiçi olmasını gerektirir"
+ }
+ },
+ "status": {
+ "reusedCrossTeamRequest": "Son ekipler arası istek yeniden kullanıldı",
+ "teamOffline": "Ekip çevrimdışı"
+ },
+ "revision": {
+ "editing": "Önceki mesaj düzenleniyor",
+ "cancel": "İptal",
+ "tooltip": "Agent'tan önceki mesajı yok saymasını ve onu yazma alanına geri yüklemesini iste."
+ },
+ "input": {
+ "charsLeft": "{{count}} karakter kaldı",
+ "charsLeft_one": "{{count}} karakter kaldı",
+ "charsLeft_other": "{{count}} karakter kaldı",
+ "teamLaunchingPlaceholder": "Ekip başlatılıyor... mesaj gelen kutusu teslimatı için kuyruğa alınacak.",
+ "crossTeamPlaceholder": "{{team}} ekibine ekipler arası mesaj...",
+ "teamFallback": "ekip",
+ "placeholder": "Bir mesaj yazın... (göndermek için Enter, yeni satır için Shift+Enter)",
+ "slashTip": "İpucu: Herhangi bir Claude komutunu çalıştırmak için \"/\" kullanabilirsiniz.",
+ "charsLeft_few": "{{count}} karakter kaldı",
+ "charsLeft_many": "{{count}} karakter kaldı"
+ },
+ "teamSelector": {
+ "thisTeam": "Bu ekip",
+ "current": "geçerli",
+ "online": "çevrimiçi",
+ "offline": "çevrimdışı",
+ "onlineTitle": "Çevrimiçi",
+ "offlineTitle": "Çevrimdışı"
+ },
+ "recipient": {
+ "select": "Seç...",
+ "searchPlaceholder": "Ara...",
+ "noResults": "Sonuç yok"
+ },
+ "actions": {
+ "voiceToText": "Sesten metne",
+ "send": "Gönder",
+ "sendingUnavailableLaunching": "Ekip başlatılırken gönderme kullanılamaz"
+ }
+ },
+ "claudeLogs": {
+ "filter": {
+ "ariaLabel": "Günlükleri filtrele",
+ "tooltip": "Günlükleri filtrele",
+ "sections": {
+ "stream": "Akış",
+ "content": "İçerik"
+ },
+ "kinds": {
+ "output": "Çıktı",
+ "thinking": "Düşünme",
+ "tool": "Araç çağrıları"
+ },
+ "actions": {
+ "reset": "Sıfırla",
+ "save": "Kaydet"
+ },
+ "streams": {
+ "stdout": "stdout",
+ "stderr": "stderr"
+ }
+ },
+ "rawLineCount": "{{formattedCount}} ham satır",
+ "rawLineCount_one": "{{formattedCount}} ham satır",
+ "rawLinesCaptured": "{{count}} yakalandı",
+ "emptyRawLogs": "{{count}}; henüz hiçbiri asistan/araç çıktısı değil.",
+ "noLogsYet": "Henüz günlük yok.",
+ "teamNotRunning": "Ekip çalışmıyor.",
+ "searchPlaceholder": "Günlüklerde ara...",
+ "clearSearch": "Aramayı temizle",
+ "newCount": "+{{count}} yeni",
+ "loading": "Yükleniyor...",
+ "showMore": "Daha fazla göster",
+ "noLogsCaptured": "Yakalanan günlük yok.",
+ "noMatchingLogs": "Eşleşen günlük yok.",
+ "rawLineCount_few": "{{formattedCount}} ham satır",
+ "rawLineCount_many": "{{formattedCount}} ham satır",
+ "rawLineCount_other": "{{formattedCount}} ham satır",
+ "openFullscreen": "Tam ekran günlükleri aç",
+ "fullscreen": "Tam ekran",
+ "viewingFullscreen": "Tam ekran modunda görüntüleniyor",
+ "logsTitle": "Günlükler",
+ "sourceSelect": {
+ "placeholder": "Günlük kaynağı seç...",
+ "searchPlaceholder": "Günlük kaynaklarında ara...",
+ "emptyMessage": "Günlük kaynağı bulunamadı.",
+ "ariaLabel": "Günlük kaynağı",
+ "leadLabel": "Lider",
+ "selectSourceEmpty": "Bir günlük kaynağı seçin.",
+ "leadDescription": "Ekip Lideri",
+ "removedLabel": "kaldırıldı",
+ "removedDescription": "Kaldırıldı"
+ }
+ },
+ "agentGraph": {
+ "popover": {
+ "externalTeam": "Harici ekip",
+ "process": {
+ "startedBy": "Başlatan:",
+ "at": "Zaman:",
+ "openUrl": "URL'yi aç"
+ },
+ "overflow": {
+ "hiddenTasks": "Gizli görevler",
+ "empty": "Kullanılabilir gizli görev yok."
+ },
+ "member": {
+ "lead": "Lider",
+ "workingOn": "üzerinde çalışıyor",
+ "recentTools": "Son araçlar",
+ "spawn": {
+ "waitingToStart": "başlamayı bekliyor",
+ "starting": "başlıyor",
+ "failed": "başarısız"
+ },
+ "state": {
+ "active": "etkin",
+ "idle": "boşta",
+ "offline": "çevrimdışı",
+ "runningTool": "araç çalıştırıyor"
+ },
+ "activeTool": {
+ "running": "Araç çalışıyor",
+ "failed": "Araç başarısız oldu",
+ "finished": "Araç tamamlandı"
+ },
+ "actions": {
+ "message": "Mesaj",
+ "profile": "Profil",
+ "task": "Görev"
+ }
+ }
+ },
+ "logPreview": {
+ "logs": "Günlükler",
+ "loading": "Günlükler yükleniyor",
+ "more": "+{{count}} daha",
+ "more_one": "+{{count}} daha",
+ "more_other": "+{{count}} daha",
+ "more_few": "+{{count}} daha",
+ "more_many": "+{{count}} daha",
+ "unsupportedProvider": "Desteklenmeyen sağlayıcı",
+ "openCodeLogsDelayed": "OpenCode günlükleri gecikti",
+ "logsUnavailable": "Günlükler kullanılamıyor",
+ "noRecentLogs": "Son günlük yok",
+ "toolError": "Araç hatası",
+ "toolResult": "Araç sonucu",
+ "toolUse": "Araç kullanımı",
+ "thinking": "Düşünme",
+ "error": "Hata",
+ "logEvent": "Günlük olayı",
+ "noErrorOutput": "Hata çıktısı yok",
+ "noOutput": "Çıktı yok",
+ "noInput": "Girdi yok"
+ },
+ "blockingEdge": {
+ "title": "Engelleyen Bağımlılık",
+ "blocks": "engelliyor",
+ "close": "Kapat",
+ "blockingHiddenTasks": "Engelleyen gizli görevler",
+ "blockedHiddenTasks": "Engellenen gizli görevler",
+ "links_one": "{{count}} bağlantı",
+ "links_other": "{{count}} bağlantı",
+ "hiddenBlockingLinks_one": "{{count}} gizli engelleyen bağlantı",
+ "hiddenBlockingLinks_other": "{{count}} gizli engelleyen bağlantı",
+ "hiddenTaskStack": "Gizli görev yığını",
+ "hiddenTasks_one": "{{count}} gizli görev",
+ "hiddenTasks_other": "{{count}} gizli görev",
+ "task": "Görev",
+ "openBlockerStack": "Engelleyici yığınını aç",
+ "openBlockedStack": "Engellenen yığınını aç",
+ "openBlockerTask": "Engelleyici görevi aç",
+ "openBlockedTask": "Engellenen görevi aç"
+ },
+ "activityHud": {
+ "activity": "Etkinlik",
+ "noRecentActivity": "Son etkinlik yok",
+ "more": "+{{count}} daha",
+ "more_one": "+{{count}} daha",
+ "more_other": "+{{count}} daha",
+ "more_few": "+{{count}} daha",
+ "more_many": "+{{count}} daha"
+ },
+ "provisioning": {
+ "launchDetails": "Başlatma ayrıntıları",
+ "launchDetailsDescription": "Ayrıntılı ekip başlatma ilerlemesi, canlı çıktı ve CLI günlükleri."
+ }
+ },
+ "projectPath": {
+ "label": "Proje",
+ "source": {
+ "claude": "Claude tarafından bulundu",
+ "codex": "Codex tarafından bulundu",
+ "mixed": "Claude ve Codex tarafından bulundu"
+ },
+ "deleted": {
+ "title": "Proje klasörü artık mevcut değil",
+ "label": "Silindi"
+ },
+ "mode": {
+ "projectList": "Proje listesinden",
+ "customPath": "Özel yol"
+ },
+ "loadingProjects": "Projeler yükleniyor...",
+ "selectProject": "Bir proje seç...",
+ "searchPlaceholder": "Projeyi ada veya yola göre ara",
+ "empty": "Hiçbir şey bulunamadı",
+ "selectFromList": "Listeden bir proje seçin",
+ "noProjects": "Proje bulunamadı, özel yola geçin.",
+ "customWorkingDirectory": "Özel çalışma dizini",
+ "browse": "Gözat",
+ "createAutomatically": "Dizin mevcut değilse otomatik olarak oluşturulacaktır."
+ },
+ "members": {
+ "badges": {
+ "worktree": "worktree"
+ },
+ "runtimeTelemetry": {
+ "title": "Yerel çalışma zamanı yükü",
+ "description": "Yalnızca üst ve alt süreçler. Uzak LLM çıkarımı dahil değildir.",
+ "cpu": "CPU",
+ "memory": "Bellek",
+ "summedRss": "toplam RSS",
+ "sharedHost": "Paylaşılan OpenCode ana bilgisayar metriği. Bu üyeye özel değildir.",
+ "processTreeCapped": "Süreç ağacı bu örnek için sınırlandırıldı.",
+ "rssHint": "RSS paylaşılan sayfaları içerebilir, bu yüzden özel bellek değil bir yük sinyali olarak okunması en iyisidir."
+ },
+ "editor": {
+ "title": "Üyeler",
+ "addMember": "Üye ekle",
+ "editAsJson": "JSON olarak düzenle",
+ "runInSeparateWorktrees": "Takım arkadaşlarını ayrı worktree'lerde çalıştır",
+ "agentTeamsMcpOnly": "Yalnızca Agent Teams MCP",
+ "removedCount": "Kaldırıldı ({{count}})",
+ "removedModelLockReason": "Kaldırılan üyeler yumuşak silme geçmişi için korunur. Ayarları düzenlemek için onları geri yükleyin.",
+ "memberNamesUnique": "Üye adları benzersiz olmalıdır"
+ },
+ "stats": {
+ "computing": "İstatistikler hesaplanıyor...",
+ "empty": "İstatistik yok",
+ "lines": "Satırlar",
+ "linesInfo": "Yaklaşık. Edit ve Write araçları için doğrudur. Bash dosya yazmaları komut kalıplarından (heredoc, echo, sed) tahmin edilir ve eksik bildirilebilir.",
+ "files": "Dosyalar",
+ "toolCalls": "Araç Çağrıları",
+ "tokens": "Token",
+ "toolUsage": "Araç Kullanımı",
+ "filesTouched": "Dokunulan Dosyalar ({{count}})",
+ "viewAllChanges": "Tüm Değişiklikleri Görüntüle",
+ "showLess": "Daha az göster",
+ "moreFiles": "+{{count}} daha",
+ "footer": "{{count}} oturum · {{computedAgo}} hesaplandı",
+ "footer_one": "{{count}} oturum · {{computedAgo}} hesaplandı",
+ "footer_few": "{{count}} oturum · {{computedAgo}} hesaplandı",
+ "footer_many": "{{count}} oturum · {{computedAgo}} hesaplandı",
+ "footer_other": "{{count}} oturum · {{computedAgo}} hesaplandı"
+ },
+ "logs": {
+ "searching": "Günlükler aranıyor...",
+ "empty": "Günlük bulunamadı",
+ "waitingForTaskActivity": "Görev devam ediyor - oturum etkinliği bekleniyor (otomatik yenileniyor)...",
+ "noTaskActivity": "Bu görev için henüz oturum etkinliği yok",
+ "noMemberActivity": "Bu üyenin henüz kaydedilmiş oturum etkinliği yok",
+ "leadSessionTooltip": "Tam ekip lideri oturum günlükleri - genel orkestrasyon bağlamı için yararlı, bu agent'a özel değil",
+ "memberSessionTooltip": "Tam kalıcı takım arkadaşı oturum günlükleri - iş bir alt agent dosyası yerine bir kök üye oturumunda çalıştığında yararlı",
+ "startedAt": "başladı {{time}}",
+ "active": "etkin",
+ "showDetails": "Ayrıntıları göster",
+ "hideDetails": "Ayrıntıları gizle",
+ "loadingDetails": "Ayrıntılar yükleniyor...",
+ "failedToLoadDetails": "Ayrıntılar yüklenemedi"
+ },
+ "detail": {
+ "relaunchOpenCode": "OpenCode'u yeniden başlat",
+ "restart": "Yeniden başlat",
+ "legacyLogsFallback": "Eski Günlükler Yedeği",
+ "copyDiagnostics": "Tanılamayı kopyala",
+ "pid": "PID {{pid}}",
+ "removedAt": "Kaldırıldı {{date}}",
+ "failedToRestartMember": "Üye yeniden başlatılamadı",
+ "sendMessage": "Mesaj Gönder",
+ "assignTask": "Görev Ata",
+ "remove": "Kaldır"
+ },
+ "list": {
+ "loading": "Ekip üyeleri yükleniyor",
+ "unavailable": "Üye kadrosu kullanılamıyor",
+ "unavailableDescription": "{{count}} takım arkadaşı ekip meta verilerinden biliniyor, ancak kadro ayrıntıları eksik.",
+ "unavailableDescription_one": "{{count}} takım arkadaşı ekip meta verilerinden biliniyor, ancak kadro ayrıntıları eksik.",
+ "soloLeadOnly": "Tekli ekip - yalnızca lider",
+ "removedCount": "Kaldırıldı ({{count}})",
+ "unavailableDescription_few": "{{count}} takım arkadaşı ekip meta verilerinden biliniyor, ancak kadro ayrıntıları eksik.",
+ "unavailableDescription_many": "{{count}} takım arkadaşı ekip meta verilerinden biliniyor, ancak kadro ayrıntıları eksik.",
+ "unavailableDescription_other": "{{count}} takım arkadaşı ekip meta verilerinden biliniyor, ancak kadro ayrıntıları eksik."
+ },
+ "executionLog": {
+ "empty": "Görüntülenecek bir şey yok",
+ "emptyUserMessage": "{{time}} - (boş)",
+ "agentInstructions": "Agent talimatları",
+ "memberTurn": "{{member}} turu",
+ "agentTurn": "Agent turu",
+ "turn": "tur"
+ },
+ "recentMessages": {
+ "latest": "En son mesajlar",
+ "latestForMember": "En son mesajlar - {{member}}",
+ "loadMore": "Daha fazla yükle",
+ "expand": "Genişlet",
+ "collapse": "Daralt"
+ },
+ "leadModel": {
+ "defaultModel": "Varsayılan",
+ "providerModelAria": "{{provider}} sağlayıcısı, {{model}}",
+ "leadShort": "lider",
+ "teamLead": "Ekip Lideri",
+ "syncWithTeammates": "Modeli takım arkadaşlarıyla senkronize et",
+ "anthropicTeamWide": "Anthropic ekip geneli",
+ "runtimeInheritance": "Takım arkadaşları kendi sağlayıcılarını veya modellerini ayarlamadıkça lider çalışma zamanı onlara uygulanır.",
+ "anthropicContextLimit": "200K bağlam limiti, bu başlatmada özel Anthropic takım arkadaşları dahil olmak üzere Anthropic çalışma zamanları için ekip genelidir."
+ },
+ "runtimeLogs": {
+ "autoRefresh": "Otomatik yenile",
+ "wrapLines": "Satırları kaydır",
+ "loadingTail": "Süreç günlüğü sonu yükleniyor...",
+ "empty": "Bu üye için henüz yakalanmış süreç günlüğü dosyası yok.",
+ "copy": "Kopyala",
+ "fileEmpty": "Süreç günlüğü dosyası boş.",
+ "showingLast": "Son {{bytes}} gösteriliyor.",
+ "showing": "{{bytes}} gösteriliyor."
+ },
+ "tasks": {
+ "empty": "Bu üyeye atanmış görev yok"
+ },
+ "messages": {
+ "loadOlder": "Eski mesajları yükle",
+ "filters": {
+ "all": "Tümü",
+ "messages": "Mesajlar",
+ "comments": "Yorumlar"
+ },
+ "empty": {
+ "loading": "Etkinlik yükleniyor...",
+ "noComments": "Bu üye için yorum yok",
+ "noLoadedMessages": "Bu üye için henüz yüklenmiş mesaj yok",
+ "noMessages": "Bu üyeyle mesaj yok",
+ "noLoadedActivity": "Bu üye için henüz yüklenmiş etkinlik yok",
+ "noActivity": "Bu üyeyle etkinlik yok"
+ }
+ },
+ "actions": {
+ "openProfile": "Profili aç",
+ "editRole": "Rolü düzenle",
+ "sendMessage": "Mesaj gönder",
+ "assignTask": "Görev ata"
+ },
+ "roleSelect": {
+ "customRolePlaceholder": "Özel rol girin..."
+ }
+ },
+ "schedule": {
+ "count": "{{count}} zamanlama",
+ "count_one": "{{count}} zamanlama",
+ "count_other": "{{count}} zamanlama",
+ "nextRun": "Sonraki: {{next}}",
+ "actions": {
+ "runNow": "Şimdi çalıştır",
+ "edit": "Düzenle",
+ "pause": "Duraklat",
+ "resume": "Devam ettir",
+ "delete": "Sil",
+ "addSchedule": "Zamanlama Ekle"
+ },
+ "runHistory": {
+ "loading": "Çalıştırma geçmişi yükleniyor...",
+ "empty": "Henüz çalıştırma yok"
+ },
+ "count_few": "{{count}} zamanlama",
+ "count_many": "{{count}} zamanlama",
+ "runLog": {
+ "title": "Çalıştırma Günlüğü",
+ "exitCode": "çıkış {{code}}",
+ "retryCount": "yeniden deneme {{count}}/{{max}}",
+ "stillRunning": "Görev hâlâ çalışıyor...",
+ "loadingLogs": "Günlükler yükleniyor...",
+ "errors": "Hatalar",
+ "close": "Kapat"
+ },
+ "cron": {
+ "expression": "Cron ifadesi",
+ "highFrequencyWarning": "Yüksek frekanslı zamanlama (5 dakikadan kısa aralık)",
+ "nextRuns": "Sonraki çalıştırmalar:",
+ "timezone": "Saat dilimi",
+ "selectTimezone": "Saat dilimi seç",
+ "warmUpTime": "Isınma süresi",
+ "warmUpDescription": "Zamanlanmış yürütmeden önce seçili sağlayıcıları hazırlar",
+ "errors": {
+ "enterExpression": "Bir cron ifadesi girin",
+ "invalidExpression": "Geçersiz cron ifadesi"
+ },
+ "presets": {
+ "everyHour": "Her saat",
+ "everySixHours": "Her 6 saatte",
+ "dailyAtNine": "Her gün 09:00'da",
+ "weekdaysAtNine": "Hafta içi 09:00'da",
+ "mondayAtNine": "Pazartesi 09:00'da",
+ "everyThirtyMinutes": "Her 30 dakikada"
+ },
+ "warmUpOptions": {
+ "none": "Isınma yok",
+ "fiveMinutes": "5 dk",
+ "tenMinutes": "10 dk",
+ "fifteenMinutes": "15 dk",
+ "thirtyMinutes": "30 dk"
+ }
+ },
+ "empty": {
+ "title": "Henüz zamanlama yok",
+ "description": "Claude görevlerini cron zamanlamasıyla otomatik olarak çalıştırmak için bir zamanlama oluşturun."
+ },
+ "title": "Zamanlamalar",
+ "status": {
+ "active": "Etkin",
+ "paused": "Duraklatıldı",
+ "disabled": "Devre dışı"
+ },
+ "runStatus": {
+ "pending": "Beklemede",
+ "warmingUp": "Isınıyor",
+ "warm": "Hazır",
+ "running": "Çalışıyor",
+ "completed": "Tamamlandı",
+ "failed": "Başarısız",
+ "interrupted": "Kesildi",
+ "cancelled": "İptal edildi"
+ }
+ },
+ "openCodeContextConfigHint": {
+ "summary": "OpenCode yerel modelleri, yalnızca komut istemi limitleri yerine bir OpenCode bağlam bütçesi kullanabilir.",
+ "description": "Bu takım arkadaşı tarafından kullanılan sağlayıcı ve model için OpenCode yapılandırmasına eşleşen limitler ekleyin. Bu, OpenCode'un yerel modeller bağlam pencerelerini taşırmadan önce sıkıştırıp budamasına yardımcı olur.",
+ "replacePrefix": "Şunu değiştirin:",
+ "and": "ve",
+ "replaceSuffix": "OpenCode kurulumunuzdaki sağlayıcı ve model kimlikleriyle. Şunun gibi komut istemi talimatları:",
+ "promptInstructionsSuffix": "daha zayıftır çünkü istek model bunları okumadan önce birleştirilir.",
+ "providerLimits": "Sağlayıcı limitleri",
+ "compactionConfig": "Sıkıştırma yapılandırması"
+ },
+ "sessions": {
+ "noProjectPath": "Bağlı proje yolu yok",
+ "provisioningHint": "Ekip sağlamasından sonra oturumlar görünecek",
+ "projectNotFound": "Proje bulunamadı",
+ "loading": "Oturumlar yükleniyor...",
+ "empty": "Oturum bulunamadı",
+ "showAllSessions": "Tüm oturumlar için göster",
+ "lead": "lider",
+ "removeFilter": "Filtreyi kaldır",
+ "filterBySession": "Bu oturuma göre filtrele",
+ "openSession": "Oturumu aç",
+ "title": "Oturumlar"
+ },
+ "provisioning": {
+ "pid": "PID {{pid}}",
+ "cancel": "İptal",
+ "moreWarningsHidden": "{{count}} uyarı daha gizli",
+ "diagnostics": "Tanılamalar",
+ "liveOutput": "Canlı çıktı",
+ "diagnosticsCopied": "Tanılamalar kopyalandı",
+ "copyDiagnostics": "Tanılamaları kopyala",
+ "copied": "Kopyalandı",
+ "noOutput": "Henüz yakalanan çıktı yok.",
+ "cliLogs": "CLI günlükleri",
+ "steps": {
+ "starting": "Başlatılıyor",
+ "configuring": "Ekip kurulumu",
+ "assembling": "Üyeler katılıyor",
+ "finalizing": "Sonlandırılıyor"
+ },
+ "providerStatus": {
+ "status": {
+ "checking": "kontrol ediliyor...",
+ "ready": "OK",
+ "notes": "OK (notlar)",
+ "failed": "HATA",
+ "pending": "bekleniyor"
+ },
+ "detailSummary": {
+ "cliBinaryMissing": "CLI ikili dosyası eksik",
+ "openCodeRuntimeMissing": "OpenCode çalışma zamanı eksik",
+ "openCodeWindowsAccessBlocked": "OpenCode Windows erişimi engellendi",
+ "openCodeNoOutput": "OpenCode çalışma zamanı kontrolü çıktı döndürmedi",
+ "openCodeMcpUnreachable": "OpenCode uygulama MCP'sine ulaşılamıyor",
+ "workingDirectoryMissing": "Çalışma dizini eksik",
+ "cliBinaryCouldNotStart": "CLI ikili dosyası başlatılamadı",
+ "cliPreflightIncomplete": "CLI ön kontrolü tamamlanmadı",
+ "authenticationRequired": "Kimlik doğrulama gerekli",
+ "runtimeProviderNotConfigured": "Çalışma zamanı sağlayıcısı yapılandırılmadı",
+ "cliPreflightFailed": "CLI ön kontrolü başarısız oldu",
+ "selectedModelCompatible": "Seçili model uyumlu",
+ "selectedModelCompatibilityPending": "Seçili model uyumluluğu beklemede",
+ "selectedModelAvailable": "Seçili model mevcut",
+ "selectedModelVerified": "Seçili model doğrulandı",
+ "selectedModelUnavailable": "Seçili model kullanılamıyor",
+ "selectedModelTimedOut": "Seçili model doğrulaması zaman aşımına uğradı",
+ "selectedModelCheckFailed": "Seçili model kontrolü başarısız oldu",
+ "selectedModelDeferred": "Seçili model doğrulaması ertelendi",
+ "selectedModelPingNotConfirmed": "Seçili model ping'i onaylanmadı",
+ "readyWithNotes": "Notlarla hazır",
+ "needsAttention": "İlgilenilmesi gerekiyor"
+ },
+ "modelChecksSummary": "Seçili model kontrolleri - {{details}}",
+ "modelParts": {
+ "unavailable": "{{count}} model kullanılamıyor",
+ "unavailable_one": "{{count}} model kullanılamıyor",
+ "unavailable_other": "{{count}} model kullanılamıyor",
+ "checkFailed": "{{count}} model kontrolü başarısız oldu",
+ "checkFailed_one": "{{count}} model kontrolü başarısız oldu",
+ "checkFailed_other": "{{count}} model kontrolü başarısız oldu",
+ "timedOut": "{{count}} model zaman aşımına uğradı",
+ "timedOut_one": "{{count}} model zaman aşımına uğradı",
+ "timedOut_other": "{{count}} model zaman aşımına uğradı",
+ "deferred": "{{count}} doğrulama ertelendi",
+ "deferred_one": "{{count}} doğrulama ertelendi",
+ "deferred_other": "{{count}} doğrulama ertelendi",
+ "pingNotConfirmed": "{{count}} ping onaylanmadı",
+ "pingNotConfirmed_one": "{{count}} ping onaylanmadı",
+ "pingNotConfirmed_other": "{{count}} ping onaylanmadı",
+ "compatibilityPending": "{{count}} uyumlu, derin doğrulama beklemede",
+ "compatibilityPending_one": "{{count}} uyumlu, derin doğrulama beklemede",
+ "compatibilityPending_other": "{{count}} uyumlu, derin doğrulama beklemede",
+ "compatible": "{{count}} uyumlu",
+ "compatible_one": "{{count}} uyumlu",
+ "compatible_other": "{{count}} uyumlu",
+ "checking": "{{count}} kontrol ediliyor",
+ "checking_one": "{{count}} kontrol ediliyor",
+ "checking_other": "{{count}} kontrol ediliyor",
+ "available": "{{count}} mevcut",
+ "available_one": "{{count}} mevcut",
+ "available_other": "{{count}} mevcut",
+ "verified": "{{count}} doğrulandı",
+ "verified_one": "{{count}} doğrulandı",
+ "verified_other": "{{count}} doğrulandı",
+ "unavailable_few": "{{count}} model kullanılamıyor",
+ "unavailable_many": "{{count}} model kullanılamıyor",
+ "checkFailed_few": "{{count}} model kontrolü başarısız oldu",
+ "checkFailed_many": "{{count}} model kontrolü başarısız oldu",
+ "timedOut_few": "{{count}} model zaman aşımına uğradı",
+ "timedOut_many": "{{count}} model zaman aşımına uğradı",
+ "deferred_few": "{{count}} doğrulama ertelendi",
+ "deferred_many": "{{count}} doğrulama ertelendi",
+ "pingNotConfirmed_few": "{{count}} ping onaylanmadı",
+ "pingNotConfirmed_many": "{{count}} ping onaylanmadı",
+ "compatibilityPending_few": "{{count}} uyumlu, derin doğrulama beklemede",
+ "compatibilityPending_many": "{{count}} uyumlu, derin doğrulama beklemede",
+ "compatible_few": "{{count}} uyumlu",
+ "compatible_many": "{{count}} uyumlu",
+ "checking_few": "{{count}} kontrol ediliyor",
+ "checking_many": "{{count}} kontrol ediliyor",
+ "available_few": "{{count}} mevcut",
+ "available_many": "{{count}} mevcut",
+ "verified_few": "{{count}} doğrulandı",
+ "verified_many": "{{count}} doğrulandı"
+ },
+ "openProviderSettings": "{{provider}} ayarlarını aç",
+ "copied": "Kopyalandı",
+ "copyDiagnostics": "Tanılamaları kopyala",
+ "deepVerificationPending": "Derin doğrulama hâlâ çalışıyor. OpenCode ücretsiz modelleri yaklaşık 20 saniye sürebilir.",
+ "progress": {
+ "checkingSelectedProviders": "Seçili sağlayıcılar paralel olarak kontrol ediliyor...",
+ "checkingProvider": "{{provider}} sağlayıcısı kontrol ediliyor...",
+ "checkingProviders": "{{providers}} sağlayıcıları kontrol ediliyor..."
+ },
+ "failureHints": {
+ "openCodeAccessDenied": "Klasör izinlerini düzeltin veya projeyi kullanıcı tarafından yazılabilir bir klasöre taşıyın. Yönetici olarak çalıştırmak yalnızca geçici bir çözümdür.",
+ "openCodeBridgeNoOutput": "Uygulamayı ve OpenCode çalışma zamanını yeniden başlatın, ardından tekrar deneyin. Tekrarlarsa tanılamaları kopyalayın.",
+ "workingDirectoryMissing": "Mevcut bir çalışma dizini seçin, ardından bu iletişim kutusunu yeniden açın.",
+ "authenticationRequired": "Gerekli sağlayıcıyı Claude CLI'de doğrulayın, ardından bu iletişim kutusunu yeniden açın.",
+ "runtimeProviderNotConfigured": "Seçili sağlayıcı çalışma zamanını yapılandırın, ardından bu iletişim kutusunu yeniden açın.",
+ "openCodeRuntimeMissing": "Sağlayıcı durum kartından OpenCode çalışma zamanını kurun veya yeniden deneyin, ardından bu iletişim kutusunu yeniden açın.",
+ "openCodeAppMcpUnreachable": "OpenCode uygulama MCP köprüsünü yenilemek için başlatmayı yeniden deneyin. Tekrarlarsa uygulamayı ve OpenCode çalışma zamanını yeniden başlatın.",
+ "cliBinaryMissing": "Yerel Claude CLI ikili dosyasının var olduğundan ve başlatılabildiğinden emin olun, ardından bu iletişim kutusunu yeniden açın.",
+ "default": "Yukarıdaki sorunu çözün, ardından bu iletişim kutusunu yeniden açın.",
+ "openCodeNodeModulesSymlinkPermission": "Agent Teams AI'yi Yönetici olarak çalıştırın, ardından başlatmayı yeniden deneyin."
+ }
+ },
+ "presentation": {
+ "awaitingPermission": "{{count}} takım arkadaşı izin onayı bekliyor",
+ "nameListWithMore": "{{names}}, +{{count}} daha",
+ "waitingForOpenCode": "OpenCode bekleniyor: {{names}}",
+ "bootstrapStalled": "Bootstrap durdu: {{names}}",
+ "bootstrapStalledWithOpenCodeWait": "{{stalled}}; OpenCode bekleniyor: {{names}}",
+ "namedPendingDiagnostic": "{{label}}: {{names}}",
+ "countPendingDiagnostic": "{{count}} {{label}}",
+ "pendingLabels": {
+ "bootstrapStalled": "Bootstrap durdu",
+ "shellOnly": "Yalnızca kabuk",
+ "waitingForBootstrap": "Bootstrap bekleniyor",
+ "bootstrapUnconfirmed": "Bootstrap onaylanmadı",
+ "awaitingPermission": "İzin bekleniyor",
+ "waitingForRuntime": "Çalışma zamanı bekleniyor",
+ "shellOnlyLower": "yalnızca kabuk",
+ "waitingForBootstrapLower": "bootstrap bekleniyor",
+ "bootstrapUnconfirmedLower": "bootstrap onaylanmadı",
+ "awaitingPermissionLower": "izin bekleniyor",
+ "waitingForRuntimeLower": "çalışma zamanı bekleniyor"
+ },
+ "failed": {
+ "memberFailedToStart": "{{name}} başlatılamadı",
+ "teammatesFailedToStart": "{{count}} takım arkadaşı başlatılamadı",
+ "teammatesFailedRatio": "{{count}}/{{total}} takım arkadaşı başlatılamadı"
+ },
+ "skipped": {
+ "memberSkipped": "{{name}} bu başlatma için atlandı",
+ "memberSkippedWithReason": "{{name}} bu başlatma için atlandı - {{reason}}",
+ "memberSkippedCompact": "{{name}} atlandı",
+ "teammatesSkipped": "{{count}} takım arkadaşı atlandı",
+ "teammatesSkippedList": "Atlanan takım arkadaşları: {{list}}",
+ "teammatesSkippedRatio": "{{count}}/{{total}} takım arkadaşı bu başlatma için atlandı"
+ },
+ "joining": {
+ "teammatesStillJoining": "{{count}} takım arkadaşı hâlâ katılıyor",
+ "teammatesStillJoining_one": "{{count}} takım arkadaşı hâlâ katılıyor",
+ "teammatesStillJoining_few": "{{count}} takım arkadaşı hâlâ katılıyor",
+ "teammatesStillJoining_many": "{{count}} takım arkadaşı hâlâ katılıyor",
+ "teammatesStillJoining_other": "{{count}} takım arkadaşı hâlâ katılıyor",
+ "teammatesConfirmedRatio": "{{count}}/{{total}} takım arkadaşı onaylandı"
+ },
+ "ready": {
+ "leadOnline": "Lider çevrimiçi",
+ "allTeammatesJoined": "Tüm {{count}} takım arkadaşı katıldı",
+ "teamProvisionedLeadOnline": "Ekip sağlandı - lider çevrimiçi",
+ "teamProvisionedAllJoined": "Ekip sağlandı - tüm {{count}} takım arkadaşı katıldı",
+ "teamProvisionedStillJoining": "Ekip sağlandı - takım arkadaşları hâlâ katılıyor",
+ "launchFinishedWithErrors": "Başlatma hatalarla bitti - {{count}}/{{total}} takım arkadaşı başlatılamadı",
+ "launchContinuedSkipped": "Başlatma devam etti - {{count}}/{{total}} takım arkadaşı atlandı",
+ "teamLaunchedLeadOnline": "Ekip başlatıldı - lider çevrimiçi",
+ "teamLaunchedAllJoined": "Ekip başlatıldı - tüm {{count}} takım arkadaşı katıldı"
+ },
+ "panel": {
+ "launchFailed": "Başlatma başarısız oldu",
+ "launchDetails": "Başlatma ayrıntıları",
+ "launchFinishedWithErrors": "Başlatma hatalarla bitti",
+ "launchContinuedSkipped": "Başlatma atlanan takım arkadaşlarıyla devam etti",
+ "coreTeamReady": "Çekirdek ekip hazır",
+ "finishingLaunch": "Başlatma bitiriliyor",
+ "teamLaunched": "Ekip başlatıldı",
+ "launchingTeam": "Ekip başlatılıyor"
+ }
+ }
+ },
+ "liveRuntimeStatus": {
+ "title": "Canlı çalışma zamanı durumu",
+ "description": "Yalnızca görüntüleme amaçlı kalp atışı ve başlatma durumu. Süreç kontrolleri aşağıda kalır.",
+ "source": "kaynak: {{source}}",
+ "lane": "{{lane}} şeridi",
+ "diagnosticOnly": "Yalnızca tanılama",
+ "updated": "güncellendi {{value}}",
+ "states": {
+ "running": "Çalışıyor",
+ "starting": "Başlatılıyor",
+ "waiting": "Bekleniyor",
+ "degraded": "İlgilenilmesi gerekiyor",
+ "stopped": "Durduruldu",
+ "unknown": "Bilinmiyor"
+ }
+ },
+ "taskLogs": {
+ "exact": {
+ "title": "Tam Görev Günlükleri",
+ "loading": "Tam görev günlükleri yükleniyor...",
+ "description": "Günlüklerde kullanılan aynı yürütme günlüğü bileşenleriyle işlenen tam transkript dilimleri.",
+ "emptyTitle": "Henüz tam görev günlüğü yok",
+ "emptyDescription": "Açık görev bağlantılı transkript meta verileri mevcut olduğunda tam transkript paketleri burada görünecek.",
+ "summaryOnly": "yalnızca özet"
+ },
+ "executionSessions": {
+ "title": "Yürütme Oturumları",
+ "online": "Çevrimiçi",
+ "updating": "Güncelleniyor...",
+ "description": "Eski oturum odaklı transkript tarama ve önizlemeleri."
+ },
+ "stream": {
+ "title": "Görev Günlüğü Akışı"
+ }
+ },
+ "kanban": {
+ "taskCard": {
+ "cancelTask": "{{taskId}} görevini iptal et",
+ "cancel": "İptal",
+ "moveBackToTodoConfirm": "Bu görev YAPILACAK'a geri taşınsın ve ekip bilgilendirilsin mi?",
+ "confirm": "Onayla",
+ "keep": "Koru",
+ "changesNeedAttention": "Değişikliklerin ilgilenilmesi gerekiyor",
+ "changes": "Değişiklikler",
+ "deleteTask": "Görevi sil",
+ "taskLogsActive": "Görev günlükleri etkin",
+ "newTaskLogsArriving": "Yeni görev günlükleri geliyor",
+ "awaitingUser": "Kullanıcı bekleniyor",
+ "awaitingLead": "Lider bekleniyor",
+ "blockedBy": "Şununla engellendi:",
+ "blocks": "Şunu engelliyor:",
+ "start": "Başlat",
+ "complete": "Tamamla",
+ "approve": "Onayla",
+ "requestReview": "İnceleme iste",
+ "manualReview": "Manuel inceleme",
+ "requestChanges": "Değişiklik iste"
+ },
+ "filter": {
+ "title": "Görevleri filtrele",
+ "session": "Oturum",
+ "allSessions": "Tüm oturumlar",
+ "teammate": "Takım arkadaşı",
+ "unassigned": "(atanmamış)",
+ "column": "Sütun",
+ "clearAll": "Tümünü temizle"
+ },
+ "board": {
+ "addTask": "Görev ekle",
+ "noTasks": "Görev yok",
+ "showMore": "{{count}} tane daha göster",
+ "hiddenCount": "{{count}} gizli",
+ "trash": "Çöp",
+ "gridView": "Izgara görünümü",
+ "columnsView": "Sütun görünümü"
+ },
+ "trash": {
+ "title": "Çöp",
+ "empty": "Silinmiş görev yok",
+ "subject": "Konu",
+ "owner": "Sahip",
+ "deleted": "Silindi",
+ "unassigned": "Atanmamış",
+ "restoreTask": "Görevi geri yükle",
+ "restore": "Geri yükle",
+ "close": "Kapat"
+ },
+ "sort": {
+ "title": "Görevleri sırala",
+ "sortBy": "Sıralama ölçütü",
+ "reset": "Sıfırla",
+ "options": {
+ "updatedAt": {
+ "label": "Son güncelleme",
+ "description": "Önce yakın zamanda güncellenenler"
+ },
+ "createdAt": {
+ "label": "Oluşturulma",
+ "description": "Önce en yeni"
+ },
+ "owner": {
+ "label": "Sahip",
+ "description": "Atanan kişiye göre alfabetik"
+ },
+ "manual": {
+ "label": "Manuel",
+ "description": "Sürükle bırak sırası"
+ }
+ }
+ },
+ "search": {
+ "clearSearch": "Aramayı temizle",
+ "tasks": "Görevler",
+ "createdAgo": "oluşturuldu {{time}}",
+ "updatedAgo": "güncellendi {{time}}",
+ "placeholder": "Görevlerde ara... (#id veya metin)"
+ },
+ "grid": {
+ "addTask": "Görev ekle",
+ "noTasks": "Görev yok"
+ },
+ "title": "Kanban",
+ "columns": {
+ "todo": "YAPILACAK",
+ "inProgress": "DEVAM EDİYOR",
+ "review": "İNCELEME",
+ "done": "BİTTİ",
+ "approved": "ONAYLANDI"
+ }
+ },
+ "worktreeGitReadiness": {
+ "checking": "Takım arkadaşı worktree'leri için Git deposu durumu kontrol ediliyor...",
+ "ready": "Git worktree'leri hazır.",
+ "readyOnBranch": "Git worktree'leri {{branch}} dalında hazır.",
+ "needsSetup": "Worktree yalıtımı Git kurulumu gerektiriyor",
+ "initialCommitNotice": "İlk commit eylemi tüm geçerli dosyaları şu mesajla hazırlar ve commit'ler:",
+ "initializeRepository": "Git deposunu başlat",
+ "createInitialCommit": "İlk commit'i oluştur",
+ "initialCommitMessage": "chore: initial commit"
+ },
+ "toolApproval": {
+ "settings": "Ayarlar",
+ "autoAllowAllTools": "Tüm araçlara otomatik izin ver",
+ "autoAllowFileEdits": "Dosya düzenlemelerine otomatik izin ver (Edit, Write, NotebookEdit)",
+ "autoAllowSafeCommands": "Güvenli komutlara otomatik izin ver (git, pnpm, npm, ls...)",
+ "onTimeout": "Zaman aşımında:",
+ "after": "sonra",
+ "secondsShort": "sn",
+ "timeoutActions": {
+ "wait": "Sonsuza kadar bekle",
+ "allow": "İzin ver",
+ "deny": "Reddet"
+ },
+ "submit": "Gönder",
+ "allow": "İzin ver",
+ "deny": "Reddet",
+ "allowAll": "Tümüne izin ver",
+ "pendingCount": "{{count}} beklemede",
+ "autoActionIn": "{{time}} içinde otomatik {{action}}",
+ "diff": {
+ "previewChanges": "Değişiklikleri önizle",
+ "readingFile": "Dosya okunuyor...",
+ "binaryFile": "İkili dosya - önizlenemiyor",
+ "truncated": "Dosya 2MB'de kısaltıldı - fark eksik olabilir",
+ "newFile": "Yeni dosya"
+ }
+ },
+ "memberWorkSync": {
+ "details": {
+ "title": "Üye iş senkronizasyonu",
+ "actionableItems": "Eyleme geçirilebilir öğeler",
+ "fingerprint": "Parmak izi",
+ "report": "Rapor",
+ "none": "yok",
+ "shadowWouldNudge": "Gölge hatırlatırdı",
+ "yes": "evet",
+ "no": "hayır",
+ "moreActionableItems": "{{count}} eyleme geçirilebilir öğe daha",
+ "diagnostics": "Tanılamalar: {{diagnostics}}"
+ },
+ "title": "Üye iş senkronizasyonu",
+ "loadingDiagnostics": "Üye iş senkronizasyonu tanılamaları yükleniyor.",
+ "diagnosticsUnavailable": "Üye iş senkronizasyonu tanılamaları kullanılamıyor."
+ },
+ "advancedCli": {
+ "title": "Gelişmiş",
+ "useWorktree": "Worktree kullan",
+ "recent": "Son",
+ "commandPreview": "Komut önizlemesi",
+ "customArguments": "Özel argümanlar",
+ "validate": "Doğrula",
+ "validation": {
+ "allFlagsValid": "Tüm bayraklar geçerli",
+ "unknownFlags": "Bilinmeyen: {{flags}}",
+ "protectedFlags": "Korumalı: {{flags}}",
+ "failed": "Doğrulama başarısız oldu"
+ },
+ "placeholders": {
+ "worktreeName": "worktree-name"
+ }
+ },
+ "processes": {
+ "ago": "{{time}} önce",
+ "stoppedAgo": "durduruldu {{time}} önce",
+ "running": "Çalışıyor",
+ "stopped": "Durduruldu",
+ "stopProcess": "Süreci durdur (SIGTERM)",
+ "kill": "Sonlandır",
+ "openInBrowser": "Tarayıcıda aç",
+ "open": "Aç",
+ "pid": "PID{{pid}}",
+ "title": "CLI Süreçleri"
+ },
+ "taskActivity": {
+ "loadingDetails": "Etkinlik ayrıntıları yükleniyor...",
+ "contextUnavailable": "Bu etkinlik için ayrıntılı transkript bağlamı artık mevcut değil.",
+ "loading": "Görev etkinliği yükleniyor...",
+ "lowSignalOnly": "Henüz önemli görev etkinliği bulunamadı. Düşük düzeyli yürütme ayrıntıları aşağıda Görev Günlüğü Akışı'nda mevcuttur.",
+ "empty": "Mevcut transkriptlerde henüz açık görev etkinliği bulunamadı. Eski veya sezgisel oturum günlükleri yine de aşağıda Yürütme Oturumları'nda mevcut olabilir.",
+ "title": "Görev Etkinliği",
+ "description": "Transkript meta verilerinden bu göreve bağlı önemli açık çalışma zamanı etkinliği."
+ },
+ "sendMessage": {
+ "title": "Mesaj Gönder",
+ "description": "Bir ekip üyesine doğrudan mesaj gönderin.",
+ "recipientLabel": "Alıcı",
+ "selectMemberPlaceholder": "Üye seç...",
+ "messageLabel": "Mesaj",
+ "placeholder": "Mesajınızı yazın... (göndermek için Enter)",
+ "send": "Gönder",
+ "sending": "Gönderiliyor...",
+ "charsLeft": "{{count}} karakter kaldı",
+ "saved": "Kaydedildi",
+ "attachments": {
+ "teamOnlineRequired": "Dosya eklemek için ekip çevrimiçi olmalıdır",
+ "recipientUnsupported": "Dosyalar ekip liderine veya OpenCode takım arkadaşlarına gönderilebilir",
+ "openCodeOnlineRequired": "OpenCode takım arkadaşları için dosya eklemek üzere ekip çevrimiçi olmalıdır",
+ "disabledHint": "Dosya ekleri çevrimiçi ekip lideri ve çevrimiçi OpenCode takım arkadaşları için desteklenir. Ekleri kaldırın veya alıcıyı değiştirin.",
+ "attachFiles": "Dosya ekle (yapıştır veya sürükle bırak)",
+ "unavailable": "Ekler kullanılamıyor"
+ },
+ "quote": {
+ "remove": "Alıntıyı kaldır",
+ "replyingTo": "Şuna yanıt veriliyor:"
+ }
+ },
+ "taskComments": {
+ "cancelReply": "Yanıtı iptal et",
+ "replyingTo": "Şuna yanıt veriliyor:",
+ "placeholder": "Bir yorum ekleyin... (göndermek için Enter)",
+ "attachFile": "Dosya ekle (veya yapıştır)",
+ "voiceToText": "Sesten metne",
+ "comment": "Yorum",
+ "charsLeft": "{{count}} karakter kaldı",
+ "saved": "Kaydedildi",
+ "awaitingReplyFrom": "Şundan yanıt bekleniyor:",
+ "or": "veya"
+ },
+ "taskAttachments": {
+ "dropImageHere": "Görseli buraya bırakın",
+ "attachImage": "Görsel ekle",
+ "pasteOrDragDrop": "veya yapıştır / sürükle bırak",
+ "fromOriginalMessage": "Orijinal mesajdan",
+ "dropFilesHere": "Dosyaları buraya bırakın",
+ "loading": "Ekler yükleniyor..."
+ },
+ "permissions": {
+ "autoApproveAllTools": "Tüm araçları otomatik onayla",
+ "autonomousModeDescription": "Özerk mod: ekip araçları onay olmadan çalışır. Güvenilmeyen kodla dikkatli olun.",
+ "manualModeDescription": "Manuel mod: her araç çağrısını gerçek zamanlı olarak onaylar veya reddedersiniz."
+ },
+ "memberLogStream": {
+ "tabs": {
+ "execution": "Yürütme",
+ "process": "Süreç"
+ },
+ "filters": {
+ "all": "Tümü"
+ },
+ "logs": {
+ "title": "Günlükler",
+ "loading": "Üye günlük akışı yükleniyor...",
+ "emptyTitle": "Bu üye için henüz günlük akışı girişi bulunamadı.",
+ "emptyDescription": "Üye kapsamlı transkript veya çalışma zamanı günlükleri mevcut olduğunda burada görünecek."
+ }
+ },
+ "reviewDialog": {
+ "placeholder": "Neyin değişmesi gerektiğini açıklayın... (göndermek için Enter)",
+ "submit": "Gönder",
+ "charsLeft": "{{count}} karakter kaldı",
+ "saved": "Kaydedildi",
+ "title": "Değişiklik İste"
+ },
+ "dialogs": {
+ "actions": {
+ "openDashboard": "Panoyu Aç",
+ "openTeam": "Ekibi aç",
+ "cancel": "İptal"
+ },
+ "membersJson": {
+ "hide": "JSON'ı gizle"
+ },
+ "optional": {
+ "badge": "İsteğe bağlı"
+ }
+ },
+ "runningTeams": {
+ "title": "Çalışan Ekipler",
+ "status": {
+ "active": "Etkin",
+ "provisioning": "Başlatılıyor",
+ "idle": "Çalışıyor"
+ },
+ "noProject": "Proje yok"
+ },
+ "layout": {
+ "maxPanesReached": "Maksimum {{count}} bölmeye ulaşıldı"
+ },
+ "codexReconnect": {
+ "description": "Codex oturumunuz eski görünüyor. Devam etmek için yeniden bağlanın.",
+ "useCode": "Kodu kullan",
+ "generating": "Oluşturuluyor...",
+ "openLogin": "Girişi aç",
+ "generateLink": "Bağlantı oluştur"
+ },
+ "effortLevel": {
+ "label": "Çaba düzeyi (isteğe bağlı)",
+ "maxDescription": "Maks, zor görevler için modele en fazla muhakeme süresini verir."
+ },
+ "contextLimit": {
+ "limitTo200k": "Bağlamı 200K token ile sınırla",
+ "always200k": "(bu model için her zaman 200K)",
+ "tooltipContent": "Desteklendiğinde başlatmaları 200K token'lık bir bağlam penceresi içinde tutar.",
+ "tooltipTitle": "Bağlam limiti"
+ },
+ "roleSelect": {
+ "noRole": "Rol yok",
+ "customRole": "Özel rol...",
+ "searchPlaceholder": "Rollerde ara...",
+ "empty": "Rol bulunamadı.",
+ "reservedRole": "Bu rol ayrılmıştır",
+ "emptyCustomRole": "Rol boş olamaz"
+ }
+}
diff --git a/src/features/localization/renderer/locales/uk/common.json b/src/features/localization/renderer/locales/uk/common.json
new file mode 100644
index 00000000..4883187f
--- /dev/null
+++ b/src/features/localization/renderer/locales/uk/common.json
@@ -0,0 +1,927 @@
+{
+ "actions": {
+ "cancel": "Скасувати",
+ "close": "Закрити",
+ "copied": "Скопійовано",
+ "copyUrl": "Копіювати URL",
+ "open": "Відкрити",
+ "reveal": "Показати",
+ "retry": "Повторити",
+ "save": "Зберегти",
+ "showLess": "Згорнути",
+ "showMore": "Показати більше",
+ "refresh": "Оновити",
+ "reset": "Скинути",
+ "copyToClipboard": "Копіювати в буфер обміну",
+ "moreActions": "Більше дій",
+ "closeDialog": "Закрити діалог",
+ "goToDashboard": "Перейти на панель",
+ "or": "або",
+ "hide": "Сховати",
+ "resetSelection": "Скинути вибір"
+ },
+ "code": {
+ "line": "рядок {{line}}",
+ "lines": "рядки {{from}}-{{to}}",
+ "moreLines": "(ще {{count}} рядків...)",
+ "moreLines_few": "(ще {{count}} рядки...)",
+ "moreLines_many": "(ще {{count}} рядків...)",
+ "moreLines_one": "(ще {{count}} рядок...)",
+ "moreLines_other": "(ще {{count}} рядків...)",
+ "code": "Код",
+ "preview": "Перегляд",
+ "markdownPreview": "Перегляд Markdown",
+ "linesParenthesized": "(рядки {{from}}-{{to}})",
+ "mermaidSyntaxError": "Синтаксична помилка Mermaid"
+ },
+ "contextBadge": {
+ "badge": "Контекст",
+ "breakdown": {
+ "text": "Текст",
+ "thinking": "Міркування"
+ },
+ "detailsAria": "Деталі ін'єкції контексту",
+ "sectionSummary": "{{title}} ({{count}}) ~{{tokens}} токенів",
+ "sections": {
+ "claudeMdFiles": "Файли CLAUDE.md",
+ "mentionedFiles": "Згадані файли",
+ "taskCoordination": "Координація завдань",
+ "thinkingText": "Міркування + Текст",
+ "toolOutputs": "Вивід інструментів",
+ "userMessages": "Повідомлення користувача"
+ },
+ "title": "Новий контекст, доданий у цьому ході",
+ "tokenCount": "~{{tokens}} токенів",
+ "totalNewTokens": "Усього нових токенів",
+ "turn": "Хід {{turn}}",
+ "sectionSummary_few": "{{title}} ({{count}}) ~{{tokens}} токени",
+ "sectionSummary_many": "{{title}} ({{count}}) ~{{tokens}} токенів",
+ "sectionSummary_one": "{{title}} ({{count}}) ~{{tokens}} токен",
+ "sectionSummary_other": "{{title}} ({{count}}) ~{{tokens}} токенів"
+ },
+ "locales": {
+ "emptyMessage": "Мову не знайдено.",
+ "names": {
+ "ar": "Арабська",
+ "bn": "Бенгальська",
+ "de": "Німецька",
+ "en": "Англійська",
+ "es": "Іспанська",
+ "fa": "Перська",
+ "fil": "Філіппінська",
+ "fr": "Французька",
+ "hi": "Гінді",
+ "id": "Індонезійська",
+ "it": "Італійська",
+ "ja": "Японська",
+ "ko": "Корейська",
+ "mr": "Маратхі",
+ "ms": "Малайська",
+ "nl": "Нідерландська",
+ "pl": "Польська",
+ "pt": "Португальська",
+ "ro": "Румунська",
+ "ru": "Російська",
+ "sw": "Суахілі",
+ "system": "Системна",
+ "ta": "Тамільська",
+ "te": "Телугу",
+ "th": "Тайська",
+ "tr": "Турецька",
+ "uk": "Українська",
+ "ur": "Урду",
+ "vi": "В'єтнамська",
+ "zh": "Китайська"
+ },
+ "searchPlaceholder": "Пошук мови...",
+ "selectPlaceholder": "Виберіть мову застосунку...",
+ "systemWithResolved": "Системна - {{locale}}"
+ },
+ "members": {
+ "emptyMessage": "Учасників не знайдено.",
+ "searchPlaceholder": "Пошук учасників...",
+ "unassigned": "Не призначено",
+ "teammateFallback": "учасник"
+ },
+ "providerRuntime": {
+ "codex": {
+ "install": {
+ "checking": "Перевірка",
+ "downloading": "Завантаження",
+ "installCli": "Встановити Codex CLI",
+ "installing": "Встановлення",
+ "retryInstall": "Повторити встановлення"
+ }
+ }
+ },
+ "search": {
+ "noMatchingSuggestions": "Немає відповідних пропозицій",
+ "searching": "Пошук...",
+ "searchingFiles": "Пошук файлів...",
+ "findInConversation": "Знайти в розмові...",
+ "resultCount": "{{current}} з {{total}}",
+ "resultCountCapped": "{{current}} з {{total}}+",
+ "noResults": "Немає результатів",
+ "previousResultShortcut": "Попередній результат (Shift+Enter)",
+ "nextResultShortcut": "Наступний результат (Enter)",
+ "closeShortcut": "Закрити (Esc)",
+ "nothingFound": "Нічого не знайдено",
+ "placeholder": "Пошук..."
+ },
+ "schedules": {
+ "actions": {
+ "addSchedule": "Додати розклад",
+ "clearFilters": "Очистити фільтри",
+ "createSchedule": "Створити розклад",
+ "delete": "Видалити",
+ "edit": "Редагувати",
+ "pause": "Призупинити",
+ "resume": "Відновити",
+ "runNow": "Запустити зараз"
+ },
+ "empty": {
+ "description": "Створіть розклад для будь-якої команди, щоб автоматизувати виконання завдань Claude за допомогою cron-виразів. Розклади з усіх команд з'являтимуться тут.",
+ "noMatches": "Жоден розклад не відповідає поточним фільтрам",
+ "title": "Немає запланованих завдань"
+ },
+ "filters": {
+ "allTeams": "Усі команди"
+ },
+ "item": {
+ "loadingRunHistory": "Завантаження історії запусків...",
+ "nextRun": "Далі: {{value}}",
+ "noRunsYet": "Ще немає запусків"
+ },
+ "loading": "Завантаження розкладів...",
+ "searchPlaceholder": "Пошук розкладів...",
+ "status": {
+ "active": "Активний",
+ "all": "Усі",
+ "disabled": "Вимкнено",
+ "paused": "Призупинено"
+ },
+ "title": "Розклади"
+ },
+ "sessions": {
+ "actions": {
+ "hide": "Сховати",
+ "pin": "Закріпити",
+ "unhide": "Показати"
+ },
+ "empty": {
+ "noMatchingSessions": "Немає відповідних сесій",
+ "noMatchingSessionsDescription": "У цьому проєкті поки немає відповідних сесій.",
+ "noMatchingSessionsFiltered": "Спробуйте інший запит або скиньте фільтр провайдера.",
+ "noSessions": "Сесій не знайдено",
+ "noSessionsDescription": "У цьому проєкті поки немає сесій",
+ "selectProject": "Виберіть проєкт, щоб переглянути сесії"
+ },
+ "errors": {
+ "loading": "Помилка завантаження сесій"
+ },
+ "loadedMatchingMore": "Поки що завантажено {{count}} відповідних сесій - прокрутіть униз, щоб завантажити більше.",
+ "loadingMore": "Завантаження додаткових сесій...",
+ "pinned": "Закріплено",
+ "scrollToLoadMore": "Прокрутіть, щоб завантажити більше",
+ "search": {
+ "clear": "Очистити пошук сесій",
+ "placeholder": "Пошук сесій..."
+ },
+ "selection": {
+ "cancel": "Скасувати вибір",
+ "exitMode": "Вийти з режиму вибору",
+ "hideSelected": "Сховати вибрані сесії",
+ "pinSelected": "Закріпити вибрані сесії",
+ "selectSessions": "Вибрати сесії",
+ "selected": "{{count}} вибрано",
+ "unhideSelected": "Показати вибрані сесії",
+ "selected_few": "{{count}} вибрано",
+ "selected_many": "{{count}} вибрано",
+ "selected_one": "{{count}} вибрано",
+ "selected_other": "{{count}} вибрано"
+ },
+ "sort": {
+ "byContext": "За контекстом",
+ "byContextTooltip": "Сортувати за споживанням контексту",
+ "byRecentTooltip": "Сортувати за нещодавніми",
+ "contextLoadedOnly": "Сортування за контекстом ранжує лише завантажені сесії."
+ },
+ "title": "Сесії",
+ "visibility": {
+ "hideHidden": "Сховати приховані сесії",
+ "showHidden": "Показати приховані сесії"
+ },
+ "worktree": {
+ "switch": "Перемкнути Worktree"
+ },
+ "loadedMatchingMore_few": "Поки що завантажено {{count}} відповідні сесії - прокрутіть униз, щоб завантажити більше.",
+ "loadedMatchingMore_many": "Поки що завантажено {{count}} відповідних сесій - прокрутіть униз, щоб завантажити більше.",
+ "loadedMatchingMore_one": "Поки що завантажено {{count}} відповідну сесію - прокрутіть униз, щоб завантажити більше.",
+ "loadedMatchingMore_other": "Поки що завантажено {{count}} відповідних сесій - прокрутіть униз, щоб завантажити більше.",
+ "failedToLoad": "Не вдалося завантажити сесію",
+ "loading": "Завантаження сесії...",
+ "filter": {
+ "title": "Фільтрувати сесії"
+ },
+ "count": "{{count}} сесій",
+ "count_one": "{{count}} сесія",
+ "count_other": "{{count}} сесій",
+ "count_few": "{{count}} сесії",
+ "count_many": "{{count}} сесій",
+ "inProgress": "Сесія триває..."
+ },
+ "states": {
+ "loading": "Завантаження...",
+ "offline": "Офлайн",
+ "online": "Онлайн",
+ "unknown": "Невідомо",
+ "error": "Помилка"
+ },
+ "markdown": {
+ "imageFallback": "[Зображення: {{label}}]",
+ "largeContentNotice": "Вміст дуже великий ({{count}} симв.). Показано без обробки, щоб інтерфейс залишався швидким.",
+ "largeContentTitle": "Великий вміст показано без обробки, щоб запобігти зависанню інтерфейсу",
+ "raw": "Без обробки",
+ "rawPreview": "Перегляд без обробки",
+ "renderMarkdown": "Відрендерити markdown",
+ "showAll": "Показати все",
+ "showMore": "Показати більше",
+ "showRaw": "Показати без обробки",
+ "showingChars": "Показано {{shown}} / {{total}} симв.",
+ "largeContentNotice_few": "Вміст дуже великий ({{count}} симв.). Показано без обробки, щоб інтерфейс залишався швидким.",
+ "largeContentNotice_many": "Вміст дуже великий ({{count}} симв.). Показано без обробки, щоб інтерфейс залишався швидким.",
+ "largeContentNotice_one": "Вміст дуже великий ({{count}} симв.). Показано без обробки, щоб інтерфейс залишався швидким.",
+ "largeContentNotice_other": "Вміст дуже великий ({{count}} симв.). Показано без обробки, щоб інтерфейс залишався швидким."
+ },
+ "terminal": {
+ "checkOutputForDetails": "Перевірте вивід терміналу вище щодо деталей",
+ "closingInSeconds": "Закриття через {{count}} с...",
+ "closingInSeconds_few": "Закриття через {{count}} с...",
+ "closingInSeconds_many": "Закриття через {{count}} с...",
+ "closingInSeconds_one": "Закриття через {{count}} с...",
+ "closingInSeconds_other": "Закриття через {{count}} с...",
+ "completedSuccessfully": "Успішно завершено",
+ "exitCode": "(код виходу {{code}})",
+ "processFailed": "Процес завершився з помилкою",
+ "title": "Термінал"
+ },
+ "tokens": {
+ "accumulatedWithoutDuplication": "Накопичено за всю сесію без дублювання",
+ "cacheRead": "Читання з кешу",
+ "cacheWrite": "Запис у кеш",
+ "costUsd": "Вартість (USD)",
+ "inputTokens": "Вхідні токени",
+ "model": "Модель",
+ "outputTokens": "Вихідні токени",
+ "phase": "Фаза {{phase}}/{{total}}",
+ "promptInputShare": "{{percent}}% вхідного промпту",
+ "taskCoordination": "Координація завдань",
+ "thinkingText": "Міркування + Текст",
+ "toolOutputs": "Вивід інструментів",
+ "total": "Усього",
+ "userMessages": "Повідомлення користувача",
+ "visibleContext": "Видимий контекст",
+ "includesClaudeMd": "вкл. CLAUDE.md ×{{count}}",
+ "claudeMd": "CLAUDE.md",
+ "mentionedFiles": "@файли",
+ "percentValue": "({{percent}}%)",
+ "approxTokens": "~{{tokens}} токенів",
+ "approxTokensParenthesized": "(~{{tokens}})"
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Копіювати команду",
+ "createTeam": "Створити команду",
+ "deleteForever": "Видалити назавжди",
+ "deletePermanently": "Видалити остаточно",
+ "deleteTeam": "Видалити команду",
+ "launching": "Запуск...",
+ "launchTeam": "Запустити команду",
+ "relaunchTeam": "Перезапустити команду",
+ "restore": "Відновити",
+ "restoreTeam": "Відновити команду",
+ "retry": "Повторити",
+ "stopTeam": "Зупинити команду",
+ "stopping": "Зупинення..."
+ },
+ "status": {
+ "active": "Активна",
+ "deleted": "Видалено",
+ "launching": "Запуск...",
+ "offline": "Офлайн",
+ "partialFailure": "Запуск не вдався на півдорозі",
+ "partialPending": "Bootstrap в очікуванні",
+ "partialSkipped": "Запуск пропустив учасника",
+ "running": "Запущено"
+ },
+ "partial": {
+ "pending": "Останній запуск ще узгоджується.",
+ "skipped": "Останній запуск пропустив учасників.",
+ "skippedWithCount": "Останній запуск пропустив {{count}}/{{expected}} учасника.",
+ "skippedWithCount_few": "Останній запуск пропустив {{count}}/{{expected}} учасників.",
+ "skippedWithCount_many": "Останній запуск пропустив {{count}}/{{expected}} учасників.",
+ "skippedWithCount_one": "Останній запуск пропустив {{count}}/{{expected}} учасника.",
+ "skippedWithCount_other": "Останній запуск пропустив {{count}}/{{expected}} учасників.",
+ "stopped": "Останній запуск зупинився до того, як приєдналися всі учасники.",
+ "stoppedWithCount": "Останній запуск зупинився до того, як приєднався {{count}}/{{expected}} учасник.",
+ "stoppedWithCount_few": "Останній запуск зупинився до того, як приєдналися {{count}}/{{expected}} учасники.",
+ "stoppedWithCount_many": "Останній запуск зупинився до того, як приєдналися {{count}}/{{expected}} учасників.",
+ "stoppedWithCount_one": "Останній запуск зупинився до того, як приєднався {{count}}/{{expected}} учасник.",
+ "stoppedWithCount_other": "Останній запуск зупинився до того, як приєдналися {{count}}/{{expected}} учасників."
+ },
+ "noDescription": "Немає опису",
+ "solo": "Соло",
+ "membersCount": "Учасників: {{count}}",
+ "membersCount_few": "Учасників: {{count}}",
+ "membersCount_many": "Учасників: {{count}}",
+ "membersCount_one": "Учасник: {{count}}",
+ "membersCount_other": "Учасників: {{count}}",
+ "all": "Усі",
+ "moreCount": "+{{count}} ще",
+ "moreCount_one": "+{{count}} ще",
+ "moreCount_other": "+{{count}} ще",
+ "moreCount_few": "+{{count}} ще",
+ "moreCount_many": "+{{count}} ще"
+ },
+ "runtimeProvider": {
+ "defaults": {
+ "scopeDescriptionAllProjects": "За замовчуванням для кожного проєкту, який не має власного перевизначення OpenCode.",
+ "scopeDescriptionProject": "Перевизначити лише вибраний проєкт. Запущені команди не змінюються.",
+ "setAllProjectsDefault": "Встановити за замовчуванням для всіх проєктів",
+ "setProjectDefault": "Встановити за замовчуванням для проєкту",
+ "validationContext": "Контекст перевірки",
+ "projectOverrideContext": "Контекст перевизначення проєкту",
+ "selectProjectHint": "Виберіть проєкт перед тестуванням локальних моделей чи збереженням значень за замовчуванням.",
+ "allProjectsHint": "Тести використовують {{project}}. За замовчуванням застосовується, якщо проєкт не має перевизначення.",
+ "projectHint": "Збереження перевизначає лише {{project}}."
+ }
+ },
+ "sessionContext": {
+ "header": {
+ "title": "Контекст",
+ "closePanel": "Закрити панель",
+ "phase": "Фаза:",
+ "current": "Поточна",
+ "view": "Перегляд:",
+ "category": "Категорія",
+ "bySize": "За розміром"
+ },
+ "metrics": {
+ "unavailable": "Недоступно",
+ "contextUsed": "Використано контексту",
+ "promptInput": "Вхід промпту",
+ "visibleContext": "Видимий контекст",
+ "ofContext": "контексту",
+ "ofPrompt": "промпту",
+ "codexTelemetryUnavailable": "Використання Codex на стороні промпту поки не надається поточною телеметрією середовища, тому «Вхід промпту» та «Використано контексту» залишаються недоступними замість показу фіктивного нуля.",
+ "sessionCost": "Вартість сесії:",
+ "parentPlus": "батьківський +",
+ "subagents": "субагенти",
+ "details": "деталі"
+ },
+ "help": {
+ "contextUsed": {
+ "title": "Використано контексту",
+ "description": "Вхід промпту плюс вихідні токени, які наразі займають контекстне вікно моделі."
+ },
+ "promptInput": {
+ "title": "Вхід промпту",
+ "description": "Токени, надіслані моделі перед генерацією. Для Claude це включає `input_tokens + cache_creation_input_tokens + cache_read_input_tokens`."
+ },
+ "visibleContext": {
+ "title": "Видимий контекст",
+ "description": "Підмножина входу промпту, доступна для перевірки: файли, CLAUDE.md, вивід інструментів, повідомлення користувача та подібні ін'єкції, які ви можете оптимізувати безпосередньо."
+ },
+ "availability": {
+ "title": "Доступність",
+ "description": "Якщо середовище провайдера поки не надає використання на стороні промпту, панель показує метрики як недоступні замість того, щоб вдавати, що вони нульові."
+ }
+ },
+ "items": {
+ "turn": "@Хід {{turn}}",
+ "tokensApprox": "~{{tokens}} токенів",
+ "toolsCount": "{{count}} інструментів",
+ "toolsCount_one": "{{count}} інструмент",
+ "toolsCount_other": "{{count}} інструментів",
+ "toolsCount_few": "{{count}} інструменти",
+ "toolsCount_many": "{{count}} інструментів",
+ "itemsCount": "{{count}} елементів",
+ "itemsCount_one": "{{count}} елемент",
+ "itemsCount_other": "{{count}} елементів",
+ "itemsCount_few": "{{count}} елементи",
+ "itemsCount_many": "{{count}} елементів",
+ "missing": "відсутній",
+ "thinking": "Міркування",
+ "text": "Текст"
+ },
+ "empty": "У цій сесії не виявлено ін'єкцій контексту",
+ "view": {
+ "grouped": "Згруповано",
+ "flat": "Списком"
+ },
+ "claudeMdFiles": "Файли CLAUDE.md",
+ "mentionedFiles": "Згадані файли"
+ },
+ "chat": {
+ "subagent": {
+ "fallbackName": "Субагент",
+ "shutdownConfirmed": "Завершення підтверджено",
+ "summary": {
+ "tools": "{{count}} інструментів",
+ "tools_one": "{{count}} інструмент",
+ "tools_other": "{{count}} інструментів",
+ "tools_few": "{{count}} інструменти",
+ "tools_many": "{{count}} інструментів"
+ },
+ "meta": {
+ "type": "Тип",
+ "duration": "Тривалість",
+ "model": "Модель",
+ "id": "ID"
+ },
+ "metrics": {
+ "contextWindow": "Контекстне вікно",
+ "contextUsage": "Використання контексту",
+ "mainContext": "Основний контекст",
+ "totalOutput": "Загальний вихід",
+ "turns": "({{count}} ходів)",
+ "turns_one": "({{count}} хід)",
+ "turns_other": "({{count}} ходів)",
+ "subagentContext": "Контекст субагента",
+ "phase": "Фаза {{phase}}",
+ "turns_few": "({{count}} ходи)",
+ "turns_many": "({{count}} ходів)"
+ },
+ "trace": {
+ "title": "Трасування виконання"
+ }
+ },
+ "user": {
+ "you": "Ви",
+ "showMore": "Показати більше",
+ "showLess": "Згорнути",
+ "backgroundTask": "Фонове завдання",
+ "exitCode": "вихід {{code}}",
+ "imagesAttached": "{{count}} зображень додано",
+ "imagesAttached_one": "{{count}} зображення додано",
+ "imagesAttached_few": "{{count}} зображення додано",
+ "imagesAttached_many": "{{count}} зображень додано",
+ "imagesAttached_other": "{{count}} зображень додано"
+ },
+ "compact": {
+ "toggle": "Перемкнути стиснутий вміст",
+ "contextCompacted": "Контекст стиснуто",
+ "freedTokens": "({{tokens}} звільнено)",
+ "phase": "Фаза {{phase}}",
+ "conversationCompacted": "Розмову стиснуто",
+ "summary": "Попередні повідомлення було підсумовано для економії контексту. Повна історія розмови збережена у файлі сесії.",
+ "compacted": "Стиснуто"
+ },
+ "executionTrace": {
+ "empty": "Немає елементів виконання",
+ "nested": "Вкладено: {{name}}",
+ "input": "Вхід"
+ },
+ "items": {
+ "empty": "Немає елементів для показу"
+ },
+ "tools": {
+ "teammateSpawned": "Учасника створено",
+ "shutdownRequested": "Запит на завершення ->",
+ "noResultReceived": "Результат не отримано",
+ "duration": "Тривалість: {{duration}}",
+ "result": "Результат",
+ "write": {
+ "createdFile": "Створено файл",
+ "wroteToFile": "Записано у файл"
+ },
+ "skill": {
+ "instructions": "Інструкції навички",
+ "unknown": "Невідома навичка"
+ }
+ },
+ "lastOutput": {
+ "requestInterrupted": "Запит перервано користувачем",
+ "planReadyForApproval": "План готовий до затвердження"
+ },
+ "empty": {
+ "icon": "💬",
+ "title": "Немає історії розмови",
+ "description": "Ця сесія поки не містить жодних повідомлень."
+ },
+ "context": {
+ "remainingPercent": "({{percent}}% залишилось)",
+ "count": "Контекст ({{count}})",
+ "count_one": "Контекст ({{count}})",
+ "count_other": "Контекст ({{count}})",
+ "count_few": "Контекст ({{count}})",
+ "count_many": "Контекст ({{count}})"
+ },
+ "scrollToBottom": "Прокрутити вниз",
+ "bottom": "Низ",
+ "teammateMessage": {
+ "message": "Повідомлення",
+ "resent": "Надіслано повторно",
+ "fallback": "Повідомлення учасника"
+ },
+ "system": {
+ "label": "Система"
+ }
+ },
+ "tmuxInstaller": {
+ "summaryTitle": "tmux не встановлено",
+ "detectedOs": "Виявлена ОС: {{os}}",
+ "runtimePath": "Шлях середовища: {{path}}",
+ "phase": "Фаза: {{phase}}",
+ "actions": {
+ "cancel": "Скасувати",
+ "manualGuide": "Ручний посібник",
+ "hideSetupSteps": "Сховати кроки налаштування",
+ "showSetupSteps": "Показати кроки налаштування ({{count}})",
+ "showSetupSteps_one": "Показати крок налаштування ({{count}})",
+ "showSetupSteps_other": "Показати кроки налаштування ({{count}})",
+ "recheck": "Перевірити ще раз",
+ "showSetupSteps_few": "Показати кроки налаштування ({{count}})",
+ "showSetupSteps_many": "Показати кроки налаштування ({{count}})"
+ },
+ "installerProgress": "Прогрес встановлення",
+ "input": {
+ "placeholder": "Надіслати ввід інсталятору",
+ "send": "Надіслати ввід",
+ "passwordNotice": "Введення пароля надсилається безпосередньо в термінал інсталятора й не додається до виводу журналу."
+ },
+ "details": {
+ "show": "Показати деталі",
+ "hide": "Сховати деталі"
+ }
+ },
+ "commandPalette": {
+ "noRecentActivity": "Немає недавньої активності",
+ "sessionsCount": "{{count}} сесій",
+ "sessionsCount_one": "{{count}} сесія",
+ "sessionsCount_other": "{{count}} сесій",
+ "mode": {
+ "searchProjects": "Пошук проєктів",
+ "searchAcrossProjects": "Пошук по всіх проєктах",
+ "searchInProject": "Пошук у проєкті"
+ },
+ "currentProject": "Поточний проєкт",
+ "global": "Глобально",
+ "placeholders": {
+ "projects": "Пошук проєктів...",
+ "conversations": "Пошук розмов..."
+ },
+ "empty": {
+ "noProjectsForQuery": "Проєктів не знайдено для \"{{query}}\"",
+ "noProjects": "Проєктів не знайдено",
+ "minChars": "Введіть щонайменше 2 символи для пошуку",
+ "noFastResults": "Немає швидких результатів у недавніх сесіях для \"{{query}}\"",
+ "noResults": "Результатів не знайдено для \"{{query}}\""
+ },
+ "footer": {
+ "projectsCount": "{{count}} проєктів",
+ "projectsCount_one": "{{count}} проєкт",
+ "projectsCount_other": "{{count}} проєктів",
+ "results": "{{count}} {{speed}}результатів",
+ "results_one": "{{count}} {{speed}}результат",
+ "results_other": "{{count}} {{speed}}результатів",
+ "resultsAcrossProjects": "{{count}} {{speed}}результатів по всіх проєктах",
+ "resultsAcrossProjects_one": "{{count}} {{speed}}результат по всіх проєктах",
+ "resultsAcrossProjects_other": "{{count}} {{speed}}результатів по всіх проєктах",
+ "fastPrefix": "швидких ",
+ "typeToSearch": "Введіть для пошуку",
+ "navigate": "навігація",
+ "select": "вибрати",
+ "open": "відкрити",
+ "global": "глобально",
+ "close": "закрити",
+ "results_few": "{{count}} {{speed}}результати",
+ "results_many": "{{count}} {{speed}}результатів",
+ "resultsAcrossProjects_few": "{{count}} {{speed}}результати по всіх проєктах",
+ "resultsAcrossProjects_many": "{{count}} {{speed}}результатів по всіх проєктах",
+ "projectsCount_few": "{{count}} проєкти",
+ "projectsCount_many": "{{count}} проєктів",
+ "upDownKey": "↑↓",
+ "escapeKey": "esc"
+ },
+ "sessionsCount_few": "{{count}} сесії",
+ "sessionsCount_many": "{{count}} сесій"
+ },
+ "tasksPanel": {
+ "title": "Завдання",
+ "searchPlaceholder": "Пошук завдань...",
+ "pinned": "Закріплено",
+ "groupByLabel": "Групувати за:",
+ "groupByAria": "Групувати за",
+ "groupModes": {
+ "none": "Немає",
+ "project": "Проєкт",
+ "time": "Час"
+ },
+ "showArchived": "Показати архівовані",
+ "hideArchived": "Сховати архівовані",
+ "empty": {
+ "noMatchingTasks": "Немає відповідних завдань",
+ "noTasks": "Завдань не знайдено"
+ },
+ "teamLabel": "Команда: {{team}}",
+ "showMore": "Показати більше",
+ "showLess": "Згорнути",
+ "deleteConfirm": {
+ "title": "Видалити завдання",
+ "message": "Перемістити завдання #{{taskId}} до кошика?",
+ "confirmLabel": "Видалити",
+ "cancelLabel": "Скасувати"
+ },
+ "deleteFailed": {
+ "title": "Не вдалося видалити завдання",
+ "fallbackMessage": "Сталася неочікувана помилка",
+ "confirmLabel": "OK"
+ },
+ "sort": {
+ "byTime": "За часом",
+ "byUnread": "За непрочитаними",
+ "byProject": "За проєктом",
+ "byTeam": "За командою"
+ }
+ },
+ "toolViewer": {
+ "input": "Вхід",
+ "replaceAll": "(замінити все)",
+ "noInputRecorded": "Для цього виклику інструмента не записано вводу.",
+ "agent": {
+ "action": "дія",
+ "teammate": "учасник",
+ "team": "команда",
+ "runtime": "середовище",
+ "type": "тип",
+ "startupInstructionsHidden": "Інструкції запуску приховано в інтерфейсі."
+ }
+ },
+ "taskContextMenu": {
+ "unpin": "Відкріпити",
+ "pin": "Закріпити",
+ "rename": "Перейменувати",
+ "markUnread": "Позначити як непрочитане",
+ "unarchive": "Розархівувати",
+ "archive": "Архівувати",
+ "deleteTask": "Видалити завдання"
+ },
+ "updateDialog": {
+ "closeDialog": "Закрити діалог",
+ "updateAvailable": "Доступне оновлення",
+ "updateReady": "Оновлення готове",
+ "noReleaseNotes": "Немає доступних приміток до випуску.",
+ "viewOnGitHub": "Переглянути на GitHub",
+ "later": "Пізніше",
+ "restartNow": "Перезапустити зараз",
+ "download": "Завантажити"
+ },
+ "errorBoundary": {
+ "title": "Щось пішло не так",
+ "description": "У застосунку сталася неочікувана помилка. Ви можете спробувати перезавантажити сторінку чи скинути стан помилки.",
+ "componentStack": "Стек компонентів",
+ "tryAgain": "Спробувати знову",
+ "copied": "Скопійовано",
+ "copyErrorDetails": "Копіювати деталі помилки",
+ "reportBugOnGitHub": "Повідомити про баг на GitHub",
+ "reloadApp": "Перезавантажити застосунок",
+ "diagnosticsNotice": "Звіти про баги на GitHub і скопійована діагностика включають повідомлення про помилку, трасування стека, версію застосунку, активну вкладку, вибрану команду, контекст завдання та деталі середовища."
+ },
+ "runtimeBackendSelector": {
+ "label": "Бекенд середовища",
+ "resolved": "Визначено: {{backend}}",
+ "current": "Поточний",
+ "recommended": "Рекомендовано",
+ "unavailable": "Недоступно",
+ "cannotSelectYet": "Цей бекенд поки не можна вибрати.",
+ "auto": "Авто",
+ "autoCurrently": "Авто (наразі: {{backend}})",
+ "audience": {
+ "internal": "Внутрішній"
+ },
+ "states": {
+ "locked": "Заблоковано",
+ "disabled": "Вимкнено",
+ "authRequired": "Потрібна автентифікація",
+ "runtimeMissing": "Середовище відсутнє",
+ "degraded": "Погіршено",
+ "unavailable": "Недоступно"
+ }
+ },
+ "providerModelBadges": {
+ "checking": "Перевірка",
+ "unavailable": "Недоступно",
+ "checkFailed": "Перевірка не вдалася",
+ "free": "Безплатно",
+ "freeTooltip": "Повідомлено метаданими OpenCode. Доступність і ліміти можуть змінюватися."
+ },
+ "taskFilters": {
+ "status": "Статус",
+ "clearAll": "Очистити все",
+ "selectAll": "Вибрати все",
+ "team": "Команда",
+ "allTeams": "Усі команди",
+ "searchTeams": "Пошук команд...",
+ "noTeamsFound": "Команд не знайдено",
+ "project": "Проєкт",
+ "allProjects": "Усі проєкти",
+ "searchProjects": "Пошук проєктів...",
+ "noProjects": "Немає проєктів",
+ "comments": "Коментарі",
+ "apply": "Застосувати",
+ "read": {
+ "all": "Усі",
+ "unread": "Непрочитані",
+ "read": "Прочитані"
+ },
+ "statusOptions": {
+ "todo": "TODO",
+ "inProgress": "У ПРОЦЕСІ",
+ "needsFix": "ПОТРЕБУЄ ВИПРАВЛЕНЬ",
+ "done": "ГОТОВО",
+ "review": "ПЕРЕГЛЯД",
+ "approved": "ЗАТВЕРДЖЕНО"
+ }
+ },
+ "sessionItem": {
+ "totalContext": "Загальний контекст: {{tokens}} токенів",
+ "context": "Контекст: {{tokens}}",
+ "phase": "Фаза {{phase}}:",
+ "compactedTo": "(стиснуто до {{tokens}})"
+ },
+ "notifications": {
+ "row": {
+ "team": "команда",
+ "subagent": "субагент",
+ "markAsRead": "Позначити як прочитане",
+ "delete": "Видалити",
+ "viewInSession": "Переглянути в сесії"
+ },
+ "title": "Сповіщення",
+ "loading": "Завантаження сповіщень...",
+ "actions": {
+ "markFilteredAsRead": "Позначити відфільтровані як прочитані",
+ "markAllAsRead": "Позначити всі як прочитані",
+ "markFilteredRead": "Позначити відфільтровані прочитаними",
+ "markAllRead": "Позначити всі прочитаними",
+ "clearFilteredNotifications": "Очистити відфільтровані сповіщення",
+ "clearAllNotifications": "Очистити всі сповіщення",
+ "clickToConfirm": "Натисніть для підтвердження",
+ "clearFiltered": "Очистити відфільтровані",
+ "clearAll": "Очистити все"
+ },
+ "counts": {
+ "unreadInFilter": "{{count}} непрочитаних у фільтрі",
+ "unreadInFilter_one": "{{count}} непрочитане у фільтрі",
+ "unreadInFilter_few": "{{count}} непрочитані у фільтрі",
+ "unreadInFilter_many": "{{count}} непрочитаних у фільтрі",
+ "unreadInFilter_other": "{{count}} непрочитаних у фільтрі",
+ "inFilter": "{{count}} у фільтрі",
+ "inFilter_one": "{{count}} у фільтрі",
+ "inFilter_few": "{{count}} у фільтрі",
+ "inFilter_many": "{{count}} у фільтрі",
+ "inFilter_other": "{{count}} у фільтрі",
+ "unread": "{{count}} непрочитаних",
+ "unread_one": "{{count}} непрочитане",
+ "unread_few": "{{count}} непрочитані",
+ "unread_many": "{{count}} непрочитаних",
+ "unread_other": "{{count}} непрочитаних",
+ "total": "{{count}} загалом",
+ "total_one": "{{count}} загалом",
+ "total_few": "{{count}} загалом",
+ "total_many": "{{count}} загалом",
+ "total_other": "{{count}} загалом"
+ },
+ "filters": {
+ "other": "Інше"
+ },
+ "empty": {
+ "noMatching": "Немає відповідних сповіщень",
+ "noNotifications": "Немає сповіщень",
+ "tryDifferentFilter": "Спробуйте інший фільтр",
+ "allCaughtUp": "Ви все переглянули!"
+ }
+ },
+ "updates": {
+ "restartToUpdate": "Перезапустити для оновлення",
+ "updateApp": "Оновити застосунок",
+ "downloadedRestartTooltip": "Оновлення завантажено, перезапустіть для застосування",
+ "newVersionAvailable": "Доступна нова версія",
+ "updatingApp": "Оновлення застосунку",
+ "updateReady": "Оновлення готове",
+ "restartNow": "Перезапустити зараз"
+ },
+ "layout": {
+ "github": "GitHub",
+ "discord": "Discord",
+ "expandSidebar": "Розгорнути бічну панель",
+ "collapseSidebarShortcut": "Згорнути бічну панель ({{shortcut}})",
+ "sidebarView": "Перегляд бічної панелі",
+ "resizeSidebar": "Змінити розмір бічної панелі",
+ "closeTab": "Закрити вкладку",
+ "openedFromSearch": "Відкрито з пошуку",
+ "pinnedSession": "Закріплена сесія",
+ "jumpToSection": "Перейти до розділу",
+ "newTab": "Нова вкладка",
+ "newTabDashboard": "Нова вкладка (Панель)",
+ "refreshSession": "Оновити сесію",
+ "refreshSessionWithShortcut": "Оновити сесію ({{shortcut}})",
+ "loadingTab": "Завантаження вкладки",
+ "menu": {
+ "teams": "Команди",
+ "settings": "Налаштування",
+ "extensions": "Розширення",
+ "search": "Пошук",
+ "schedules": "Розклади",
+ "docs": "Документація",
+ "exportMarkdown": "Експортувати як Markdown",
+ "exportJson": "Експортувати як JSON",
+ "exportPlainText": "Експортувати як простий текст",
+ "analyzeSession": "Проаналізувати сесію"
+ },
+ "tabMenu": {
+ "closeTabs": "Закрити {{count}} вкладок",
+ "closeTabs_one": "Закрити {{count}} вкладку",
+ "closeTabs_few": "Закрити {{count}} вкладки",
+ "closeTabs_many": "Закрити {{count}} вкладок",
+ "closeTabs_other": "Закрити {{count}} вкладок",
+ "closeTab": "Закрити вкладку",
+ "closeOtherTabs": "Закрити інші вкладки",
+ "splitRight": "Розділити праворуч",
+ "splitLeft": "Розділити ліворуч",
+ "pinToSidebar": "Закріпити на бічній панелі",
+ "unpinFromSidebar": "Відкріпити з бічної панелі",
+ "hideFromSidebar": "Сховати з бічної панелі",
+ "unhideFromSidebar": "Показати на бічній панелі",
+ "closeAllTabs": "Закрити всі вкладки"
+ },
+ "sections": {
+ "team": "Команда",
+ "sessions": "Сесії",
+ "kanban": "Kanban",
+ "claudeLogs": "Журнали",
+ "messages": "Повідомлення"
+ }
+ },
+ "editorFormatting": {
+ "bold": "Жирний",
+ "italic": "Курсив",
+ "strike": "Закреслений",
+ "code": "Код"
+ },
+ "diff": {
+ "changed": "Змінено",
+ "noChangesDetected": "Змін не виявлено"
+ },
+ "codexLogin": {
+ "copyLoginLinkAndCode": "Копіювати посилання для входу ChatGPT і код",
+ "copyLoginLink": "Копіювати посилання для входу ChatGPT",
+ "copyFailed": "Не вдалося скопіювати",
+ "copyLinkAndCode": "Копіювати посилання + код",
+ "copyLink": "Копіювати посилання",
+ "enterCodeOnLoginPage": "Введіть цей код на сторінці входу ChatGPT"
+ },
+ "window": {
+ "minimize": "Згорнути",
+ "maximize": "Розгорнути",
+ "restore": "Відновити"
+ },
+ "context": {
+ "local": "Локальний",
+ "switchingTo": "Перемикання на {{workspace}}",
+ "loadingWorkspace": "Завантаження робочого простору",
+ "switchWorkspace": "Перемкнути робочий простір"
+ },
+ "repositories": {
+ "noneAvailable": "Немає доступних репозиторіїв",
+ "remove": "Видалити репозиторій"
+ },
+ "export": {
+ "session": "Експортувати сесію",
+ "sessionTitle": "Експорт сесії"
+ },
+ "brand": {
+ "claude": "Claude"
+ },
+ "sessionReport": {
+ "noSessionData": "Немає доступних даних сесії",
+ "title": "Звіт сесії"
+ },
+ "sessionFilters": {
+ "project": {
+ "selectProject": "Вибрати проєкт"
+ }
+ },
+ "tasks": {
+ "date": {
+ "updatedPrefix": "онов.",
+ "updatedYesterday": "онов. вчора",
+ "yesterday": "Учора"
+ },
+ "reviewState": {
+ "needsFix": "Потребує виправлень"
+ },
+ "unassigned": "не призначено"
+ }
+}
diff --git a/src/features/localization/renderer/locales/uk/dashboard.json b/src/features/localization/renderer/locales/uk/dashboard.json
new file mode 100644
index 00000000..3a03b8c0
--- /dev/null
+++ b/src/features/localization/renderer/locales/uk/dashboard.json
@@ -0,0 +1,197 @@
+{
+ "cliStatus": {
+ "actions": {
+ "alreadyLoggedIn": "Вже ввійшли?",
+ "becomeSponsor": "Стати спонсором",
+ "cancel": "Скасувати",
+ "checkNow": "Перевірити зараз",
+ "checkUpdates": "Перевірити оновлення",
+ "checking": "Перевірка...",
+ "connect": "Підключити",
+ "extensions": "Розширення",
+ "login": "Увійти",
+ "manage": "Керувати",
+ "manageProviders": "Керувати провайдерами",
+ "plan": "План",
+ "recheck": "Перевірити ще раз",
+ "recheckProvider": "Перевірити ще раз {{provider}}",
+ "retry": "Повторити",
+ "updateTo": "Оновити до v{{version}}",
+ "useCode": "Використати код"
+ },
+ "atlas": {
+ "alt": "Atlas Cloud",
+ "description": "Atlas Cloud — це повномодальна платформа AI-інференсу, яка дає розробникам єдиний AI API для доступу до генерації відео, генерації зображень та LLM API. Замість керування багатьма інтеграціями постачальників ви підключаєтесь один раз і отримуєте уніфікований доступ до понад 300 ретельно відібраних моделей усіх модальностей. Ознайомтеся з новою акцією Atlas Cloud на план для кодування для бюджетнішого доступу до API.",
+ "openCodeProvider": "Провайдер OpenCode",
+ "plan": "План для кодування Atlas Cloud",
+ "sponsor": "Спонсор"
+ },
+ "errors": {
+ "checkStatusFailed": "Не вдалося перевірити статус CLI",
+ "installationFailed": "Не вдалося встановити",
+ "refreshFailed": "Не вдалося перевірити оновлення. Перевірте мережеве з'єднання та спробуйте знову.",
+ "runtimeUpdatedRefreshFailed": "Середовище оновлено, але не вдалося оновити статус провайдера."
+ },
+ "hints": {
+ "backgroundStatus": "Статус {{runtime}} буде перевірено у фоновому режимі.",
+ "codexApiKeyFallback": "{{hint}} Резервний варіант з API-ключем доступний, якщо ви зміните режим автентифікації.",
+ "codexAutoApiKey": "{{hint}} Auto продовжуватиме використовувати API-ключ, доки не буде підключено ChatGPT.",
+ "codexFinishLogin": "Завершіть вхід у ChatGPT у браузері. Введіть показаний код, якщо буде запит.",
+ "codexNoActiveLogin": "Ліміти використання з'являються лише після того, як Codex CLI побачить активний обліковий запис ChatGPT. Зараз він повідомляє про відсутність активного входу в ChatGPT.",
+ "codexNoActiveManagedSession": "Ліміти використання з'являються лише після того, як Codex CLI побачить активний обліковий запис ChatGPT. Локальні дані облікового запису Codex існують, але зараз не вибрано жодної активної керованої сесії.",
+ "codexReconnectNeeded": "Ліміти використання з'являються лише після того, як Codex оновить поточну вибрану сесію ChatGPT. Зараз локальній сесії потрібне повторне підключення.",
+ "firstCheckSlow": "Перша перевірка може зайняти до 30 секунд",
+ "loginRequiredForTeams": "Перегляд сесій і проєктів працює без входу. Вхід потрібен лише для запуску команд агентів.",
+ "troubleshootTitle": "Якщо ви впевнені, що ввійшли, спробуйте ці кроки:"
+ },
+ "installer": {
+ "checkingLatest": "Перевірка найновішої версії...",
+ "downloading": "Завантаження {{runtime}}...",
+ "installing": "Встановлення {{runtime}}...",
+ "success": "{{runtime}} v{{version}} успішно встановлено",
+ "verifying": "Перевірка контрольної суми..."
+ },
+ "labels": {
+ "apiKeyRequired": "Потрібен API-ключ",
+ "comingSoon": "Незабаром",
+ "collapseProviderDetails": "Згорнути деталі провайдера",
+ "expandProviderDetails": "Розгорнути деталі провайдера",
+ "generateLink": "Згенерувати посилання",
+ "loadingRateLimits": "Завантаження лімітів",
+ "loggedOut": "Провайдер вийшов із системи",
+ "loginAuthFailed": "Помилка автентифікації",
+ "loginAuthUpdated": "Автентифікацію оновлено",
+ "loginComplete": "Вхід завершено",
+ "loginFailed": "Не вдалося ввійти",
+ "loginTitle": "Вхід",
+ "logoutFailed": "Не вдалося вийти",
+ "logoutTitle": "Вихід",
+ "notLoggedIn": "Не ввійшли",
+ "openLogin": "Відкрити вхід",
+ "providerActionRequired": "Потрібна дія провайдера",
+ "resets": "скидання {{time}}",
+ "runtimeLoginTitle": "Вхід {{runtime}}"
+ },
+ "loading": {
+ "aiProviders": "Перевірка AI-провайдерів...",
+ "claudeCli": "Перевірка Claude CLI..."
+ },
+ "provider": {
+ "authenticated": "Автентифіковано",
+ "backend": "Бекенд: {{backend}}",
+ "checkingAuthentication": "Перевірка автентифікації...",
+ "checkingProviders": "Перевірка провайдерів...",
+ "configuredLocalCount": "{{count}} налаштованих локальних",
+ "configuredLocalCount_few": "{{count}} налаштовані локальні",
+ "configuredLocalCount_many": "{{count}} налаштованих локальних",
+ "configuredLocalCount_one": "{{count}} налаштований локальний",
+ "configuredLocalCount_other": "{{count}} налаштованих локальних",
+ "configuredLocalTitle": "Локальні маршрути OpenCode, імпортовані з вашої конфігурації OpenCode.",
+ "connectedCount": "Провайдери: {{connected}}/{{denominator}} підключено",
+ "freeModels": "Безплатні моделі",
+ "freeModelsTitle": "OpenCode включає безплатні варіанти моделей, як-от Big Pickle, коли вони доступні у вашій конфігурації. OpenRouter через OpenCode також може надавати безплатні моделі, але не кожна модель OpenCode/OpenRouter є безплатною. Доступність і ліміти можуть змінюватися.",
+ "loadingModels": "Завантаження моделей...",
+ "modelsUnavailable": "Моделі недоступні для цієї збірки середовища",
+ "runtime": "Середовище: {{runtime}}",
+ "verifiedCount": "{{count}} перевірено",
+ "verifiedCount_few": "{{count}} перевірено",
+ "verifiedCount_many": "{{count}} перевірено",
+ "verifiedCount_one": "{{count}} перевірено",
+ "verifiedCount_other": "{{count}} перевірено",
+ "verifiedTitle": "Маршрути OpenCode з успішним підтвердженням виконання."
+ },
+ "runtime": {
+ "configuredHealthCheckFailed": "Налаштоване середовище {{runtime}} не пройшло перевірку працездатності під час запуску.",
+ "configuredNotFound": "Налаштоване середовище {{runtime}} не знайдено.",
+ "foundButFailed": "{{runtime}} знайдено, але не вдалося запустити",
+ "healthCheckFailedDescription": "Застосунок знайшов налаштоване середовище {{runtime}}, але його перевірка працездатності під час запуску не вдалася. Відремонтуйте або перевстановіть його, а потім повторіть.",
+ "install": "Встановити {{runtime}}",
+ "installRequiredDescription": "{{runtime}} потрібен для розгортання команд і керування сесіями. Встановіть його, щоб почати.",
+ "isRequired": "Потрібен {{runtime}}",
+ "reinstall": "Перевстановити {{runtime}}"
+ },
+ "runtimeInstall": {
+ "checking": "Перевірка",
+ "codexTitle": "Встановити Codex CLI у дані застосунку",
+ "downloading": "Завантаження",
+ "downloadingPercent": "Завантаження {{percent}}%",
+ "install": "Встановити",
+ "installing": "Встановлення",
+ "openCodeTitle": "Встановити середовище OpenCode у дані застосунку",
+ "retryInstall": "Повторити встановлення"
+ },
+ "troubleshoot": {
+ "again": "знову",
+ "authStatusCommand": "вашу налаштовану команду перевірки статусу автентифікації CLI",
+ "checkLoggedIn": "- перевірте, чи показує \"Logged in\"",
+ "click": "Натисніть",
+ "loginCommand": "команду входу середовища",
+ "logoutCommand": "команду виходу середовища",
+ "openTerminal": "Відкрийте термінал і виконайте:",
+ "reloginPrefix": "Якщо там сказано, що ви ввійшли, але застосунок цього не бачить, спробуйте:",
+ "sameRuntime": "Переконайтеся, що CLI у вашому терміналі — те саме середовище, яке використовує застосунок",
+ "statusCacheHint": "- інколи статус кешується на кілька секунд",
+ "then": "потім"
+ },
+ "warnings": {
+ "multipleApiKeysMissing": "Один або кілька провайдерів встановлено в режим API-ключа, але жодного API-ключа не налаштовано. Відкрийте «Керувати провайдерами», щоб додати ключі або змінити режим підключення.",
+ "multipleApiKeysNeedAttention": "Один або кілька провайдерів встановлено в режим API-ключа й вони потребують уваги. Відкрийте «Керувати провайдерами», щоб переглянути збережені ключі або змінити режим підключення.",
+ "notAuthenticated": "{{runtime}} встановлено, але ви не автентифіковані. Вхід потрібен для розгортання команд і функцій AI.",
+ "singleApiKeyMissing": "{{provider}} встановлено в режим API-ключа, але жодного API-ключа не налаштовано. Відкрийте «Керувати провайдерами», щоб додати ключ або змінити режим підключення.",
+ "singleApiKeyNeedsAttention": "{{provider}} встановлено в режим API-ключа, але він не підключений. Відкрийте «Керувати провайдерами», щоб переглянути збережений ключ або змінити режим підключення."
+ }
+ },
+ "recentProjects": {
+ "selectFolderTitle": "Виберіть теку проєкту",
+ "selectFolder": "Вибрати теку",
+ "failedToLoad": "Не вдалося завантажити проєкти",
+ "retry": "Повторити",
+ "noProjects": "Проєктів не знайдено",
+ "noMatches": "Немає збігів для \"{{query}}\"",
+ "noRecentProjects": "Недавніх проєктів не знайдено",
+ "emptyDescription": "Недавня активність Claude та Codex з'явиться тут.",
+ "loadMore": "Завантажити більше",
+ "card": {
+ "deleted": "Видалено",
+ "projectFolderMissing": "Теки проєкту більше не існує",
+ "taskCounts": {
+ "active": "{{count}} активних",
+ "active_one": "{{count}} активне",
+ "active_other": "{{count}} активних",
+ "active_few": "{{count}} активні",
+ "active_many": "{{count}} активних",
+ "pending": "{{count}} в очікуванні",
+ "pending_one": "{{count}} в очікуванні",
+ "pending_other": "{{count}} в очікуванні",
+ "pending_few": "{{count}} в очікуванні",
+ "pending_many": "{{count}} в очікуванні",
+ "done": "{{count}} виконано",
+ "done_one": "{{count}} виконано",
+ "done_other": "{{count}} виконано",
+ "done_few": "{{count}} виконано",
+ "done_many": "{{count}} виконано"
+ }
+ },
+ "title": "Недавні проєкти",
+ "searchResults": "Результати пошуку",
+ "searchPlaceholder": "Пошук проєктів..."
+ },
+ "actions": {
+ "selectTeam": "Вибрати команду",
+ "or": "або",
+ "clearSearch": "Очистити пошук"
+ },
+ "windowsAdmin": {
+ "title": "Рекомендується режим адміністратора Windows",
+ "description": "Перевірки середовища OpenCode можуть завершуватися тайм-аутом, якщо Agent Teams AI не запущено з підвищеними правами. Перезапустіть застосунок із «Запуск від імені адміністратора» перед запуском команд OpenCode."
+ },
+ "webPreview": {
+ "title": "Відкрийте десктопний застосунок для повної функціональності",
+ "description": "Браузерна версія ще в розробці. Дії з проєктами, інтеграції та оновлення стану в реальному часі тут можуть бути обмежені. Використовуйте десктопний застосунок для надійного доступу до всіх функцій."
+ },
+ "updateBanner": {
+ "newVersionAvailable": "Доступна нова версія",
+ "restartNow": "Перезапустити зараз",
+ "viewDetails": "Переглянути деталі"
+ }
+}
diff --git a/src/features/localization/renderer/locales/uk/errors.json b/src/features/localization/renderer/locales/uk/errors.json
new file mode 100644
index 00000000..3aec8a6b
--- /dev/null
+++ b/src/features/localization/renderer/locales/uk/errors.json
@@ -0,0 +1,3 @@
+{
+ "fallback": "Щось пішло не так."
+}
diff --git a/src/features/localization/renderer/locales/uk/extensions.json b/src/features/localization/renderer/locales/uk/extensions.json
new file mode 100644
index 00000000..4057fd6d
--- /dev/null
+++ b/src/features/localization/renderer/locales/uk/extensions.json
@@ -0,0 +1,688 @@
+{
+ "store": {
+ "actions": {
+ "addCustom": "Додати власний",
+ "openDashboard": "Відкрити панель",
+ "refreshCatalog": "Оновити каталог"
+ },
+ "capabilities": {
+ "mcp": "MCP: {{status}}",
+ "plugins": "Плагіни: {{status}}",
+ "skills": "Навички: {{status}}"
+ },
+ "desktopOnly": "Доступно лише в десктопному застосунку.",
+ "provider": {
+ "checkingStatus": "Перевірка статусу провайдера...",
+ "connected": "Підключено",
+ "loading": "Завантаження...",
+ "needsSetup": "Потребує налаштування",
+ "readyToConfigure": "Готово до налаштування",
+ "unsupported": "Не підтримується"
+ },
+ "runtime": {
+ "checkingAvailabilityDescription": "Розширенням потрібне налаштоване середовище для керування плагінами, серверами MCP, навичками та підключеннями провайдерів.",
+ "checkingAvailabilityTitle": "Перевірка доступності середовища розширень",
+ "failedToStartDescription": "Розширення вимкнено, доки середовище не пройде перевірку працездатності під час запуску. Відкрийте панель, щоб відремонтувати або перевстановити його.",
+ "failedToStartTitle": "Налаштоване середовище знайдено, але не вдалося запустити",
+ "multimodelCapabilitiesDescription": "Підтримка провайдерів може відрізнятися за розділами. Плагіни показано лише там, де середовище явно оголошує підтримку.",
+ "multimodelCapabilitiesTitle": "Можливості мультимодельного середовища",
+ "needsSignInDescription": "{{runtime}} знайдено{{version}}, але встановлення плагінів вимкнено, доки ви не ввійдете з панелі.",
+ "needsSignInTitle": "{{runtime}} потребує входу",
+ "notAvailableDescription": "Розширення вимкнено, доки середовище не встановлено. Відкрийте панель, щоб встановити його та повторити.",
+ "notAvailableTitle": "Налаштоване середовище недоступне",
+ "readyDescription": "Плагіни можна встановлювати з цієї сторінки{{versionSuffix}}.",
+ "readyTitle": "{{runtime}} готовий",
+ "requiredForMutations": "Налаштоване середовище потрібне для встановлення або видалення розширень. Встановіть або відремонтуйте його з панелі."
+ },
+ "sessionsRestartWarning": "Запущені сесії не застосують зміни розширень, доки їх не перезапустити.",
+ "tabs": {
+ "apiKeys": {
+ "description": "Секретні ключі для онлайн-сервісів. Додайте їх тут, щоб плагіни, сервери та інтеграції могли підключатися й працювати.",
+ "label": "API-ключі"
+ },
+ "mcpServers": {
+ "description": "Підключення до зовнішніх інструментів і застосунків. Вони дають змогу середовищу читати дані чи виконувати дії за межами цього застосунку.",
+ "label": "Сервери MCP"
+ },
+ "plugins": {
+ "description": "Невеликі доповнення для середовища. У мультимодельному режимі вони наразі застосовуються до сесій Anthropic, де це підтримується. Ширша підтримка провайдерів у розробці.",
+ "label": "Плагіни"
+ },
+ "skills": {
+ "description": "Готові інструкції для типових завдань. Вони допомагають середовищу виконувати повторювані завдання послідовніше.",
+ "label": "Навички"
+ }
+ },
+ "title": "Розширення"
+ },
+ "pluginsPanel": {
+ "activeFilters": "{{count}} активних",
+ "browseByFit": "Огляд за відповідністю",
+ "capabilities": "Можливості",
+ "categories": "Категорії",
+ "clearAllFilters": "Очистити всі фільтри",
+ "clearFilters": "Очистити фільтри",
+ "counts": {
+ "capabilities": "{{count}} можливостей",
+ "categories": "{{count}} категорій",
+ "plugins": "{{count}} плагінів",
+ "capabilities_few": "{{count}} можливості",
+ "capabilities_many": "{{count}} можливостей",
+ "capabilities_one": "{{count}} можливість",
+ "capabilities_other": "{{count}} можливостей",
+ "categories_few": "{{count}} категорії",
+ "categories_many": "{{count}} категорій",
+ "categories_one": "{{count}} категорія",
+ "categories_other": "{{count}} категорій",
+ "plugins_few": "{{count}} плагіни",
+ "plugins_many": "{{count}} плагінів",
+ "plugins_one": "{{count}} плагін",
+ "plugins_other": "{{count}} плагінів"
+ },
+ "empty": {
+ "description": "Перевірте пізніше — будуть нові плагіни",
+ "filteredDescription": "Спробуйте змінити пошук або критерії фільтра",
+ "filteredTitle": "Жоден плагін не відповідає вашим фільтрам",
+ "title": "Немає доступних плагінів"
+ },
+ "filterDescription": "Звузьте каталог за категорією, можливістю чи станом встановлення.",
+ "installedOnly": "Лише встановлені",
+ "providerSupportNotice": "Підтримка плагінів наразі гарантована лише для сесій Anthropic (Claude). Ми працюємо над підтримкою плагінів для всіх агентів.",
+ "resultsUpdateInstantly": "Результати оновлюються миттєво, коли ви уточнюєте фільтри.",
+ "searchPlaceholder": "Пошук плагінів...",
+ "selectedCount": "{{count}} вибрано",
+ "showing": "Показано {{shown}} з {{total}} плагінів",
+ "sort": {
+ "category": "Категорія",
+ "nameAsc": "Назва А-Я",
+ "nameDesc": "Назва Я-А",
+ "popular": "Популярні"
+ },
+ "activeFilters_few": "{{count}} активні",
+ "activeFilters_many": "{{count}} активних",
+ "activeFilters_one": "{{count}} активний",
+ "activeFilters_other": "{{count}} активних",
+ "selectedCount_few": "{{count}} вибрано",
+ "selectedCount_many": "{{count}} вибрано",
+ "selectedCount_one": "{{count}} вибрано",
+ "selectedCount_other": "{{count}} вибрано"
+ },
+ "customMcp": {
+ "actions": {
+ "add": "Додати",
+ "cancel": "Скасувати",
+ "install": "Встановити",
+ "installing": "Встановлення..."
+ },
+ "description": "Додайте сервер вручну без каталогу.",
+ "errors": {
+ "installFailed": "Не вдалося встановити",
+ "invalidServerName": "Неправильна назва сервера. Використовуйте літери, цифри, дефіси, підкреслення, крапки.",
+ "npmPackageRequired": "Потрібна назва npm-пакета",
+ "serverNameRequired": "Потрібна назва сервера",
+ "serverUrlRequired": "Потрібна URL-адреса сервера"
+ },
+ "fields": {
+ "environmentVariables": "Змінні середовища",
+ "headers": "Заголовки",
+ "npmPackage": "npm-пакет",
+ "scope": "Область",
+ "serverName": "Назва сервера",
+ "serverUrl": "URL-адреса сервера",
+ "transport": "Транспорт",
+ "transportType": "Тип транспорту",
+ "versionOptional": "Версія (необов'язково)"
+ },
+ "title": "Додати власний сервер MCP",
+ "transport": {
+ "httpSse": "HTTP / SSE",
+ "stdio": "Stdio (npm)"
+ },
+ "placeholders": {
+ "headerName": "Header-Name",
+ "envVarName": "ENV_VAR_NAME",
+ "serverName": "my-server",
+ "latest": "latest",
+ "value": "значення",
+ "serverUrl": "https://api.example.com/mcp"
+ }
+ },
+ "mcpDetail": {
+ "auth": {
+ "remoteMayNeedHeaders": "Віддалені сервери MCP можуть все одно вимагати власних заголовків або API-ключів, навіть якщо реєстр їх не описує. Якщо підключення не вдається після встановлення, перевірте документацію провайдера.",
+ "required": "Цей сервер вимагає автентифікації"
+ },
+ "diagnostics": {
+ "launchTarget": "Ціль запуску"
+ },
+ "form": {
+ "autoFilled": "Заповнено автоматично",
+ "environmentVariables": "Змінні середовища",
+ "headers": "Заголовки",
+ "scope": "Область",
+ "serverName": "Назва сервера"
+ },
+ "install": {
+ "httpTransport": "HTTP: {{transport}}",
+ "manualSetupDescription": "Цей сервер вимагає ручного налаштування. Перевірте репозиторій щодо інструкцій зі встановлення.",
+ "manualSetupRequired": "Потрібне ручне налаштування",
+ "npmPackage": "npm: {{package}}",
+ "manage": "Керувати встановленням",
+ "install": "Встановити сервер"
+ },
+ "links": {
+ "glama": "Glama",
+ "repository": "Репозиторій",
+ "website": "Вебсайт"
+ },
+ "metadata": {
+ "author": "Автор",
+ "githubStars": "Зірки GitHub",
+ "hosting": "Хостинг",
+ "installType": "Тип встановлення",
+ "license": "Ліцензія",
+ "published": "Опубліковано",
+ "source": "Джерело",
+ "updated": "Оновлено",
+ "version": "Версія"
+ },
+ "scope": {
+ "local": "Локальна",
+ "project": "Проєкт"
+ },
+ "tools": {
+ "title": "Інструменти ({{count}})",
+ "title_few": "Інструменти ({{count}})",
+ "title_many": "Інструменти ({{count}})",
+ "title_one": "Інструменти ({{count}})",
+ "title_other": "Інструменти ({{count}})"
+ },
+ "placeholders": {
+ "serverName": "my-server"
+ }
+ },
+ "skillEditor": {
+ "actions": {
+ "cancel": "Скасувати",
+ "createSkill": "Створити навичку",
+ "preparing": "Підготовка...",
+ "reviewAndCreate": "Переглянути й створити",
+ "reviewAndSave": "Переглянути й зберегти",
+ "saveSkill": "Зберегти навичку"
+ },
+ "advanced": {
+ "customDescription": "Ця навичка використовує власний формат markdown, тому редагуйте її безпосередньо тут.",
+ "customTitle": "2. Редактор SKILL.md",
+ "description": "Більшість людей можуть це пропустити. Відкривайте лише якщо хочете прямого контролю над сирим файлом markdown.",
+ "hide": "Сховати розширений редактор",
+ "resetFromStructuredFields": "Скинути зі структурованих полів",
+ "show": "Показати розширений редактор",
+ "title": "4. Розширений редактор SKILL.md"
+ },
+ "basics": {
+ "description": "Дайте цій навичці зрозумілу назву, виберіть, хто може її використовувати, і вирішіть, де вона має зберігатися.",
+ "title": "1. Основи"
+ },
+ "description": {
+ "create": "Опишіть робочий процес простою мовою, перегляньте файли, які буде створено, а потім збережіть його.",
+ "edit": "Оновіть цю навичку, перегляньте отримані зміни файлів, а потім збережіть її."
+ },
+ "extraFiles": {
+ "addedFiles": "Додані файли:",
+ "assets": "Ресурси",
+ "assetsDescription": "Додавайте знімки екрана чи вбудовані медіа лише якщо вони допомагають пояснити робочий процес.",
+ "description": "Додавайте допоміжні документи, скрипти чи ресурси лише якщо ця навичка справді цього потребує.",
+ "lockedForEdits": "Корінь і тека заблоковані для редагування",
+ "optionalDescription": "Додайте стартові файли, які буде включено в перегляд і записано разом із `SKILL.md`.",
+ "optionalTitle": "Необов'язкові файли",
+ "references": "Посилання",
+ "referencesDescription": "Додайте допоміжні документи, посилання чи приклади, на які середовище може звертатися.",
+ "scripts": "Скрипти",
+ "scriptsDescription": "Додайте допоміжні команди чи нотатки з налаштування. Уважно перевіряйте перед тим, як ділитися цією навичкою.",
+ "title": "3. Додаткові файли"
+ },
+ "fields": {
+ "compatibility": "Сумісність",
+ "description": "Опис",
+ "folderName": "Назва теки",
+ "folderNameHint": "Ми пропонуємо це автоматично з назви навички, щоб перегляд працював одразу.",
+ "invocation": "Як її слід використовувати",
+ "license": "Ліцензія",
+ "name": "Назва навички",
+ "notes": "Додаткові нотатки чи запобіжники",
+ "root": "Де зберігати",
+ "scope": "Хто може використовувати",
+ "steps": "Основні кроки для виконання",
+ "whenToUse": "Коли звертатися до цього"
+ },
+ "instructions": {
+ "description": "Ці розділи генерують файл навички за вас, тож вам не потрібно редагувати markdown, якщо ви цього не хочете.",
+ "locked": "Структуровані поля заблоковано, бо ви перейшли до ручного редагування `SKILL.md` нижче.",
+ "title": "2. Інструкції"
+ },
+ "invocation": {
+ "auto": "Можна використовувати автоматично",
+ "manualOnly": "Лише коли ви про це попросите"
+ },
+ "placeholders": {
+ "description": "З чим допомагає ця навичка",
+ "name": "Напишіть стислу назву навички",
+ "notes": "Приклад: Зверніть увагу на відсутні тести, регресії та ризиковані припущення.",
+ "steps": "1. Перевірте відповідні файли.\n2. Спочатку поясніть основний ризик.\n3. Запропонуйте найбезпечніше виправлення.",
+ "whenToUse": "Приклад: Використовуйте це, коли завдання — це запит на код-рев'ю чи розбір багів.",
+ "license": "MIT",
+ "compatibility": "claude-code, cursor"
+ },
+ "review": {
+ "creating": "Створення навички",
+ "hint": "Спочатку перегляньте зміни файлів, потім підтвердьте збереження на наступному кроці.",
+ "saving": "Збереження цієї навички"
+ },
+ "root": {
+ "codexOnly": " - Лише Codex",
+ "shared": " - Спільна"
+ },
+ "scope": {
+ "project": "Проєкт: {{project}}",
+ "projectUnavailable": "Проєкт недоступний",
+ "user": "Користувач"
+ },
+ "title": {
+ "create": "Створити навичку",
+ "edit": "Редагувати навичку"
+ }
+ },
+ "skillDetail": {
+ "actions": {
+ "cancel": "Скасувати",
+ "delete": "Видалити",
+ "deleteSkill": "Видалити навичку",
+ "deleting": "Видалення...",
+ "editSkill": "Редагувати навичку",
+ "openFolder": "Відкрити теку",
+ "openSkillFile": "Відкрити SKILL.md",
+ "retry": "Повторити"
+ },
+ "badges": {
+ "assets": "Ресурси",
+ "autoUse": "Автоматичне використання",
+ "hasScripts": "Містить скрипти",
+ "manualUse": "Ручне використання",
+ "references": "Посилання",
+ "storedIn": "Зберігається в {{root}}"
+ },
+ "deleteDialog": {
+ "description": "Видалити цю навичку й перемістити її до кошика?",
+ "descriptionWithName": "Видалити \"{{name}}\" і перемістити до кошика? За потреби ви зможете відновити її пізніше з кошика.",
+ "title": "Видалити навичку?"
+ },
+ "descriptionFallback": "Перегляньте виявлені метадані навички та сирі інструкції.",
+ "errors": {
+ "deleteFailed": "Не вдалося видалити навичку",
+ "loadFailed": "Не вдалося завантажити цю навичку."
+ },
+ "files": {
+ "advancedDetails": "Розширені деталі файлів",
+ "assets": "Ресурси",
+ "references": "Посилання",
+ "scripts": "Скрипти",
+ "storedAt": "Зберігається в"
+ },
+ "includes": {
+ "assets": "ресурси",
+ "instructionsOnly": "Лише інструкції навички",
+ "references": "посилання",
+ "scripts": "скрипти"
+ },
+ "invocation": {
+ "auto": "Запускається автоматично, коли відповідає завданню.",
+ "manualOnly": "Запускається лише коли ви явно про це попросите."
+ },
+ "issues": {
+ "bundledScripts": "Ця навичка містить вбудовані скрипти",
+ "reviewCarefully": "Уважно перевірте цю навичку перед використанням"
+ },
+ "loading": "Завантаження деталей навички...",
+ "scope": {
+ "personal": "Ваші особисті навички",
+ "projectOnly": "Лише цей проєкт"
+ },
+ "summary": {
+ "howUsed": "Як вона використовується",
+ "included": "Що до неї входить",
+ "whoCanUse": "Хто може використовувати"
+ },
+ "titleFallback": "Деталі навички"
+ },
+ "skillsPanel": {
+ "actions": {
+ "createSkill": "Створити навичку",
+ "import": "Імпортувати"
+ },
+ "badges": {
+ "assets": "Ресурси",
+ "hasScripts": "Містить скрипти",
+ "needsAttention": "Потребує уваги",
+ "references": "Посилання",
+ "storedIn": "Зберігається в {{root}}"
+ },
+ "configuredRuntime": "налаштоване середовище",
+ "counts": {
+ "codexOnly": "{{count}} лише Codex",
+ "personal": "{{count}} особистих",
+ "project": "{{count}} проєктних",
+ "shared": "{{count}} спільних",
+ "total": "{{count}} загалом",
+ "codexOnly_few": "{{count}} лише Codex",
+ "codexOnly_many": "{{count}} лише Codex",
+ "codexOnly_one": "{{count}} лише Codex",
+ "codexOnly_other": "{{count}} лише Codex",
+ "personal_few": "{{count}} особисті",
+ "personal_many": "{{count}} особистих",
+ "personal_one": "{{count}} особиста",
+ "personal_other": "{{count}} особистих",
+ "project_few": "{{count}} проєктні",
+ "project_many": "{{count}} проєктних",
+ "project_one": "{{count}} проєктна",
+ "project_other": "{{count}} проєктних",
+ "shared_few": "{{count}} спільні",
+ "shared_many": "{{count}} спільних",
+ "shared_one": "{{count}} спільна",
+ "shared_other": "{{count}} спільних",
+ "total_few": "{{count}} загалом",
+ "total_many": "{{count}} загалом",
+ "total_one": "{{count}} загалом",
+ "total_other": "{{count}} загалом"
+ },
+ "empty": {
+ "noMatches": "Жодна навичка не відповідає вашому пошуку",
+ "noMatchesDescription": "Спробуйте інший пошуковий запит або змініть фільтри.",
+ "noSkills": "Ще немає навичок",
+ "noSkillsDescription": "Створіть свою першу навичку, щоб навчити повторюваний робочий процес, або імпортуйте ту, яку вже використовуєте."
+ },
+ "filters": {
+ "all": "Усі навички",
+ "codexOnly": "Лише Codex",
+ "hasScripts": "Містить скрипти",
+ "needsAttention": "Потребує уваги",
+ "personal": "Особисті",
+ "project": "Проєктні",
+ "shared": "Спільні"
+ },
+ "hero": {
+ "codexAvailable": "Використовуйте `.codex`, коли навичка має залишатися лише для Codex.",
+ "codexUnavailable": "Наявні навички `.codex` залишаються редагованими тут, але новим навичкам лише для Codex потрібне ввімкнене середовище Codex.",
+ "description": "Навички — це багаторазові інструкції, які допомагають середовищу послідовніше виконувати однаковий тип завдань.",
+ "guidance": "Використовуйте особисті навички для звичок, які потрібні всюди. Використовуйте проєктні навички для робочих процесів, що мають сенс лише всередині однієї кодової бази.",
+ "personalContext": "Зараз ви бачите лише свої особисті навички.",
+ "projectContext": "Ви бачите навички для {{project}} плюс ваші особисті навички.",
+ "title": "Навчайте повторюваної роботи"
+ },
+ "invocation": {
+ "auto": "Запускається автоматично, коли пасує",
+ "manualOnly": "Запускається лише коли ви явно про це попросите"
+ },
+ "loading": {
+ "loading": "Завантаження навичок...",
+ "refreshing": "Оновлення навичок..."
+ },
+ "runtimeAudience": "Спільні навички в `.claude`, `.cursor` та `.agents` доступні для {{audience}}. Навички, що зберігаються в `.codex`, залишаються лише для Codex, коли підтримка Codex доступна.",
+ "scope": {
+ "project": "Цей проєкт",
+ "user": "Особисті"
+ },
+ "searchPlaceholder": "Пошук за назвою навички або тим, із чим вона допомагає...",
+ "sections": {
+ "personal": {
+ "description": "Звички та інструкції, які ви хочете мати всюди.",
+ "title": "Особисті навички"
+ },
+ "project": {
+ "description": "Робочі процеси, що мають сенс лише для цієї кодової бази.",
+ "title": "Проєктні навички"
+ }
+ },
+ "sort": {
+ "label": "Сортувати навички",
+ "name": "Назва",
+ "recent": "Недавні"
+ },
+ "status": {
+ "hasScripts": "Містить скрипти, тому уважно перевірте",
+ "needsAttention": "Потребує уваги, перш ніж покладатися на неї",
+ "ready": "Готова до використання"
+ },
+ "success": {
+ "created": "Навичку успішно створено.",
+ "imported": "Навичку успішно імпортовано.",
+ "saved": "Навичку успішно збережено."
+ }
+ },
+ "pluginDetail": {
+ "unknown": "Невідомо",
+ "metadata": {
+ "author": "Автор",
+ "category": "Категорія",
+ "source": "Джерело",
+ "version": "Версія",
+ "capabilities": "Можливості",
+ "installs": "Встановлення"
+ },
+ "scope": {
+ "label": "Область:",
+ "options": {
+ "user": "Користувач (глобально)",
+ "project": "Проєкт (спільно)",
+ "local": "Локально (gitignored)"
+ }
+ },
+ "links": {
+ "homepage": "Домашня сторінка",
+ "contact": "Контакт"
+ },
+ "readme": {
+ "loading": "Завантаження README...",
+ "empty": "README недоступний."
+ }
+ },
+ "skillImport": {
+ "title": "Імпортувати навичку",
+ "description": "Виберіть наявну теку навички, перегляньте, що буде скопійовано, а потім імпортуйте її в одне з підтримуваних місць зберігання навичок.",
+ "steps": {
+ "chooseFolder": {
+ "title": "1. Виберіть теку навички",
+ "description": "Це має бути тека, що вже містить файл `SKILL.md`, `Skill.md` чи `skill.md`."
+ },
+ "location": {
+ "title": "2. Вирішіть, де вона має бути",
+ "description": "Особисті навички працюють усюди. Проєктні навички з'являються лише для однієї кодової бази."
+ }
+ },
+ "fields": {
+ "sourceFolder": "Тека-джерело",
+ "destinationFolderName": "Назва теки призначення",
+ "audience": "Хто може використовувати",
+ "storage": "Де зберігати"
+ },
+ "placeholders": {
+ "defaultFolderName": "За замовчуванням — назва теки-джерела"
+ },
+ "actions": {
+ "browse": "Огляд",
+ "cancel": "Скасувати",
+ "preparing": "Підготовка...",
+ "reviewAndImport": "Переглянути й імпортувати",
+ "importSkill": "Імпортувати навичку",
+ "backToImport": "Назад до імпорту"
+ },
+ "scope": {
+ "user": "Користувач",
+ "project": "Проєкт: {{project}}",
+ "projectUnavailable": "Проєкт недоступний"
+ },
+ "rootSuffix": {
+ "codexOnly": " - Лише Codex",
+ "shared": " - Спільна"
+ },
+ "reviewHint": "Спочатку перегляньте скопійовані файли, потім підтвердьте імпорт на наступному кроці.",
+ "reviewLabel": "Імпорт цієї навички",
+ "errors": {
+ "missingSkillFile": "Ця тека поки що не схожа на навичку. Їй потрібен файл SKILL.md, Skill.md чи skill.md.",
+ "symbolicLinks": "Ця тека містить символьні посилання. Імпортуйте реальні файли замість посилань.",
+ "tooManyFiles": "Ця тека навички завелика, щоб імпортувати її за раз. Видаліть зайві файли та спробуйте знову.",
+ "tooLarge": "Ця тека навички завелика для безпечного імпорту. Зменшіть великі ресурси та спробуйте знову.",
+ "invalidFolderName": "Виберіть простішу назву теки призначення з літер, цифр, крапок, дефісів чи підкреслень.",
+ "mustBeDirectory": "Виберіть для імпорту теку, а не окремий файл.",
+ "reviewFailed": "Не вдалося переглянути зміни імпорту",
+ "importFailed": "Не вдалося імпортувати навичку"
+ }
+ },
+ "mcpPanel": {
+ "sort": {
+ "nameAsc": "Назва А→Я",
+ "nameDesc": "Назва Я→А",
+ "toolsDesc": "Найбільше інструментів"
+ },
+ "health": {
+ "title": "Стан працездатності MCP",
+ "checkingViaRuntime": "Перевірка встановлених серверів MCP через {{runtime}} ...",
+ "lastChecked": "Востаннє перевірено {{time}}",
+ "description": "Запустіть діагностику з цієї сторінки, щоб перевірити підключення встановлених MCP.",
+ "checking": "Перевірка...",
+ "checkStatus": "Перевірити стан"
+ },
+ "diagnostics": {
+ "title": "Діагностика MCP середовища",
+ "serversCount": "{{count}} серверів",
+ "serversCount_one": "{{count}} сервер",
+ "serversCount_other": "{{count}} серверів",
+ "waiting": "Очікування результатів діагностики...",
+ "disableReasons": {
+ "checkingRuntimeStatus": "Перевірка статусу середовища...",
+ "checkingRuntimeAvailability": "Перевірка доступності середовища...",
+ "runtimeFailedToStart": "Налаштоване середовище знайдено, але не вдалося запустити. Відкрийте панель, щоб відремонтувати або перевстановити його.",
+ "runtimeRequired": "Потрібне налаштоване середовище. Встановіть або відремонтуйте його з панелі."
+ },
+ "serversCount_few": "{{count}} сервери",
+ "serversCount_many": "{{count}} серверів"
+ },
+ "searchPlaceholder": "Пошук серверів MCP...",
+ "runtime": {
+ "notAvailable": "{{runtime}} недоступний",
+ "notInstalled": "{{runtime}} не встановлено",
+ "requiredDescription": "Перевірки працездатності MCP вимагають {{runtime}}. Перейдіть на панель, щоб встановити або відремонтувати його."
+ },
+ "empty": {
+ "searchTitle": "Серверів не знайдено",
+ "title": "Немає доступних серверів MCP",
+ "searchDescription": "Спробуйте інший пошуковий запит",
+ "description": "Перевірте пізніше — будуть нові сервери"
+ },
+ "loadMore": "Завантажити більше"
+ },
+ "apiKeys": {
+ "description": "Безпечно зберігайте API-ключі для автозаповнення під час встановлення серверів MCP.",
+ "storage": {
+ "osKeychain": "Ключі зашифровано через {{backend}} і збережено з обмеженими правами доступу до файлів (лише для власника).",
+ "localEncryption": "Сховище ключів ОС недоступне — ключі зашифровано локально за допомогою AES-256. Для надійнішого захисту встановіть службу keyring (gnome-keyring, kwallet)."
+ },
+ "actions": {
+ "add": "Додати API-ключ",
+ "addFirst": "Додайте свій перший ключ",
+ "edit": "Редагувати",
+ "copied": "Скопійовано!",
+ "copyEnvVarName": "Копіювати назву змінної середовища",
+ "confirmDelete": "Натисніть ще раз для підтвердження",
+ "delete": "Видалити"
+ },
+ "empty": {
+ "title": "Немає збережених API-ключів",
+ "description": "Додайте ключі для автозаповнення змінних середовища під час встановлення серверів MCP."
+ },
+ "form": {
+ "addTitle": "Додати API-ключ",
+ "editTitle": "Редагувати API-ключ",
+ "addDescription": "Збережіть API-ключ для автозаповнення під час встановлення серверів MCP.",
+ "editDescription": "Оновіть деталі ключа. Вам потрібно повторно ввести значення.",
+ "keychainUnavailable": "Сховище ключів ОС недоступне — ключі зашифровано локально за допомогою AES-256. Встановіть gnome-keyring для захисту на рівні ОС.",
+ "name": "Назва",
+ "namePlaceholder": "напр. OpenAI Production",
+ "environmentVariableName": "Назва змінної середовища",
+ "envVarPlaceholder": "напр. OPENAI_API_KEY",
+ "value": "Значення",
+ "reenterValue": "Повторно введіть значення ключа",
+ "valuePlaceholder": "sk-...",
+ "scope": "Область",
+ "userScopeLabel": "Користувач (глобально)",
+ "projectScopeLabel": "Проєкт: {{project}}",
+ "projectUnavailable": "Проєкт недоступний",
+ "boundTo": "Прив'язано до {{path}}",
+ "cancel": "Скасувати",
+ "saving": "Збереження...",
+ "update": "Оновити",
+ "save": "Зберегти",
+ "errors": {
+ "invalidEnvVarFormat": "Використовуйте літери, цифри, підкреслення. Має починатися з літери чи підкреслення.",
+ "nameRequired": "Потрібна назва",
+ "envVarRequired": "Потрібна назва змінної середовища",
+ "invalidEnvVar": "Неправильна назва змінної середовища",
+ "valueRequired": "Потрібне значення ключа",
+ "projectScopeRequiresProject": "API-ключі з областю проєкту потребують активного проєкту",
+ "saveFailed": "Не вдалося зберегти"
+ }
+ }
+ },
+ "skillReview": {
+ "title": "Перегляд змін навички",
+ "description": "{{reviewLabel}} спочатку показує зміни файлової системи. Нічого не записується, доки ви не підтвердите нижче.",
+ "noPreview": "Перегляд недоступний.",
+ "confirmPromptPrefix": "Перегляньте відмінності нижче, потім використайте",
+ "confirmPromptSuffix": "щоб застосувати ці зміни.",
+ "noChanges": "Поки що не виявлено змін файлів.",
+ "binaryBadge": "бінарний",
+ "binaryPreviewHidden": "Перегляд бінарного файлу не показано. Файл буде скопійовано як є.",
+ "summary": {
+ "fileChanges": "{{count}} змін файлів",
+ "fileChanges_one": "{{count}} зміна файлу",
+ "fileChanges_other": "{{count}} змін файлів",
+ "new": "{{count}} нових",
+ "updated": "{{count}} оновлено",
+ "removed": "{{count}} видалено",
+ "binary": "{{count}} бінарних",
+ "fileChanges_few": "{{count}} зміни файлів",
+ "fileChanges_many": "{{count}} змін файлів"
+ }
+ },
+ "mcpCard": {
+ "toolsCount": "{{count}} інструментів",
+ "toolsCount_one": "{{count}} інструмент",
+ "toolsCount_other": "{{count}} інструментів",
+ "envCount": "{{count}} змінних",
+ "envCount_one": "{{count}} змінна",
+ "envCount_other": "{{count}} змінних",
+ "auth": "Автентифікація",
+ "byAuthor": "від {{author}}",
+ "hosting": {
+ "remote": "Віддалено",
+ "local": "Локально",
+ "both": "Обидва"
+ },
+ "toolsCount_few": "{{count}} інструменти",
+ "toolsCount_many": "{{count}} інструментів",
+ "envCount_few": "{{count}} змінні",
+ "envCount_many": "{{count}} змінних",
+ "repository": "Репозиторій",
+ "website": "Вебсайт"
+ },
+ "installButton": {
+ "installing": "Встановлення...",
+ "removing": "Видалення...",
+ "done": "Готово",
+ "retry": "Повторити",
+ "uninstall": "Видалити",
+ "install": "Встановити"
+ },
+ "pluginCard": {
+ "official": "Офіційний"
+ }
+}
diff --git a/src/features/localization/renderer/locales/uk/report.json b/src/features/localization/renderer/locales/uk/report.json
new file mode 100644
index 00000000..9579104f
--- /dev/null
+++ b/src/features/localization/renderer/locales/uk/report.json
@@ -0,0 +1,217 @@
+{
+ "cost": {
+ "breakdownTitle": "Розподіл вартості (за 1M токенів)",
+ "cacheRead": "Читання з кешу",
+ "cacheWrite": "Запис у кеш",
+ "cost": "Вартість",
+ "input": "Вхід",
+ "noCommits": "немає комітів",
+ "noLinesChanged": "немає змінених рядків",
+ "output": "Вихід",
+ "parent": "Батьківський: {{cost}}",
+ "parentCost": "Вартість батьківського",
+ "perCommit": "За коміт",
+ "perCommitFormula": "загальна вартість ÷ {{count}} коміт",
+ "perCommitFormula_few": "загальна вартість ÷ {{count}} коміти",
+ "perCommitFormula_many": "загальна вартість ÷ {{count}} комітів",
+ "perCommitFormula_one": "загальна вартість ÷ {{count}} коміт",
+ "perCommitFormula_other": "загальна вартість ÷ {{count}} комітів",
+ "perLineChanged": "За змінений рядок",
+ "perLineFormula": "загальна вартість ÷ {{count}} рядок",
+ "perLineFormula_few": "загальна вартість ÷ {{count}} рядки",
+ "perLineFormula_many": "загальна вартість ÷ {{count}} рядків",
+ "perLineFormula_one": "загальна вартість ÷ {{count}} рядок",
+ "perLineFormula_other": "загальна вартість ÷ {{count}} рядків",
+ "subagent": "Субагент: {{cost}}",
+ "subagentCost": "Вартість субагента",
+ "title": "Аналіз вартості",
+ "total": "Усього"
+ },
+ "insights": {
+ "agent": "агент",
+ "agent_few": "агенти",
+ "agent_many": "агентів",
+ "agent_one": "агент",
+ "agent_other": "агентів",
+ "agentTree": "Дерево агентів ({{count}} {{unit}})",
+ "background": "(у фоні)",
+ "bashCommands": "Команди Bash",
+ "outOfScopeFindings": "Висновки поза межами завдання ({{count}})",
+ "questionsAsked": "Поставлені запитання ({{count}})",
+ "repeated": "Повторено",
+ "skillsInvoked": "Викликані навички ({{count}})",
+ "taskDispatches": "Делегування завдань ({{count}})",
+ "tasksCreated": "Створені завдання ({{count}})",
+ "teamMode": "Командний режим",
+ "teams": "Команди: {{teams}}",
+ "title": "Аналітика сесії",
+ "total": "Усього",
+ "unique": "Унікальних",
+ "skillsInvoked_few": "Викликані навички ({{count}})",
+ "skillsInvoked_many": "Викликані навички ({{count}})",
+ "skillsInvoked_one": "Викликані навички ({{count}})",
+ "skillsInvoked_other": "Викликані навички ({{count}})",
+ "taskDispatches_few": "Делегування завдань ({{count}})",
+ "taskDispatches_many": "Делегування завдань ({{count}})",
+ "taskDispatches_one": "Делегування завдань ({{count}})",
+ "taskDispatches_other": "Делегування завдань ({{count}})",
+ "tasksCreated_few": "Створені завдання ({{count}})",
+ "tasksCreated_many": "Створені завдання ({{count}})",
+ "tasksCreated_one": "Створені завдання ({{count}})",
+ "tasksCreated_other": "Створені завдання ({{count}})",
+ "questionsAsked_few": "Поставлені запитання ({{count}})",
+ "questionsAsked_many": "Поставлені запитання ({{count}})",
+ "questionsAsked_one": "Поставлені запитання ({{count}})",
+ "questionsAsked_other": "Поставлені запитання ({{count}})",
+ "agentTree_few": "Дерево агентів ({{count}} {{unit}})",
+ "agentTree_many": "Дерево агентів ({{count}} {{unit}})",
+ "agentTree_one": "Дерево агентів ({{count}} {{unit}})",
+ "agentTree_other": "Дерево агентів ({{count}} {{unit}})",
+ "outOfScopeFindings_few": "Висновки поза межами завдання ({{count}})",
+ "outOfScopeFindings_many": "Висновки поза межами завдання ({{count}})",
+ "outOfScopeFindings_one": "Висновки поза межами завдання ({{count}})",
+ "outOfScopeFindings_other": "Висновки поза межами завдання ({{count}})",
+ "keyTakeaways": "Ключові висновки"
+ },
+ "quality": {
+ "chars": "симв.",
+ "corrections": "Виправлення",
+ "failed": "не пройдено",
+ "fileReadRedundancy": "Надлишковість читання файлів",
+ "firstMessage": "Перше повідомлення",
+ "firstRun": "Перший запуск",
+ "frictionRate": "Рівень тертя",
+ "lastRun": "Останній запуск",
+ "messagesBeforeWork": "Повідомлень до початку роботи",
+ "passed": "пройдено",
+ "promptQuality": "Якість промпту",
+ "readsPerUniqueFile": "Читань/унікальний файл",
+ "snapshot": "знімок",
+ "snapshot_few": "знімки",
+ "snapshot_many": "знімків",
+ "snapshot_one": "знімок",
+ "snapshot_other": "знімків",
+ "startupOverhead": "Накладні витрати на запуск",
+ "testProgression": "Прогрес тестів",
+ "title": "Сигнали якості",
+ "tokensBeforeWork": "Токенів до початку роботи",
+ "totalReads": "Усього читань",
+ "uniqueFiles": "Унікальних файлів",
+ "userMessages": "Повідомлення користувача",
+ "percentOfTotal": "% від загального"
+ },
+ "tokens": {
+ "apiCalls": "Виклики API",
+ "cacheCreate": "Створення кешу",
+ "cacheEfficiency": "Ефективність кешу",
+ "cacheRead": "Читання з кешу",
+ "cacheReadPct": "% читання з кешу",
+ "coldStart": "Холодний старт",
+ "cost": "Вартість",
+ "input": "Вхід",
+ "model": "Модель",
+ "no": "Ні",
+ "output": "Вихід",
+ "readWriteRatio": "Співвідношення Ч/З",
+ "title": "Використання токенів",
+ "total": "Усього",
+ "yes": "Так"
+ },
+ "subagents": {
+ "title": "Субагенти",
+ "metrics": {
+ "count": "Кількість",
+ "totalTokens": "Усього токенів",
+ "totalDuration": "Загальна тривалість",
+ "totalCost": "Загальна вартість"
+ },
+ "table": {
+ "description": "Опис",
+ "type": "Тип",
+ "tokens": "Токени",
+ "duration": "Тривалість",
+ "cost": "Вартість"
+ }
+ },
+ "overview": {
+ "title": "Огляд",
+ "yes": "Так",
+ "no": "Ні",
+ "metrics": {
+ "duration": "Тривалість",
+ "messages": "Повідомлення",
+ "contextUsage": "Використання контексту",
+ "compactions": "Стиснення",
+ "branch": "Гілка",
+ "subagents": "Субагенти",
+ "project": "Проєкт",
+ "sessionId": "ID сесії"
+ }
+ },
+ "timeline": {
+ "title": "Хронологія та активність",
+ "idleAnalysis": "Аналіз простоїв",
+ "metrics": {
+ "idleGaps": "Проміжки простою",
+ "totalIdle": "Загальний простій",
+ "activeTime": "Активний час",
+ "idlePercent": "% простою"
+ },
+ "modelSwitches": "Зміни моделі ({{count}})",
+ "modelSwitches_one": "Зміни моделі ({{count}})",
+ "modelSwitches_other": "Зміни моделі ({{count}})",
+ "messageNumber": "повід. №{{number}}",
+ "keyEvents": "Ключові події",
+ "modelSwitches_few": "Зміни моделі ({{count}})",
+ "modelSwitches_many": "Зміни моделі ({{count}})"
+ },
+ "tools": {
+ "title": "Використання інструментів",
+ "summary": "{{formattedCount}} викликів загалом серед {{toolCount}} інструментів",
+ "columns": {
+ "tool": "Інструмент",
+ "calls": "Викликів",
+ "errors": "Помилок",
+ "successPercent": "% успіху",
+ "health": "Стан"
+ }
+ },
+ "git": {
+ "title": "Активність Git",
+ "commits": "Коміти",
+ "pushes": "Надсилання",
+ "linesAdded": "Додано рядків",
+ "linesRemoved": "Видалено рядків",
+ "branchesCreated": "Створено гілок"
+ },
+ "friction": {
+ "title": "Сигнали тертя",
+ "rate": "Рівень тертя: {{rate}}%",
+ "correctionsCount": "{{count}} виправлень",
+ "correctionsCount_one": "{{count}} виправлення",
+ "corrections": "Виправлення",
+ "thrashingSignals": "Сигнали буксування",
+ "repeatedBashCommands": "Повторювані команди Bash",
+ "reworkedFiles": "Перероблені файли (3+ редагувань)",
+ "correctionsCount_few": "{{count}} виправлення",
+ "correctionsCount_many": "{{count}} виправлень",
+ "correctionsCount_other": "{{count}} виправлень"
+ },
+ "errors": {
+ "title": "Помилки",
+ "permissionDenied": "Доступ заборонено",
+ "messageIndex": "повід. №{{index}}",
+ "input": "Вхід",
+ "error": "Помилка",
+ "count": "{{count}} помилок",
+ "count_one": "{{count}} помилка",
+ "permissionDenialCount": "{{count}} відмов у доступі",
+ "permissionDenialCount_one": "{{count}} відмова у доступі",
+ "count_few": "{{count}} помилки",
+ "count_many": "{{count}} помилок",
+ "count_other": "{{count}} помилок",
+ "permissionDenialCount_few": "{{count}} відмови у доступі",
+ "permissionDenialCount_many": "{{count}} відмов у доступі",
+ "permissionDenialCount_other": "{{count}} відмов у доступі"
+ }
+}
diff --git a/src/features/localization/renderer/locales/uk/settings.json b/src/features/localization/renderer/locales/uk/settings.json
new file mode 100644
index 00000000..b91cf102
--- /dev/null
+++ b/src/features/localization/renderer/locales/uk/settings.json
@@ -0,0 +1,994 @@
+{
+ "tabs": {
+ "advanced": {
+ "description": "Опції для досвідчених користувачів: експорт/імпорт конфігурації, скидання до значень за замовчуванням і пряме редагування конфігурації.",
+ "label": "Розширені"
+ },
+ "general": {
+ "description": "Основні налаштування застосунку, як-от тема, мова, щільність відображення та поведінка під час запуску.",
+ "label": "Загальні"
+ },
+ "infoAriaLabel": "Що таке {{label}}?",
+ "notifications": {
+ "description": "Контролюйте, коли і як ви отримуєте сповіщення про активність агентів, завершення завдань і помилки.",
+ "label": "Сповіщення"
+ }
+ },
+ "view": {
+ "description": "Керуйте налаштуваннями застосунку",
+ "loading": "Завантаження налаштувань...",
+ "title": "Налаштування"
+ },
+ "runtimeProvider": {
+ "actions": {
+ "cancel": "Скасувати",
+ "test": "Тест"
+ },
+ "defaults": {
+ "allProjects": "Усі проєкти",
+ "allProjectsHint": "Тести використовують {{project}}. За замовчуванням застосовується, якщо проєкт не має перевизначення.",
+ "loadingContexts": "Завантаження контекстів...",
+ "projectHint": "Збереження перевизначає лише {{project}}.",
+ "projectOverrideContext": "Контекст перевизначення проєкту",
+ "scopeDescriptionAllProjects": "За замовчуванням для кожного проєкту, який не має власного перевизначення OpenCode.",
+ "scopeDescriptionProject": "Перевизначити лише вибраний проєкт. Запущені команди не змінюються.",
+ "selectProjectContext": "Вибрати контекст проєкту",
+ "selectProjectHint": "Виберіть проєкт перед тестуванням локальних моделей чи збереженням значень за замовчуванням.",
+ "selectValidationContext": "Вибрати контекст перевірки",
+ "setAllProjectsDefault": "Встановити за замовчуванням для всіх проєктів",
+ "setProjectDefault": "Встановити за замовчуванням для проєкту",
+ "thisProject": "Цей проєкт",
+ "title": "Значення за замовчуванням OpenCode",
+ "validationContext": "Контекст перевірки"
+ },
+ "diagnostics": {
+ "copied": "Діагностику скопійовано",
+ "copiedShort": "Скопійовано",
+ "copy": "Копіювати діагностику",
+ "hints": "Підказки",
+ "likelyCause": "Імовірна причина:",
+ "windowsSymlinkAdminHint": "Windows: запустіть Agent Teams AI від імені адміністратора"
+ },
+ "models": {
+ "alreadyDefault": "Це вже вибрано як значення за замовчуванням OpenCode.",
+ "empty": "Моделей не знайдено.",
+ "emptyFree": "Безплатних моделей не знайдено.",
+ "emptyRecommended": "Рекомендованих моделей не знайдено.",
+ "emptyRecommendedFree": "Рекомендованих безплатних моделей не знайдено.",
+ "freeOnly": "Лише безплатні",
+ "launchableDescription": "Відомі маршрути з конфігурації OpenCode, безплатні вбудовані моделі та поточне значення за замовчуванням. Локальним маршрутам потрібен успішний тест, перш ніж вони стануть готовими до запуску команд.",
+ "launchableTitle": "Маршрути моделей OpenCode",
+ "loadingRoutes": "Завантаження маршрутів моделей OpenCode...",
+ "noRoutesMatch": "Жоден маршрут моделей OpenCode не відповідає \"{{query}}\".",
+ "noneReported": "Поки не повідомлено про жоден маршрут моделей OpenCode. Налаштуйте локальний маршрут у OpenCode або скористайтеся вкладкою «Провайдери», щоб переглянути провайдерів каталогу.",
+ "recommendedOnly": "Лише рекомендовані",
+ "searchPlaceholder": "Пошук моделей",
+ "selectProjectBeforeTesting": "Виберіть контекст проєкту перед тестуванням моделей.",
+ "selectProjectBeforeTestingDefaults": "Виберіть контекст проєкту перед тестуванням чи збереженням значень за замовчуванням OpenCode.",
+ "testInProgress": "Тест моделі вже виконується.",
+ "useInTeamPicker": "Зберегти для вибору команди",
+ "validationContextRequired": "Виберіть контекст перевірки вище, щоб увімкнути «Тест» і «Встановити за замовчуванням». Збереження для вибору команди лише зберігає маршрут для нових команд.",
+ "actionsUnavailable": "Дії тимчасово недоступні.",
+ "defaultSaveInProgress": "Значення за замовчуванням OpenCode зберігається.",
+ "routeUnavailableAuth": "Цей провайдер вимагає автентифікації, перш ніж цю модель можна буде використовувати.",
+ "routeUnavailableFailed": "Цей маршрут моделі не пройшов свій останній тест виконання.",
+ "routeUnavailableGeneric": "Цей маршрут моделі зараз не можна використовувати.",
+ "routeUnavailableUnknown": "Ця модель є поточним значенням за замовчуванням OpenCode, але вона поки недоступна в живому каталозі."
+ },
+ "providers": {
+ "catalog": "Каталог провайдерів OpenCode",
+ "countFallback": "Провайдери OpenCode",
+ "description": "{{count}}. Підключені та рекомендовані провайдери показано першими.",
+ "loadMore": "Завантажити більше провайдерів",
+ "loading": "Завантаження провайдерів OpenCode",
+ "noMatches": "Жоден провайдер не відповідає цьому пошуку.",
+ "noneReported": "Керованим середовищем не повідомлено про жодного провайдера OpenCode.",
+ "recommended": "Рекомендовано",
+ "refreshCatalog": "Оновити каталог",
+ "searchPlaceholder": "Пошук провайдерів",
+ "description_few": "{{count}}. Підключені та рекомендовані провайдери показано першими.",
+ "description_many": "{{count}}. Підключені та рекомендовані провайдери показано першими.",
+ "description_one": "{{count}}. Підключені та рекомендовані провайдери показано першими.",
+ "description_other": "{{count}}. Підключені та рекомендовані провайдери показано першими."
+ },
+ "setup": {
+ "loading": "Завантаження налаштування провайдера..."
+ },
+ "summary": {
+ "defaultModel": "За замовчуванням OpenCode: {{model}}",
+ "loading": "Завантаження керованого середовища OpenCode, підключених провайдерів і значень моделей за замовчуванням...",
+ "source": "Джерело: {{source}}",
+ "title": "Середовище OpenCode"
+ },
+ "tabs": {
+ "models": "Моделі",
+ "providers": "Провайдери"
+ },
+ "modelRoutes": {
+ "searchPlaceholder": "Пошук маршрутів моделей"
+ },
+ "badges": {
+ "usedInTeamPicker": "Збережено для вибору команди",
+ "free": "безплатно",
+ "local": "локальний",
+ "configured": "налаштовано",
+ "knownRoute": "відомий маршрут",
+ "connected": "підключено",
+ "verified": "перевірено",
+ "needsTest": "потребує тесту",
+ "failed": "не вдалося",
+ "unknown": "невідомо",
+ "default": "за замовчуванням"
+ },
+ "compatibleEndpoint": {
+ "baseUrlPlaceholder": "http://localhost:1234"
+ }
+ },
+ "general": {
+ "agentLanguage": {
+ "description": "Мова для спілкування агентів",
+ "descriptionWithDetected": "Мова для спілкування агентів (виявлено: {{detected}})",
+ "emptyMessage": "Мову не знайдено.",
+ "label": "Мова",
+ "searchPlaceholder": "Пошук мови...",
+ "selectPlaceholder": "Виберіть мову...",
+ "title": "Мова агентів"
+ },
+ "appLanguage": {
+ "description": "Мова для інтерфейсу застосунку.",
+ "label": "Мова",
+ "title": "Мова застосунку"
+ },
+ "appearance": {
+ "autoExpandAIGroups": {
+ "description": "Автоматично розгортати кожен хід відповіді під час відкриття транскрипту чи отримання нового повідомлення",
+ "label": "Розгортати відповіді AI за замовчуванням"
+ },
+ "nativeTitleBar": {
+ "description": "Використовувати стандартну системну рамку вікна замість власного заголовка",
+ "label": "Використовувати системний заголовок",
+ "restartConfirm": {
+ "confirmLabel": "Перезапустити",
+ "message": "Застосунок потрібно перезапустити, щоб застосувати зміну заголовка. Перезапустити зараз?",
+ "title": "Потрібен перезапуск"
+ }
+ },
+ "theme": {
+ "description": "Виберіть бажану кольорову тему",
+ "label": "Тема",
+ "options": {
+ "dark": "Темна",
+ "light": "Світла",
+ "system": "Системна"
+ }
+ },
+ "title": "Зовнішній вигляд"
+ },
+ "browserAccess": {
+ "serverMode": {
+ "description": "Запустити HTTP-сервер для доступу до інтерфейсу з браузера чи вбудовування в iframe",
+ "label": "Увімкнути режим сервера"
+ },
+ "title": "Доступ із браузера"
+ },
+ "localClaudeRoot": {
+ "actions": {
+ "selectFolder": "Вибрати теку",
+ "selectFolderManually": "Вибрати теку вручну",
+ "useAutoDetect": "Використати автовизначення",
+ "useFolder": "Використати теку",
+ "usePath": "Використати шлях",
+ "useThisPath": "Використати цей шлях",
+ "useWsl": "Використовуєте Linux/WSL?"
+ },
+ "confirm": {
+ "noProjectsDir": {
+ "message": "Ця тека не містить каталогу \"projects\". Усе одно продовжити?",
+ "title": "Каталог projects не знайдено"
+ },
+ "notClaudeDir": {
+ "message": "Ця тека має назву \"{{folderName}}\", а не \".claude\". Усе одно продовжити?",
+ "title": "Вибрана тека не є .claude"
+ },
+ "noWslPaths": {
+ "message": "Не вдалося автоматично знайти дистрибутиви WSL із даними Claude. Вибрати теку вручну?",
+ "title": "Шляхів Claude у WSL не знайдено"
+ },
+ "wslNoProjectsDir": {
+ "message": "\"{{path}}\" не містить каталогу \"projects\". Усе одно продовжити?",
+ "title": "У шляху WSL відсутній каталог projects"
+ }
+ },
+ "current": {
+ "autoDetected": "Автовизначено: {{path}}",
+ "autoDetectedPath": "Використовується автовизначений шлях",
+ "customPath": "Використовується власний шлях",
+ "label": "Поточний локальний корінь"
+ },
+ "description": "Виберіть, яка локальна тека вважається кореневою для ваших даних Claude",
+ "errors": {
+ "detectWslFailed": "Не вдалося визначити кореневі шляхи Claude у WSL",
+ "loadFailed": "Не вдалося завантажити налаштування локального кореня Claude",
+ "updateFailed": "Не вдалося оновити корінь Claude"
+ },
+ "title": "Локальний корінь Claude",
+ "wslModal": {
+ "closeAriaLabel": "Закрити вікно шляху WSL",
+ "description": "Виявлені дистрибутиви WSL і кандидати на корінь Claude",
+ "noProjectsDir": "Каталог projects не виявлено",
+ "title": "Вибрати корінь Claude у WSL"
+ }
+ },
+ "privacy": {
+ "telemetry": {
+ "description": "Допоможіть покращити застосунок, надсилаючи анонімні дані про збої та продуктивність",
+ "label": "Надсилати звіти про збої"
+ },
+ "title": "Конфіденційність"
+ },
+ "server": {
+ "runningOn": "Запущено на",
+ "standaloneModeDescription": "Запущено в автономному режимі. HTTP-сервер завжди активний. Системні сповіщення недоступні — тригери сповіщень журналюються лише в застосунку.",
+ "title": "Сервер"
+ },
+ "startup": {
+ "launchAtLogin": {
+ "description": "Автоматично запускати застосунок під час входу в систему",
+ "label": "Запускати під час входу"
+ },
+ "showDockIcon": {
+ "description": "Відображати значок застосунку в доку (macOS)",
+ "label": "Показувати значок у доку"
+ },
+ "title": "Запуск"
+ }
+ },
+ "notifications": {
+ "dev": {
+ "descriptionPrefix": "Сповіщення можуть не працювати в режимі розробки. macOS ідентифікує застосунок як \"Electron\" (bundle ID",
+ "descriptionSuffix": ") замість назви робочого застосунку. Перевірте «Системні налаштування» > «Сповіщення» > «Electron», щоб перевірити дозволи.",
+ "title": "Режим розробки"
+ },
+ "ignoredRepositories": {
+ "description": "Сповіщення з цих репозиторіїв будуть ігноруватися",
+ "empty": "Немає ігнорованих репозиторіїв",
+ "selectPlaceholder": "Виберіть репозиторій для ігнорування...",
+ "title": "Ігноровані репозиторії"
+ },
+ "settings": {
+ "enabled": {
+ "description": "Показувати системні сповіщення про помилки та події",
+ "label": "Увімкнути системні сповіщення"
+ },
+ "sound": {
+ "description": "Відтворювати звук, коли з'являються сповіщення",
+ "label": "Відтворювати звук"
+ },
+ "subagentErrors": {
+ "description": "Виявляти та сповіщати про помилки в сесіях субагентів",
+ "label": "Включати помилки субагентів"
+ },
+ "title": "Налаштування сповіщень"
+ },
+ "snooze": {
+ "clear": "Скасувати відкладення",
+ "description": "Тимчасово призупинити сповіщення",
+ "descriptionWithTime": "Відкладено до {{time}}",
+ "label": "Відкласти сповіщення",
+ "options": {
+ "15": "15 хвилин",
+ "30": "30 хвилин",
+ "60": "1 година",
+ "120": "2 години",
+ "240": "4 години",
+ "-1": "До завтра"
+ },
+ "selectDuration": "Виберіть тривалість..."
+ },
+ "taskCompletion": {
+ "description": "Отримуйте нативні сповіщення ОС, коли Claude завершує завдання — звуки, банери та значки в доку/панелі завдань. Працює на macOS, Linux та Windows.",
+ "installPlugin": "Встановити плагін claude-notifications-go",
+ "title": "Сповіщення про завершення завдань"
+ },
+ "team": {
+ "allTasksCompleted": {
+ "description": "Сповіщати, коли кожне завдання в команді досягає статусу «завершено»",
+ "label": "Усі завдання завершено"
+ },
+ "autoResumeOnRateLimit": {
+ "description": "Коли Claude повідомляє час скидання, запланувати наступне нагадування лідеру команди після скидання ліміту",
+ "label": "Автовідновлення після ліміту запитів"
+ },
+ "clarifications": {
+ "description": "Показувати нативні сповіщення ОС, коли завдання потребує вашого вводу",
+ "label": "Сповіщення про уточнення завдань"
+ },
+ "crossTeamMessage": {
+ "description": "Сповіщати, коли надходить повідомлення від іншої команди",
+ "label": "Сповіщення про повідомлення між командами"
+ },
+ "leadInbox": {
+ "description": "Сповіщати, коли учасники надсилають повідомлення лідеру команди",
+ "label": "Сповіщення вхідних лідера"
+ },
+ "statusChange": {
+ "description": "Показувати нативні сповіщення ОС, коли змінюється статус завдання",
+ "label": "Сповіщення про зміну статусу завдання",
+ "onlySolo": {
+ "description": "Сповіщати лише коли в команді немає учасників",
+ "label": "Лише в режимі Соло"
+ },
+ "statuses": {
+ "description": "Які цільові статуси викликають сповіщення",
+ "label": "Сповіщати про ці статуси",
+ "options": {
+ "approved": "Затверджено",
+ "completed": "Завершено",
+ "deleted": "Видалено",
+ "in_progress": "Розпочато",
+ "needsFix": "Потребує виправлень",
+ "pending": "В очікуванні",
+ "review": "Перегляд"
+ }
+ }
+ },
+ "taskComments": {
+ "description": "Показувати нативні сповіщення ОС, коли агенти коментують завдання",
+ "label": "Сповіщення про коментарі до завдань"
+ },
+ "taskCreated": {
+ "description": "Показувати нативні сповіщення ОС, коли створюється нове завдання",
+ "label": "Сповіщення про створення завдань"
+ },
+ "teamLaunched": {
+ "description": "Сповіщати, коли команда завершує запуск і готова",
+ "label": "Сповіщення про запуск команди"
+ },
+ "title": "Сповіщення команди",
+ "toolApproval": {
+ "description": "Сповіщати, коли інструмент потребує вашого затвердження (Дозволити/Відхилити), поки застосунок не у фокусі",
+ "label": "Сповіщення про затвердження інструментів"
+ },
+ "userInbox": {
+ "description": "Сповіщати, коли учасники надсилають повідомлення вам",
+ "label": "Сповіщення ваших вхідних"
+ }
+ },
+ "test": {
+ "action": "Надіслати тест",
+ "description": "Надіслати тестове сповіщення, щоб перевірити доставку",
+ "failedToSend": "Не вдалося надіслати тестове сповіщення",
+ "label": "Тестове сповіщення",
+ "sending": "Надсилання...",
+ "sent": "Надіслано!",
+ "unknownError": "Невідома помилка"
+ }
+ },
+ "advanced": {
+ "about": {
+ "appIconAlt": "Значок застосунку",
+ "description": "Збирайте команди AI-агентів, які працюють автономно паралельно, спілкуються між командами та керують завданнями на дошці Kanban — з вбудованим код-рев'ю, моніторингом процесів наживо та повною видимістю інструментів.",
+ "standalone": "Автономний",
+ "title": "Про застосунок",
+ "version": "Версія {{version}}"
+ },
+ "configuration": {
+ "editConfig": "Редагувати конфігурацію",
+ "exportConfig": "Експортувати конфігурацію",
+ "importConfig": "Імпортувати конфігурацію",
+ "openInEditor": "Відкрити в редакторі",
+ "resetToDefaults": "Скинути до значень за замовчуванням",
+ "title": "Конфігурація"
+ },
+ "updates": {
+ "available": "Доступна v{{version}}",
+ "check": "Перевірити оновлення",
+ "checking": "Перевірка...",
+ "ready": "Оновлення готове",
+ "unknownVersion": "невідомо",
+ "upToDate": "Актуальна версія"
+ },
+ "appName": "Agent Teams AI"
+ },
+ "configEditor": {
+ "errors": {
+ "loadFailed": "Не вдалося завантажити конфігурацію",
+ "saveFailed": "Не вдалося зберегти конфігурацію"
+ },
+ "footer": {
+ "autoSave": "Зміни зберігаються автоматично після редагування",
+ "toClose": "щоб закрити",
+ "escapeKey": "Esc"
+ },
+ "loading": "Завантаження конфігурації...",
+ "status": {
+ "invalidJson": "Неправильний JSON",
+ "saveFailed": "Не вдалося зберегти",
+ "saved": "Збережено",
+ "saving": "Збереження..."
+ },
+ "title": "Редагувати конфігурацію"
+ },
+ "notificationTriggers": {
+ "add": {
+ "cancel": "Скасувати",
+ "submit": "Додати тригер",
+ "title": "Додати власний тригер"
+ },
+ "builtin": {
+ "description": "Стандартні тригери, що постачаються із застосунком. Ви можете вмикати чи вимикати їх і налаштовувати їхні шаблони.",
+ "title": "Вбудовані тригери"
+ },
+ "card": {
+ "builtinBadge": "Вбудований",
+ "collapseAriaLabel": "Згорнути",
+ "deleteAriaLabel": "Видалити тригер",
+ "editNameAriaLabel": "Редагувати назву",
+ "expandAriaLabel": "Розгорнути"
+ },
+ "color": {
+ "customHexTitle": "Власний колір hex",
+ "invalidHex": "Неправильний hex"
+ },
+ "configuration": {
+ "alertIfGreaterThan": "Сповістити, якщо >",
+ "emptyPatternHint": "Залиште порожнім, щоб збігатися з усім вмістом. Використовує синтаксис регулярних виразів JavaScript.",
+ "errorStatusDescription": "Спрацьовує, коли виконання інструмента повідомляє про помилку (is_error: true).",
+ "tokensUnit": "токенів",
+ "matchPatternPlaceholder": "напр., error|failed|exception"
+ },
+ "custom": {
+ "description": "Створюйте власні тригери, щоб отримувати сповіщення про конкретні шаблони чи виводи інструментів.",
+ "empty": "Поки не налаштовано жодного власного тригера.",
+ "title": "Власні тригери"
+ },
+ "errors": {
+ "invalidRegexPattern": "Неправильний шаблон регулярного виразу"
+ },
+ "fields": {
+ "contentType": "Тип вмісту",
+ "matchField": "Поле збігу",
+ "matchPattern": "Шаблон збігу (Regex)",
+ "scopeToolName": "Область / Назва інструмента",
+ "scopeToolNameOptional": "Область / Назва інструмента (необов'язково)",
+ "threshold": "Поріг",
+ "tokenType": "Тип токена",
+ "triggerNamePlaceholder": "напр., Сповіщення про збій збірки",
+ "triggerNameRequired": "Назва тригера *"
+ },
+ "ignorePatterns": {
+ "hint": "Натисніть Enter, щоб додати. Сповіщення пропускається, якщо збігається будь-який шаблон.",
+ "placeholder": "Додати regex ігнорування...",
+ "removeAriaLabel": "Видалити шаблон ігнорування",
+ "summary": "Розширене: Правила виключення",
+ "title": "Шаблони ігнорування (пропустити, якщо збігається)"
+ },
+ "options": {
+ "contentTypes": {
+ "text": "Текстовий вивід",
+ "thinking": "Міркування",
+ "tool_result": "Результат інструмента",
+ "tool_use": "Використання інструмента"
+ },
+ "matchFields": {
+ "args": "Аргументи",
+ "command": "Команда",
+ "content": "Вміст",
+ "description": "Опис",
+ "file_path": "Шлях до файлу",
+ "fullInput": "Повний ввід (JSON)",
+ "glob": "Glob-фільтр",
+ "new_string": "Новий рядок",
+ "old_string": "Старий рядок",
+ "path": "Шлях",
+ "pattern": "Шаблон",
+ "prompt": "Промпт",
+ "query": "Запит",
+ "skill": "Назва навички",
+ "subagent_type": "Тип субагента",
+ "text": "Текстовий вміст",
+ "thinking": "Вміст міркувань",
+ "url": "URL"
+ },
+ "modes": {
+ "content_match": "Шаблон вмісту",
+ "error_status": "Помилка виконання",
+ "token_threshold": "Високе використання токенів"
+ },
+ "tokenTypes": {
+ "input": "Вхідні токени",
+ "output": "Вихідні токени",
+ "total": "Усього токенів"
+ },
+ "toolNames": {
+ "anyTool": "Будь-який інструмент"
+ }
+ },
+ "preview": {
+ "defaultTestTriggerName": "Тестовий тригер",
+ "detectedSuffix": "помилок було б виявлено",
+ "more": "...і ще {{count}}",
+ "more_few": "...і ще {{count}}",
+ "more_many": "...і ще {{count}}",
+ "more_one": "...і ще {{count}}",
+ "more_other": "...і ще {{count}}",
+ "testTrigger": "Тестовий тригер",
+ "testing": "Тестування...",
+ "title": "Перегляд",
+ "truncatedWarning": "Пошук зупинено достроково (тайм-аут чи ліміт кількості). Фактична кількість збігів може бути вищою.",
+ "viewSession": "Переглянути сесію"
+ },
+ "repositoryScope": {
+ "empty": "Не вибрано жодного репозиторію - тригер застосовується до всіх репозиторіїв",
+ "hint": "Коли вибрано репозиторії, цей тригер спрацьовує лише для помилок у цих репозиторіях.",
+ "placeholder": "Виберіть репозиторій для додавання...",
+ "summary": "Розширене: Область репозиторіїв",
+ "title": "Обмежити репозиторіями (застосовується лише до вибраних репозиторіїв)"
+ },
+ "sections": {
+ "configuration": "Конфігурація",
+ "dotColor": "Колір точки",
+ "generalInfo": "Загальна інформація",
+ "triggerCondition": "Умова тригера"
+ }
+ },
+ "workspaceProfiles": {
+ "actions": {
+ "addProfile": "Додати профіль",
+ "cancel": "Скасувати",
+ "deleteProfile": "Видалити профіль",
+ "editProfile": "Редагувати профіль",
+ "save": "Зберегти"
+ },
+ "authMethods": {
+ "agent": "Агент SSH",
+ "auto": "Авто (з конфігурації SSH)",
+ "password": "Пароль",
+ "privateKey": "Приватний ключ"
+ },
+ "deleteConfirm": {
+ "confirmLabel": "Видалити",
+ "message": "Ви впевнені, що хочете видалити \"{{name}}\"? Це неможливо скасувати.",
+ "title": "Видалити профіль"
+ },
+ "description": "Зберігайте профілі SSH-підключень для швидкого повторного підключення",
+ "empty": {
+ "description": "Додайте профіль SSH для швидкого підключення",
+ "title": "Немає збережених профілів"
+ },
+ "form": {
+ "authentication": "Автентифікація",
+ "host": "Хост",
+ "name": "Назва",
+ "passwordPrompt": "Вам буде запропоновано ввести пароль під час підключення.",
+ "port": "Порт",
+ "privateKeyPath": "Шлях до приватного ключа",
+ "username": "Ім'я користувача",
+ "namePlaceholder": "Мій сервер",
+ "hostPlaceholder": "ім'я хоста або IP",
+ "usernamePlaceholder": "користувач"
+ },
+ "loading": "Завантаження профілів...",
+ "title": "Профілі робочого простору"
+ },
+ "connection": {
+ "actions": {
+ "connect": "Підключити",
+ "connecting": "Підключення...",
+ "disconnect": "Відключити",
+ "testConnection": "Тестувати підключення",
+ "testing": "Тестування..."
+ },
+ "currentMode": {
+ "description": "Джерело даних для файлів сесій",
+ "label": "Поточний режим",
+ "local": "Локальний ({{path}})"
+ },
+ "description": "Підключіться до віддаленої машини, щоб переглядати сесії Claude Code, що там виконуються",
+ "form": {
+ "authentication": "Автентифікація",
+ "host": "Хост",
+ "password": "Пароль",
+ "port": "Порт",
+ "privateKeyPath": "Шлях до приватного ключа",
+ "username": "Ім'я користувача",
+ "hostPlaceholder": "ім'я хоста або псевдонім конфігурації SSH",
+ "usernamePlaceholder": "користувач"
+ },
+ "savedProfiles": {
+ "title": "Збережені профілі"
+ },
+ "ssh": {
+ "title": "Підключення SSH"
+ },
+ "status": {
+ "connectedTo": "Підключено до {{host}}",
+ "remoteSessions": "Перегляд віддалених сесій через SSH"
+ },
+ "test": {
+ "failed": "Не вдалося підключитися: {{error}}",
+ "success": "Підключення успішне",
+ "unknownError": "Невідома помилка"
+ },
+ "title": "Віддалене підключення"
+ },
+ "providerRuntime": {
+ "actions": {
+ "cancel": "Скасувати",
+ "cancelLogin": "Скасувати вхід",
+ "connectChatGpt": "Підключити ChatGPT",
+ "delete": "Видалити",
+ "disable": "Вимкнути",
+ "disconnectAccount": "Відключити обліковий запис",
+ "generateLink": "Згенерувати посилання",
+ "openLogin": "Відкрити вхід",
+ "reconnectAnthropic": "Повторно підключити Anthropic",
+ "refresh": "Оновити",
+ "replaceKey": "Замінити ключ",
+ "saveEndpoint": "Зберегти ендпойнт",
+ "saveKey": "Зберегти ключ",
+ "saving": "Збереження...",
+ "setApiKey": "Встановити API-ключ",
+ "updateKey": "Оновити ключ",
+ "useCode": "Використати код"
+ },
+ "apiKey": {
+ "loadingStoredCredentials": "Завантаження збережених облікових даних...",
+ "projectScope": "Проєкт",
+ "scope": "Область",
+ "storedIn": "Зберігається в {{backend}}",
+ "userScope": "Користувач",
+ "storedInApp": "Зберігається в застосунку",
+ "providers": {
+ "anthropic": {
+ "name": "API-ключ Anthropic",
+ "title": "API-ключ",
+ "description": "Використовуйте прямий API-ключ Anthropic для доступу з оплатою через API. Ваша сесія підписки Anthropic залишається доступною, коли ви перемикаєтесь назад.",
+ "placeholder": "sk-ant-..."
+ },
+ "codex": {
+ "name": "API-ключ Codex",
+ "title": "API-ключ",
+ "description": "Використовуйте API-ключ OpenAI як вторинний шлях автентифікації Codex. Якщо ви перемкнете Codex у режим API-ключа, застосунок дзеркалюватиме OPENAI_API_KEY у CODEX_API_KEY для нативних запусків.",
+ "placeholder": "sk-proj-..."
+ },
+ "gemini": {
+ "name": "API-ключ Gemini",
+ "title": "Доступ до API",
+ "description": "Використовуйте `GEMINI_API_KEY` для бекенда Gemini API. CLI SDK та ADC його не вимагають.",
+ "placeholder": "AIza..."
+ }
+ }
+ },
+ "codex": {
+ "account": {
+ "appServer": "App-server: {{state}}",
+ "connected": "Підключено",
+ "description": "Керуйте локальною сесією облікового запису app-server Codex, що живить нативні запуски з підпискою.",
+ "loginInProgress": "Вхід триває",
+ "plan": "План: {{plan}}",
+ "reconnectRequired": "Потрібне повторне підключення",
+ "title": "Обліковий запис ChatGPT",
+ "hints": {
+ "autoUsesApiKeyUntilChatgpt": "{{message}} Auto продовжуватиме використовувати виявлений API-ключ, доки не буде підключено ChatGPT.",
+ "detectedApiKeyNeedsApiMode": "{{message}} Виявлений API-ключ використовується лише після того, як ви перемкнете Codex у режим API-ключа.",
+ "localArtifactsNoSession": "Codex CLI наразі повідомляє про відсутність активного облікового запису ChatGPT. Локальні дані облікового запису Codex існують, але не вибрано активної керованої сесії. Ліміти використання з'являються тут лише після того, як Codex CLI побачить її.",
+ "noActiveAccount": "Codex CLI наразі повідомляє про відсутність активного облікового запису ChatGPT. Ліміти використання з'являються тут лише після того, як Codex CLI його побачить.",
+ "reconnectBeforeUsage": "Codex має локально вибраний обліковий запис ChatGPT, але поточній сесії потрібне повторне підключення, перш ніж тут зможуть завантажитися ліміти використання.",
+ "usageLimitsAfterReport": "Ліміти використання з'являються тут після того, як Codex повідомить їх для підключеного облікового запису ChatGPT."
+ }
+ },
+ "install": {
+ "checking": "Перевірка",
+ "downloading": "Завантаження",
+ "installCli": "Встановити Codex CLI",
+ "installing": "Встановлення",
+ "retryInstall": "Повторити встановлення",
+ "title": "Встановити Codex CLI у дані застосунку"
+ },
+ "rateLimits": {
+ "credits": "Кредити",
+ "creditsDescription": "Кредити показано окремо від використання підписки за вікнами, і вони можуть бути недоступні для сесій ChatGPT на основі плану.",
+ "noSecondaryWindow": "Codex не повернув вторинне вікно для цього знімка облікового запису.",
+ "notReported": "Не повідомлено",
+ "primaryReset": "Скидання основного",
+ "primaryUsed": "Використано основного",
+ "primaryWindow": "Основне вікно",
+ "remainingLeft": "{{value}} залишилось",
+ "remainingUnknown": "Залишок невідомий",
+ "secondaryReset": "Скидання вторинного",
+ "secondaryUsed": "Використано вторинного",
+ "secondaryWindow": "Вторинне вікно",
+ "usedQuotaNote": "Ці відсотки показують використану квоту, а не залишкову.",
+ "weeklyReset": "Тижневе скидання",
+ "weeklyUsed": "Використано за тиждень",
+ "weeklyUsedOneWeek": "Використано за тиждень (1т)",
+ "weeklyWindow": "Тижневе вікно",
+ "secondaryFallback": "вторинне",
+ "secondaryWindowNote": " Тижневі ліміти показано окремо у вікні {{window}}.",
+ "usageExplanationGeneric": "Показує використану квоту, а не залишкову.",
+ "usageExplanationWindowOnly": "Показує використану квоту в поточному вікні {{window}}, а не залишкову.",
+ "usageExplanationWithRemaining": "{{used}} використано - приблизно {{remaining}} залишилось у поточному вікні {{window}}."
+ }
+ },
+ "compatibleEndpoint": {
+ "authToken": "Токен автентифікації",
+ "authTokenMissing": "Токен автентифікації не налаштовано.",
+ "baseUrl": "Базова URL-адреса",
+ "description": "Використовуйте локальний ендпойнт середовища, сумісний з Anthropic.",
+ "keepSavedToken": "Залиште порожнім, щоб зберегти збережений токен",
+ "title": "Локальний / сумісний ендпойнт",
+ "tokenStatus": "Токен {{status}}",
+ "validation": {
+ "baseUrlRequired": "Потрібна базова URL-адреса",
+ "firstPartyAnthropic": "Використовуйте Auto, Підписку чи API-ключ для оригінального Anthropic",
+ "httpRequired": "Базова URL-адреса має використовувати http:// чи https://",
+ "invalidUrl": "Неправильна URL-адреса",
+ "noCredentials": "Базова URL-адреса не має містити облікових даних"
+ },
+ "status": {
+ "endpointDisabledTokenKept": "Ендпойнт вимкнено. Збережений токен залишено.",
+ "endpointSaved": "Ендпойнт збережено",
+ "endpointSavedTokenMissing": "Ендпойнт збережено. Токен автентифікації не налаштовано."
+ }
+ },
+ "connection": {
+ "authenticationMethod": "Метод автентифікації",
+ "descriptions": {
+ "anthropic": "Виберіть, як автентифікуються сесії Anthropic, запущені застосунком.",
+ "codex": "Виберіть, чи має Codex віддавати перевагу вашій підписці ChatGPT чи API-ключу під час запуску нативного середовища.",
+ "gemini": "Налаштуйте необов'язковий доступ до API. CLI SDK та ADC все одно виявляються автоматично.",
+ "opencode": "Автентифікація OpenCode та інвентар провайдерів керуються середовищем OpenCode."
+ },
+ "method": "Метод підключення",
+ "mode": "Режим: {{mode}}",
+ "selected": "Вибрано",
+ "switching": "Перемикання...",
+ "title": "Підключення"
+ },
+ "connectionCards": {
+ "apiKey": {
+ "title": "API-ключ"
+ },
+ "anthropic": {
+ "apiKeyDescription": "Використовуйте ANTHROPIC_API_KEY та оплату через Anthropic API.",
+ "autoDescription": "Використовуйте значення за замовчуванням середовища Anthropic і найкращі доступні локальні облікові дані.",
+ "hint": "Auto залишає Anthropic на стандартному локальному визначенні облікових даних.",
+ "subscriptionDescription": "Використовуйте вашу локальну сесію входу Anthropic і доступ за підпискою.",
+ "subscriptionTitle": "Підписка Anthropic"
+ },
+ "auto": {
+ "title": "Авто"
+ },
+ "codex": {
+ "apiKeyDescription": "Використовуйте оплату OPENAI_API_KEY та CODEX_API_KEY для нативних запусків Codex.",
+ "autoDescription": "Віддавайте перевагу вашому обліковому запису ChatGPT і підписці. Використовуйте режим API-ключа лише за потреби.",
+ "chatgptDescription": "Використовуйте ваш підключений обліковий запис ChatGPT і підписку Codex.",
+ "chatgptTitle": "Обліковий запис ChatGPT",
+ "hint": "Codex завжди працює через нативне середовище. Auto віддає перевагу вашому обліковому запису ChatGPT, перш ніж переходити до облікових даних API-ключа."
+ }
+ },
+ "description": "Керуйте тим, як підключається кожен провайдер і, де це підтримується, яким бекендом має користуватися мультимодельне середовище.",
+ "fastMode": {
+ "defaultOff": "За замовчуванням вимкнено",
+ "description": "Застосовувати режим Claude Code Fast за замовчуванням для нових запусків команд Anthropic, коли визначена модель і середовище це дозволяють.",
+ "disabledHint": "Нові запуски Anthropic залишаються на звичайній швидкості, доки команда явно не ввімкне режим Fast.",
+ "enabledHint": "Нові запуски Anthropic запитуватимуть режим Fast за замовчуванням, коли визначена модель його підтримує.",
+ "notExposed": "Це середовище Anthropic не надає режим Fast.",
+ "preferFast": "Віддавати перевагу Fast",
+ "title": "Режим Fast за замовчуванням",
+ "unavailableForRuntime": "Режим Fast зараз недоступний для цього середовища Anthropic."
+ },
+ "alerts": {
+ "anthropicApiKeyMissing": "Вибрано режим API-ключа, але поки немає доступних облікових даних API Anthropic.",
+ "anthropicStoredKeyAvailable": "Доступний збережений API-ключ, але сесії Anthropic, запущені застосунком, використовують його лише після того, як ви перемкнетеся в режим API-ключа.",
+ "anthropicSubscriptionMissing": "Вибрано режим підписки Anthropic. Увійдіть через Anthropic, щоб використовувати цього провайдера.",
+ "authTokenMissing": "Токен автентифікації не налаштовано. Багато локальних ендпойнтів, сумісних з Anthropic, вимагають непорожнього токена.",
+ "chatgptLoginPending": "Очікування завершення входу в обліковий запис ChatGPT...",
+ "chatgptLoginStarting": "Запуск входу в ChatGPT...",
+ "codexApiKeyMissing": "Вибрано режим API-ключа, але поки немає доступних облікових даних OPENAI_API_KEY чи CODEX_API_KEY.",
+ "codexLocalArtifactsNoSession": "Codex CLI наразі не має активного облікового запису ChatGPT. Локальні дані облікового запису Codex існують, але не вибрано активної керованої сесії.",
+ "codexNeedsReconnect": "Codex має локально вибраний обліковий запис ChatGPT, але поточній сесії потрібне повторне підключення.",
+ "codexNoChatgptAccount": "Codex CLI наразі не має активного облікового запису ChatGPT. Підключіть ChatGPT, щоб використовувати вашу підписку.",
+ "codexNoCredential": "Поки немає доступного облікового запису ChatGPT чи API-ключа.",
+ "geminiApiUnavailable": "Gemini API зараз недоступний. Налаштуйте тут `GEMINI_API_KEY` або використовуйте дійсні облікові дані Google ADC.",
+ "withApiKeyFallback": "{{message}} Перемкніться в режим API-ключа, щоб використовувати виявлений API-ключ."
+ },
+ "authModeDescriptions": {
+ "anthropic": {
+ "apiKey": "Примусити сесії Anthropic, запущені застосунком, використовувати облікові дані API-ключа.",
+ "auto": "Використовувати стандартну поведінку середовища. Збережені в цьому застосунку API-ключі використовуються лише після того, як ви перемкнетеся в режим API-ключа.",
+ "oauth": "Примусити сесії Anthropic, запущені застосунком, використовувати локальну сесію підписки Anthropic."
+ },
+ "codex": {
+ "apiKey": "Примусити нативні запуски Codex використовувати оплату OPENAI_API_KEY / CODEX_API_KEY.",
+ "auto": "Віддавати перевагу вашому обліковому запису ChatGPT, коли він доступний. Переходити в режим API-ключа лише за потреби.",
+ "chatgpt": "Примусити нативні запуски Codex використовувати ваш підключений обліковий запис ChatGPT і підписку."
+ }
+ },
+ "progress": {
+ "applyingConnectionChanges": "Застосування змін підключення...",
+ "refreshingProviderStatus": "Оновлення статусу провайдера...",
+ "savingCompatibleEndpoint": "Збереження сумісного ендпойнта...",
+ "switchingAnthropicSubscription": "Перемикання на підписку Anthropic...",
+ "switchingApiKey": "Перемикання на API-ключ...",
+ "switchingApiKeyMode": "Перемикання в режим API-ключа...",
+ "switchingAuto": "Перемикання на Auto...",
+ "switchingChatgpt": "Перемикання в режим облікового запису ChatGPT..."
+ },
+ "provider": "Провайдер",
+ "runtime": {
+ "descriptions": {
+ "anthropic": "Anthropic наразі не має окремого селектора бекенда середовища.",
+ "codex": "Codex тепер працює лише через шлях нативного середовища.",
+ "gemini": "Виберіть, яким бекендом середовища Gemini має користуватися мультимодель.",
+ "opencode": "OpenCode використовує власний керований хост середовища. Десктоп наразі надає лише статус."
+ },
+ "title": "Середовище",
+ "updating": "Оновлення середовища..."
+ },
+ "runtimeSummary": "Середовище: {{runtime}}",
+ "status": {
+ "configured": "налаштовано",
+ "enabled": "Увімкнено",
+ "notConfigured": "Не налаштовано",
+ "notSet": "не встановлено",
+ "off": "Вимкнено",
+ "unknown": "Невідомо"
+ },
+ "title": "Налаштування провайдера",
+ "usage": {
+ "apiKey": "Використання API-ключа",
+ "apiKeyRequired": "Потрібен API-ключ",
+ "compatibleEndpoint": "Використання сумісного ендпойнта",
+ "notConnected": "Не підключено",
+ "usingMethod": "Використання {{method}}"
+ },
+ "errors": {
+ "apiKeyDeletedRefreshFailed": "API-ключ видалено, але не вдалося оновити статус провайдера.",
+ "apiKeySavedRefreshFailed": "API-ключ збережено, але не вдалося оновити статус провайдера.",
+ "connectionUpdatedRefreshFailed": "Підключення оновлено, але не вдалося оновити статус провайдера.",
+ "deleteApiKey": "Не вдалося видалити API-ключ",
+ "disableEndpoint": "Не вдалося вимкнути ендпойнт",
+ "endpointDisabledRefreshFailed": "Ендпойнт вимкнено, але не вдалося оновити статус провайдера.",
+ "endpointSavedRefreshFailed": "Ендпойнт збережено, але не вдалося оновити статус провайдера.",
+ "refreshCodexAccount": "Не вдалося оновити обліковий запис Codex",
+ "saveApiKey": "Не вдалося зберегти API-ключ",
+ "saveEndpoint": "Не вдалося зберегти ендпойнт",
+ "updateAnthropicFastMode": "Не вдалося оновити режим Fast Anthropic",
+ "updateConnection": "Не вдалося оновити підключення",
+ "updateRuntimeBackend": "Не вдалося оновити бекенд середовища",
+ "apiKeyRequired": "Потрібен API-ключ"
+ },
+ "connectionUi": {
+ "authMode": {
+ "auto": "Авто",
+ "oauth": "Підписка / OAuth",
+ "chatgpt": "Обліковий запис ChatGPT",
+ "apiKey": "API-ключ",
+ "anthropicSubscription": "Підписка Anthropic"
+ },
+ "authMethod": {
+ "apiKey": "API-ключ",
+ "apiKeyHelper": "Помічник API-ключа",
+ "oauth": "OAuth",
+ "claudeSubscription": "Підписка Claude",
+ "geminiCli": "Gemini CLI",
+ "googleAccount": "Обліковий запис Google",
+ "serviceAccount": "сервісний обліковий запис"
+ },
+ "runtime": {
+ "codexNative": "Codex нативний",
+ "currentRuntime": "Поточне середовище",
+ "selectedRuntime": "Вибране середовище",
+ "summary": "{{prefix}}: {{runtime}}"
+ },
+ "status": {
+ "checking": "Перевірка...",
+ "modelsAvailable": "Моделі доступні",
+ "checked": "Перевірено",
+ "providerActivity": "Активність провайдера",
+ "notConnected": "Не підключено",
+ "startingChatGptLogin": "Запуск входу в ChatGPT...",
+ "waitingForChatGptLogin": "Очікування входу в обліковий запис ChatGPT...",
+ "chatGptVerificationDegraded": "Обліковий запис ChatGPT виявлено - перевірка облікового запису наразі працює з обмеженнями.",
+ "chatGptAccountReady": "Обліковий запис ChatGPT готовий",
+ "apiKeyReady": "API-ключ готовий",
+ "codexLocalAccountNeedsReconnect": "Codex має локально вибраний обліковий запис ChatGPT, але поточній сесії потрібне повторне підключення.",
+ "codexNoActiveManagedSession": "Codex CLI повідомляє про відсутність активного входу в ChatGPT. Локальні дані облікового запису Codex існують, але не вибрано активної керованої сесії.",
+ "codexNoActiveChatGptLogin": "Codex CLI повідомляє про відсутність активного входу в ChatGPT",
+ "connectChatGptForSubscription": "Підключіть обліковий запис ChatGPT, щоб використовувати вашу підписку Codex.",
+ "codexNativeReady": "Codex нативний готовий",
+ "codexNativeUnavailable": "Codex нативний недоступний",
+ "unavailableInCurrentRuntime": "Недоступно в поточному середовищі",
+ "connectedViaApiKey": "Підключено через API-ключ",
+ "apiKeyConfiguredNotVerified": "API-ключ налаштовано, але поки не перевірено",
+ "apiKeyModeMissingCredential": "Вибрано режим API-ключа, але API-ключ не налаштовано",
+ "connectedVia": "Підключено через {{method}}",
+ "unableToVerify": "Не вдалося перевірити"
+ },
+ "mode": {
+ "selectedAuth": "Вибрана автентифікація: {{authMode}}",
+ "preferredAuth": "Бажана автентифікація: {{authMode}}"
+ },
+ "credential": {
+ "apiKeyConfigured": "API-ключ налаштовано",
+ "savedApiKeyAvailable": "Збережений API-ключ доступний у «Керувати»",
+ "apiKeyAlsoConfigured": "API-ключ також налаштовано в «Керувати»",
+ "apiKeyConfiguredInManage": "API-ключ налаштовано в «Керувати»",
+ "apiKeyFallbackInManage": "API-ключ також доступний у «Керувати» як резервний",
+ "availableAsFallback": "{{summary}} - доступний як резервний",
+ "savedApiKeyAvailableIfSwitch": "Збережений API-ключ доступний у «Керувати», якщо ви перемкнетеся в режим API-ключа",
+ "availableIfSwitch": "{{summary}} - доступний, якщо ви перемкнетеся в режим API-ключа",
+ "autoWillUseUntilChatGpt": "{{summary}} - Auto використовуватиме це, доки не буде підключено ChatGPT"
+ },
+ "actions": {
+ "connect": "Підключити",
+ "connectAnthropic": "Підключити Anthropic",
+ "connectChatGpt": "Підключити ChatGPT",
+ "disconnect": "Відключити",
+ "openLogin": "Відкрити вхід"
+ },
+ "disconnect": {
+ "anthropicTitle": "Відключити підписку Anthropic?",
+ "anthropic": "Це видаляє локальну сесію підписки Anthropic із середовища Claude CLI.",
+ "anthropicWithApiKey": "Це видаляє локальну сесію підписки Anthropic із середовища Claude CLI. Збережені API-ключі в «Керувати» залишаються доступними.",
+ "geminiTitle": "Відключити Gemini CLI?",
+ "gemini": "Це очищає метадані локальної сесії Gemini CLI. Зовнішні облікові дані ADC та збережені API-ключі не видаляються."
+ }
+ }
+ },
+ "cliRuntime": {
+ "actions": {
+ "checkForUpdates": "Перевірити оновлення",
+ "checking": "Перевірка...",
+ "extensions": "Розширення",
+ "installRuntime": "Встановити {{runtime}}",
+ "manage": "Керувати",
+ "recheck": "Перевірити ще раз",
+ "reinstallRuntime": "Перевстановити {{runtime}}",
+ "retry": "Повторити",
+ "update": "Оновити"
+ },
+ "installer": {
+ "checkingLatest": "Перевірка найновішої версії...",
+ "downloading": "Завантаження...",
+ "failed": "Не вдалося встановити",
+ "installed": "Встановлено v{{version}}",
+ "installing": "Встановлення...",
+ "latest": "latest",
+ "verifying": "Перевірка контрольної суми..."
+ },
+ "labels": {
+ "multimodel": "Мультимодель"
+ },
+ "loading": {
+ "aiProviders": "Перевірка AI-провайдерів...",
+ "claudeCli": "Перевірка Claude CLI..."
+ },
+ "provider": {
+ "backend": "Бекенд: {{backend}}",
+ "loadingModels": "Завантаження моделей...",
+ "modelsUnavailable": "Моделі недоступні для цієї збірки середовища",
+ "runtime": "Середовище: {{runtime}}"
+ },
+ "providerTerminal": {
+ "authFailed": "Помилка автентифікації",
+ "authUpdated": "Автентифікацію оновлено",
+ "loggedOut": "Провайдер вийшов із системи",
+ "login": "Вхід",
+ "logout": "Вихід",
+ "logoutFailed": "Не вдалося вийти"
+ },
+ "status": {
+ "configuredNotFound": "Налаштоване середовище {{runtime}} не знайдено.",
+ "foundButFailed": "{{runtime}} знайдено, але не вдалося запустити",
+ "healthCheckFailed": "Налаштоване середовище {{runtime}} не пройшло перевірку працездатності під час запуску.",
+ "notInstalled": "{{runtime}} не встановлено"
+ },
+ "title": "Середовище CLI"
+ },
+ "cliStatus": {
+ "versionUpgrade": "v{{current}} -> v{{latest}}"
+ }
+}
diff --git a/src/features/localization/renderer/locales/uk/team.json b/src/features/localization/renderer/locales/uk/team.json
new file mode 100644
index 00000000..174e2e38
--- /dev/null
+++ b/src/features/localization/renderer/locales/uk/team.json
@@ -0,0 +1,2487 @@
+{
+ "activity": {
+ "actions": {
+ "createTaskFromMessage": "Створити завдання з повідомлення",
+ "editMessage": "Редагувати повідомлення",
+ "expandMessage": "Розгорнути повідомлення",
+ "replyToMessage": "Відповісти на повідомлення",
+ "restartTeam": "Перезапустити команду"
+ },
+ "authError": {
+ "description": "Помилка автентифікації. Перезапуск команди оновить сесію й може вирішити цю проблему. Якщо проблема не зникає, перевірте свої облікові дані API або спробуйте пізніше."
+ },
+ "automation": {
+ "reviewPickup": "Попросили учасника взятися за перегляд",
+ "stallNudge": "Попросили учасника продовжити застрягле завдання",
+ "workSyncBody": "Попросили учасника синхронізувати поточну роботу"
+ },
+ "badges": {
+ "automation": "автоматизація",
+ "bootstrap": "bootstrap",
+ "command": "команда",
+ "comment": "Коментар",
+ "live": "наживо",
+ "note": "нотатка",
+ "rateLimited": "Перевищено ліміт",
+ "restart": "перезапуск",
+ "result": "результат",
+ "session": "сесія",
+ "stallNudge": "нагадування про застрягання",
+ "start": "початок",
+ "workSync": "синхронізація роботи",
+ "agentError": "Помилка агента",
+ "apiError": "Помилка API"
+ },
+ "bootstrap": {
+ "acknowledged": "Bootstrap підтверджено",
+ "restarting": "Перезапуск учасника",
+ "starting": "Запуск учасника"
+ },
+ "rawJson": "Сирий JSON",
+ "unread": "Непрочитане",
+ "thoughts": {
+ "count": "{{count}} думок",
+ "count_one": "{{count}} думка",
+ "expand": "Розгорнути думки",
+ "showMore": "Показати більше",
+ "showLess": "Згорнути",
+ "count_few": "{{count}} думки",
+ "count_many": "{{count}} думок",
+ "count_other": "{{count}} думок",
+ "toolSummary": "🔧 {{summary}}",
+ "titleForMember": "{{name}} - думки"
+ },
+ "timeline": {
+ "loadingMessages": "Завантаження повідомлень...",
+ "noMessages": "Немає повідомлень",
+ "emptyHint": "Надішліть повідомлення учаснику, щоб побачити активність.",
+ "newSession": "Нова сесія",
+ "olderCount": "+{{count}} старіших",
+ "showMore": "Показати ще {{count}}",
+ "showAll": "Показати все",
+ "olderCount_one": "+{{count}} старіше",
+ "olderCount_few": "+{{count}} старіші",
+ "olderCount_many": "+{{count}} старіших",
+ "olderCount_other": "+{{count}} старіших"
+ },
+ "pendingReplies": {
+ "title": "Очікування відповідей",
+ "openMember": "Відкрити учасника",
+ "messageSentAwaitingReply": "Повідомлення надіслано, очікування відповіді",
+ "awaitingReply": "очікування відповіді",
+ "externalTeam": "зовнішня команда",
+ "crossTeamAwaitingReply": "Повідомлення між командами надіслано, очікування відповіді",
+ "user": "користувач",
+ "awaitingApproval": "очікування затвердження"
+ },
+ "reply": {
+ "replyingTo": "Відповідь на",
+ "action": "Відповісти"
+ },
+ "activeTasks": {
+ "inProgress": "У процесі",
+ "expandInProgress": "Розгорнути «У процесі»",
+ "collapseInProgress": "Згорнути «У процесі»",
+ "reviewing": "переглядає",
+ "workingOn": "працює над"
+ },
+ "expandDialog": {
+ "description": "Розгорнутий перегляд повідомлення"
+ }
+ },
+ "create": {
+ "actions": {
+ "create": "Створити",
+ "creating": "Створення...",
+ "openExisting": "Відкрити наявну команду",
+ "skipPreflightAndCreate": "Пропустити передперевірку та створити"
+ },
+ "conflict": {
+ "description": "Запуск двох команд в одному каталозі ризикований - вони можуть конфліктувати, редагуючи одні й ті самі файли. Розгляньте інший каталог або git worktree для ізоляції.",
+ "title": "Інша команда \"{{team}}\" уже запущена для цього робочого каталогу",
+ "workingDirectory": "Робочий каталог:"
+ },
+ "description": {
+ "copy": "Створіть нову команду на основі наявної.",
+ "create": "Налаштуйте свою команду та виберіть, як вона запускається."
+ },
+ "errors": {
+ "nameExists": "Назва команди вже існує",
+ "nameLaunching": "Команда з цією назвою зараз запускається",
+ "createConfigFailed": "Не вдалося створити конфігурацію команди",
+ "loadProjectsFailed": "Не вдалося завантажити проєкти"
+ },
+ "fields": {
+ "color": "Колір (необов'язково)",
+ "description": "Опис (необов'язково)",
+ "prompt": "Промпт для лідера команди (необов'язково)",
+ "teamName": "Назва команди"
+ },
+ "launchAfterCreate": {
+ "description": "Запустити команду одразу через локальний Claude CLI.",
+ "label": "Виконати команду після створення"
+ },
+ "localOnly": "Доступно лише в локальному режимі Electron.",
+ "onDisk": "На диску:",
+ "placeholders": {
+ "description": "Стислий опис призначення команди",
+ "prompt": "Інструкції для лідера команди під час розгортання..."
+ },
+ "saved": "Збережено",
+ "solo": {
+ "description": "Буде запущено лише лідера команди (головний процес) - жодного учасника не буде створено. Працює як звичайна сесія агента в обраному середовищі (Claude Code, Codex, OpenCode, Gemini), але з доступом до дошки завдань для планування. Економить токени, уникаючи накладних витрат на координацію учасників. Ви можете додати учасників пізніше з налаштувань команди.",
+ "label": "Соло-команда"
+ },
+ "title": {
+ "copy": "Копіювати команду",
+ "create": "Створити команду"
+ },
+ "optional": {
+ "launchSettingsTitle": "Необов'язкові налаштування запуску",
+ "launchSettingsDescription": "Промпт, безпека та перевизначення CLI знаходяться тут, коли вони вам потрібні.",
+ "teamDetailsTitle": "Необов'язкові деталі команди",
+ "teamDetailsDescription": "Тримайте стандартний процес компактним і відкривайте це, лише коли хочете додатковий контекст чи власний колір."
+ },
+ "prepare": {
+ "unsupportedPreload": "Поточна версія preload не підтримує team:prepareProvisioning. Перезапустіть dev-застосунок.",
+ "selectWorkingDirectory": "Виберіть робочий каталог, щоб перевірити середовище запуску.",
+ "someProvidersNeedAttention": "Деякі вибрані провайдери потребують уваги.",
+ "readyWithNotes": "Усі вибрані провайдери готові, з примітками.",
+ "ready": "Усі вибрані провайдери готові.",
+ "failed": "Не вдалося підготувати вибраних провайдерів",
+ "checkingProviders": "Перевірка вибраних провайдерів...",
+ "preparingEnvironment": "Підготовка середовища...",
+ "selectedProvidersReadyWithNotes": "Вибрані провайдери готові (з примітками)",
+ "selectedProvidersReady": "Вибрані провайдери готові"
+ },
+ "validation": {
+ "nameMustContainLetterOrDigit": "Назва має містити щонайменше одну літеру чи цифру",
+ "nameTooLong": "Назва задовга (макс. 128 симв.)",
+ "selectWorkingDirectory": "Виберіть робочий каталог (cwd)",
+ "memberNameRequired": "Ім'я учасника не може бути порожнім",
+ "memberNameInvalid": "Ім'я учасника має починатися з літери чи цифри, використовувати лише [a-zA-Z0-9._-], макс. 128 симв.",
+ "memberNamesUnique": "Імена учасників мають бути унікальними",
+ "openCodeLeadModelRequired": "Лідер OpenCode вимагає вибраної моделі.",
+ "openCodeTeammateRequired": "Лідер OpenCode вимагає щонайменше одного учасника OpenCode.",
+ "teamLaunching": "Команда зараз запускається",
+ "teamNameExists": "Назва команди вже існує",
+ "checkFormFields": "Перевірте поля форми"
+ }
+ },
+ "editTeam": {
+ "actions": {
+ "cancel": "Скасувати",
+ "save": "Зберегти"
+ },
+ "addMemberLockReason": "Використовуйте окремий діалог «Додати учасника», щоб додавати нових учасників, поки команда активна.",
+ "description": "Змінити назву, опис і колір команди",
+ "errors": {
+ "changesSavedRefreshFailed": "Зміни команди збережено, але не вдалося оновити найновіший вигляд: {{message}}",
+ "liveRenameBlocked": "Наявних учасників не можна перейменувати, поки команда активна. перейменовано: {{names}}",
+ "memberNameEmpty": "Ім'я учасника не може бути порожнім",
+ "memberNameInvalid": "Ім'я учасника має починатися з літери чи цифри, використовувати лише [a-zA-Z0-9._-], макс. 128 симв.",
+ "memberNameNumericSuffix": "Ім'я учасника \"{{name}}\" не дозволено (зарезервовано для авто-суфікса Claude CLI). Використовуйте \"{{base}}\" замість нього.",
+ "memberNameReserved": "Ім'я учасника \"{{name}}\" зарезервовано",
+ "memberNamesUnique": "Імена учасників мають бути унікальними перед збереженням",
+ "newLiveTeammates": "Додавайте нових учасників із окремого діалогу «Додати учасника», поки команда активна. «Редагувати команду» підтримує лише оновлення наявних учасників.",
+ "provisioning": "Налаштування команди не можна редагувати, поки розгортання ще триває. Зачекайте на завершення запуску, потім спробуйте знову.",
+ "restartFailedMany": "Команду збережено, але не вдалося перезапустити цих учасників: {{failures}}",
+ "restartFailedOne": "Команду збережено, але не вдалося перезапустити цього учасника: {{failures}}",
+ "saveFailed": "Не вдалося зберегти",
+ "settingsChanged": "Налаштування команди змінилися, поки цей діалог був відкритий. Відкрийте його знову та перегляньте найновіший стан перед збереженням.",
+ "settingsSavedMembersAndRefreshFailed": "Налаштування команди збережено, але зміни учасників не вдалися: {{message}}. Оновлення також не вдалося: {{refreshError}}",
+ "settingsSavedMembersFailed": "Налаштування команди збережено, але зміни учасників не вдалися: {{message}}",
+ "settingsSavedRefreshFailed": "Налаштування команди збережено, але не вдалося оновити найновіший вигляд: {{message}}",
+ "teamNameEmpty": "Назва команди не може бути порожньою",
+ "unsupportedMixedPrimaryMutation": "Живе редагування учасників, що належать первинному, у змішаних командах OpenCode поки не підтримується. Зупиніть команду, відредагуйте склад, потім перезапустіть. Зачеплено: {{names}}"
+ },
+ "fields": {
+ "colorOptional": "Колір (необов'язково)",
+ "description": "Опис",
+ "name": "Назва"
+ },
+ "memberRestartWarning": "Збереження перезапустить цього учасника, щоб застосувати зміни ролі, робочого процесу, ізоляції worktree, провайдера, моделі, зусиль чи доступу до MCP.",
+ "notices": {
+ "liveRenameBlocked": "Живе збереження заблоковано, бо наявних учасників було перейменовано. Скасуйте ці зміни ідентичності або спочатку зупиніть команду.",
+ "newLiveTeammates": "Нових учасників не можна додавати з «Редагувати команду», поки команда активна. Використовуйте натомість діалог «Додати учасника».",
+ "provisioning": "Розгортання команди ще триває. Редагування тимчасово заблоковано до завершення запуску.",
+ "restartMany": "Збереження перезапустить чи повторно запустить цих учасників, щоб застосувати зміни ролі, робочого процесу, ізоляції worktree, провайдера, моделі, зусиль чи доступу до MCP: {{names}}.",
+ "restartOne": "Збереження перезапустить чи повторно запустить цього учасника, щоб застосувати зміни ролі, робочого процесу, ізоляції worktree, провайдера, моделі, зусиль чи доступу до MCP: {{names}}.",
+ "unsupportedMixedPrimaryMutation": "Живі редагування/видалення учасників, що належать первинному, у змішаних командах OpenCode вимагають зупинки та перезапуску команди: {{names}}."
+ },
+ "placeholders": {
+ "description": "Опис команди (необов'язково)",
+ "teamName": "Назва команди"
+ },
+ "teamLead": {
+ "changeRuntime": "Змінити середовище лідера",
+ "changeRuntimeDescription": "Відкрийте «Перезапустити команду», щоб змінити провайдера, модель чи зусилля лідера.",
+ "modelLockReason": "Середовище лідера команди керується з «Перезапустити команду».",
+ "readOnlyHint": "Ім'я та роль лідера команди залишаються тут лише для читання. Відкрийте панель середовища в рядку лідера, щоб змінити провайдера, модель чи зусилля.",
+ "role": "Лідер команди"
+ },
+ "title": "Редагувати команду"
+ },
+ "memberDraft": {
+ "actions": {
+ "remove": "Видалити учасника",
+ "removeAria": "Видалити {{name}}",
+ "restore": "Відновити учасника",
+ "restoreAria": "Відновити {{name}}"
+ },
+ "anthropicContext": {
+ "defaultSetting": "стандартне налаштування контексту",
+ "description": "Контекст Anthropic поширюється на всю команду для цього запуску: {{mode}}. Використовуйте прапорець «Обмежити контекст» на панелі середовища лідера, щоб змінити його.",
+ "limitEnabled": "Ліміт 200K увімкнено"
+ },
+ "mcp": {
+ "buttonInherit": "Успадкувати MCP",
+ "buttonScopes": "Області MCP",
+ "chooseScopes": "Виберіть області",
+ "inheritLead": "Успадкувати від лідера",
+ "lockedInfo": "Для всіх учасників увімкнено лише Agent Teams MCP. Цей учасник запуститься лише з сервером Agent Teams.",
+ "mode": "Режим MCP",
+ "scopes": {
+ "local": "локальна",
+ "project": "проєкт",
+ "user": "користувач"
+ },
+ "serverNames": "Назви серверів",
+ "settingInfo": "Agent Teams MCP запускає цього учасника лише з сервером Agent Teams. Режими області та дозволеного списку застосовуються лише до запуску цього учасника.",
+ "strictAllowlist": "Суворий дозволений список",
+ "tooltip": "{{label}}: Контролюйте політику успадкування MCP цього учасника",
+ "agentTeamsMcp": "Agent Teams MCP"
+ },
+ "model": {
+ "ariaLabel": "Провайдер {{provider}}, {{model}}",
+ "currentLeadRuntime": "Поточне середовище лідера",
+ "default": "За замовчуванням",
+ "inheritedTooltip": "Провайдер, модель і зусилля успадковуються від лідера, поки ввімкнено синхронізацію.",
+ "leadSuffix": "{{label}} (лідер)",
+ "liveDisabled": "Зміни провайдера, моделі та зусиль вимкнено, поки команда активна. Перепідключіть команду, щоб застосувати їх безпечно.",
+ "lockedActionFallback": "Зміни середовища лідера відкривають «Перезапустити команду», де можна оновити провайдера, модель і зусилля.",
+ "restartWholeTeam": "Збереження цих змін середовища перезапускає всю команду."
+ },
+ "nameAria": "Ім'я учасника {{index}}",
+ "nameFallback": "учасник {{index}}",
+ "noRole": "Без ролі",
+ "removed": "Видалено",
+ "workflow": {
+ "addTooltip": "Додати робочий процес учасника",
+ "editTooltip": "Редагувати робочий процес учасника",
+ "label": "Робочий процес (необов'язково)",
+ "placeholder": "Як цей агент має поводитися, взаємодіяти з іншими...",
+ "saved": "Збережено"
+ },
+ "worktree": {
+ "description": "Запустити цього учасника в окремому git worktree. Застосування/відхилення змін націлене на той worktree, а не на робочий простір лідера.",
+ "label": "Worktree"
+ },
+ "addMembers": {
+ "title": "Додати учасників",
+ "description": "Додати нових учасників до {{teamName}}"
+ },
+ "placeholders": {
+ "name": "member-name",
+ "mcpServers": "github, sentry"
+ }
+ },
+ "detail": {
+ "actions": {
+ "add": "Додати",
+ "cancel": "Скасувати",
+ "delete": "Видалити",
+ "editCode": "Редагувати код",
+ "launch": "Запустити",
+ "remove": "Видалити",
+ "stop": "Зупинити",
+ "task": "Завдання",
+ "visualize": "Візуалізувати"
+ },
+ "deleteTeam": {
+ "description": "Видалити команду \"{{team}}\"? Цю дію неможливо скасувати. Усі дані команди та завдання буде видалено.",
+ "title": "Видалити команду"
+ },
+ "draft": {
+ "descriptionPrefix": "Це чернетка команди -",
+ "descriptionSuffix": "налаштовано з {{count}} {{member}}, але CLI ще не розгорнув її. Натисніть «Запустити», щоб вибрати модель і запустити команду.",
+ "descriptionSuffix_few": "налаштовано з {{count}} {{member}}, але CLI ще не розгорнув її. Натисніть «Запустити», щоб вибрати модель і запустити команду.",
+ "descriptionSuffix_many": "налаштовано з {{count}} {{member}}, але CLI ще не розгорнув її. Натисніть «Запустити», щоб вибрати модель і запустити команду.",
+ "descriptionSuffix_one": "налаштовано з {{count}} {{member}}, але CLI ще не розгорнув її. Натисніть «Запустити», щоб вибрати модель і запустити команду.",
+ "descriptionSuffix_other": "налаштовано з {{count}} {{member}}, але CLI ще не розгорнув її. Натисніть «Запустити», щоб вибрати модель і запустити команду.",
+ "member": "учасників",
+ "member_few": "учасники",
+ "member_many": "учасників",
+ "member_one": "учасник",
+ "member_other": "учасників",
+ "title": "Команду ще не запущено"
+ },
+ "invalidTab": "Недійсна вкладка команди",
+ "kanbanSafeData": "Не вдалося повністю завантажити kanban. Відображаються безпечні дані.",
+ "loadFailed": "Не вдалося завантажити команду",
+ "loading": "Завантаження команди",
+ "loadingSidebar": "Завантаження бічної панелі команди",
+ "offline": {
+ "offline": "Команда офлайн",
+ "partialFailed": "Останній запуск не вдався на півдорозі",
+ "partialMissing": "Останній запуск не вдався на півдорозі - {{missing}}/{{expected}} учасників не приєдналися",
+ "reconciling": "Останній запуск ще узгоджується"
+ },
+ "previous": "Попереднє: {{paths}}",
+ "removeMember": {
+ "description": "Видалити \"{{member}}\" з команди? Завдання та повідомлення буде збережено, але це ім'я не можна буде використати повторно.",
+ "title": "Видалити учасника"
+ },
+ "sections": {
+ "team": "Команда"
+ },
+ "solo": "Соло",
+ "status": {
+ "active": "Активна",
+ "launching": "Запуск...",
+ "running": "Запущено"
+ },
+ "telemetry": {
+ "cpu": "CPU",
+ "memory": "Пам'ять"
+ },
+ "tooltips": {
+ "deleteTeam": "Видалити команду",
+ "editTeam": "Редагувати команду",
+ "editUnavailableProvisioning": "Редагування команди недоступне, поки розгортання ще триває",
+ "openBuiltInEditor": "Відкрити проєкт у вбудованому редакторі",
+ "openTeamGraph": "Відкрити граф команди",
+ "stopTeam": "Зупинити команду"
+ },
+ "waitingForProvisioning": "Дані команди з'являться після завершення розгортання",
+ "context": {
+ "title": "Контекст",
+ "loading": "Завантаження...",
+ "noSessionLoaded": "Сесію не завантажено",
+ "closePanel": "Закрити панель контексту {{team}}",
+ "loadingContext": "Завантаження контексту...",
+ "openLeadSession": "Відкрийте сесію лідера команди, щоб переглянути контекст."
+ }
+ },
+ "review": {
+ "fileHeader": {
+ "actions": {
+ "accept": "Прийняти",
+ "discard": "Відхилити",
+ "discardTooltip": "Відхилити всі редагування для цього файлу",
+ "keepMyDraft": "Зберегти мою чернетку",
+ "reject": "Відхилити",
+ "reloadFromDisk": "Перезавантажити з диска",
+ "restore": "Відновити",
+ "restoreTooltip": "Створити/відновити цей файл на диску з перегляду",
+ "saveFile": "Зберегти файл",
+ "saveFileTooltip": "Зберегти файл на диск"
+ },
+ "badges": {
+ "deleted": "ВИДАЛЕНО",
+ "manualReview": "РУЧНИЙ ПЕРЕГЛЯД",
+ "new": "НОВИЙ",
+ "worktree": "WORKTREE"
+ },
+ "contentSource": {
+ "disk-current": "Поточний диск",
+ "file-history": "Історія файлу",
+ "git-fallback": "Резервний Git",
+ "ledger-exact": "Журнал завдань",
+ "ledger-snapshot": "Знімок журналу",
+ "snippet-reconstruction": "Реконструйовано",
+ "unavailable": "Вміст недоступний"
+ },
+ "contentUnavailable": {
+ "badge": "Вміст недоступний",
+ "description": "Журнал записав метадані для цієї зміни, але повний текстовий вміст недоступний. Зазвичай це означає бінарний, великий чи лише хешований вміст.",
+ "safety": "Автоматичне прийняття/відхилення вимкнено для цього файлу, щоб уникнути небезпечних записів на диск.",
+ "title": "Текстовий вміст недоступний"
+ },
+ "disabled": {
+ "acceptRejectContentUnavailable": "Прийняти/Відхилити вимкнено, бо повний текстовий вміст недоступний.",
+ "acceptRejectMissingOnDisk": "Прийняти/Відхилити вимкнено, поки файл відсутній на диску.",
+ "rejectBaselineUnavailable": "Відхилити вимкнено, бо оригінальна базова версія недоступна.",
+ "rejectContentUnavailable": "Відхилити вимкнено, бо повний текстовий вміст недоступний.",
+ "rejectManualLedgerReview": "Відхилити вимкнено, бо ця зміна журналу має бінарний, великий чи недоступний вміст."
+ },
+ "externalChange": {
+ "changedOnDisk": "Змінено на диску",
+ "deletedOnDisk": "Видалено з диска",
+ "recreatedOnDisk": "Відтворено на диску"
+ },
+ "missingOnDisk": {
+ "badge": "Відсутній на диску",
+ "description": "Ми все ще можемо показати перегляд із журналів агента, але ваша файлова система не синхронізована.",
+ "restorePrefix": "Використайте",
+ "restoreSuffix": "щоб записати вміст перегляду назад на диск.",
+ "restoreUnavailable": "Повний вміст файлу недоступний для автоматичного відновлення.",
+ "title": "Файл відсутній на диску"
+ },
+ "pathChange": {
+ "from": "З {{path}}",
+ "to": "До {{path}}"
+ },
+ "worktree": {
+ "isolated": "Ізольований worktree"
+ }
+ },
+ "toolbar": {
+ "stats": {
+ "pending": "{{count}} в очікуванні",
+ "pending_one": "{{count}} в очікуванні",
+ "pending_other": "{{count}} в очікуванні",
+ "accepted": "{{count}} прийнято",
+ "accepted_one": "{{count}} прийнято",
+ "accepted_other": "{{count}} прийнято",
+ "rejected": "{{count}} відхилено",
+ "rejected_one": "{{count}} відхилено",
+ "rejected_other": "{{count}} відхилено",
+ "acrossFiles": "у {{count}} файлах",
+ "acrossFiles_one": "у {{count}} файлі",
+ "acrossFiles_other": "у {{count}} файлах",
+ "edited": "{{count}} відредаговано",
+ "edited_one": "{{count}} відредаговано",
+ "edited_other": "{{count}} відредаговано",
+ "pending_few": "{{count}} в очікуванні",
+ "pending_many": "{{count}} в очікуванні",
+ "accepted_few": "{{count}} прийнято",
+ "accepted_many": "{{count}} прийнято",
+ "rejected_few": "{{count}} відхилено",
+ "rejected_many": "{{count}} відхилено",
+ "acrossFiles_few": "у {{count}} файлах",
+ "acrossFiles_many": "у {{count}} файлах",
+ "edited_few": "{{count}} відредаговано",
+ "edited_many": "{{count}} відредаговано"
+ },
+ "actions": {
+ "auto": "Авто",
+ "undo": "Скасувати",
+ "acceptAll": "Прийняти все",
+ "rejectAll": "Відхилити все",
+ "applying": "Застосування...",
+ "applyRejections": "Застосувати відхилення"
+ },
+ "tooltips": {
+ "autoOn": "Автоматично позначати файли як переглянуті при прокручуванні до кінця (УВІМК)",
+ "autoOff": "Автоматично позначати файли як переглянуті при прокручуванні до кінця (ВИМК)",
+ "undo": "Скасувати останню операцію перегляду (Ctrl+Z)",
+ "acceptAll": "Прийняти всі зміни в усіх файлах",
+ "rejectAll": "Безпечно відхилити всі відхиляльні зміни в усіх файлах",
+ "rejectAllDisabled": "Жоден файл в очікуванні не має безпечної оригінальної базової версії для відхилення.",
+ "applyRejections": "Застосувати відхилені фрагменти до диска; прийняті зміни залишаються як є"
+ }
+ },
+ "diffError": {
+ "title": "Не вдалося відрендерити перегляд відмінностей",
+ "unexpected": "Сталася неочікувана помилка під час рендерингу відмінностей.",
+ "actions": {
+ "retry": "Повторити"
+ },
+ "raw": {
+ "show": "Показати сирі дані відмінностей",
+ "file": "Файл: {{file}}",
+ "original": "--- Оригінал",
+ "modified": "+++ Змінено",
+ "charsTotal": "... (усього {{count}} симв.)",
+ "charsTotal_one": "... (усього {{count}} симв.)",
+ "charsTotal_other": "... (усього {{count}} симв.)",
+ "charsTotal_few": "... (усього {{count}} симв.)",
+ "charsTotal_many": "... (усього {{count}} симв.)"
+ }
+ },
+ "fileTree": {
+ "viewed": "Переглянуто",
+ "badges": {
+ "new": "новий",
+ "deleted": "видалено"
+ },
+ "collapseFolder": "Згорнути {{name}}",
+ "expandFolder": "Розгорнути {{name}}",
+ "empty": {
+ "noChangedFiles": "Немає змінених файлів",
+ "noMatchingFiles": "Немає відповідних файлів"
+ },
+ "searchPlaceholder": "Пошук файлів…",
+ "filters": {
+ "unresolved": "Невирішені",
+ "rejected": "Відхилені",
+ "new": "Нові",
+ "clear": "Очистити"
+ }
+ },
+ "diffControls": {
+ "previousChunk": "Попередній фрагмент",
+ "nextChunk": "Наступний фрагмент",
+ "rejectChange": "Відхилити зміну (⌘N)",
+ "acceptChange": "Прийняти зміну (⌘Y)",
+ "undo": "Скасувати",
+ "keep": "Зберегти",
+ "rejectShortcut": "⌘N",
+ "acceptShortcut": "⌘Y"
+ },
+ "conflict": {
+ "title": "Виявлено конфлікт",
+ "description": "Цей файл було змінено після змін агента",
+ "cancel": "Скасувати",
+ "saveResolution": "Зберегти вирішення",
+ "editManually": "Редагувати вручну",
+ "useOriginal": "Використати оригінал",
+ "keepCurrent": "Зберегти поточний"
+ },
+ "fullDiffLoading": {
+ "titleOne": "Підготовка повних відмінностей",
+ "titleMany": "Підготовка {{count}} повних відмінностей",
+ "subtitleForFile": "Завершення точних відмінностей редактора для {{file}}.",
+ "subtitleCurrentFile": "Завершення точних відмінностей редактора для поточного файлу.",
+ "subtitleMany": "Визначення точних базових версій до/після для файлів, що завантажуються.",
+ "previewsReady": "{{count}} переглядів готово",
+ "previewsReady_one": "{{count}} перегляд готовий",
+ "editorViewLoading": "Завантаження перегляду редактора",
+ "filesInProgress": "{{count}} файлів у процесі",
+ "filesInProgress_one": "{{count}} файл у процесі",
+ "filesReady": "{{ready}}/{{total}} файлів готово",
+ "progressDescription": "{{ready}} готово, {{loading}} ще завантажуються. Переглядові відмінності залишаються видимими нижче, поки визначаються решта базових версій.",
+ "singleDescription": "Переглядові відмінності залишаються видимими нижче, поки визначається точна базова версія.",
+ "previewsReady_few": "{{count}} перегляди готово",
+ "previewsReady_many": "{{count}} переглядів готово",
+ "previewsReady_other": "{{count}} переглядів готово",
+ "filesInProgress_few": "{{count}} файли у процесі",
+ "filesInProgress_many": "{{count}} файлів у процесі",
+ "filesInProgress_other": "{{count}} файлів у процесі"
+ },
+ "fileMissingPrefix": "Файл відсутній на диску. Ці відмінності можуть бути лише переглядом із журналів агента. Використайте",
+ "restore": "Відновити",
+ "fileMissingSuffix": "щоб створити файл на диску.",
+ "filePlaceholder": {
+ "loading": "Завантаження",
+ "description": "Підготовка повних відмінностей редактора для цього файлу."
+ },
+ "loading": {
+ "diff": "ВІДМІННОСТІ",
+ "ledgerObjectsProcessed": "{{count}} об'єктів журналу оброблено",
+ "ledgerObjectsProcessed_one": "{{count}} об'єкт журналу оброблено",
+ "ledgerObjectsProcessed_other": "{{count}} об'єктів журналу оброблено",
+ "ledgerObjectsProcessed_few": "{{count}} об'єкти журналу оброблено",
+ "ledgerObjectsProcessed_many": "{{count}} об'єктів журналу оброблено",
+ "phases": {
+ "readingLedger": "Читання журналу завдань...",
+ "resolvingFiles": "Визначення станів файлів...",
+ "checkingWorktree": "Перевірка контексту worktree...",
+ "preparingDiffs": "Підготовка відмінностей для перегляду..."
+ }
+ },
+ "progress": {
+ "viewed": "{{viewed}}/{{total}} переглянуто"
+ },
+ "scope": {
+ "readMore": "Читати більше",
+ "tiers": {
+ "exact": {
+ "title": "Область завдання визначено точно",
+ "detail": "Маркери початку й завершення знайдено в журналі сесії. Відмінності включають лише зміни, зроблені під час цього конкретного завдання - інші завдання, що змінювали ті самі файли, виключено."
+ },
+ "endEstimated": {
+ "title": "Межу завершення оцінено приблизно",
+ "detail": "Знайдено лише маркер початку - завдання поки не має маркера завершення. Зміни показано від початку завдання до кінця сесії. Якщо інші завдання виконувалися після цього в тій самій сесії, їхні зміни також можуть бути включені."
+ },
+ "startEstimated": {
+ "title": "Межу початку оцінено приблизно",
+ "detail": "Знайдено лише маркер завершення - початок роботи не зафіксовано. Якщо інші завдання виконувалися до цього в тій самій сесії, їхні зміни в тих самих файлах також можуть бути включені."
+ },
+ "allSession": {
+ "title": "Показано всі зміни сесії",
+ "detail": "Маркерів завдань у журналі сесії не знайдено. Неможливо ізолювати це завдання - показано всі зміни файлів за всю сесію, включно зі змінами з інших завдань. Це може траплятися зі старішими версіями CLI чи нестандартними робочими процесами."
+ }
+ },
+ "ledger": {
+ "exact": {
+ "title": "Зміни зафіксовано журналом завдань",
+ "detail": "Оркестратор зафіксував ці зміни файлів, поки агент працював над цим завданням.",
+ "badge": "Журнал точний"
+ },
+ "limited": {
+ "title": "Зміни зафіксовано з обмеженою переглядовністю",
+ "detail": "Оркестратор зафіксував ці зміни файлів для цього завдання, але щонайменше одну зміну зафіксовано зі знімка чи джерела лише з метаданими. Переглядайте точні текстові відмінності, де вони доступні; бінарний чи недоступний вміст може потребувати ручного перегляду.",
+ "mixedBadge": "Змішана переглядовність",
+ "needsReviewBadge": "Потребує перегляду"
+ }
+ },
+ "workInterval": {
+ "title": "Обмежено збереженим інтервалом роботи",
+ "detail": "Маркер початку завдання був недоступний у журналі сесії, тому відмінності обмежено інтервалом роботи завдання, збереженим на дошці.",
+ "badge": "Обмежено інтервалом"
+ },
+ "confidence": {
+ "high": "Висока впевненість",
+ "medium": "Середня впевненість",
+ "low": "Низька впевненість",
+ "bestEffort": "Якнайкраще"
+ }
+ },
+ "shortcuts": {
+ "title": "Клавіатурні скорочення",
+ "actions": {
+ "nextChange": "Наступна зміна",
+ "previousChange": "Попередня зміна",
+ "nextFile": "Наступний файл",
+ "previousFile": "Попередній файл",
+ "acceptChange": "Прийняти зміну",
+ "rejectChange": "Відхилити зміну",
+ "saveFile": "Зберегти файл",
+ "undo": "Скасувати",
+ "redo": "Повторити",
+ "toggleShortcuts": "Перемкнути скорочення",
+ "closeDialog": "Закрити діалог"
+ }
+ },
+ "timeline": {
+ "empty": "Немає подій редагування",
+ "titleWithCount": "Хронологія редагувань ({{count}})"
+ },
+ "continuousScroll": {
+ "empty": "Немає переглядовних змін файлів"
+ },
+ "empty": {
+ "noSafeDiff": "Немає доступних безпечних відмінностей",
+ "noFileChangesRecorded": "Не записано змін файлів",
+ "noSafeDiffDescription": "Журнал завдань не надав безпечних відмінностей файлів для цього завдання.",
+ "noSafeDiffDiagnosticsDescription": "Журнал завдань не надав безпечних відмінностей файлів для цього завдання. Діагностика нижче пояснює чому.",
+ "noFileEventsYet": "Журнал завдань поки не має подій файлів для цього завдання.",
+ "noFileEvents": "Журнал завдань не має подій файлів для цього завдання."
+ }
+ },
+ "messages": {
+ "actions": {
+ "bottomSheetActions": "Дії нижнього аркуша повідомлень",
+ "collapseAll": "Згорнути всі повідомлення",
+ "collapseSheet": "Згорнути аркуш",
+ "expandAll": "Розгорнути всі повідомлення",
+ "expandSheet": "Розгорнути аркуш",
+ "floatComposer": "Плаваюче поле вводу",
+ "floatMessagesComposer": "Плаваюче поле вводу повідомлень",
+ "hideSearch": "Сховати пошук",
+ "loadOlder": "Завантажити старіші повідомлення",
+ "markAllRead": "Позначити всі як прочитані",
+ "messageActions": "Дії повідомлення",
+ "moveMessagesToBottomSheet": "Перемістити повідомлення в нижній аркуш",
+ "moveMessagesToSidebar": "Перемістити повідомлення в бічну панель",
+ "moveToBottomSheet": "Перемістити в нижній аркуш",
+ "moveToInline": "Перемістити в рядок",
+ "moveToSidebar": "Перемістити в бічну панель",
+ "panelActions": "Дії панелі повідомлень",
+ "searchMessages": "Пошук повідомлень"
+ },
+ "delivery": {
+ "copied": "Скопійовано",
+ "copyDebugDetails": "Копіювати деталі налагодження",
+ "details": "Деталі",
+ "fields": {
+ "acceptanceUnknown": "acceptanceUnknown",
+ "delivered": "delivered",
+ "diagnostics": "diagnostics",
+ "ledgerStatus": "ledgerStatus",
+ "messageId": "messageId",
+ "providerId": "providerId",
+ "queuedBehindMessageId": "queuedBehindMessageId",
+ "reason": "reason",
+ "responsePending": "responsePending",
+ "responseState": "responseState",
+ "statusMessageId": "statusMessageId",
+ "userVisibleMessage": "userVisibleMessage",
+ "userVisibleNextReviewAt": "userVisibleNextReviewAt",
+ "userVisibleReasonCode": "userVisibleReasonCode",
+ "userVisibleState": "userVisibleState",
+ "visibleReplyCorrelation": "visibleReplyCorrelation",
+ "visibleReplyMessageId": "visibleReplyMessageId"
+ }
+ },
+ "panelMode": "Режим панелі повідомлень",
+ "title": "Повідомлення",
+ "unread": {
+ "new": "{{count}} нових",
+ "unread": "{{count}} непрочитаних",
+ "new_few": "{{count}} нові",
+ "new_many": "{{count}} нових",
+ "new_one": "{{count}} нове",
+ "new_other": "{{count}} нових",
+ "unread_few": "{{count}} непрочитані",
+ "unread_many": "{{count}} непрочитаних",
+ "unread_one": "{{count}} непрочитане",
+ "unread_other": "{{count}} непрочитаних"
+ },
+ "filter": {
+ "ariaLabel": "Фільтрувати повідомлення",
+ "tooltip": "Фільтрувати повідомлення",
+ "from": "Від",
+ "to": "До",
+ "noData": "Немає даних",
+ "showStatusUpdates": "Показувати оновлення статусу (бездіяльність/завершення)",
+ "actions": {
+ "reset": "Скинути",
+ "save": "Зберегти"
+ }
+ },
+ "status": {
+ "title": "Статус"
+ },
+ "actionMode": {
+ "label": "Режим дій"
+ },
+ "search": {
+ "placeholder": "Пошук..."
+ }
+ },
+ "modelSelector": {
+ "badges": {
+ "configured": "Налаштовано",
+ "connected": "Підключено",
+ "failed": "Не вдалося",
+ "free": "Безплатно",
+ "local": "Локальний",
+ "needsTest": "Потребує тесту",
+ "verified": "Перевірено",
+ "unavailable": "Недоступно",
+ "issue": "Проблема"
+ },
+ "customModelId": "Власний id моделі",
+ "label": "Модель (необов'язково)",
+ "multimodelRequired": "Codex і Gemini вимагають режиму Мультимодель.",
+ "openCode": {
+ "allSources": "Усі джерела OpenCode",
+ "filterSource": "Фільтрувати {{source}}",
+ "filterSources": "Фільтрувати джерела OpenCode",
+ "freeOnly": "Лише безплатні",
+ "freeTooltip": "OpenCode позначає цю модель як безплатну.",
+ "loadingModels": "Завантаження моделей OpenCode...",
+ "noSourcesFound": "Джерел не знайдено.",
+ "recommendedOnly": "Лише рекомендовані",
+ "searchSources": "Пошук джерел",
+ "sourcesCount": "{{count}} джерел OpenCode",
+ "sourcesCount_few": "{{count}} джерела OpenCode",
+ "sourcesCount_many": "{{count}} джерел OpenCode",
+ "sourcesCount_one": "{{count}} джерело OpenCode",
+ "sourcesCount_other": "{{count}} джерел OpenCode"
+ },
+ "reason": "Причина: {{reason}}",
+ "runtimeModelsSyncing": "Явні моделі завантажуються з поточного середовища. Значення за замовчуванням залишається доступним, поки список синхронізується.",
+ "fastMode": {
+ "codexLabel": "Режим Fast (2x кредитів)",
+ "optionalLabel": "Режим Fast (необов'язково)",
+ "defaultOff": "За замовчуванням (Вимк)",
+ "fast": "Fast",
+ "off": "Вимк",
+ "defaultFast": "За замовчуванням (Fast)",
+ "defaultResolvesTo": "Значення за замовчуванням наразі визначається як {{mode}}.",
+ "runtimeBackedHint": "Режим Fast підтримується середовищем і розблоковується лише коли визначена модель запуску Anthropic його підтримує."
+ },
+ "anthropicExtraUsage": {
+ "pricingDocs": "Читати документацію про ціни Anthropic"
+ },
+ "searchModels": "Пошук моделей",
+ "defaultModel": "За замовчуванням",
+ "empty": {
+ "noSearchMatches": "Жодна модель не відповідає цьому пошуку.",
+ "recommendedFreeOpenCode": "У поточному списку середовища немає доступних рекомендованих безплатних моделей OpenCode.",
+ "freeOpenCode": "У поточному списку середовища немає доступних безплатних моделей OpenCode.",
+ "recommendedOpenCode": "У поточному списку середовища немає доступних рекомендованих моделей OpenCode.",
+ "noModels": "У поточному списку середовища немає доступних моделей."
+ },
+ "openCodeStatus": {
+ "notReadyTitle": "OpenCode не готовий до запуску команди",
+ "freeModelsAvailableTitle": "Безплатні моделі OpenCode доступні",
+ "providerNotConnectedTitle": "Провайдер OpenCode не підключений",
+ "readyTitle": "OpenCode готовий",
+ "readyMessage": "OpenCode пройшов перевірку готовності провайдера. Виберіть його, щоб використовувати моделі OpenCode для цієї команди.",
+ "useOpenCode": "Використати OpenCode",
+ "badges": {
+ "check": "Перевірити",
+ "install": "Встановити",
+ "free": "Безплатно",
+ "setup": "Налаштування"
+ },
+ "summary": {
+ "checking": "Статус OpenCode: перевірка середовища",
+ "status": "Статус OpenCode: {{parts}}"
+ },
+ "summaryParts": {
+ "teamLaunchBlocked": "запуск команди заблоковано",
+ "providerOptional": "підключення провайдера необов'язкове",
+ "providerModelsNeedSetup": "моделям на основі провайдера потрібне налаштування",
+ "teamLaunchReady": "готово до запуску команди",
+ "runtimeDetected": "середовище виявлено",
+ "runtimeMissing": "середовище відсутнє",
+ "freeWithoutAuth": "безплатні моделі доступні без автентифікації",
+ "providerConnected": "провайдер підключений",
+ "providerNotConnected": "провайдер не підключений"
+ },
+ "messages": {
+ "checking": "Застосунок усе ще перевіряє середовище OpenCode. Зачекайте на завершення статусу провайдера, потім спробуйте знову.",
+ "unsupported": "OpenCode не встановлено, не знайдено, або виявлене середовище не підтримується. Встановіть чи оновіть OpenCode, потім оновіть статус провайдера. Ви також можете скористатися кнопкою «Встановити» на головній сторінці.",
+ "freeAvailable": "OpenCode виявлено. Ви можете використовувати безплатні моделі OpenCode, як-от Big Pickle, без підключення провайдера. Підключайте провайдера, лише коли хочете моделі на основі провайдера.",
+ "noFreeListed": "OpenCode виявлено, але безплатних моделей OpenCode поки не перелічено. Оновіть статус провайдера чи підключіть провайдера в OpenCode для моделей на основі провайдера.",
+ "launchBlocked": "OpenCode встановлено й автентифіковано, але готовність до запуску Agent Teams заблоковано.",
+ "ready": "OpenCode готовий до запуску команди."
+ },
+ "loadingRuntime": "Статус середовища OpenCode ще завантажується."
+ },
+ "advisory": {
+ "pingNotConfirmed": "Ping не підтверджено",
+ "note": "Примітка"
+ },
+ "placeholders": {
+ "customModelId": "openai/gpt-oss-20b"
+ },
+ "routeGroups": {
+ "openCodeConfig": "Конфігурація OpenCode",
+ "builtinFree": "Безплатні вбудовані",
+ "connectedProviders": "Підключені провайдери",
+ "otherCatalog": "Інший каталог OpenCode"
+ },
+ "pricing": {
+ "free": "Безплатно",
+ "inputShort": "вх {{rate}}",
+ "outputShort": "вих {{rate}}",
+ "perMillionSummary": "{{summary}} / 1M",
+ "inputTitle": "Вхід: {{rate}} за 1M токенів",
+ "outputTitle": "Вихід: {{rate}} за 1M токенів",
+ "cacheReadTitle": "Читання з кешу: {{rate}} за 1M токенів",
+ "cacheWriteTitle": "Запис у кеш: {{rate}} за 1M токенів"
+ },
+ "defaultTooltip": {
+ "anthropicCompatibleWithResolved": "Використовує модель за замовчуванням ендпойнта, сумісного з Anthropic.\nНаразі визначається як {{model}}.",
+ "anthropicCompatible": "Використовує модель за замовчуванням ендпойнта, сумісного з Anthropic.",
+ "anthropic": "Використовує модель за замовчуванням команди Claude.\nВизначається як {{longContextModel}} з контекстом 1M або {{limitedContextModel}} з контекстом 200K, коли ввімкнено «Обмежити контекст».",
+ "openCodeWithResolved": "Використовує модель OpenCode за замовчуванням.\nНаразі визначається як {{model}}.",
+ "openCode": "Використовує модель середовища OpenCode за замовчуванням.",
+ "runtime": "Використовує значення середовища за замовчуванням для вибраного провайдера."
+ },
+ "multimodelOff": "Мультимодель вимкнено",
+ "unavailableInRuntime": "Недоступно в поточному середовищі"
+ },
+ "taskDetail": {
+ "actions": {
+ "cancel": "Скасувати",
+ "delete": "Видалити",
+ "markResolved": "Позначити вирішеним",
+ "save": "Зберегти"
+ },
+ "attachments": {
+ "commentAttachment": "Вкладення коментаря",
+ "fromComments": "З коментарів",
+ "preview": "Перегляд {{filename}}"
+ },
+ "changes": {
+ "badges": {
+ "attention": "увага",
+ "noSafeDiff": "немає безпечних відмінностей"
+ },
+ "empty": {
+ "noFileChangesRecorded": "Не записано змін файлів",
+ "noFileChangesRecordedYet": "Поки не записано змін файлів",
+ "noReviewableChangesRecovered": "Не відновлено переглядовних змін файлів",
+ "noSafeDiffAvailable": "Немає доступних безпечних відмінностей"
+ },
+ "loadFailed": "Не вдалося завантажити підсумок змін завдання",
+ "loading": "Завантаження змін...",
+ "fileCount": "{{count}} файлів",
+ "fileRowsHidden": "{{count}} рядків файлів приховано",
+ "moreDiagnostics": "ще {{count}} діагностик",
+ "moreFiles": "ще {{count}} файлів",
+ "openInEditor": "Відкрити в редакторі",
+ "openTask": "Відкрити завдання {{subject}}",
+ "refresh": "Оновити зміни",
+ "refreshFailed": "Не вдалося оновити: {{error}}",
+ "refreshing": "Оновлення",
+ "refreshingChanges": "Оновлення змін...",
+ "refreshTeamChanges": "Оновити зміни команди",
+ "refreshShort": "Оновити",
+ "reviewDiff": "Переглянути відмінності",
+ "reviewTaskDiff": "Переглянути відмінності завдання",
+ "scannedCandidateTasks": "Проскановано {{requested}} з {{eligible}} завдань-кандидатів",
+ "tasksDeferred": "{{count}} завдань відкладено цього разу",
+ "title": "Зміни",
+ "fileCount_few": "{{count}} файли",
+ "fileCount_many": "{{count}} файлів",
+ "fileCount_one": "{{count}} файл",
+ "fileCount_other": "{{count}} файлів",
+ "fileRowsHidden_few": "{{count}} рядки файлів приховано",
+ "fileRowsHidden_many": "{{count}} рядків файлів приховано",
+ "fileRowsHidden_one": "{{count}} рядок файлу приховано",
+ "fileRowsHidden_other": "{{count}} рядків файлів приховано",
+ "moreDiagnostics_few": "ще {{count}} діагностики",
+ "moreDiagnostics_many": "ще {{count}} діагностик",
+ "moreDiagnostics_one": "ще {{count}} діагностика",
+ "moreDiagnostics_other": "ще {{count}} діагностик",
+ "moreFiles_few": "ще {{count}} файли",
+ "moreFiles_many": "ще {{count}} файлів",
+ "moreFiles_one": "ще {{count}} файл",
+ "moreFiles_other": "ще {{count}} файлів",
+ "tasksDeferred_few": "{{count}} завдання відкладено цього разу",
+ "tasksDeferred_many": "{{count}} завдань відкладено цього разу",
+ "tasksDeferred_one": "{{count}} завдання відкладено цього разу",
+ "tasksDeferred_other": "{{count}} завдань відкладено цього разу"
+ },
+ "clarification": {
+ "awaitingLead": "Очікування уточнення від лідера команди",
+ "awaitingUser": "Очікування уточнення від вас"
+ },
+ "description": {
+ "add": "Натисніть, щоб додати опис...",
+ "edit": "Редагувати опис",
+ "placeholder": "Опис завдання (підтримує markdown)"
+ },
+ "loading": {
+ "fetchingTeamData": "Отримання даних команди",
+ "title": "Завантаження завдання..."
+ },
+ "logs": {
+ "newArriving": "Надходять нові журнали завдання"
+ },
+ "notFound": "Завдання не знайдено",
+ "related": {
+ "blockedBy": "Заблоковано",
+ "blocks": "Блокує",
+ "linkedFrom": "Пов'язано з",
+ "links": "Посилання",
+ "title": "Пов'язані завдання"
+ },
+ "review": {
+ "reviewer": "Рецензент: {{reviewer}}"
+ },
+ "sections": {
+ "attachments": "Вкладення",
+ "changes": "Зміни",
+ "comments": "Коментарі",
+ "description": "Опис",
+ "taskLogs": "Журнали завдання",
+ "workflowHistory": "Історія робочого процесу"
+ },
+ "unassigned": "Не призначено",
+ "workflow": {
+ "implementationTimeTitle": "Час реалізації зі збережених інтервалів роботи",
+ "inProgressTime": "Час у процесі {{duration}}"
+ },
+ "comments": {
+ "renderLimit": "Показано {{formattedCount}} найновіших коментарів, щоб інтерфейс залишався швидким.",
+ "badges": {
+ "approved": "Затверджено",
+ "reviewRequested": "Запитано перегляд"
+ },
+ "unknownTime": "невідомий час",
+ "actions": {
+ "reply": "Відповісти",
+ "replyToComment": "Відповісти на коментар",
+ "showMore": "Показати більше коментарів ({{visible}}/{{total}})",
+ "cancelReply": "Скасувати відповідь",
+ "comment": "Коментар"
+ },
+ "attachments": {
+ "previewAlt": "Перегляд вкладення",
+ "downloadFailed": "Не вдалося завантажити"
+ },
+ "replyingTo": "Відповідь на",
+ "input": {
+ "placeholder": "Додайте коментар... (Enter, щоб надіслати)",
+ "charsLeft": "залишилось {{count}} симв.",
+ "charsLeft_one": "залишилось {{count}} симв.",
+ "charsLeft_other": "залишилось {{count}} симв.",
+ "charsLeft_few": "залишилось {{count}} симв.",
+ "charsLeft_many": "залишилось {{count}} симв."
+ }
+ },
+ "workflowTimeline": {
+ "empty": "Не записано історії робочого процесу",
+ "currentImplementationInterval": "Поточний інтервал реалізації",
+ "implementationIntervalEnded": "Інтервал реалізації завершився на цьому переході",
+ "runningPrefix": "триває ",
+ "createdAs": "Створено як",
+ "by": "ким",
+ "reassigned": "Перепризначено",
+ "assignedTo": "Призначено",
+ "unassignedFrom": "Знято призначення з",
+ "ownerChanged": "Власника змінено",
+ "reviewRequested": "Запитано перегляд",
+ "reviewStarted": "Перегляд розпочато",
+ "changesRequested": "Запитано зміни",
+ "approved": "Затверджено",
+ "unknownEvent": "Невідома подія"
+ },
+ "reviewStates": {
+ "approved": "Затверджено",
+ "needsFix": "Потребує виправлення",
+ "inReview": "На перегляді"
+ }
+ },
+ "tasks": {
+ "createTask": {
+ "assignee": "Виконавець",
+ "assigneeOptional": "Виконавець (необов'язково)",
+ "blockedByOptional": "Заблоковано завданнями (необов'язково)",
+ "blockedBySummary": "Завдання буде заблоковано: {{tasks}}",
+ "cancel": "Скасувати",
+ "create": "Створити",
+ "creating": "Створення...",
+ "description": "Завдання буде створено в каталозі tasks/ команди й з'явиться на дошці Kanban.",
+ "descriptionOptional": "Опис (необов'язково)",
+ "detailsPlaceholder": "Деталі завдання (підтримує markdown)",
+ "hideOptionalFields": "Сховати необов'язкові поля",
+ "offlineNotice": {
+ "after": "- запустіть команду, щоб почати виконання.",
+ "before": "Команда офлайн. Завдання буде додано до"
+ },
+ "promptOptional": "Промпт для виконавця (необов'язково)",
+ "promptPlaceholder": "Власні інструкції для учасника команди...",
+ "relatedOptional": "Пов'язані завдання (необов'язково)",
+ "relatedSummary": "Пов'язані: {{tasks}}",
+ "saved": "Збережено",
+ "searchTasks": "Пошук завдань...",
+ "selectMember": "Виберіть учасника",
+ "selectMemberOptional": "Виберіть учасника...",
+ "showOptionalFields": "Показати необов'язкові поля",
+ "startImmediately": "Почати одразу",
+ "startOfflineHint": "Команда офлайн. Спочатку запустіть команду, щоб одразу починати завдання.",
+ "subject": "Тема",
+ "subjectPlaceholder": "Що потрібно зробити?",
+ "title": "Створити завдання",
+ "todo": "TODO"
+ },
+ "list": {
+ "columns": {
+ "blockedBy": "Заблоковано",
+ "blocks": "Блокує",
+ "id": "ID",
+ "owner": "Власник",
+ "status": "Статус",
+ "subject": "Тема"
+ },
+ "empty": "У цій команді немає завдань",
+ "filters": {
+ "allOwners": "Усі власники",
+ "allStatuses": "Усі статуси",
+ "ownerAria": "Фільтрувати завдання за власником",
+ "statusAria": "Фільтрувати завдання за статусом"
+ },
+ "showing": "Показано {{shown}} з {{total}}"
+ },
+ "status": {
+ "completed": "completed",
+ "deleted": "deleted",
+ "inProgress": "in_progress",
+ "pending": "pending"
+ },
+ "statusSummary": {
+ "progressAria": "Завдання {{completed}}/{{total}} завершено",
+ "inProgress": "{{count}} in_progress",
+ "inProgress_one": "{{count}} in_progress",
+ "inProgress_other": "{{count}} in_progress",
+ "inProgress_few": "{{count}} in_progress",
+ "inProgress_many": "{{count}} in_progress",
+ "pending": "{{count}} pending",
+ "pending_one": "{{count}} pending",
+ "pending_other": "{{count}} pending",
+ "pending_few": "{{count}} pending",
+ "pending_many": "{{count}} pending",
+ "completed": "{{count}} completed",
+ "completed_one": "{{count}} completed",
+ "completed_other": "{{count}} completed",
+ "completed_few": "{{count}} completed",
+ "completed_many": "{{count}} completed"
+ },
+ "unassigned": "Не призначено",
+ "teamPrefix": "Команда:",
+ "openTask": "Відкрити завдання",
+ "deleteConfirm": {
+ "title": "Видалити завдання",
+ "message": "Перемістити завдання #{{taskId}} до кошика?",
+ "confirmLabel": "Видалити",
+ "cancelLabel": "Скасувати"
+ }
+ },
+ "editor": {
+ "actions": {
+ "cancel": "Скасувати",
+ "closeEditor": "Закрити редактор",
+ "closeTab": "Закрити вкладку",
+ "closeTooltip": "Закрити редактор (Esc)",
+ "discard": "Відхилити",
+ "discardAndClose": "Відхилити й закрити",
+ "keep": "Зберегти",
+ "keepMine": "Зберегти моє",
+ "keyboardShortcuts": "Клавіатурні скорочення",
+ "overwrite": "Перезаписати",
+ "refreshAria": "Оновити (F5)",
+ "refreshTooltip": "Оновити статус git (F5)",
+ "reload": "Перезавантажити",
+ "retry": "Повторити",
+ "save": "Зберегти",
+ "saveAllAndClose": "Зберегти все й закрити"
+ },
+ "ariaLabel": "Редактор проєкту",
+ "dialogs": {
+ "conflictDescription": "Файл було змінено ззовні, відколи ви його відкрили. Перезаписати вашими змінами?",
+ "conflictTitle": "Конфлікт збереження",
+ "unsavedDescription": "У вас є незбережені зміни. Що б ви хотіли зробити?",
+ "unsavedFileDescription": "Цей файл має незбережені зміни. Що б ви хотіли зробити?",
+ "unsavedTitle": "Незбережені зміни"
+ },
+ "newFile": {
+ "validation": {
+ "nameRequired": "Назва не може бути порожньою",
+ "invalidName": "Неправильна назва",
+ "invalidCharacters": "Назва містить неприпустимі символи",
+ "nameTooLong": "Назва задовга"
+ },
+ "placeholders": {
+ "fileName": "Назва файлу...",
+ "folderName": "Назва теки..."
+ },
+ "aria": {
+ "newFileName": "Назва нового файлу",
+ "newFolderName": "Назва нової теки"
+ }
+ },
+ "draftRecovered": "Відновлено незбережені зміни з попередньої сесії.",
+ "externalChange": {
+ "changed": "Файл змінено на диску.",
+ "deleted": "Файл більше не існує на диску."
+ },
+ "saveFailed": "Не вдалося зберегти: {{error}}",
+ "sidebar": {
+ "explorer": "Провідник",
+ "hide": "Сховати бічну панель",
+ "hideWithShortcut": "Сховати бічну панель ({{shortcut}})",
+ "show": "Показати бічну панель",
+ "showWithShortcut": "Показати бічну панель ({{shortcut}})"
+ },
+ "searchInFiles": {
+ "title": "Пошук у файлах",
+ "closeSearch": "Закрити пошук",
+ "closeSearchShortcut": "Закрити пошук (Esc)",
+ "searchPlaceholder": "Пошук...",
+ "matchCase": "З урахуванням регістру",
+ "matchCaseToggle": "Aa",
+ "noResults": "Результатів не знайдено",
+ "resultsSummary": "{{count}} збігів у {{fileCount}} файлах",
+ "resultsSummary_one": "{{count}} збіг у {{fileCount}} файлах",
+ "truncated": "(скорочено)",
+ "resultsSummary_few": "{{count}} збіги у {{fileCount}} файлах",
+ "resultsSummary_many": "{{count}} збігів у {{fileCount}} файлах",
+ "resultsSummary_other": "{{count}} збігів у {{fileCount}} файлах"
+ },
+ "fileTree": {
+ "failedToLoadFiles": "Не вдалося завантажити файли: {{error}}",
+ "loading": "Завантаження файлів...",
+ "empty": "Файлів не знайдено",
+ "dropForProjectRoot": "Перетягніть сюди для кореня проєкту",
+ "moveToTrash": "Перемістити до кошика",
+ "moveToTrashConfirm": "Перемістити \"{{name}}\" до кошика?",
+ "cancel": "Скасувати"
+ },
+ "goToLine": {
+ "title": "Перейти до рядка",
+ "position": "(поточний: {{current}}, усього: {{total}})",
+ "placeholder": "Номер рядка, +зсув, -зсув або %",
+ "go": "Перейти"
+ },
+ "searchPanel": {
+ "previousMatch": "Попередній збіг",
+ "nextMatch": "Наступний збіг",
+ "close": "Закрити",
+ "replacePlaceholder": "Замінити",
+ "replace": "Замінити",
+ "replaceNext": "Замінити наступне",
+ "all": "Усе",
+ "replaceAll": "Замінити все"
+ },
+ "statusBar": {
+ "position": "Ряд {{line}}, Стовп {{col}}",
+ "enableWatcher": "Увімкнути спостерігач файлів",
+ "disableWatcher": "Вимкнути спостерігач файлів",
+ "watch": "стежити",
+ "watching": "стеження",
+ "watchExternalChanges": "Стежити за зовнішніми змінами",
+ "disableExternalWatcher": "Вимкнути спостерігач зовнішніх змін",
+ "encodingUtf8": "UTF-8",
+ "spaces": "Пробіли: {{count}}"
+ },
+ "imagePreview": {
+ "loading": "Завантаження перегляду...",
+ "openFullSize": "Відкрити повнорозмірний перегляд",
+ "openSystemViewer": "Відкрити в системному переглядачі"
+ },
+ "quickOpen": {
+ "title": "Швидке відкриття",
+ "searchPlaceholder": "Пошук файлів за назвою...",
+ "loading": "Завантаження файлів...",
+ "empty": "Файлів не знайдено"
+ },
+ "errorBoundary": {
+ "crashed": "Редактор аварійно завершив роботу",
+ "unknownError": "Невідома помилка"
+ },
+ "binaryPlaceholder": {
+ "file": "Бінарний файл ({{size}})"
+ },
+ "unsavedChanges": "Незбережені зміни",
+ "empty": {
+ "selectFile": "Виберіть файл із дерева для редагування"
+ },
+ "search": {
+ "toggleReplace": "Перемкнути заміну",
+ "placeholder": "Пошук"
+ },
+ "shortcuts": {
+ "title": "Клавіатурні скорочення",
+ "groups": {
+ "fileOperations": "Операції з файлами",
+ "search": "Пошук",
+ "navigation": "Навігація",
+ "editing": "Редагування",
+ "markdown": "Markdown",
+ "general": "Загальні"
+ },
+ "actions": {
+ "quickOpen": "Швидке відкриття",
+ "save": "Зберегти",
+ "saveAll": "Зберегти все",
+ "closeTab": "Закрити вкладку",
+ "findInFile": "Знайти у файлі",
+ "searchInFiles": "Пошук у файлах",
+ "goToLine": "Перейти до рядка",
+ "nextTab": "Наступна вкладка",
+ "previousTab": "Попередня вкладка",
+ "cycleTabs": "Циклічно перемикати вкладки",
+ "toggleSidebar": "Перемкнути бічну панель",
+ "undo": "Скасувати",
+ "redo": "Повторити",
+ "selectNextMatch": "Вибрати наступний збіг",
+ "toggleComment": "Перемкнути коментар",
+ "splitPreview": "Розділений перегляд",
+ "fullPreview": "Повний перегляд",
+ "closeEditor": "Закрити редактор"
+ }
+ },
+ "toolbar": {
+ "enableWordWrap": "Увімкнути перенесення слів",
+ "disableWordWrap": "Вимкнути перенесення слів",
+ "closeSplitPreview": "Закрити розділений перегляд",
+ "closePreview": "Закрити перегляд"
+ }
+ },
+ "launch": {
+ "actions": {
+ "createSchedule": "Створити розклад",
+ "creating": "Створення...",
+ "goToDashboard": "Перейти на панель",
+ "launchTeam": "Запустити команду",
+ "launching": "Запуск...",
+ "relaunchTeam": "Перезапустити команду",
+ "relaunching": "Перезапуск...",
+ "saveChanges": "Зберегти зміни",
+ "saving": "Збереження..."
+ },
+ "billing": {
+ "prefix": "Починаючи з 15 червня 2026 року, Anthropic стягує плату",
+ "readArticle": "Читати статтю Anthropic",
+ "suffix": "і використання Agent SDK з місячного кредиту Agent SDK, окремо від інтерактивних лімітів Claude Code. Кредит скидається кожного платіжного циклу, а невикористаний кредит не переноситься."
+ },
+ "conflict": {
+ "description": "Запуск двох команд в одному каталозі ризикований - вони можуть конфліктувати, редагуючи одні й ті самі файли. Розгляньте інший каталог або git worktree для ізоляції.",
+ "title": "Інша команда \"{{team}}\" уже запущена для цього робочого каталогу",
+ "workingDirectory": "Робочий каталог:"
+ },
+ "description": {
+ "createSchedule": "Запланувати автоматичне виконання завдань Claude",
+ "createScheduleForTeam": "Запланувати автоматичні запуски для команди \"{{team}}\"",
+ "editSchedule": "Редагування розкладу для команди \"{{team}}\"",
+ "launchPrefix": "Запустити команду",
+ "launchSuffix": "через локальний Claude CLI.",
+ "relaunchPrefix": "Зупинити поточний запуск для",
+ "relaunchSuffix": "і запустити її знову через локальний Claude CLI."
+ },
+ "prepare": {
+ "action": {
+ "launch": "запуск",
+ "relaunch": "перезапуск"
+ },
+ "blocked": "Середовище виконання недоступне - {{action}} заблоковано",
+ "checkingProviders": "Перевірка вибраних провайдерів...",
+ "failed": "Не вдалося підготувати вибраних провайдерів",
+ "preflight": "Передперевірка для виявлення помилок перед дією: {{action}}",
+ "preparingEnvironment": "Підготовка середовища...",
+ "ready": "Усі вибрані провайдери готові.",
+ "readyWithNotes": "Усі вибрані провайдери готові, з примітками.",
+ "unsupportedPreload": "Поточна версія preload не підтримує team:prepareProvisioning. Перезапустіть dev-застосунок.",
+ "selectWorkingDirectory": "Виберіть робочий каталог, щоб перевірити середовище запуску.",
+ "someProvidersNeedAttention": "Деякі вибрані провайдери потребують уваги."
+ },
+ "prompt": {
+ "label": "Промпт",
+ "oneShotPrefix": "Цей промпт буде передано до",
+ "oneShotSuffix": "для одноразового виконання",
+ "saved": "Збережено",
+ "schedulePlaceholder": "Інструкції для Claude для виконання за розкладом...",
+ "teamLeadOptional": "Промпт для лідера команди (необов'язково)",
+ "teamLeadPlaceholder": "Інструкції для лідера команди..."
+ },
+ "providerChanged": "Провайдера змінено з {{from}} на {{to}}. Попередня сесія лідера не буде відновлена, і лідер почне зі свіжим контекстом, щоб нове середовище застосувалося коректно.",
+ "relaunchFreshSession": "Перезапуск команди починає свіжу сесію лідера. Стійкий стан команди, дошку завдань і конфігурацію учасників регідровано в промпт запуску.",
+ "relaunchWarning": {
+ "description": "Збереження цих налаштувань зупинить поточний процес команди, збереже оновлений склад і запустить команду знову з новим середовищем.",
+ "title": "Перезапуск перезапустить поточний запуск команди"
+ },
+ "schedule": {
+ "labelOptional": "Мітка (необов'язково)",
+ "labelPlaceholder": "напр., Щоденний код-рев'ю, Нічні тести...",
+ "maxBudgetUsd": "Макс. бюджет (USD)",
+ "maxTurns": "Макс. ходів",
+ "noLimit": "Без обмеження",
+ "noMatches": "Жодна команда не відповідає вашому пошуку.",
+ "noTeams": "Немає доступних команд. Спочатку створіть команду.",
+ "searchTeams": "Пошук команд...",
+ "selectTeam": "Виберіть команду...",
+ "team": "Команда",
+ "title": "Розклад"
+ },
+ "title": {
+ "createSchedule": "Створити розклад",
+ "editSchedule": "Редагувати розклад",
+ "launch": "Запустити команду",
+ "relaunch": "Перезапустити команду"
+ },
+ "errors": {
+ "loadProjectsFailed": "Не вдалося завантажити проєкти",
+ "saveScheduleFailed": "Не вдалося зберегти розклад",
+ "relaunchFailed": "Не вдалося перезапустити команду",
+ "launchFailed": "Не вдалося запустити команду"
+ },
+ "validation": {
+ "openCodeLeadModelRequired": "Лідер OpenCode вимагає вибраної моделі.",
+ "openCodeTeammateRequired": "Лідер OpenCode вимагає щонайменше одного учасника OpenCode.",
+ "selectWorkingDirectory": "Виберіть робочий каталог (cwd)",
+ "fixMemberNames": "Виправте імена учасників перед запуском",
+ "memberNamesUnique": "Імена учасників мають бути унікальними перед запуском"
+ },
+ "optionalSettings": {
+ "relaunchTitle": "Налаштування перезапуску",
+ "title": "Необов'язкові налаштування запуску",
+ "relaunchDescription": "Перегляньте склад і середовище лідера перед перезапуском команди.",
+ "description": "Тримайте процес запуску зосередженим на шляху проєкту й розгортайте це, лише коли хочете додатковий контроль."
+ }
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Копіювати команду",
+ "createTeam": "Створити команду",
+ "deleteForever": "Видалити назавжди",
+ "deletePermanently": "Видалити остаточно",
+ "deleteTeam": "Видалити команду",
+ "launching": "Запуск...",
+ "launchTeam": "Запустити команду",
+ "relaunchTeam": "Перезапустити команду",
+ "restore": "Відновити",
+ "restoreTeam": "Відновити команду",
+ "retry": "Повторити",
+ "stopTeam": "Зупинити команду",
+ "stopping": "Зупинення..."
+ },
+ "electronOnly": {
+ "description": "У режимі браузера доступ до локальних каталогів `~/.claude/teams` недоступний.",
+ "title": "Команди доступні лише в режимі Electron"
+ },
+ "empty": {
+ "description": "Створіть тут команду, щоб почати. Вона з'явиться у списку автоматично.",
+ "localOnly": "Створення команд доступне лише в локальному режимі Electron.",
+ "title": "Команд не знайдено"
+ },
+ "filter": {
+ "clearAll": "Очистити все",
+ "label": "Фільтрувати команди",
+ "projectPriority": "Пріоритет проєкту",
+ "status": "Статус"
+ },
+ "loadFailed": "Не вдалося завантажити команди",
+ "loading": "Завантаження команд...",
+ "localOnly": "Доступно лише в локальному режимі Electron.",
+ "membersCount": "Учасників: {{count}}",
+ "membersCount_few": "Учасників: {{count}}",
+ "membersCount_many": "Учасників: {{count}}",
+ "membersCount_one": "Учасник: {{count}}",
+ "membersCount_other": "Учасників: {{count}}",
+ "noDescription": "Немає опису",
+ "noMatches": "Немає команд, що відповідають поточним фільтрам",
+ "partial": {
+ "pending": "Останній запуск ще узгоджується.",
+ "skipped": "Останній запуск пропустив учасників.",
+ "skippedWithCount": "Останній запуск пропустив {{count}}/{{expected}} учасника.",
+ "skippedWithCount_few": "Останній запуск пропустив {{count}}/{{expected}} учасників.",
+ "skippedWithCount_many": "Останній запуск пропустив {{count}}/{{expected}} учасників.",
+ "skippedWithCount_one": "Останній запуск пропустив {{count}}/{{expected}} учасника.",
+ "skippedWithCount_other": "Останній запуск пропустив {{count}}/{{expected}} учасників.",
+ "stopped": "Останній запуск зупинився до того, як приєдналися всі учасники.",
+ "stoppedWithCount": "Останній запуск зупинився до того, як приєднався {{count}}/{{expected}} учасник.",
+ "stoppedWithCount_few": "Останній запуск зупинився до того, як приєдналися {{count}}/{{expected}} учасники.",
+ "stoppedWithCount_many": "Останній запуск зупинився до того, як приєдналися {{count}}/{{expected}} учасників.",
+ "stoppedWithCount_one": "Останній запуск зупинився до того, як приєднався {{count}}/{{expected}} учасник.",
+ "stoppedWithCount_other": "Останній запуск зупинився до того, як приєдналися {{count}}/{{expected}} учасників."
+ },
+ "searchPlaceholder": "Пошук команд...",
+ "sections": {
+ "otherTeams": "Інші команди",
+ "projectTeams": "Команди для {{project}}",
+ "selectedProject": "вибраний проєкт"
+ },
+ "solo": "Соло",
+ "status": {
+ "active": "Активна",
+ "deleted": "Видалено",
+ "launching": "Запуск...",
+ "offline": "Офлайн",
+ "partialFailure": "Запуск не вдався на півдорозі",
+ "partialPending": "Bootstrap в очікуванні",
+ "partialSkipped": "Запуск пропустив учасника",
+ "running": "Запущено"
+ },
+ "title": "Вибрати команду",
+ "trash": "Кошик ({{count}})",
+ "trash_few": "Кошик ({{count}})",
+ "trash_many": "Кошик ({{count}})",
+ "trash_one": "Кошик ({{count}})",
+ "trash_other": "Кошик ({{count}})",
+ "deleteDraft": {
+ "title": "Видалити чернетку",
+ "message": "Видалити чернетку команди \"{{teamName}}\"? Це неможливо скасувати.",
+ "confirmLabel": "Видалити",
+ "cancelLabel": "Скасувати"
+ },
+ "moveToTrash": {
+ "title": "Перемістити до кошика",
+ "message": "Перемістити команду \"{{teamName}}\" до кошика? Ви зможете відновити її пізніше.",
+ "confirmLabel": "Перемістити до кошика",
+ "cancelLabel": "Скасувати"
+ },
+ "deleteForever": {
+ "title": "Видалити остаточно",
+ "message": "Видалити команду \"{{teamName}}\" остаточно? Усі дані буде втрачено.",
+ "confirmLabel": "Видалити назавжди",
+ "cancelLabel": "Скасувати"
+ }
+ },
+ "messageComposer": {
+ "crossTeam": {
+ "hint": "Порада: Повідомлення між командами надходять лідеру цільової команди. Якщо хочете, щоб відповідь повернулася лідеру вашої команди, а не вам, скажіть про це явно в повідомленні."
+ },
+ "attachments": {
+ "attachFiles": "Прикріпити файли (вставити або перетягнути)",
+ "unavailable": "Вкладення недоступні",
+ "disabledHint": "Вкладення файлів підтримуються для онлайн лідера команди та онлайн учасників OpenCode. Видаліть вкладення чи змініть отримувача.",
+ "restrictions": {
+ "crossTeam": "Вкладення файлів не підтримуються для повідомлень між командами",
+ "teamOffline": "Команда має бути онлайн, щоб прикріплювати файли",
+ "unsupportedRecipient": "Файли можна надсилати лідеру команди чи учасникам OpenCode",
+ "openCodeOffline": "Команда має бути онлайн, щоб прикріплювати файли для учасників OpenCode",
+ "sending": "Зачекайте, поки поточне повідомлення завершить надсилання, перед додаванням файлів",
+ "maximumReached": "Досягнуто максимуму вкладень",
+ "leadOnly": "Файли можна надсилати лише лідеру команди"
+ }
+ },
+ "slash": {
+ "restrictions": {
+ "attachments": "Слеш-команди вимагають активного лідера команди й не можуть надсилатися з вкладеннями",
+ "crossTeam": "Слеш-команди можна виконувати лише на поточному лідері команди",
+ "notLead": "Слеш-команди можна надсилати лише лідеру команди",
+ "leadOffline": "Слеш-команди вимагають, щоб лідер команди був онлайн"
+ }
+ },
+ "status": {
+ "reusedCrossTeamRequest": "Повторно використано недавній запит між командами",
+ "teamOffline": "Команда офлайн"
+ },
+ "revision": {
+ "editing": "Редагування попереднього повідомлення",
+ "cancel": "Скасувати",
+ "tooltip": "Попросіть агента ігнорувати попереднє повідомлення та відновіть його в полі вводу."
+ },
+ "input": {
+ "charsLeft": "залишилось {{count}} симв.",
+ "charsLeft_one": "залишилось {{count}} симв.",
+ "charsLeft_other": "залишилось {{count}} симв.",
+ "teamLaunchingPlaceholder": "Команда запускається... повідомлення буде поставлено в чергу для доставки у вхідні.",
+ "crossTeamPlaceholder": "Повідомлення між командами до {{team}}...",
+ "teamFallback": "команда",
+ "placeholder": "Напишіть повідомлення... (Enter, щоб надіслати, Shift+Enter для нового рядка)",
+ "slashTip": "Порада: Ви можете використовувати \"/\", щоб виконувати будь-які команди Claude.",
+ "charsLeft_few": "залишилось {{count}} симв.",
+ "charsLeft_many": "залишилось {{count}} симв."
+ },
+ "teamSelector": {
+ "thisTeam": "Ця команда",
+ "current": "поточна",
+ "online": "онлайн",
+ "offline": "офлайн",
+ "onlineTitle": "Онлайн",
+ "offlineTitle": "Офлайн"
+ },
+ "recipient": {
+ "select": "Вибрати...",
+ "searchPlaceholder": "Пошук...",
+ "noResults": "Немає результатів"
+ },
+ "actions": {
+ "voiceToText": "Голос у текст",
+ "send": "Надіслати",
+ "sendingUnavailableLaunching": "Надсилання недоступне, поки команда запускається"
+ }
+ },
+ "claudeLogs": {
+ "filter": {
+ "ariaLabel": "Фільтрувати журнали",
+ "tooltip": "Фільтрувати журнали",
+ "sections": {
+ "stream": "Потік",
+ "content": "Вміст"
+ },
+ "kinds": {
+ "output": "Вивід",
+ "thinking": "Міркування",
+ "tool": "Виклики інструментів"
+ },
+ "actions": {
+ "reset": "Скинути",
+ "save": "Зберегти"
+ },
+ "streams": {
+ "stdout": "stdout",
+ "stderr": "stderr"
+ }
+ },
+ "rawLineCount": "{{formattedCount}} сирих рядків",
+ "rawLineCount_one": "{{formattedCount}} сирий рядок",
+ "rawLinesCaptured": "{{count}} захоплено",
+ "emptyRawLogs": "{{count}}; жоден поки не є виводом асистента/інструмента.",
+ "noLogsYet": "Поки немає журналів.",
+ "teamNotRunning": "Команда не запущена.",
+ "searchPlaceholder": "Пошук журналів...",
+ "clearSearch": "Очистити пошук",
+ "newCount": "+{{count}} нових",
+ "loading": "Завантаження...",
+ "showMore": "Показати більше",
+ "noLogsCaptured": "Журналів не захоплено.",
+ "noMatchingLogs": "Немає відповідних журналів.",
+ "rawLineCount_few": "{{formattedCount}} сирі рядки",
+ "rawLineCount_many": "{{formattedCount}} сирих рядків",
+ "rawLineCount_other": "{{formattedCount}} сирих рядків",
+ "openFullscreen": "Відкрити журнали на весь екран",
+ "fullscreen": "На весь екран",
+ "viewingFullscreen": "Перегляд у повноекранному режимі",
+ "logsTitle": "Журнали",
+ "sourceSelect": {
+ "placeholder": "Виберіть джерело журналу...",
+ "searchPlaceholder": "Пошук джерел журналів...",
+ "emptyMessage": "Джерел журналів не знайдено.",
+ "ariaLabel": "Джерело журналу",
+ "leadLabel": "Лідер",
+ "selectSourceEmpty": "Виберіть джерело журналу.",
+ "leadDescription": "Лідер команди",
+ "removedLabel": "видалено",
+ "removedDescription": "Видалено"
+ }
+ },
+ "agentGraph": {
+ "popover": {
+ "externalTeam": "Зовнішня команда",
+ "process": {
+ "startedBy": "Запущено:",
+ "at": "О:",
+ "openUrl": "Відкрити URL"
+ },
+ "overflow": {
+ "hiddenTasks": "Приховані завдання",
+ "empty": "Немає доступних прихованих завдань."
+ },
+ "member": {
+ "lead": "Лідер",
+ "workingOn": "працює над",
+ "recentTools": "Недавні інструменти",
+ "spawn": {
+ "waitingToStart": "очікує на запуск",
+ "starting": "запускається",
+ "failed": "не вдалося"
+ },
+ "state": {
+ "active": "активний",
+ "idle": "бездіяльний",
+ "offline": "офлайн",
+ "runningTool": "виконує інструмент"
+ },
+ "activeTool": {
+ "running": "Виконання інструмента",
+ "failed": "Інструмент не вдався",
+ "finished": "Інструмент завершено"
+ },
+ "actions": {
+ "message": "Повідомлення",
+ "profile": "Профіль",
+ "task": "Завдання"
+ }
+ }
+ },
+ "logPreview": {
+ "logs": "Журнали",
+ "loading": "Завантаження журналів",
+ "more": "+{{count}} ще",
+ "more_one": "+{{count}} ще",
+ "more_other": "+{{count}} ще",
+ "more_few": "+{{count}} ще",
+ "more_many": "+{{count}} ще",
+ "unsupportedProvider": "Непідтримуваний провайдер",
+ "openCodeLogsDelayed": "Журнали OpenCode затримано",
+ "logsUnavailable": "Журнали недоступні",
+ "noRecentLogs": "Немає недавніх журналів",
+ "toolError": "Помилка інструмента",
+ "toolResult": "Результат інструмента",
+ "toolUse": "Використання інструмента",
+ "thinking": "Міркування",
+ "error": "Помилка",
+ "logEvent": "Подія журналу",
+ "noErrorOutput": "Немає виводу помилок",
+ "noOutput": "Немає виводу",
+ "noInput": "Немає вводу"
+ },
+ "blockingEdge": {
+ "title": "Блокувальна залежність",
+ "blocks": "блокує",
+ "close": "Закрити",
+ "blockingHiddenTasks": "Блокувальні приховані завдання",
+ "blockedHiddenTasks": "Заблоковані приховані завдання",
+ "links_one": "{{count}} посилання",
+ "links_other": "{{count}} посилань",
+ "hiddenBlockingLinks_one": "{{count}} приховане блокувальне посилання",
+ "hiddenBlockingLinks_other": "{{count}} прихованих блокувальних посилань",
+ "hiddenTaskStack": "Стек прихованих завдань",
+ "hiddenTasks_one": "{{count}} приховане завдання",
+ "hiddenTasks_other": "{{count}} прихованих завдань",
+ "task": "Завдання",
+ "openBlockerStack": "Відкрити стек блокувальників",
+ "openBlockedStack": "Відкрити стек заблокованих",
+ "openBlockerTask": "Відкрити завдання-блокувальник",
+ "openBlockedTask": "Відкрити заблоковане завдання"
+ },
+ "activityHud": {
+ "activity": "Активність",
+ "noRecentActivity": "Немає недавньої активності",
+ "more": "+{{count}} ще",
+ "more_one": "+{{count}} ще",
+ "more_other": "+{{count}} ще",
+ "more_few": "+{{count}} ще",
+ "more_many": "+{{count}} ще"
+ },
+ "provisioning": {
+ "launchDetails": "Деталі запуску",
+ "launchDetailsDescription": "Детальний прогрес запуску команди, живий вивід і журнали CLI."
+ }
+ },
+ "projectPath": {
+ "label": "Проєкт",
+ "source": {
+ "claude": "Знайдено Claude",
+ "codex": "Знайдено Codex",
+ "mixed": "Знайдено Claude та Codex"
+ },
+ "deleted": {
+ "title": "Теки проєкту більше не існує",
+ "label": "Видалено"
+ },
+ "mode": {
+ "projectList": "Зі списку проєктів",
+ "customPath": "Власний шлях"
+ },
+ "loadingProjects": "Завантаження проєктів...",
+ "selectProject": "Виберіть проєкт...",
+ "searchPlaceholder": "Пошук проєкту за назвою чи шляхом",
+ "empty": "Нічого не знайдено",
+ "selectFromList": "Виберіть проєкт зі списку",
+ "noProjects": "Проєктів не знайдено, перейдіть до власного шляху.",
+ "customWorkingDirectory": "Власний робочий каталог",
+ "browse": "Огляд",
+ "createAutomatically": "Якщо каталогу не існує, його буде створено автоматично."
+ },
+ "members": {
+ "badges": {
+ "worktree": "worktree"
+ },
+ "runtimeTelemetry": {
+ "title": "Локальне навантаження середовища",
+ "description": "Лише батьківські та дочірні процеси. Віддалений інференс LLM не включено.",
+ "cpu": "CPU",
+ "memory": "Пам'ять",
+ "summedRss": "сумарний RSS",
+ "sharedHost": "Спільна метрика хоста OpenCode. Вона не ексклюзивна для цього учасника.",
+ "processTreeCapped": "Дерево процесів було обмежено для цього зразка.",
+ "rssHint": "RSS може включати спільні сторінки, тому його найкраще читати як сигнал навантаження, а не ексклюзивну пам'ять."
+ },
+ "editor": {
+ "title": "Учасники",
+ "addMember": "Додати учасника",
+ "editAsJson": "Редагувати як JSON",
+ "runInSeparateWorktrees": "Запускати учасників в окремих worktree",
+ "agentTeamsMcpOnly": "Лише Agent Teams MCP",
+ "removedCount": "Видалено ({{count}})",
+ "removedModelLockReason": "Видалені учасники зберігаються для історії м'якого видалення. Відновіть їх, щоб редагувати налаштування.",
+ "memberNamesUnique": "Імена учасників мають бути унікальними"
+ },
+ "stats": {
+ "computing": "Обчислення статистики...",
+ "empty": "Немає доступної статистики",
+ "lines": "Рядки",
+ "linesInfo": "Приблизно. Точно для інструментів Edit та Write. Записи файлів через Bash оцінюються з шаблонів команд (heredoc, echo, sed) і можуть бути занижені.",
+ "files": "Файли",
+ "toolCalls": "Виклики інструментів",
+ "tokens": "Токени",
+ "toolUsage": "Використання інструментів",
+ "filesTouched": "Зачеплені файли ({{count}})",
+ "viewAllChanges": "Переглянути всі зміни",
+ "showLess": "Згорнути",
+ "moreFiles": "+{{count}} ще",
+ "footer": "{{count}} сесій · обчислено {{computedAgo}}",
+ "footer_one": "{{count}} сесія · обчислено {{computedAgo}}",
+ "footer_few": "{{count}} сесії · обчислено {{computedAgo}}",
+ "footer_many": "{{count}} сесій · обчислено {{computedAgo}}",
+ "footer_other": "{{count}} сесій · обчислено {{computedAgo}}"
+ },
+ "logs": {
+ "searching": "Пошук журналів...",
+ "empty": "Журналів не знайдено",
+ "waitingForTaskActivity": "Завдання в процесі - очікування активності сесії (автооновлення)...",
+ "noTaskActivity": "Поки немає активності сесії для цього завдання",
+ "noMemberActivity": "Цей учасник поки не має записаної активності сесії",
+ "leadSessionTooltip": "Повні журнали сесії лідера команди - корисні для глобального контексту оркестрування, не специфічні для цього агента",
+ "memberSessionTooltip": "Повні журнали постійної сесії учасника - корисні, коли робота виконується в кореневій сесії учасника, а не у файлі субагента",
+ "startedAt": "розпочато {{time}}",
+ "active": "активний",
+ "showDetails": "Показати деталі",
+ "hideDetails": "Сховати деталі",
+ "loadingDetails": "Завантаження деталей...",
+ "failedToLoadDetails": "Не вдалося завантажити деталі"
+ },
+ "detail": {
+ "relaunchOpenCode": "Перезапустити OpenCode",
+ "restart": "Перезапустити",
+ "legacyLogsFallback": "Резервні застарілі журнали",
+ "copyDiagnostics": "Копіювати діагностику",
+ "pid": "PID {{pid}}",
+ "removedAt": "Видалено {{date}}",
+ "failedToRestartMember": "Не вдалося перезапустити учасника",
+ "sendMessage": "Надіслати повідомлення",
+ "assignTask": "Призначити завдання",
+ "remove": "Видалити"
+ },
+ "list": {
+ "loading": "Завантаження учасників команди",
+ "unavailable": "Склад учасників недоступний",
+ "unavailableDescription": "{{count}} учасників відомі з метаданих команди, але деталі складу відсутні.",
+ "unavailableDescription_one": "{{count}} учасник відомий з метаданих команди, але деталі складу відсутні.",
+ "soloLeadOnly": "Соло-команда - лише лідер",
+ "removedCount": "Видалено ({{count}})",
+ "unavailableDescription_few": "{{count}} учасники відомі з метаданих команди, але деталі складу відсутні.",
+ "unavailableDescription_many": "{{count}} учасників відомі з метаданих команди, але деталі складу відсутні.",
+ "unavailableDescription_other": "{{count}} учасників відомі з метаданих команди, але деталі складу відсутні."
+ },
+ "executionLog": {
+ "empty": "Нічого для показу",
+ "emptyUserMessage": "{{time}} - (порожньо)",
+ "agentInstructions": "Інструкції агента",
+ "memberTurn": "Хід {{member}}",
+ "agentTurn": "Хід агента",
+ "turn": "хід"
+ },
+ "recentMessages": {
+ "latest": "Останні повідомлення",
+ "latestForMember": "Останні повідомлення - {{member}}",
+ "loadMore": "Завантажити більше",
+ "expand": "Розгорнути",
+ "collapse": "Згорнути"
+ },
+ "leadModel": {
+ "defaultModel": "За замовчуванням",
+ "providerModelAria": "Провайдер {{provider}}, {{model}}",
+ "leadShort": "лідер",
+ "teamLead": "Лідер команди",
+ "syncWithTeammates": "Синхронізувати модель з учасниками",
+ "anthropicTeamWide": "Anthropic на всю команду",
+ "runtimeInheritance": "Середовище лідера застосовується до учасників, доки вони не встановлять власного провайдера чи модель.",
+ "anthropicContextLimit": "Ліміт контексту 200K поширюється на всю команду для середовищ Anthropic у цьому запуску, включно з власними учасниками Anthropic."
+ },
+ "runtimeLogs": {
+ "autoRefresh": "Автооновлення",
+ "wrapLines": "Переносити рядки",
+ "loadingTail": "Завантаження кінця журналу процесу...",
+ "empty": "Для цього учасника поки не захоплено файл журналу процесу.",
+ "copy": "Копіювати",
+ "fileEmpty": "Файл журналу процесу порожній.",
+ "showingLast": "Показано останні {{bytes}}.",
+ "showing": "Показано {{bytes}}."
+ },
+ "tasks": {
+ "empty": "Цьому учаснику не призначено завдань"
+ },
+ "messages": {
+ "loadOlder": "Завантажити старіші повідомлення",
+ "filters": {
+ "all": "Усі",
+ "messages": "Повідомлення",
+ "comments": "Коментарі"
+ },
+ "empty": {
+ "loading": "Завантаження активності...",
+ "noComments": "Немає коментарів для цього учасника",
+ "noLoadedMessages": "Поки немає завантажених повідомлень для цього учасника",
+ "noMessages": "Немає повідомлень з цим учасником",
+ "noLoadedActivity": "Поки немає завантаженої активності для цього учасника",
+ "noActivity": "Немає активності з цим учасником"
+ }
+ },
+ "actions": {
+ "openProfile": "Відкрити профіль",
+ "editRole": "Редагувати роль",
+ "sendMessage": "Надіслати повідомлення",
+ "assignTask": "Призначити завдання"
+ },
+ "roleSelect": {
+ "customRolePlaceholder": "Введіть власну роль..."
+ }
+ },
+ "schedule": {
+ "count": "{{count}} розкладів",
+ "count_one": "{{count}} розклад",
+ "count_other": "{{count}} розкладів",
+ "nextRun": "Далі: {{next}}",
+ "actions": {
+ "runNow": "Запустити зараз",
+ "edit": "Редагувати",
+ "pause": "Призупинити",
+ "resume": "Відновити",
+ "delete": "Видалити",
+ "addSchedule": "Додати розклад"
+ },
+ "runHistory": {
+ "loading": "Завантаження історії запусків...",
+ "empty": "Ще немає запусків"
+ },
+ "count_few": "{{count}} розклади",
+ "count_many": "{{count}} розкладів",
+ "runLog": {
+ "title": "Журнал запуску",
+ "exitCode": "вихід {{code}}",
+ "retryCount": "повтор {{count}}/{{max}}",
+ "stillRunning": "Завдання все ще виконується...",
+ "loadingLogs": "Завантаження журналів...",
+ "errors": "Помилки",
+ "close": "Закрити"
+ },
+ "cron": {
+ "expression": "Cron-вираз",
+ "highFrequencyWarning": "Високочастотний розклад (інтервал менше 5 хв)",
+ "nextRuns": "Наступні запуски:",
+ "timezone": "Часовий пояс",
+ "selectTimezone": "Виберіть часовий пояс",
+ "warmUpTime": "Час розігріву",
+ "warmUpDescription": "Готує вибраних провайдерів перед запланованим виконанням",
+ "errors": {
+ "enterExpression": "Введіть cron-вираз",
+ "invalidExpression": "Недійсний cron-вираз"
+ },
+ "presets": {
+ "everyHour": "Щогодини",
+ "everySixHours": "Кожні 6 годин",
+ "dailyAtNine": "Щодня о 9:00",
+ "weekdaysAtNine": "У будні о 9:00",
+ "mondayAtNine": "У понеділок о 9:00",
+ "everyThirtyMinutes": "Кожні 30 хв"
+ },
+ "warmUpOptions": {
+ "none": "Без розігріву",
+ "fiveMinutes": "5 хв",
+ "tenMinutes": "10 хв",
+ "fifteenMinutes": "15 хв",
+ "thirtyMinutes": "30 хв"
+ }
+ },
+ "empty": {
+ "title": "Ще немає розкладів",
+ "description": "Створіть розклад для автоматичного виконання завдань Claude за cron-розкладом."
+ },
+ "title": "Розклади",
+ "status": {
+ "active": "Активний",
+ "paused": "Призупинено",
+ "disabled": "Вимкнено"
+ },
+ "runStatus": {
+ "pending": "В очікуванні",
+ "warmingUp": "Розігрів",
+ "warm": "Розігрітий",
+ "running": "Виконується",
+ "completed": "Завершено",
+ "failed": "Не вдалося",
+ "interrupted": "Перервано",
+ "cancelled": "Скасовано"
+ }
+ },
+ "openCodeContextConfigHint": {
+ "summary": "Локальні моделі OpenCode можуть використовувати бюджет контексту OpenCode замість лімітів лише для промпту.",
+ "description": "Додайте відповідні ліміти до конфігурації OpenCode для провайдера та моделі, які використовує цей учасник. Це допомагає OpenCode стискати й обрізати, перш ніж локальні моделі переповнять своє контекстне вікно.",
+ "replacePrefix": "Замініть",
+ "and": "та",
+ "replaceSuffix": "ідентифікаторами провайдера та моделі з вашого налаштування OpenCode. Інструкції в промпті, як-от",
+ "promptInstructionsSuffix": "слабші, бо запит збирається до того, як модель їх прочитає.",
+ "providerLimits": "Ліміти провайдера",
+ "compactionConfig": "Конфігурація стиснення"
+ },
+ "sessions": {
+ "noProjectPath": "Немає пов'язаного шляху проєкту",
+ "provisioningHint": "Сесії з'являться після розгортання команди",
+ "projectNotFound": "Проєкт не знайдено",
+ "loading": "Завантаження сесій...",
+ "empty": "Сесій не знайдено",
+ "showAllSessions": "Показати для всіх сесій",
+ "lead": "лідер",
+ "removeFilter": "Видалити фільтр",
+ "filterBySession": "Фільтрувати за цією сесією",
+ "openSession": "Відкрити сесію",
+ "title": "Сесії"
+ },
+ "provisioning": {
+ "pid": "PID {{pid}}",
+ "cancel": "Скасувати",
+ "moreWarningsHidden": "{{count}} попереджень приховано",
+ "diagnostics": "Діагностика",
+ "liveOutput": "Живий вивід",
+ "diagnosticsCopied": "Діагностику скопійовано",
+ "copyDiagnostics": "Копіювати діагностику",
+ "copied": "Скопійовано",
+ "noOutput": "Поки не захоплено виводу.",
+ "cliLogs": "Журнали CLI",
+ "steps": {
+ "starting": "Запуск",
+ "configuring": "Налаштування команди",
+ "assembling": "Приєднання учасників",
+ "finalizing": "Завершення"
+ },
+ "providerStatus": {
+ "status": {
+ "checking": "перевірка...",
+ "ready": "OK",
+ "notes": "OK (примітки)",
+ "failed": "ПОМИЛКА",
+ "pending": "очікування"
+ },
+ "detailSummary": {
+ "cliBinaryMissing": "Бінарний файл CLI відсутній",
+ "openCodeRuntimeMissing": "Середовище OpenCode відсутнє",
+ "openCodeWindowsAccessBlocked": "Доступ OpenCode у Windows заблоковано",
+ "openCodeNoOutput": "Перевірка середовища OpenCode не повернула виводу",
+ "openCodeMcpUnreachable": "Застосунок MCP OpenCode недосяжний",
+ "workingDirectoryMissing": "Робочий каталог відсутній",
+ "cliBinaryCouldNotStart": "Не вдалося запустити бінарний файл CLI",
+ "cliPreflightIncomplete": "Передперевірка CLI не завершилася",
+ "authenticationRequired": "Потрібна автентифікація",
+ "runtimeProviderNotConfigured": "Провайдер середовища не налаштовано",
+ "cliPreflightFailed": "Передперевірка CLI не вдалася",
+ "selectedModelCompatible": "Вибрана модель сумісна",
+ "selectedModelCompatibilityPending": "Сумісність вибраної моделі в очікуванні",
+ "selectedModelAvailable": "Вибрана модель доступна",
+ "selectedModelVerified": "Вибрану модель перевірено",
+ "selectedModelUnavailable": "Вибрана модель недоступна",
+ "selectedModelTimedOut": "Час перевірки вибраної моделі вичерпано",
+ "selectedModelCheckFailed": "Перевірка вибраної моделі не вдалася",
+ "selectedModelDeferred": "Перевірку вибраної моделі відкладено",
+ "selectedModelPingNotConfirmed": "Ping вибраної моделі не підтверджено",
+ "readyWithNotes": "Готово з примітками",
+ "needsAttention": "Потребує уваги"
+ },
+ "modelChecksSummary": "Перевірки вибраної моделі - {{details}}",
+ "modelParts": {
+ "unavailable": "{{count}} модель недоступна",
+ "unavailable_one": "{{count}} модель недоступна",
+ "unavailable_other": "{{count}} моделей недоступні",
+ "checkFailed": "{{count}} перевірка моделі не вдалася",
+ "checkFailed_one": "{{count}} перевірка моделі не вдалася",
+ "checkFailed_other": "{{count}} перевірок моделей не вдалися",
+ "timedOut": "{{count}} модель завершилася за тайм-аутом",
+ "timedOut_one": "{{count}} модель завершилася за тайм-аутом",
+ "timedOut_other": "{{count}} моделей завершилися за тайм-аутом",
+ "deferred": "{{count}} перевірку відкладено",
+ "deferred_one": "{{count}} перевірку відкладено",
+ "deferred_other": "{{count}} перевірок відкладено",
+ "pingNotConfirmed": "{{count}} ping не підтверджено",
+ "pingNotConfirmed_one": "{{count}} ping не підтверджено",
+ "pingNotConfirmed_other": "{{count}} ping не підтверджено",
+ "compatibilityPending": "{{count}} сумісна, глибока перевірка в очікуванні",
+ "compatibilityPending_one": "{{count}} сумісна, глибока перевірка в очікуванні",
+ "compatibilityPending_other": "{{count}} сумісних, глибока перевірка в очікуванні",
+ "compatible": "{{count}} сумісна",
+ "compatible_one": "{{count}} сумісна",
+ "compatible_other": "{{count}} сумісних",
+ "checking": "{{count}} перевіряється",
+ "checking_one": "{{count}} перевіряється",
+ "checking_other": "{{count}} перевіряється",
+ "available": "{{count}} доступна",
+ "available_one": "{{count}} доступна",
+ "available_other": "{{count}} доступних",
+ "verified": "{{count}} перевірено",
+ "verified_one": "{{count}} перевірено",
+ "verified_other": "{{count}} перевірено",
+ "unavailable_few": "{{count}} моделі недоступні",
+ "unavailable_many": "{{count}} моделей недоступні",
+ "checkFailed_few": "{{count}} перевірки моделей не вдалися",
+ "checkFailed_many": "{{count}} перевірок моделей не вдалися",
+ "timedOut_few": "{{count}} моделі завершилися за тайм-аутом",
+ "timedOut_many": "{{count}} моделей завершилися за тайм-аутом",
+ "deferred_few": "{{count}} перевірки відкладено",
+ "deferred_many": "{{count}} перевірок відкладено",
+ "pingNotConfirmed_few": "{{count}} ping не підтверджено",
+ "pingNotConfirmed_many": "{{count}} ping не підтверджено",
+ "compatibilityPending_few": "{{count}} сумісні, глибока перевірка в очікуванні",
+ "compatibilityPending_many": "{{count}} сумісних, глибока перевірка в очікуванні",
+ "compatible_few": "{{count}} сумісні",
+ "compatible_many": "{{count}} сумісних",
+ "checking_few": "{{count}} перевіряється",
+ "checking_many": "{{count}} перевіряється",
+ "available_few": "{{count}} доступні",
+ "available_many": "{{count}} доступних",
+ "verified_few": "{{count}} перевірено",
+ "verified_many": "{{count}} перевірено"
+ },
+ "openProviderSettings": "Відкрити налаштування {{provider}}",
+ "copied": "Скопійовано",
+ "copyDiagnostics": "Копіювати діагностику",
+ "deepVerificationPending": "Глибока перевірка ще триває. Безплатні моделі OpenCode можуть зайняти близько 20 секунд.",
+ "progress": {
+ "checkingSelectedProviders": "Перевірка вибраних провайдерів паралельно...",
+ "checkingProvider": "Перевірка провайдера {{provider}}...",
+ "checkingProviders": "Перевірка {{providers}} провайдерів..."
+ },
+ "failureHints": {
+ "openCodeAccessDenied": "Виправте права доступу до теки чи перемістіть проєкт у теку з правом запису для користувача. Запуск від імені адміністратора - лише тимчасовий обхід.",
+ "openCodeBridgeNoOutput": "Перезапустіть застосунок і середовище OpenCode, потім повторіть. Якщо повторюється, скопіюйте діагностику.",
+ "workingDirectoryMissing": "Виберіть наявний робочий каталог, потім відкрийте цей діалог знову.",
+ "authenticationRequired": "Автентифікуйте потрібного провайдера в Claude CLI, потім відкрийте цей діалог знову.",
+ "runtimeProviderNotConfigured": "Налаштуйте середовище вибраного провайдера, потім відкрийте цей діалог знову.",
+ "openCodeRuntimeMissing": "Встановіть чи повторіть середовище OpenCode з картки статусу провайдера, потім відкрийте цей діалог знову.",
+ "openCodeAppMcpUnreachable": "Повторіть запуск, щоб оновити міст застосунку MCP OpenCode. Якщо повторюється, перезапустіть застосунок і середовище OpenCode.",
+ "cliBinaryMissing": "Переконайтеся, що локальний бінарний файл Claude CLI існує й може запускатися, потім відкрийте цей діалог знову.",
+ "default": "Вирішіть проблему вище, потім відкрийте цей діалог знову.",
+ "openCodeNodeModulesSymlinkPermission": "Запустіть Agent Teams AI від імені адміністратора, потім повторіть запуск."
+ }
+ },
+ "presentation": {
+ "awaitingPermission": "{{count}} учасник очікує затвердження дозволу",
+ "nameListWithMore": "{{names}}, +{{count}} ще",
+ "waitingForOpenCode": "Очікування OpenCode: {{names}}",
+ "bootstrapStalled": "Bootstrap застряг: {{names}}",
+ "bootstrapStalledWithOpenCodeWait": "{{stalled}}; Очікування OpenCode: {{names}}",
+ "namedPendingDiagnostic": "{{label}}: {{names}}",
+ "countPendingDiagnostic": "{{count}} {{label}}",
+ "pendingLabels": {
+ "bootstrapStalled": "Bootstrap застряг",
+ "shellOnly": "Лише оболонка",
+ "waitingForBootstrap": "Очікування bootstrap",
+ "bootstrapUnconfirmed": "Bootstrap не підтверджено",
+ "awaitingPermission": "Очікування дозволу",
+ "waitingForRuntime": "Очікування середовища",
+ "shellOnlyLower": "лише оболонка",
+ "waitingForBootstrapLower": "очікування bootstrap",
+ "bootstrapUnconfirmedLower": "bootstrap не підтверджено",
+ "awaitingPermissionLower": "очікування дозволу",
+ "waitingForRuntimeLower": "очікування середовища"
+ },
+ "failed": {
+ "memberFailedToStart": "{{name}} не вдалося запустити",
+ "teammatesFailedToStart": "{{count}} учасників не вдалося запустити",
+ "teammatesFailedRatio": "{{count}}/{{total}} учасників не вдалося запустити"
+ },
+ "skipped": {
+ "memberSkipped": "{{name}} пропущено для цього запуску",
+ "memberSkippedWithReason": "{{name}} пропущено для цього запуску - {{reason}}",
+ "memberSkippedCompact": "{{name}} пропущено",
+ "teammatesSkipped": "{{count}} учасників пропущено",
+ "teammatesSkippedList": "Пропущені учасники: {{list}}",
+ "teammatesSkippedRatio": "{{count}}/{{total}} учасників пропущено для цього запуску"
+ },
+ "joining": {
+ "teammatesStillJoining": "{{count}} учасників усе ще приєднуються",
+ "teammatesStillJoining_one": "{{count}} учасник усе ще приєднується",
+ "teammatesStillJoining_few": "{{count}} учасники усе ще приєднуються",
+ "teammatesStillJoining_many": "{{count}} учасників усе ще приєднуються",
+ "teammatesStillJoining_other": "{{count}} учасників усе ще приєднуються",
+ "teammatesConfirmedRatio": "{{count}}/{{total}} учасників підтверджено"
+ },
+ "ready": {
+ "leadOnline": "Лідер онлайн",
+ "allTeammatesJoined": "Усі {{count}} учасників приєдналися",
+ "teamProvisionedLeadOnline": "Команду розгорнуто - лідер онлайн",
+ "teamProvisionedAllJoined": "Команду розгорнуто - усі {{count}} учасників приєдналися",
+ "teamProvisionedStillJoining": "Команду розгорнуто - учасники все ще приєднуються",
+ "launchFinishedWithErrors": "Запуск завершено з помилками - {{count}}/{{total}} учасників не вдалося запустити",
+ "launchContinuedSkipped": "Запуск продовжено - {{count}}/{{total}} учасників пропущено",
+ "teamLaunchedLeadOnline": "Команду запущено - лідер онлайн",
+ "teamLaunchedAllJoined": "Команду запущено - усі {{count}} учасників приєдналися"
+ },
+ "panel": {
+ "launchFailed": "Запуск не вдався",
+ "launchDetails": "Деталі запуску",
+ "launchFinishedWithErrors": "Запуск завершено з помилками",
+ "launchContinuedSkipped": "Запуск продовжено з пропущеними учасниками",
+ "coreTeamReady": "Основна команда готова",
+ "finishingLaunch": "Завершення запуску",
+ "teamLaunched": "Команду запущено",
+ "launchingTeam": "Запуск команди"
+ }
+ }
+ },
+ "liveRuntimeStatus": {
+ "title": "Живий статус середовища",
+ "description": "Лише для відображення: серцебиття та стан запуску. Керування процесом залишається нижче.",
+ "source": "джерело: {{source}}",
+ "lane": "лінія {{lane}}",
+ "diagnosticOnly": "Лише діагностика",
+ "updated": "оновлено {{value}}",
+ "states": {
+ "running": "Виконується",
+ "starting": "Запускається",
+ "waiting": "Очікування",
+ "degraded": "Потребує уваги",
+ "stopped": "Зупинено",
+ "unknown": "Невідомо"
+ }
+ },
+ "taskLogs": {
+ "exact": {
+ "title": "Точні журнали завдання",
+ "loading": "Завантаження точних журналів завдання...",
+ "description": "Точні фрагменти транскрипту, відрендерені з тими самими компонентами журналу виконання, що використовуються в «Журналах».",
+ "emptyTitle": "Поки немає точних журналів завдання",
+ "emptyDescription": "Точні пакети транскрипту з'являться тут, коли будуть доступні явні метадані транскрипту, пов'язані із завданням.",
+ "summaryOnly": "лише підсумок"
+ },
+ "executionSessions": {
+ "title": "Сесії виконання",
+ "online": "Онлайн",
+ "updating": "Оновлення...",
+ "description": "Застарілий перегляд і попередні перегляди транскриптів, орієнтованих на сесії."
+ },
+ "stream": {
+ "title": "Потік журналу завдання"
+ }
+ },
+ "kanban": {
+ "taskCard": {
+ "cancelTask": "Скасувати завдання {{taskId}}",
+ "cancel": "Скасувати",
+ "moveBackToTodoConfirm": "Перемістити це завдання назад у TODO та сповістити команду?",
+ "confirm": "Підтвердити",
+ "keep": "Зберегти",
+ "changesNeedAttention": "Зміни потребують уваги",
+ "changes": "Зміни",
+ "deleteTask": "Видалити завдання",
+ "taskLogsActive": "Журнали завдання активні",
+ "newTaskLogsArriving": "Надходять нові журнали завдання",
+ "awaitingUser": "Очікування користувача",
+ "awaitingLead": "Очікування лідера",
+ "blockedBy": "Заблоковано",
+ "blocks": "Блокує",
+ "start": "Почати",
+ "complete": "Завершити",
+ "approve": "Затвердити",
+ "requestReview": "Запитати перегляд",
+ "manualReview": "Ручний перегляд",
+ "requestChanges": "Запитати зміни"
+ },
+ "filter": {
+ "title": "Фільтрувати завдання",
+ "session": "Сесія",
+ "allSessions": "Усі сесії",
+ "teammate": "Учасник",
+ "unassigned": "(не призначено)",
+ "column": "Стовпець",
+ "clearAll": "Очистити все"
+ },
+ "board": {
+ "addTask": "Додати завдання",
+ "noTasks": "Немає завдань",
+ "showMore": "Показати ще {{count}}",
+ "hiddenCount": "{{count}} приховано",
+ "trash": "Кошик",
+ "gridView": "Перегляд сіткою",
+ "columnsView": "Перегляд стовпцями"
+ },
+ "trash": {
+ "title": "Кошик",
+ "empty": "Немає видалених завдань",
+ "subject": "Тема",
+ "owner": "Власник",
+ "deleted": "Видалено",
+ "unassigned": "Не призначено",
+ "restoreTask": "Відновити завдання",
+ "restore": "Відновити",
+ "close": "Закрити"
+ },
+ "sort": {
+ "title": "Сортувати завдання",
+ "sortBy": "Сортувати за",
+ "reset": "Скинути",
+ "options": {
+ "updatedAt": {
+ "label": "Останнє оновлення",
+ "description": "Нещодавно оновлені спочатку"
+ },
+ "createdAt": {
+ "label": "Створено",
+ "description": "Найновіші спочатку"
+ },
+ "owner": {
+ "label": "Власник",
+ "description": "За абеткою за виконавцем"
+ },
+ "manual": {
+ "label": "Вручну",
+ "description": "Порядок перетягуванням"
+ }
+ }
+ },
+ "search": {
+ "clearSearch": "Очистити пошук",
+ "tasks": "Завдання",
+ "createdAgo": "створено {{time}}",
+ "updatedAgo": "оновлено {{time}}",
+ "placeholder": "Пошук завдань... (#id або текст)"
+ },
+ "grid": {
+ "addTask": "Додати завдання",
+ "noTasks": "Немає завдань"
+ },
+ "title": "Kanban",
+ "columns": {
+ "todo": "TODO",
+ "inProgress": "У ПРОЦЕСІ",
+ "review": "ПЕРЕГЛЯД",
+ "done": "ГОТОВО",
+ "approved": "ЗАТВЕРДЖЕНО"
+ }
+ },
+ "worktreeGitReadiness": {
+ "checking": "Перевірка статусу репозиторію Git для worktree учасників...",
+ "ready": "Git worktree готові.",
+ "readyOnBranch": "Git worktree готові на гілці {{branch}}.",
+ "needsSetup": "Ізоляція worktree потребує налаштування Git",
+ "initialCommitNotice": "Дія початкового коміту індексує та комітить усі поточні файли з повідомленням",
+ "initializeRepository": "Ініціалізувати репозиторій Git",
+ "createInitialCommit": "Створити початковий коміт",
+ "initialCommitMessage": "chore: initial commit"
+ },
+ "toolApproval": {
+ "settings": "Налаштування",
+ "autoAllowAllTools": "Автоматично дозволяти всі інструменти",
+ "autoAllowFileEdits": "Автоматично дозволяти редагування файлів (Edit, Write, NotebookEdit)",
+ "autoAllowSafeCommands": "Автоматично дозволяти безпечні команди (git, pnpm, npm, ls...)",
+ "onTimeout": "При тайм-ауті:",
+ "after": "через",
+ "secondsShort": "с",
+ "timeoutActions": {
+ "wait": "Чекати завжди",
+ "allow": "Дозволити",
+ "deny": "Відхилити"
+ },
+ "submit": "Надіслати",
+ "allow": "Дозволити",
+ "deny": "Відхилити",
+ "allowAll": "Дозволити все",
+ "pendingCount": "{{count}} в очікуванні",
+ "autoActionIn": "Авто-{{action}} через {{time}}",
+ "diff": {
+ "previewChanges": "Переглянути зміни",
+ "readingFile": "Читання файлу...",
+ "binaryFile": "Бінарний файл - неможливо переглянути",
+ "truncated": "Файл скорочено на 2MB - відмінності можуть бути неповними",
+ "newFile": "Новий файл"
+ }
+ },
+ "memberWorkSync": {
+ "details": {
+ "title": "Синхронізація роботи учасника",
+ "actionableItems": "Дієві елементи",
+ "fingerprint": "Відбиток",
+ "report": "Звіт",
+ "none": "немає",
+ "shadowWouldNudge": "Тінь нагадала б",
+ "yes": "так",
+ "no": "ні",
+ "moreActionableItems": "ще {{count}} дієвих елементів",
+ "diagnostics": "Діагностика: {{diagnostics}}"
+ },
+ "title": "Синхронізація роботи учасника",
+ "loadingDiagnostics": "Завантаження діагностики синхронізації роботи учасника.",
+ "diagnosticsUnavailable": "Діагностика синхронізації роботи учасника недоступна."
+ },
+ "advancedCli": {
+ "title": "Розширене",
+ "useWorktree": "Використати worktree",
+ "recent": "Недавнє",
+ "commandPreview": "Перегляд команди",
+ "customArguments": "Власні аргументи",
+ "validate": "Перевірити",
+ "validation": {
+ "allFlagsValid": "Усі прапорці дійсні",
+ "unknownFlags": "Невідомі: {{flags}}",
+ "protectedFlags": "Захищені: {{flags}}",
+ "failed": "Перевірка не вдалася"
+ },
+ "placeholders": {
+ "worktreeName": "worktree-name"
+ }
+ },
+ "processes": {
+ "ago": "{{time}} тому",
+ "stoppedAgo": "зупинено {{time}} тому",
+ "running": "Виконується",
+ "stopped": "Зупинено",
+ "stopProcess": "Зупинити процес (SIGTERM)",
+ "kill": "Завершити",
+ "openInBrowser": "Відкрити в браузері",
+ "open": "Відкрити",
+ "pid": "PID{{pid}}",
+ "title": "Процеси CLI"
+ },
+ "taskActivity": {
+ "loadingDetails": "Завантаження деталей активності...",
+ "contextUnavailable": "Детальний контекст транскрипту для цієї активності більше недоступний.",
+ "loading": "Завантаження активності завдання...",
+ "lowSignalOnly": "Ключової активності завдання поки не знайдено. Низькорівневі деталі виконання доступні нижче в «Потоці журналу завдання».",
+ "empty": "У доступних транскриптах поки не знайдено явної активності завдання. Старіші чи евристичні журнали сесій можуть бути все ще доступні нижче в «Сесіях виконання».",
+ "title": "Активність завдання",
+ "description": "Ключова явна активність середовища, пов'язана з цим завданням, з метаданих транскрипту."
+ },
+ "sendMessage": {
+ "title": "Надіслати повідомлення",
+ "description": "Надіслати пряме повідомлення учаснику команди.",
+ "recipientLabel": "Отримувач",
+ "selectMemberPlaceholder": "Виберіть учасника...",
+ "messageLabel": "Повідомлення",
+ "placeholder": "Напишіть своє повідомлення... (Enter, щоб надіслати)",
+ "send": "Надіслати",
+ "sending": "Надсилання...",
+ "charsLeft": "залишилось {{count}} симв.",
+ "saved": "Збережено",
+ "attachments": {
+ "teamOnlineRequired": "Команда має бути онлайн, щоб прикріплювати файли",
+ "recipientUnsupported": "Файли можна надсилати лідеру команди чи учасникам OpenCode",
+ "openCodeOnlineRequired": "Команда має бути онлайн, щоб прикріплювати файли для учасників OpenCode",
+ "disabledHint": "Вкладення файлів підтримуються для онлайн лідера команди та онлайн учасників OpenCode. Видаліть вкладення чи змініть отримувача.",
+ "attachFiles": "Прикріпити файли (вставити або перетягнути)",
+ "unavailable": "Вкладення недоступні"
+ },
+ "quote": {
+ "remove": "Видалити цитату",
+ "replyingTo": "Відповідь на"
+ }
+ },
+ "taskComments": {
+ "cancelReply": "Скасувати відповідь",
+ "replyingTo": "Відповідь на",
+ "placeholder": "Додайте коментар... (Enter, щоб надіслати)",
+ "attachFile": "Прикріпити файл (або вставити)",
+ "voiceToText": "Голос у текст",
+ "comment": "Коментар",
+ "charsLeft": "залишилось {{count}} симв.",
+ "saved": "Збережено",
+ "awaitingReplyFrom": "Очікування відповіді від",
+ "or": "або"
+ },
+ "taskAttachments": {
+ "dropImageHere": "Перетягніть зображення сюди",
+ "attachImage": "Прикріпити зображення",
+ "pasteOrDragDrop": "або вставте / перетягніть",
+ "fromOriginalMessage": "З оригінального повідомлення",
+ "dropFilesHere": "Перетягніть файли сюди",
+ "loading": "Завантаження вкладень..."
+ },
+ "permissions": {
+ "autoApproveAllTools": "Автоматично затверджувати всі інструменти",
+ "autonomousModeDescription": "Автономний режим: інструменти команди виконуються без підтвердження. Будьте обережні з ненадійним кодом.",
+ "manualModeDescription": "Ручний режим: ви будете дозволяти чи відхиляти кожен виклик інструмента в реальному часі."
+ },
+ "memberLogStream": {
+ "tabs": {
+ "execution": "Виконання",
+ "process": "Процес"
+ },
+ "filters": {
+ "all": "Усі"
+ },
+ "logs": {
+ "title": "Журнали",
+ "loading": "Завантаження потоку журналу учасника...",
+ "emptyTitle": "Для цього учасника поки не знайдено записів потоку журналу.",
+ "emptyDescription": "Журнали транскрипту чи середовища, орієнтовані на учасника, з'являться тут, коли стануть доступними."
+ }
+ },
+ "reviewDialog": {
+ "placeholder": "Опишіть, що потрібно змінити... (Enter, щоб надіслати)",
+ "submit": "Надіслати",
+ "charsLeft": "залишилось {{count}} симв.",
+ "saved": "Збережено",
+ "title": "Запитати зміни"
+ },
+ "dialogs": {
+ "actions": {
+ "openDashboard": "Відкрити панель",
+ "openTeam": "Відкрити команду",
+ "cancel": "Скасувати"
+ },
+ "membersJson": {
+ "hide": "Сховати JSON"
+ },
+ "optional": {
+ "badge": "Необов'язково"
+ }
+ },
+ "runningTeams": {
+ "title": "Запущені команди",
+ "status": {
+ "active": "Активна",
+ "provisioning": "Запуск",
+ "idle": "Запущено"
+ },
+ "noProject": "Немає проєкту"
+ },
+ "layout": {
+ "maxPanesReached": "Досягнуто максимуму в {{count}} панелей"
+ },
+ "codexReconnect": {
+ "description": "Ваша сесія Codex здається застарілою. Перепідключіться, щоб продовжити.",
+ "useCode": "Використати код",
+ "generating": "Генерація...",
+ "openLogin": "Відкрити вхід",
+ "generateLink": "Згенерувати посилання"
+ },
+ "effortLevel": {
+ "label": "Рівень зусиль (необов'язково)",
+ "maxDescription": "«Макс» дає моделі найбільше часу на міркування для складних завдань."
+ },
+ "contextLimit": {
+ "limitTo200k": "Обмежити контекст до 200K токенів",
+ "always200k": "(завжди 200K для цієї моделі)",
+ "tooltipContent": "Тримає запуски в межах контекстного вікна 200K токенів, де це підтримується.",
+ "tooltipTitle": "Ліміт контексту"
+ },
+ "roleSelect": {
+ "noRole": "Без ролі",
+ "customRole": "Власна роль...",
+ "searchPlaceholder": "Пошук ролей...",
+ "empty": "Ролей не знайдено.",
+ "reservedRole": "Ця роль зарезервована",
+ "emptyCustomRole": "Роль не може бути порожньою"
+ }
+}
diff --git a/src/features/localization/renderer/locales/ur/common.json b/src/features/localization/renderer/locales/ur/common.json
index 628c8798..f8184588 100644
--- a/src/features/localization/renderer/locales/ur/common.json
+++ b/src/features/localization/renderer/locales/ur/common.json
@@ -62,21 +62,36 @@
"locales": {
"emptyMessage": "کوئی زبان نہیں ملی۔",
"names": {
- "en": "انگریزی",
- "ru": "روسی",
- "zh": "چینی",
- "ja": "جاپانی",
- "ko": "کوریائی",
- "es": "ہسپانوی",
- "hi": "ہندی",
- "pt": "پرتگالی",
- "fr": "فرانسیسی",
"ar": "عربی",
"bn": "بنگالی",
- "ur": "اردو",
- "id": "انڈونیشیائی",
"de": "جرمن",
- "system": "سسٹم"
+ "en": "انگریزی",
+ "es": "ہسپانوی",
+ "fa": "فارسی",
+ "fil": "فلپینو",
+ "fr": "فرانسیسی",
+ "hi": "ہندی",
+ "id": "انڈونیشیائی",
+ "it": "اطالوی",
+ "ja": "جاپانی",
+ "ko": "کوریائی",
+ "mr": "مراٹھی",
+ "ms": "ملائی",
+ "nl": "ڈچ",
+ "pl": "پولش",
+ "pt": "پرتگالی",
+ "ro": "رومانیائی",
+ "ru": "روسی",
+ "sw": "سواحلی",
+ "system": "سسٹم",
+ "ta": "تامل",
+ "te": "تیلگو",
+ "th": "تھائی",
+ "tr": "ترکی",
+ "uk": "یوکرینیائی",
+ "ur": "اردو",
+ "vi": "ویتنامی",
+ "zh": "چینی"
},
"searchPlaceholder": "زبان تلاش کریں...",
"selectPlaceholder": "ایپ کی زبان منتخب کریں...",
diff --git a/src/features/localization/renderer/locales/ur/settings.json b/src/features/localization/renderer/locales/ur/settings.json
index f58cf7f1..831ac92b 100644
--- a/src/features/localization/renderer/locales/ur/settings.json
+++ b/src/features/localization/renderer/locales/ur/settings.json
@@ -68,12 +68,12 @@
"useInTeamPicker": "ٹیم چیسٹر میں استعمال ہوتی ہے۔",
"testInProgress": "ماڈل ٹیسٹ پہلے ہی چل رہا ہے۔",
"validationContextRequired": "Test اور Set default فعال کرنے کے لیے اوپر validation context منتخب کریں۔ team picker کے لیے محفوظ کرنا صرف نئی ٹیموں کے لیے route محفوظ کرتا ہے۔",
+ "actionsUnavailable": "کارروائیاں عارضی طور پر دستیاب نہیں ہیں۔",
"defaultSaveInProgress": "OpenCode default محفوظ ہو رہا ہے۔",
"routeUnavailableAuth": "اس model کو استعمال کرنے سے پہلے اس provider کو authentication چاہیے۔",
"routeUnavailableFailed": "یہ model route آخری execution test میں ناکام ہوا۔",
- "routeUnavailableUnknown": "یہ model موجودہ OpenCode default ہے، مگر ابھی live catalog میں دستیاب نہیں۔",
- "actionsUnavailable": "کارروائیاں عارضی طور پر دستیاب نہیں ہیں۔",
- "routeUnavailableGeneric": "یہ model route اس وقت استعمال نہیں ہو سکتا۔"
+ "routeUnavailableGeneric": "یہ model route اس وقت استعمال نہیں ہو سکتا۔",
+ "routeUnavailableUnknown": "یہ model موجودہ OpenCode default ہے، مگر ابھی live catalog میں دستیاب نہیں۔"
},
"providers": {
"catalog": "کھولیں",
diff --git a/src/features/localization/renderer/locales/ur/team.json b/src/features/localization/renderer/locales/ur/team.json
index ffb640c5..441b4edb 100644
--- a/src/features/localization/renderer/locales/ur/team.json
+++ b/src/features/localization/renderer/locales/ur/team.json
@@ -1496,7 +1496,7 @@
},
"status": {
"reusedCrossTeamRequest": "حالیہ صلیبی درخواست استعمال کریں",
- "teamOffline": "گروپ"
+ "teamOffline": "آف لائن"
},
"revision": {
"editing": "پچھلا پیغام ترمیم ہو رہا ہے",
diff --git a/src/features/localization/renderer/locales/vi/common.json b/src/features/localization/renderer/locales/vi/common.json
new file mode 100644
index 00000000..562df155
--- /dev/null
+++ b/src/features/localization/renderer/locales/vi/common.json
@@ -0,0 +1,927 @@
+{
+ "actions": {
+ "cancel": "Hủy",
+ "close": "Đóng",
+ "copied": "Đã sao chép",
+ "copyUrl": "Sao chép URL",
+ "open": "Mở",
+ "reveal": "Hiện trong thư mục",
+ "retry": "Thử lại",
+ "save": "Lưu",
+ "showLess": "Thu gọn",
+ "showMore": "Xem thêm",
+ "refresh": "Làm mới",
+ "reset": "Đặt lại",
+ "copyToClipboard": "Sao chép vào bộ nhớ tạm",
+ "moreActions": "Thêm thao tác",
+ "closeDialog": "Đóng hộp thoại",
+ "goToDashboard": "Đến Bảng điều khiển",
+ "or": "hoặc",
+ "hide": "Ẩn",
+ "resetSelection": "Đặt lại lựa chọn"
+ },
+ "code": {
+ "line": "dòng {{line}}",
+ "lines": "dòng {{from}}-{{to}}",
+ "moreLines": "(thêm {{count}} dòng...)",
+ "moreLines_few": "(thêm {{count}} dòng...)",
+ "moreLines_many": "(thêm {{count}} dòng...)",
+ "moreLines_one": "(thêm {{count}} dòng...)",
+ "moreLines_other": "(thêm {{count}} dòng...)",
+ "code": "Mã",
+ "preview": "Xem trước",
+ "markdownPreview": "Xem trước Markdown",
+ "linesParenthesized": "(dòng {{from}}-{{to}})",
+ "mermaidSyntaxError": "Lỗi cú pháp Mermaid"
+ },
+ "contextBadge": {
+ "badge": "Ngữ cảnh",
+ "breakdown": {
+ "text": "Văn bản",
+ "thinking": "Suy nghĩ"
+ },
+ "detailsAria": "Chi tiết nội dung ngữ cảnh được thêm vào",
+ "sectionSummary": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sections": {
+ "claudeMdFiles": "Tệp CLAUDE.md",
+ "mentionedFiles": "Tệp được nhắc đến",
+ "taskCoordination": "Điều phối tác vụ",
+ "thinkingText": "Suy nghĩ + Văn bản",
+ "toolOutputs": "Kết quả công cụ",
+ "userMessages": "Tin nhắn người dùng"
+ },
+ "title": "Ngữ cảnh mới được thêm vào trong lượt này",
+ "tokenCount": "~{{tokens}} token",
+ "totalNewTokens": "Tổng token mới",
+ "turn": "Lượt {{turn}}",
+ "sectionSummary_few": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sectionSummary_many": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sectionSummary_one": "{{title}} ({{count}}) ~{{tokens}} token",
+ "sectionSummary_other": "{{title}} ({{count}}) ~{{tokens}} token"
+ },
+ "locales": {
+ "emptyMessage": "Không tìm thấy ngôn ngữ nào.",
+ "names": {
+ "ar": "Tiếng Ả Rập",
+ "bn": "Tiếng Bengal",
+ "de": "Tiếng Đức",
+ "en": "Tiếng Anh",
+ "es": "Tiếng Tây Ban Nha",
+ "fa": "Tiếng Ba Tư",
+ "fil": "Tiếng Philippines",
+ "fr": "Tiếng Pháp",
+ "hi": "Tiếng Hindi",
+ "id": "Tiếng Indonesia",
+ "it": "Tiếng Ý",
+ "ja": "Tiếng Nhật",
+ "ko": "Tiếng Hàn",
+ "mr": "Tiếng Marathi",
+ "ms": "Tiếng Mã Lai",
+ "nl": "Tiếng Hà Lan",
+ "pl": "Tiếng Ba Lan",
+ "pt": "Tiếng Bồ Đào Nha",
+ "ro": "Tiếng Romania",
+ "ru": "Tiếng Nga",
+ "sw": "Tiếng Swahili",
+ "system": "Hệ thống",
+ "ta": "Tiếng Tamil",
+ "te": "Tiếng Telugu",
+ "th": "Tiếng Thái",
+ "tr": "Tiếng Thổ Nhĩ Kỳ",
+ "uk": "Tiếng Ukraina",
+ "ur": "Tiếng Urdu",
+ "vi": "Tiếng Việt",
+ "zh": "Tiếng Trung"
+ },
+ "searchPlaceholder": "Tìm ngôn ngữ...",
+ "selectPlaceholder": "Chọn ngôn ngữ ứng dụng...",
+ "systemWithResolved": "Hệ thống - {{locale}}"
+ },
+ "members": {
+ "emptyMessage": "Không tìm thấy thành viên nào.",
+ "searchPlaceholder": "Tìm thành viên...",
+ "unassigned": "Chưa phân công",
+ "teammateFallback": "thành viên"
+ },
+ "providerRuntime": {
+ "codex": {
+ "install": {
+ "checking": "Đang kiểm tra",
+ "downloading": "Đang tải",
+ "installCli": "Cài đặt Codex CLI",
+ "installing": "Đang cài đặt",
+ "retryInstall": "Thử cài đặt lại"
+ }
+ }
+ },
+ "search": {
+ "noMatchingSuggestions": "Không có gợi ý phù hợp",
+ "searching": "Đang tìm...",
+ "searchingFiles": "Đang tìm tệp...",
+ "findInConversation": "Tìm trong cuộc hội thoại...",
+ "resultCount": "{{current}} trên {{total}}",
+ "resultCountCapped": "{{current}} trên {{total}}+",
+ "noResults": "Không có kết quả",
+ "previousResultShortcut": "Kết quả trước (Shift+Enter)",
+ "nextResultShortcut": "Kết quả tiếp (Enter)",
+ "closeShortcut": "Đóng (Esc)",
+ "nothingFound": "Không tìm thấy gì",
+ "placeholder": "Tìm kiếm..."
+ },
+ "schedules": {
+ "actions": {
+ "addSchedule": "Thêm lịch",
+ "clearFilters": "Xóa bộ lọc",
+ "createSchedule": "Tạo lịch",
+ "delete": "Xóa",
+ "edit": "Chỉnh sửa",
+ "pause": "Tạm dừng",
+ "resume": "Tiếp tục",
+ "runNow": "Chạy ngay"
+ },
+ "empty": {
+ "description": "Tạo lịch trên bất kỳ đội ngũ nào để tự động hóa việc thực thi tác vụ Claude bằng biểu thức cron. Lịch từ tất cả các đội ngũ sẽ xuất hiện ở đây.",
+ "noMatches": "Không có lịch nào khớp với bộ lọc hiện tại",
+ "title": "Không có tác vụ theo lịch"
+ },
+ "filters": {
+ "allTeams": "Tất cả đội ngũ"
+ },
+ "item": {
+ "loadingRunHistory": "Đang tải lịch sử chạy...",
+ "nextRun": "Tiếp theo: {{value}}",
+ "noRunsYet": "Chưa có lần chạy nào"
+ },
+ "loading": "Đang tải lịch...",
+ "searchPlaceholder": "Tìm lịch...",
+ "status": {
+ "active": "Đang hoạt động",
+ "all": "Tất cả",
+ "disabled": "Đã tắt",
+ "paused": "Đã tạm dừng"
+ },
+ "title": "Lịch"
+ },
+ "sessions": {
+ "actions": {
+ "hide": "Ẩn",
+ "pin": "Ghim",
+ "unhide": "Bỏ ẩn"
+ },
+ "empty": {
+ "noMatchingSessions": "Không có phiên phù hợp",
+ "noMatchingSessionsDescription": "Dự án này chưa có phiên nào phù hợp.",
+ "noMatchingSessionsFiltered": "Hãy thử truy vấn khác hoặc đặt lại bộ lọc nhà cung cấp.",
+ "noSessions": "Không tìm thấy phiên nào",
+ "noSessionsDescription": "Dự án này chưa có phiên nào",
+ "selectProject": "Chọn một dự án để xem các phiên"
+ },
+ "errors": {
+ "loading": "Lỗi khi tải các phiên"
+ },
+ "loadedMatchingMore": "Đã tải {{count}} phiên phù hợp cho đến nay - cuộn xuống để tải thêm.",
+ "loadingMore": "Đang tải thêm phiên...",
+ "pinned": "Đã ghim",
+ "scrollToLoadMore": "Cuộn để tải thêm",
+ "search": {
+ "clear": "Xóa tìm kiếm phiên",
+ "placeholder": "Tìm phiên..."
+ },
+ "selection": {
+ "cancel": "Hủy lựa chọn",
+ "exitMode": "Thoát chế độ lựa chọn",
+ "hideSelected": "Ẩn các phiên đã chọn",
+ "pinSelected": "Ghim các phiên đã chọn",
+ "selectSessions": "Chọn phiên",
+ "selected": "Đã chọn {{count}}",
+ "unhideSelected": "Bỏ ẩn các phiên đã chọn",
+ "selected_few": "Đã chọn {{count}}",
+ "selected_many": "Đã chọn {{count}}",
+ "selected_one": "Đã chọn {{count}}",
+ "selected_other": "Đã chọn {{count}}"
+ },
+ "sort": {
+ "byContext": "Theo ngữ cảnh",
+ "byContextTooltip": "Sắp xếp theo mức tiêu thụ ngữ cảnh",
+ "byRecentTooltip": "Sắp xếp theo gần đây",
+ "contextLoadedOnly": "Sắp xếp theo ngữ cảnh chỉ xếp hạng các phiên đã tải."
+ },
+ "title": "Phiên",
+ "visibility": {
+ "hideHidden": "Ẩn các phiên đã ẩn",
+ "showHidden": "Hiện các phiên đã ẩn"
+ },
+ "worktree": {
+ "switch": "Chuyển Worktree"
+ },
+ "loadedMatchingMore_few": "Đã tải {{count}} phiên phù hợp cho đến nay - cuộn xuống để tải thêm.",
+ "loadedMatchingMore_many": "Đã tải {{count}} phiên phù hợp cho đến nay - cuộn xuống để tải thêm.",
+ "loadedMatchingMore_one": "Đã tải {{count}} phiên phù hợp cho đến nay - cuộn xuống để tải thêm.",
+ "loadedMatchingMore_other": "Đã tải {{count}} phiên phù hợp cho đến nay - cuộn xuống để tải thêm.",
+ "failedToLoad": "Không thể tải phiên",
+ "loading": "Đang tải phiên...",
+ "filter": {
+ "title": "Lọc phiên"
+ },
+ "count": "{{count}} phiên",
+ "count_one": "{{count}} phiên",
+ "count_other": "{{count}} phiên",
+ "count_few": "{{count}} phiên",
+ "count_many": "{{count}} phiên",
+ "inProgress": "Phiên đang diễn ra..."
+ },
+ "states": {
+ "loading": "Đang tải...",
+ "offline": "Ngoại tuyến",
+ "online": "Trực tuyến",
+ "unknown": "Không xác định",
+ "error": "Lỗi"
+ },
+ "markdown": {
+ "imageFallback": "[Hình ảnh: {{label}}]",
+ "largeContentNotice": "Nội dung rất lớn ({{count}} ký tự). Đang hiển thị bản xem trước thô để giữ giao diện phản hồi nhanh.",
+ "largeContentTitle": "Nội dung lớn được hiển thị dạng thô để tránh treo giao diện",
+ "raw": "Thô",
+ "rawPreview": "Xem trước thô",
+ "renderMarkdown": "Hiển thị markdown",
+ "showAll": "Hiện tất cả",
+ "showMore": "Xem thêm",
+ "showRaw": "Hiện dạng thô",
+ "showingChars": "Đang hiển thị {{shown}} / {{total}} ký tự",
+ "largeContentNotice_few": "Nội dung rất lớn ({{count}} ký tự). Đang hiển thị bản xem trước thô để giữ giao diện phản hồi nhanh.",
+ "largeContentNotice_many": "Nội dung rất lớn ({{count}} ký tự). Đang hiển thị bản xem trước thô để giữ giao diện phản hồi nhanh.",
+ "largeContentNotice_one": "Nội dung rất lớn ({{count}} ký tự). Đang hiển thị bản xem trước thô để giữ giao diện phản hồi nhanh.",
+ "largeContentNotice_other": "Nội dung rất lớn ({{count}} ký tự). Đang hiển thị bản xem trước thô để giữ giao diện phản hồi nhanh."
+ },
+ "terminal": {
+ "checkOutputForDetails": "Xem kết quả terminal ở trên để biết chi tiết",
+ "closingInSeconds": "Đóng sau {{count}} giây...",
+ "closingInSeconds_few": "Đóng sau {{count}} giây...",
+ "closingInSeconds_many": "Đóng sau {{count}} giây...",
+ "closingInSeconds_one": "Đóng sau {{count}} giây...",
+ "closingInSeconds_other": "Đóng sau {{count}} giây...",
+ "completedSuccessfully": "Hoàn tất thành công",
+ "exitCode": "(mã thoát {{code}})",
+ "processFailed": "Tiến trình thất bại",
+ "title": "Terminal"
+ },
+ "tokens": {
+ "accumulatedWithoutDuplication": "Được tích lũy trên toàn bộ phiên mà không trùng lặp",
+ "cacheRead": "Đọc bộ nhớ đệm",
+ "cacheWrite": "Ghi bộ nhớ đệm",
+ "costUsd": "Chi phí (USD)",
+ "inputTokens": "Token đầu vào",
+ "model": "Mô hình",
+ "outputTokens": "Token đầu ra",
+ "phase": "Giai đoạn {{phase}}/{{total}}",
+ "promptInputShare": "{{percent}}% đầu vào prompt",
+ "taskCoordination": "Điều phối tác vụ",
+ "thinkingText": "Suy nghĩ + Văn bản",
+ "toolOutputs": "Kết quả công cụ",
+ "total": "Tổng",
+ "userMessages": "Tin nhắn người dùng",
+ "visibleContext": "Ngữ cảnh hiển thị",
+ "includesClaudeMd": "gồm cả CLAUDE.md ×{{count}}",
+ "claudeMd": "CLAUDE.md",
+ "mentionedFiles": "@tệp",
+ "percentValue": "({{percent}}%)",
+ "approxTokens": "~{{tokens}} token",
+ "approxTokensParenthesized": "(~{{tokens}})"
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Sao chép đội ngũ",
+ "createTeam": "Tạo đội ngũ",
+ "deleteForever": "Xóa vĩnh viễn",
+ "deletePermanently": "Xóa vĩnh viễn",
+ "deleteTeam": "Xóa đội ngũ",
+ "launching": "Đang khởi chạy...",
+ "launchTeam": "Khởi chạy đội ngũ",
+ "relaunchTeam": "Khởi chạy lại đội ngũ",
+ "restore": "Khôi phục",
+ "restoreTeam": "Khôi phục đội ngũ",
+ "retry": "Thử lại",
+ "stopTeam": "Dừng đội ngũ",
+ "stopping": "Đang dừng..."
+ },
+ "status": {
+ "active": "Đang hoạt động",
+ "deleted": "Đã xóa",
+ "launching": "Đang khởi chạy...",
+ "offline": "Ngoại tuyến",
+ "partialFailure": "Khởi chạy thất bại giữa chừng",
+ "partialPending": "Đang chờ khởi tạo",
+ "partialSkipped": "Khởi chạy đã bỏ qua thành viên",
+ "running": "Đang chạy"
+ },
+ "partial": {
+ "pending": "Lần khởi chạy gần nhất vẫn đang đối soát.",
+ "skipped": "Lần khởi chạy gần nhất đã bỏ qua một số thành viên.",
+ "skippedWithCount": "Lần khởi chạy gần nhất đã bỏ qua {{count}}/{{expected}} thành viên.",
+ "skippedWithCount_few": "Lần khởi chạy gần nhất đã bỏ qua {{count}}/{{expected}} thành viên.",
+ "skippedWithCount_many": "Lần khởi chạy gần nhất đã bỏ qua {{count}}/{{expected}} thành viên.",
+ "skippedWithCount_one": "Lần khởi chạy gần nhất đã bỏ qua {{count}}/{{expected}} thành viên.",
+ "skippedWithCount_other": "Lần khởi chạy gần nhất đã bỏ qua {{count}}/{{expected}} thành viên.",
+ "stopped": "Lần khởi chạy gần nhất đã dừng trước khi tất cả thành viên tham gia.",
+ "stoppedWithCount": "Lần khởi chạy gần nhất đã dừng trước khi {{count}}/{{expected}} thành viên tham gia.",
+ "stoppedWithCount_few": "Lần khởi chạy gần nhất đã dừng trước khi {{count}}/{{expected}} thành viên tham gia.",
+ "stoppedWithCount_many": "Lần khởi chạy gần nhất đã dừng trước khi {{count}}/{{expected}} thành viên tham gia.",
+ "stoppedWithCount_one": "Lần khởi chạy gần nhất đã dừng trước khi {{count}}/{{expected}} thành viên tham gia.",
+ "stoppedWithCount_other": "Lần khởi chạy gần nhất đã dừng trước khi {{count}}/{{expected}} thành viên tham gia."
+ },
+ "noDescription": "Không có mô tả",
+ "solo": "Solo",
+ "membersCount": "Thành viên: {{count}}",
+ "membersCount_few": "Thành viên: {{count}}",
+ "membersCount_many": "Thành viên: {{count}}",
+ "membersCount_one": "Thành viên: {{count}}",
+ "membersCount_other": "Thành viên: {{count}}",
+ "all": "Tất cả",
+ "moreCount": "+{{count}} nữa",
+ "moreCount_one": "+{{count}} nữa",
+ "moreCount_other": "+{{count}} nữa",
+ "moreCount_few": "+{{count}} nữa",
+ "moreCount_many": "+{{count}} nữa"
+ },
+ "runtimeProvider": {
+ "defaults": {
+ "scopeDescriptionAllProjects": "Mặc định cho mọi dự án không có ghi đè OpenCode riêng.",
+ "scopeDescriptionProject": "Chỉ ghi đè dự án đã chọn. Các đội ngũ đang chạy không bị thay đổi.",
+ "setAllProjectsDefault": "Đặt mặc định cho tất cả dự án",
+ "setProjectDefault": "Đặt mặc định cho dự án",
+ "validationContext": "Ngữ cảnh xác thực",
+ "projectOverrideContext": "Ngữ cảnh ghi đè dự án",
+ "selectProjectHint": "Chọn một dự án trước khi kiểm thử mô hình cục bộ hoặc lưu mặc định.",
+ "allProjectsHint": "Kiểm thử sử dụng {{project}}. Mặc định áp dụng trừ khi một dự án có ghi đè riêng.",
+ "projectHint": "Việc lưu chỉ ghi đè {{project}}."
+ }
+ },
+ "sessionContext": {
+ "header": {
+ "title": "Ngữ cảnh",
+ "closePanel": "Đóng bảng",
+ "phase": "Giai đoạn:",
+ "current": "Hiện tại",
+ "view": "Chế độ xem:",
+ "category": "Danh mục",
+ "bySize": "Theo kích thước"
+ },
+ "metrics": {
+ "unavailable": "Không khả dụng",
+ "contextUsed": "Ngữ cảnh đã dùng",
+ "promptInput": "Đầu vào prompt",
+ "visibleContext": "Ngữ cảnh hiển thị",
+ "ofContext": "trên ngữ cảnh",
+ "ofPrompt": "trên prompt",
+ "codexTelemetryUnavailable": "Mức sử dụng phía prompt của Codex chưa được runtime telemetry hiện tại cung cấp, nên Đầu vào prompt và Ngữ cảnh đã dùng vẫn không khả dụng thay vì hiển thị số không giả.",
+ "sessionCost": "Chi phí phiên:",
+ "parentPlus": "cha +",
+ "subagents": "subagent",
+ "details": "chi tiết"
+ },
+ "help": {
+ "contextUsed": {
+ "title": "Ngữ cảnh đã dùng",
+ "description": "Đầu vào prompt cộng với token đầu ra hiện đang chiếm dụng cửa sổ ngữ cảnh của mô hình."
+ },
+ "promptInput": {
+ "title": "Đầu vào prompt",
+ "description": "Token được gửi tới mô hình trước khi sinh nội dung. Với Claude, con số này bao gồm `input_tokens + cache_creation_input_tokens + cache_read_input_tokens`."
+ },
+ "visibleContext": {
+ "title": "Ngữ cảnh hiển thị",
+ "description": "Tập con có thể kiểm tra của đầu vào prompt: tệp, CLAUDE.md, kết quả công cụ, tin nhắn người dùng và các nội dung tương tự mà bạn có thể tối ưu trực tiếp."
+ },
+ "availability": {
+ "title": "Khả dụng",
+ "description": "Nếu một runtime nhà cung cấp chưa cung cấp mức sử dụng phía prompt, bảng sẽ hiển thị các chỉ số là không khả dụng thay vì giả vờ chúng bằng không."
+ }
+ },
+ "items": {
+ "turn": "@Lượt {{turn}}",
+ "tokensApprox": "~{{tokens}} token",
+ "toolsCount": "{{count}} công cụ",
+ "toolsCount_one": "{{count}} công cụ",
+ "toolsCount_other": "{{count}} công cụ",
+ "toolsCount_few": "{{count}} công cụ",
+ "toolsCount_many": "{{count}} công cụ",
+ "itemsCount": "{{count}} mục",
+ "itemsCount_one": "{{count}} mục",
+ "itemsCount_other": "{{count}} mục",
+ "itemsCount_few": "{{count}} mục",
+ "itemsCount_many": "{{count}} mục",
+ "missing": "thiếu",
+ "thinking": "Suy nghĩ",
+ "text": "Văn bản"
+ },
+ "empty": "Không phát hiện nội dung ngữ cảnh nào được thêm vào trong phiên này",
+ "view": {
+ "grouped": "Theo nhóm",
+ "flat": "Phẳng"
+ },
+ "claudeMdFiles": "Tệp CLAUDE.md",
+ "mentionedFiles": "Tệp được nhắc đến"
+ },
+ "chat": {
+ "subagent": {
+ "fallbackName": "Subagent",
+ "shutdownConfirmed": "Đã xác nhận tắt",
+ "summary": {
+ "tools": "{{count}} công cụ",
+ "tools_one": "{{count}} công cụ",
+ "tools_other": "{{count}} công cụ",
+ "tools_few": "{{count}} công cụ",
+ "tools_many": "{{count}} công cụ"
+ },
+ "meta": {
+ "type": "Loại",
+ "duration": "Thời lượng",
+ "model": "Mô hình",
+ "id": "ID"
+ },
+ "metrics": {
+ "contextWindow": "Cửa sổ ngữ cảnh",
+ "contextUsage": "Mức sử dụng ngữ cảnh",
+ "mainContext": "Ngữ cảnh chính",
+ "totalOutput": "Tổng đầu ra",
+ "turns": "({{count}} lượt)",
+ "turns_one": "({{count}} lượt)",
+ "turns_other": "({{count}} lượt)",
+ "subagentContext": "Ngữ cảnh subagent",
+ "phase": "Giai đoạn {{phase}}",
+ "turns_few": "({{count}} lượt)",
+ "turns_many": "({{count}} lượt)"
+ },
+ "trace": {
+ "title": "Dấu vết thực thi"
+ }
+ },
+ "user": {
+ "you": "Bạn",
+ "showMore": "Xem thêm",
+ "showLess": "Thu gọn",
+ "backgroundTask": "Tác vụ nền",
+ "exitCode": "thoát {{code}}",
+ "imagesAttached": "Đã đính kèm {{count}} hình ảnh",
+ "imagesAttached_one": "Đã đính kèm {{count}} hình ảnh",
+ "imagesAttached_few": "Đã đính kèm {{count}} hình ảnh",
+ "imagesAttached_many": "Đã đính kèm {{count}} hình ảnh",
+ "imagesAttached_other": "Đã đính kèm {{count}} hình ảnh"
+ },
+ "compact": {
+ "toggle": "Bật/tắt nội dung đã nén",
+ "contextCompacted": "Ngữ cảnh đã nén",
+ "freedTokens": "(đã giải phóng {{tokens}})",
+ "phase": "Giai đoạn {{phase}}",
+ "conversationCompacted": "Cuộc hội thoại đã nén",
+ "summary": "Các tin nhắn trước đó đã được tóm tắt để tiết kiệm ngữ cảnh. Toàn bộ lịch sử hội thoại được giữ lại trong tệp phiên.",
+ "compacted": "Đã nén"
+ },
+ "executionTrace": {
+ "empty": "Không có mục thực thi nào",
+ "nested": "Lồng nhau: {{name}}",
+ "input": "Đầu vào"
+ },
+ "items": {
+ "empty": "Không có mục nào để hiển thị"
+ },
+ "tools": {
+ "teammateSpawned": "Đã tạo thành viên",
+ "shutdownRequested": "Đã yêu cầu tắt ->",
+ "noResultReceived": "Không nhận được kết quả",
+ "duration": "Thời lượng: {{duration}}",
+ "result": "Kết quả",
+ "write": {
+ "createdFile": "Đã tạo tệp",
+ "wroteToFile": "Đã ghi vào tệp"
+ },
+ "skill": {
+ "instructions": "Hướng dẫn kỹ năng",
+ "unknown": "Kỹ năng không xác định"
+ }
+ },
+ "lastOutput": {
+ "requestInterrupted": "Yêu cầu bị người dùng ngắt",
+ "planReadyForApproval": "Kế hoạch sẵn sàng để phê duyệt"
+ },
+ "empty": {
+ "icon": "💬",
+ "title": "Không có lịch sử hội thoại",
+ "description": "Phiên này chưa chứa tin nhắn nào."
+ },
+ "context": {
+ "remainingPercent": "(còn {{percent}}%)",
+ "count": "Ngữ cảnh ({{count}})",
+ "count_one": "Ngữ cảnh ({{count}})",
+ "count_other": "Ngữ cảnh ({{count}})",
+ "count_few": "Ngữ cảnh ({{count}})",
+ "count_many": "Ngữ cảnh ({{count}})"
+ },
+ "scrollToBottom": "Cuộn xuống dưới cùng",
+ "bottom": "Dưới cùng",
+ "teammateMessage": {
+ "message": "Tin nhắn",
+ "resent": "Đã gửi lại",
+ "fallback": "Tin nhắn của thành viên"
+ },
+ "system": {
+ "label": "Hệ thống"
+ }
+ },
+ "tmuxInstaller": {
+ "summaryTitle": "tmux chưa được cài đặt",
+ "detectedOs": "Hệ điều hành được phát hiện: {{os}}",
+ "runtimePath": "Đường dẫn runtime: {{path}}",
+ "phase": "Giai đoạn: {{phase}}",
+ "actions": {
+ "cancel": "Hủy",
+ "manualGuide": "Hướng dẫn thủ công",
+ "hideSetupSteps": "Ẩn các bước thiết lập",
+ "showSetupSteps": "Hiện các bước thiết lập ({{count}})",
+ "showSetupSteps_one": "Hiện bước thiết lập ({{count}})",
+ "showSetupSteps_other": "Hiện các bước thiết lập ({{count}})",
+ "recheck": "Kiểm tra lại",
+ "showSetupSteps_few": "Hiện các bước thiết lập ({{count}})",
+ "showSetupSteps_many": "Hiện các bước thiết lập ({{count}})"
+ },
+ "installerProgress": "Tiến trình trình cài đặt",
+ "input": {
+ "placeholder": "Gửi đầu vào tới trình cài đặt",
+ "send": "Gửi đầu vào",
+ "passwordNotice": "Đầu vào mật khẩu được gửi trực tiếp tới terminal của trình cài đặt và không được thêm vào kết quả nhật ký."
+ },
+ "details": {
+ "show": "Hiện chi tiết",
+ "hide": "Ẩn chi tiết"
+ }
+ },
+ "commandPalette": {
+ "noRecentActivity": "Không có hoạt động gần đây",
+ "sessionsCount": "{{count}} phiên",
+ "sessionsCount_one": "{{count}} phiên",
+ "sessionsCount_other": "{{count}} phiên",
+ "mode": {
+ "searchProjects": "Tìm dự án",
+ "searchAcrossProjects": "Tìm trên tất cả dự án",
+ "searchInProject": "Tìm trong dự án"
+ },
+ "currentProject": "Dự án hiện tại",
+ "global": "Toàn cục",
+ "placeholders": {
+ "projects": "Tìm dự án...",
+ "conversations": "Tìm cuộc hội thoại..."
+ },
+ "empty": {
+ "noProjectsForQuery": "Không tìm thấy dự án nào cho \"{{query}}\"",
+ "noProjects": "Không tìm thấy dự án nào",
+ "minChars": "Nhập ít nhất 2 ký tự để tìm kiếm",
+ "noFastResults": "Không có kết quả nhanh trong các phiên gần đây cho \"{{query}}\"",
+ "noResults": "Không tìm thấy kết quả nào cho \"{{query}}\""
+ },
+ "footer": {
+ "projectsCount": "{{count}} dự án",
+ "projectsCount_one": "{{count}} dự án",
+ "projectsCount_other": "{{count}} dự án",
+ "results": "{{count}} kết quả {{speed}}",
+ "results_one": "{{count}} kết quả {{speed}}",
+ "results_other": "{{count}} kết quả {{speed}}",
+ "resultsAcrossProjects": "{{count}} kết quả {{speed}}trên tất cả dự án",
+ "resultsAcrossProjects_one": "{{count}} kết quả {{speed}}trên tất cả dự án",
+ "resultsAcrossProjects_other": "{{count}} kết quả {{speed}}trên tất cả dự án",
+ "fastPrefix": "nhanh ",
+ "typeToSearch": "Nhập để tìm kiếm",
+ "navigate": "điều hướng",
+ "select": "chọn",
+ "open": "mở",
+ "global": "toàn cục",
+ "close": "đóng",
+ "results_few": "{{count}} kết quả {{speed}}",
+ "results_many": "{{count}} kết quả {{speed}}",
+ "resultsAcrossProjects_few": "{{count}} kết quả {{speed}}trên tất cả dự án",
+ "resultsAcrossProjects_many": "{{count}} kết quả {{speed}}trên tất cả dự án",
+ "projectsCount_few": "{{count}} dự án",
+ "projectsCount_many": "{{count}} dự án",
+ "upDownKey": "↑↓",
+ "escapeKey": "esc"
+ },
+ "sessionsCount_few": "{{count}} phiên",
+ "sessionsCount_many": "{{count}} phiên"
+ },
+ "tasksPanel": {
+ "title": "Tác vụ",
+ "searchPlaceholder": "Tìm tác vụ...",
+ "pinned": "Đã ghim",
+ "groupByLabel": "Nhóm theo:",
+ "groupByAria": "Nhóm theo",
+ "groupModes": {
+ "none": "Không",
+ "project": "Dự án",
+ "time": "Thời gian"
+ },
+ "showArchived": "Hiện mục lưu trữ",
+ "hideArchived": "Ẩn mục lưu trữ",
+ "empty": {
+ "noMatchingTasks": "Không có tác vụ phù hợp",
+ "noTasks": "Không tìm thấy tác vụ nào"
+ },
+ "teamLabel": "Đội ngũ: {{team}}",
+ "showMore": "Xem thêm",
+ "showLess": "Thu gọn",
+ "deleteConfirm": {
+ "title": "Xóa tác vụ",
+ "message": "Chuyển tác vụ #{{taskId}} vào thùng rác?",
+ "confirmLabel": "Xóa",
+ "cancelLabel": "Hủy"
+ },
+ "deleteFailed": {
+ "title": "Không thể xóa tác vụ",
+ "fallbackMessage": "Đã xảy ra lỗi không mong muốn",
+ "confirmLabel": "OK"
+ },
+ "sort": {
+ "byTime": "Theo thời gian",
+ "byUnread": "Theo chưa đọc",
+ "byProject": "Theo dự án",
+ "byTeam": "Theo đội ngũ"
+ }
+ },
+ "toolViewer": {
+ "input": "Đầu vào",
+ "replaceAll": "(thay thế tất cả)",
+ "noInputRecorded": "Không có đầu vào nào được ghi cho lệnh gọi công cụ này.",
+ "agent": {
+ "action": "thao tác",
+ "teammate": "thành viên",
+ "team": "đội ngũ",
+ "runtime": "runtime",
+ "type": "loại",
+ "startupInstructionsHidden": "Hướng dẫn khởi động được ẩn trong giao diện."
+ }
+ },
+ "taskContextMenu": {
+ "unpin": "Bỏ ghim",
+ "pin": "Ghim",
+ "rename": "Đổi tên",
+ "markUnread": "Đánh dấu chưa đọc",
+ "unarchive": "Bỏ lưu trữ",
+ "archive": "Lưu trữ",
+ "deleteTask": "Xóa tác vụ"
+ },
+ "updateDialog": {
+ "closeDialog": "Đóng hộp thoại",
+ "updateAvailable": "Có bản cập nhật",
+ "updateReady": "Bản cập nhật sẵn sàng",
+ "noReleaseNotes": "Không có ghi chú phát hành nào.",
+ "viewOnGitHub": "Xem trên GitHub",
+ "later": "Để sau",
+ "restartNow": "Khởi động lại ngay",
+ "download": "Tải xuống"
+ },
+ "errorBoundary": {
+ "title": "Đã xảy ra lỗi",
+ "description": "Đã xảy ra lỗi không mong muốn trong ứng dụng. Bạn có thể thử tải lại trang hoặc đặt lại trạng thái lỗi.",
+ "componentStack": "Component Stack",
+ "tryAgain": "Thử lại",
+ "copied": "Đã sao chép",
+ "copyErrorDetails": "Sao chép chi tiết lỗi",
+ "reportBugOnGitHub": "Báo lỗi trên GitHub",
+ "reloadApp": "Tải lại ứng dụng",
+ "diagnosticsNotice": "Báo lỗi trên GitHub và thông tin chẩn đoán đã sao chép bao gồm thông báo lỗi, stack trace, phiên bản ứng dụng, tab đang hoạt động, đội ngũ đã chọn, ngữ cảnh tác vụ và chi tiết môi trường."
+ },
+ "runtimeBackendSelector": {
+ "label": "Backend runtime",
+ "resolved": "Đã giải quyết: {{backend}}",
+ "current": "Hiện tại",
+ "recommended": "Khuyến nghị",
+ "unavailable": "Không khả dụng",
+ "cannotSelectYet": "Backend này chưa thể được chọn.",
+ "auto": "Auto",
+ "autoCurrently": "Auto (hiện tại: {{backend}})",
+ "audience": {
+ "internal": "Nội bộ"
+ },
+ "states": {
+ "locked": "Đã khóa",
+ "disabled": "Đã tắt",
+ "authRequired": "Cần xác thực",
+ "runtimeMissing": "Thiếu runtime",
+ "degraded": "Suy giảm",
+ "unavailable": "Không khả dụng"
+ }
+ },
+ "providerModelBadges": {
+ "checking": "Đang kiểm tra",
+ "unavailable": "Không khả dụng",
+ "checkFailed": "Kiểm tra thất bại",
+ "free": "Miễn phí",
+ "freeTooltip": "Được báo cáo bởi metadata của OpenCode. Khả dụng và giới hạn có thể thay đổi."
+ },
+ "taskFilters": {
+ "status": "Trạng thái",
+ "clearAll": "Xóa tất cả",
+ "selectAll": "Chọn tất cả",
+ "team": "Đội ngũ",
+ "allTeams": "Tất cả đội ngũ",
+ "searchTeams": "Tìm đội ngũ...",
+ "noTeamsFound": "Không tìm thấy đội ngũ nào",
+ "project": "Dự án",
+ "allProjects": "Tất cả dự án",
+ "searchProjects": "Tìm dự án...",
+ "noProjects": "Không có dự án",
+ "comments": "Bình luận",
+ "apply": "Áp dụng",
+ "read": {
+ "all": "Tất cả",
+ "unread": "Chưa đọc",
+ "read": "Đã đọc"
+ },
+ "statusOptions": {
+ "todo": "CẦN LÀM",
+ "inProgress": "ĐANG LÀM",
+ "needsFix": "CẦN SỬA",
+ "done": "HOÀN THÀNH",
+ "review": "XEM XÉT",
+ "approved": "ĐÃ DUYỆT"
+ }
+ },
+ "sessionItem": {
+ "totalContext": "Tổng ngữ cảnh: {{tokens}} token",
+ "context": "Ngữ cảnh: {{tokens}}",
+ "phase": "Giai đoạn {{phase}}:",
+ "compactedTo": "(đã nén còn {{tokens}})"
+ },
+ "notifications": {
+ "row": {
+ "team": "đội ngũ",
+ "subagent": "subagent",
+ "markAsRead": "Đánh dấu đã đọc",
+ "delete": "Xóa",
+ "viewInSession": "Xem trong phiên"
+ },
+ "title": "Thông báo",
+ "loading": "Đang tải thông báo...",
+ "actions": {
+ "markFilteredAsRead": "Đánh dấu mục đã lọc là đã đọc",
+ "markAllAsRead": "Đánh dấu tất cả là đã đọc",
+ "markFilteredRead": "Đánh dấu mục đã lọc là đã đọc",
+ "markAllRead": "Đánh dấu tất cả đã đọc",
+ "clearFilteredNotifications": "Xóa các thông báo đã lọc",
+ "clearAllNotifications": "Xóa tất cả thông báo",
+ "clickToConfirm": "Nhấp để xác nhận",
+ "clearFiltered": "Xóa mục đã lọc",
+ "clearAll": "Xóa tất cả"
+ },
+ "counts": {
+ "unreadInFilter": "{{count}} chưa đọc trong bộ lọc",
+ "unreadInFilter_one": "{{count}} chưa đọc trong bộ lọc",
+ "unreadInFilter_few": "{{count}} chưa đọc trong bộ lọc",
+ "unreadInFilter_many": "{{count}} chưa đọc trong bộ lọc",
+ "unreadInFilter_other": "{{count}} chưa đọc trong bộ lọc",
+ "inFilter": "{{count}} trong bộ lọc",
+ "inFilter_one": "{{count}} trong bộ lọc",
+ "inFilter_few": "{{count}} trong bộ lọc",
+ "inFilter_many": "{{count}} trong bộ lọc",
+ "inFilter_other": "{{count}} trong bộ lọc",
+ "unread": "{{count}} chưa đọc",
+ "unread_one": "{{count}} chưa đọc",
+ "unread_few": "{{count}} chưa đọc",
+ "unread_many": "{{count}} chưa đọc",
+ "unread_other": "{{count}} chưa đọc",
+ "total": "{{count}} tổng cộng",
+ "total_one": "{{count}} tổng cộng",
+ "total_few": "{{count}} tổng cộng",
+ "total_many": "{{count}} tổng cộng",
+ "total_other": "{{count}} tổng cộng"
+ },
+ "filters": {
+ "other": "Khác"
+ },
+ "empty": {
+ "noMatching": "Không có thông báo phù hợp",
+ "noNotifications": "Không có thông báo",
+ "tryDifferentFilter": "Hãy thử bộ lọc khác",
+ "allCaughtUp": "Bạn đã xem hết!"
+ }
+ },
+ "updates": {
+ "restartToUpdate": "Khởi động lại để cập nhật",
+ "updateApp": "Cập nhật ứng dụng",
+ "downloadedRestartTooltip": "Đã tải bản cập nhật, khởi động lại để áp dụng",
+ "newVersionAvailable": "Có phiên bản mới",
+ "updatingApp": "Đang cập nhật ứng dụng",
+ "updateReady": "Bản cập nhật sẵn sàng",
+ "restartNow": "Khởi động lại ngay"
+ },
+ "layout": {
+ "github": "GitHub",
+ "discord": "Discord",
+ "expandSidebar": "Mở rộng thanh bên",
+ "collapseSidebarShortcut": "Thu gọn thanh bên ({{shortcut}})",
+ "sidebarView": "Chế độ xem thanh bên",
+ "resizeSidebar": "Thay đổi kích thước thanh bên",
+ "closeTab": "Đóng tab",
+ "openedFromSearch": "Đã mở từ tìm kiếm",
+ "pinnedSession": "Phiên đã ghim",
+ "jumpToSection": "Nhảy đến mục",
+ "newTab": "Tab mới",
+ "newTabDashboard": "Tab mới (Bảng điều khiển)",
+ "refreshSession": "Làm mới phiên",
+ "refreshSessionWithShortcut": "Làm mới phiên ({{shortcut}})",
+ "loadingTab": "Đang tải tab",
+ "menu": {
+ "teams": "Đội ngũ",
+ "settings": "Cài đặt",
+ "extensions": "Tiện ích mở rộng",
+ "search": "Tìm kiếm",
+ "schedules": "Lịch",
+ "docs": "Tài liệu",
+ "exportMarkdown": "Xuất dưới dạng Markdown",
+ "exportJson": "Xuất dưới dạng JSON",
+ "exportPlainText": "Xuất dưới dạng văn bản thuần",
+ "analyzeSession": "Phân tích phiên"
+ },
+ "tabMenu": {
+ "closeTabs": "Đóng {{count}} tab",
+ "closeTabs_one": "Đóng {{count}} tab",
+ "closeTabs_few": "Đóng {{count}} tab",
+ "closeTabs_many": "Đóng {{count}} tab",
+ "closeTabs_other": "Đóng {{count}} tab",
+ "closeTab": "Đóng tab",
+ "closeOtherTabs": "Đóng các tab khác",
+ "splitRight": "Chia sang phải",
+ "splitLeft": "Chia sang trái",
+ "pinToSidebar": "Ghim vào thanh bên",
+ "unpinFromSidebar": "Bỏ ghim khỏi thanh bên",
+ "hideFromSidebar": "Ẩn khỏi thanh bên",
+ "unhideFromSidebar": "Bỏ ẩn khỏi thanh bên",
+ "closeAllTabs": "Đóng tất cả tab"
+ },
+ "sections": {
+ "team": "Đội ngũ",
+ "sessions": "Phiên",
+ "kanban": "Kanban",
+ "claudeLogs": "Nhật ký",
+ "messages": "Tin nhắn"
+ }
+ },
+ "editorFormatting": {
+ "bold": "Đậm",
+ "italic": "Nghiêng",
+ "strike": "Gạch ngang",
+ "code": "Mã"
+ },
+ "diff": {
+ "changed": "Đã thay đổi",
+ "noChangesDetected": "Không phát hiện thay đổi nào"
+ },
+ "codexLogin": {
+ "copyLoginLinkAndCode": "Sao chép liên kết đăng nhập ChatGPT và mã",
+ "copyLoginLink": "Sao chép liên kết đăng nhập ChatGPT",
+ "copyFailed": "Sao chép thất bại",
+ "copyLinkAndCode": "Sao chép liên kết + mã",
+ "copyLink": "Sao chép liên kết",
+ "enterCodeOnLoginPage": "Nhập mã này trên trang đăng nhập ChatGPT"
+ },
+ "window": {
+ "minimize": "Thu nhỏ",
+ "maximize": "Phóng to",
+ "restore": "Khôi phục"
+ },
+ "context": {
+ "local": "Cục bộ",
+ "switchingTo": "Đang chuyển sang {{workspace}}",
+ "loadingWorkspace": "Đang tải không gian làm việc",
+ "switchWorkspace": "Chuyển không gian làm việc"
+ },
+ "repositories": {
+ "noneAvailable": "Không có kho lưu trữ nào",
+ "remove": "Xóa kho lưu trữ"
+ },
+ "export": {
+ "session": "Xuất phiên",
+ "sessionTitle": "Xuất phiên"
+ },
+ "brand": {
+ "claude": "Claude"
+ },
+ "sessionReport": {
+ "noSessionData": "Không có dữ liệu phiên nào",
+ "title": "Báo cáo phiên"
+ },
+ "sessionFilters": {
+ "project": {
+ "selectProject": "Chọn dự án"
+ }
+ },
+ "tasks": {
+ "date": {
+ "updatedPrefix": "cập nhật",
+ "updatedYesterday": "cập nhật hôm qua",
+ "yesterday": "Hôm qua"
+ },
+ "reviewState": {
+ "needsFix": "Cần sửa"
+ },
+ "unassigned": "chưa phân công"
+ }
+}
diff --git a/src/features/localization/renderer/locales/vi/dashboard.json b/src/features/localization/renderer/locales/vi/dashboard.json
new file mode 100644
index 00000000..8a7185cd
--- /dev/null
+++ b/src/features/localization/renderer/locales/vi/dashboard.json
@@ -0,0 +1,197 @@
+{
+ "cliStatus": {
+ "actions": {
+ "alreadyLoggedIn": "Đã đăng nhập rồi?",
+ "becomeSponsor": "Trở thành nhà tài trợ",
+ "cancel": "Hủy",
+ "checkNow": "Kiểm tra ngay",
+ "checkUpdates": "Kiểm tra cập nhật",
+ "checking": "Đang kiểm tra...",
+ "connect": "Kết nối",
+ "extensions": "Tiện ích mở rộng",
+ "login": "Đăng nhập",
+ "manage": "Quản lý",
+ "manageProviders": "Quản lý nhà cung cấp",
+ "plan": "Gói",
+ "recheck": "Kiểm tra lại",
+ "recheckProvider": "Kiểm tra lại {{provider}}",
+ "retry": "Thử lại",
+ "updateTo": "Cập nhật lên v{{version}}",
+ "useCode": "Dùng mã"
+ },
+ "atlas": {
+ "alt": "Atlas Cloud",
+ "description": "Atlas Cloud là một nền tảng suy luận AI đa phương thức cung cấp cho lập trình viên một API AI duy nhất để truy cập các API tạo video, tạo hình ảnh và LLM. Thay vì quản lý nhiều tích hợp nhà cung cấp, bạn chỉ kết nối một lần và có quyền truy cập thống nhất tới hơn 300 mô hình được tuyển chọn trên mọi phương thức. Hãy xem chương trình khuyến mãi gói lập trình mới của Atlas Cloud để truy cập API tiết kiệm hơn.",
+ "openCodeProvider": "Nhà cung cấp OpenCode",
+ "plan": "Gói lập trình Atlas Cloud",
+ "sponsor": "Tài trợ"
+ },
+ "errors": {
+ "checkStatusFailed": "Không thể kiểm tra trạng thái CLI",
+ "installationFailed": "Cài đặt thất bại",
+ "refreshFailed": "Không thể kiểm tra cập nhật. Hãy kiểm tra kết nối mạng và thử lại.",
+ "runtimeUpdatedRefreshFailed": "Đã cập nhật runtime, nhưng không thể làm mới trạng thái nhà cung cấp."
+ },
+ "hints": {
+ "backgroundStatus": "Trạng thái {{runtime}} sẽ được kiểm tra trong nền.",
+ "codexApiKeyFallback": "{{hint}} Có thể dùng API key dự phòng nếu bạn đổi chế độ xác thực.",
+ "codexAutoApiKey": "{{hint}} Chế độ Auto sẽ tiếp tục dùng API key cho đến khi ChatGPT được kết nối.",
+ "codexFinishLogin": "Hoàn tất đăng nhập ChatGPT trong trình duyệt. Nhập mã hiển thị nếu được yêu cầu.",
+ "codexNoActiveLogin": "Giới hạn sử dụng chỉ xuất hiện sau khi Codex CLI thấy một tài khoản ChatGPT đang hoạt động. Hiện tại nó báo không có phiên đăng nhập ChatGPT nào đang hoạt động.",
+ "codexNoActiveManagedSession": "Giới hạn sử dụng chỉ xuất hiện sau khi Codex CLI thấy một tài khoản ChatGPT đang hoạt động. Có dữ liệu tài khoản Codex cục bộ, nhưng hiện chưa có phiên được quản lý nào đang hoạt động được chọn.",
+ "codexReconnectNeeded": "Giới hạn sử dụng chỉ xuất hiện sau khi Codex làm mới phiên ChatGPT đang được chọn. Hiện tại phiên cục bộ cần kết nối lại.",
+ "firstCheckSlow": "Lần kiểm tra đầu tiên có thể mất tới 30 giây",
+ "loginRequiredForTeams": "Việc duyệt phiên và dự án vẫn hoạt động mà không cần đăng nhập. Chỉ cần đăng nhập để chạy đội ngũ agent.",
+ "troubleshootTitle": "Nếu bạn chắc chắn đã đăng nhập, hãy thử các bước sau:"
+ },
+ "installer": {
+ "checkingLatest": "Đang kiểm tra phiên bản mới nhất...",
+ "downloading": "Đang tải {{runtime}}...",
+ "installing": "Đang cài đặt {{runtime}}...",
+ "success": "Đã cài đặt thành công {{runtime}} v{{version}}",
+ "verifying": "Đang xác minh checksum..."
+ },
+ "labels": {
+ "apiKeyRequired": "Cần API key",
+ "comingSoon": "Sắp ra mắt",
+ "collapseProviderDetails": "Thu gọn chi tiết nhà cung cấp",
+ "expandProviderDetails": "Mở rộng chi tiết nhà cung cấp",
+ "generateLink": "Tạo liên kết",
+ "loadingRateLimits": "Đang tải giới hạn tốc độ",
+ "loggedOut": "Nhà cung cấp đã đăng xuất",
+ "loginAuthFailed": "Xác thực thất bại",
+ "loginAuthUpdated": "Đã cập nhật xác thực",
+ "loginComplete": "Đăng nhập hoàn tất",
+ "loginFailed": "Đăng nhập thất bại",
+ "loginTitle": "Đăng nhập",
+ "logoutFailed": "Đăng xuất thất bại",
+ "logoutTitle": "Đăng xuất",
+ "notLoggedIn": "Chưa đăng nhập",
+ "openLogin": "Mở đăng nhập",
+ "providerActionRequired": "Nhà cung cấp cần thao tác",
+ "resets": "đặt lại {{time}}",
+ "runtimeLoginTitle": "Đăng nhập {{runtime}}"
+ },
+ "loading": {
+ "aiProviders": "Đang kiểm tra nhà cung cấp AI...",
+ "claudeCli": "Đang kiểm tra Claude CLI..."
+ },
+ "provider": {
+ "authenticated": "Đã xác thực",
+ "backend": "Backend: {{backend}}",
+ "checkingAuthentication": "Đang kiểm tra xác thực...",
+ "checkingProviders": "Đang kiểm tra nhà cung cấp...",
+ "configuredLocalCount": "{{count}} đã cấu hình cục bộ",
+ "configuredLocalCount_few": "{{count}} đã cấu hình cục bộ",
+ "configuredLocalCount_many": "{{count}} đã cấu hình cục bộ",
+ "configuredLocalCount_one": "{{count}} đã cấu hình cục bộ",
+ "configuredLocalCount_other": "{{count}} đã cấu hình cục bộ",
+ "configuredLocalTitle": "Các tuyến OpenCode cục bộ được nhập từ cấu hình OpenCode của bạn.",
+ "connectedCount": "Nhà cung cấp: đã kết nối {{connected}}/{{denominator}}",
+ "freeModels": "Mô hình miễn phí",
+ "freeModelsTitle": "OpenCode bao gồm các tùy chọn mô hình miễn phí như Big Pickle khi có sẵn trong thiết lập của bạn. OpenRouter qua OpenCode cũng có thể cung cấp mô hình miễn phí, nhưng không phải mọi mô hình OpenCode/OpenRouter đều miễn phí. Khả dụng và giới hạn có thể thay đổi.",
+ "loadingModels": "Đang tải mô hình...",
+ "modelsUnavailable": "Mô hình không khả dụng cho bản dựng runtime này",
+ "runtime": "Runtime: {{runtime}}",
+ "verifiedCount": "{{count}} đã xác minh",
+ "verifiedCount_few": "{{count}} đã xác minh",
+ "verifiedCount_many": "{{count}} đã xác minh",
+ "verifiedCount_one": "{{count}} đã xác minh",
+ "verifiedCount_other": "{{count}} đã xác minh",
+ "verifiedTitle": "Các tuyến OpenCode có bằng chứng thực thi thành công."
+ },
+ "runtime": {
+ "configuredHealthCheckFailed": "{{runtime}} đã cấu hình không vượt qua kiểm tra tình trạng khi khởi động.",
+ "configuredNotFound": "Không tìm thấy {{runtime}} đã cấu hình.",
+ "foundButFailed": "Đã tìm thấy {{runtime}} nhưng không khởi động được",
+ "healthCheckFailedDescription": "Ứng dụng đã tìm thấy {{runtime}} đã cấu hình, nhưng kiểm tra tình trạng khi khởi động thất bại. Hãy sửa chữa hoặc cài đặt lại, rồi thử lại.",
+ "install": "Cài đặt {{runtime}}",
+ "installRequiredDescription": "{{runtime}} là bắt buộc để tạo đội ngũ và quản lý phiên. Hãy cài đặt để bắt đầu.",
+ "isRequired": "{{runtime}} là bắt buộc",
+ "reinstall": "Cài đặt lại {{runtime}}"
+ },
+ "runtimeInstall": {
+ "checking": "Đang kiểm tra",
+ "codexTitle": "Cài đặt Codex CLI vào dữ liệu ứng dụng",
+ "downloading": "Đang tải",
+ "downloadingPercent": "Đang tải {{percent}}%",
+ "install": "Cài đặt",
+ "installing": "Đang cài đặt",
+ "openCodeTitle": "Cài đặt runtime OpenCode vào dữ liệu ứng dụng",
+ "retryInstall": "Thử cài đặt lại"
+ },
+ "troubleshoot": {
+ "again": "lần nữa",
+ "authStatusCommand": "lệnh kiểm tra trạng thái xác thực CLI đã cấu hình của bạn",
+ "checkLoggedIn": "- kiểm tra xem nó có hiển thị \"Logged in\" không",
+ "click": "Nhấp",
+ "loginCommand": "lệnh đăng nhập runtime",
+ "logoutCommand": "lệnh đăng xuất runtime",
+ "openTerminal": "Mở terminal của bạn và chạy:",
+ "reloginPrefix": "Nếu nó báo đã đăng nhập nhưng ứng dụng không nhận ra, hãy thử:",
+ "sameRuntime": "Đảm bảo CLI trong terminal của bạn là cùng runtime mà ứng dụng sử dụng",
+ "statusCacheHint": "- đôi khi trạng thái được lưu vào bộ nhớ đệm trong vài giây",
+ "then": "rồi"
+ },
+ "warnings": {
+ "multipleApiKeysMissing": "Một hoặc nhiều nhà cung cấp được đặt ở chế độ API key, nhưng chưa có API key nào được cấu hình. Mở Quản lý nhà cung cấp để thêm key hoặc đổi chế độ kết nối.",
+ "multipleApiKeysNeedAttention": "Một hoặc nhiều nhà cung cấp được đặt ở chế độ API key và cần được chú ý. Mở Quản lý nhà cung cấp để xem lại các key đã lưu hoặc đổi chế độ kết nối.",
+ "notAuthenticated": "{{runtime}} đã được cài đặt nhưng bạn chưa xác thực. Cần đăng nhập để tạo đội ngũ và sử dụng các tính năng AI.",
+ "singleApiKeyMissing": "{{provider}} được đặt ở chế độ API key, nhưng chưa có API key nào được cấu hình. Mở Quản lý nhà cung cấp để thêm key hoặc đổi chế độ kết nối.",
+ "singleApiKeyNeedsAttention": "{{provider}} được đặt ở chế độ API key, nhưng chưa được kết nối. Mở Quản lý nhà cung cấp để xem lại key đã lưu hoặc đổi chế độ kết nối."
+ }
+ },
+ "recentProjects": {
+ "selectFolderTitle": "Chọn một thư mục dự án",
+ "selectFolder": "Chọn thư mục",
+ "failedToLoad": "Không thể tải dự án",
+ "retry": "Thử lại",
+ "noProjects": "Không tìm thấy dự án nào",
+ "noMatches": "Không có kết quả cho \"{{query}}\"",
+ "noRecentProjects": "Không tìm thấy dự án gần đây nào",
+ "emptyDescription": "Hoạt động Claude và Codex gần đây sẽ xuất hiện ở đây.",
+ "loadMore": "Tải thêm",
+ "card": {
+ "deleted": "Đã xóa",
+ "projectFolderMissing": "Thư mục dự án không còn tồn tại",
+ "taskCounts": {
+ "active": "{{count}} đang hoạt động",
+ "active_one": "{{count}} đang hoạt động",
+ "active_other": "{{count}} đang hoạt động",
+ "active_few": "{{count}} đang hoạt động",
+ "active_many": "{{count}} đang hoạt động",
+ "pending": "{{count}} đang chờ",
+ "pending_one": "{{count}} đang chờ",
+ "pending_other": "{{count}} đang chờ",
+ "pending_few": "{{count}} đang chờ",
+ "pending_many": "{{count}} đang chờ",
+ "done": "{{count}} đã xong",
+ "done_one": "{{count}} đã xong",
+ "done_other": "{{count}} đã xong",
+ "done_few": "{{count}} đã xong",
+ "done_many": "{{count}} đã xong"
+ }
+ },
+ "title": "Dự án gần đây",
+ "searchResults": "Kết quả tìm kiếm",
+ "searchPlaceholder": "Tìm kiếm dự án..."
+ },
+ "actions": {
+ "selectTeam": "Chọn đội ngũ",
+ "or": "hoặc",
+ "clearSearch": "Xóa tìm kiếm"
+ },
+ "windowsAdmin": {
+ "title": "Khuyến nghị chế độ Quản trị viên Windows",
+ "description": "Việc kiểm tra runtime OpenCode có thể hết thời gian chờ khi Agent Teams AI không được nâng quyền. Khởi động lại ứng dụng với Run as administrator trước khi khởi chạy các đội ngũ OpenCode."
+ },
+ "webPreview": {
+ "title": "Mở ứng dụng máy tính để có đầy đủ chức năng",
+ "description": "Phiên bản trình duyệt vẫn đang được phát triển. Các thao tác dự án, tích hợp và cập nhật trạng thái trực tiếp có thể bị hạn chế ở đây. Hãy dùng ứng dụng máy tính để truy cập mọi tính năng một cách đáng tin cậy."
+ },
+ "updateBanner": {
+ "newVersionAvailable": "Có phiên bản mới",
+ "restartNow": "Khởi động lại ngay",
+ "viewDetails": "Xem chi tiết"
+ }
+}
diff --git a/src/features/localization/renderer/locales/vi/errors.json b/src/features/localization/renderer/locales/vi/errors.json
new file mode 100644
index 00000000..de15446f
--- /dev/null
+++ b/src/features/localization/renderer/locales/vi/errors.json
@@ -0,0 +1,3 @@
+{
+ "fallback": "Đã xảy ra lỗi."
+}
diff --git a/src/features/localization/renderer/locales/vi/extensions.json b/src/features/localization/renderer/locales/vi/extensions.json
new file mode 100644
index 00000000..9af97369
--- /dev/null
+++ b/src/features/localization/renderer/locales/vi/extensions.json
@@ -0,0 +1,688 @@
+{
+ "store": {
+ "actions": {
+ "addCustom": "Thêm tùy chỉnh",
+ "openDashboard": "Mở Bảng điều khiển",
+ "refreshCatalog": "Làm mới danh mục"
+ },
+ "capabilities": {
+ "mcp": "MCP: {{status}}",
+ "plugins": "Plugin: {{status}}",
+ "skills": "Kỹ năng: {{status}}"
+ },
+ "desktopOnly": "Chỉ khả dụng trong ứng dụng máy tính.",
+ "provider": {
+ "checkingStatus": "Đang kiểm tra trạng thái nhà cung cấp...",
+ "connected": "Đã kết nối",
+ "loading": "Đang tải...",
+ "needsSetup": "Cần thiết lập",
+ "readyToConfigure": "Sẵn sàng để cấu hình",
+ "unsupported": "Không được hỗ trợ"
+ },
+ "runtime": {
+ "checkingAvailabilityDescription": "Tiện ích mở rộng cần runtime đã cấu hình để quản lý plugin, máy chủ MCP, kỹ năng và kết nối nhà cung cấp.",
+ "checkingAvailabilityTitle": "Đang kiểm tra khả dụng của runtime tiện ích mở rộng",
+ "failedToStartDescription": "Tiện ích mở rộng bị tắt cho đến khi runtime vượt qua kiểm tra tình trạng khi khởi động. Mở Bảng điều khiển để sửa chữa hoặc cài đặt lại.",
+ "failedToStartTitle": "Đã tìm thấy runtime đã cấu hình nhưng không khởi động được",
+ "multimodelCapabilitiesDescription": "Hỗ trợ nhà cung cấp có thể khác nhau theo từng mục. Plugin chỉ hiển thị ở những nơi runtime công khai khai báo hỗ trợ.",
+ "multimodelCapabilitiesTitle": "Khả năng runtime đa mô hình",
+ "needsSignInDescription": "Đã tìm thấy {{runtime}}{{version}}, nhưng việc cài đặt plugin bị tắt cho đến khi bạn đăng nhập từ Bảng điều khiển.",
+ "needsSignInTitle": "{{runtime}} cần đăng nhập",
+ "notAvailableDescription": "Tiện ích mở rộng bị tắt cho đến khi runtime được cài đặt. Mở Bảng điều khiển để cài đặt và thử lại.",
+ "notAvailableTitle": "Runtime đã cấu hình không khả dụng",
+ "readyDescription": "Có thể cài đặt plugin từ trang này{{versionSuffix}}.",
+ "readyTitle": "{{runtime}} đã sẵn sàng",
+ "requiredForMutations": "Runtime đã cấu hình là bắt buộc để cài đặt hoặc gỡ tiện ích mở rộng. Hãy cài đặt hoặc sửa chữa nó từ Bảng điều khiển."
+ },
+ "sessionsRestartWarning": "Các phiên đang chạy sẽ không nhận thay đổi tiện ích mở rộng cho đến khi được khởi động lại.",
+ "tabs": {
+ "apiKeys": {
+ "description": "Khóa bí mật cho các dịch vụ trực tuyến. Thêm vào đây để các plugin, máy chủ và tích hợp có thể kết nối và hoạt động.",
+ "label": "API Key"
+ },
+ "mcpServers": {
+ "description": "Kết nối tới các công cụ và ứng dụng bên ngoài. Chúng cho phép runtime đọc dữ liệu hoặc thực hiện thao tác ngoài phạm vi ứng dụng này.",
+ "label": "Máy chủ MCP"
+ },
+ "plugins": {
+ "description": "Các tiện ích bổ trợ nhỏ cho runtime. Trong chế độ đa mô hình, hiện chúng áp dụng cho các phiên Anthropic khi được hỗ trợ. Hỗ trợ nhà cung cấp rộng hơn đang được phát triển.",
+ "label": "Plugin"
+ },
+ "skills": {
+ "description": "Hướng dẫn có sẵn cho các công việc thường gặp. Chúng giúp runtime xử lý các tác vụ lặp lại một cách nhất quán hơn.",
+ "label": "Kỹ năng"
+ }
+ },
+ "title": "Tiện ích mở rộng"
+ },
+ "pluginsPanel": {
+ "activeFilters": "{{count}} đang áp dụng",
+ "browseByFit": "Duyệt theo mức phù hợp",
+ "capabilities": "Khả năng",
+ "categories": "Danh mục",
+ "clearAllFilters": "Xóa tất cả bộ lọc",
+ "clearFilters": "Xóa bộ lọc",
+ "counts": {
+ "capabilities": "{{count}} khả năng",
+ "categories": "{{count}} danh mục",
+ "plugins": "{{count}} plugin",
+ "capabilities_few": "{{count}} khả năng",
+ "capabilities_many": "{{count}} khả năng",
+ "capabilities_one": "{{count}} khả năng",
+ "capabilities_other": "{{count}} khả năng",
+ "categories_few": "{{count}} danh mục",
+ "categories_many": "{{count}} danh mục",
+ "categories_one": "{{count}} danh mục",
+ "categories_other": "{{count}} danh mục",
+ "plugins_few": "{{count}} plugin",
+ "plugins_many": "{{count}} plugin",
+ "plugins_one": "{{count}} plugin",
+ "plugins_other": "{{count}} plugin"
+ },
+ "empty": {
+ "description": "Hãy quay lại sau để xem các plugin mới",
+ "filteredDescription": "Hãy thử điều chỉnh tiêu chí tìm kiếm hoặc bộ lọc của bạn",
+ "filteredTitle": "Không có plugin nào khớp với bộ lọc của bạn",
+ "title": "Không có plugin nào khả dụng"
+ },
+ "filterDescription": "Thu hẹp danh mục theo phân loại, khả năng hoặc trạng thái đã cài đặt.",
+ "installedOnly": "Chỉ đã cài đặt",
+ "providerSupportNotice": "Hỗ trợ plugin hiện chỉ được đảm bảo cho các phiên Anthropic (Claude). Chúng tôi đang nỗ lực hỗ trợ plugin trên mọi agent.",
+ "resultsUpdateInstantly": "Kết quả cập nhật tức thì khi bạn tinh chỉnh bộ lọc.",
+ "searchPlaceholder": "Tìm plugin...",
+ "selectedCount": "Đã chọn {{count}}",
+ "showing": "Đang hiển thị {{shown}} trên {{total}} plugin",
+ "sort": {
+ "category": "Danh mục",
+ "nameAsc": "Tên A-Z",
+ "nameDesc": "Tên Z-A",
+ "popular": "Phổ biến"
+ },
+ "activeFilters_few": "{{count}} đang áp dụng",
+ "activeFilters_many": "{{count}} đang áp dụng",
+ "activeFilters_one": "{{count}} đang áp dụng",
+ "activeFilters_other": "{{count}} đang áp dụng",
+ "selectedCount_few": "Đã chọn {{count}}",
+ "selectedCount_many": "Đã chọn {{count}}",
+ "selectedCount_one": "Đã chọn {{count}}",
+ "selectedCount_other": "Đã chọn {{count}}"
+ },
+ "customMcp": {
+ "actions": {
+ "add": "Thêm",
+ "cancel": "Hủy",
+ "install": "Cài đặt",
+ "installing": "Đang cài đặt..."
+ },
+ "description": "Thêm máy chủ thủ công mà không cần danh mục.",
+ "errors": {
+ "installFailed": "Cài đặt thất bại",
+ "invalidServerName": "Tên máy chủ không hợp lệ. Hãy dùng ký tự chữ và số, dấu gạch ngang, gạch dưới, dấu chấm.",
+ "npmPackageRequired": "Tên gói npm là bắt buộc",
+ "serverNameRequired": "Tên máy chủ là bắt buộc",
+ "serverUrlRequired": "URL máy chủ là bắt buộc"
+ },
+ "fields": {
+ "environmentVariables": "Biến môi trường",
+ "headers": "Header",
+ "npmPackage": "Gói npm",
+ "scope": "Phạm vi",
+ "serverName": "Tên máy chủ",
+ "serverUrl": "URL máy chủ",
+ "transport": "Phương thức truyền",
+ "transportType": "Loại phương thức truyền",
+ "versionOptional": "Phiên bản (tùy chọn)"
+ },
+ "title": "Thêm máy chủ MCP tùy chỉnh",
+ "transport": {
+ "httpSse": "HTTP / SSE",
+ "stdio": "Stdio (npm)"
+ },
+ "placeholders": {
+ "headerName": "Header-Name",
+ "envVarName": "ENV_VAR_NAME",
+ "serverName": "my-server",
+ "latest": "latest",
+ "value": "value",
+ "serverUrl": "https://api.example.com/mcp"
+ }
+ },
+ "mcpDetail": {
+ "auth": {
+ "remoteMayNeedHeaders": "Các máy chủ MCP từ xa vẫn có thể yêu cầu header tùy chỉnh hoặc API key ngay cả khi registry không mô tả chúng. Nếu kết nối thất bại sau khi cài đặt, hãy xem tài liệu của nhà cung cấp.",
+ "required": "Máy chủ này yêu cầu xác thực"
+ },
+ "diagnostics": {
+ "launchTarget": "Đích khởi chạy"
+ },
+ "form": {
+ "autoFilled": "Tự động điền",
+ "environmentVariables": "Biến môi trường",
+ "headers": "Header",
+ "scope": "Phạm vi",
+ "serverName": "Tên máy chủ"
+ },
+ "install": {
+ "httpTransport": "HTTP: {{transport}}",
+ "manualSetupDescription": "Máy chủ này yêu cầu thiết lập thủ công. Hãy xem kho lưu trữ để biết hướng dẫn cài đặt.",
+ "manualSetupRequired": "Yêu cầu thiết lập thủ công",
+ "npmPackage": "npm: {{package}}",
+ "manage": "Quản lý cài đặt",
+ "install": "Cài đặt máy chủ"
+ },
+ "links": {
+ "glama": "Glama",
+ "repository": "Kho lưu trữ",
+ "website": "Trang web"
+ },
+ "metadata": {
+ "author": "Tác giả",
+ "githubStars": "Sao GitHub",
+ "hosting": "Lưu trữ",
+ "installType": "Loại cài đặt",
+ "license": "Giấy phép",
+ "published": "Đã phát hành",
+ "source": "Nguồn",
+ "updated": "Đã cập nhật",
+ "version": "Phiên bản"
+ },
+ "scope": {
+ "local": "Cục bộ",
+ "project": "Dự án"
+ },
+ "tools": {
+ "title": "Công cụ ({{count}})",
+ "title_few": "Công cụ ({{count}})",
+ "title_many": "Công cụ ({{count}})",
+ "title_one": "Công cụ ({{count}})",
+ "title_other": "Công cụ ({{count}})"
+ },
+ "placeholders": {
+ "serverName": "my-server"
+ }
+ },
+ "skillEditor": {
+ "actions": {
+ "cancel": "Hủy",
+ "createSkill": "Tạo kỹ năng",
+ "preparing": "Đang chuẩn bị...",
+ "reviewAndCreate": "Xem xét và tạo",
+ "reviewAndSave": "Xem xét và lưu",
+ "saveSkill": "Lưu kỹ năng"
+ },
+ "advanced": {
+ "customDescription": "Kỹ năng này dùng định dạng markdown tùy chỉnh, nên hãy chỉnh sửa trực tiếp tại đây.",
+ "customTitle": "2. Trình soạn thảo SKILL.md",
+ "description": "Hầu hết mọi người có thể bỏ qua phần này. Chỉ mở nó nếu bạn muốn kiểm soát trực tiếp tệp markdown thô.",
+ "hide": "Ẩn trình soạn thảo nâng cao",
+ "resetFromStructuredFields": "Đặt lại từ các trường có cấu trúc",
+ "show": "Hiện trình soạn thảo nâng cao",
+ "title": "4. Trình soạn thảo SKILL.md nâng cao"
+ },
+ "basics": {
+ "description": "Đặt cho kỹ năng này một tên rõ ràng, chọn ai có thể dùng, và quyết định nơi lưu trữ nó.",
+ "title": "1. Cơ bản"
+ },
+ "description": {
+ "create": "Mô tả quy trình bằng ngôn ngữ đơn giản, xem lại các tệp sẽ được tạo, rồi lưu lại.",
+ "edit": "Cập nhật kỹ năng này, xem lại các thay đổi tệp kết quả, rồi lưu lại."
+ },
+ "extraFiles": {
+ "addedFiles": "Tệp đã thêm:",
+ "assets": "Tài nguyên",
+ "assetsDescription": "Chỉ thêm ảnh chụp màn hình hoặc phương tiện kèm theo nếu chúng giúp giải thích quy trình.",
+ "description": "Chỉ thêm tài liệu hỗ trợ, script hoặc tài nguyên nếu kỹ năng này thực sự cần.",
+ "lockedForEdits": "Thư mục gốc và thư mục bị khóa chỉnh sửa",
+ "optionalDescription": "Thêm các tệp khởi đầu sẽ được đưa vào quá trình xem xét và ghi cùng với `SKILL.md`.",
+ "optionalTitle": "Tệp tùy chọn",
+ "references": "Tài liệu tham khảo",
+ "referencesDescription": "Thêm tài liệu hỗ trợ, liên kết hoặc ví dụ mà runtime có thể tham khảo.",
+ "scripts": "Script",
+ "scriptsDescription": "Thêm lệnh trợ giúp hoặc ghi chú thiết lập. Hãy xem xét kỹ trước khi chia sẻ kỹ năng này.",
+ "title": "3. Tệp bổ sung"
+ },
+ "fields": {
+ "compatibility": "Tương thích",
+ "description": "Mô tả",
+ "folderName": "Tên thư mục",
+ "folderNameHint": "Chúng tôi tự động gợi ý từ tên kỹ năng để việc xem xét hoạt động ngay lập tức.",
+ "invocation": "Cách nó nên được dùng",
+ "license": "Giấy phép",
+ "name": "Tên kỹ năng",
+ "notes": "Ghi chú bổ sung hoặc rào chắn an toàn",
+ "root": "Nơi lưu trữ",
+ "scope": "Ai có thể dùng",
+ "steps": "Các bước chính cần làm theo",
+ "whenToUse": "Khi nào dùng đến nó"
+ },
+ "instructions": {
+ "description": "Các mục này tạo tệp kỹ năng cho bạn, nên bạn không cần chỉnh sửa markdown trừ khi muốn.",
+ "locked": "Các trường có cấu trúc bị khóa vì bạn đã chuyển sang chỉnh sửa `SKILL.md` thủ công bên dưới.",
+ "title": "2. Hướng dẫn"
+ },
+ "invocation": {
+ "auto": "Có thể được dùng tự động",
+ "manualOnly": "Chỉ khi bạn yêu cầu"
+ },
+ "placeholders": {
+ "description": "Kỹ năng này giúp ích cho việc gì",
+ "name": "Viết tên kỹ năng ngắn gọn",
+ "notes": "Ví dụ: Chỉ ra các bài kiểm thử bị thiếu, hồi quy và những giả định rủi ro.",
+ "steps": "1. Kiểm tra các tệp liên quan.\n2. Giải thích rủi ro chính trước.\n3. Đề xuất bản sửa an toàn nhất.",
+ "whenToUse": "Ví dụ: Dùng cái này khi tác vụ là yêu cầu xem xét mã hoặc phân loại lỗi.",
+ "license": "MIT",
+ "compatibility": "claude-code, cursor"
+ },
+ "review": {
+ "creating": "Đang tạo một kỹ năng",
+ "hint": "Hãy xem lại các thay đổi tệp trước, rồi xác nhận lưu ở bước tiếp theo.",
+ "saving": "Đang lưu kỹ năng này"
+ },
+ "root": {
+ "codexOnly": " - Chỉ Codex",
+ "shared": " - Dùng chung"
+ },
+ "scope": {
+ "project": "Dự án: {{project}}",
+ "projectUnavailable": "Dự án không khả dụng",
+ "user": "Người dùng"
+ },
+ "title": {
+ "create": "Tạo kỹ năng",
+ "edit": "Chỉnh sửa kỹ năng"
+ }
+ },
+ "skillDetail": {
+ "actions": {
+ "cancel": "Hủy",
+ "delete": "Xóa",
+ "deleteSkill": "Xóa kỹ năng",
+ "deleting": "Đang xóa...",
+ "editSkill": "Chỉnh sửa kỹ năng",
+ "openFolder": "Mở thư mục",
+ "openSkillFile": "Mở SKILL.md",
+ "retry": "Thử lại"
+ },
+ "badges": {
+ "assets": "Tài nguyên",
+ "autoUse": "Dùng tự động",
+ "hasScripts": "Có script",
+ "manualUse": "Dùng thủ công",
+ "references": "Tài liệu tham khảo",
+ "storedIn": "Lưu trong {{root}}"
+ },
+ "deleteDialog": {
+ "description": "Xóa kỹ năng này và chuyển vào Thùng rác?",
+ "descriptionWithName": "Xóa \"{{name}}\" và chuyển vào Thùng rác? Bạn có thể khôi phục lại từ Thùng rác sau nếu cần.",
+ "title": "Xóa kỹ năng?"
+ },
+ "descriptionFallback": "Kiểm tra metadata kỹ năng đã phát hiện và hướng dẫn thô.",
+ "errors": {
+ "deleteFailed": "Không thể xóa kỹ năng",
+ "loadFailed": "Không thể tải kỹ năng này."
+ },
+ "files": {
+ "advancedDetails": "Chi tiết tệp nâng cao",
+ "assets": "Tài nguyên",
+ "references": "Tài liệu tham khảo",
+ "scripts": "Script",
+ "storedAt": "Lưu tại"
+ },
+ "includes": {
+ "assets": "tài nguyên",
+ "instructionsOnly": "Chỉ hướng dẫn kỹ năng",
+ "references": "tài liệu tham khảo",
+ "scripts": "script"
+ },
+ "invocation": {
+ "auto": "Chạy tự động khi khớp với tác vụ.",
+ "manualOnly": "Chỉ chạy khi bạn yêu cầu rõ ràng."
+ },
+ "issues": {
+ "bundledScripts": "Kỹ năng này bao gồm các script kèm theo",
+ "reviewCarefully": "Hãy xem xét kỹ kỹ năng này trước khi dùng"
+ },
+ "loading": "Đang tải chi tiết kỹ năng...",
+ "scope": {
+ "personal": "Kỹ năng cá nhân của bạn",
+ "projectOnly": "Chỉ dự án này"
+ },
+ "summary": {
+ "howUsed": "Cách nó được dùng",
+ "included": "Những gì đi kèm",
+ "whoCanUse": "Ai có thể dùng"
+ },
+ "titleFallback": "Chi tiết kỹ năng"
+ },
+ "skillsPanel": {
+ "actions": {
+ "createSkill": "Tạo kỹ năng",
+ "import": "Nhập"
+ },
+ "badges": {
+ "assets": "Tài nguyên",
+ "hasScripts": "Có script",
+ "needsAttention": "Cần chú ý",
+ "references": "Tài liệu tham khảo",
+ "storedIn": "Lưu trong {{root}}"
+ },
+ "configuredRuntime": "runtime đã cấu hình",
+ "counts": {
+ "codexOnly": "{{count}} chỉ Codex",
+ "personal": "{{count}} cá nhân",
+ "project": "{{count}} dự án",
+ "shared": "{{count}} dùng chung",
+ "total": "{{count}} tổng cộng",
+ "codexOnly_few": "{{count}} chỉ Codex",
+ "codexOnly_many": "{{count}} chỉ Codex",
+ "codexOnly_one": "{{count}} chỉ Codex",
+ "codexOnly_other": "{{count}} chỉ Codex",
+ "personal_few": "{{count}} cá nhân",
+ "personal_many": "{{count}} cá nhân",
+ "personal_one": "{{count}} cá nhân",
+ "personal_other": "{{count}} cá nhân",
+ "project_few": "{{count}} dự án",
+ "project_many": "{{count}} dự án",
+ "project_one": "{{count}} dự án",
+ "project_other": "{{count}} dự án",
+ "shared_few": "{{count}} dùng chung",
+ "shared_many": "{{count}} dùng chung",
+ "shared_one": "{{count}} dùng chung",
+ "shared_other": "{{count}} dùng chung",
+ "total_few": "{{count}} tổng cộng",
+ "total_many": "{{count}} tổng cộng",
+ "total_one": "{{count}} tổng cộng",
+ "total_other": "{{count}} tổng cộng"
+ },
+ "empty": {
+ "noMatches": "Không có kỹ năng nào khớp với tìm kiếm của bạn",
+ "noMatchesDescription": "Hãy thử từ khóa tìm kiếm khác hoặc đổi bộ lọc.",
+ "noSkills": "Chưa có kỹ năng nào",
+ "noSkillsDescription": "Tạo kỹ năng đầu tiên để dạy một quy trình lặp lại, hoặc nhập một kỹ năng bạn đã dùng."
+ },
+ "filters": {
+ "all": "Tất cả kỹ năng",
+ "codexOnly": "Chỉ Codex",
+ "hasScripts": "Có script",
+ "needsAttention": "Cần chú ý",
+ "personal": "Cá nhân",
+ "project": "Dự án",
+ "shared": "Dùng chung"
+ },
+ "hero": {
+ "codexAvailable": "Dùng `.codex` khi một kỹ năng nên chỉ dành cho Codex.",
+ "codexUnavailable": "Các kỹ năng `.codex` hiện có vẫn chỉnh sửa được tại đây, nhưng các kỹ năng chỉ-Codex mới cần bật runtime Codex.",
+ "description": "Kỹ năng là các hướng dẫn tái sử dụng giúp runtime xử lý cùng một loại tác vụ một cách nhất quán hơn.",
+ "guidance": "Dùng kỹ năng cá nhân cho những thói quen bạn muốn áp dụng ở mọi nơi. Dùng kỹ năng dự án cho các quy trình chỉ có ý nghĩa trong một codebase.",
+ "personalContext": "Hiện bạn chỉ đang xem các kỹ năng cá nhân của mình.",
+ "projectContext": "Bạn đang xem các kỹ năng cho {{project}} cùng với các kỹ năng cá nhân của bạn.",
+ "title": "Dạy công việc lặp lại"
+ },
+ "invocation": {
+ "auto": "Chạy tự động khi phù hợp",
+ "manualOnly": "Chỉ chạy khi bạn yêu cầu rõ ràng"
+ },
+ "loading": {
+ "loading": "Đang tải kỹ năng...",
+ "refreshing": "Đang làm mới kỹ năng..."
+ },
+ "runtimeAudience": "Các kỹ năng dùng chung trong `.claude`, `.cursor` và `.agents` khả dụng cho {{audience}}. Các kỹ năng lưu trong `.codex` chỉ dành cho Codex khi hỗ trợ Codex khả dụng.",
+ "scope": {
+ "project": "Dự án này",
+ "user": "Cá nhân"
+ },
+ "searchPlaceholder": "Tìm theo tên kỹ năng hoặc công dụng của nó...",
+ "sections": {
+ "personal": {
+ "description": "Thói quen và hướng dẫn bạn muốn có sẵn ở mọi nơi.",
+ "title": "Kỹ năng cá nhân"
+ },
+ "project": {
+ "description": "Các quy trình chỉ có ý nghĩa với codebase này.",
+ "title": "Kỹ năng dự án"
+ }
+ },
+ "sort": {
+ "label": "Sắp xếp kỹ năng",
+ "name": "Tên",
+ "recent": "Gần đây"
+ },
+ "status": {
+ "hasScripts": "Bao gồm script, nên hãy xem xét kỹ",
+ "needsAttention": "Cần chú ý trước khi bạn dựa vào nó",
+ "ready": "Sẵn sàng dùng"
+ },
+ "success": {
+ "created": "Đã tạo kỹ năng thành công.",
+ "imported": "Đã nhập kỹ năng thành công.",
+ "saved": "Đã lưu kỹ năng thành công."
+ }
+ },
+ "pluginDetail": {
+ "unknown": "Không xác định",
+ "metadata": {
+ "author": "Tác giả",
+ "category": "Danh mục",
+ "source": "Nguồn",
+ "version": "Phiên bản",
+ "capabilities": "Khả năng",
+ "installs": "Lượt cài đặt"
+ },
+ "scope": {
+ "label": "Phạm vi:",
+ "options": {
+ "user": "Người dùng (toàn cục)",
+ "project": "Dự án (dùng chung)",
+ "local": "Cục bộ (bị gitignore)"
+ }
+ },
+ "links": {
+ "homepage": "Trang chủ",
+ "contact": "Liên hệ"
+ },
+ "readme": {
+ "loading": "Đang tải README...",
+ "empty": "Không có README."
+ }
+ },
+ "skillImport": {
+ "title": "Nhập kỹ năng",
+ "description": "Chọn một thư mục kỹ năng hiện có, xem lại những gì sẽ được sao chép, rồi nhập nó vào một trong các vị trí kỹ năng được hỗ trợ của bạn.",
+ "steps": {
+ "chooseFolder": {
+ "title": "1. Chọn một thư mục kỹ năng",
+ "description": "Đây phải là một thư mục đã chứa tệp `SKILL.md`, `Skill.md` hoặc `skill.md`."
+ },
+ "location": {
+ "title": "2. Quyết định nơi nó thuộc về",
+ "description": "Kỹ năng cá nhân hoạt động ở mọi nơi. Kỹ năng dự án chỉ hiện cho một codebase."
+ }
+ },
+ "fields": {
+ "sourceFolder": "Thư mục nguồn",
+ "destinationFolderName": "Tên thư mục đích",
+ "audience": "Ai có thể dùng",
+ "storage": "Nơi lưu trữ"
+ },
+ "placeholders": {
+ "defaultFolderName": "Mặc định theo tên thư mục nguồn"
+ },
+ "actions": {
+ "browse": "Duyệt",
+ "cancel": "Hủy",
+ "preparing": "Đang chuẩn bị...",
+ "reviewAndImport": "Xem xét và nhập",
+ "importSkill": "Nhập kỹ năng",
+ "backToImport": "Quay lại nhập"
+ },
+ "scope": {
+ "user": "Người dùng",
+ "project": "Dự án: {{project}}",
+ "projectUnavailable": "Dự án không khả dụng"
+ },
+ "rootSuffix": {
+ "codexOnly": " - Chỉ Codex",
+ "shared": " - Dùng chung"
+ },
+ "reviewHint": "Hãy xem lại các tệp đã sao chép trước, rồi xác nhận nhập ở bước tiếp theo.",
+ "reviewLabel": "Đang nhập kỹ năng này",
+ "errors": {
+ "missingSkillFile": "Thư mục này chưa giống một kỹ năng. Nó cần một tệp SKILL.md, Skill.md hoặc skill.md.",
+ "symbolicLinks": "Thư mục này chứa liên kết tượng trưng. Hãy nhập các tệp thật thay vì liên kết.",
+ "tooManyFiles": "Thư mục kỹ năng này quá lớn để nhập cùng lúc. Hãy xóa bớt tệp thừa và thử lại.",
+ "tooLarge": "Thư mục kỹ năng này quá lớn để nhập an toàn. Hãy cắt giảm các tài nguyên lớn và thử lại.",
+ "invalidFolderName": "Hãy chọn tên thư mục đích đơn giản hơn dùng chữ cái, số, dấu chấm, gạch ngang hoặc gạch dưới.",
+ "mustBeDirectory": "Hãy chọn một thư mục để nhập, không phải một tệp đơn lẻ.",
+ "reviewFailed": "Không thể xem xét các thay đổi khi nhập",
+ "importFailed": "Không thể nhập kỹ năng"
+ }
+ },
+ "mcpPanel": {
+ "sort": {
+ "nameAsc": "Tên A→Z",
+ "nameDesc": "Tên Z→A",
+ "toolsDesc": "Nhiều công cụ nhất"
+ },
+ "health": {
+ "title": "Trạng thái tình trạng MCP",
+ "checkingViaRuntime": "Đang kiểm tra các máy chủ MCP đã cài đặt qua {{runtime}} ...",
+ "lastChecked": "Kiểm tra lần cuối {{time}}",
+ "description": "Chạy chẩn đoán từ trang này để xác minh kết nối MCP đã cài đặt.",
+ "checking": "Đang kiểm tra...",
+ "checkStatus": "Kiểm tra trạng thái"
+ },
+ "diagnostics": {
+ "title": "Chẩn đoán MCP runtime",
+ "serversCount": "{{count}} máy chủ",
+ "serversCount_one": "{{count}} máy chủ",
+ "serversCount_other": "{{count}} máy chủ",
+ "waiting": "Đang chờ kết quả chẩn đoán...",
+ "disableReasons": {
+ "checkingRuntimeStatus": "Đang kiểm tra trạng thái runtime...",
+ "checkingRuntimeAvailability": "Đang kiểm tra khả dụng của runtime...",
+ "runtimeFailedToStart": "Đã tìm thấy runtime đã cấu hình nhưng không khởi động được. Mở Bảng điều khiển để sửa chữa hoặc cài đặt lại.",
+ "runtimeRequired": "Runtime đã cấu hình là bắt buộc. Hãy cài đặt hoặc sửa chữa nó từ Bảng điều khiển."
+ },
+ "serversCount_few": "{{count}} máy chủ",
+ "serversCount_many": "{{count}} máy chủ"
+ },
+ "searchPlaceholder": "Tìm máy chủ MCP...",
+ "runtime": {
+ "notAvailable": "{{runtime}} không khả dụng",
+ "notInstalled": "{{runtime}} chưa được cài đặt",
+ "requiredDescription": "Kiểm tra tình trạng MCP yêu cầu {{runtime}}. Hãy vào Bảng điều khiển để cài đặt hoặc sửa chữa nó."
+ },
+ "empty": {
+ "searchTitle": "Không tìm thấy máy chủ nào",
+ "title": "Không có máy chủ MCP nào khả dụng",
+ "searchDescription": "Hãy thử từ khóa tìm kiếm khác",
+ "description": "Hãy quay lại sau để xem các máy chủ mới"
+ },
+ "loadMore": "Tải thêm"
+ },
+ "apiKeys": {
+ "description": "Lưu trữ API key một cách an toàn để tự động điền khi cài đặt máy chủ MCP.",
+ "storage": {
+ "osKeychain": "Các khóa được mã hóa qua {{backend}} và lưu với quyền truy cập tệp hạn chế (chỉ chủ sở hữu).",
+ "localEncryption": "Keychain hệ điều hành không khả dụng - các khóa được mã hóa cục bộ bằng AES-256. Để bảo vệ mạnh hơn, hãy cài đặt một dịch vụ keyring (gnome-keyring, kwallet)."
+ },
+ "actions": {
+ "add": "Thêm API key",
+ "addFirst": "Thêm khóa đầu tiên của bạn",
+ "edit": "Chỉnh sửa",
+ "copied": "Đã sao chép!",
+ "copyEnvVarName": "Sao chép tên biến môi trường",
+ "confirmDelete": "Nhấp lần nữa để xác nhận",
+ "delete": "Xóa"
+ },
+ "empty": {
+ "title": "Chưa lưu API key nào",
+ "description": "Thêm các khóa để tự động điền biến môi trường khi cài đặt máy chủ MCP."
+ },
+ "form": {
+ "addTitle": "Thêm API key",
+ "editTitle": "Chỉnh sửa API key",
+ "addDescription": "Lưu trữ một API key để tự động điền khi cài đặt máy chủ MCP.",
+ "editDescription": "Cập nhật chi tiết khóa. Bạn phải nhập lại giá trị.",
+ "keychainUnavailable": "Keychain hệ điều hành không khả dụng - các khóa được mã hóa cục bộ bằng AES-256. Hãy cài đặt gnome-keyring để có bảo vệ ở cấp hệ điều hành.",
+ "name": "Tên",
+ "namePlaceholder": "vd: OpenAI Production",
+ "environmentVariableName": "Tên biến môi trường",
+ "envVarPlaceholder": "vd: OPENAI_API_KEY",
+ "value": "Giá trị",
+ "reenterValue": "Nhập lại giá trị khóa",
+ "valuePlaceholder": "sk-...",
+ "scope": "Phạm vi",
+ "userScopeLabel": "Người dùng (toàn cục)",
+ "projectScopeLabel": "Dự án: {{project}}",
+ "projectUnavailable": "Dự án không khả dụng",
+ "boundTo": "Gắn với {{path}}",
+ "cancel": "Hủy",
+ "saving": "Đang lưu...",
+ "update": "Cập nhật",
+ "save": "Lưu",
+ "errors": {
+ "invalidEnvVarFormat": "Dùng chữ cái, chữ số, gạch dưới. Phải bắt đầu bằng chữ cái hoặc gạch dưới.",
+ "nameRequired": "Tên là bắt buộc",
+ "envVarRequired": "Tên biến môi trường là bắt buộc",
+ "invalidEnvVar": "Tên biến môi trường không hợp lệ",
+ "valueRequired": "Giá trị khóa là bắt buộc",
+ "projectScopeRequiresProject": "API key phạm vi dự án yêu cầu một dự án đang hoạt động",
+ "saveFailed": "Lưu thất bại"
+ }
+ }
+ },
+ "skillReview": {
+ "title": "Xem xét các thay đổi kỹ năng",
+ "description": "{{reviewLabel}} xem trước các thay đổi hệ thống tệp trước. Không có gì được ghi cho đến khi bạn xác nhận bên dưới.",
+ "noPreview": "Không có bản xem trước.",
+ "confirmPromptPrefix": "Xem lại phần khác biệt bên dưới, rồi dùng",
+ "confirmPromptSuffix": "để áp dụng các thay đổi này.",
+ "noChanges": "Chưa phát hiện thay đổi tệp nào.",
+ "binaryBadge": "nhị phân",
+ "binaryPreviewHidden": "Bản xem trước tệp nhị phân không được hiển thị. Tệp sẽ được sao chép nguyên trạng.",
+ "summary": {
+ "fileChanges": "{{count}} thay đổi tệp",
+ "fileChanges_one": "{{count}} thay đổi tệp",
+ "fileChanges_other": "{{count}} thay đổi tệp",
+ "new": "{{count}} mới",
+ "updated": "{{count}} đã cập nhật",
+ "removed": "{{count}} đã xóa",
+ "binary": "{{count}} nhị phân",
+ "fileChanges_few": "{{count}} thay đổi tệp",
+ "fileChanges_many": "{{count}} thay đổi tệp"
+ }
+ },
+ "mcpCard": {
+ "toolsCount": "{{count}} công cụ",
+ "toolsCount_one": "{{count}} công cụ",
+ "toolsCount_other": "{{count}} công cụ",
+ "envCount": "{{count}} biến môi trường",
+ "envCount_one": "{{count}} biến môi trường",
+ "envCount_other": "{{count}} biến môi trường",
+ "auth": "Xác thực",
+ "byAuthor": "bởi {{author}}",
+ "hosting": {
+ "remote": "Từ xa",
+ "local": "Cục bộ",
+ "both": "Cả hai"
+ },
+ "toolsCount_few": "{{count}} công cụ",
+ "toolsCount_many": "{{count}} công cụ",
+ "envCount_few": "{{count}} biến môi trường",
+ "envCount_many": "{{count}} biến môi trường",
+ "repository": "Kho lưu trữ",
+ "website": "Trang web"
+ },
+ "installButton": {
+ "installing": "Đang cài đặt...",
+ "removing": "Đang gỡ...",
+ "done": "Xong",
+ "retry": "Thử lại",
+ "uninstall": "Gỡ cài đặt",
+ "install": "Cài đặt"
+ },
+ "pluginCard": {
+ "official": "Chính thức"
+ }
+}
diff --git a/src/features/localization/renderer/locales/vi/report.json b/src/features/localization/renderer/locales/vi/report.json
new file mode 100644
index 00000000..930c9301
--- /dev/null
+++ b/src/features/localization/renderer/locales/vi/report.json
@@ -0,0 +1,217 @@
+{
+ "cost": {
+ "breakdownTitle": "Phân tích chi phí (trên 1M token)",
+ "cacheRead": "Đọc bộ nhớ đệm",
+ "cacheWrite": "Ghi bộ nhớ đệm",
+ "cost": "Chi phí",
+ "input": "Đầu vào",
+ "noCommits": "không có commit",
+ "noLinesChanged": "không có dòng nào thay đổi",
+ "output": "Đầu ra",
+ "parent": "Cha: {{cost}}",
+ "parentCost": "Chi phí cha",
+ "perCommit": "Trên mỗi commit",
+ "perCommitFormula": "tổng chi phí ÷ {{count}} commit",
+ "perCommitFormula_few": "tổng chi phí ÷ {{count}} commit",
+ "perCommitFormula_many": "tổng chi phí ÷ {{count}} commit",
+ "perCommitFormula_one": "tổng chi phí ÷ {{count}} commit",
+ "perCommitFormula_other": "tổng chi phí ÷ {{count}} commit",
+ "perLineChanged": "Trên mỗi dòng thay đổi",
+ "perLineFormula": "tổng chi phí ÷ {{count}} dòng",
+ "perLineFormula_few": "tổng chi phí ÷ {{count}} dòng",
+ "perLineFormula_many": "tổng chi phí ÷ {{count}} dòng",
+ "perLineFormula_one": "tổng chi phí ÷ {{count}} dòng",
+ "perLineFormula_other": "tổng chi phí ÷ {{count}} dòng",
+ "subagent": "Subagent: {{cost}}",
+ "subagentCost": "Chi phí subagent",
+ "title": "Phân tích chi phí",
+ "total": "Tổng"
+ },
+ "insights": {
+ "agent": "agent",
+ "agent_few": "agent",
+ "agent_many": "agent",
+ "agent_one": "agent",
+ "agent_other": "agent",
+ "agentTree": "Cây agent ({{count}} {{unit}})",
+ "background": "(nền)",
+ "bashCommands": "Lệnh Bash",
+ "outOfScopeFindings": "Phát hiện ngoài phạm vi ({{count}})",
+ "questionsAsked": "Câu hỏi đã đặt ({{count}})",
+ "repeated": "Lặp lại",
+ "skillsInvoked": "Kỹ năng đã gọi ({{count}})",
+ "taskDispatches": "Điều phối tác vụ ({{count}})",
+ "tasksCreated": "Tác vụ đã tạo ({{count}})",
+ "teamMode": "Chế độ đội ngũ",
+ "teams": "Đội ngũ: {{teams}}",
+ "title": "Thông tin chi tiết phiên",
+ "total": "Tổng",
+ "unique": "Duy nhất",
+ "skillsInvoked_few": "Kỹ năng đã gọi ({{count}})",
+ "skillsInvoked_many": "Kỹ năng đã gọi ({{count}})",
+ "skillsInvoked_one": "Kỹ năng đã gọi ({{count}})",
+ "skillsInvoked_other": "Kỹ năng đã gọi ({{count}})",
+ "taskDispatches_few": "Điều phối tác vụ ({{count}})",
+ "taskDispatches_many": "Điều phối tác vụ ({{count}})",
+ "taskDispatches_one": "Điều phối tác vụ ({{count}})",
+ "taskDispatches_other": "Điều phối tác vụ ({{count}})",
+ "tasksCreated_few": "Tác vụ đã tạo ({{count}})",
+ "tasksCreated_many": "Tác vụ đã tạo ({{count}})",
+ "tasksCreated_one": "Tác vụ đã tạo ({{count}})",
+ "tasksCreated_other": "Tác vụ đã tạo ({{count}})",
+ "questionsAsked_few": "Câu hỏi đã đặt ({{count}})",
+ "questionsAsked_many": "Câu hỏi đã đặt ({{count}})",
+ "questionsAsked_one": "Câu hỏi đã đặt ({{count}})",
+ "questionsAsked_other": "Câu hỏi đã đặt ({{count}})",
+ "agentTree_few": "Cây agent ({{count}} {{unit}})",
+ "agentTree_many": "Cây agent ({{count}} {{unit}})",
+ "agentTree_one": "Cây agent ({{count}} {{unit}})",
+ "agentTree_other": "Cây agent ({{count}} {{unit}})",
+ "outOfScopeFindings_few": "Phát hiện ngoài phạm vi ({{count}})",
+ "outOfScopeFindings_many": "Phát hiện ngoài phạm vi ({{count}})",
+ "outOfScopeFindings_one": "Phát hiện ngoài phạm vi ({{count}})",
+ "outOfScopeFindings_other": "Phát hiện ngoài phạm vi ({{count}})",
+ "keyTakeaways": "Điểm chính"
+ },
+ "quality": {
+ "chars": "ký tự",
+ "corrections": "Sửa lỗi",
+ "failed": "thất bại",
+ "fileReadRedundancy": "Đọc tệp dư thừa",
+ "firstMessage": "Tin nhắn đầu tiên",
+ "firstRun": "Lần chạy đầu",
+ "frictionRate": "Tỷ lệ ma sát",
+ "lastRun": "Lần chạy cuối",
+ "messagesBeforeWork": "Tin nhắn trước khi làm việc",
+ "passed": "đã qua",
+ "promptQuality": "Chất lượng prompt",
+ "readsPerUniqueFile": "Số lần đọc/Tệp duy nhất",
+ "snapshot": "ảnh chụp",
+ "snapshot_few": "ảnh chụp",
+ "snapshot_many": "ảnh chụp",
+ "snapshot_one": "ảnh chụp",
+ "snapshot_other": "ảnh chụp",
+ "startupOverhead": "Chi phí khởi động",
+ "testProgression": "Tiến trình kiểm thử",
+ "title": "Tín hiệu chất lượng",
+ "tokensBeforeWork": "Token trước khi làm việc",
+ "totalReads": "Tổng số lần đọc",
+ "uniqueFiles": "Tệp duy nhất",
+ "userMessages": "Tin nhắn người dùng",
+ "percentOfTotal": "% trên tổng"
+ },
+ "tokens": {
+ "apiCalls": "Lệnh gọi API",
+ "cacheCreate": "Tạo bộ nhớ đệm",
+ "cacheEfficiency": "Hiệu suất bộ nhớ đệm",
+ "cacheRead": "Đọc bộ nhớ đệm",
+ "cacheReadPct": "% Đọc bộ nhớ đệm",
+ "coldStart": "Khởi động nguội",
+ "cost": "Chi phí",
+ "input": "Đầu vào",
+ "model": "Mô hình",
+ "no": "Không",
+ "output": "Đầu ra",
+ "readWriteRatio": "Tỷ lệ Đọc/Ghi",
+ "title": "Mức sử dụng token",
+ "total": "Tổng",
+ "yes": "Có"
+ },
+ "subagents": {
+ "title": "Subagent",
+ "metrics": {
+ "count": "Số lượng",
+ "totalTokens": "Tổng token",
+ "totalDuration": "Tổng thời lượng",
+ "totalCost": "Tổng chi phí"
+ },
+ "table": {
+ "description": "Mô tả",
+ "type": "Loại",
+ "tokens": "Token",
+ "duration": "Thời lượng",
+ "cost": "Chi phí"
+ }
+ },
+ "overview": {
+ "title": "Tổng quan",
+ "yes": "Có",
+ "no": "Không",
+ "metrics": {
+ "duration": "Thời lượng",
+ "messages": "Tin nhắn",
+ "contextUsage": "Mức sử dụng ngữ cảnh",
+ "compactions": "Số lần nén",
+ "branch": "Nhánh",
+ "subagents": "Subagent",
+ "project": "Dự án",
+ "sessionId": "ID phiên"
+ }
+ },
+ "timeline": {
+ "title": "Dòng thời gian & Hoạt động",
+ "idleAnalysis": "Phân tích thời gian rảnh",
+ "metrics": {
+ "idleGaps": "Khoảng rảnh",
+ "totalIdle": "Tổng thời gian rảnh",
+ "activeTime": "Thời gian hoạt động",
+ "idlePercent": "% rảnh"
+ },
+ "modelSwitches": "Chuyển đổi mô hình ({{count}})",
+ "modelSwitches_one": "Chuyển đổi mô hình ({{count}})",
+ "modelSwitches_other": "Chuyển đổi mô hình ({{count}})",
+ "messageNumber": "tin nhắn #{{number}}",
+ "keyEvents": "Sự kiện chính",
+ "modelSwitches_few": "Chuyển đổi mô hình ({{count}})",
+ "modelSwitches_many": "Chuyển đổi mô hình ({{count}})"
+ },
+ "tools": {
+ "title": "Mức sử dụng công cụ",
+ "summary": "Tổng {{formattedCount}} lệnh gọi trên {{toolCount}} công cụ",
+ "columns": {
+ "tool": "Công cụ",
+ "calls": "Lệnh gọi",
+ "errors": "Lỗi",
+ "successPercent": "% thành công",
+ "health": "Tình trạng"
+ }
+ },
+ "git": {
+ "title": "Hoạt động Git",
+ "commits": "Commit",
+ "pushes": "Push",
+ "linesAdded": "Dòng đã thêm",
+ "linesRemoved": "Dòng đã xóa",
+ "branchesCreated": "Nhánh đã tạo"
+ },
+ "friction": {
+ "title": "Tín hiệu ma sát",
+ "rate": "Tỷ lệ ma sát: {{rate}}%",
+ "correctionsCount": "{{count}} lần sửa lỗi",
+ "correctionsCount_one": "{{count}} lần sửa lỗi",
+ "corrections": "Sửa lỗi",
+ "thrashingSignals": "Tín hiệu giậm chân tại chỗ",
+ "repeatedBashCommands": "Lệnh Bash lặp lại",
+ "reworkedFiles": "Tệp làm lại (3+ lần chỉnh sửa)",
+ "correctionsCount_few": "{{count}} lần sửa lỗi",
+ "correctionsCount_many": "{{count}} lần sửa lỗi",
+ "correctionsCount_other": "{{count}} lần sửa lỗi"
+ },
+ "errors": {
+ "title": "Lỗi",
+ "permissionDenied": "Quyền bị từ chối",
+ "messageIndex": "tin nhắn #{{index}}",
+ "input": "Đầu vào",
+ "error": "Lỗi",
+ "count": "{{count}} lỗi",
+ "count_one": "{{count}} lỗi",
+ "permissionDenialCount": "{{count}} lần từ chối quyền",
+ "permissionDenialCount_one": "{{count}} lần từ chối quyền",
+ "count_few": "{{count}} lỗi",
+ "count_many": "{{count}} lỗi",
+ "count_other": "{{count}} lỗi",
+ "permissionDenialCount_few": "{{count}} lần từ chối quyền",
+ "permissionDenialCount_many": "{{count}} lần từ chối quyền",
+ "permissionDenialCount_other": "{{count}} lần từ chối quyền"
+ }
+}
diff --git a/src/features/localization/renderer/locales/vi/settings.json b/src/features/localization/renderer/locales/vi/settings.json
new file mode 100644
index 00000000..9abfa4d4
--- /dev/null
+++ b/src/features/localization/renderer/locales/vi/settings.json
@@ -0,0 +1,994 @@
+{
+ "tabs": {
+ "advanced": {
+ "description": "Tùy chọn cho người dùng nâng cao: xuất/nhập cấu hình, đặt lại mặc định và chỉnh sửa cấu hình thô.",
+ "label": "Nâng cao"
+ },
+ "general": {
+ "description": "Tùy chọn cốt lõi của ứng dụng như giao diện, ngôn ngữ, mật độ hiển thị và hành vi khi khởi động.",
+ "label": "Chung"
+ },
+ "infoAriaLabel": "{{label}} là gì?",
+ "notifications": {
+ "description": "Kiểm soát khi nào và bằng cách nào bạn được thông báo về hoạt động của agent, việc hoàn thành tác vụ và lỗi.",
+ "label": "Thông báo"
+ }
+ },
+ "view": {
+ "description": "Quản lý các tùy chọn ứng dụng của bạn",
+ "loading": "Đang tải cài đặt...",
+ "title": "Cài đặt"
+ },
+ "runtimeProvider": {
+ "actions": {
+ "cancel": "Hủy",
+ "test": "Kiểm thử"
+ },
+ "defaults": {
+ "allProjects": "Tất cả dự án",
+ "allProjectsHint": "Kiểm thử sử dụng {{project}}. Mặc định áp dụng trừ khi một dự án có ghi đè riêng.",
+ "loadingContexts": "Đang tải ngữ cảnh...",
+ "projectHint": "Việc lưu chỉ ghi đè {{project}}.",
+ "projectOverrideContext": "Ngữ cảnh ghi đè dự án",
+ "scopeDescriptionAllProjects": "Mặc định cho mọi dự án không có ghi đè OpenCode riêng.",
+ "scopeDescriptionProject": "Chỉ ghi đè dự án đã chọn. Các đội ngũ đang chạy không bị thay đổi.",
+ "selectProjectContext": "Chọn ngữ cảnh dự án",
+ "selectProjectHint": "Chọn một dự án trước khi kiểm thử mô hình cục bộ hoặc lưu mặc định.",
+ "selectValidationContext": "Chọn ngữ cảnh xác thực",
+ "setAllProjectsDefault": "Đặt mặc định cho tất cả dự án",
+ "setProjectDefault": "Đặt mặc định cho dự án",
+ "thisProject": "Dự án này",
+ "title": "Mặc định OpenCode",
+ "validationContext": "Ngữ cảnh xác thực"
+ },
+ "diagnostics": {
+ "copied": "Đã sao chép chẩn đoán",
+ "copiedShort": "Đã sao chép",
+ "copy": "Sao chép chẩn đoán",
+ "hints": "Gợi ý",
+ "likelyCause": "Nguyên nhân có thể:",
+ "windowsSymlinkAdminHint": "Windows: chạy Agent Teams AI với quyền Quản trị viên"
+ },
+ "models": {
+ "alreadyDefault": "Đây đã là mặc định OpenCode được chọn.",
+ "empty": "Không tìm thấy mô hình nào.",
+ "emptyFree": "Không tìm thấy mô hình miễn phí nào.",
+ "emptyRecommended": "Không tìm thấy mô hình được khuyến nghị nào.",
+ "emptyRecommendedFree": "Không tìm thấy mô hình miễn phí được khuyến nghị nào.",
+ "freeOnly": "Chỉ miễn phí",
+ "launchableDescription": "Các tuyến đã biết từ cấu hình OpenCode, mô hình miễn phí tích hợp sẵn và mặc định hiện tại. Các tuyến cục bộ cần một lần kiểm thử thành công trước khi sẵn sàng cho việc khởi chạy đội ngũ.",
+ "launchableTitle": "Các tuyến mô hình OpenCode",
+ "loadingRoutes": "Đang tải các tuyến mô hình OpenCode...",
+ "noRoutesMatch": "Không có tuyến mô hình OpenCode nào khớp với \"{{query}}\".",
+ "noneReported": "Chưa có tuyến mô hình OpenCode nào được báo cáo. Hãy cấu hình một tuyến cục bộ trong OpenCode hoặc dùng tab Nhà cung cấp để kiểm tra các nhà cung cấp trong danh mục.",
+ "recommendedOnly": "Chỉ được khuyến nghị",
+ "searchPlaceholder": "Tìm mô hình",
+ "selectProjectBeforeTesting": "Chọn một ngữ cảnh dự án trước khi kiểm thử mô hình.",
+ "selectProjectBeforeTestingDefaults": "Chọn một ngữ cảnh dự án trước khi kiểm thử hoặc lưu mặc định OpenCode.",
+ "testInProgress": "Kiểm thử mô hình đang chạy.",
+ "useInTeamPicker": "Lưu cho bộ chọn đội ngũ",
+ "validationContextRequired": "Chọn một ngữ cảnh xác thực ở trên để bật Kiểm thử và Đặt mặc định. Việc lưu cho bộ chọn đội ngũ chỉ lưu tuyến cho các đội ngũ mới.",
+ "actionsUnavailable": "Các thao tác tạm thời không khả dụng.",
+ "defaultSaveInProgress": "Mặc định OpenCode đang được lưu.",
+ "routeUnavailableAuth": "Nhà cung cấp này yêu cầu xác thực trước khi có thể dùng mô hình này.",
+ "routeUnavailableFailed": "Tuyến mô hình này đã thất bại trong lần kiểm thử thực thi gần nhất.",
+ "routeUnavailableGeneric": "Tuyến mô hình này hiện không thể dùng được.",
+ "routeUnavailableUnknown": "Mô hình này là mặc định OpenCode hiện tại, nhưng nó chưa khả dụng trong danh mục trực tiếp."
+ },
+ "providers": {
+ "catalog": "Danh mục nhà cung cấp OpenCode",
+ "countFallback": "Nhà cung cấp OpenCode",
+ "description": "{{count}}. Các nhà cung cấp đã kết nối và được khuyến nghị hiển thị trước.",
+ "loadMore": "Tải thêm nhà cung cấp",
+ "loading": "Đang tải nhà cung cấp OpenCode",
+ "noMatches": "Không có nhà cung cấp nào khớp với tìm kiếm đó.",
+ "noneReported": "Không có nhà cung cấp OpenCode nào được runtime được quản lý báo cáo.",
+ "recommended": "Được khuyến nghị",
+ "refreshCatalog": "Làm mới danh mục",
+ "searchPlaceholder": "Tìm nhà cung cấp",
+ "description_few": "{{count}}. Các nhà cung cấp đã kết nối và được khuyến nghị hiển thị trước.",
+ "description_many": "{{count}}. Các nhà cung cấp đã kết nối và được khuyến nghị hiển thị trước.",
+ "description_one": "{{count}}. Các nhà cung cấp đã kết nối và được khuyến nghị hiển thị trước.",
+ "description_other": "{{count}}. Các nhà cung cấp đã kết nối và được khuyến nghị hiển thị trước."
+ },
+ "setup": {
+ "loading": "Đang tải thiết lập nhà cung cấp..."
+ },
+ "summary": {
+ "defaultModel": "Mặc định OpenCode: {{model}}",
+ "loading": "Đang tải runtime OpenCode được quản lý, các nhà cung cấp đã kết nối và mặc định mô hình...",
+ "source": "Nguồn: {{source}}",
+ "title": "Runtime OpenCode"
+ },
+ "tabs": {
+ "models": "Mô hình",
+ "providers": "Nhà cung cấp"
+ },
+ "modelRoutes": {
+ "searchPlaceholder": "Tìm tuyến mô hình"
+ },
+ "badges": {
+ "usedInTeamPicker": "Đã lưu cho bộ chọn đội ngũ",
+ "free": "miễn phí",
+ "local": "cục bộ",
+ "configured": "đã cấu hình",
+ "knownRoute": "tuyến đã biết",
+ "connected": "đã kết nối",
+ "verified": "đã xác minh",
+ "needsTest": "cần kiểm thử",
+ "failed": "thất bại",
+ "unknown": "không xác định",
+ "default": "mặc định"
+ },
+ "compatibleEndpoint": {
+ "baseUrlPlaceholder": "http://localhost:1234"
+ }
+ },
+ "general": {
+ "agentLanguage": {
+ "description": "Ngôn ngữ cho giao tiếp của agent",
+ "descriptionWithDetected": "Ngôn ngữ cho giao tiếp của agent (đã phát hiện: {{detected}})",
+ "emptyMessage": "Không tìm thấy ngôn ngữ nào.",
+ "label": "Ngôn ngữ",
+ "searchPlaceholder": "Tìm ngôn ngữ...",
+ "selectPlaceholder": "Chọn ngôn ngữ...",
+ "title": "Ngôn ngữ agent"
+ },
+ "appLanguage": {
+ "description": "Ngôn ngữ cho giao diện ứng dụng.",
+ "label": "Ngôn ngữ",
+ "title": "Ngôn ngữ ứng dụng"
+ },
+ "appearance": {
+ "autoExpandAIGroups": {
+ "description": "Tự động mở rộng từng lượt phản hồi khi mở bản ghi hoặc nhận tin nhắn mới",
+ "label": "Mở rộng phản hồi AI theo mặc định"
+ },
+ "nativeTitleBar": {
+ "description": "Dùng khung cửa sổ hệ thống mặc định thay vì thanh tiêu đề tùy chỉnh",
+ "label": "Dùng thanh tiêu đề gốc",
+ "restartConfirm": {
+ "confirmLabel": "Khởi động lại",
+ "message": "Ứng dụng cần khởi động lại để áp dụng thay đổi thanh tiêu đề. Khởi động lại ngay?",
+ "title": "Cần khởi động lại"
+ }
+ },
+ "theme": {
+ "description": "Chọn giao diện màu ưa thích của bạn",
+ "label": "Giao diện",
+ "options": {
+ "dark": "Tối",
+ "light": "Sáng",
+ "system": "Hệ thống"
+ }
+ },
+ "title": "Giao diện"
+ },
+ "browserAccess": {
+ "serverMode": {
+ "description": "Khởi động một máy chủ HTTP để truy cập giao diện từ trình duyệt hoặc nhúng vào iframe",
+ "label": "Bật chế độ máy chủ"
+ },
+ "title": "Truy cập trình duyệt"
+ },
+ "localClaudeRoot": {
+ "actions": {
+ "selectFolder": "Chọn thư mục",
+ "selectFolderManually": "Chọn thư mục thủ công",
+ "useAutoDetect": "Dùng tự động phát hiện",
+ "useFolder": "Dùng thư mục",
+ "usePath": "Dùng đường dẫn",
+ "useThisPath": "Dùng đường dẫn này",
+ "useWsl": "Đang dùng Linux/WSL?"
+ },
+ "confirm": {
+ "noProjectsDir": {
+ "message": "Thư mục này không chứa thư mục \"projects\". Vẫn tiếp tục?",
+ "title": "Không tìm thấy thư mục projects"
+ },
+ "notClaudeDir": {
+ "message": "Thư mục này có tên \"{{folderName}}\", không phải \".claude\". Vẫn tiếp tục?",
+ "title": "Thư mục đã chọn không phải là .claude"
+ },
+ "noWslPaths": {
+ "message": "Không thể tự động tìm thấy các bản phân phối WSL có dữ liệu Claude. Chọn thư mục thủ công?",
+ "title": "Không tìm thấy đường dẫn Claude WSL nào"
+ },
+ "wslNoProjectsDir": {
+ "message": "\"{{path}}\" không chứa thư mục \"projects\". Vẫn tiếp tục?",
+ "title": "Đường dẫn WSL thiếu thư mục projects"
+ }
+ },
+ "current": {
+ "autoDetected": "Tự động phát hiện: {{path}}",
+ "autoDetectedPath": "Đang dùng đường dẫn tự động phát hiện",
+ "customPath": "Đang dùng đường dẫn tùy chỉnh",
+ "label": "Thư mục gốc cục bộ hiện tại"
+ },
+ "description": "Chọn thư mục cục bộ nào được coi là thư mục gốc dữ liệu Claude của bạn",
+ "errors": {
+ "detectWslFailed": "Không thể phát hiện các đường dẫn gốc Claude WSL",
+ "loadFailed": "Không thể tải cài đặt thư mục gốc Claude cục bộ",
+ "updateFailed": "Không thể cập nhật thư mục gốc Claude"
+ },
+ "title": "Thư mục gốc Claude cục bộ",
+ "wslModal": {
+ "closeAriaLabel": "Đóng hộp thoại đường dẫn WSL",
+ "description": "Các bản phân phối WSL đã phát hiện và các ứng viên thư mục gốc Claude",
+ "noProjectsDir": "Không phát hiện thư mục projects nào",
+ "title": "Chọn thư mục gốc Claude WSL"
+ }
+ },
+ "privacy": {
+ "telemetry": {
+ "description": "Giúp cải thiện ứng dụng bằng cách gửi dữ liệu sự cố và hiệu năng ẩn danh",
+ "label": "Gửi báo cáo sự cố"
+ },
+ "title": "Quyền riêng tư"
+ },
+ "server": {
+ "runningOn": "Đang chạy trên",
+ "standaloneModeDescription": "Đang chạy ở chế độ độc lập. Máy chủ HTTP luôn hoạt động. Thông báo hệ thống không khả dụng - các kích hoạt thông báo chỉ được ghi trong ứng dụng.",
+ "title": "Máy chủ"
+ },
+ "startup": {
+ "launchAtLogin": {
+ "description": "Tự động khởi động ứng dụng khi bạn đăng nhập",
+ "label": "Khởi động khi đăng nhập"
+ },
+ "showDockIcon": {
+ "description": "Hiển thị biểu tượng ứng dụng trên dock (macOS)",
+ "label": "Hiện biểu tượng dock"
+ },
+ "title": "Khởi động"
+ }
+ },
+ "notifications": {
+ "dev": {
+ "descriptionPrefix": "Thông báo có thể không hoạt động ở chế độ phát triển. macOS nhận diện ứng dụng là \"Electron\" (bundle ID",
+ "descriptionSuffix": ") thay vì tên ứng dụng bản chính thức. Kiểm tra System Settings > Notifications > Electron để xác minh quyền.",
+ "title": "Chế độ phát triển"
+ },
+ "ignoredRepositories": {
+ "description": "Thông báo từ các kho lưu trữ này sẽ bị bỏ qua",
+ "empty": "Không có kho lưu trữ nào bị bỏ qua",
+ "selectPlaceholder": "Chọn kho lưu trữ để bỏ qua...",
+ "title": "Kho lưu trữ bị bỏ qua"
+ },
+ "settings": {
+ "enabled": {
+ "description": "Hiển thị thông báo hệ thống cho lỗi và sự kiện",
+ "label": "Bật thông báo hệ thống"
+ },
+ "sound": {
+ "description": "Phát âm thanh khi thông báo xuất hiện",
+ "label": "Phát âm thanh"
+ },
+ "subagentErrors": {
+ "description": "Phát hiện và thông báo về lỗi trong các phiên subagent",
+ "label": "Bao gồm lỗi subagent"
+ },
+ "title": "Cài đặt thông báo"
+ },
+ "snooze": {
+ "clear": "Bỏ tạm dừng",
+ "description": "Tạm dừng thông báo trong thời gian ngắn",
+ "descriptionWithTime": "Tạm dừng đến {{time}}",
+ "label": "Tạm dừng thông báo",
+ "options": {
+ "15": "15 phút",
+ "30": "30 phút",
+ "60": "1 giờ",
+ "120": "2 giờ",
+ "240": "4 giờ",
+ "-1": "Đến ngày mai"
+ },
+ "selectDuration": "Chọn thời lượng..."
+ },
+ "taskCompletion": {
+ "description": "Nhận thông báo gốc của hệ điều hành khi Claude hoàn thành tác vụ - âm thanh, biểu ngữ và huy hiệu trên Dock/thanh tác vụ. Hoạt động trên macOS, Linux và Windows.",
+ "installPlugin": "Cài đặt plugin claude-notifications-go",
+ "title": "Thông báo hoàn thành tác vụ"
+ },
+ "team": {
+ "allTasksCompleted": {
+ "description": "Thông báo khi mọi tác vụ trong một đội ngũ đạt trạng thái hoàn thành",
+ "label": "Tất cả tác vụ đã hoàn thành"
+ },
+ "autoResumeOnRateLimit": {
+ "description": "Khi Claude báo cáo thời gian đặt lại, lên lịch một lời nhắc tiếp theo cho trưởng nhóm sau khi giới hạn được đặt lại",
+ "label": "Tự động tiếp tục sau khi đạt giới hạn tốc độ"
+ },
+ "clarifications": {
+ "description": "Hiển thị thông báo gốc của hệ điều hành khi một tác vụ cần đầu vào của bạn",
+ "label": "Thông báo làm rõ tác vụ"
+ },
+ "crossTeamMessage": {
+ "description": "Thông báo khi có tin nhắn đến từ một đội ngũ khác",
+ "label": "Thông báo tin nhắn giữa các đội ngũ"
+ },
+ "leadInbox": {
+ "description": "Thông báo khi các thành viên gửi tin nhắn cho trưởng nhóm",
+ "label": "Thông báo hộp thư trưởng nhóm"
+ },
+ "statusChange": {
+ "description": "Hiển thị thông báo gốc của hệ điều hành khi trạng thái của một tác vụ thay đổi",
+ "label": "Thông báo thay đổi trạng thái tác vụ",
+ "onlySolo": {
+ "description": "Chỉ thông báo khi đội ngũ không có thành viên nào",
+ "label": "Chỉ ở chế độ Solo"
+ },
+ "statuses": {
+ "description": "Trạng thái đích nào sẽ kích hoạt thông báo",
+ "label": "Thông báo ở các trạng thái này",
+ "options": {
+ "approved": "Đã duyệt",
+ "completed": "Hoàn thành",
+ "deleted": "Đã xóa",
+ "in_progress": "Đã bắt đầu",
+ "needsFix": "Cần sửa",
+ "pending": "Đang chờ",
+ "review": "Xem xét"
+ }
+ }
+ },
+ "taskComments": {
+ "description": "Hiển thị thông báo gốc của hệ điều hành khi các agent bình luận về tác vụ",
+ "label": "Thông báo bình luận tác vụ"
+ },
+ "taskCreated": {
+ "description": "Hiển thị thông báo gốc của hệ điều hành khi một tác vụ mới được tạo",
+ "label": "Thông báo tác vụ được tạo"
+ },
+ "teamLaunched": {
+ "description": "Thông báo khi một đội ngũ khởi chạy xong và sẵn sàng",
+ "label": "Thông báo đội ngũ đã khởi chạy"
+ },
+ "title": "Thông báo đội ngũ",
+ "toolApproval": {
+ "description": "Thông báo khi một công cụ cần bạn phê duyệt (Cho phép/Từ chối) trong khi ứng dụng không được lấy nét",
+ "label": "Thông báo phê duyệt công cụ"
+ },
+ "userInbox": {
+ "description": "Thông báo khi các thành viên gửi tin nhắn cho bạn",
+ "label": "Thông báo hộp thư người dùng"
+ }
+ },
+ "test": {
+ "action": "Gửi thử",
+ "description": "Gửi một thông báo thử để xác minh việc gửi",
+ "failedToSend": "Không thể gửi thông báo thử",
+ "label": "Thông báo thử",
+ "sending": "Đang gửi...",
+ "sent": "Đã gửi!",
+ "unknownError": "Lỗi không xác định"
+ }
+ },
+ "advanced": {
+ "about": {
+ "appIconAlt": "Biểu tượng ứng dụng",
+ "description": "Tập hợp các đội ngũ agent AI làm việc tự chủ song song, giao tiếp giữa các đội ngũ và quản lý tác vụ trên bảng kanban - với tính năng xem xét mã tích hợp, giám sát tiến trình trực tiếp và khả năng quan sát công cụ đầy đủ.",
+ "standalone": "Độc lập",
+ "title": "Giới thiệu",
+ "version": "Phiên bản {{version}}"
+ },
+ "configuration": {
+ "editConfig": "Chỉnh sửa cấu hình",
+ "exportConfig": "Xuất cấu hình",
+ "importConfig": "Nhập cấu hình",
+ "openInEditor": "Mở trong trình soạn thảo",
+ "resetToDefaults": "Đặt lại về mặc định",
+ "title": "Cấu hình"
+ },
+ "updates": {
+ "available": "Có v{{version}}",
+ "check": "Kiểm tra cập nhật",
+ "checking": "Đang kiểm tra...",
+ "ready": "Bản cập nhật sẵn sàng",
+ "unknownVersion": "không xác định",
+ "upToDate": "Đã cập nhật"
+ },
+ "appName": "Agent Teams AI"
+ },
+ "configEditor": {
+ "errors": {
+ "loadFailed": "Không thể tải cấu hình",
+ "saveFailed": "Không thể lưu cấu hình"
+ },
+ "footer": {
+ "autoSave": "Thay đổi tự động lưu sau khi chỉnh sửa",
+ "toClose": "để đóng",
+ "escapeKey": "Esc"
+ },
+ "loading": "Đang tải cấu hình...",
+ "status": {
+ "invalidJson": "JSON không hợp lệ",
+ "saveFailed": "Lưu thất bại",
+ "saved": "Đã lưu",
+ "saving": "Đang lưu..."
+ },
+ "title": "Chỉnh sửa cấu hình"
+ },
+ "notificationTriggers": {
+ "add": {
+ "cancel": "Hủy",
+ "submit": "Thêm kích hoạt",
+ "title": "Thêm kích hoạt tùy chỉnh"
+ },
+ "builtin": {
+ "description": "Các kích hoạt mặc định đi kèm ứng dụng. Bạn có thể bật hoặc tắt chúng và tùy chỉnh các mẫu của chúng.",
+ "title": "Kích hoạt tích hợp sẵn"
+ },
+ "card": {
+ "builtinBadge": "Tích hợp sẵn",
+ "collapseAriaLabel": "Thu gọn",
+ "deleteAriaLabel": "Xóa kích hoạt",
+ "editNameAriaLabel": "Chỉnh sửa tên",
+ "expandAriaLabel": "Mở rộng"
+ },
+ "color": {
+ "customHexTitle": "Màu hex tùy chỉnh",
+ "invalidHex": "Hex không hợp lệ"
+ },
+ "configuration": {
+ "alertIfGreaterThan": "Cảnh báo nếu >",
+ "emptyPatternHint": "Để trống để khớp tất cả nội dung. Dùng cú pháp regex JavaScript.",
+ "errorStatusDescription": "Kích hoạt khi một lệnh thực thi công cụ báo lỗi (is_error: true).",
+ "tokensUnit": "token",
+ "matchPatternPlaceholder": "vd: error|failed|exception"
+ },
+ "custom": {
+ "description": "Tạo các kích hoạt của riêng bạn để được thông báo cho các mẫu hoặc kết quả công cụ cụ thể.",
+ "empty": "Chưa cấu hình kích hoạt tùy chỉnh nào.",
+ "title": "Kích hoạt tùy chỉnh"
+ },
+ "errors": {
+ "invalidRegexPattern": "Mẫu regex không hợp lệ"
+ },
+ "fields": {
+ "contentType": "Loại nội dung",
+ "matchField": "Trường khớp",
+ "matchPattern": "Mẫu khớp (Regex)",
+ "scopeToolName": "Phạm vi / Tên công cụ",
+ "scopeToolNameOptional": "Phạm vi / Tên công cụ (tùy chọn)",
+ "threshold": "Ngưỡng",
+ "tokenType": "Loại token",
+ "triggerNamePlaceholder": "vd: Cảnh báo lỗi build",
+ "triggerNameRequired": "Tên kích hoạt *"
+ },
+ "ignorePatterns": {
+ "hint": "Nhấn Enter để thêm. Thông báo bị bỏ qua nếu bất kỳ mẫu nào khớp.",
+ "placeholder": "Thêm regex bỏ qua...",
+ "removeAriaLabel": "Xóa mẫu bỏ qua",
+ "summary": "Nâng cao: Quy tắc loại trừ",
+ "title": "Mẫu bỏ qua (bỏ qua nếu khớp)"
+ },
+ "options": {
+ "contentTypes": {
+ "text": "Kết quả văn bản",
+ "thinking": "Suy nghĩ",
+ "tool_result": "Kết quả công cụ",
+ "tool_use": "Sử dụng công cụ"
+ },
+ "matchFields": {
+ "args": "Đối số",
+ "command": "Lệnh",
+ "content": "Nội dung",
+ "description": "Mô tả",
+ "file_path": "Đường dẫn tệp",
+ "fullInput": "Đầu vào đầy đủ (JSON)",
+ "glob": "Bộ lọc Glob",
+ "new_string": "Chuỗi mới",
+ "old_string": "Chuỗi cũ",
+ "path": "Đường dẫn",
+ "pattern": "Mẫu",
+ "prompt": "Prompt",
+ "query": "Truy vấn",
+ "skill": "Tên kỹ năng",
+ "subagent_type": "Loại subagent",
+ "text": "Nội dung văn bản",
+ "thinking": "Nội dung suy nghĩ",
+ "url": "URL"
+ },
+ "modes": {
+ "content_match": "Mẫu nội dung",
+ "error_status": "Lỗi thực thi",
+ "token_threshold": "Sử dụng token cao"
+ },
+ "tokenTypes": {
+ "input": "Token đầu vào",
+ "output": "Token đầu ra",
+ "total": "Tổng token"
+ },
+ "toolNames": {
+ "anyTool": "Bất kỳ công cụ nào"
+ }
+ },
+ "preview": {
+ "defaultTestTriggerName": "Kích hoạt thử",
+ "detectedSuffix": "lỗi đã có thể được phát hiện",
+ "more": "...và {{count}} nữa",
+ "more_few": "...và {{count}} nữa",
+ "more_many": "...và {{count}} nữa",
+ "more_one": "...và {{count}} nữa",
+ "more_other": "...và {{count}} nữa",
+ "testTrigger": "Kích hoạt thử",
+ "testing": "Đang thử...",
+ "title": "Xem trước",
+ "truncatedWarning": "Tìm kiếm dừng sớm (hết thời gian chờ hoặc giới hạn số lượng). Số lượng khớp thực tế có thể cao hơn.",
+ "viewSession": "Xem phiên"
+ },
+ "repositoryScope": {
+ "empty": "Chưa chọn kho lưu trữ nào - kích hoạt áp dụng cho tất cả kho lưu trữ",
+ "hint": "Khi các kho lưu trữ được chọn, kích hoạt này chỉ kích hoạt cho lỗi trong những kho lưu trữ đó.",
+ "placeholder": "Chọn kho lưu trữ để thêm...",
+ "summary": "Nâng cao: Phạm vi kho lưu trữ",
+ "title": "Giới hạn ở các kho lưu trữ (chỉ áp dụng cho các kho lưu trữ đã chọn)"
+ },
+ "sections": {
+ "configuration": "Cấu hình",
+ "dotColor": "Màu chấm",
+ "generalInfo": "Thông tin chung",
+ "triggerCondition": "Điều kiện kích hoạt"
+ }
+ },
+ "workspaceProfiles": {
+ "actions": {
+ "addProfile": "Thêm hồ sơ",
+ "cancel": "Hủy",
+ "deleteProfile": "Xóa hồ sơ",
+ "editProfile": "Chỉnh sửa hồ sơ",
+ "save": "Lưu"
+ },
+ "authMethods": {
+ "agent": "SSH Agent",
+ "auto": "Auto (từ cấu hình SSH)",
+ "password": "Mật khẩu",
+ "privateKey": "Khóa riêng tư"
+ },
+ "deleteConfirm": {
+ "confirmLabel": "Xóa",
+ "message": "Bạn có chắc muốn xóa \"{{name}}\"? Thao tác này không thể hoàn tác.",
+ "title": "Xóa hồ sơ"
+ },
+ "description": "Lưu các hồ sơ kết nối SSH để kết nối lại nhanh chóng",
+ "empty": {
+ "description": "Thêm một hồ sơ SSH để kết nối nhanh",
+ "title": "Không có hồ sơ đã lưu"
+ },
+ "form": {
+ "authentication": "Xác thực",
+ "host": "Host",
+ "name": "Tên",
+ "passwordPrompt": "Bạn sẽ được nhắc nhập mật khẩu khi kết nối.",
+ "port": "Cổng",
+ "privateKeyPath": "Đường dẫn khóa riêng tư",
+ "username": "Tên người dùng",
+ "namePlaceholder": "Máy chủ của tôi",
+ "hostPlaceholder": "tên host hoặc IP",
+ "usernamePlaceholder": "user"
+ },
+ "loading": "Đang tải hồ sơ...",
+ "title": "Hồ sơ không gian làm việc"
+ },
+ "connection": {
+ "actions": {
+ "connect": "Kết nối",
+ "connecting": "Đang kết nối...",
+ "disconnect": "Ngắt kết nối",
+ "testConnection": "Kiểm tra kết nối",
+ "testing": "Đang kiểm tra..."
+ },
+ "currentMode": {
+ "description": "Nguồn dữ liệu cho các tệp phiên",
+ "label": "Chế độ hiện tại",
+ "local": "Cục bộ ({{path}})"
+ },
+ "description": "Kết nối tới một máy từ xa để xem các phiên Claude Code đang chạy ở đó",
+ "form": {
+ "authentication": "Xác thực",
+ "host": "Host",
+ "password": "Mật khẩu",
+ "port": "Cổng",
+ "privateKeyPath": "Đường dẫn khóa riêng tư",
+ "username": "Tên người dùng",
+ "hostPlaceholder": "tên host hoặc bí danh cấu hình SSH",
+ "usernamePlaceholder": "user"
+ },
+ "savedProfiles": {
+ "title": "Hồ sơ đã lưu"
+ },
+ "ssh": {
+ "title": "Kết nối SSH"
+ },
+ "status": {
+ "connectedTo": "Đã kết nối tới {{host}}",
+ "remoteSessions": "Đang xem các phiên từ xa qua SSH"
+ },
+ "test": {
+ "failed": "Kết nối thất bại: {{error}}",
+ "success": "Kết nối thành công",
+ "unknownError": "Lỗi không xác định"
+ },
+ "title": "Kết nối từ xa"
+ },
+ "providerRuntime": {
+ "actions": {
+ "cancel": "Hủy",
+ "cancelLogin": "Hủy đăng nhập",
+ "connectChatGpt": "Kết nối ChatGPT",
+ "delete": "Xóa",
+ "disable": "Tắt",
+ "disconnectAccount": "Ngắt kết nối tài khoản",
+ "generateLink": "Tạo liên kết",
+ "openLogin": "Mở đăng nhập",
+ "reconnectAnthropic": "Kết nối lại Anthropic",
+ "refresh": "Làm mới",
+ "replaceKey": "Thay khóa",
+ "saveEndpoint": "Lưu endpoint",
+ "saveKey": "Lưu khóa",
+ "saving": "Đang lưu...",
+ "setApiKey": "Đặt API key",
+ "updateKey": "Cập nhật khóa",
+ "useCode": "Dùng mã"
+ },
+ "apiKey": {
+ "loadingStoredCredentials": "Đang tải thông tin xác thực đã lưu...",
+ "projectScope": "Dự án",
+ "scope": "Phạm vi",
+ "storedIn": "Lưu trong {{backend}}",
+ "userScope": "Người dùng",
+ "storedInApp": "Lưu trong ứng dụng",
+ "providers": {
+ "anthropic": {
+ "name": "Anthropic API Key",
+ "title": "API key",
+ "description": "Dùng API key Anthropic trực tiếp cho truy cập tính phí qua API. Phiên đăng ký Anthropic của bạn vẫn khả dụng khi bạn chuyển về lại.",
+ "placeholder": "sk-ant-..."
+ },
+ "codex": {
+ "name": "Codex API Key",
+ "title": "API key",
+ "description": "Dùng API key OpenAI làm đường xác thực Codex phụ. Nếu bạn chuyển Codex sang chế độ API key, ứng dụng sẽ phản chiếu OPENAI_API_KEY vào CODEX_API_KEY cho các lần khởi chạy gốc.",
+ "placeholder": "sk-proj-..."
+ },
+ "gemini": {
+ "name": "Gemini API Key",
+ "title": "Truy cập API",
+ "description": "Dùng `GEMINI_API_KEY` cho backend API Gemini. CLI SDK và ADC không yêu cầu nó.",
+ "placeholder": "AIza..."
+ }
+ }
+ },
+ "codex": {
+ "account": {
+ "appServer": "App-server: {{state}}",
+ "connected": "Đã kết nối",
+ "description": "Quản lý phiên tài khoản app-server Codex cục bộ cung cấp năng lượng cho các lần khởi chạy gốc dựa trên đăng ký.",
+ "loginInProgress": "Đang đăng nhập",
+ "plan": "Gói: {{plan}}",
+ "reconnectRequired": "Cần kết nối lại",
+ "title": "Tài khoản ChatGPT",
+ "hints": {
+ "autoUsesApiKeyUntilChatgpt": "{{message}} Auto sẽ tiếp tục dùng API key đã phát hiện cho đến khi ChatGPT được kết nối.",
+ "detectedApiKeyNeedsApiMode": "{{message}} API key đã phát hiện chỉ được dùng sau khi bạn chuyển Codex sang chế độ API key.",
+ "localArtifactsNoSession": "Codex CLI hiện báo không có tài khoản ChatGPT nào đang hoạt động. Có dữ liệu tài khoản Codex cục bộ, nhưng chưa có phiên được quản lý nào đang hoạt động được chọn. Giới hạn sử dụng chỉ xuất hiện ở đây sau khi Codex CLI thấy một tài khoản.",
+ "noActiveAccount": "Codex CLI hiện báo không có tài khoản ChatGPT nào đang hoạt động. Giới hạn sử dụng chỉ xuất hiện ở đây sau khi Codex CLI thấy một tài khoản.",
+ "reconnectBeforeUsage": "Codex có một tài khoản ChatGPT được chọn cục bộ, nhưng phiên hiện tại cần kết nối lại trước khi giới hạn sử dụng có thể tải ở đây.",
+ "usageLimitsAfterReport": "Giới hạn sử dụng xuất hiện ở đây sau khi Codex báo cáo chúng cho tài khoản ChatGPT đã kết nối."
+ }
+ },
+ "install": {
+ "checking": "Đang kiểm tra",
+ "downloading": "Đang tải",
+ "installCli": "Cài đặt Codex CLI",
+ "installing": "Đang cài đặt",
+ "retryInstall": "Thử cài đặt lại",
+ "title": "Cài đặt Codex CLI vào dữ liệu ứng dụng"
+ },
+ "rateLimits": {
+ "credits": "Tín dụng",
+ "creditsDescription": "Tín dụng được hiển thị tách biệt với mức sử dụng đăng ký theo cửa sổ và có thể không khả dụng cho các phiên ChatGPT dựa trên gói.",
+ "noSecondaryWindow": "Codex không trả về cửa sổ phụ cho ảnh chụp tài khoản này.",
+ "notReported": "Chưa báo cáo",
+ "primaryReset": "Đặt lại chính",
+ "primaryUsed": "Đã dùng chính",
+ "primaryWindow": "Cửa sổ chính",
+ "remainingLeft": "Còn lại {{value}}",
+ "remainingUnknown": "Còn lại không xác định",
+ "secondaryReset": "Đặt lại phụ",
+ "secondaryUsed": "Đã dùng phụ",
+ "secondaryWindow": "Cửa sổ phụ",
+ "usedQuotaNote": "Các tỷ lệ phần trăm này hiển thị hạn mức đã dùng, không phải hạn mức còn lại.",
+ "weeklyReset": "Đặt lại hàng tuần",
+ "weeklyUsed": "Đã dùng hàng tuần",
+ "weeklyUsedOneWeek": "Đã dùng hàng tuần (1 tuần)",
+ "weeklyWindow": "Cửa sổ hàng tuần",
+ "secondaryFallback": "phụ",
+ "secondaryWindowNote": " Giới hạn hàng tuần được hiển thị tách biệt trong cửa sổ {{window}}.",
+ "usageExplanationGeneric": "Hiển thị hạn mức đã dùng, không phải hạn mức còn lại.",
+ "usageExplanationWindowOnly": "Hiển thị hạn mức đã dùng trong cửa sổ {{window}} hiện tại, không phải hạn mức còn lại.",
+ "usageExplanationWithRemaining": "Đã dùng {{used}} - còn khoảng {{remaining}} trong cửa sổ {{window}} hiện tại."
+ }
+ },
+ "compatibleEndpoint": {
+ "authToken": "Token xác thực",
+ "authTokenMissing": "Token xác thực chưa được cấu hình.",
+ "baseUrl": "URL cơ sở",
+ "description": "Dùng một endpoint runtime cục bộ tương thích Anthropic.",
+ "keepSavedToken": "Để trống để giữ token đã lưu",
+ "title": "Endpoint cục bộ / tương thích",
+ "tokenStatus": "Token {{status}}",
+ "validation": {
+ "baseUrlRequired": "URL cơ sở là bắt buộc",
+ "firstPartyAnthropic": "Dùng Auto, Đăng ký, hoặc API key cho Anthropic chính chủ",
+ "httpRequired": "URL cơ sở phải dùng http:// hoặc https://",
+ "invalidUrl": "URL không hợp lệ",
+ "noCredentials": "URL cơ sở không được chứa thông tin xác thực"
+ },
+ "status": {
+ "endpointDisabledTokenKept": "Endpoint đã bị tắt. Token đã lưu được giữ lại.",
+ "endpointSaved": "Đã lưu endpoint",
+ "endpointSavedTokenMissing": "Đã lưu endpoint. Token xác thực chưa được cấu hình."
+ }
+ },
+ "connection": {
+ "authenticationMethod": "Phương thức xác thực",
+ "descriptions": {
+ "anthropic": "Chọn cách các phiên Anthropic do ứng dụng khởi chạy xác thực.",
+ "codex": "Chọn liệu Codex nên ưu tiên đăng ký ChatGPT của bạn hay một API key khi runtime gốc khởi chạy.",
+ "gemini": "Cấu hình truy cập API tùy chọn. CLI SDK và ADC vẫn được phát hiện tự động.",
+ "opencode": "Xác thực OpenCode và danh sách nhà cung cấp được runtime OpenCode quản lý."
+ },
+ "method": "Phương thức kết nối",
+ "mode": "Chế độ: {{mode}}",
+ "selected": "Đã chọn",
+ "switching": "Đang chuyển đổi...",
+ "title": "Kết nối"
+ },
+ "connectionCards": {
+ "apiKey": {
+ "title": "API key"
+ },
+ "anthropic": {
+ "apiKeyDescription": "Dùng ANTHROPIC_API_KEY và tính phí qua API của Anthropic.",
+ "autoDescription": "Dùng các mặc định của runtime Anthropic và thông tin xác thực cục bộ tốt nhất có sẵn.",
+ "hint": "Auto giữ Anthropic ở cách giải quyết thông tin xác thực cục bộ mặc định của nó.",
+ "subscriptionDescription": "Dùng phiên đăng nhập Anthropic cục bộ và quyền truy cập đăng ký của bạn.",
+ "subscriptionTitle": "Đăng ký Anthropic"
+ },
+ "auto": {
+ "title": "Auto"
+ },
+ "codex": {
+ "apiKeyDescription": "Dùng tính phí OPENAI_API_KEY và CODEX_API_KEY cho các lần khởi chạy Codex gốc.",
+ "autoDescription": "Ưu tiên tài khoản ChatGPT và đăng ký của bạn. Chỉ dùng chế độ API key khi cần.",
+ "chatgptDescription": "Dùng tài khoản ChatGPT đã kết nối và đăng ký Codex của bạn.",
+ "chatgptTitle": "Tài khoản ChatGPT",
+ "hint": "Codex luôn chạy qua runtime gốc. Auto ưu tiên tài khoản ChatGPT của bạn trước khi chuyển sang thông tin xác thực API key."
+ }
+ },
+ "description": "Quản lý cách mỗi nhà cung cấp kết nối và, khi được hỗ trợ, runtime đa mô hình nên dùng backend nào.",
+ "fastMode": {
+ "defaultOff": "Mặc định tắt",
+ "description": "Áp dụng chế độ Claude Code Fast theo mặc định cho các lần khởi chạy đội ngũ Anthropic mới khi mô hình và runtime đã giải quyết cho phép.",
+ "disabledHint": "Các lần khởi chạy Anthropic mới giữ tốc độ bình thường trừ khi một đội ngũ bật rõ ràng chế độ Fast.",
+ "enabledHint": "Các lần khởi chạy Anthropic mới sẽ yêu cầu chế độ Fast theo mặc định khi mô hình đã giải quyết hỗ trợ.",
+ "notExposed": "Runtime Anthropic này không cung cấp chế độ Fast.",
+ "preferFast": "Ưu tiên Fast",
+ "title": "Mặc định chế độ Fast",
+ "unavailableForRuntime": "Chế độ Fast hiện không khả dụng cho runtime Anthropic này."
+ },
+ "alerts": {
+ "anthropicApiKeyMissing": "Đã chọn chế độ API key, nhưng chưa có thông tin xác thực API Anthropic nào khả dụng.",
+ "anthropicStoredKeyAvailable": "Có một API key đã lưu, nhưng các phiên Anthropic do ứng dụng khởi chạy chỉ dùng nó sau khi bạn chuyển sang chế độ API key.",
+ "anthropicSubscriptionMissing": "Đã chọn chế độ đăng ký Anthropic. Hãy đăng nhập với Anthropic để dùng nhà cung cấp này.",
+ "authTokenMissing": "Token xác thực chưa được cấu hình. Nhiều endpoint tương thích Anthropic cục bộ yêu cầu một token không rỗng.",
+ "chatgptLoginPending": "Đang chờ đăng nhập tài khoản ChatGPT hoàn tất...",
+ "chatgptLoginStarting": "Đang bắt đầu đăng nhập ChatGPT...",
+ "codexApiKeyMissing": "Đã chọn chế độ API key, nhưng chưa có thông tin xác thực OPENAI_API_KEY hoặc CODEX_API_KEY nào khả dụng.",
+ "codexLocalArtifactsNoSession": "Codex CLI hiện không có tài khoản ChatGPT nào đang hoạt động. Có dữ liệu tài khoản Codex cục bộ, nhưng chưa có phiên được quản lý nào đang hoạt động được chọn.",
+ "codexNeedsReconnect": "Codex có một tài khoản ChatGPT được chọn cục bộ, nhưng phiên hiện tại cần kết nối lại.",
+ "codexNoChatgptAccount": "Codex CLI hiện không có tài khoản ChatGPT nào đang hoạt động. Kết nối ChatGPT để dùng đăng ký của bạn.",
+ "codexNoCredential": "Chưa có tài khoản ChatGPT hoặc API key nào khả dụng.",
+ "geminiApiUnavailable": "API Gemini hiện không khả dụng. Hãy cấu hình `GEMINI_API_KEY` tại đây hoặc dùng thông tin xác thực Google ADC hợp lệ.",
+ "withApiKeyFallback": "{{message}} Chuyển sang chế độ API key để dùng API key đã phát hiện."
+ },
+ "authModeDescriptions": {
+ "anthropic": {
+ "apiKey": "Buộc các phiên Anthropic do ứng dụng khởi chạy dùng thông tin xác thực API key.",
+ "auto": "Dùng hành vi mặc định của runtime. Các API key đã lưu trong ứng dụng này chỉ được dùng sau khi bạn chuyển sang chế độ API key.",
+ "oauth": "Buộc các phiên Anthropic do ứng dụng khởi chạy dùng phiên đăng ký Anthropic cục bộ."
+ },
+ "codex": {
+ "apiKey": "Buộc các lần khởi chạy Codex gốc dùng tính phí OPENAI_API_KEY / CODEX_API_KEY.",
+ "auto": "Ưu tiên tài khoản ChatGPT của bạn khi nó khả dụng. Chỉ chuyển sang chế độ API key khi cần.",
+ "chatgpt": "Buộc các lần khởi chạy Codex gốc dùng tài khoản ChatGPT đã kết nối và đăng ký của bạn."
+ }
+ },
+ "progress": {
+ "applyingConnectionChanges": "Đang áp dụng các thay đổi kết nối...",
+ "refreshingProviderStatus": "Đang làm mới trạng thái nhà cung cấp...",
+ "savingCompatibleEndpoint": "Đang lưu endpoint tương thích...",
+ "switchingAnthropicSubscription": "Đang chuyển sang đăng ký Anthropic...",
+ "switchingApiKey": "Đang chuyển sang API key...",
+ "switchingApiKeyMode": "Đang chuyển sang chế độ API key...",
+ "switchingAuto": "Đang chuyển sang Auto...",
+ "switchingChatgpt": "Đang chuyển sang chế độ tài khoản ChatGPT..."
+ },
+ "provider": "Nhà cung cấp",
+ "runtime": {
+ "descriptions": {
+ "anthropic": "Anthropic hiện không có bộ chọn backend runtime riêng.",
+ "codex": "Codex giờ chỉ chạy qua đường runtime gốc.",
+ "gemini": "Chọn backend runtime Gemini nào mà chế độ đa mô hình nên dùng.",
+ "opencode": "OpenCode dùng host runtime được quản lý riêng của nó. Bản máy tính hiện chỉ cung cấp trạng thái."
+ },
+ "title": "Runtime",
+ "updating": "Đang cập nhật runtime..."
+ },
+ "runtimeSummary": "Runtime: {{runtime}}",
+ "status": {
+ "configured": "đã cấu hình",
+ "enabled": "Đã bật",
+ "notConfigured": "Chưa cấu hình",
+ "notSet": "chưa đặt",
+ "off": "Tắt",
+ "unknown": "Không xác định"
+ },
+ "title": "Cài đặt nhà cung cấp",
+ "usage": {
+ "apiKey": "Đang dùng API key",
+ "apiKeyRequired": "Cần API key",
+ "compatibleEndpoint": "Đang dùng endpoint tương thích",
+ "notConnected": "Chưa kết nối",
+ "usingMethod": "Đang dùng {{method}}"
+ },
+ "errors": {
+ "apiKeyDeletedRefreshFailed": "Đã xóa API key, nhưng không thể làm mới trạng thái nhà cung cấp.",
+ "apiKeySavedRefreshFailed": "Đã lưu API key, nhưng không thể làm mới trạng thái nhà cung cấp.",
+ "connectionUpdatedRefreshFailed": "Đã cập nhật kết nối, nhưng không thể làm mới trạng thái nhà cung cấp.",
+ "deleteApiKey": "Không thể xóa API key",
+ "disableEndpoint": "Không thể tắt endpoint",
+ "endpointDisabledRefreshFailed": "Đã tắt endpoint, nhưng không thể làm mới trạng thái nhà cung cấp.",
+ "endpointSavedRefreshFailed": "Đã lưu endpoint, nhưng không thể làm mới trạng thái nhà cung cấp.",
+ "refreshCodexAccount": "Không thể làm mới tài khoản Codex",
+ "saveApiKey": "Không thể lưu API key",
+ "saveEndpoint": "Không thể lưu endpoint",
+ "updateAnthropicFastMode": "Không thể cập nhật chế độ Fast của Anthropic",
+ "updateConnection": "Không thể cập nhật kết nối",
+ "updateRuntimeBackend": "Không thể cập nhật backend runtime",
+ "apiKeyRequired": "API key là bắt buộc"
+ },
+ "connectionUi": {
+ "authMode": {
+ "auto": "Auto",
+ "oauth": "Đăng ký / OAuth",
+ "chatgpt": "Tài khoản ChatGPT",
+ "apiKey": "API key",
+ "anthropicSubscription": "Đăng ký Anthropic"
+ },
+ "authMethod": {
+ "apiKey": "API key",
+ "apiKeyHelper": "Trình trợ giúp API key",
+ "oauth": "OAuth",
+ "claudeSubscription": "Đăng ký Claude",
+ "geminiCli": "Gemini CLI",
+ "googleAccount": "Tài khoản Google",
+ "serviceAccount": "tài khoản dịch vụ"
+ },
+ "runtime": {
+ "codexNative": "Codex gốc",
+ "currentRuntime": "Runtime hiện tại",
+ "selectedRuntime": "Runtime đã chọn",
+ "summary": "{{prefix}}: {{runtime}}"
+ },
+ "status": {
+ "checking": "Đang kiểm tra...",
+ "modelsAvailable": "Có mô hình khả dụng",
+ "checked": "Đã kiểm tra",
+ "providerActivity": "Hoạt động nhà cung cấp",
+ "notConnected": "Chưa kết nối",
+ "startingChatGptLogin": "Đang bắt đầu đăng nhập ChatGPT...",
+ "waitingForChatGptLogin": "Đang chờ đăng nhập tài khoản ChatGPT...",
+ "chatGptVerificationDegraded": "Đã phát hiện tài khoản ChatGPT - việc xác minh tài khoản hiện đang suy giảm.",
+ "chatGptAccountReady": "Tài khoản ChatGPT sẵn sàng",
+ "apiKeyReady": "API key sẵn sàng",
+ "codexLocalAccountNeedsReconnect": "Codex có một tài khoản ChatGPT được chọn cục bộ, nhưng phiên hiện tại cần kết nối lại.",
+ "codexNoActiveManagedSession": "Codex CLI báo không có phiên đăng nhập ChatGPT nào đang hoạt động. Có dữ liệu tài khoản Codex cục bộ, nhưng chưa có phiên được quản lý nào đang hoạt động được chọn.",
+ "codexNoActiveChatGptLogin": "Codex CLI báo không có phiên đăng nhập ChatGPT nào đang hoạt động",
+ "connectChatGptForSubscription": "Kết nối một tài khoản ChatGPT để dùng đăng ký Codex của bạn.",
+ "codexNativeReady": "Codex gốc sẵn sàng",
+ "codexNativeUnavailable": "Codex gốc không khả dụng",
+ "unavailableInCurrentRuntime": "Không khả dụng trong runtime hiện tại",
+ "connectedViaApiKey": "Đã kết nối qua API key",
+ "apiKeyConfiguredNotVerified": "API key đã được cấu hình, nhưng chưa được xác minh",
+ "apiKeyModeMissingCredential": "Đã chọn chế độ API key, nhưng chưa có API key nào được cấu hình",
+ "connectedVia": "Đã kết nối qua {{method}}",
+ "unableToVerify": "Không thể xác minh"
+ },
+ "mode": {
+ "selectedAuth": "Xác thực đã chọn: {{authMode}}",
+ "preferredAuth": "Xác thực ưu tiên: {{authMode}}"
+ },
+ "credential": {
+ "apiKeyConfigured": "API key đã được cấu hình",
+ "savedApiKeyAvailable": "API key đã lưu có sẵn trong Quản lý",
+ "apiKeyAlsoConfigured": "API key cũng được cấu hình trong Quản lý",
+ "apiKeyConfiguredInManage": "API key được cấu hình trong Quản lý",
+ "apiKeyFallbackInManage": "API key cũng có sẵn trong Quản lý làm phương án dự phòng",
+ "availableAsFallback": "{{summary}} - có sẵn làm phương án dự phòng",
+ "savedApiKeyAvailableIfSwitch": "API key đã lưu có sẵn trong Quản lý nếu bạn chuyển sang chế độ API key",
+ "availableIfSwitch": "{{summary}} - có sẵn nếu bạn chuyển sang chế độ API key",
+ "autoWillUseUntilChatGpt": "{{summary}} - Auto sẽ dùng cái này cho đến khi ChatGPT được kết nối"
+ },
+ "actions": {
+ "connect": "Kết nối",
+ "connectAnthropic": "Kết nối Anthropic",
+ "connectChatGpt": "Kết nối ChatGPT",
+ "disconnect": "Ngắt kết nối",
+ "openLogin": "Mở đăng nhập"
+ },
+ "disconnect": {
+ "anthropicTitle": "Ngắt kết nối đăng ký Anthropic?",
+ "anthropic": "Thao tác này xóa phiên đăng ký Anthropic cục bộ khỏi runtime Claude CLI.",
+ "anthropicWithApiKey": "Thao tác này xóa phiên đăng ký Anthropic cục bộ khỏi runtime Claude CLI. Các API key đã lưu trong Quản lý vẫn khả dụng.",
+ "geminiTitle": "Ngắt kết nối Gemini CLI?",
+ "gemini": "Thao tác này xóa metadata phiên Gemini CLI cục bộ. Thông tin xác thực ADC bên ngoài và các API key đã lưu không bị xóa."
+ }
+ }
+ },
+ "cliRuntime": {
+ "actions": {
+ "checkForUpdates": "Kiểm tra cập nhật",
+ "checking": "Đang kiểm tra...",
+ "extensions": "Tiện ích mở rộng",
+ "installRuntime": "Cài đặt {{runtime}}",
+ "manage": "Quản lý",
+ "recheck": "Kiểm tra lại",
+ "reinstallRuntime": "Cài đặt lại {{runtime}}",
+ "retry": "Thử lại",
+ "update": "Cập nhật"
+ },
+ "installer": {
+ "checkingLatest": "Đang kiểm tra phiên bản mới nhất...",
+ "downloading": "Đang tải...",
+ "failed": "Cài đặt thất bại",
+ "installed": "Đã cài đặt v{{version}}",
+ "installing": "Đang cài đặt...",
+ "latest": "latest",
+ "verifying": "Đang xác minh checksum..."
+ },
+ "labels": {
+ "multimodel": "Đa mô hình"
+ },
+ "loading": {
+ "aiProviders": "Đang kiểm tra nhà cung cấp AI...",
+ "claudeCli": "Đang kiểm tra Claude CLI..."
+ },
+ "provider": {
+ "backend": "Backend: {{backend}}",
+ "loadingModels": "Đang tải mô hình...",
+ "modelsUnavailable": "Mô hình không khả dụng cho bản dựng runtime này",
+ "runtime": "Runtime: {{runtime}}"
+ },
+ "providerTerminal": {
+ "authFailed": "Xác thực thất bại",
+ "authUpdated": "Đã cập nhật xác thực",
+ "loggedOut": "Nhà cung cấp đã đăng xuất",
+ "login": "Đăng nhập",
+ "logout": "Đăng xuất",
+ "logoutFailed": "Đăng xuất thất bại"
+ },
+ "status": {
+ "configuredNotFound": "Không tìm thấy {{runtime}} đã cấu hình.",
+ "foundButFailed": "Đã tìm thấy {{runtime}} nhưng không khởi động được",
+ "healthCheckFailed": "{{runtime}} đã cấu hình không vượt qua kiểm tra tình trạng khi khởi động.",
+ "notInstalled": "{{runtime}} chưa được cài đặt"
+ },
+ "title": "Runtime CLI"
+ },
+ "cliStatus": {
+ "versionUpgrade": "v{{current}} -> v{{latest}}"
+ }
+}
diff --git a/src/features/localization/renderer/locales/vi/team.json b/src/features/localization/renderer/locales/vi/team.json
new file mode 100644
index 00000000..e45bd271
--- /dev/null
+++ b/src/features/localization/renderer/locales/vi/team.json
@@ -0,0 +1,2487 @@
+{
+ "activity": {
+ "actions": {
+ "createTaskFromMessage": "Tạo tác vụ từ tin nhắn",
+ "editMessage": "Chỉnh sửa tin nhắn",
+ "expandMessage": "Mở rộng tin nhắn",
+ "replyToMessage": "Trả lời tin nhắn",
+ "restartTeam": "Khởi động lại đội ngũ"
+ },
+ "authError": {
+ "description": "Xác thực thất bại. Khởi động lại đội ngũ sẽ làm mới phiên và có thể giải quyết vấn đề này. Nếu vấn đề vẫn còn, hãy kiểm tra thông tin xác thực API hoặc thử lại sau."
+ },
+ "automation": {
+ "reviewPickup": "Đã yêu cầu thành viên nhận việc xem xét",
+ "stallNudge": "Đã yêu cầu thành viên tiếp tục tác vụ bị đình trệ",
+ "workSyncBody": "Đã yêu cầu thành viên đồng bộ công việc hiện tại"
+ },
+ "badges": {
+ "automation": "tự động hóa",
+ "bootstrap": "khởi tạo",
+ "command": "lệnh",
+ "comment": "Bình luận",
+ "live": "trực tiếp",
+ "note": "ghi chú",
+ "rateLimited": "Bị giới hạn tốc độ",
+ "restart": "khởi động lại",
+ "result": "kết quả",
+ "session": "phiên",
+ "stallNudge": "nhắc đình trệ",
+ "start": "bắt đầu",
+ "workSync": "đồng bộ công việc",
+ "agentError": "Lỗi Agent",
+ "apiError": "Lỗi API"
+ },
+ "bootstrap": {
+ "acknowledged": "Đã xác nhận khởi tạo",
+ "restarting": "Đang khởi động lại thành viên",
+ "starting": "Đang khởi động thành viên"
+ },
+ "rawJson": "JSON thô",
+ "unread": "Chưa đọc",
+ "thoughts": {
+ "count": "{{count}} suy nghĩ",
+ "count_one": "{{count}} suy nghĩ",
+ "expand": "Mở rộng suy nghĩ",
+ "showMore": "Xem thêm",
+ "showLess": "Thu gọn",
+ "count_few": "{{count}} suy nghĩ",
+ "count_many": "{{count}} suy nghĩ",
+ "count_other": "{{count}} suy nghĩ",
+ "toolSummary": "🔧 {{summary}}",
+ "titleForMember": "{{name}} - suy nghĩ"
+ },
+ "timeline": {
+ "loadingMessages": "Đang tải tin nhắn...",
+ "noMessages": "Không có tin nhắn",
+ "emptyHint": "Gửi một tin nhắn cho thành viên để xem hoạt động.",
+ "newSession": "Phiên mới",
+ "olderCount": "+{{count}} cũ hơn",
+ "showMore": "Hiện thêm {{count}}",
+ "showAll": "Hiện tất cả",
+ "olderCount_one": "+{{count}} cũ hơn",
+ "olderCount_few": "+{{count}} cũ hơn",
+ "olderCount_many": "+{{count}} cũ hơn",
+ "olderCount_other": "+{{count}} cũ hơn"
+ },
+ "pendingReplies": {
+ "title": "Đang chờ phản hồi",
+ "openMember": "Mở thành viên",
+ "messageSentAwaitingReply": "Đã gửi tin nhắn, đang chờ phản hồi",
+ "awaitingReply": "đang chờ phản hồi",
+ "externalTeam": "đội ngũ bên ngoài",
+ "crossTeamAwaitingReply": "Đã gửi tin nhắn giữa các đội ngũ, đang chờ phản hồi",
+ "user": "người dùng",
+ "awaitingApproval": "đang chờ phê duyệt"
+ },
+ "reply": {
+ "replyingTo": "Đang trả lời",
+ "action": "Trả lời"
+ },
+ "activeTasks": {
+ "inProgress": "Đang thực hiện",
+ "expandInProgress": "Mở rộng đang thực hiện",
+ "collapseInProgress": "Thu gọn đang thực hiện",
+ "reviewing": "đang xem xét",
+ "workingOn": "đang làm"
+ },
+ "expandDialog": {
+ "description": "Chế độ xem tin nhắn mở rộng"
+ }
+ },
+ "create": {
+ "actions": {
+ "create": "Tạo",
+ "creating": "Đang tạo...",
+ "openExisting": "Mở đội ngũ hiện có",
+ "skipPreflightAndCreate": "Bỏ qua kiểm tra trước và tạo"
+ },
+ "conflict": {
+ "description": "Chạy hai đội ngũ trong cùng một thư mục là rủi ro - chúng có thể xung đột khi chỉnh sửa cùng các tệp. Hãy cân nhắc dùng một thư mục khác hoặc một git worktree để cô lập.",
+ "title": "Một đội ngũ khác \"{{team}}\" đã đang chạy cho thư mục làm việc này",
+ "workingDirectory": "Thư mục làm việc:"
+ },
+ "description": {
+ "copy": "Tạo một đội ngũ mới dựa trên một đội ngũ hiện có.",
+ "create": "Thiết lập đội ngũ của bạn và chọn cách nó khởi động."
+ },
+ "errors": {
+ "nameExists": "Tên đội ngũ đã tồn tại",
+ "nameLaunching": "Một đội ngũ với tên này đang khởi chạy",
+ "createConfigFailed": "Không thể tạo cấu hình đội ngũ",
+ "loadProjectsFailed": "Không thể tải dự án"
+ },
+ "fields": {
+ "color": "Màu (tùy chọn)",
+ "description": "Mô tả (tùy chọn)",
+ "prompt": "Prompt cho trưởng nhóm (tùy chọn)",
+ "teamName": "Tên đội ngũ"
+ },
+ "launchAfterCreate": {
+ "description": "Khởi động đội ngũ ngay lập tức qua Claude CLI cục bộ.",
+ "label": "Chạy lệnh sau khi tạo"
+ },
+ "localOnly": "Chỉ khả dụng ở chế độ Electron cục bộ.",
+ "onDisk": "Trên ổ đĩa:",
+ "placeholders": {
+ "description": "Mô tả ngắn gọn về mục đích của đội ngũ",
+ "prompt": "Hướng dẫn cho trưởng nhóm trong quá trình tạo..."
+ },
+ "saved": "Đã lưu",
+ "solo": {
+ "description": "Chỉ trưởng nhóm (tiến trình chính) sẽ được khởi động - không có thành viên nào được tạo. Hoạt động như một phiên agent thông thường trong runtime bạn chọn (Claude Code, Codex, OpenCode, Gemini) nhưng có quyền truy cập bảng tác vụ để lập kế hoạch. Tiết kiệm token bằng cách tránh chi phí điều phối thành viên. Bạn có thể thêm thành viên sau từ cài đặt đội ngũ.",
+ "label": "Đội ngũ Solo"
+ },
+ "title": {
+ "copy": "Sao chép đội ngũ",
+ "create": "Tạo đội ngũ"
+ },
+ "optional": {
+ "launchSettingsTitle": "Cài đặt khởi chạy tùy chọn",
+ "launchSettingsDescription": "Prompt, an toàn và ghi đè CLI nằm ở đây khi bạn cần.",
+ "teamDetailsTitle": "Chi tiết đội ngũ tùy chọn",
+ "teamDetailsDescription": "Giữ luồng mặc định gọn gàng và chỉ mở phần này khi bạn muốn thêm ngữ cảnh hoặc một màu tùy chỉnh."
+ },
+ "prepare": {
+ "unsupportedPreload": "Phiên bản preload hiện tại không hỗ trợ team:prepareProvisioning. Hãy khởi động lại ứng dụng dev.",
+ "selectWorkingDirectory": "Chọn một thư mục làm việc để xác thực môi trường khởi chạy.",
+ "someProvidersNeedAttention": "Một số nhà cung cấp đã chọn cần được chú ý.",
+ "readyWithNotes": "Tất cả nhà cung cấp đã chọn đều sẵn sàng, kèm ghi chú.",
+ "ready": "Tất cả nhà cung cấp đã chọn đều sẵn sàng.",
+ "failed": "Không thể chuẩn bị các nhà cung cấp đã chọn",
+ "checkingProviders": "Đang kiểm tra các nhà cung cấp đã chọn...",
+ "preparingEnvironment": "Đang chuẩn bị môi trường...",
+ "selectedProvidersReadyWithNotes": "Nhà cung cấp đã chọn sẵn sàng (kèm ghi chú)",
+ "selectedProvidersReady": "Nhà cung cấp đã chọn sẵn sàng"
+ },
+ "validation": {
+ "nameMustContainLetterOrDigit": "Tên phải chứa ít nhất một chữ cái hoặc chữ số",
+ "nameTooLong": "Tên quá dài (tối đa 128 ký tự)",
+ "selectWorkingDirectory": "Chọn thư mục làm việc (cwd)",
+ "memberNameRequired": "Tên thành viên không được để trống",
+ "memberNameInvalid": "Tên thành viên phải bắt đầu bằng ký tự chữ và số, chỉ dùng [a-zA-Z0-9._-], tối đa 128 ký tự",
+ "memberNamesUnique": "Tên thành viên phải là duy nhất",
+ "openCodeLeadModelRequired": "Trưởng nhóm OpenCode yêu cầu một mô hình được chọn.",
+ "openCodeTeammateRequired": "Trưởng nhóm OpenCode yêu cầu ít nhất một thành viên OpenCode.",
+ "teamLaunching": "Đội ngũ đang khởi chạy",
+ "teamNameExists": "Tên đội ngũ đã tồn tại",
+ "checkFormFields": "Kiểm tra các trường biểu mẫu"
+ }
+ },
+ "editTeam": {
+ "actions": {
+ "cancel": "Hủy",
+ "save": "Lưu"
+ },
+ "addMemberLockReason": "Hãy dùng hộp thoại Thêm thành viên riêng để thêm thành viên mới khi đội ngũ đang hoạt động.",
+ "description": "Thay đổi tên, mô tả và màu của đội ngũ",
+ "errors": {
+ "changesSavedRefreshFailed": "Các thay đổi của đội ngũ đã được lưu, nhưng không thể làm mới chế độ xem mới nhất: {{message}}",
+ "liveRenameBlocked": "Không thể đổi tên các thành viên hiện có khi đội ngũ đang hoạt động. Đã đổi tên: {{names}}",
+ "memberNameEmpty": "Tên thành viên không được để trống",
+ "memberNameInvalid": "Tên thành viên phải bắt đầu bằng ký tự chữ và số, chỉ dùng [a-zA-Z0-9._-], tối đa 128 ký tự",
+ "memberNameNumericSuffix": "Tên thành viên \"{{name}}\" không được phép (dành riêng cho hậu tố tự động của Claude CLI). Hãy dùng \"{{base}}\" thay thế.",
+ "memberNameReserved": "Tên thành viên \"{{name}}\" được dành riêng",
+ "memberNamesUnique": "Tên thành viên phải là duy nhất trước khi lưu",
+ "newLiveTeammates": "Hãy thêm thành viên mới từ hộp thoại Thêm thành viên riêng khi đội ngũ đang hoạt động. Chỉnh sửa đội ngũ chỉ hỗ trợ cập nhật các thành viên hiện có.",
+ "provisioning": "Không thể chỉnh sửa cài đặt đội ngũ khi việc tạo vẫn đang diễn ra. Hãy chờ khởi chạy hoàn tất, rồi thử lại.",
+ "restartFailedMany": "Đã lưu đội ngũ, nhưng không thể khởi động lại các thành viên này: {{failures}}",
+ "restartFailedOne": "Đã lưu đội ngũ, nhưng không thể khởi động lại thành viên này: {{failures}}",
+ "saveFailed": "Không thể lưu",
+ "settingsChanged": "Cài đặt đội ngũ đã thay đổi trong khi hộp thoại này đang mở. Hãy mở lại và xem trạng thái mới nhất trước khi lưu.",
+ "settingsSavedMembersAndRefreshFailed": "Cài đặt đội ngũ đã được lưu, nhưng các thay đổi thành viên thất bại: {{message}}. Làm mới cũng thất bại: {{refreshError}}",
+ "settingsSavedMembersFailed": "Cài đặt đội ngũ đã được lưu, nhưng các thay đổi thành viên thất bại: {{message}}",
+ "settingsSavedRefreshFailed": "Cài đặt đội ngũ đã được lưu, nhưng không thể làm mới chế độ xem mới nhất: {{message}}",
+ "teamNameEmpty": "Tên đội ngũ không được để trống",
+ "unsupportedMixedPrimaryMutation": "Chỉnh sửa trực tiếp các thành viên do tiến trình chính sở hữu trong các đội ngũ OpenCode hỗn hợp chưa được hỗ trợ. Hãy dừng đội ngũ, chỉnh sửa danh sách, rồi khởi chạy lại. Bị ảnh hưởng: {{names}}"
+ },
+ "fields": {
+ "colorOptional": "Màu (tùy chọn)",
+ "description": "Mô tả",
+ "name": "Tên"
+ },
+ "memberRestartWarning": "Việc lưu sẽ khởi động lại thành viên này để áp dụng các thay đổi về vai trò, quy trình, cô lập worktree, nhà cung cấp, mô hình, mức độ nỗ lực hoặc quyền truy cập MCP.",
+ "notices": {
+ "liveRenameBlocked": "Lưu trực tiếp bị chặn vì các thành viên hiện có đã bị đổi tên. Hãy hoàn nguyên những thay đổi danh tính đó hoặc dừng đội ngũ trước.",
+ "newLiveTeammates": "Không thể thêm thành viên mới từ Chỉnh sửa đội ngũ khi đội ngũ đang hoạt động. Hãy dùng hộp thoại Thêm thành viên thay thế.",
+ "provisioning": "Việc tạo đội ngũ vẫn đang diễn ra. Việc chỉnh sửa tạm thời bị khóa cho đến khi khởi chạy hoàn tất.",
+ "restartMany": "Việc lưu sẽ khởi động lại hoặc khởi chạy lại các thành viên này để áp dụng các thay đổi về vai trò, quy trình, cô lập worktree, nhà cung cấp, mô hình, mức độ nỗ lực hoặc quyền truy cập MCP: {{names}}.",
+ "restartOne": "Việc lưu sẽ khởi động lại hoặc khởi chạy lại thành viên này để áp dụng các thay đổi về vai trò, quy trình, cô lập worktree, nhà cung cấp, mô hình, mức độ nỗ lực hoặc quyền truy cập MCP: {{names}}.",
+ "unsupportedMixedPrimaryMutation": "Chỉnh sửa/xóa trực tiếp các thành viên do tiến trình chính sở hữu trong các đội ngũ OpenCode hỗn hợp yêu cầu dừng và khởi chạy lại đội ngũ: {{names}}."
+ },
+ "placeholders": {
+ "description": "Mô tả đội ngũ (tùy chọn)",
+ "teamName": "Tên đội ngũ"
+ },
+ "teamLead": {
+ "changeRuntime": "Đổi runtime của trưởng nhóm",
+ "changeRuntimeDescription": "Mở Khởi chạy lại đội ngũ để đổi nhà cung cấp, mô hình hoặc mức độ nỗ lực của trưởng nhóm.",
+ "modelLockReason": "Runtime của trưởng nhóm được quản lý từ Khởi chạy lại đội ngũ.",
+ "readOnlyHint": "Tên và vai trò của trưởng nhóm giữ chỉ-đọc tại đây. Hãy mở bảng runtime trên hàng của trưởng nhóm để đổi nhà cung cấp, mô hình hoặc mức độ nỗ lực.",
+ "role": "Trưởng nhóm"
+ },
+ "title": "Chỉnh sửa đội ngũ"
+ },
+ "memberDraft": {
+ "actions": {
+ "remove": "Xóa thành viên",
+ "removeAria": "Xóa {{name}}",
+ "restore": "Khôi phục thành viên",
+ "restoreAria": "Khôi phục {{name}}"
+ },
+ "anthropicContext": {
+ "defaultSetting": "cài đặt ngữ cảnh mặc định",
+ "description": "Ngữ cảnh Anthropic áp dụng cho toàn đội ngũ trong lần khởi chạy này: {{mode}}. Hãy dùng ô chọn Giới hạn ngữ cảnh trên bảng runtime của trưởng nhóm để thay đổi.",
+ "limitEnabled": "Đã bật giới hạn 200K"
+ },
+ "mcp": {
+ "buttonInherit": "Kế thừa MCP",
+ "buttonScopes": "Phạm vi MCP",
+ "chooseScopes": "Chọn phạm vi",
+ "inheritLead": "Kế thừa từ trưởng nhóm",
+ "lockedInfo": "Chỉ MCP của Agent Teams được bật cho tất cả thành viên. Thành viên này sẽ khởi chạy chỉ với máy chủ Agent Teams.",
+ "mode": "Chế độ MCP",
+ "scopes": {
+ "local": "cục bộ",
+ "project": "dự án",
+ "user": "người dùng"
+ },
+ "serverNames": "Tên máy chủ",
+ "settingInfo": "MCP của Agent Teams khởi chạy thành viên này chỉ với máy chủ Agent Teams. Chế độ phạm vi và danh sách cho phép chỉ áp dụng cho lần khởi chạy thành viên này.",
+ "strictAllowlist": "Danh sách cho phép nghiêm ngặt",
+ "tooltip": "{{label}}: Kiểm soát chính sách kế thừa MCP của thành viên này",
+ "agentTeamsMcp": "MCP của Agent Teams"
+ },
+ "model": {
+ "ariaLabel": "Nhà cung cấp {{provider}}, {{model}}",
+ "currentLeadRuntime": "Runtime hiện tại của trưởng nhóm",
+ "default": "Mặc định",
+ "inheritedTooltip": "Nhà cung cấp, mô hình và mức độ nỗ lực được kế thừa từ trưởng nhóm khi đồng bộ được bật.",
+ "leadSuffix": "{{label}} (trưởng nhóm)",
+ "liveDisabled": "Các thay đổi về nhà cung cấp, mô hình và mức độ nỗ lực bị tắt khi đội ngũ đang hoạt động. Hãy kết nối lại đội ngũ để áp dụng chúng một cách an toàn.",
+ "lockedActionFallback": "Các thay đổi runtime của trưởng nhóm sẽ mở Khởi chạy lại đội ngũ, nơi có thể cập nhật nhà cung cấp, mô hình và mức độ nỗ lực.",
+ "restartWholeTeam": "Việc lưu các thay đổi runtime đó sẽ khởi động lại toàn bộ đội ngũ."
+ },
+ "nameAria": "Tên thành viên {{index}}",
+ "nameFallback": "thành viên {{index}}",
+ "noRole": "Không có vai trò",
+ "removed": "Đã xóa",
+ "workflow": {
+ "addTooltip": "Thêm quy trình của thành viên",
+ "editTooltip": "Chỉnh sửa quy trình của thành viên",
+ "label": "Quy trình (tùy chọn)",
+ "placeholder": "Agent này nên hành xử thế nào, tương tác với những người khác ra sao...",
+ "saved": "Đã lưu"
+ },
+ "worktree": {
+ "description": "Chạy thành viên này trong một git worktree riêng. Áp dụng/từ chối thay đổi nhắm vào worktree đó, không phải không gian làm việc của trưởng nhóm.",
+ "label": "Worktree"
+ },
+ "addMembers": {
+ "title": "Thêm thành viên",
+ "description": "Thêm thành viên mới vào {{teamName}}"
+ },
+ "placeholders": {
+ "name": "ten-thanh-vien",
+ "mcpServers": "github, sentry"
+ }
+ },
+ "detail": {
+ "actions": {
+ "add": "Thêm",
+ "cancel": "Hủy",
+ "delete": "Xóa",
+ "editCode": "Chỉnh sửa mã",
+ "launch": "Khởi chạy",
+ "remove": "Xóa",
+ "stop": "Dừng",
+ "task": "Tác vụ",
+ "visualize": "Trực quan hóa"
+ },
+ "deleteTeam": {
+ "description": "Xóa đội ngũ \"{{team}}\"? Hành động này không thể đảo ngược. Tất cả dữ liệu và tác vụ của đội ngũ sẽ bị xóa.",
+ "title": "Xóa đội ngũ"
+ },
+ "draft": {
+ "descriptionPrefix": "Đây là một đội ngũ nháp -",
+ "descriptionSuffix": "đã được cấu hình với {{count}} {{member}} nhưng chưa được tạo bởi CLI. Nhấp Khởi chạy để chọn mô hình và khởi động đội ngũ.",
+ "descriptionSuffix_few": "đã được cấu hình với {{count}} {{member}} nhưng chưa được tạo bởi CLI. Nhấp Khởi chạy để chọn mô hình và khởi động đội ngũ.",
+ "descriptionSuffix_many": "đã được cấu hình với {{count}} {{member}} nhưng chưa được tạo bởi CLI. Nhấp Khởi chạy để chọn mô hình và khởi động đội ngũ.",
+ "descriptionSuffix_one": "đã được cấu hình với {{count}} {{member}} nhưng chưa được tạo bởi CLI. Nhấp Khởi chạy để chọn mô hình và khởi động đội ngũ.",
+ "descriptionSuffix_other": "đã được cấu hình với {{count}} {{member}} nhưng chưa được tạo bởi CLI. Nhấp Khởi chạy để chọn mô hình và khởi động đội ngũ.",
+ "member": "thành viên",
+ "member_few": "thành viên",
+ "member_many": "thành viên",
+ "member_one": "thành viên",
+ "member_other": "thành viên",
+ "title": "Đội ngũ chưa được khởi chạy"
+ },
+ "invalidTab": "Tab đội ngũ không hợp lệ",
+ "kanbanSafeData": "Không thể tải đầy đủ kanban. Đang hiển thị dữ liệu an toàn.",
+ "loadFailed": "Không thể tải đội ngũ",
+ "loading": "Đang tải đội ngũ",
+ "loadingSidebar": "Đang tải thanh bên đội ngũ",
+ "offline": {
+ "offline": "Đội ngũ đang ngoại tuyến",
+ "partialFailed": "Lần khởi chạy gần nhất thất bại giữa chừng",
+ "partialMissing": "Lần khởi chạy gần nhất thất bại giữa chừng - {{missing}}/{{expected}} thành viên không tham gia",
+ "reconciling": "Lần khởi chạy gần nhất vẫn đang đối soát"
+ },
+ "previous": "Trước đó: {{paths}}",
+ "removeMember": {
+ "description": "Xóa \"{{member}}\" khỏi đội ngũ? Tác vụ và tin nhắn sẽ được giữ lại, nhưng tên này không thể tái sử dụng.",
+ "title": "Xóa thành viên"
+ },
+ "sections": {
+ "team": "Đội ngũ"
+ },
+ "solo": "Solo",
+ "status": {
+ "active": "Đang hoạt động",
+ "launching": "Đang khởi chạy...",
+ "running": "Đang chạy"
+ },
+ "telemetry": {
+ "cpu": "CPU",
+ "memory": "Bộ nhớ"
+ },
+ "tooltips": {
+ "deleteTeam": "Xóa đội ngũ",
+ "editTeam": "Chỉnh sửa đội ngũ",
+ "editUnavailableProvisioning": "Chỉnh sửa đội ngũ không khả dụng khi việc tạo vẫn đang diễn ra",
+ "openBuiltInEditor": "Mở dự án trong trình soạn thảo tích hợp",
+ "openTeamGraph": "Mở đồ thị đội ngũ",
+ "stopTeam": "Dừng đội ngũ"
+ },
+ "waitingForProvisioning": "Dữ liệu đội ngũ sẽ xuất hiện khi quá trình tạo hoàn tất",
+ "context": {
+ "title": "Ngữ cảnh",
+ "loading": "Đang tải...",
+ "noSessionLoaded": "Chưa tải phiên nào",
+ "closePanel": "Đóng bảng ngữ cảnh {{team}}",
+ "loadingContext": "Đang tải ngữ cảnh...",
+ "openLeadSession": "Mở phiên của trưởng nhóm để xem ngữ cảnh."
+ }
+ },
+ "review": {
+ "fileHeader": {
+ "actions": {
+ "accept": "Chấp nhận",
+ "discard": "Bỏ",
+ "discardTooltip": "Bỏ tất cả chỉnh sửa cho tệp này",
+ "keepMyDraft": "Giữ bản nháp của tôi",
+ "reject": "Từ chối",
+ "reloadFromDisk": "Tải lại từ ổ đĩa",
+ "restore": "Khôi phục",
+ "restoreTooltip": "Tạo/khôi phục tệp này trên ổ đĩa từ bản xem trước",
+ "saveFile": "Lưu tệp",
+ "saveFileTooltip": "Lưu tệp vào ổ đĩa"
+ },
+ "badges": {
+ "deleted": "ĐÃ XÓA",
+ "manualReview": "XEM XÉT THỦ CÔNG",
+ "new": "MỚI",
+ "worktree": "WORKTREE"
+ },
+ "contentSource": {
+ "disk-current": "Ổ đĩa hiện tại",
+ "file-history": "Lịch sử tệp",
+ "git-fallback": "Dự phòng Git",
+ "ledger-exact": "Sổ cái tác vụ",
+ "ledger-snapshot": "Ảnh chụp sổ cái",
+ "snippet-reconstruction": "Đã tái dựng",
+ "unavailable": "Nội dung không khả dụng"
+ },
+ "contentUnavailable": {
+ "badge": "Nội dung không khả dụng",
+ "description": "Sổ cái đã ghi metadata cho thay đổi này, nhưng nội dung văn bản đầy đủ không khả dụng. Điều này thường có nghĩa là nội dung nhị phân, lớn hoặc chỉ-băm.",
+ "safety": "Chấp nhận/từ chối tự động bị tắt cho tệp này để tránh ghi đĩa không an toàn.",
+ "title": "Nội dung văn bản không khả dụng"
+ },
+ "disabled": {
+ "acceptRejectContentUnavailable": "Chấp nhận/Từ chối bị tắt vì nội dung văn bản đầy đủ không khả dụng.",
+ "acceptRejectMissingOnDisk": "Chấp nhận/Từ chối bị tắt khi tệp bị thiếu trên ổ đĩa.",
+ "rejectBaselineUnavailable": "Từ chối bị tắt vì bản gốc cơ sở không khả dụng.",
+ "rejectContentUnavailable": "Từ chối bị tắt vì nội dung văn bản đầy đủ không khả dụng.",
+ "rejectManualLedgerReview": "Từ chối bị tắt vì thay đổi trong sổ cái này có nội dung nhị phân, lớn hoặc không khả dụng."
+ },
+ "externalChange": {
+ "changedOnDisk": "Đã thay đổi trên ổ đĩa",
+ "deletedOnDisk": "Đã xóa trên ổ đĩa",
+ "recreatedOnDisk": "Đã tạo lại trên ổ đĩa"
+ },
+ "missingOnDisk": {
+ "badge": "Thiếu trên ổ đĩa",
+ "description": "Chúng tôi vẫn có thể hiển thị bản xem trước từ nhật ký agent, nhưng hệ thống tệp của bạn không đồng bộ.",
+ "restorePrefix": "Dùng",
+ "restoreSuffix": "để ghi nội dung xem trước trở lại ổ đĩa.",
+ "restoreUnavailable": "Nội dung tệp đầy đủ không khả dụng để khôi phục tự động.",
+ "title": "Tệp bị thiếu trên ổ đĩa"
+ },
+ "pathChange": {
+ "from": "Từ {{path}}",
+ "to": "Đến {{path}}"
+ },
+ "worktree": {
+ "isolated": "Worktree cô lập"
+ }
+ },
+ "toolbar": {
+ "stats": {
+ "pending": "{{count}} đang chờ",
+ "pending_one": "{{count}} đang chờ",
+ "pending_other": "{{count}} đang chờ",
+ "accepted": "{{count}} đã chấp nhận",
+ "accepted_one": "{{count}} đã chấp nhận",
+ "accepted_other": "{{count}} đã chấp nhận",
+ "rejected": "{{count}} đã từ chối",
+ "rejected_one": "{{count}} đã từ chối",
+ "rejected_other": "{{count}} đã từ chối",
+ "acrossFiles": "trên {{count}} tệp",
+ "acrossFiles_one": "trên {{count}} tệp",
+ "acrossFiles_other": "trên {{count}} tệp",
+ "edited": "{{count}} đã chỉnh sửa",
+ "edited_one": "{{count}} đã chỉnh sửa",
+ "edited_other": "{{count}} đã chỉnh sửa",
+ "pending_few": "{{count}} đang chờ",
+ "pending_many": "{{count}} đang chờ",
+ "accepted_few": "{{count}} đã chấp nhận",
+ "accepted_many": "{{count}} đã chấp nhận",
+ "rejected_few": "{{count}} đã từ chối",
+ "rejected_many": "{{count}} đã từ chối",
+ "acrossFiles_few": "trên {{count}} tệp",
+ "acrossFiles_many": "trên {{count}} tệp",
+ "edited_few": "{{count}} đã chỉnh sửa",
+ "edited_many": "{{count}} đã chỉnh sửa"
+ },
+ "actions": {
+ "auto": "Tự động",
+ "undo": "Hoàn tác",
+ "acceptAll": "Chấp nhận tất cả",
+ "rejectAll": "Từ chối tất cả",
+ "applying": "Đang áp dụng...",
+ "applyRejections": "Áp dụng từ chối"
+ },
+ "tooltips": {
+ "autoOn": "Tự động đánh dấu tệp đã xem khi cuộn đến cuối (BẬT)",
+ "autoOff": "Tự động đánh dấu tệp đã xem khi cuộn đến cuối (TẮT)",
+ "undo": "Hoàn tác thao tác xem xét gần nhất (Ctrl+Z)",
+ "acceptAll": "Chấp nhận tất cả thay đổi trên mọi tệp",
+ "rejectAll": "Từ chối an toàn tất cả thay đổi có thể từ chối trên mọi tệp",
+ "rejectAllDisabled": "Không có tệp đang chờ nào có bản gốc cơ sở an toàn để từ chối.",
+ "applyRejections": "Áp dụng các đoạn đã từ chối vào ổ đĩa; các thay đổi đã chấp nhận được giữ nguyên"
+ }
+ },
+ "diffError": {
+ "title": "Không thể hiển thị chế độ xem khác biệt",
+ "unexpected": "Đã xảy ra lỗi không mong muốn khi hiển thị phần khác biệt.",
+ "actions": {
+ "retry": "Thử lại"
+ },
+ "raw": {
+ "show": "Hiện dữ liệu khác biệt thô",
+ "file": "Tệp: {{file}}",
+ "original": "--- Bản gốc",
+ "modified": "+++ Đã sửa đổi",
+ "charsTotal": "... (tổng {{count}} ký tự)",
+ "charsTotal_one": "... (tổng {{count}} ký tự)",
+ "charsTotal_other": "... (tổng {{count}} ký tự)",
+ "charsTotal_few": "... (tổng {{count}} ký tự)",
+ "charsTotal_many": "... (tổng {{count}} ký tự)"
+ }
+ },
+ "fileTree": {
+ "viewed": "Đã xem",
+ "badges": {
+ "new": "mới",
+ "deleted": "đã xóa"
+ },
+ "collapseFolder": "Thu gọn {{name}}",
+ "expandFolder": "Mở rộng {{name}}",
+ "empty": {
+ "noChangedFiles": "Không có tệp nào thay đổi",
+ "noMatchingFiles": "Không có tệp nào phù hợp"
+ },
+ "searchPlaceholder": "Tìm tệp…",
+ "filters": {
+ "unresolved": "Chưa giải quyết",
+ "rejected": "Đã từ chối",
+ "new": "Mới",
+ "clear": "Xóa"
+ }
+ },
+ "diffControls": {
+ "previousChunk": "Đoạn trước",
+ "nextChunk": "Đoạn tiếp",
+ "rejectChange": "Từ chối thay đổi (⌘N)",
+ "acceptChange": "Chấp nhận thay đổi (⌘Y)",
+ "undo": "Hoàn tác",
+ "keep": "Giữ",
+ "rejectShortcut": "⌘N",
+ "acceptShortcut": "⌘Y"
+ },
+ "conflict": {
+ "title": "Đã phát hiện xung đột",
+ "description": "Tệp này đã bị sửa đổi kể từ các thay đổi của agent",
+ "cancel": "Hủy",
+ "saveResolution": "Lưu giải pháp",
+ "editManually": "Chỉnh sửa thủ công",
+ "useOriginal": "Dùng bản gốc",
+ "keepCurrent": "Giữ bản hiện tại"
+ },
+ "fullDiffLoading": {
+ "titleOne": "Đang chuẩn bị khác biệt đầy đủ",
+ "titleMany": "Đang chuẩn bị {{count}} khác biệt đầy đủ",
+ "subtitleForFile": "Đang hoàn thiện phần khác biệt chính xác của trình soạn thảo cho {{file}}.",
+ "subtitleCurrentFile": "Đang hoàn thiện phần khác biệt chính xác của trình soạn thảo cho tệp hiện tại.",
+ "subtitleMany": "Đang giải quyết các bản gốc trước/sau chính xác cho các tệp đang tải.",
+ "previewsReady": "{{count}} bản xem trước sẵn sàng",
+ "previewsReady_one": "{{count}} bản xem trước sẵn sàng",
+ "editorViewLoading": "Đang tải chế độ xem trình soạn thảo",
+ "filesInProgress": "{{count}} tệp đang xử lý",
+ "filesInProgress_one": "{{count}} tệp đang xử lý",
+ "filesReady": "{{ready}}/{{total}} tệp sẵn sàng",
+ "progressDescription": "{{ready}} sẵn sàng, {{loading}} vẫn đang tải. Bản xem trước khác biệt vẫn hiển thị bên dưới trong khi các bản gốc còn lại được giải quyết.",
+ "singleDescription": "Bản xem trước khác biệt vẫn hiển thị bên dưới trong khi bản gốc chính xác được giải quyết.",
+ "previewsReady_few": "{{count}} bản xem trước sẵn sàng",
+ "previewsReady_many": "{{count}} bản xem trước sẵn sàng",
+ "previewsReady_other": "{{count}} bản xem trước sẵn sàng",
+ "filesInProgress_few": "{{count}} tệp đang xử lý",
+ "filesInProgress_many": "{{count}} tệp đang xử lý",
+ "filesInProgress_other": "{{count}} tệp đang xử lý"
+ },
+ "fileMissingPrefix": "Tệp bị thiếu trên ổ đĩa. Phần khác biệt này có thể chỉ là bản xem trước từ nhật ký agent. Dùng",
+ "restore": "Khôi phục",
+ "fileMissingSuffix": "để tạo tệp trên ổ đĩa.",
+ "filePlaceholder": {
+ "loading": "Đang tải",
+ "description": "Đang chuẩn bị một phần khác biệt đầy đủ của trình soạn thảo cho tệp này."
+ },
+ "loading": {
+ "diff": "KHÁC BIỆT",
+ "ledgerObjectsProcessed": "Đã xử lý {{count}} đối tượng sổ cái",
+ "ledgerObjectsProcessed_one": "Đã xử lý {{count}} đối tượng sổ cái",
+ "ledgerObjectsProcessed_other": "Đã xử lý {{count}} đối tượng sổ cái",
+ "ledgerObjectsProcessed_few": "Đã xử lý {{count}} đối tượng sổ cái",
+ "ledgerObjectsProcessed_many": "Đã xử lý {{count}} đối tượng sổ cái",
+ "phases": {
+ "readingLedger": "Đang đọc sổ cái tác vụ...",
+ "resolvingFiles": "Đang giải quyết trạng thái tệp...",
+ "checkingWorktree": "Đang kiểm tra ngữ cảnh worktree...",
+ "preparingDiffs": "Đang chuẩn bị các khác biệt để xem xét..."
+ }
+ },
+ "progress": {
+ "viewed": "Đã xem {{viewed}}/{{total}}"
+ },
+ "scope": {
+ "readMore": "Đọc thêm",
+ "tiers": {
+ "exact": {
+ "title": "Phạm vi tác vụ được xác định chính xác",
+ "detail": "Tìm thấy cả dấu bắt đầu và hoàn thành trong nhật ký phiên. Phần khác biệt chỉ bao gồm các thay đổi được thực hiện trong tác vụ cụ thể này - các tác vụ khác đã sửa đổi cùng các tệp được loại trừ."
+ },
+ "endEstimated": {
+ "title": "Ranh giới kết thúc được ước lượng",
+ "detail": "Chỉ tìm thấy dấu bắt đầu - tác vụ chưa có dấu hoàn thành. Các thay đổi được hiển thị từ lúc bắt đầu tác vụ đến cuối phiên. Nếu các tác vụ khác chạy sau tác vụ này trong cùng phiên, các thay đổi của chúng cũng có thể được bao gồm."
+ },
+ "startEstimated": {
+ "title": "Ranh giới bắt đầu được ước lượng",
+ "detail": "Chỉ tìm thấy dấu hoàn thành - lúc bắt đầu công việc không được ghi lại. Nếu các tác vụ khác chạy trước tác vụ này trong cùng phiên, các thay đổi của chúng đối với cùng các tệp cũng có thể được bao gồm."
+ },
+ "allSession": {
+ "title": "Đang hiển thị tất cả thay đổi của phiên",
+ "detail": "Không tìm thấy dấu tác vụ nào trong nhật ký phiên. Không thể cô lập tác vụ này - tất cả thay đổi tệp từ toàn bộ phiên được hiển thị, bao gồm các thay đổi từ tác vụ khác. Điều này có thể xảy ra với các phiên bản CLI cũ hơn hoặc quy trình không chuẩn."
+ }
+ },
+ "ledger": {
+ "exact": {
+ "title": "Các thay đổi được sổ cái tác vụ ghi lại",
+ "detail": "Bộ điều phối đã ghi lại các thay đổi tệp này trong khi agent đang làm việc trên tác vụ này.",
+ "badge": "Sổ cái chính xác"
+ },
+ "limited": {
+ "title": "Các thay đổi được ghi lại với khả năng xem xét hạn chế",
+ "detail": "Bộ điều phối đã ghi lại các thay đổi tệp này cho tác vụ này, nhưng ít nhất một thay đổi được ghi từ một ảnh chụp hoặc nguồn chỉ-metadata. Hãy xem xét các khác biệt văn bản chính xác khi có sẵn; nội dung nhị phân hoặc không khả dụng có thể cần xem xét thủ công.",
+ "mixedBadge": "Khả năng xem xét hỗn hợp",
+ "needsReviewBadge": "Cần xem xét"
+ }
+ },
+ "workInterval": {
+ "title": "Được phân phạm vi theo khoảng thời gian làm việc đã lưu",
+ "detail": "Dấu bắt đầu tác vụ không có sẵn trong nhật ký phiên, nên phần khác biệt được phân phạm vi theo khoảng thời gian làm việc của tác vụ được lưu trên bảng.",
+ "badge": "Phân phạm vi theo khoảng"
+ },
+ "confidence": {
+ "high": "Độ tin cậy cao",
+ "medium": "Độ tin cậy trung bình",
+ "low": "Độ tin cậy thấp",
+ "bestEffort": "Nỗ lực tối đa"
+ }
+ },
+ "shortcuts": {
+ "title": "Phím tắt",
+ "actions": {
+ "nextChange": "Thay đổi tiếp theo",
+ "previousChange": "Thay đổi trước đó",
+ "nextFile": "Tệp tiếp theo",
+ "previousFile": "Tệp trước đó",
+ "acceptChange": "Chấp nhận thay đổi",
+ "rejectChange": "Từ chối thay đổi",
+ "saveFile": "Lưu tệp",
+ "undo": "Hoàn tác",
+ "redo": "Làm lại",
+ "toggleShortcuts": "Bật/tắt phím tắt",
+ "closeDialog": "Đóng hộp thoại"
+ }
+ },
+ "timeline": {
+ "empty": "Không có sự kiện chỉnh sửa nào",
+ "titleWithCount": "Dòng thời gian chỉnh sửa ({{count}})"
+ },
+ "continuousScroll": {
+ "empty": "Không có thay đổi tệp nào có thể xem xét"
+ },
+ "empty": {
+ "noSafeDiff": "Không có khác biệt an toàn nào",
+ "noFileChangesRecorded": "Không có thay đổi tệp nào được ghi lại",
+ "noSafeDiffDescription": "Sổ cái tác vụ không cung cấp khác biệt tệp an toàn nào cho tác vụ này.",
+ "noSafeDiffDiagnosticsDescription": "Sổ cái tác vụ không cung cấp khác biệt tệp an toàn nào cho tác vụ này. Phần chẩn đoán bên dưới giải thích lý do.",
+ "noFileEventsYet": "Sổ cái tác vụ chưa có sự kiện tệp nào cho tác vụ này.",
+ "noFileEvents": "Sổ cái tác vụ không có sự kiện tệp nào cho tác vụ này."
+ }
+ },
+ "messages": {
+ "actions": {
+ "bottomSheetActions": "Thao tác bảng tin nhắn dưới cùng",
+ "collapseAll": "Thu gọn tất cả tin nhắn",
+ "collapseSheet": "Thu gọn bảng",
+ "expandAll": "Mở rộng tất cả tin nhắn",
+ "expandSheet": "Mở rộng bảng",
+ "floatComposer": "Trình soạn nổi",
+ "floatMessagesComposer": "Trình soạn tin nhắn nổi",
+ "hideSearch": "Ẩn tìm kiếm",
+ "loadOlder": "Tải tin nhắn cũ hơn",
+ "markAllRead": "Đánh dấu tất cả là đã đọc",
+ "messageActions": "Thao tác tin nhắn",
+ "moveMessagesToBottomSheet": "Chuyển tin nhắn xuống bảng dưới cùng",
+ "moveMessagesToSidebar": "Chuyển tin nhắn sang thanh bên",
+ "moveToBottomSheet": "Chuyển xuống bảng dưới cùng",
+ "moveToInline": "Chuyển sang nội dòng",
+ "moveToSidebar": "Chuyển sang thanh bên",
+ "panelActions": "Thao tác bảng tin nhắn",
+ "searchMessages": "Tìm tin nhắn"
+ },
+ "delivery": {
+ "copied": "Đã sao chép",
+ "copyDebugDetails": "Sao chép chi tiết gỡ lỗi",
+ "details": "Chi tiết",
+ "fields": {
+ "acceptanceUnknown": "acceptanceUnknown",
+ "delivered": "delivered",
+ "diagnostics": "diagnostics",
+ "ledgerStatus": "ledgerStatus",
+ "messageId": "messageId",
+ "providerId": "providerId",
+ "queuedBehindMessageId": "queuedBehindMessageId",
+ "reason": "reason",
+ "responsePending": "responsePending",
+ "responseState": "responseState",
+ "statusMessageId": "statusMessageId",
+ "userVisibleMessage": "userVisibleMessage",
+ "userVisibleNextReviewAt": "userVisibleNextReviewAt",
+ "userVisibleReasonCode": "userVisibleReasonCode",
+ "userVisibleState": "userVisibleState",
+ "visibleReplyCorrelation": "visibleReplyCorrelation",
+ "visibleReplyMessageId": "visibleReplyMessageId"
+ }
+ },
+ "panelMode": "Chế độ bảng tin nhắn",
+ "title": "Tin nhắn",
+ "unread": {
+ "new": "{{count}} mới",
+ "unread": "{{count}} chưa đọc",
+ "new_few": "{{count}} mới",
+ "new_many": "{{count}} mới",
+ "new_one": "{{count}} mới",
+ "new_other": "{{count}} mới",
+ "unread_few": "{{count}} chưa đọc",
+ "unread_many": "{{count}} chưa đọc",
+ "unread_one": "{{count}} chưa đọc",
+ "unread_other": "{{count}} chưa đọc"
+ },
+ "filter": {
+ "ariaLabel": "Lọc tin nhắn",
+ "tooltip": "Lọc tin nhắn",
+ "from": "Từ",
+ "to": "Đến",
+ "noData": "Không có dữ liệu",
+ "showStatusUpdates": "Hiện cập nhật trạng thái (rảnh/tắt)",
+ "actions": {
+ "reset": "Đặt lại",
+ "save": "Lưu"
+ }
+ },
+ "status": {
+ "title": "Trạng thái"
+ },
+ "actionMode": {
+ "label": "Chế độ thao tác"
+ },
+ "search": {
+ "placeholder": "Tìm kiếm..."
+ }
+ },
+ "modelSelector": {
+ "badges": {
+ "configured": "Đã cấu hình",
+ "connected": "Đã kết nối",
+ "failed": "Thất bại",
+ "free": "Miễn phí",
+ "local": "Cục bộ",
+ "needsTest": "Cần kiểm thử",
+ "verified": "Đã xác minh",
+ "unavailable": "Không khả dụng",
+ "issue": "Vấn đề"
+ },
+ "customModelId": "ID mô hình tùy chỉnh",
+ "label": "Mô hình (tùy chọn)",
+ "multimodelRequired": "Codex và Gemini yêu cầu chế độ đa mô hình.",
+ "openCode": {
+ "allSources": "Tất cả nguồn OpenCode",
+ "filterSource": "Lọc {{source}}",
+ "filterSources": "Lọc nguồn OpenCode",
+ "freeOnly": "Chỉ miễn phí",
+ "freeTooltip": "OpenCode đánh dấu mô hình này là miễn phí.",
+ "loadingModels": "Đang tải mô hình OpenCode...",
+ "noSourcesFound": "Không tìm thấy nguồn nào.",
+ "recommendedOnly": "Chỉ được khuyến nghị",
+ "searchSources": "Tìm nguồn",
+ "sourcesCount": "{{count}} nguồn OpenCode",
+ "sourcesCount_few": "{{count}} nguồn OpenCode",
+ "sourcesCount_many": "{{count}} nguồn OpenCode",
+ "sourcesCount_one": "{{count}} nguồn OpenCode",
+ "sourcesCount_other": "{{count}} nguồn OpenCode"
+ },
+ "reason": "Lý do: {{reason}}",
+ "runtimeModelsSyncing": "Các mô hình rõ ràng tải từ runtime hiện tại. Mặc định vẫn khả dụng trong khi danh sách đang đồng bộ.",
+ "fastMode": {
+ "codexLabel": "Chế độ Fast (2x tín dụng)",
+ "optionalLabel": "Chế độ Fast (tùy chọn)",
+ "defaultOff": "Mặc định (Tắt)",
+ "fast": "Fast",
+ "off": "Tắt",
+ "defaultFast": "Mặc định (Fast)",
+ "defaultResolvesTo": "Mặc định hiện được giải quyết thành {{mode}}.",
+ "runtimeBackedHint": "Chế độ Fast được hỗ trợ bởi runtime và chỉ mở khóa khi mô hình khởi chạy Anthropic đã giải quyết hỗ trợ nó."
+ },
+ "anthropicExtraUsage": {
+ "pricingDocs": "Đọc tài liệu giá của Anthropic"
+ },
+ "searchModels": "Tìm mô hình",
+ "defaultModel": "Mặc định",
+ "empty": {
+ "noSearchMatches": "Không có mô hình nào khớp với tìm kiếm này.",
+ "recommendedFreeOpenCode": "Không có mô hình OpenCode miễn phí được khuyến nghị nào khả dụng trong danh sách runtime hiện tại.",
+ "freeOpenCode": "Không có mô hình OpenCode miễn phí nào khả dụng trong danh sách runtime hiện tại.",
+ "recommendedOpenCode": "Không có mô hình OpenCode được khuyến nghị nào khả dụng trong danh sách runtime hiện tại.",
+ "noModels": "Không có mô hình nào khả dụng trong danh sách runtime hiện tại."
+ },
+ "openCodeStatus": {
+ "notReadyTitle": "OpenCode chưa sẵn sàng để khởi chạy đội ngũ",
+ "freeModelsAvailableTitle": "Có sẵn các mô hình OpenCode miễn phí",
+ "providerNotConnectedTitle": "Nhà cung cấp OpenCode chưa được kết nối",
+ "readyTitle": "OpenCode đã sẵn sàng",
+ "readyMessage": "OpenCode đã vượt qua kiểm tra sẵn sàng của nhà cung cấp. Hãy chọn nó để dùng các mô hình OpenCode cho đội ngũ này.",
+ "useOpenCode": "Dùng OpenCode",
+ "badges": {
+ "check": "Kiểm tra",
+ "install": "Cài đặt",
+ "free": "Miễn phí",
+ "setup": "Thiết lập"
+ },
+ "summary": {
+ "checking": "Trạng thái OpenCode: đang kiểm tra runtime",
+ "status": "Trạng thái OpenCode: {{parts}}"
+ },
+ "summaryParts": {
+ "teamLaunchBlocked": "khởi chạy đội ngũ bị chặn",
+ "providerOptional": "kết nối nhà cung cấp là tùy chọn",
+ "providerModelsNeedSetup": "các mô hình dựa trên nhà cung cấp cần thiết lập",
+ "teamLaunchReady": "đội ngũ sẵn sàng khởi chạy",
+ "runtimeDetected": "đã phát hiện runtime",
+ "runtimeMissing": "thiếu runtime",
+ "freeWithoutAuth": "có sẵn mô hình miễn phí không cần xác thực",
+ "providerConnected": "nhà cung cấp đã kết nối",
+ "providerNotConnected": "nhà cung cấp chưa kết nối"
+ },
+ "messages": {
+ "checking": "Ứng dụng vẫn đang kiểm tra runtime OpenCode. Hãy chờ trạng thái nhà cung cấp hoàn tất, rồi thử lại.",
+ "unsupported": "OpenCode chưa được cài đặt, không tìm thấy, hoặc runtime đã phát hiện không được hỗ trợ. Hãy cài đặt hoặc cập nhật OpenCode, rồi làm mới trạng thái nhà cung cấp. Bạn cũng có thể dùng nút Cài đặt trên trang chủ.",
+ "freeAvailable": "Đã phát hiện OpenCode. Bạn có thể dùng các mô hình OpenCode miễn phí như Big Pickle mà không cần kết nối nhà cung cấp. Chỉ kết nối nhà cung cấp khi bạn muốn các mô hình dựa trên nhà cung cấp.",
+ "noFreeListed": "Đã phát hiện OpenCode, nhưng chưa có mô hình OpenCode miễn phí nào được liệt kê. Hãy làm mới trạng thái nhà cung cấp, hoặc kết nối một nhà cung cấp trong OpenCode để có các mô hình dựa trên nhà cung cấp.",
+ "launchBlocked": "OpenCode đã được cài đặt và xác thực, nhưng sự sẵn sàng khởi chạy của Agent Teams bị chặn.",
+ "ready": "OpenCode đã sẵn sàng để khởi chạy đội ngũ."
+ },
+ "loadingRuntime": "Trạng thái runtime OpenCode vẫn đang tải."
+ },
+ "advisory": {
+ "pingNotConfirmed": "Ping chưa được xác nhận",
+ "note": "Ghi chú"
+ },
+ "placeholders": {
+ "customModelId": "openai/gpt-oss-20b"
+ },
+ "routeGroups": {
+ "openCodeConfig": "Cấu hình OpenCode",
+ "builtinFree": "Tích hợp sẵn miễn phí",
+ "connectedProviders": "Nhà cung cấp đã kết nối",
+ "otherCatalog": "Danh mục OpenCode khác"
+ },
+ "pricing": {
+ "free": "Miễn phí",
+ "inputShort": "vào {{rate}}",
+ "outputShort": "ra {{rate}}",
+ "perMillionSummary": "{{summary}} / 1M",
+ "inputTitle": "Đầu vào: {{rate}} trên 1M token",
+ "outputTitle": "Đầu ra: {{rate}} trên 1M token",
+ "cacheReadTitle": "Đọc bộ nhớ đệm: {{rate}} trên 1M token",
+ "cacheWriteTitle": "Ghi bộ nhớ đệm: {{rate}} trên 1M token"
+ },
+ "defaultTooltip": {
+ "anthropicCompatibleWithResolved": "Dùng mô hình mặc định của endpoint tương thích Anthropic.\nHiện được giải quyết thành {{model}}.",
+ "anthropicCompatible": "Dùng mô hình mặc định của endpoint tương thích Anthropic.",
+ "anthropic": "Dùng mô hình mặc định của đội ngũ Claude.\nĐược giải quyết thành {{longContextModel}} với ngữ cảnh 1M, hoặc {{limitedContextModel}} với ngữ cảnh 200K khi Giới hạn ngữ cảnh được bật.",
+ "openCodeWithResolved": "Dùng mô hình mặc định OpenCode.\nHiện được giải quyết thành {{model}}.",
+ "openCode": "Dùng mô hình mặc định của runtime OpenCode.",
+ "runtime": "Dùng mặc định runtime cho nhà cung cấp đã chọn."
+ },
+ "multimodelOff": "Đa mô hình tắt",
+ "unavailableInRuntime": "Không khả dụng trong runtime hiện tại"
+ },
+ "taskDetail": {
+ "actions": {
+ "cancel": "Hủy",
+ "delete": "Xóa",
+ "markResolved": "Đánh dấu đã giải quyết",
+ "save": "Lưu"
+ },
+ "attachments": {
+ "commentAttachment": "Tệp đính kèm bình luận",
+ "fromComments": "Từ bình luận",
+ "preview": "Xem trước {{filename}}"
+ },
+ "changes": {
+ "badges": {
+ "attention": "chú ý",
+ "noSafeDiff": "không có khác biệt an toàn"
+ },
+ "empty": {
+ "noFileChangesRecorded": "Không có thay đổi tệp nào được ghi lại",
+ "noFileChangesRecordedYet": "Chưa có thay đổi tệp nào được ghi lại",
+ "noReviewableChangesRecovered": "Không khôi phục được thay đổi tệp nào có thể xem xét",
+ "noSafeDiffAvailable": "Không có khác biệt an toàn nào"
+ },
+ "loadFailed": "Không thể tải tóm tắt thay đổi tác vụ",
+ "loading": "Đang tải thay đổi...",
+ "fileCount": "{{count}} tệp",
+ "fileRowsHidden": "{{count}} hàng tệp bị ẩn",
+ "moreDiagnostics": "thêm {{count}} chẩn đoán",
+ "moreFiles": "thêm {{count}} tệp",
+ "openInEditor": "Mở trong trình soạn thảo",
+ "openTask": "Mở tác vụ {{subject}}",
+ "refresh": "Làm mới thay đổi",
+ "refreshFailed": "Làm mới thất bại: {{error}}",
+ "refreshing": "Đang làm mới",
+ "refreshingChanges": "Đang làm mới thay đổi...",
+ "refreshTeamChanges": "Làm mới thay đổi đội ngũ",
+ "refreshShort": "Làm mới",
+ "reviewDiff": "Xem xét khác biệt",
+ "reviewTaskDiff": "Xem xét khác biệt tác vụ",
+ "scannedCandidateTasks": "Đã quét {{requested}} trong {{eligible}} tác vụ ứng viên",
+ "tasksDeferred": "{{count}} tác vụ bị hoãn trong lượt này",
+ "title": "Thay đổi",
+ "fileCount_few": "{{count}} tệp",
+ "fileCount_many": "{{count}} tệp",
+ "fileCount_one": "{{count}} tệp",
+ "fileCount_other": "{{count}} tệp",
+ "fileRowsHidden_few": "{{count}} hàng tệp bị ẩn",
+ "fileRowsHidden_many": "{{count}} hàng tệp bị ẩn",
+ "fileRowsHidden_one": "{{count}} hàng tệp bị ẩn",
+ "fileRowsHidden_other": "{{count}} hàng tệp bị ẩn",
+ "moreDiagnostics_few": "thêm {{count}} chẩn đoán",
+ "moreDiagnostics_many": "thêm {{count}} chẩn đoán",
+ "moreDiagnostics_one": "thêm {{count}} chẩn đoán",
+ "moreDiagnostics_other": "thêm {{count}} chẩn đoán",
+ "moreFiles_few": "thêm {{count}} tệp",
+ "moreFiles_many": "thêm {{count}} tệp",
+ "moreFiles_one": "thêm {{count}} tệp",
+ "moreFiles_other": "thêm {{count}} tệp",
+ "tasksDeferred_few": "{{count}} tác vụ bị hoãn trong lượt này",
+ "tasksDeferred_many": "{{count}} tác vụ bị hoãn trong lượt này",
+ "tasksDeferred_one": "{{count}} tác vụ bị hoãn trong lượt này",
+ "tasksDeferred_other": "{{count}} tác vụ bị hoãn trong lượt này"
+ },
+ "clarification": {
+ "awaitingLead": "Đang chờ làm rõ từ trưởng nhóm",
+ "awaitingUser": "Đang chờ làm rõ từ bạn"
+ },
+ "description": {
+ "add": "Nhấp để thêm mô tả...",
+ "edit": "Chỉnh sửa mô tả",
+ "placeholder": "Mô tả tác vụ (hỗ trợ markdown)"
+ },
+ "loading": {
+ "fetchingTeamData": "Đang lấy dữ liệu đội ngũ",
+ "title": "Đang tải tác vụ..."
+ },
+ "logs": {
+ "newArriving": "Nhật ký tác vụ mới đang đến"
+ },
+ "notFound": "Không tìm thấy tác vụ",
+ "related": {
+ "blockedBy": "Bị chặn bởi",
+ "blocks": "Chặn",
+ "linkedFrom": "Liên kết từ",
+ "links": "Liên kết",
+ "title": "Tác vụ liên quan"
+ },
+ "review": {
+ "reviewer": "Người xem xét: {{reviewer}}"
+ },
+ "sections": {
+ "attachments": "Tệp đính kèm",
+ "changes": "Thay đổi",
+ "comments": "Bình luận",
+ "description": "Mô tả",
+ "taskLogs": "Nhật ký tác vụ",
+ "workflowHistory": "Lịch sử quy trình"
+ },
+ "unassigned": "Chưa phân công",
+ "workflow": {
+ "implementationTimeTitle": "Thời gian triển khai từ các khoảng thời gian làm việc đã lưu",
+ "inProgressTime": "Thời gian đang thực hiện {{duration}}"
+ },
+ "comments": {
+ "renderLimit": "Đang hiển thị {{formattedCount}} bình luận gần nhất để giữ giao diện phản hồi nhanh.",
+ "badges": {
+ "approved": "Đã duyệt",
+ "reviewRequested": "Đã yêu cầu xem xét"
+ },
+ "unknownTime": "thời gian không xác định",
+ "actions": {
+ "reply": "Trả lời",
+ "replyToComment": "Trả lời bình luận",
+ "showMore": "Hiện thêm bình luận ({{visible}}/{{total}})",
+ "cancelReply": "Hủy trả lời",
+ "comment": "Bình luận"
+ },
+ "attachments": {
+ "previewAlt": "Xem trước tệp đính kèm",
+ "downloadFailed": "Tải xuống thất bại"
+ },
+ "replyingTo": "Đang trả lời",
+ "input": {
+ "placeholder": "Thêm bình luận... (Enter để gửi)",
+ "charsLeft": "Còn {{count}} ký tự",
+ "charsLeft_one": "Còn {{count}} ký tự",
+ "charsLeft_other": "Còn {{count}} ký tự",
+ "charsLeft_few": "Còn {{count}} ký tự",
+ "charsLeft_many": "Còn {{count}} ký tự"
+ }
+ },
+ "workflowTimeline": {
+ "empty": "Không có lịch sử quy trình nào được ghi lại",
+ "currentImplementationInterval": "Khoảng triển khai hiện tại",
+ "implementationIntervalEnded": "Khoảng triển khai kết thúc tại lần chuyển này",
+ "runningPrefix": "đang chạy ",
+ "createdAs": "Được tạo dưới dạng",
+ "by": "bởi",
+ "reassigned": "Đã phân công lại",
+ "assignedTo": "Đã phân công cho",
+ "unassignedFrom": "Đã bỏ phân công khỏi",
+ "ownerChanged": "Chủ sở hữu đã thay đổi",
+ "reviewRequested": "Đã yêu cầu xem xét",
+ "reviewStarted": "Đã bắt đầu xem xét",
+ "changesRequested": "Đã yêu cầu thay đổi",
+ "approved": "Đã duyệt",
+ "unknownEvent": "Sự kiện không xác định"
+ },
+ "reviewStates": {
+ "approved": "Đã duyệt",
+ "needsFix": "Cần sửa",
+ "inReview": "Đang xem xét"
+ }
+ },
+ "tasks": {
+ "createTask": {
+ "assignee": "Người được giao",
+ "assigneeOptional": "Người được giao (tùy chọn)",
+ "blockedByOptional": "Tác vụ chặn (tùy chọn)",
+ "blockedBySummary": "Tác vụ sẽ bị chặn bởi: {{tasks}}",
+ "cancel": "Hủy",
+ "create": "Tạo",
+ "creating": "Đang tạo...",
+ "description": "Tác vụ sẽ được tạo trong thư mục tasks/ của đội ngũ và xuất hiện trên bảng Kanban.",
+ "descriptionOptional": "Mô tả (tùy chọn)",
+ "detailsPlaceholder": "Chi tiết tác vụ (hỗ trợ markdown)",
+ "hideOptionalFields": "Ẩn các trường tùy chọn",
+ "offlineNotice": {
+ "after": "- hãy khởi chạy đội ngũ để bắt đầu thực thi.",
+ "before": "Đội ngũ đang ngoại tuyến. Tác vụ sẽ được thêm vào"
+ },
+ "promptOptional": "Prompt cho người được giao (tùy chọn)",
+ "promptPlaceholder": "Hướng dẫn tùy chỉnh cho thành viên đội ngũ...",
+ "relatedOptional": "Tác vụ liên quan (tùy chọn)",
+ "relatedSummary": "Liên quan: {{tasks}}",
+ "saved": "Đã lưu",
+ "searchTasks": "Tìm tác vụ...",
+ "selectMember": "Chọn một thành viên",
+ "selectMemberOptional": "Chọn thành viên...",
+ "showOptionalFields": "Hiện các trường tùy chọn",
+ "startImmediately": "Bắt đầu ngay lập tức",
+ "startOfflineHint": "Đội ngũ đang ngoại tuyến. Hãy khởi chạy đội ngũ trước để bắt đầu tác vụ ngay lập tức.",
+ "subject": "Chủ đề",
+ "subjectPlaceholder": "Cần làm gì?",
+ "title": "Tạo tác vụ",
+ "todo": "CẦN LÀM"
+ },
+ "list": {
+ "columns": {
+ "blockedBy": "Bị chặn bởi",
+ "blocks": "Chặn",
+ "id": "ID",
+ "owner": "Chủ sở hữu",
+ "status": "Trạng thái",
+ "subject": "Chủ đề"
+ },
+ "empty": "Không có tác vụ nào trong đội ngũ này",
+ "filters": {
+ "allOwners": "Tất cả chủ sở hữu",
+ "allStatuses": "Tất cả trạng thái",
+ "ownerAria": "Lọc tác vụ theo chủ sở hữu",
+ "statusAria": "Lọc tác vụ theo trạng thái"
+ },
+ "showing": "Đang hiển thị {{shown}} trên {{total}}"
+ },
+ "status": {
+ "completed": "completed",
+ "deleted": "deleted",
+ "inProgress": "in_progress",
+ "pending": "pending"
+ },
+ "statusSummary": {
+ "progressAria": "Tác vụ {{completed}}/{{total}} đã hoàn thành",
+ "inProgress": "{{count}} in_progress",
+ "inProgress_one": "{{count}} in_progress",
+ "inProgress_other": "{{count}} in_progress",
+ "inProgress_few": "{{count}} in_progress",
+ "inProgress_many": "{{count}} in_progress",
+ "pending": "{{count}} pending",
+ "pending_one": "{{count}} pending",
+ "pending_other": "{{count}} pending",
+ "pending_few": "{{count}} pending",
+ "pending_many": "{{count}} pending",
+ "completed": "{{count}} completed",
+ "completed_one": "{{count}} completed",
+ "completed_other": "{{count}} completed",
+ "completed_few": "{{count}} completed",
+ "completed_many": "{{count}} completed"
+ },
+ "unassigned": "Chưa phân công",
+ "teamPrefix": "Đội ngũ:",
+ "openTask": "Mở tác vụ",
+ "deleteConfirm": {
+ "title": "Xóa tác vụ",
+ "message": "Chuyển tác vụ #{{taskId}} vào thùng rác?",
+ "confirmLabel": "Xóa",
+ "cancelLabel": "Hủy"
+ }
+ },
+ "editor": {
+ "actions": {
+ "cancel": "Hủy",
+ "closeEditor": "Đóng trình soạn thảo",
+ "closeTab": "Đóng tab",
+ "closeTooltip": "Đóng trình soạn thảo (Esc)",
+ "discard": "Bỏ",
+ "discardAndClose": "Bỏ & Đóng",
+ "keep": "Giữ",
+ "keepMine": "Giữ bản của tôi",
+ "keyboardShortcuts": "Phím tắt",
+ "overwrite": "Ghi đè",
+ "refreshAria": "Làm mới (F5)",
+ "refreshTooltip": "Làm mới trạng thái git (F5)",
+ "reload": "Tải lại",
+ "retry": "Thử lại",
+ "save": "Lưu",
+ "saveAllAndClose": "Lưu tất cả & Đóng"
+ },
+ "ariaLabel": "Trình soạn thảo dự án",
+ "dialogs": {
+ "conflictDescription": "Tệp đã bị sửa đổi từ bên ngoài kể từ khi bạn mở nó. Ghi đè bằng các thay đổi của bạn?",
+ "conflictTitle": "Xung đột khi lưu",
+ "unsavedDescription": "Bạn có các thay đổi chưa lưu. Bạn muốn làm gì?",
+ "unsavedFileDescription": "Tệp này có các thay đổi chưa lưu. Bạn muốn làm gì?",
+ "unsavedTitle": "Thay đổi chưa lưu"
+ },
+ "newFile": {
+ "validation": {
+ "nameRequired": "Tên không được để trống",
+ "invalidName": "Tên không hợp lệ",
+ "invalidCharacters": "Tên chứa ký tự không hợp lệ",
+ "nameTooLong": "Tên quá dài"
+ },
+ "placeholders": {
+ "fileName": "Tên tệp...",
+ "folderName": "Tên thư mục..."
+ },
+ "aria": {
+ "newFileName": "Tên tệp mới",
+ "newFolderName": "Tên thư mục mới"
+ }
+ },
+ "draftRecovered": "Đã khôi phục các thay đổi chưa lưu từ một phiên trước.",
+ "externalChange": {
+ "changed": "Tệp đã thay đổi trên ổ đĩa.",
+ "deleted": "Tệp không còn tồn tại trên ổ đĩa."
+ },
+ "saveFailed": "Lưu thất bại: {{error}}",
+ "sidebar": {
+ "explorer": "Trình duyệt tệp",
+ "hide": "Ẩn thanh bên",
+ "hideWithShortcut": "Ẩn thanh bên ({{shortcut}})",
+ "show": "Hiện thanh bên",
+ "showWithShortcut": "Hiện thanh bên ({{shortcut}})"
+ },
+ "searchInFiles": {
+ "title": "Tìm trong tệp",
+ "closeSearch": "Đóng tìm kiếm",
+ "closeSearchShortcut": "Đóng tìm kiếm (Esc)",
+ "searchPlaceholder": "Tìm kiếm...",
+ "matchCase": "Khớp chữ hoa/thường",
+ "matchCaseToggle": "Aa",
+ "noResults": "Không tìm thấy kết quả",
+ "resultsSummary": "{{count}} kết quả khớp trong {{fileCount}} tệp",
+ "resultsSummary_one": "{{count}} kết quả khớp trong {{fileCount}} tệp",
+ "truncated": "(đã cắt bớt)",
+ "resultsSummary_few": "{{count}} kết quả khớp trong {{fileCount}} tệp",
+ "resultsSummary_many": "{{count}} kết quả khớp trong {{fileCount}} tệp",
+ "resultsSummary_other": "{{count}} kết quả khớp trong {{fileCount}} tệp"
+ },
+ "fileTree": {
+ "failedToLoadFiles": "Không thể tải tệp: {{error}}",
+ "loading": "Đang tải tệp...",
+ "empty": "Không tìm thấy tệp nào",
+ "dropForProjectRoot": "Thả vào đây cho thư mục gốc dự án",
+ "moveToTrash": "Chuyển vào thùng rác",
+ "moveToTrashConfirm": "Chuyển \"{{name}}\" vào thùng rác?",
+ "cancel": "Hủy"
+ },
+ "goToLine": {
+ "title": "Đi đến dòng",
+ "position": "(hiện tại: {{current}}, tổng: {{total}})",
+ "placeholder": "Số dòng, +độ lệch, -độ lệch, hoặc %",
+ "go": "Đi"
+ },
+ "searchPanel": {
+ "previousMatch": "Kết quả khớp trước",
+ "nextMatch": "Kết quả khớp tiếp",
+ "close": "Đóng",
+ "replacePlaceholder": "Thay thế",
+ "replace": "Thay thế",
+ "replaceNext": "Thay thế kế tiếp",
+ "all": "Tất cả",
+ "replaceAll": "Thay thế tất cả"
+ },
+ "statusBar": {
+ "position": "Dòng {{line}}, Cột {{col}}",
+ "enableWatcher": "Bật trình theo dõi tệp",
+ "disableWatcher": "Tắt trình theo dõi tệp",
+ "watch": "theo dõi",
+ "watching": "đang theo dõi",
+ "watchExternalChanges": "Theo dõi thay đổi từ bên ngoài",
+ "disableExternalWatcher": "Tắt trình theo dõi thay đổi từ bên ngoài",
+ "encodingUtf8": "UTF-8",
+ "spaces": "Khoảng trắng: {{count}}"
+ },
+ "imagePreview": {
+ "loading": "Đang tải bản xem trước...",
+ "openFullSize": "Mở bản xem trước kích thước đầy đủ",
+ "openSystemViewer": "Mở trong trình xem hệ thống"
+ },
+ "quickOpen": {
+ "title": "Mở nhanh",
+ "searchPlaceholder": "Tìm tệp theo tên...",
+ "loading": "Đang tải tệp...",
+ "empty": "Không tìm thấy tệp nào"
+ },
+ "errorBoundary": {
+ "crashed": "Trình soạn thảo gặp sự cố",
+ "unknownError": "Lỗi không xác định"
+ },
+ "binaryPlaceholder": {
+ "file": "Tệp nhị phân ({{size}})"
+ },
+ "unsavedChanges": "Thay đổi chưa lưu",
+ "empty": {
+ "selectFile": "Chọn một tệp từ cây để chỉnh sửa"
+ },
+ "search": {
+ "toggleReplace": "Bật/tắt thay thế",
+ "placeholder": "Tìm kiếm"
+ },
+ "shortcuts": {
+ "title": "Phím tắt",
+ "groups": {
+ "fileOperations": "Thao tác tệp",
+ "search": "Tìm kiếm",
+ "navigation": "Điều hướng",
+ "editing": "Chỉnh sửa",
+ "markdown": "Markdown",
+ "general": "Chung"
+ },
+ "actions": {
+ "quickOpen": "Mở nhanh",
+ "save": "Lưu",
+ "saveAll": "Lưu tất cả",
+ "closeTab": "Đóng tab",
+ "findInFile": "Tìm trong tệp",
+ "searchInFiles": "Tìm trong các tệp",
+ "goToLine": "Đi đến dòng",
+ "nextTab": "Tab tiếp theo",
+ "previousTab": "Tab trước đó",
+ "cycleTabs": "Chuyển vòng qua các tab",
+ "toggleSidebar": "Bật/tắt thanh bên",
+ "undo": "Hoàn tác",
+ "redo": "Làm lại",
+ "selectNextMatch": "Chọn kết quả khớp tiếp theo",
+ "toggleComment": "Bật/tắt chú thích",
+ "splitPreview": "Chia đôi xem trước",
+ "fullPreview": "Xem trước đầy đủ",
+ "closeEditor": "Đóng trình soạn thảo"
+ }
+ },
+ "toolbar": {
+ "enableWordWrap": "Bật ngắt dòng",
+ "disableWordWrap": "Tắt ngắt dòng",
+ "closeSplitPreview": "Đóng xem trước chia đôi",
+ "closePreview": "Đóng xem trước"
+ }
+ },
+ "launch": {
+ "actions": {
+ "createSchedule": "Tạo lịch",
+ "creating": "Đang tạo...",
+ "goToDashboard": "Đến Bảng điều khiển",
+ "launchTeam": "Khởi chạy đội ngũ",
+ "launching": "Đang khởi chạy...",
+ "relaunchTeam": "Khởi chạy lại đội ngũ",
+ "relaunching": "Đang khởi chạy lại...",
+ "saveChanges": "Lưu thay đổi",
+ "saving": "Đang lưu..."
+ },
+ "billing": {
+ "prefix": "Kể từ ngày 15 tháng 6 năm 2026, Anthropic tính phí",
+ "readArticle": "Đọc bài viết của Anthropic",
+ "suffix": "và mức sử dụng Agent SDK từ tín dụng Agent SDK hàng tháng, tách biệt với giới hạn Claude Code tương tác. Tín dụng được đặt lại mỗi chu kỳ thanh toán và tín dụng chưa dùng không được chuyển sang kỳ sau."
+ },
+ "conflict": {
+ "description": "Chạy hai đội ngũ trong cùng một thư mục là rủi ro - chúng có thể xung đột khi chỉnh sửa cùng các tệp. Hãy cân nhắc dùng một thư mục khác hoặc một git worktree để cô lập.",
+ "title": "Một đội ngũ khác \"{{team}}\" đã đang chạy cho thư mục làm việc này",
+ "workingDirectory": "Thư mục làm việc:"
+ },
+ "description": {
+ "createSchedule": "Lên lịch thực thi tác vụ Claude tự động",
+ "createScheduleForTeam": "Lên lịch chạy tự động cho đội ngũ \"{{team}}\"",
+ "editSchedule": "Đang chỉnh sửa lịch cho đội ngũ \"{{team}}\"",
+ "launchPrefix": "Khởi động đội ngũ",
+ "launchSuffix": "qua Claude CLI cục bộ.",
+ "relaunchPrefix": "Dừng lần chạy hiện tại cho",
+ "relaunchSuffix": "và khởi động lại nó qua Claude CLI cục bộ."
+ },
+ "prepare": {
+ "action": {
+ "launch": "khởi chạy",
+ "relaunch": "khởi chạy lại"
+ },
+ "blocked": "Môi trường runtime không khả dụng - {{action}} bị chặn",
+ "checkingProviders": "Đang kiểm tra các nhà cung cấp đã chọn...",
+ "failed": "Không thể chuẩn bị các nhà cung cấp đã chọn",
+ "preflight": "Kiểm tra trước để bắt lỗi trước khi {{action}}",
+ "preparingEnvironment": "Đang chuẩn bị môi trường...",
+ "ready": "Tất cả nhà cung cấp đã chọn đều sẵn sàng.",
+ "readyWithNotes": "Tất cả nhà cung cấp đã chọn đều sẵn sàng, kèm ghi chú.",
+ "unsupportedPreload": "Phiên bản preload hiện tại không hỗ trợ team:prepareProvisioning. Hãy khởi động lại ứng dụng dev.",
+ "selectWorkingDirectory": "Chọn một thư mục làm việc để xác thực môi trường khởi chạy.",
+ "someProvidersNeedAttention": "Một số nhà cung cấp đã chọn cần được chú ý."
+ },
+ "prompt": {
+ "label": "Prompt",
+ "oneShotPrefix": "Prompt này sẽ được truyền cho",
+ "oneShotSuffix": "để thực thi một lần",
+ "saved": "Đã lưu",
+ "schedulePlaceholder": "Hướng dẫn để Claude thực thi theo lịch...",
+ "teamLeadOptional": "Prompt cho trưởng nhóm (tùy chọn)",
+ "teamLeadPlaceholder": "Hướng dẫn cho trưởng nhóm..."
+ },
+ "providerChanged": "Nhà cung cấp đã đổi từ {{from}} sang {{to}}. Phiên trưởng nhóm trước đó sẽ không được tiếp tục, và trưởng nhóm sẽ bắt đầu với ngữ cảnh mới để runtime mới được áp dụng đúng cách.",
+ "relaunchFreshSession": "Khởi chạy lại đội ngũ bắt đầu một phiên trưởng nhóm mới. Trạng thái bền vững của đội ngũ, bảng tác vụ và cấu hình thành viên được khôi phục vào prompt khởi chạy.",
+ "relaunchWarning": {
+ "description": "Việc lưu các cài đặt này sẽ dừng tiến trình đội ngũ hiện tại, lưu danh sách đã cập nhật, và khởi chạy lại đội ngũ với runtime mới.",
+ "title": "Khởi chạy lại sẽ khởi động lại lần chạy hiện tại của đội ngũ"
+ },
+ "schedule": {
+ "labelOptional": "Nhãn (tùy chọn)",
+ "labelPlaceholder": "vd: Xem xét mã hàng ngày, Kiểm thử ban đêm...",
+ "maxBudgetUsd": "Ngân sách tối đa (USD)",
+ "maxTurns": "Số lượt tối đa",
+ "noLimit": "Không giới hạn",
+ "noMatches": "Không có đội ngũ nào khớp với tìm kiếm của bạn.",
+ "noTeams": "Không có đội ngũ nào khả dụng. Hãy tạo một đội ngũ trước.",
+ "searchTeams": "Tìm đội ngũ...",
+ "selectTeam": "Chọn một đội ngũ...",
+ "team": "Đội ngũ",
+ "title": "Lịch"
+ },
+ "title": {
+ "createSchedule": "Tạo lịch",
+ "editSchedule": "Chỉnh sửa lịch",
+ "launch": "Khởi chạy đội ngũ",
+ "relaunch": "Khởi chạy lại đội ngũ"
+ },
+ "errors": {
+ "loadProjectsFailed": "Không thể tải dự án",
+ "saveScheduleFailed": "Không thể lưu lịch",
+ "relaunchFailed": "Không thể khởi chạy lại đội ngũ",
+ "launchFailed": "Không thể khởi chạy đội ngũ"
+ },
+ "validation": {
+ "openCodeLeadModelRequired": "Trưởng nhóm OpenCode yêu cầu một mô hình được chọn.",
+ "openCodeTeammateRequired": "Trưởng nhóm OpenCode yêu cầu ít nhất một thành viên OpenCode.",
+ "selectWorkingDirectory": "Chọn thư mục làm việc (cwd)",
+ "fixMemberNames": "Sửa tên thành viên trước khi khởi chạy",
+ "memberNamesUnique": "Tên thành viên phải là duy nhất trước khi khởi chạy"
+ },
+ "optionalSettings": {
+ "relaunchTitle": "Cài đặt khởi chạy lại",
+ "title": "Cài đặt khởi chạy tùy chọn",
+ "relaunchDescription": "Xem lại danh sách và runtime của trưởng nhóm trước khi khởi động lại đội ngũ.",
+ "description": "Giữ luồng khởi chạy tập trung vào đường dẫn dự án và chỉ mở rộng phần này khi bạn muốn kiểm soát thêm."
+ }
+ },
+ "list": {
+ "actions": {
+ "copyTeam": "Sao chép đội ngũ",
+ "createTeam": "Tạo đội ngũ",
+ "deleteForever": "Xóa vĩnh viễn",
+ "deletePermanently": "Xóa vĩnh viễn",
+ "deleteTeam": "Xóa đội ngũ",
+ "launching": "Đang khởi chạy...",
+ "launchTeam": "Khởi chạy đội ngũ",
+ "relaunchTeam": "Khởi chạy lại đội ngũ",
+ "restore": "Khôi phục",
+ "restoreTeam": "Khôi phục đội ngũ",
+ "retry": "Thử lại",
+ "stopTeam": "Dừng đội ngũ",
+ "stopping": "Đang dừng..."
+ },
+ "electronOnly": {
+ "description": "Ở chế độ trình duyệt, không thể truy cập các thư mục `~/.claude/teams` cục bộ.",
+ "title": "Đội ngũ chỉ khả dụng ở chế độ Electron"
+ },
+ "empty": {
+ "description": "Tạo một đội ngũ tại đây để bắt đầu. Nó sẽ tự động hiển thị trong danh sách.",
+ "localOnly": "Tạo đội ngũ chỉ khả dụng ở chế độ Electron cục bộ.",
+ "title": "Không tìm thấy đội ngũ nào"
+ },
+ "filter": {
+ "clearAll": "Xóa tất cả",
+ "label": "Lọc đội ngũ",
+ "projectPriority": "Ưu tiên dự án",
+ "status": "Trạng thái"
+ },
+ "loadFailed": "Không thể tải đội ngũ",
+ "loading": "Đang tải đội ngũ...",
+ "localOnly": "Chỉ khả dụng ở chế độ Electron cục bộ.",
+ "membersCount": "Thành viên: {{count}}",
+ "membersCount_few": "Thành viên: {{count}}",
+ "membersCount_many": "Thành viên: {{count}}",
+ "membersCount_one": "Thành viên: {{count}}",
+ "membersCount_other": "Thành viên: {{count}}",
+ "noDescription": "Không có mô tả",
+ "noMatches": "Không có đội ngũ nào khớp với bộ lọc hiện tại",
+ "partial": {
+ "pending": "Lần khởi chạy gần nhất vẫn đang đối soát.",
+ "skipped": "Lần khởi chạy gần nhất đã bỏ qua một số thành viên.",
+ "skippedWithCount": "Lần khởi chạy gần nhất đã bỏ qua {{count}}/{{expected}} thành viên.",
+ "skippedWithCount_few": "Lần khởi chạy gần nhất đã bỏ qua {{count}}/{{expected}} thành viên.",
+ "skippedWithCount_many": "Lần khởi chạy gần nhất đã bỏ qua {{count}}/{{expected}} thành viên.",
+ "skippedWithCount_one": "Lần khởi chạy gần nhất đã bỏ qua {{count}}/{{expected}} thành viên.",
+ "skippedWithCount_other": "Lần khởi chạy gần nhất đã bỏ qua {{count}}/{{expected}} thành viên.",
+ "stopped": "Lần khởi chạy gần nhất đã dừng trước khi tất cả thành viên tham gia.",
+ "stoppedWithCount": "Lần khởi chạy gần nhất đã dừng trước khi {{count}}/{{expected}} thành viên tham gia.",
+ "stoppedWithCount_few": "Lần khởi chạy gần nhất đã dừng trước khi {{count}}/{{expected}} thành viên tham gia.",
+ "stoppedWithCount_many": "Lần khởi chạy gần nhất đã dừng trước khi {{count}}/{{expected}} thành viên tham gia.",
+ "stoppedWithCount_one": "Lần khởi chạy gần nhất đã dừng trước khi {{count}}/{{expected}} thành viên tham gia.",
+ "stoppedWithCount_other": "Lần khởi chạy gần nhất đã dừng trước khi {{count}}/{{expected}} thành viên tham gia."
+ },
+ "searchPlaceholder": "Tìm đội ngũ...",
+ "sections": {
+ "otherTeams": "Đội ngũ khác",
+ "projectTeams": "Đội ngũ cho {{project}}",
+ "selectedProject": "dự án đã chọn"
+ },
+ "solo": "Solo",
+ "status": {
+ "active": "Đang hoạt động",
+ "deleted": "Đã xóa",
+ "launching": "Đang khởi chạy...",
+ "offline": "Ngoại tuyến",
+ "partialFailure": "Khởi chạy thất bại giữa chừng",
+ "partialPending": "Đang chờ khởi tạo",
+ "partialSkipped": "Khởi chạy đã bỏ qua thành viên",
+ "running": "Đang chạy"
+ },
+ "title": "Chọn đội ngũ",
+ "trash": "Thùng rác ({{count}})",
+ "trash_few": "Thùng rác ({{count}})",
+ "trash_many": "Thùng rác ({{count}})",
+ "trash_one": "Thùng rác ({{count}})",
+ "trash_other": "Thùng rác ({{count}})",
+ "deleteDraft": {
+ "title": "Xóa bản nháp",
+ "message": "Xóa đội ngũ nháp \"{{teamName}}\"? Thao tác này không thể hoàn tác.",
+ "confirmLabel": "Xóa",
+ "cancelLabel": "Hủy"
+ },
+ "moveToTrash": {
+ "title": "Chuyển vào thùng rác",
+ "message": "Chuyển đội ngũ \"{{teamName}}\" vào thùng rác? Bạn có thể khôi phục lại sau.",
+ "confirmLabel": "Chuyển vào thùng rác",
+ "cancelLabel": "Hủy"
+ },
+ "deleteForever": {
+ "title": "Xóa vĩnh viễn",
+ "message": "Xóa đội ngũ \"{{teamName}}\" vĩnh viễn? Tất cả dữ liệu sẽ bị mất.",
+ "confirmLabel": "Xóa vĩnh viễn",
+ "cancelLabel": "Hủy"
+ }
+ },
+ "messageComposer": {
+ "crossTeam": {
+ "hint": "Mẹo: Tin nhắn giữa các đội ngũ đi đến trưởng nhóm của đội ngũ đích. Nếu bạn muốn phản hồi quay lại trưởng nhóm của bạn thay vì bạn, hãy nói rõ điều đó trong tin nhắn."
+ },
+ "attachments": {
+ "attachFiles": "Đính kèm tệp (dán hoặc kéo & thả)",
+ "unavailable": "Tệp đính kèm không khả dụng",
+ "disabledHint": "Tệp đính kèm được hỗ trợ cho trưởng nhóm trực tuyến và thành viên OpenCode trực tuyến. Hãy xóa tệp đính kèm hoặc đổi người nhận.",
+ "restrictions": {
+ "crossTeam": "Tệp đính kèm không được hỗ trợ cho tin nhắn giữa các đội ngũ",
+ "teamOffline": "Đội ngũ phải trực tuyến để đính kèm tệp",
+ "unsupportedRecipient": "Tệp có thể được gửi đến trưởng nhóm hoặc thành viên OpenCode",
+ "openCodeOffline": "Đội ngũ phải trực tuyến để đính kèm tệp cho thành viên OpenCode",
+ "sending": "Hãy chờ tin nhắn hiện tại gửi xong trước khi thêm tệp",
+ "maximumReached": "Đã đạt số lượng tệp đính kèm tối đa",
+ "leadOnly": "Tệp chỉ có thể được gửi đến trưởng nhóm"
+ }
+ },
+ "slash": {
+ "restrictions": {
+ "attachments": "Lệnh slash yêu cầu một trưởng nhóm đang hoạt động và không thể được gửi kèm tệp đính kèm",
+ "crossTeam": "Lệnh slash chỉ có thể được chạy trên trưởng nhóm hiện tại",
+ "notLead": "Lệnh slash chỉ có thể được gửi đến trưởng nhóm",
+ "leadOffline": "Lệnh slash yêu cầu trưởng nhóm phải trực tuyến"
+ }
+ },
+ "status": {
+ "reusedCrossTeamRequest": "Đã tái sử dụng yêu cầu giữa các đội ngũ gần đây",
+ "teamOffline": "Đội ngũ ngoại tuyến"
+ },
+ "revision": {
+ "editing": "Đang chỉnh sửa tin nhắn trước đó",
+ "cancel": "Hủy",
+ "tooltip": "Yêu cầu agent bỏ qua tin nhắn trước đó và khôi phục nó vào trình soạn."
+ },
+ "input": {
+ "charsLeft": "Còn {{count}} ký tự",
+ "charsLeft_one": "Còn {{count}} ký tự",
+ "charsLeft_other": "Còn {{count}} ký tự",
+ "teamLaunchingPlaceholder": "Đội ngũ đang khởi chạy... tin nhắn sẽ được xếp hàng để gửi vào hộp thư.",
+ "crossTeamPlaceholder": "Tin nhắn giữa các đội ngũ tới {{team}}...",
+ "teamFallback": "đội ngũ",
+ "placeholder": "Viết một tin nhắn... (Enter để gửi, Shift+Enter để xuống dòng)",
+ "slashTip": "Mẹo: Bạn có thể dùng \"/\" để chạy bất kỳ lệnh Claude nào.",
+ "charsLeft_few": "Còn {{count}} ký tự",
+ "charsLeft_many": "Còn {{count}} ký tự"
+ },
+ "teamSelector": {
+ "thisTeam": "Đội ngũ này",
+ "current": "hiện tại",
+ "online": "trực tuyến",
+ "offline": "ngoại tuyến",
+ "onlineTitle": "Trực tuyến",
+ "offlineTitle": "Ngoại tuyến"
+ },
+ "recipient": {
+ "select": "Chọn...",
+ "searchPlaceholder": "Tìm kiếm...",
+ "noResults": "Không có kết quả"
+ },
+ "actions": {
+ "voiceToText": "Giọng nói thành văn bản",
+ "send": "Gửi",
+ "sendingUnavailableLaunching": "Không thể gửi khi đội ngũ đang khởi chạy"
+ }
+ },
+ "claudeLogs": {
+ "filter": {
+ "ariaLabel": "Lọc nhật ký",
+ "tooltip": "Lọc nhật ký",
+ "sections": {
+ "stream": "Luồng",
+ "content": "Nội dung"
+ },
+ "kinds": {
+ "output": "Kết quả",
+ "thinking": "Suy nghĩ",
+ "tool": "Lệnh gọi công cụ"
+ },
+ "actions": {
+ "reset": "Đặt lại",
+ "save": "Lưu"
+ },
+ "streams": {
+ "stdout": "stdout",
+ "stderr": "stderr"
+ }
+ },
+ "rawLineCount": "{{formattedCount}} dòng thô",
+ "rawLineCount_one": "{{formattedCount}} dòng thô",
+ "rawLinesCaptured": "đã ghi {{count}}",
+ "emptyRawLogs": "{{count}}; chưa có dòng nào là kết quả của trợ lý/công cụ.",
+ "noLogsYet": "Chưa có nhật ký nào.",
+ "teamNotRunning": "Đội ngũ không đang chạy.",
+ "searchPlaceholder": "Tìm nhật ký...",
+ "clearSearch": "Xóa tìm kiếm",
+ "newCount": "+{{count}} mới",
+ "loading": "Đang tải...",
+ "showMore": "Xem thêm",
+ "noLogsCaptured": "Không có nhật ký nào được ghi lại.",
+ "noMatchingLogs": "Không có nhật ký nào phù hợp.",
+ "rawLineCount_few": "{{formattedCount}} dòng thô",
+ "rawLineCount_many": "{{formattedCount}} dòng thô",
+ "rawLineCount_other": "{{formattedCount}} dòng thô",
+ "openFullscreen": "Mở nhật ký toàn màn hình",
+ "fullscreen": "Toàn màn hình",
+ "viewingFullscreen": "Đang xem ở chế độ toàn màn hình",
+ "logsTitle": "Nhật ký",
+ "sourceSelect": {
+ "placeholder": "Chọn nguồn nhật ký...",
+ "searchPlaceholder": "Tìm nguồn nhật ký...",
+ "emptyMessage": "Không tìm thấy nguồn nhật ký nào.",
+ "ariaLabel": "Nguồn nhật ký",
+ "leadLabel": "Trưởng nhóm",
+ "selectSourceEmpty": "Chọn một nguồn nhật ký.",
+ "leadDescription": "Trưởng nhóm",
+ "removedLabel": "đã xóa",
+ "removedDescription": "Đã xóa"
+ }
+ },
+ "agentGraph": {
+ "popover": {
+ "externalTeam": "Đội ngũ bên ngoài",
+ "process": {
+ "startedBy": "Được khởi động bởi:",
+ "at": "Lúc:",
+ "openUrl": "Mở URL"
+ },
+ "overflow": {
+ "hiddenTasks": "Tác vụ ẩn",
+ "empty": "Không có tác vụ ẩn nào."
+ },
+ "member": {
+ "lead": "Trưởng nhóm",
+ "workingOn": "đang làm",
+ "recentTools": "Công cụ gần đây",
+ "spawn": {
+ "waitingToStart": "đang chờ khởi động",
+ "starting": "đang khởi động",
+ "failed": "thất bại"
+ },
+ "state": {
+ "active": "đang hoạt động",
+ "idle": "rảnh",
+ "offline": "ngoại tuyến",
+ "runningTool": "đang chạy công cụ"
+ },
+ "activeTool": {
+ "running": "Đang chạy công cụ",
+ "failed": "Công cụ thất bại",
+ "finished": "Công cụ đã hoàn thành"
+ },
+ "actions": {
+ "message": "Tin nhắn",
+ "profile": "Hồ sơ",
+ "task": "Tác vụ"
+ }
+ }
+ },
+ "logPreview": {
+ "logs": "Nhật ký",
+ "loading": "Đang tải nhật ký",
+ "more": "+{{count}} nữa",
+ "more_one": "+{{count}} nữa",
+ "more_other": "+{{count}} nữa",
+ "more_few": "+{{count}} nữa",
+ "more_many": "+{{count}} nữa",
+ "unsupportedProvider": "Nhà cung cấp không được hỗ trợ",
+ "openCodeLogsDelayed": "Nhật ký OpenCode bị trễ",
+ "logsUnavailable": "Nhật ký không khả dụng",
+ "noRecentLogs": "Không có nhật ký gần đây",
+ "toolError": "Lỗi công cụ",
+ "toolResult": "Kết quả công cụ",
+ "toolUse": "Sử dụng công cụ",
+ "thinking": "Suy nghĩ",
+ "error": "Lỗi",
+ "logEvent": "Sự kiện nhật ký",
+ "noErrorOutput": "Không có kết quả lỗi",
+ "noOutput": "Không có kết quả",
+ "noInput": "Không có đầu vào"
+ },
+ "blockingEdge": {
+ "title": "Phụ thuộc chặn",
+ "blocks": "chặn",
+ "close": "Đóng",
+ "blockingHiddenTasks": "Tác vụ ẩn đang chặn",
+ "blockedHiddenTasks": "Tác vụ ẩn bị chặn",
+ "links_one": "{{count}} liên kết",
+ "links_other": "{{count}} liên kết",
+ "hiddenBlockingLinks_one": "{{count}} liên kết chặn bị ẩn",
+ "hiddenBlockingLinks_other": "{{count}} liên kết chặn bị ẩn",
+ "hiddenTaskStack": "Ngăn xếp tác vụ ẩn",
+ "hiddenTasks_one": "{{count}} tác vụ ẩn",
+ "hiddenTasks_other": "{{count}} tác vụ ẩn",
+ "task": "Tác vụ",
+ "openBlockerStack": "Mở ngăn xếp tác vụ chặn",
+ "openBlockedStack": "Mở ngăn xếp tác vụ bị chặn",
+ "openBlockerTask": "Mở tác vụ chặn",
+ "openBlockedTask": "Mở tác vụ bị chặn"
+ },
+ "activityHud": {
+ "activity": "Hoạt động",
+ "noRecentActivity": "Không có hoạt động gần đây",
+ "more": "+{{count}} nữa",
+ "more_one": "+{{count}} nữa",
+ "more_other": "+{{count}} nữa",
+ "more_few": "+{{count}} nữa",
+ "more_many": "+{{count}} nữa"
+ },
+ "provisioning": {
+ "launchDetails": "Chi tiết khởi chạy",
+ "launchDetailsDescription": "Tiến trình khởi chạy đội ngũ chi tiết, kết quả trực tiếp và nhật ký CLI."
+ }
+ },
+ "projectPath": {
+ "label": "Dự án",
+ "source": {
+ "claude": "Được Claude tìm thấy",
+ "codex": "Được Codex tìm thấy",
+ "mixed": "Được Claude và Codex tìm thấy"
+ },
+ "deleted": {
+ "title": "Thư mục dự án không còn tồn tại",
+ "label": "Đã xóa"
+ },
+ "mode": {
+ "projectList": "Từ danh sách dự án",
+ "customPath": "Đường dẫn tùy chỉnh"
+ },
+ "loadingProjects": "Đang tải dự án...",
+ "selectProject": "Chọn một dự án...",
+ "searchPlaceholder": "Tìm dự án theo tên hoặc đường dẫn",
+ "empty": "Không tìm thấy gì",
+ "selectFromList": "Chọn một dự án từ danh sách",
+ "noProjects": "Không tìm thấy dự án nào, hãy chuyển sang đường dẫn tùy chỉnh.",
+ "customWorkingDirectory": "Thư mục làm việc tùy chỉnh",
+ "browse": "Duyệt",
+ "createAutomatically": "Nếu thư mục không tồn tại, nó sẽ được tạo tự động."
+ },
+ "members": {
+ "badges": {
+ "worktree": "worktree"
+ },
+ "runtimeTelemetry": {
+ "title": "Tải runtime cục bộ",
+ "description": "Chỉ tiến trình cha và con. Suy luận LLM từ xa không được tính.",
+ "cpu": "CPU",
+ "memory": "Bộ nhớ",
+ "summedRss": "tổng RSS",
+ "sharedHost": "Chỉ số host OpenCode dùng chung. Nó không dành riêng cho thành viên này.",
+ "processTreeCapped": "Cây tiến trình đã bị giới hạn cho mẫu này.",
+ "rssHint": "RSS có thể bao gồm các trang dùng chung, nên tốt nhất đọc nó như một tín hiệu tải, không phải bộ nhớ riêng."
+ },
+ "editor": {
+ "title": "Thành viên",
+ "addMember": "Thêm thành viên",
+ "editAsJson": "Chỉnh sửa dưới dạng JSON",
+ "runInSeparateWorktrees": "Chạy thành viên trong các worktree riêng",
+ "agentTeamsMcpOnly": "Chỉ MCP của Agent Teams",
+ "removedCount": "Đã xóa ({{count}})",
+ "removedModelLockReason": "Các thành viên đã xóa được giữ lại cho lịch sử xóa mềm. Hãy khôi phục họ để chỉnh sửa cài đặt.",
+ "memberNamesUnique": "Tên thành viên phải là duy nhất"
+ },
+ "stats": {
+ "computing": "Đang tính toán thống kê...",
+ "empty": "Không có thống kê nào khả dụng",
+ "lines": "Dòng",
+ "linesInfo": "Xấp xỉ. Chính xác cho công cụ Edit và Write. Việc ghi tệp bằng Bash được ước lượng từ các mẫu lệnh (heredoc, echo, sed) và có thể bị báo cáo thiếu.",
+ "files": "Tệp",
+ "toolCalls": "Lệnh gọi công cụ",
+ "tokens": "Token",
+ "toolUsage": "Mức sử dụng công cụ",
+ "filesTouched": "Tệp đã chạm tới ({{count}})",
+ "viewAllChanges": "Xem tất cả thay đổi",
+ "showLess": "Thu gọn",
+ "moreFiles": "+{{count}} nữa",
+ "footer": "{{count}} phiên · tính lúc {{computedAgo}}",
+ "footer_one": "{{count}} phiên · tính lúc {{computedAgo}}",
+ "footer_few": "{{count}} phiên · tính lúc {{computedAgo}}",
+ "footer_many": "{{count}} phiên · tính lúc {{computedAgo}}",
+ "footer_other": "{{count}} phiên · tính lúc {{computedAgo}}"
+ },
+ "logs": {
+ "searching": "Đang tìm nhật ký...",
+ "empty": "Không tìm thấy nhật ký nào",
+ "waitingForTaskActivity": "Tác vụ đang thực hiện - đang chờ hoạt động phiên (tự động làm mới)...",
+ "noTaskActivity": "Chưa có hoạt động phiên nào cho tác vụ này",
+ "noMemberActivity": "Thành viên này chưa có hoạt động phiên nào được ghi lại",
+ "leadSessionTooltip": "Nhật ký phiên đầy đủ của trưởng nhóm - hữu ích cho ngữ cảnh điều phối toàn cục, không riêng cho agent này",
+ "memberSessionTooltip": "Nhật ký phiên thành viên bền vững đầy đủ - hữu ích khi công việc chạy trong phiên thành viên gốc thay vì tệp subagent",
+ "startedAt": "đã bắt đầu {{time}}",
+ "active": "đang hoạt động",
+ "showDetails": "Hiện chi tiết",
+ "hideDetails": "Ẩn chi tiết",
+ "loadingDetails": "Đang tải chi tiết...",
+ "failedToLoadDetails": "Không thể tải chi tiết"
+ },
+ "detail": {
+ "relaunchOpenCode": "Khởi chạy lại OpenCode",
+ "restart": "Khởi động lại",
+ "legacyLogsFallback": "Dự phòng nhật ký cũ",
+ "copyDiagnostics": "Sao chép chẩn đoán",
+ "pid": "PID {{pid}}",
+ "removedAt": "Đã xóa {{date}}",
+ "failedToRestartMember": "Không thể khởi động lại thành viên",
+ "sendMessage": "Gửi tin nhắn",
+ "assignTask": "Giao tác vụ",
+ "remove": "Xóa"
+ },
+ "list": {
+ "loading": "Đang tải thành viên đội ngũ",
+ "unavailable": "Danh sách thành viên không khả dụng",
+ "unavailableDescription": "{{count}} thành viên được biết từ metadata đội ngũ, nhưng thiếu chi tiết danh sách.",
+ "unavailableDescription_one": "{{count}} thành viên được biết từ metadata đội ngũ, nhưng thiếu chi tiết danh sách.",
+ "soloLeadOnly": "Đội ngũ Solo - chỉ trưởng nhóm",
+ "removedCount": "Đã xóa ({{count}})",
+ "unavailableDescription_few": "{{count}} thành viên được biết từ metadata đội ngũ, nhưng thiếu chi tiết danh sách.",
+ "unavailableDescription_many": "{{count}} thành viên được biết từ metadata đội ngũ, nhưng thiếu chi tiết danh sách.",
+ "unavailableDescription_other": "{{count}} thành viên được biết từ metadata đội ngũ, nhưng thiếu chi tiết danh sách."
+ },
+ "executionLog": {
+ "empty": "Không có gì để hiển thị",
+ "emptyUserMessage": "{{time}} - (trống)",
+ "agentInstructions": "Hướng dẫn agent",
+ "memberTurn": "Lượt của {{member}}",
+ "agentTurn": "Lượt của agent",
+ "turn": "lượt"
+ },
+ "recentMessages": {
+ "latest": "Tin nhắn mới nhất",
+ "latestForMember": "Tin nhắn mới nhất - {{member}}",
+ "loadMore": "Tải thêm",
+ "expand": "Mở rộng",
+ "collapse": "Thu gọn"
+ },
+ "leadModel": {
+ "defaultModel": "Mặc định",
+ "providerModelAria": "Nhà cung cấp {{provider}}, {{model}}",
+ "leadShort": "trưởng nhóm",
+ "teamLead": "Trưởng nhóm",
+ "syncWithTeammates": "Đồng bộ mô hình với các thành viên",
+ "anthropicTeamWide": "Anthropic toàn đội ngũ",
+ "runtimeInheritance": "Runtime của trưởng nhóm áp dụng cho các thành viên trừ khi họ đặt nhà cung cấp hoặc mô hình riêng.",
+ "anthropicContextLimit": "Giới hạn ngữ cảnh 200K áp dụng cho toàn đội ngũ đối với các runtime Anthropic trong lần khởi chạy này, bao gồm cả các thành viên Anthropic tùy chỉnh."
+ },
+ "runtimeLogs": {
+ "autoRefresh": "Tự động làm mới",
+ "wrapLines": "Ngắt dòng",
+ "loadingTail": "Đang tải phần cuối của nhật ký tiến trình...",
+ "empty": "Chưa có tệp nhật ký tiến trình nào được ghi lại cho thành viên này.",
+ "copy": "Sao chép",
+ "fileEmpty": "Tệp nhật ký tiến trình trống.",
+ "showingLast": "Đang hiển thị {{bytes}} cuối.",
+ "showing": "Đang hiển thị {{bytes}}."
+ },
+ "tasks": {
+ "empty": "Không có tác vụ nào được giao cho thành viên này"
+ },
+ "messages": {
+ "loadOlder": "Tải tin nhắn cũ hơn",
+ "filters": {
+ "all": "Tất cả",
+ "messages": "Tin nhắn",
+ "comments": "Bình luận"
+ },
+ "empty": {
+ "loading": "Đang tải hoạt động...",
+ "noComments": "Không có bình luận nào cho thành viên này",
+ "noLoadedMessages": "Chưa có tin nhắn nào được tải cho thành viên này",
+ "noMessages": "Không có tin nhắn nào với thành viên này",
+ "noLoadedActivity": "Chưa có hoạt động nào được tải cho thành viên này",
+ "noActivity": "Không có hoạt động nào với thành viên này"
+ }
+ },
+ "actions": {
+ "openProfile": "Mở hồ sơ",
+ "editRole": "Chỉnh sửa vai trò",
+ "sendMessage": "Gửi tin nhắn",
+ "assignTask": "Giao tác vụ"
+ },
+ "roleSelect": {
+ "customRolePlaceholder": "Nhập vai trò tùy chỉnh..."
+ }
+ },
+ "schedule": {
+ "count": "{{count}} lịch",
+ "count_one": "{{count}} lịch",
+ "count_other": "{{count}} lịch",
+ "nextRun": "Tiếp theo: {{next}}",
+ "actions": {
+ "runNow": "Chạy ngay",
+ "edit": "Chỉnh sửa",
+ "pause": "Tạm dừng",
+ "resume": "Tiếp tục",
+ "delete": "Xóa",
+ "addSchedule": "Thêm lịch"
+ },
+ "runHistory": {
+ "loading": "Đang tải lịch sử chạy...",
+ "empty": "Chưa có lần chạy nào"
+ },
+ "count_few": "{{count}} lịch",
+ "count_many": "{{count}} lịch",
+ "runLog": {
+ "title": "Nhật ký chạy",
+ "exitCode": "thoát {{code}}",
+ "retryCount": "thử lại {{count}}/{{max}}",
+ "stillRunning": "Tác vụ vẫn đang chạy...",
+ "loadingLogs": "Đang tải nhật ký...",
+ "errors": "Lỗi",
+ "close": "Đóng"
+ },
+ "cron": {
+ "expression": "Biểu thức cron",
+ "highFrequencyWarning": "Lịch tần suất cao (khoảng cách dưới 5 phút)",
+ "nextRuns": "Các lần chạy tiếp theo:",
+ "timezone": "Múi giờ",
+ "selectTimezone": "Chọn múi giờ",
+ "warmUpTime": "Thời gian khởi động",
+ "warmUpDescription": "Chuẩn bị các nhà cung cấp đã chọn trước khi thực thi theo lịch",
+ "errors": {
+ "enterExpression": "Nhập một biểu thức cron",
+ "invalidExpression": "Biểu thức cron không hợp lệ"
+ },
+ "presets": {
+ "everyHour": "Mỗi giờ",
+ "everySixHours": "Mỗi 6 giờ",
+ "dailyAtNine": "Hàng ngày lúc 9 giờ sáng",
+ "weekdaysAtNine": "Các ngày trong tuần lúc 9 giờ sáng",
+ "mondayAtNine": "Thứ Hai lúc 9 giờ sáng",
+ "everyThirtyMinutes": "Mỗi 30 phút"
+ },
+ "warmUpOptions": {
+ "none": "Không khởi động trước",
+ "fiveMinutes": "5 phút",
+ "tenMinutes": "10 phút",
+ "fifteenMinutes": "15 phút",
+ "thirtyMinutes": "30 phút"
+ }
+ },
+ "empty": {
+ "title": "Chưa có lịch nào",
+ "description": "Tạo một lịch để chạy các tác vụ Claude tự động theo lịch cron."
+ },
+ "title": "Lịch",
+ "status": {
+ "active": "Đang hoạt động",
+ "paused": "Đã tạm dừng",
+ "disabled": "Đã tắt"
+ },
+ "runStatus": {
+ "pending": "Đang chờ",
+ "warmingUp": "Đang khởi động",
+ "warm": "Đã sẵn sàng",
+ "running": "Đang chạy",
+ "completed": "Hoàn thành",
+ "failed": "Thất bại",
+ "interrupted": "Bị gián đoạn",
+ "cancelled": "Đã hủy"
+ }
+ },
+ "openCodeContextConfigHint": {
+ "summary": "Các mô hình OpenCode cục bộ có thể dùng ngân sách ngữ cảnh OpenCode thay vì giới hạn chỉ-prompt.",
+ "description": "Thêm các giới hạn tương ứng vào cấu hình OpenCode cho nhà cung cấp và mô hình mà thành viên này dùng. Điều này giúp OpenCode nén và cắt tỉa trước khi các mô hình cục bộ tràn cửa sổ ngữ cảnh của chúng.",
+ "replacePrefix": "Thay thế",
+ "and": "và",
+ "replaceSuffix": "bằng ID nhà cung cấp và mô hình từ thiết lập OpenCode của bạn. Các hướng dẫn prompt như",
+ "promptInstructionsSuffix": "yếu hơn vì yêu cầu được lắp ráp trước khi mô hình đọc chúng.",
+ "providerLimits": "Giới hạn nhà cung cấp",
+ "compactionConfig": "Cấu hình nén"
+ },
+ "sessions": {
+ "noProjectPath": "Không có đường dẫn dự án nào được liên kết",
+ "provisioningHint": "Các phiên sẽ xuất hiện sau khi tạo đội ngũ",
+ "projectNotFound": "Không tìm thấy dự án",
+ "loading": "Đang tải phiên...",
+ "empty": "Không tìm thấy phiên nào",
+ "showAllSessions": "Hiện cho tất cả phiên",
+ "lead": "trưởng nhóm",
+ "removeFilter": "Xóa bộ lọc",
+ "filterBySession": "Lọc theo phiên này",
+ "openSession": "Mở phiên",
+ "title": "Phiên"
+ },
+ "provisioning": {
+ "pid": "PID {{pid}}",
+ "cancel": "Hủy",
+ "moreWarningsHidden": "{{count}} cảnh báo nữa bị ẩn",
+ "diagnostics": "Chẩn đoán",
+ "liveOutput": "Kết quả trực tiếp",
+ "diagnosticsCopied": "Đã sao chép chẩn đoán",
+ "copyDiagnostics": "Sao chép chẩn đoán",
+ "copied": "Đã sao chép",
+ "noOutput": "Chưa có kết quả nào được ghi lại.",
+ "cliLogs": "Nhật ký CLI",
+ "steps": {
+ "starting": "Đang khởi động",
+ "configuring": "Thiết lập đội ngũ",
+ "assembling": "Thành viên đang tham gia",
+ "finalizing": "Đang hoàn tất"
+ },
+ "providerStatus": {
+ "status": {
+ "checking": "đang kiểm tra...",
+ "ready": "OK",
+ "notes": "OK (ghi chú)",
+ "failed": "LỖI",
+ "pending": "đang chờ"
+ },
+ "detailSummary": {
+ "cliBinaryMissing": "Thiếu tệp nhị phân CLI",
+ "openCodeRuntimeMissing": "Thiếu runtime OpenCode",
+ "openCodeWindowsAccessBlocked": "Truy cập Windows của OpenCode bị chặn",
+ "openCodeNoOutput": "Kiểm tra runtime OpenCode không trả về kết quả nào",
+ "openCodeMcpUnreachable": "Không thể tiếp cận MCP ứng dụng OpenCode",
+ "workingDirectoryMissing": "Thiếu thư mục làm việc",
+ "cliBinaryCouldNotStart": "Không thể khởi động tệp nhị phân CLI",
+ "cliPreflightIncomplete": "Kiểm tra trước CLI chưa hoàn tất",
+ "authenticationRequired": "Cần xác thực",
+ "runtimeProviderNotConfigured": "Nhà cung cấp runtime chưa được cấu hình",
+ "cliPreflightFailed": "Kiểm tra trước CLI thất bại",
+ "selectedModelCompatible": "Mô hình đã chọn tương thích",
+ "selectedModelCompatibilityPending": "Đang chờ kiểm tra tương thích mô hình đã chọn",
+ "selectedModelAvailable": "Mô hình đã chọn khả dụng",
+ "selectedModelVerified": "Mô hình đã chọn đã được xác minh",
+ "selectedModelUnavailable": "Mô hình đã chọn không khả dụng",
+ "selectedModelTimedOut": "Xác minh mô hình đã chọn hết thời gian chờ",
+ "selectedModelCheckFailed": "Kiểm tra mô hình đã chọn thất bại",
+ "selectedModelDeferred": "Xác minh mô hình đã chọn bị hoãn",
+ "selectedModelPingNotConfirmed": "Ping mô hình đã chọn chưa được xác nhận",
+ "readyWithNotes": "Sẵn sàng kèm ghi chú",
+ "needsAttention": "Cần chú ý"
+ },
+ "modelChecksSummary": "Kiểm tra mô hình đã chọn - {{details}}",
+ "modelParts": {
+ "unavailable": "{{count}} mô hình không khả dụng",
+ "unavailable_one": "{{count}} mô hình không khả dụng",
+ "unavailable_other": "{{count}} mô hình không khả dụng",
+ "checkFailed": "{{count}} mô hình kiểm tra thất bại",
+ "checkFailed_one": "{{count}} mô hình kiểm tra thất bại",
+ "checkFailed_other": "{{count}} mô hình kiểm tra thất bại",
+ "timedOut": "{{count}} mô hình hết thời gian chờ",
+ "timedOut_one": "{{count}} mô hình hết thời gian chờ",
+ "timedOut_other": "{{count}} mô hình hết thời gian chờ",
+ "deferred": "{{count}} xác minh bị hoãn",
+ "deferred_one": "{{count}} xác minh bị hoãn",
+ "deferred_other": "{{count}} xác minh bị hoãn",
+ "pingNotConfirmed": "{{count}} ping chưa được xác nhận",
+ "pingNotConfirmed_one": "{{count}} ping chưa được xác nhận",
+ "pingNotConfirmed_other": "{{count}} ping chưa được xác nhận",
+ "compatibilityPending": "{{count}} tương thích, đang chờ xác minh sâu",
+ "compatibilityPending_one": "{{count}} tương thích, đang chờ xác minh sâu",
+ "compatibilityPending_other": "{{count}} tương thích, đang chờ xác minh sâu",
+ "compatible": "{{count}} tương thích",
+ "compatible_one": "{{count}} tương thích",
+ "compatible_other": "{{count}} tương thích",
+ "checking": "{{count}} đang kiểm tra",
+ "checking_one": "{{count}} đang kiểm tra",
+ "checking_other": "{{count}} đang kiểm tra",
+ "available": "{{count}} khả dụng",
+ "available_one": "{{count}} khả dụng",
+ "available_other": "{{count}} khả dụng",
+ "verified": "{{count}} đã xác minh",
+ "verified_one": "{{count}} đã xác minh",
+ "verified_other": "{{count}} đã xác minh",
+ "unavailable_few": "{{count}} mô hình không khả dụng",
+ "unavailable_many": "{{count}} mô hình không khả dụng",
+ "checkFailed_few": "{{count}} mô hình kiểm tra thất bại",
+ "checkFailed_many": "{{count}} mô hình kiểm tra thất bại",
+ "timedOut_few": "{{count}} mô hình hết thời gian chờ",
+ "timedOut_many": "{{count}} mô hình hết thời gian chờ",
+ "deferred_few": "{{count}} xác minh bị hoãn",
+ "deferred_many": "{{count}} xác minh bị hoãn",
+ "pingNotConfirmed_few": "{{count}} ping chưa được xác nhận",
+ "pingNotConfirmed_many": "{{count}} ping chưa được xác nhận",
+ "compatibilityPending_few": "{{count}} tương thích, đang chờ xác minh sâu",
+ "compatibilityPending_many": "{{count}} tương thích, đang chờ xác minh sâu",
+ "compatible_few": "{{count}} tương thích",
+ "compatible_many": "{{count}} tương thích",
+ "checking_few": "{{count}} đang kiểm tra",
+ "checking_many": "{{count}} đang kiểm tra",
+ "available_few": "{{count}} khả dụng",
+ "available_many": "{{count}} khả dụng",
+ "verified_few": "{{count}} đã xác minh",
+ "verified_many": "{{count}} đã xác minh"
+ },
+ "openProviderSettings": "Mở cài đặt {{provider}}",
+ "copied": "Đã sao chép",
+ "copyDiagnostics": "Sao chép chẩn đoán",
+ "deepVerificationPending": "Xác minh sâu vẫn đang chạy. Các mô hình OpenCode miễn phí có thể mất khoảng 20 giây.",
+ "progress": {
+ "checkingSelectedProviders": "Đang kiểm tra các nhà cung cấp đã chọn song song...",
+ "checkingProvider": "Đang kiểm tra nhà cung cấp {{provider}}...",
+ "checkingProviders": "Đang kiểm tra {{providers}} nhà cung cấp..."
+ },
+ "failureHints": {
+ "openCodeAccessDenied": "Hãy sửa quyền thư mục hoặc chuyển dự án sang một thư mục mà người dùng có thể ghi. Chạy với quyền quản trị viên chỉ là cách khắc phục tạm thời.",
+ "openCodeBridgeNoOutput": "Hãy khởi động lại ứng dụng và runtime OpenCode, rồi thử lại. Nếu lặp lại, hãy sao chép chẩn đoán.",
+ "workingDirectoryMissing": "Hãy chọn một thư mục làm việc đang tồn tại, rồi mở lại hộp thoại này.",
+ "authenticationRequired": "Hãy xác thực nhà cung cấp cần thiết trong Claude CLI, rồi mở lại hộp thoại này.",
+ "runtimeProviderNotConfigured": "Hãy cấu hình runtime của nhà cung cấp đã chọn, rồi mở lại hộp thoại này.",
+ "openCodeRuntimeMissing": "Hãy cài đặt hoặc thử lại runtime OpenCode từ thẻ trạng thái nhà cung cấp, rồi mở lại hộp thoại này.",
+ "openCodeAppMcpUnreachable": "Hãy thử khởi chạy lại để làm mới cầu nối MCP ứng dụng OpenCode. Nếu lặp lại, hãy khởi động lại ứng dụng và runtime OpenCode.",
+ "cliBinaryMissing": "Hãy đảm bảo tệp nhị phân Claude CLI cục bộ tồn tại và có thể được khởi động, rồi mở lại hộp thoại này.",
+ "default": "Hãy giải quyết vấn đề ở trên, rồi mở lại hộp thoại này.",
+ "openCodeNodeModulesSymlinkPermission": "Hãy chạy Agent Teams AI với quyền Quản trị viên, rồi thử khởi chạy lại."
+ }
+ },
+ "presentation": {
+ "awaitingPermission": "{{count}} thành viên đang chờ phê duyệt quyền",
+ "nameListWithMore": "{{names}}, +{{count}} nữa",
+ "waitingForOpenCode": "Đang chờ OpenCode: {{names}}",
+ "bootstrapStalled": "Khởi tạo bị đình trệ: {{names}}",
+ "bootstrapStalledWithOpenCodeWait": "{{stalled}}; Đang chờ OpenCode: {{names}}",
+ "namedPendingDiagnostic": "{{label}}: {{names}}",
+ "countPendingDiagnostic": "{{count}} {{label}}",
+ "pendingLabels": {
+ "bootstrapStalled": "Khởi tạo bị đình trệ",
+ "shellOnly": "Chỉ shell",
+ "waitingForBootstrap": "Đang chờ khởi tạo",
+ "bootstrapUnconfirmed": "Khởi tạo chưa được xác nhận",
+ "awaitingPermission": "Đang chờ phê duyệt quyền",
+ "waitingForRuntime": "Đang chờ runtime",
+ "shellOnlyLower": "chỉ shell",
+ "waitingForBootstrapLower": "đang chờ khởi tạo",
+ "bootstrapUnconfirmedLower": "khởi tạo chưa được xác nhận",
+ "awaitingPermissionLower": "đang chờ phê duyệt quyền",
+ "waitingForRuntimeLower": "đang chờ runtime"
+ },
+ "failed": {
+ "memberFailedToStart": "{{name}} không khởi động được",
+ "teammatesFailedToStart": "{{count}} thành viên không khởi động được",
+ "teammatesFailedRatio": "{{count}}/{{total}} thành viên không khởi động được"
+ },
+ "skipped": {
+ "memberSkipped": "{{name}} bị bỏ qua cho lần khởi chạy này",
+ "memberSkippedWithReason": "{{name}} bị bỏ qua cho lần khởi chạy này - {{reason}}",
+ "memberSkippedCompact": "{{name}} bị bỏ qua",
+ "teammatesSkipped": "{{count}} thành viên bị bỏ qua",
+ "teammatesSkippedList": "Thành viên bị bỏ qua: {{list}}",
+ "teammatesSkippedRatio": "{{count}}/{{total}} thành viên bị bỏ qua cho lần khởi chạy này"
+ },
+ "joining": {
+ "teammatesStillJoining": "{{count}} thành viên vẫn đang tham gia",
+ "teammatesStillJoining_one": "{{count}} thành viên vẫn đang tham gia",
+ "teammatesStillJoining_few": "{{count}} thành viên vẫn đang tham gia",
+ "teammatesStillJoining_many": "{{count}} thành viên vẫn đang tham gia",
+ "teammatesStillJoining_other": "{{count}} thành viên vẫn đang tham gia",
+ "teammatesConfirmedRatio": "{{count}}/{{total}} thành viên đã được xác nhận"
+ },
+ "ready": {
+ "leadOnline": "Trưởng nhóm trực tuyến",
+ "allTeammatesJoined": "Tất cả {{count}} thành viên đã tham gia",
+ "teamProvisionedLeadOnline": "Đội ngũ đã được tạo - trưởng nhóm trực tuyến",
+ "teamProvisionedAllJoined": "Đội ngũ đã được tạo - tất cả {{count}} thành viên đã tham gia",
+ "teamProvisionedStillJoining": "Đội ngũ đã được tạo - các thành viên vẫn đang tham gia",
+ "launchFinishedWithErrors": "Khởi chạy hoàn tất với lỗi - {{count}}/{{total}} thành viên không khởi động được",
+ "launchContinuedSkipped": "Khởi chạy tiếp tục - {{count}}/{{total}} thành viên bị bỏ qua",
+ "teamLaunchedLeadOnline": "Đội ngũ đã khởi chạy - trưởng nhóm trực tuyến",
+ "teamLaunchedAllJoined": "Đội ngũ đã khởi chạy - tất cả {{count}} thành viên đã tham gia"
+ },
+ "panel": {
+ "launchFailed": "Khởi chạy thất bại",
+ "launchDetails": "Chi tiết khởi chạy",
+ "launchFinishedWithErrors": "Khởi chạy hoàn tất với lỗi",
+ "launchContinuedSkipped": "Khởi chạy tiếp tục với các thành viên bị bỏ qua",
+ "coreTeamReady": "Đội ngũ nòng cốt sẵn sàng",
+ "finishingLaunch": "Đang hoàn tất khởi chạy",
+ "teamLaunched": "Đội ngũ đã khởi chạy",
+ "launchingTeam": "Đang khởi chạy đội ngũ"
+ }
+ }
+ },
+ "liveRuntimeStatus": {
+ "title": "Trạng thái runtime trực tiếp",
+ "description": "Nhịp tim và trạng thái khởi chạy chỉ-hiển thị. Các điều khiển tiến trình vẫn ở bên dưới.",
+ "source": "nguồn: {{source}}",
+ "lane": "luồng {{lane}}",
+ "diagnosticOnly": "Chỉ chẩn đoán",
+ "updated": "đã cập nhật {{value}}",
+ "states": {
+ "running": "Đang chạy",
+ "starting": "Đang khởi động",
+ "waiting": "Đang chờ",
+ "degraded": "Cần chú ý",
+ "stopped": "Đã dừng",
+ "unknown": "Không xác định"
+ }
+ },
+ "taskLogs": {
+ "exact": {
+ "title": "Nhật ký tác vụ chính xác",
+ "loading": "Đang tải nhật ký tác vụ chính xác...",
+ "description": "Các lát cắt bản ghi chính xác được hiển thị với cùng các thành phần nhật ký thực thi dùng trong Nhật ký.",
+ "emptyTitle": "Chưa có nhật ký tác vụ chính xác nào",
+ "emptyDescription": "Các gói bản ghi chính xác sẽ xuất hiện ở đây khi có sẵn metadata bản ghi liên kết tác vụ rõ ràng.",
+ "summaryOnly": "chỉ tóm tắt"
+ },
+ "executionSessions": {
+ "title": "Phiên thực thi",
+ "online": "Trực tuyến",
+ "updating": "Đang cập nhật...",
+ "description": "Duyệt và xem trước bản ghi theo phiên kiểu cũ."
+ },
+ "stream": {
+ "title": "Luồng nhật ký tác vụ"
+ }
+ },
+ "kanban": {
+ "taskCard": {
+ "cancelTask": "Hủy tác vụ {{taskId}}",
+ "cancel": "Hủy",
+ "moveBackToTodoConfirm": "Chuyển tác vụ này trở lại CẦN LÀM và thông báo cho đội ngũ?",
+ "confirm": "Xác nhận",
+ "keep": "Giữ",
+ "changesNeedAttention": "Các thay đổi cần chú ý",
+ "changes": "Thay đổi",
+ "deleteTask": "Xóa tác vụ",
+ "taskLogsActive": "Nhật ký tác vụ đang hoạt động",
+ "newTaskLogsArriving": "Nhật ký tác vụ mới đang đến",
+ "awaitingUser": "Đang chờ người dùng",
+ "awaitingLead": "Đang chờ trưởng nhóm",
+ "blockedBy": "Bị chặn bởi",
+ "blocks": "Chặn",
+ "start": "Bắt đầu",
+ "complete": "Hoàn thành",
+ "approve": "Duyệt",
+ "requestReview": "Yêu cầu xem xét",
+ "manualReview": "Xem xét thủ công",
+ "requestChanges": "Yêu cầu thay đổi"
+ },
+ "filter": {
+ "title": "Lọc tác vụ",
+ "session": "Phiên",
+ "allSessions": "Tất cả phiên",
+ "teammate": "Thành viên",
+ "unassigned": "(chưa phân công)",
+ "column": "Cột",
+ "clearAll": "Xóa tất cả"
+ },
+ "board": {
+ "addTask": "Thêm tác vụ",
+ "noTasks": "Không có tác vụ",
+ "showMore": "Hiện thêm {{count}}",
+ "hiddenCount": "{{count}} bị ẩn",
+ "trash": "Thùng rác",
+ "gridView": "Chế độ xem lưới",
+ "columnsView": "Chế độ xem cột"
+ },
+ "trash": {
+ "title": "Thùng rác",
+ "empty": "Không có tác vụ đã xóa",
+ "subject": "Chủ đề",
+ "owner": "Chủ sở hữu",
+ "deleted": "Đã xóa",
+ "unassigned": "Chưa phân công",
+ "restoreTask": "Khôi phục tác vụ",
+ "restore": "Khôi phục",
+ "close": "Đóng"
+ },
+ "sort": {
+ "title": "Sắp xếp tác vụ",
+ "sortBy": "Sắp xếp theo",
+ "reset": "Đặt lại",
+ "options": {
+ "updatedAt": {
+ "label": "Cập nhật gần nhất",
+ "description": "Cập nhật gần đây lên đầu"
+ },
+ "createdAt": {
+ "label": "Đã tạo",
+ "description": "Mới nhất lên đầu"
+ },
+ "owner": {
+ "label": "Chủ sở hữu",
+ "description": "Theo thứ tự bảng chữ cái theo người được giao"
+ },
+ "manual": {
+ "label": "Thủ công",
+ "description": "Thứ tự kéo-thả"
+ }
+ }
+ },
+ "search": {
+ "clearSearch": "Xóa tìm kiếm",
+ "tasks": "Tác vụ",
+ "createdAgo": "đã tạo {{time}}",
+ "updatedAgo": "đã cập nhật {{time}}",
+ "placeholder": "Tìm tác vụ... (#id hoặc văn bản)"
+ },
+ "grid": {
+ "addTask": "Thêm tác vụ",
+ "noTasks": "Không có tác vụ"
+ },
+ "title": "Kanban",
+ "columns": {
+ "todo": "CẦN LÀM",
+ "inProgress": "ĐANG LÀM",
+ "review": "XEM XÉT",
+ "done": "HOÀN THÀNH",
+ "approved": "ĐÃ DUYỆT"
+ }
+ },
+ "worktreeGitReadiness": {
+ "checking": "Đang kiểm tra trạng thái kho lưu trữ Git cho các worktree của thành viên...",
+ "ready": "Các git worktree đã sẵn sàng.",
+ "readyOnBranch": "Các git worktree đã sẵn sàng trên nhánh {{branch}}.",
+ "needsSetup": "Cô lập worktree cần thiết lập Git",
+ "initialCommitNotice": "Hành động commit ban đầu sẽ stage và commit tất cả tệp hiện tại với thông điệp",
+ "initializeRepository": "Khởi tạo kho lưu trữ Git",
+ "createInitialCommit": "Tạo commit ban đầu",
+ "initialCommitMessage": "chore: initial commit"
+ },
+ "toolApproval": {
+ "settings": "Cài đặt",
+ "autoAllowAllTools": "Tự động cho phép tất cả công cụ",
+ "autoAllowFileEdits": "Tự động cho phép chỉnh sửa tệp (Edit, Write, NotebookEdit)",
+ "autoAllowSafeCommands": "Tự động cho phép các lệnh an toàn (git, pnpm, npm, ls...)",
+ "onTimeout": "Khi hết thời gian chờ:",
+ "after": "sau",
+ "secondsShort": "giây",
+ "timeoutActions": {
+ "wait": "Chờ mãi mãi",
+ "allow": "Cho phép",
+ "deny": "Từ chối"
+ },
+ "submit": "Gửi",
+ "allow": "Cho phép",
+ "deny": "Từ chối",
+ "allowAll": "Cho phép tất cả",
+ "pendingCount": "{{count}} đang chờ",
+ "autoActionIn": "Tự động {{action}} sau {{time}}",
+ "diff": {
+ "previewChanges": "Xem trước thay đổi",
+ "readingFile": "Đang đọc tệp...",
+ "binaryFile": "Tệp nhị phân - không thể xem trước",
+ "truncated": "Tệp bị cắt ở 2MB - phần khác biệt có thể không đầy đủ",
+ "newFile": "Tệp mới"
+ }
+ },
+ "memberWorkSync": {
+ "details": {
+ "title": "Đồng bộ công việc thành viên",
+ "actionableItems": "Mục có thể hành động",
+ "fingerprint": "Dấu vân tay",
+ "report": "Báo cáo",
+ "none": "không có",
+ "shadowWouldNudge": "Shadow sẽ nhắc",
+ "yes": "có",
+ "no": "không",
+ "moreActionableItems": "{{count}} mục có thể hành động nữa",
+ "diagnostics": "Chẩn đoán: {{diagnostics}}"
+ },
+ "title": "Đồng bộ công việc thành viên",
+ "loadingDiagnostics": "Đang tải chẩn đoán đồng bộ công việc thành viên.",
+ "diagnosticsUnavailable": "Chẩn đoán đồng bộ công việc thành viên không khả dụng."
+ },
+ "advancedCli": {
+ "title": "Nâng cao",
+ "useWorktree": "Dùng worktree",
+ "recent": "Gần đây",
+ "commandPreview": "Xem trước lệnh",
+ "customArguments": "Đối số tùy chỉnh",
+ "validate": "Xác thực",
+ "validation": {
+ "allFlagsValid": "Tất cả cờ đều hợp lệ",
+ "unknownFlags": "Không xác định: {{flags}}",
+ "protectedFlags": "Được bảo vệ: {{flags}}",
+ "failed": "Xác thực thất bại"
+ },
+ "placeholders": {
+ "worktreeName": "worktree-name"
+ }
+ },
+ "processes": {
+ "ago": "{{time}} trước",
+ "stoppedAgo": "đã dừng {{time}} trước",
+ "running": "Đang chạy",
+ "stopped": "Đã dừng",
+ "stopProcess": "Dừng tiến trình (SIGTERM)",
+ "kill": "Kết thúc",
+ "openInBrowser": "Mở trong trình duyệt",
+ "open": "Mở",
+ "pid": "PID{{pid}}",
+ "title": "Tiến trình CLI"
+ },
+ "taskActivity": {
+ "loadingDetails": "Đang tải chi tiết hoạt động...",
+ "contextUnavailable": "Ngữ cảnh bản ghi chi tiết không còn khả dụng cho hoạt động này.",
+ "loading": "Đang tải hoạt động tác vụ...",
+ "lowSignalOnly": "Chưa tìm thấy hoạt động tác vụ quan trọng nào. Các chi tiết thực thi cấp thấp có sẵn bên dưới trong Luồng nhật ký tác vụ.",
+ "empty": "Chưa tìm thấy hoạt động tác vụ rõ ràng nào trong các bản ghi có sẵn. Các nhật ký phiên cũ hơn hoặc theo phỏng đoán vẫn có thể có sẵn bên dưới trong Phiên thực thi.",
+ "title": "Hoạt động tác vụ",
+ "description": "Hoạt động runtime rõ ràng quan trọng được liên kết với tác vụ này từ metadata bản ghi."
+ },
+ "sendMessage": {
+ "title": "Gửi tin nhắn",
+ "description": "Gửi một tin nhắn trực tiếp đến một thành viên đội ngũ.",
+ "recipientLabel": "Người nhận",
+ "selectMemberPlaceholder": "Chọn thành viên...",
+ "messageLabel": "Tin nhắn",
+ "placeholder": "Viết tin nhắn của bạn... (Enter để gửi)",
+ "send": "Gửi",
+ "sending": "Đang gửi...",
+ "charsLeft": "Còn {{count}} ký tự",
+ "saved": "Đã lưu",
+ "attachments": {
+ "teamOnlineRequired": "Đội ngũ phải trực tuyến để đính kèm tệp",
+ "recipientUnsupported": "Tệp có thể được gửi đến trưởng nhóm hoặc thành viên OpenCode",
+ "openCodeOnlineRequired": "Đội ngũ phải trực tuyến để đính kèm tệp cho thành viên OpenCode",
+ "disabledHint": "Tệp đính kèm được hỗ trợ cho trưởng nhóm trực tuyến và thành viên OpenCode trực tuyến. Hãy xóa tệp đính kèm hoặc đổi người nhận.",
+ "attachFiles": "Đính kèm tệp (dán hoặc kéo & thả)",
+ "unavailable": "Tệp đính kèm không khả dụng"
+ },
+ "quote": {
+ "remove": "Xóa trích dẫn",
+ "replyingTo": "Đang trả lời"
+ }
+ },
+ "taskComments": {
+ "cancelReply": "Hủy trả lời",
+ "replyingTo": "Đang trả lời",
+ "placeholder": "Thêm bình luận... (Enter để gửi)",
+ "attachFile": "Đính kèm tệp (hoặc dán)",
+ "voiceToText": "Giọng nói thành văn bản",
+ "comment": "Bình luận",
+ "charsLeft": "Còn {{count}} ký tự",
+ "saved": "Đã lưu",
+ "awaitingReplyFrom": "Đang chờ phản hồi từ",
+ "or": "hoặc"
+ },
+ "taskAttachments": {
+ "dropImageHere": "Thả hình ảnh vào đây",
+ "attachImage": "Đính kèm hình ảnh",
+ "pasteOrDragDrop": "hoặc dán / kéo-thả",
+ "fromOriginalMessage": "Từ tin nhắn gốc",
+ "dropFilesHere": "Thả tệp vào đây",
+ "loading": "Đang tải tệp đính kèm..."
+ },
+ "permissions": {
+ "autoApproveAllTools": "Tự động phê duyệt tất cả công cụ",
+ "autonomousModeDescription": "Chế độ tự chủ: các công cụ đội ngũ thực thi mà không cần xác nhận. Hãy cẩn thận với mã không đáng tin cậy.",
+ "manualModeDescription": "Chế độ thủ công: bạn sẽ phê duyệt hoặc từ chối từng lệnh gọi công cụ theo thời gian thực."
+ },
+ "memberLogStream": {
+ "tabs": {
+ "execution": "Thực thi",
+ "process": "Tiến trình"
+ },
+ "filters": {
+ "all": "Tất cả"
+ },
+ "logs": {
+ "title": "Nhật ký",
+ "loading": "Đang tải luồng nhật ký thành viên...",
+ "emptyTitle": "Chưa tìm thấy mục luồng nhật ký nào cho thành viên này.",
+ "emptyDescription": "Nhật ký bản ghi hoặc runtime theo phạm vi thành viên sẽ xuất hiện ở đây khi có sẵn."
+ }
+ },
+ "reviewDialog": {
+ "placeholder": "Mô tả những gì cần thay đổi... (Enter để gửi)",
+ "submit": "Gửi",
+ "charsLeft": "Còn {{count}} ký tự",
+ "saved": "Đã lưu",
+ "title": "Yêu cầu thay đổi"
+ },
+ "dialogs": {
+ "actions": {
+ "openDashboard": "Mở Bảng điều khiển",
+ "openTeam": "Mở đội ngũ",
+ "cancel": "Hủy"
+ },
+ "membersJson": {
+ "hide": "Ẩn JSON"
+ },
+ "optional": {
+ "badge": "Tùy chọn"
+ }
+ },
+ "runningTeams": {
+ "title": "Đội ngũ đang chạy",
+ "status": {
+ "active": "Đang hoạt động",
+ "provisioning": "Đang khởi chạy",
+ "idle": "Đang chạy"
+ },
+ "noProject": "Không có dự án"
+ },
+ "layout": {
+ "maxPanesReached": "Đã đạt tối đa {{count}} khung"
+ },
+ "codexReconnect": {
+ "description": "Phiên Codex của bạn có vẻ đã cũ. Hãy kết nối lại để tiếp tục.",
+ "useCode": "Dùng mã",
+ "generating": "Đang tạo...",
+ "openLogin": "Mở đăng nhập",
+ "generateLink": "Tạo liên kết"
+ },
+ "effortLevel": {
+ "label": "Mức độ nỗ lực (tùy chọn)",
+ "maxDescription": "Max cho mô hình nhiều thời gian suy luận nhất cho các tác vụ khó."
+ },
+ "contextLimit": {
+ "limitTo200k": "Giới hạn ngữ cảnh ở 200K token",
+ "always200k": "(luôn 200K cho mô hình này)",
+ "tooltipContent": "Giữ các lần khởi chạy trong cửa sổ ngữ cảnh 200K-token khi được hỗ trợ.",
+ "tooltipTitle": "Giới hạn ngữ cảnh"
+ },
+ "roleSelect": {
+ "noRole": "Không có vai trò",
+ "customRole": "Vai trò tùy chỉnh...",
+ "searchPlaceholder": "Tìm vai trò...",
+ "empty": "Không tìm thấy vai trò nào.",
+ "reservedRole": "Vai trò này được dành riêng",
+ "emptyCustomRole": "Vai trò không được để trống"
+ }
+}
diff --git a/src/features/localization/renderer/locales/zh/common.json b/src/features/localization/renderer/locales/zh/common.json
index 11e5072a..a9112964 100644
--- a/src/features/localization/renderer/locales/zh/common.json
+++ b/src/features/localization/renderer/locales/zh/common.json
@@ -62,21 +62,36 @@
"locales": {
"emptyMessage": "未找到语言。",
"names": {
- "en": "英语",
- "ru": "俄语",
- "zh": "中文",
- "ja": "日语",
- "ko": "韩语",
- "es": "西班牙语",
- "hi": "印地语",
- "pt": "葡萄牙语",
- "fr": "法语",
"ar": "阿拉伯语",
"bn": "孟加拉语",
- "ur": "乌尔都语",
- "id": "印尼语",
"de": "德语",
- "system": "系统"
+ "en": "英语",
+ "es": "西班牙语",
+ "fa": "波斯语",
+ "fil": "菲律宾语",
+ "fr": "法语",
+ "hi": "印地语",
+ "id": "印尼语",
+ "it": "意大利语",
+ "ja": "日语",
+ "ko": "韩语",
+ "mr": "马拉地语",
+ "ms": "马来语",
+ "nl": "荷兰语",
+ "pl": "波兰语",
+ "pt": "葡萄牙语",
+ "ro": "罗马尼亚语",
+ "ru": "俄语",
+ "sw": "斯瓦希里语",
+ "system": "系统",
+ "ta": "泰米尔语",
+ "te": "泰卢固语",
+ "th": "泰语",
+ "tr": "土耳其语",
+ "uk": "乌克兰语",
+ "ur": "乌尔都语",
+ "vi": "越南语",
+ "zh": "中文"
},
"searchPlaceholder": "搜索语言...",
"selectPlaceholder": "选择应用语言...",
diff --git a/src/features/localization/renderer/locales/zh/settings.json b/src/features/localization/renderer/locales/zh/settings.json
index 045aa0ea..91c4fd5a 100644
--- a/src/features/localization/renderer/locales/zh/settings.json
+++ b/src/features/localization/renderer/locales/zh/settings.json
@@ -68,12 +68,12 @@
"useInTeamPicker": "用于团队拾取器",
"testInProgress": "模型测试已在运行。",
"validationContextRequired": "请先在上方选择验证上下文, 才能启用 Test 和 Set default。保存到 team picker 只会为新团队记录 route。",
+ "actionsUnavailable": "操作暂时不可用。",
"defaultSaveInProgress": "正在保存 OpenCode default。",
"routeUnavailableAuth": "此 provider 需要先完成身份验证, 才能使用此模型。",
"routeUnavailableFailed": "此 model route 未通过上次 execution test。",
- "routeUnavailableUnknown": "此模型是当前 OpenCode default, 但尚未出现在 live catalog 中。",
- "actionsUnavailable": "操作暂时不可用。",
- "routeUnavailableGeneric": "此 model route 当前无法使用。"
+ "routeUnavailableGeneric": "此 model route 当前无法使用。",
+ "routeUnavailableUnknown": "此模型是当前 OpenCode default, 但尚未出现在 live catalog 中。"
},
"providers": {
"catalog": "OpenCode 提供者目录",
diff --git a/src/features/localization/renderer/locales/zh/team.json b/src/features/localization/renderer/locales/zh/team.json
index 3ac9caac..49abb356 100644
--- a/src/features/localization/renderer/locales/zh/team.json
+++ b/src/features/localization/renderer/locales/zh/team.json
@@ -1496,7 +1496,7 @@
},
"status": {
"reusedCrossTeamRequest": "重新使用最近的跨小组请求",
- "teamOffline": "团队离线"
+ "teamOffline": "离线"
},
"revision": {
"editing": "正在编辑上一条消息",
diff --git a/src/features/localization/renderer/resources.d.ts b/src/features/localization/renderer/resources.d.ts
index d106c2dc..bc138c44 100644
--- a/src/features/localization/renderer/resources.d.ts
+++ b/src/features/localization/renderer/resources.d.ts
@@ -376,15 +376,30 @@ export default interface Resources {
de: 'German';
en: 'English';
es: 'Spanish';
+ fa: 'Persian';
+ fil: 'Filipino';
fr: 'French';
hi: 'Hindi';
id: 'Indonesian';
+ it: 'Italian';
ja: 'Japanese';
ko: 'Korean';
+ mr: 'Marathi';
+ ms: 'Malay';
+ nl: 'Dutch';
+ pl: 'Polish';
pt: 'Portuguese';
+ ro: 'Romanian';
ru: 'Russian';
+ sw: 'Swahili';
system: 'System';
+ ta: 'Tamil';
+ te: 'Telugu';
+ th: 'Thai';
+ tr: 'Turkish';
+ uk: 'Ukrainian';
ur: 'Urdu';
+ vi: 'Vietnamese';
zh: 'Chinese';
};
searchPlaceholder: 'Search language...';
@@ -4287,7 +4302,7 @@ export default interface Resources {
};
status: {
reusedCrossTeamRequest: 'Reused recent cross-team request';
- teamOffline: 'Team offline';
+ teamOffline: 'offline';
};
teamSelector: {
current: 'current';
diff --git a/src/features/member-work-sync/contracts/types.ts b/src/features/member-work-sync/contracts/types.ts
index d2597252..c72144e7 100644
--- a/src/features/member-work-sync/contracts/types.ts
+++ b/src/features/member-work-sync/contracts/types.ts
@@ -334,4 +334,5 @@ export interface MemberWorkSyncOutboxCountRecentDeliveredInput {
teamName: string;
memberName: string;
sinceIso: string;
+ workSyncIntentKeyPrefix?: string;
}
diff --git a/src/features/member-work-sync/core/application/MemberWorkSyncDiagnosticsReader.ts b/src/features/member-work-sync/core/application/MemberWorkSyncDiagnosticsReader.ts
index aaa4915d..c329abe1 100644
--- a/src/features/member-work-sync/core/application/MemberWorkSyncDiagnosticsReader.ts
+++ b/src/features/member-work-sync/core/application/MemberWorkSyncDiagnosticsReader.ts
@@ -1,6 +1,7 @@
import { decideMemberWorkSyncStatus } from '../domain';
import { finalizeMemberWorkSyncAgenda } from './MemberWorkSyncReconciler';
+import { resolveMemberWorkSyncRuntimeActivity } from './MemberWorkSyncRuntimeActivity';
import type { MemberWorkSyncStatus, MemberWorkSyncStatusRequest } from '../../contracts';
import type { MemberWorkSyncUseCaseDeps } from './ports';
@@ -17,13 +18,14 @@ export class MemberWorkSyncDiagnosticsReader {
const source = await this.deps.agendaSource.loadAgenda(request);
const agenda = finalizeMemberWorkSyncAgenda(this.deps, source);
const nowIso = this.deps.clock.now().toISOString();
- const teamActive = this.deps.lifecycle
- ? await this.deps.lifecycle.isTeamActive(agenda.teamName)
- : true;
+ const runtimeActivity = await resolveMemberWorkSyncRuntimeActivity(this.deps, {
+ teamName: agenda.teamName,
+ memberName: agenda.memberName,
+ });
const decision = decideMemberWorkSyncStatus({
agenda,
nowIso,
- inactive: source.inactive || !teamActive,
+ inactive: source.inactive || runtimeActivity.inactive,
});
return {
@@ -39,7 +41,7 @@ export class MemberWorkSyncDiagnosticsReader {
evaluatedAt: nowIso,
diagnostics: [
...agenda.diagnostics,
- ...(!teamActive ? ['team_runtime_inactive'] : []),
+ ...runtimeActivity.diagnostics,
...decision.diagnostics,
'status_snapshot_not_persisted',
],
diff --git a/src/features/member-work-sync/core/application/MemberWorkSyncNudgeActivationPolicy.ts b/src/features/member-work-sync/core/application/MemberWorkSyncNudgeActivationPolicy.ts
index a8dd435b..c91cd3d3 100644
--- a/src/features/member-work-sync/core/application/MemberWorkSyncNudgeActivationPolicy.ts
+++ b/src/features/member-work-sync/core/application/MemberWorkSyncNudgeActivationPolicy.ts
@@ -15,6 +15,7 @@ export type MemberWorkSyncNudgeActivationReason =
| MemberWorkSyncTargetedRecoveryReason
| 'review_pickup_required'
| 'native_stale_in_progress'
+ | 'native_stale_assigned_work'
| 'status_not_nudgeable'
| 'blocking_metrics'
| 'phase2_not_ready';
@@ -59,6 +60,30 @@ function parseTime(value: string | undefined): number | null {
return Number.isFinite(time) ? time : null;
}
+function hasActiveAcceptedWorkLease(status: MemberWorkSyncStatus): boolean {
+ const report = status.report;
+ if (
+ report?.accepted !== true ||
+ report.agendaFingerprint !== status.agenda.fingerprint ||
+ (report.state !== 'still_working' && report.state !== 'blocked')
+ ) {
+ return false;
+ }
+
+ const evaluatedAtMs = parseTime(status.evaluatedAt);
+ const expiresAtMs = parseTime(report.expiresAt);
+ return evaluatedAtMs != null && expiresAtMs != null && expiresAtMs > evaluatedAtMs;
+}
+
+function hasNoCurrentAcceptedWorkProof(status: MemberWorkSyncStatus): boolean {
+ return (
+ status.diagnostics.includes('no_current_report') ||
+ status.diagnostics.includes('report_lease_missing') ||
+ status.diagnostics.includes('report_lease_expired') ||
+ status.diagnostics.includes('report_fingerprint_stale')
+ );
+}
+
function eventsForMember(
status: MemberWorkSyncStatus,
metrics: MemberWorkSyncTeamMetrics
@@ -69,16 +94,6 @@ function eventsForMember(
.sort((left, right) => left.recordedAt.localeCompare(right.recordedAt));
}
-function hasAcceptedReportForCurrentFingerprint(
- status: MemberWorkSyncStatus,
- metrics: MemberWorkSyncTeamMetrics
-): boolean {
- return eventsForMember(status, metrics).some(
- (event) =>
- event.kind === 'report_accepted' && event.agendaFingerprint === status.agenda.fingerprint
- );
-}
-
function isDifferentFingerprintBoundary(
event: MemberWorkSyncMetricEvent,
currentFingerprint: string
@@ -104,11 +119,19 @@ function getCurrentFingerprintStableSinceMs(
return recordedAt != null && recordedAt <= nowMs;
});
let latestDifferentFingerprintMs = Number.NEGATIVE_INFINITY;
+ let latestAcceptedReportMs = Number.NEGATIVE_INFINITY;
for (const event of memberEvents) {
const recordedAt = parseTime(event.recordedAt);
if (recordedAt != null && isDifferentFingerprintBoundary(event, currentFingerprint)) {
latestDifferentFingerprintMs = Math.max(latestDifferentFingerprintMs, recordedAt);
}
+ if (
+ recordedAt != null &&
+ event.kind === 'report_accepted' &&
+ event.agendaFingerprint === currentFingerprint
+ ) {
+ latestAcceptedReportMs = Math.max(latestAcceptedReportMs, recordedAt);
+ }
}
const currentNeedsSyncEventTimes = memberEvents.flatMap((event) => {
@@ -117,7 +140,8 @@ function getCurrentFingerprintStableSinceMs(
event.state === 'needs_sync' &&
event.agendaFingerprint === currentFingerprint &&
recordedAt != null &&
- recordedAt >= latestDifferentFingerprintMs
+ recordedAt >= latestDifferentFingerprintMs &&
+ recordedAt > latestAcceptedReportMs
? [recordedAt]
: [];
});
@@ -125,39 +149,62 @@ function getCurrentFingerprintStableSinceMs(
return currentNeedsSyncEventTimes.length > 0 ? Math.min(...currentNeedsSyncEventTimes) : null;
}
-function isNativeStaleInProgressCandidate(input: {
+function isNativeStaleWorkItem(status: MemberWorkSyncStatus['agenda']['items'][number]): boolean {
+ return (
+ status.kind === 'work' &&
+ ((status.reason === 'owned_in_progress_task' && status.evidence.status === 'in_progress') ||
+ (status.reason === 'owned_pending_task' && status.evidence.status === 'pending'))
+ );
+}
+
+function isNativeStaleEligibleItem(
+ status: MemberWorkSyncStatus['agenda']['items'][number]
+): boolean {
+ return isNativeStaleWorkItem(status) || isStrictReviewPickupItem(status);
+}
+
+function getNativeStaleWorkRecoveryReason(input: {
status: MemberWorkSyncStatus;
metrics: MemberWorkSyncTeamMetrics;
-}): boolean {
+}): 'native_stale_in_progress' | 'native_stale_assigned_work' | null {
const { status, metrics } = input;
if (
status.state !== 'needs_sync' ||
status.shadow?.wouldNudge !== true ||
- !status.diagnostics.includes('no_current_report') ||
+ !hasNoCurrentAcceptedWorkProof(status) ||
!status.providerId ||
!NATIVE_STALE_IN_PROGRESS_PROVIDERS.has(status.providerId) ||
isLeadLikeMemberName(status.memberName) ||
- status.agenda.items.length !== 1 ||
- hasAcceptedReportForCurrentFingerprint(status, metrics)
+ status.agenda.items.length === 0 ||
+ hasActiveAcceptedWorkLease(status)
) {
- return false;
+ return null;
}
- const [item] = status.agenda.items;
- if (
- item.kind !== 'work' ||
- item.reason !== 'owned_in_progress_task' ||
- item.evidence.status !== 'in_progress'
- ) {
- return false;
+ if (!status.agenda.items.every(isNativeStaleEligibleItem)) {
+ return null;
+ }
+ if (!status.agenda.items.some(isNativeStaleWorkItem)) {
+ return null;
}
const nowMs = parseTime(metrics.generatedAt) ?? parseTime(status.evaluatedAt);
if (nowMs == null) {
- return false;
+ return null;
}
const stableSinceMs = getCurrentFingerprintStableSinceMs(status, metrics, nowMs);
- return stableSinceMs != null && nowMs - stableSinceMs >= NATIVE_STALE_IN_PROGRESS_MIN_AGE_MS;
+ if (stableSinceMs == null || nowMs - stableSinceMs < NATIVE_STALE_IN_PROGRESS_MIN_AGE_MS) {
+ return null;
+ }
+
+ return status.agenda.items.every(
+ (item) =>
+ item.kind === 'work' &&
+ item.reason === 'owned_in_progress_task' &&
+ item.evidence.status === 'in_progress'
+ )
+ ? 'native_stale_in_progress'
+ : 'native_stale_assigned_work';
}
function isReviewPickupRequiredCandidate(status: MemberWorkSyncStatus): boolean {
@@ -184,8 +231,9 @@ export function decideMemberWorkSyncNudgeActivation(input: {
return { active: true, reason: 'review_pickup_required' };
}
- if (isNativeStaleInProgressCandidate(input)) {
- return { active: true, reason: 'native_stale_in_progress' };
+ const nativeStaleWorkReason = getNativeStaleWorkRecoveryReason(input);
+ if (nativeStaleWorkReason) {
+ return { active: true, reason: nativeStaleWorkReason };
}
const targetedRecovery = decideMemberWorkSyncTargetedRecovery(input.status);
diff --git a/src/features/member-work-sync/core/application/MemberWorkSyncNudgeDispatcher.ts b/src/features/member-work-sync/core/application/MemberWorkSyncNudgeDispatcher.ts
index f7cc6ffd..038ae15e 100644
--- a/src/features/member-work-sync/core/application/MemberWorkSyncNudgeDispatcher.ts
+++ b/src/features/member-work-sync/core/application/MemberWorkSyncNudgeDispatcher.ts
@@ -3,6 +3,7 @@ import { decideMemberWorkSyncStatus } from '../domain';
import { appendMemberWorkSyncAudit, reasonToAuditEvent } from './MemberWorkSyncAudit';
import { decideMemberWorkSyncNudgeActivation } from './MemberWorkSyncNudgeActivationPolicy';
import { finalizeMemberWorkSyncAgenda } from './MemberWorkSyncReconciler';
+import { resolveMemberWorkSyncRuntimeActivity } from './MemberWorkSyncRuntimeActivity';
import type {
MemberWorkSyncAgenda,
@@ -14,6 +15,10 @@ import type { MemberWorkSyncAuditEventName, MemberWorkSyncUseCaseDeps } from './
const MEMBER_WORK_SYNC_MAX_NUDGES_PER_MEMBER_PER_HOUR = 2;
const MEMBER_WORK_SYNC_RETRY_BASE_MINUTES = 10;
const MEMBER_WORK_SYNC_RETRY_MAX_MINUTES = 60;
+const MEMBER_WORK_SYNC_NUDGE_DISPATCH_ITEM_TIMEOUT_MS = 2 * 60_000;
+const MEMBER_WORK_SYNC_NUDGE_DISPATCH_TEAM_TIMEOUT_MS = 2 * 60_000;
+const MEMBER_WORK_SYNC_NUDGE_CLAIM_TIMEOUT_MS = 30_000;
+const AGENDA_SYNC_STILL_STUCK_RECOVERY_INTENT_PREFIX = 'agenda-sync-still-stuck:';
export interface MemberWorkSyncNudgeDispatchSummary {
claimed: number;
@@ -27,12 +32,32 @@ export interface MemberWorkSyncNudgeDispatchOptions {
claimedBy: string;
teamNames: string[];
limit?: number;
+ itemTimeoutMs?: number;
+ teamTimeoutMs?: number;
+ claimTimeoutMs?: number;
}
function emptySummary(): MemberWorkSyncNudgeDispatchSummary {
return { claimed: 0, delivered: 0, superseded: 0, retryable: 0, terminal: 0 };
}
+function addSummary(
+ left: MemberWorkSyncNudgeDispatchSummary,
+ right: MemberWorkSyncNudgeDispatchSummary
+): MemberWorkSyncNudgeDispatchSummary {
+ return {
+ claimed: left.claimed + right.claimed,
+ delivered: left.delivered + right.delivered,
+ superseded: left.superseded + right.superseded,
+ retryable: left.retryable + right.retryable,
+ terminal: left.terminal + right.terminal,
+ };
+}
+
+function unrefTimer(timer: ReturnType): void {
+ timer.unref?.();
+}
+
function addMinutes(iso: string, minutes: number): string {
return new Date(Date.parse(iso) + minutes * 60_000).toISOString();
}
@@ -76,6 +101,13 @@ function isStatusOnlyRecoveryOutboxItem(item: MemberWorkSyncOutboxItem): boolean
return item.payload.workSyncIntentKey?.startsWith('status-only:') === true;
}
+function isAgendaSyncStillStuckRecoveryOutboxItem(item: MemberWorkSyncOutboxItem): boolean {
+ return (
+ item.payload.workSyncIntentKey?.startsWith(AGENDA_SYNC_STILL_STUCK_RECOVERY_INTENT_PREFIX) ===
+ true
+ );
+}
+
function getPayloadReviewRequestEventIds(item: MemberWorkSyncOutboxItem): string[] {
return [...new Set(item.payload.workSyncReviewRequestEventIds ?? [])]
.filter((id) => id.length > 0)
@@ -108,6 +140,22 @@ function reviewPickupRequestIdsStillMatch(
return payloadIds.length > 0 && payloadIds.every((id) => agendaIds.includes(id));
}
+interface MemberWorkSyncNudgeDispatchRun {
+ cancelled: boolean;
+ parent?: MemberWorkSyncNudgeDispatchRun;
+}
+
+function isDispatchRunCancelled(run?: MemberWorkSyncNudgeDispatchRun): boolean {
+ let current: MemberWorkSyncNudgeDispatchRun | undefined = run;
+ while (current) {
+ if (current.cancelled) {
+ return true;
+ }
+ current = current.parent;
+ }
+ return false;
+}
+
export class MemberWorkSyncNudgeDispatcher {
constructor(private readonly deps: MemberWorkSyncUseCaseDeps) {}
@@ -121,28 +169,275 @@ export class MemberWorkSyncNudgeDispatcher {
}
const nowIso = this.deps.clock.now().toISOString();
- const summary = emptySummary();
- for (const teamName of [
- ...new Set(options.teamNames.map((name) => name.trim()).filter(Boolean)),
- ]) {
- const claimed = await outbox.claimDue({
- teamName,
- claimedBy: options.claimedBy,
- nowIso,
- limit: options.limit ?? 10,
- });
- summary.claimed += claimed.length;
- for (const item of claimed) {
- const result = await this.dispatchItem(item, nowIso);
- summary[result] += 1;
+ const itemTimeoutMs = Math.max(
+ 1,
+ options.itemTimeoutMs ?? MEMBER_WORK_SYNC_NUDGE_DISPATCH_ITEM_TIMEOUT_MS
+ );
+ const teamTimeoutMs = Math.max(
+ 1,
+ options.teamTimeoutMs ?? MEMBER_WORK_SYNC_NUDGE_DISPATCH_TEAM_TIMEOUT_MS
+ );
+ const claimTimeoutMs = Math.max(
+ 1,
+ options.claimTimeoutMs ?? MEMBER_WORK_SYNC_NUDGE_CLAIM_TIMEOUT_MS
+ );
+ const teamNames = [...new Set(options.teamNames.map((name) => name.trim()).filter(Boolean))];
+ const summaries = await Promise.allSettled(
+ teamNames.map((teamName) =>
+ this.dispatchTeamWithTimeout(teamName, options, nowIso, {
+ itemTimeoutMs,
+ teamTimeoutMs,
+ claimTimeoutMs,
+ })
+ )
+ );
+
+ let summary = emptySummary();
+ for (const [index, result] of summaries.entries()) {
+ if (result.status === 'fulfilled') {
+ summary = addSummary(summary, result.value);
+ } else {
+ this.deps.logger?.warn('member work sync team nudge dispatch failed', {
+ teamName: teamNames[index],
+ error: String(result.reason),
+ });
}
}
return summary;
}
+ private async dispatchTeamWithTimeout(
+ teamName: string,
+ options: MemberWorkSyncNudgeDispatchOptions,
+ nowIso: string,
+ timeouts: { itemTimeoutMs: number; teamTimeoutMs: number; claimTimeoutMs: number }
+ ): Promise {
+ let timeout: ReturnType | null = null;
+ const run: MemberWorkSyncNudgeDispatchRun = { cancelled: false };
+ const work = this.dispatchTeam(teamName, options, nowIso, timeouts, run);
+ void work.catch(() => undefined);
+
+ try {
+ const result = await Promise.race([
+ work,
+ new Promise<'timeout'>((resolve) => {
+ timeout = setTimeout(() => {
+ run.cancelled = true;
+ resolve('timeout');
+ }, timeouts.teamTimeoutMs);
+ unrefTimer(timeout);
+ }),
+ ]);
+ if (result !== 'timeout') {
+ return result;
+ }
+ this.deps.logger?.warn('member work sync team nudge dispatch timed out', {
+ teamName,
+ timeoutMs: timeouts.teamTimeoutMs,
+ });
+ return emptySummary();
+ } finally {
+ run.cancelled = true;
+ if (timeout) {
+ clearTimeout(timeout);
+ }
+ }
+ }
+
+ private async dispatchTeam(
+ teamName: string,
+ options: MemberWorkSyncNudgeDispatchOptions,
+ nowIso: string,
+ timeouts: { itemTimeoutMs: number; claimTimeoutMs: number },
+ run: MemberWorkSyncNudgeDispatchRun
+ ): Promise {
+ const summary = emptySummary();
+ const claimed = await this.claimDueWithTimeout(teamName, options, nowIso, timeouts, run);
+ if (!claimed || isDispatchRunCancelled(run)) {
+ return summary;
+ }
+
+ summary.claimed += claimed.length;
+ for (const item of claimed) {
+ if (isDispatchRunCancelled(run)) {
+ break;
+ }
+ const result = await this.dispatchItemWithTimeout(item, nowIso, timeouts.itemTimeoutMs, run);
+ summary[result] += 1;
+ }
+ return summary;
+ }
+
+ private async claimDueWithTimeout(
+ teamName: string,
+ options: MemberWorkSyncNudgeDispatchOptions,
+ nowIso: string,
+ timeouts: { claimTimeoutMs: number },
+ run: MemberWorkSyncNudgeDispatchRun
+ ): Promise {
+ const outbox = this.deps.outboxStore;
+ if (!outbox) {
+ return null;
+ }
+
+ let timeout: ReturnType | null = null;
+ const work = outbox.claimDue({
+ teamName,
+ claimedBy: options.claimedBy,
+ nowIso,
+ limit: options.limit ?? 10,
+ });
+ void work.catch(() => undefined);
+
+ try {
+ const result = await Promise.race([
+ work,
+ new Promise<'timeout'>((resolve) => {
+ timeout = setTimeout(() => resolve('timeout'), timeouts.claimTimeoutMs);
+ unrefTimer(timeout);
+ }),
+ ]);
+ if (result !== 'timeout') {
+ return isDispatchRunCancelled(run) ? null : result;
+ }
+ this.deps.logger?.warn('member work sync nudge claim timed out', {
+ teamName,
+ timeoutMs: timeouts.claimTimeoutMs,
+ });
+ return null;
+ } catch (error) {
+ this.deps.logger?.warn('member work sync nudge claim failed', {
+ teamName,
+ error: String(error),
+ });
+ return null;
+ } finally {
+ if (timeout) {
+ clearTimeout(timeout);
+ }
+ }
+ }
+
+ private async dispatchItemWithTimeout(
+ item: MemberWorkSyncOutboxItem,
+ nowIso: string,
+ timeoutMs: number,
+ run: MemberWorkSyncNudgeDispatchRun
+ ): Promise> {
+ let timeout: ReturnType | null = null;
+ const itemRun: MemberWorkSyncNudgeDispatchRun = { cancelled: false, parent: run };
+ const work = this.dispatchItem(item, nowIso, itemRun);
+ void work.catch(() => undefined);
+
+ try {
+ const result = await Promise.race<
+ keyof Omit | 'timeout'
+ >([
+ work,
+ new Promise<'timeout'>((resolve) => {
+ timeout = setTimeout(() => {
+ itemRun.cancelled = true;
+ resolve('timeout');
+ }, timeoutMs);
+ unrefTimer(timeout);
+ }),
+ ]);
+ if (result !== 'timeout') {
+ return result;
+ }
+ await this.tryMarkDispatchItemRetryable(
+ item,
+ nowIso,
+ `nudge dispatch item timed out after ${timeoutMs}ms`,
+ timeoutMs,
+ run
+ );
+ return 'retryable';
+ } catch (error) {
+ await this.tryMarkDispatchItemRetryable(item, nowIso, String(error), timeoutMs, run);
+ return 'retryable';
+ } finally {
+ itemRun.cancelled = true;
+ if (timeout) {
+ clearTimeout(timeout);
+ }
+ }
+ }
+
+ private async tryMarkDispatchItemRetryable(
+ item: MemberWorkSyncOutboxItem,
+ nowIso: string,
+ error: string,
+ timeoutMs: number,
+ run?: MemberWorkSyncNudgeDispatchRun
+ ): Promise {
+ if (isDispatchRunCancelled(run)) {
+ return;
+ }
+ let timeout: ReturnType | null = null;
+ const markTimeoutMs = Math.min(Math.max(1, timeoutMs), 5_000);
+ const work = this.markDispatchItemRetryable(item, nowIso, error, run);
+ void work.catch(() => undefined);
+
+ try {
+ const result = await Promise.race([
+ work.then(() => 'marked' as const),
+ new Promise<'timeout'>((resolve) => {
+ timeout = setTimeout(() => resolve('timeout'), markTimeoutMs);
+ unrefTimer(timeout);
+ }),
+ ]);
+ if (result === 'timeout') {
+ this.deps.logger?.warn('member work sync nudge retry mark timed out', {
+ teamName: item.teamName,
+ memberName: item.memberName,
+ outboxId: item.id,
+ timeoutMs: markTimeoutMs,
+ error,
+ });
+ }
+ } catch (markError) {
+ this.deps.logger?.warn('member work sync nudge retry mark failed', {
+ teamName: item.teamName,
+ memberName: item.memberName,
+ outboxId: item.id,
+ error: String(markError),
+ });
+ } finally {
+ if (timeout) {
+ clearTimeout(timeout);
+ }
+ }
+ }
+
+ private async markDispatchItemRetryable(
+ item: MemberWorkSyncOutboxItem,
+ nowIso: string,
+ error: string,
+ run?: MemberWorkSyncNudgeDispatchRun
+ ): Promise {
+ if (isDispatchRunCancelled(run)) {
+ return;
+ }
+ await this.deps.outboxStore?.markFailed({
+ teamName: item.teamName,
+ id: item.id,
+ attemptGeneration: item.attemptGeneration,
+ error,
+ retryable: true,
+ nowIso,
+ nextAttemptAt: nextRetryAt(item, nowIso),
+ });
+ if (isDispatchRunCancelled(run)) {
+ return;
+ }
+ await this.appendDispatchAudit(item, 'nudge_retryable', error);
+ }
+
private async dispatchItem(
item: MemberWorkSyncOutboxItem,
- nowIso: string
+ nowIso: string,
+ run: MemberWorkSyncNudgeDispatchRun
): Promise> {
const outbox = this.deps.outboxStore;
const inbox = this.deps.inboxNudge;
@@ -150,7 +445,13 @@ export class MemberWorkSyncNudgeDispatcher {
return 'terminal';
}
+ if (isDispatchRunCancelled(run)) {
+ return 'retryable';
+ }
const revalidation = await this.revalidate(item, nowIso);
+ if (isDispatchRunCancelled(run)) {
+ return 'retryable';
+ }
if (!revalidation.ok) {
if (revalidation.retryable) {
await outbox.markFailed({
@@ -162,6 +463,9 @@ export class MemberWorkSyncNudgeDispatcher {
nowIso,
nextAttemptAt: revalidation.nextAttemptAt ?? nextRetryAt(item, nowIso),
});
+ if (isDispatchRunCancelled(run)) {
+ return 'retryable';
+ }
await this.appendDispatchAudit(
item,
reasonToAuditEvent(revalidation.reason),
@@ -170,8 +474,8 @@ export class MemberWorkSyncNudgeDispatcher {
return 'retryable';
}
if (revalidation.reason.startsWith('review_pickup_delivery_unavailable:')) {
- await this.markReviewPickupDeliveryUnavailable(item, nowIso, revalidation.reason);
- return 'superseded';
+ await this.markReviewPickupDeliveryUnavailable(item, nowIso, revalidation.reason, run);
+ return isDispatchRunCancelled(run) ? 'retryable' : 'superseded';
}
await outbox.markSuperseded({
teamName: item.teamName,
@@ -179,11 +483,17 @@ export class MemberWorkSyncNudgeDispatcher {
reason: revalidation.reason,
nowIso,
});
+ if (isDispatchRunCancelled(run)) {
+ return 'retryable';
+ }
await this.appendDispatchAudit(item, 'nudge_superseded', revalidation.reason);
return 'superseded';
}
try {
+ if (isDispatchRunCancelled(run)) {
+ return 'retryable';
+ }
const inserted = await inbox.insertIfAbsent({
teamName: item.teamName,
memberName: item.memberName,
@@ -192,6 +502,9 @@ export class MemberWorkSyncNudgeDispatcher {
payload: item.payload,
timestamp: nowIso,
});
+ if (isDispatchRunCancelled(run)) {
+ return 'retryable';
+ }
if (inserted.conflict) {
await outbox.markFailed({
teamName: item.teamName,
@@ -201,6 +514,9 @@ export class MemberWorkSyncNudgeDispatcher {
retryable: false,
nowIso,
});
+ if (isDispatchRunCancelled(run)) {
+ return 'retryable';
+ }
await this.appendDispatchAudit(item, 'nudge_skipped', 'inbox_payload_conflict');
return 'terminal';
}
@@ -210,7 +526,8 @@ export class MemberWorkSyncNudgeDispatcher {
inserted.messageId,
inserted.inserted,
revalidation.providerId,
- nowIso
+ nowIso,
+ run
);
}
await outbox.markDelivered({
@@ -220,15 +537,25 @@ export class MemberWorkSyncNudgeDispatcher {
deliveredMessageId: inserted.messageId,
nowIso,
});
+ if (isDispatchRunCancelled(run)) {
+ return 'retryable';
+ }
await this.appendDispatchAudit(item, 'nudge_delivered', 'inbox_inserted');
+ if (isDispatchRunCancelled(run)) {
+ return 'retryable';
+ }
await this.scheduleDeliveryWake(
item,
inserted.messageId,
inserted.inserted,
- revalidation.providerId
+ revalidation.providerId,
+ run
);
- return 'delivered';
+ return isDispatchRunCancelled(run) ? 'retryable' : 'delivered';
} catch (error) {
+ if (isDispatchRunCancelled(run)) {
+ return 'retryable';
+ }
await outbox.markFailed({
teamName: item.teamName,
id: item.id,
@@ -238,6 +565,9 @@ export class MemberWorkSyncNudgeDispatcher {
nowIso,
nextAttemptAt: nextRetryAt(item, nowIso),
});
+ if (isDispatchRunCancelled(run)) {
+ return 'retryable';
+ }
await this.appendDispatchAudit(item, 'nudge_retryable', String(error));
return 'retryable';
}
@@ -248,7 +578,8 @@ export class MemberWorkSyncNudgeDispatcher {
messageId: string,
inserted: boolean,
providerId: MemberWorkSyncStatus['providerId'] | undefined,
- nowIso: string
+ nowIso: string,
+ run: MemberWorkSyncNudgeDispatchRun
): Promise> {
const outbox = this.deps.outboxStore;
const delivery = this.deps.reviewPickupDelivery;
@@ -256,11 +587,15 @@ export class MemberWorkSyncNudgeDispatcher {
await this.markReviewPickupDeliveryUnavailable(
item,
nowIso,
- 'review_pickup_delivery_port_unavailable'
+ 'review_pickup_delivery_port_unavailable',
+ run
);
- return 'superseded';
+ return isDispatchRunCancelled(run) ? 'retryable' : 'superseded';
}
+ if (isDispatchRunCancelled(run)) {
+ return 'retryable';
+ }
const outcome = await delivery.deliver({
teamName: item.teamName,
memberName: item.memberName,
@@ -270,6 +605,9 @@ export class MemberWorkSyncNudgeDispatcher {
inserted,
nowIso,
});
+ if (isDispatchRunCancelled(run)) {
+ return 'retryable';
+ }
if (outcome.ok) {
await outbox.markDelivered({
@@ -281,7 +619,13 @@ export class MemberWorkSyncNudgeDispatcher {
deliveryDiagnostics: outcome.diagnostics,
nowIso,
});
+ if (isDispatchRunCancelled(run)) {
+ return 'retryable';
+ }
await this.appendDispatchAudit(item, 'review_pickup_member_nudge_delivered', outcome.state);
+ if (isDispatchRunCancelled(run)) {
+ return 'retryable';
+ }
await this.appendDispatchAudit(item, 'nudge_delivered', `review_pickup:${outcome.state}`);
return 'delivered';
}
@@ -296,13 +640,16 @@ export class MemberWorkSyncNudgeDispatcher {
nowIso,
nextAttemptAt: outcome.retryAfterIso ?? nextRetryAt(item, nowIso),
});
+ if (isDispatchRunCancelled(run)) {
+ return 'retryable';
+ }
await this.appendDispatchAudit(item, 'review_pickup_wake_failed_retryable', outcome.message);
return 'retryable';
}
if (outcome.reason === 'capability_absent') {
- await this.markReviewPickupDeliveryUnavailable(item, nowIso, outcome.message);
- return 'superseded';
+ await this.markReviewPickupDeliveryUnavailable(item, nowIso, outcome.message, run);
+ return isDispatchRunCancelled(run) ? 'retryable' : 'superseded';
}
await outbox.markFailed({
@@ -313,6 +660,9 @@ export class MemberWorkSyncNudgeDispatcher {
retryable: false,
nowIso,
});
+ if (isDispatchRunCancelled(run)) {
+ return 'retryable';
+ }
await this.appendDispatchAudit(item, 'nudge_skipped', outcome.message);
return 'terminal';
}
@@ -320,26 +670,40 @@ export class MemberWorkSyncNudgeDispatcher {
private async markReviewPickupDeliveryUnavailable(
item: MemberWorkSyncOutboxItem,
nowIso: string,
- reason: string
+ reason: string,
+ run?: MemberWorkSyncNudgeDispatchRun
): Promise {
+ if (isDispatchRunCancelled(run)) {
+ return;
+ }
await this.deps.outboxStore?.markSuperseded({
teamName: item.teamName,
id: item.id,
reason,
nowIso,
});
+ if (isDispatchRunCancelled(run)) {
+ return;
+ }
await this.appendDispatchAudit(item, 'review_pickup_delivery_unavailable', reason);
+ if (isDispatchRunCancelled(run)) {
+ return;
+ }
await this.appendDispatchAudit(item, 'review_pickup_escalated', reason);
- await this.notifyReviewPickupEscalation(item, nowIso, reason);
+ if (isDispatchRunCancelled(run)) {
+ return;
+ }
+ await this.notifyReviewPickupEscalation(item, nowIso, reason, run);
}
private async notifyReviewPickupEscalation(
item: MemberWorkSyncOutboxItem,
nowIso: string,
- reason: string
+ reason: string,
+ run?: MemberWorkSyncNudgeDispatchRun
): Promise {
const escalation = this.deps.reviewPickupEscalation;
- if (!escalation) {
+ if (!escalation || isDispatchRunCancelled(run)) {
return;
}
@@ -387,12 +751,16 @@ export class MemberWorkSyncNudgeDispatcher {
| { ok: true; providerId?: MemberWorkSyncStatus['providerId'] }
| { ok: false; reason: string; retryable: boolean; nextAttemptAt?: string }
> {
- const teamActive = this.deps.lifecycle
- ? await this.deps.lifecycle.isTeamActive(item.teamName)
- : true;
- if (!teamActive) {
+ const runtimeActivity = await resolveMemberWorkSyncRuntimeActivity(this.deps, {
+ teamName: item.teamName,
+ memberName: item.memberName,
+ });
+ if (!runtimeActivity.teamActive) {
return { ok: false, reason: 'team_inactive', retryable: false };
}
+ if (!runtimeActivity.memberActive) {
+ return { ok: false, reason: 'member_runtime_inactive', retryable: false };
+ }
const previous = await this.deps.statusStore.read({
teamName: item.teamName,
@@ -416,11 +784,12 @@ export class MemberWorkSyncNudgeDispatcher {
agenda,
latestAcceptedReport: previous.report?.accepted ? previous.report : null,
nowIso,
- inactive: source.inactive || !teamActive,
+ inactive: source.inactive || runtimeActivity.inactive,
});
const providerId = source.providerId ?? previous.providerId;
+ const { report: _previousReport, ...previousWithoutReport } = previous;
const revalidatedStatus: MemberWorkSyncStatus = {
- ...previous,
+ ...previousWithoutReport,
state: decision.state,
agenda,
...(decision.acceptedReport ? { report: decision.acceptedReport } : {}),
@@ -487,6 +856,9 @@ export class MemberWorkSyncNudgeDispatcher {
teamName: item.teamName,
memberName: item.memberName,
sinceIso: subtractMinutes(nowIso, 60),
+ ...(isAgendaSyncStillStuckRecoveryOutboxItem(item)
+ ? { workSyncIntentKeyPrefix: AGENDA_SYNC_STILL_STUCK_RECOVERY_INTENT_PREFIX }
+ : {}),
});
if (
recentDelivered != null &&
@@ -521,21 +893,46 @@ export class MemberWorkSyncNudgeDispatcher {
}
const taskIds = item.payload.taskRefs.map((taskRef) => taskRef.taskId);
- if (
- this.deps.watchdogCooldown &&
- (await this.deps.watchdogCooldown.hasRecentNudge({
- teamName: item.teamName,
- memberName: item.memberName,
- taskIds,
- nowIso,
- }))
- ) {
- return { ok: false, reason: 'watchdog_cooldown_active', retryable: true };
+ const watchdogCooldown = await this.resolveWatchdogCooldown(item, taskIds, nowIso);
+ if (watchdogCooldown.active) {
+ return {
+ ok: false,
+ reason: 'watchdog_cooldown_active',
+ retryable: true,
+ ...(watchdogCooldown.retryAfterIso
+ ? { nextAttemptAt: watchdogCooldown.retryAfterIso }
+ : {}),
+ };
}
return { ok: true, ...(providerId ? { providerId } : {}) };
}
+ private async resolveWatchdogCooldown(
+ item: MemberWorkSyncOutboxItem,
+ taskIds: string[],
+ nowIso: string
+ ): Promise<{ active: boolean; retryAfterIso?: string }> {
+ const watchdogCooldown = this.deps.watchdogCooldown;
+ if (!watchdogCooldown) {
+ return { active: false };
+ }
+ const input = {
+ teamName: item.teamName,
+ memberName: item.memberName,
+ taskIds,
+ nowIso,
+ };
+ if (watchdogCooldown.getRecentNudgeCooldown) {
+ const result = await watchdogCooldown.getRecentNudgeCooldown(input);
+ return {
+ active: result.active,
+ ...(result.retryAfterIso ? { retryAfterIso: result.retryAfterIso } : {}),
+ };
+ }
+ return { active: await watchdogCooldown.hasRecentNudge(input) };
+ }
+
private async revalidateProofMissingRecovery(
item: MemberWorkSyncOutboxItem,
nowIso: string
@@ -566,9 +963,10 @@ export class MemberWorkSyncNudgeDispatcher {
item: MemberWorkSyncOutboxItem,
messageId: string,
inserted: boolean,
- providerId?: MemberWorkSyncStatus['providerId']
+ providerId?: MemberWorkSyncStatus['providerId'],
+ run?: MemberWorkSyncNudgeDispatchRun
): Promise {
- if (!this.deps.nudgeDeliveryWake) {
+ if (!this.deps.nudgeDeliveryWake || isDispatchRunCancelled(run)) {
return;
}
diff --git a/src/features/member-work-sync/core/application/MemberWorkSyncNudgeOutboxPlanner.ts b/src/features/member-work-sync/core/application/MemberWorkSyncNudgeOutboxPlanner.ts
index 03f44fbd..310c2f14 100644
--- a/src/features/member-work-sync/core/application/MemberWorkSyncNudgeOutboxPlanner.ts
+++ b/src/features/member-work-sync/core/application/MemberWorkSyncNudgeOutboxPlanner.ts
@@ -5,13 +5,25 @@ import {
} from '../domain';
import { appendMemberWorkSyncAudit } from './MemberWorkSyncAudit';
-import { decideMemberWorkSyncNudgeActivation } from './MemberWorkSyncNudgeActivationPolicy';
+import {
+ decideMemberWorkSyncNudgeActivation,
+ type MemberWorkSyncNudgeActivationReason,
+} from './MemberWorkSyncNudgeActivationPolicy';
-import type { MemberWorkSyncOutboxEnsureInput, MemberWorkSyncStatus } from '../../contracts';
+import type {
+ MemberWorkSyncOutboxEnsureInput,
+ MemberWorkSyncOutboxItem,
+ MemberWorkSyncStatus,
+} from '../../contracts';
import type { MemberWorkSyncUseCaseDeps } from './ports';
const STATUS_ONLY_RECOVERY_INTENT_PREFIX = 'status-only';
const AGENDA_SYNC_REFRESH_INTENT_PREFIX = 'agenda-sync-refresh';
+const DELIVERED_STILL_STUCK_RECOVERY_INTENT_PREFIX = 'agenda-sync-still-stuck';
+const DELIVERED_STILL_STUCK_RECOVERY_MIN_AGE_MS = 6 * 60_000;
+const DELIVERED_STILL_STUCK_RECOVERY_BUCKET_MS = 30 * 60_000;
+const DELIVERED_STILL_STUCK_RECOVERY_DELIVERY_WINDOW_MS = 60 * 60_000;
+const DELIVERED_STILL_STUCK_RECOVERY_MAX_DELIVERED_PER_WINDOW = 2;
function getReviewRequestEventIds(status: MemberWorkSyncStatus): string[] {
return [
@@ -44,6 +56,29 @@ function isTurnSettledReconcile(status: MemberWorkSyncStatus): boolean {
return status.shadow?.triggerReasons?.includes('turn_settled') === true;
}
+function parseTime(value: string | undefined): number | null {
+ if (!value) {
+ return null;
+ }
+ const time = Date.parse(value);
+ return Number.isFinite(time) ? time : null;
+}
+
+function hasActiveAcceptedWorkLease(status: MemberWorkSyncStatus): boolean {
+ const report = status.report;
+ if (
+ report?.accepted !== true ||
+ report.agendaFingerprint !== status.agenda.fingerprint ||
+ (report.state !== 'still_working' && report.state !== 'blocked')
+ ) {
+ return false;
+ }
+
+ const evaluatedAtMs = parseTime(status.evaluatedAt);
+ const expiresAtMs = parseTime(report.expiresAt);
+ return evaluatedAtMs != null && expiresAtMs != null && expiresAtMs > evaluatedAtMs;
+}
+
function shouldPlanStatusOnlyRecovery(input: {
status: MemberWorkSyncStatus;
baseInput: MemberWorkSyncOutboxEnsureInput;
@@ -56,7 +91,7 @@ function shouldPlanStatusOnlyRecovery(input: {
input.baseInput.payload.workSyncIntent === 'agenda_sync' &&
input.baseInput.payload.workSyncIntentKey === undefined &&
input.existingItemStatus === 'delivered' &&
- input.status.report?.accepted !== true
+ !hasActiveAcceptedWorkLease(input.status)
);
}
@@ -72,10 +107,69 @@ function shouldPlanAgendaSyncRefreshRecovery(input: {
input.baseInput.payload.workSyncIntentKey === undefined &&
input.existingItem.status === 'delivered' &&
input.existingItem.agendaFingerprint === input.baseInput.agendaFingerprint &&
- input.status.report?.accepted !== true
+ !hasActiveAcceptedWorkLease(input.status)
);
}
+function isDeliveredStillStuckRecoveryReason(reason: MemberWorkSyncNudgeActivationReason): boolean {
+ return (
+ reason === 'shadow_ready' ||
+ reason === 'native_stale_in_progress' ||
+ reason === 'native_stale_assigned_work' ||
+ reason === 'opencode_targeted_shadow_collecting' ||
+ reason === 'lead_targeted_shadow_collecting' ||
+ reason === 'native_targeted_shadow_collecting'
+ );
+}
+
+function shouldPlanDeliveredStillStuckRecovery(input: {
+ status: MemberWorkSyncStatus;
+ baseInput: MemberWorkSyncOutboxEnsureInput;
+ existingItem: MemberWorkSyncOutboxItem;
+ activationReason: MemberWorkSyncNudgeActivationReason;
+}): boolean {
+ const recoverableExistingItem =
+ input.existingItem.status === 'delivered' ||
+ (input.existingItem.status === 'failed_terminal' &&
+ input.existingItem.lastError === 'inbox_payload_conflict');
+
+ if (
+ input.status.state !== 'needs_sync' ||
+ input.status.shadow?.wouldNudge !== true ||
+ input.baseInput.payload.workSyncIntent !== 'agenda_sync' ||
+ input.baseInput.payload.workSyncIntentKey !== undefined ||
+ !recoverableExistingItem ||
+ input.existingItem.agendaFingerprint !== input.baseInput.agendaFingerprint ||
+ hasActiveAcceptedWorkLease(input.status) ||
+ !isDeliveredStillStuckRecoveryReason(input.activationReason)
+ ) {
+ return false;
+ }
+
+ const deliveredAtMs = parseTime(input.existingItem.updatedAt);
+ const evaluatedAtMs = parseTime(input.status.evaluatedAt);
+ return (
+ deliveredAtMs != null &&
+ evaluatedAtMs != null &&
+ evaluatedAtMs - deliveredAtMs >= DELIVERED_STILL_STUCK_RECOVERY_MIN_AGE_MS
+ );
+}
+
+function isOutboxItemAwaitingDelivery(item: MemberWorkSyncOutboxItem): boolean {
+ return item.status !== 'delivered' && item.status !== 'failed_terminal';
+}
+
+function getDeliveredStillStuckRecoveryBucket(status: MemberWorkSyncStatus): string | null {
+ const evaluatedAtMs = parseTime(status.evaluatedAt);
+ if (evaluatedAtMs == null) {
+ return null;
+ }
+ const bucketMs =
+ Math.floor(evaluatedAtMs / DELIVERED_STILL_STUCK_RECOVERY_BUCKET_MS) *
+ DELIVERED_STILL_STUCK_RECOVERY_BUCKET_MS;
+ return new Date(bucketMs).toISOString();
+}
+
export interface MemberWorkSyncNudgeOutboxPlanResult {
planned: boolean;
code:
@@ -151,9 +245,39 @@ export class MemberWorkSyncNudgeOutboxPlanner {
};
}
+ private buildDeliveredStillStuckRecoveryInput(
+ status: MemberWorkSyncStatus,
+ baseInput: MemberWorkSyncOutboxEnsureInput,
+ bucket: string
+ ): MemberWorkSyncOutboxEnsureInput {
+ const intentKey = `${DELIVERED_STILL_STUCK_RECOVERY_INTENT_PREFIX}:${status.agenda.fingerprint}:${baseInput.payloadHash}:${bucket}`;
+ const payload = {
+ ...baseInput.payload,
+ workSyncIntentKey: intentKey,
+ text: [
+ 'Work sync retry: the previous work-sync nudge for this agenda is still stuck and still no accepted member_work_sync_report exists.',
+ 'Use this latest nudge as the current required sync action.',
+ baseInput.payload.text,
+ ].join('\n'),
+ };
+
+ return {
+ ...baseInput,
+ id: buildMemberWorkSyncNudgeId({
+ teamName: status.teamName,
+ memberName: status.memberName,
+ agendaFingerprint: status.agenda.fingerprint,
+ intentKey,
+ }),
+ payload,
+ payloadHash: buildMemberWorkSyncNudgePayloadHash(this.deps.hash, payload),
+ };
+ }
+
private async planStatusOnlyRecovery(
status: MemberWorkSyncStatus,
- baseInput: MemberWorkSyncOutboxEnsureInput
+ baseInput: MemberWorkSyncOutboxEnsureInput,
+ activationReason?: MemberWorkSyncNudgeActivationReason
): Promise {
const outboxStore = this.deps.outboxStore;
if (!outboxStore) {
@@ -173,7 +297,82 @@ export class MemberWorkSyncNudgeOutboxPlanner {
return { planned: false, code: 'payload_conflict' };
}
- const recoveryPlanned = recoveryResult.item.status !== 'delivered';
+ if (activationReason) {
+ const deliveredStillStuckRecovery = await this.planDeliveredStillStuckRecovery(
+ status,
+ baseInput,
+ recoveryResult.item,
+ activationReason
+ );
+ if (deliveredStillStuckRecovery) {
+ return deliveredStillStuckRecovery;
+ }
+ }
+
+ const recoveryPlanned = isOutboxItemAwaitingDelivery(recoveryResult.item);
+ const recoveryPlanResult = {
+ planned: recoveryPlanned,
+ code: recoveryResult.outcome,
+ } as const;
+ await this.appendPlanAudit(status, recoveryPlanResult);
+ return recoveryPlanResult;
+ }
+
+ private async planDeliveredStillStuckRecovery(
+ status: MemberWorkSyncStatus,
+ baseInput: MemberWorkSyncOutboxEnsureInput,
+ existingItem: MemberWorkSyncOutboxItem,
+ activationReason: MemberWorkSyncNudgeActivationReason
+ ): Promise {
+ const outboxStore = this.deps.outboxStore;
+ if (!outboxStore) {
+ return { planned: false, code: 'outbox_unavailable' };
+ }
+ if (
+ !shouldPlanDeliveredStillStuckRecovery({
+ status,
+ baseInput,
+ existingItem,
+ activationReason,
+ })
+ ) {
+ return null;
+ }
+
+ const bucket = getDeliveredStillStuckRecoveryBucket(status);
+ const evaluatedAtMs = parseTime(status.evaluatedAt);
+ if (!bucket || evaluatedAtMs == null) {
+ await this.appendPlanAudit(status, { planned: false, code: 'existing' });
+ return { planned: false, code: 'existing' };
+ }
+ const recentDelivered = await outboxStore.countRecentDelivered({
+ teamName: status.teamName,
+ memberName: status.memberName,
+ sinceIso: new Date(
+ evaluatedAtMs - DELIVERED_STILL_STUCK_RECOVERY_DELIVERY_WINDOW_MS
+ ).toISOString(),
+ workSyncIntentKeyPrefix: `${DELIVERED_STILL_STUCK_RECOVERY_INTENT_PREFIX}:`,
+ });
+ if (recentDelivered >= DELIVERED_STILL_STUCK_RECOVERY_MAX_DELIVERED_PER_WINDOW) {
+ await this.appendPlanAudit(status, { planned: false, code: 'existing' });
+ return { planned: false, code: 'existing' };
+ }
+
+ const recoveryInput = this.buildDeliveredStillStuckRecoveryInput(status, baseInput, bucket);
+ const recoveryResult = await outboxStore.ensurePending(recoveryInput);
+ if (!recoveryResult.ok) {
+ this.deps.logger?.warn('member work sync delivered-still-stuck recovery payload conflict', {
+ teamName: status.teamName,
+ memberName: status.memberName,
+ outboxId: recoveryInput.id,
+ existingPayloadHash: recoveryResult.existingPayloadHash,
+ requestedPayloadHash: recoveryResult.requestedPayloadHash,
+ });
+ await this.appendPlanAudit(status, { planned: false, code: 'payload_conflict' });
+ return { planned: false, code: 'payload_conflict' };
+ }
+
+ const recoveryPlanned = isOutboxItemAwaitingDelivery(recoveryResult.item);
const recoveryPlanResult = {
planned: recoveryPlanned,
code: recoveryResult.outcome,
@@ -299,10 +498,19 @@ export class MemberWorkSyncNudgeOutboxPlanner {
existingItemStatus: recoveryResult.item.status,
})
) {
- return this.planStatusOnlyRecovery(status, input);
+ return this.planStatusOnlyRecovery(status, input, activation.reason);
+ }
+ const deliveredStillStuckRecovery = await this.planDeliveredStillStuckRecovery(
+ status,
+ input,
+ recoveryResult.item,
+ activation.reason
+ );
+ if (deliveredStillStuckRecovery) {
+ return deliveredStillStuckRecovery;
}
- const recoveryPlanned = recoveryResult.item.status !== 'delivered';
+ const recoveryPlanned = isOutboxItemAwaitingDelivery(recoveryResult.item);
const recoveryPlanResult = {
planned: recoveryPlanned,
code: recoveryResult.outcome,
@@ -310,6 +518,15 @@ export class MemberWorkSyncNudgeOutboxPlanner {
await this.appendPlanAudit(status, recoveryPlanResult);
return recoveryPlanResult;
}
+ const deliveredStillStuckRecovery = await this.planDeliveredStillStuckRecovery(
+ status,
+ input,
+ result.item,
+ activation.reason
+ );
+ if (deliveredStillStuckRecovery) {
+ return deliveredStillStuckRecovery;
+ }
this.deps.logger?.warn('member work sync nudge outbox payload conflict', {
teamName: status.teamName,
memberName: status.memberName,
@@ -334,7 +551,16 @@ export class MemberWorkSyncNudgeOutboxPlanner {
existingItemStatus: result.item.status,
})
) {
- return this.planStatusOnlyRecovery(status, input);
+ return this.planStatusOnlyRecovery(status, input, activation.reason);
+ }
+ const deliveredStillStuckRecovery = await this.planDeliveredStillStuckRecovery(
+ status,
+ input,
+ result.item,
+ activation.reason
+ );
+ if (deliveredStillStuckRecovery) {
+ return deliveredStillStuckRecovery;
}
if (
input.payload.workSyncIntent === 'review_pickup' &&
@@ -346,7 +572,10 @@ export class MemberWorkSyncNudgeOutboxPlanner {
return { planned: false, code };
}
- const planResult = { planned: true, code: result.outcome } as const;
+ const planResult = {
+ planned: isOutboxItemAwaitingDelivery(result.item),
+ code: result.outcome,
+ } as const;
await this.appendPlanAudit(status, planResult);
return planResult;
}
diff --git a/src/features/member-work-sync/core/application/MemberWorkSyncPendingReportIntentReplayer.ts b/src/features/member-work-sync/core/application/MemberWorkSyncPendingReportIntentReplayer.ts
index 8c6bce96..a878e463 100644
--- a/src/features/member-work-sync/core/application/MemberWorkSyncPendingReportIntentReplayer.ts
+++ b/src/features/member-work-sync/core/application/MemberWorkSyncPendingReportIntentReplayer.ts
@@ -17,7 +17,11 @@ function statusForResult(input: {
if (input.accepted) {
return 'accepted';
}
- if (input.code === 'member_inactive' || input.code === 'team_runtime_inactive') {
+ if (
+ input.code === 'member_inactive' ||
+ input.code === 'team_runtime_inactive' ||
+ input.code === 'member_runtime_inactive'
+ ) {
return 'superseded';
}
return 'rejected';
diff --git a/src/features/member-work-sync/core/application/MemberWorkSyncReconciler.ts b/src/features/member-work-sync/core/application/MemberWorkSyncReconciler.ts
index 06a33246..8c737920 100644
--- a/src/features/member-work-sync/core/application/MemberWorkSyncReconciler.ts
+++ b/src/features/member-work-sync/core/application/MemberWorkSyncReconciler.ts
@@ -7,6 +7,7 @@ import {
import { appendMemberWorkSyncAudit } from './MemberWorkSyncAudit';
import { MemberWorkSyncNudgeOutboxPlanner } from './MemberWorkSyncNudgeOutboxPlanner';
+import { resolveMemberWorkSyncRuntimeActivity } from './MemberWorkSyncRuntimeActivity';
import type { MemberWorkSyncStatus, MemberWorkSyncStatusRequest } from '../../contracts';
import type { MemberWorkSyncAgendaSourceResult, MemberWorkSyncUseCaseDeps } from './ports';
@@ -14,6 +15,7 @@ import type { MemberWorkSyncAgendaSourceResult, MemberWorkSyncUseCaseDeps } from
export interface MemberWorkSyncReconcileContext {
reconciledBy?: 'request' | 'queue';
triggerReasons?: string[];
+ isCancelled?: () => boolean;
recovery?: {
kind: 'proof_missing';
intentKey: string;
@@ -22,6 +24,19 @@ export interface MemberWorkSyncReconcileContext {
};
}
+export class MemberWorkSyncReconcileCancelledError extends Error {
+ constructor() {
+ super('member work sync reconcile cancelled');
+ this.name = 'MemberWorkSyncReconcileCancelledError';
+ }
+}
+
+function assertReconcileNotCancelled(context: MemberWorkSyncReconcileContext): void {
+ if (context.isCancelled?.()) {
+ throw new MemberWorkSyncReconcileCancelledError();
+ }
+}
+
export function finalizeMemberWorkSyncAgenda(
deps: MemberWorkSyncUseCaseDeps,
source: MemberWorkSyncAgendaSourceResult
@@ -61,6 +76,7 @@ export class MemberWorkSyncReconciler {
...(context.triggerReasons?.length ? { triggerReasons: context.triggerReasons } : {}),
});
const source = await this.deps.agendaSource.loadAgenda(request);
+ assertReconcileNotCancelled(context);
const agenda = finalizeMemberWorkSyncAgenda(this.deps, source);
await appendMemberWorkSyncAudit(this.deps, {
teamName: agenda.teamName,
@@ -72,21 +88,24 @@ export class MemberWorkSyncReconciler {
...(source.providerId ? { providerId: source.providerId } : {}),
diagnostics: agenda.diagnostics,
});
+ assertReconcileNotCancelled(context);
const previous = await this.deps.statusStore.read(request);
const nowIso = this.deps.clock.now().toISOString();
- const teamActive = this.deps.lifecycle
- ? await this.deps.lifecycle.isTeamActive(agenda.teamName)
- : true;
+ const runtimeActivity = await resolveMemberWorkSyncRuntimeActivity(this.deps, {
+ teamName: agenda.teamName,
+ memberName: agenda.memberName,
+ });
+ assertReconcileNotCancelled(context);
const decision = decideMemberWorkSyncStatus({
agenda,
latestAcceptedReport: previous?.report?.accepted ? previous.report : null,
nowIso,
- inactive: source.inactive || !teamActive,
+ inactive: source.inactive || runtimeActivity.inactive,
});
await appendMemberWorkSyncAudit(this.deps, {
teamName: agenda.teamName,
memberName: agenda.memberName,
- event: source.inactive || !teamActive ? 'team_inactive' : 'decision_made',
+ event: source.inactive || runtimeActivity.inactive ? 'team_inactive' : 'decision_made',
source: 'reconciler',
agendaFingerprint: agenda.fingerprint,
state: decision.state,
@@ -95,6 +114,7 @@ export class MemberWorkSyncReconciler {
diagnostics: decision.diagnostics,
});
+ assertReconcileNotCancelled(context);
const status = await attachMemberWorkSyncReportToken(this.deps, {
teamName: agenda.teamName,
memberName: agenda.memberName,
@@ -125,15 +145,13 @@ export class MemberWorkSyncReconciler {
: {}),
},
evaluatedAt: nowIso,
- diagnostics: [
- ...agenda.diagnostics,
- ...(!teamActive ? ['team_runtime_inactive'] : []),
- ...decision.diagnostics,
- ],
+ diagnostics: [...agenda.diagnostics, ...runtimeActivity.diagnostics, ...decision.diagnostics],
...(source.providerId ? { providerId: source.providerId } : {}),
});
+ assertReconcileNotCancelled(context);
await this.deps.statusStore.write(status);
+ assertReconcileNotCancelled(context);
await this.planNudgeOutbox(status);
return status;
}
diff --git a/src/features/member-work-sync/core/application/MemberWorkSyncReporter.ts b/src/features/member-work-sync/core/application/MemberWorkSyncReporter.ts
index 8899468f..fb23c682 100644
--- a/src/features/member-work-sync/core/application/MemberWorkSyncReporter.ts
+++ b/src/features/member-work-sync/core/application/MemberWorkSyncReporter.ts
@@ -6,6 +6,7 @@ import {
finalizeMemberWorkSyncAgenda,
MemberWorkSyncReconciler,
} from './MemberWorkSyncReconciler';
+import { resolveMemberWorkSyncRuntimeActivity } from './MemberWorkSyncRuntimeActivity';
import type {
MemberWorkSyncReport,
@@ -42,10 +43,11 @@ export class MemberWorkSyncReporter {
const source = await this.deps.agendaSource.loadAgenda(request);
const agenda = finalizeMemberWorkSyncAgenda(this.deps, source);
const nowIso = this.deps.clock.now().toISOString();
- const teamActive = this.deps.lifecycle
- ? await this.deps.lifecycle.isTeamActive(agenda.teamName)
- : true;
- if (!teamActive) {
+ const runtimeActivity = await resolveMemberWorkSyncRuntimeActivity(this.deps, {
+ teamName: agenda.teamName,
+ memberName: agenda.memberName,
+ });
+ if (!runtimeActivity.teamActive) {
const status = await this.reconciler.execute(request);
const rejectedStatus = await this.recordRejectedReport(
status,
@@ -59,6 +61,21 @@ export class MemberWorkSyncReporter {
status: rejectedStatus,
};
}
+ if (!runtimeActivity.memberActive) {
+ const status = await this.reconciler.execute(request);
+ const rejectedStatus = await this.recordRejectedReport(
+ status,
+ request,
+ 'member_runtime_inactive'
+ );
+ return {
+ accepted: false,
+ code: 'member_runtime_inactive',
+ message:
+ 'Member runtime is not active. Restart this teammate before reporting work sync state.',
+ status: rejectedStatus,
+ };
+ }
const tokenValidation = this.deps.reportToken
? await this.deps.reportToken.verify({
token: request.reportToken,
diff --git a/src/features/member-work-sync/core/application/MemberWorkSyncRuntimeActivity.ts b/src/features/member-work-sync/core/application/MemberWorkSyncRuntimeActivity.ts
new file mode 100644
index 00000000..91ee0e9f
--- /dev/null
+++ b/src/features/member-work-sync/core/application/MemberWorkSyncRuntimeActivity.ts
@@ -0,0 +1,41 @@
+import type { MemberWorkSyncUseCaseDeps } from './ports';
+
+export interface MemberWorkSyncRuntimeActivity {
+ teamActive: boolean;
+ memberActive: boolean;
+ inactive: boolean;
+ diagnostics: string[];
+}
+
+export async function resolveMemberWorkSyncRuntimeActivity(
+ deps: Pick,
+ input: { teamName: string; memberName: string }
+): Promise {
+ if (!deps.lifecycle) {
+ return { teamActive: true, memberActive: true, inactive: false, diagnostics: [] };
+ }
+
+ const teamActive = await deps.lifecycle.isTeamActive(input.teamName);
+ if (!teamActive) {
+ return {
+ teamActive: false,
+ memberActive: false,
+ inactive: true,
+ diagnostics: ['team_runtime_inactive'],
+ };
+ }
+
+ const memberActive = deps.lifecycle.isMemberActive
+ ? await deps.lifecycle.isMemberActive(input)
+ : true;
+ if (!memberActive) {
+ return {
+ teamActive: true,
+ memberActive: false,
+ inactive: true,
+ diagnostics: ['member_runtime_inactive'],
+ };
+ }
+
+ return { teamActive: true, memberActive: true, inactive: false, diagnostics: [] };
+}
diff --git a/src/features/member-work-sync/core/application/index.ts b/src/features/member-work-sync/core/application/index.ts
index 8232db8a..1704cb76 100644
--- a/src/features/member-work-sync/core/application/index.ts
+++ b/src/features/member-work-sync/core/application/index.ts
@@ -8,6 +8,7 @@ export * from './MemberWorkSyncNudgeOutboxPlanner';
export * from './MemberWorkSyncPendingReportIntentReplayer';
export * from './MemberWorkSyncReconciler';
export * from './MemberWorkSyncReporter';
+export * from './MemberWorkSyncRuntimeActivity';
export * from './MemberWorkSyncTargetedRecoveryPolicy';
export type * from './ports';
export * from './RuntimeTurnSettledIngestor';
diff --git a/src/features/member-work-sync/core/application/ports.ts b/src/features/member-work-sync/core/application/ports.ts
index 64e2c4fa..58400bce 100644
--- a/src/features/member-work-sync/core/application/ports.ts
+++ b/src/features/member-work-sync/core/application/ports.ts
@@ -56,6 +56,7 @@ export interface MemberWorkSyncReportTokenPort {
export interface MemberWorkSyncLifecyclePort {
isTeamActive(teamName: string): Promise | boolean;
+ isMemberActive?(input: { teamName: string; memberName: string }): Promise | boolean;
}
export interface MemberWorkSyncLoggerPort {
@@ -71,6 +72,7 @@ export type MemberWorkSyncAuditEventName =
| 'turn_settled_ignored'
| 'queue_enqueued'
| 'queue_coalesced'
+ | 'queue_retry_scheduled'
| 'queue_reconciled'
| 'queue_dropped'
| 'reconcile_started'
@@ -197,6 +199,12 @@ export interface MemberWorkSyncWatchdogCooldownPort {
taskIds: string[];
nowIso: string;
}): Promise;
+ getRecentNudgeCooldown?(input: {
+ teamName: string;
+ memberName: string;
+ taskIds: string[];
+ nowIso: string;
+ }): Promise<{ active: boolean; retryAfterIso?: string }>;
}
export interface MemberWorkSyncBusySignalPort {
diff --git a/src/features/member-work-sync/core/domain/ActionableWorkAgenda.ts b/src/features/member-work-sync/core/domain/ActionableWorkAgenda.ts
index f40d80ff..96367a54 100644
--- a/src/features/member-work-sync/core/domain/ActionableWorkAgenda.ts
+++ b/src/features/member-work-sync/core/domain/ActionableWorkAgenda.ts
@@ -90,11 +90,47 @@ function buildBaseItem(
};
}
-function taskReferenceKeys(task: Pick): string[] {
- const keys = [task.id, task.displayId]
- .map((value) => value?.trim())
- .filter((value): value is string => Boolean(value));
- return [...new Set(keys.flatMap((value) => [value, value.replace(/^#/, '')]))];
+interface TaskReferenceIndex {
+ canonical: Map>;
+ display: Map>;
+}
+
+function addTaskReference(
+ index: Map>,
+ reference: string | undefined,
+ task: MemberWorkSyncTaskLike
+): void {
+ const normalized = reference?.trim().replace(/^#/, '');
+ if (!normalized) return;
+ const matches = index.get(normalized) ?? new Set();
+ matches.add(task);
+ index.set(normalized, matches);
+}
+
+function buildTaskReferenceIndex(tasks: MemberWorkSyncTaskLike[]): TaskReferenceIndex {
+ const index = new Map>();
+ const display = new Map>();
+ for (const task of tasks) {
+ addTaskReference(index, task.id, task);
+ addTaskReference(display, task.displayId, task);
+ }
+ return { canonical: index, display };
+}
+
+function findUniqueReferencedTask(
+ tasksByReference: TaskReferenceIndex,
+ reference: string
+): MemberWorkSyncTaskLike | null {
+ const normalized = reference.trim().replace(/^#/, '');
+ const canonicalMatches = tasksByReference.canonical.get(normalized);
+ if (canonicalMatches?.size === 1) {
+ return [...canonicalMatches][0];
+ }
+ if (canonicalMatches && canonicalMatches.size > 1) {
+ return null;
+ }
+ const matches = tasksByReference.display.get(normalized);
+ return matches?.size === 1 ? [...matches][0] : null;
}
export function buildActionableWorkAgenda(
@@ -104,9 +140,7 @@ export function buildActionableWorkAgenda(
const diagnostics: string[] = [];
const activeMemberNames = getActiveMemberNames(input.members);
const activeLeadName = getActiveLeadName(input.members);
- const tasksByReference = new Map(
- input.tasks.flatMap((task) => taskReferenceKeys(task).map((key) => [key, task] as const))
- );
+ const tasksByReference = buildTaskReferenceIndex(input.tasks);
if (!memberName || isReservedMemberName(memberName)) {
diagnostics.push('member_invalid_or_reserved');
@@ -126,12 +160,16 @@ export function buildActionableWorkAgenda(
const owner = normalizeMemberName(task.owner);
const base = buildBaseItem(task, memberName);
- const blockedBy = [...(task.blockedBy ?? [])].filter(Boolean).sort();
- const blocks = [...(task.blocks ?? [])].filter(Boolean).sort();
+ const blockedBy = [
+ ...new Set((task.blockedBy ?? []).map((id) => id.trim()).filter(Boolean)),
+ ].sort();
+ const blocks = [
+ ...new Set((task.blocks ?? []).map((id) => id.trim()).filter(Boolean)),
+ ].sort();
const brokenDependencyIds: string[] = [];
const waitingDependencyIds: string[] = [];
for (const dependencyId of blockedBy) {
- const dependency = tasksByReference.get(dependencyId) ?? null;
+ const dependency = findUniqueReferencedTask(tasksByReference, dependencyId);
if (!dependency || dependency.status === 'deleted' || dependency.deletedAt) {
brokenDependencyIds.push(dependencyId);
} else if (!isTeamTaskFinishedForDependency(dependency)) {
diff --git a/src/features/member-work-sync/core/domain/MemberWorkSyncReportValidator.ts b/src/features/member-work-sync/core/domain/MemberWorkSyncReportValidator.ts
index ba790bf5..81c457fd 100644
--- a/src/features/member-work-sync/core/domain/MemberWorkSyncReportValidator.ts
+++ b/src/features/member-work-sync/core/domain/MemberWorkSyncReportValidator.ts
@@ -153,6 +153,14 @@ export function validateMemberWorkSyncReport(input: {
};
}
+ if (input.request.state === 'still_working' && input.agenda.items.length === 0) {
+ return {
+ ok: false,
+ code: 'still_working_rejected_agenda_empty',
+ message: 'Cannot report still_working when no actionable work remains.',
+ };
+ }
+
if (
input.request.state === 'blocked' &&
!agendaHasBlockedEvidence(input.agenda, input.request.taskIds)
diff --git a/src/features/member-work-sync/core/domain/SyncDecisionPolicy.ts b/src/features/member-work-sync/core/domain/SyncDecisionPolicy.ts
index 5524b8b4..dde05a69 100644
--- a/src/features/member-work-sync/core/domain/SyncDecisionPolicy.ts
+++ b/src/features/member-work-sync/core/domain/SyncDecisionPolicy.ts
@@ -10,6 +10,18 @@ export interface SyncDecision {
diagnostics: string[];
}
+function getWorkLeaseDiagnostic(
+ report: MemberWorkSyncReport,
+ nowIso: string
+): 'report_lease_missing' | 'report_lease_expired' | null {
+ const expiresAtMs = Date.parse(report.expiresAt ?? '');
+ const nowMs = Date.parse(nowIso);
+ if (!Number.isFinite(expiresAtMs) || !Number.isFinite(nowMs)) {
+ return 'report_lease_missing';
+ }
+ return expiresAtMs <= nowMs ? 'report_lease_expired' : null;
+}
+
export function decideMemberWorkSyncStatus(input: {
agenda: MemberWorkSyncAgenda;
latestAcceptedReport?: MemberWorkSyncReport | null;
@@ -25,7 +37,8 @@ export function decideMemberWorkSyncStatus(input: {
state: 'caught_up',
diagnostics: ['agenda_empty'],
acceptedReport:
- input.latestAcceptedReport?.agendaFingerprint === input.agenda.fingerprint
+ input.latestAcceptedReport?.state === 'caught_up' &&
+ input.latestAcceptedReport.agendaFingerprint === input.agenda.fingerprint
? input.latestAcceptedReport
: undefined,
};
@@ -38,13 +51,18 @@ export function decideMemberWorkSyncStatus(input: {
if (report.agendaFingerprint !== input.agenda.fingerprint) {
return { state: 'needs_sync', diagnostics: ['report_fingerprint_stale'] };
}
- if (report.expiresAt && Date.parse(report.expiresAt) <= Date.parse(input.nowIso)) {
- return { state: 'needs_sync', diagnostics: ['report_lease_expired'] };
- }
if (report.state === 'still_working') {
+ const leaseDiagnostic = getWorkLeaseDiagnostic(report, input.nowIso);
+ if (leaseDiagnostic) {
+ return { state: 'needs_sync', diagnostics: [leaseDiagnostic] };
+ }
return { state: 'still_working', acceptedReport: report, diagnostics: ['lease_still_working'] };
}
if (report.state === 'blocked') {
+ const leaseDiagnostic = getWorkLeaseDiagnostic(report, input.nowIso);
+ if (leaseDiagnostic) {
+ return { state: 'needs_sync', diagnostics: [leaseDiagnostic] };
+ }
return { state: 'blocked', acceptedReport: report, diagnostics: ['lease_blocked'] };
}
diff --git a/src/features/member-work-sync/main/adapters/input/MemberWorkSyncTaskImpactResolver.ts b/src/features/member-work-sync/main/adapters/input/MemberWorkSyncTaskImpactResolver.ts
index 32af1164..1182a4c7 100644
--- a/src/features/member-work-sync/main/adapters/input/MemberWorkSyncTaskImpactResolver.ts
+++ b/src/features/member-work-sync/main/adapters/input/MemberWorkSyncTaskImpactResolver.ts
@@ -32,22 +32,69 @@ function isDeletedTask(task: Pick): boolean {
return task.status === 'deleted' || Boolean(task.deletedAt);
}
-function taskMatchesId(task: TeamTask, taskId: string): boolean {
- const normalized = taskId.trim().replace(/^#/, '');
+interface TaskReferenceIndex {
+ canonical: Map>;
+ display: Map>;
+}
+
+function addTaskReference(
+ index: Map>,
+ reference: string | undefined,
+ task: TeamTask
+): void {
+ const normalized = reference?.trim().replace(/^#/, '');
+ if (!normalized) return;
+ const matches = index.get(normalized) ?? new Set();
+ matches.add(task);
+ index.set(normalized, matches);
+}
+
+function buildTaskReferenceIndex(tasks: TeamTask[]): TaskReferenceIndex {
+ const canonical = new Map>();
+ const display = new Map>();
+ for (const task of tasks) {
+ addTaskReference(canonical, task.id, task);
+ addTaskReference(display, task.displayId, task);
+ }
+ return { canonical, display };
+}
+
+function getTaskReferenceMatches(
+ tasksByReference: TaskReferenceIndex,
+ reference: string
+): ReadonlySet | null {
+ const normalized = reference.trim().replace(/^#/, '');
return (
- task.id === taskId ||
- task.id === normalized ||
- task.displayId === taskId ||
- task.displayId === normalized ||
- task.displayId === `#${normalized}`
+ tasksByReference.canonical.get(normalized) ?? tasksByReference.display.get(normalized) ?? null
);
}
-function taskReferenceKeys(task: Pick): string[] {
- const keys = [task.id, task.displayId]
- .map((value) => value?.trim())
- .filter((value): value is string => Boolean(value));
- return [...new Set(keys.flatMap((value) => [value, value.replace(/^#/, '')]))];
+function taskReferenceIncludesTask(
+ tasksByReference: TaskReferenceIndex,
+ reference: string,
+ task: TeamTask
+): boolean {
+ return getTaskReferenceMatches(tasksByReference, reference)?.has(task) === true;
+}
+
+function taskReferenceIsMissingOrDeleted(
+ tasksByReference: TaskReferenceIndex,
+ reference: string
+): boolean {
+ const matches = getTaskReferenceMatches(tasksByReference, reference);
+ if (!matches || matches.size === 0) {
+ return true;
+ }
+ return [...matches].every(isDeletedTask);
+}
+
+function findTasksByReference(tasksByReference: TaskReferenceIndex, reference: string): TeamTask[] {
+ const matches = getTaskReferenceMatches(tasksByReference, reference);
+ return matches ? [...matches] : [];
+}
+
+function normalizedTaskReferences(values: readonly string[] | undefined): string[] {
+ return [...new Set((values ?? []).map((value) => value.trim()).filter(Boolean))];
}
function findLeadMemberName(activeMembers: string[]): string | null {
@@ -120,14 +167,23 @@ export class MemberWorkSyncTaskImpactResolver {
}
};
- const task = tasks.find((candidate) => taskMatchesId(candidate, taskId));
- if (!task) {
+ const tasksByReference = buildTaskReferenceIndex(tasks);
+ const matchingTasks = findTasksByReference(tasksByReference, taskId);
+ if (matchingTasks.length === 0) {
return {
memberNames: [],
fallbackTeamWide: true,
diagnostics: ['task_not_found'],
};
}
+ if (matchingTasks.length > 1) {
+ return {
+ memberNames: [],
+ fallbackTeamWide: true,
+ diagnostics: ['task_reference_ambiguous'],
+ };
+ }
+ const task = matchingTasks[0];
addMember(task.owner);
@@ -174,14 +230,8 @@ export class MemberWorkSyncTaskImpactResolver {
addLead();
}
- const tasksByReference = new Map(
- tasks.flatMap((candidate) =>
- taskReferenceKeys(candidate).map((key) => [key, candidate] as const)
- )
- );
- const brokenDependencies = (task.blockedBy ?? []).filter((dependencyId) => {
- const dependency = tasksByReference.get(dependencyId);
- return !dependency || isDeletedTask(dependency);
+ const brokenDependencies = normalizedTaskReferences(task.blockedBy).filter((dependencyId) => {
+ return taskReferenceIsMissingOrDeleted(tasksByReference, dependencyId);
});
if (brokenDependencies.length > 0) {
addLead();
@@ -200,8 +250,8 @@ export class MemberWorkSyncTaskImpactResolver {
continue;
}
if (
- (candidate.blockedBy ?? []).some(
- (dependencyId) => tasksByReference.get(dependencyId) === task
+ normalizedTaskReferences(candidate.blockedBy).some((dependencyId) =>
+ taskReferenceIncludesTask(tasksByReference, dependencyId, task)
)
) {
addMember(candidate.owner);
diff --git a/src/features/member-work-sync/main/adapters/input/MemberWorkSyncTeamChangeRouter.ts b/src/features/member-work-sync/main/adapters/input/MemberWorkSyncTeamChangeRouter.ts
index d934a14b..641220bf 100644
--- a/src/features/member-work-sync/main/adapters/input/MemberWorkSyncTeamChangeRouter.ts
+++ b/src/features/member-work-sync/main/adapters/input/MemberWorkSyncTeamChangeRouter.ts
@@ -77,6 +77,7 @@ export class MemberWorkSyncTeamChangeRouter {
noteTeamChange(event: TeamChangeEvent): void {
if (event.type === 'lead-activity' && event.detail === 'offline') {
this.queue.dropTeam(event.teamName);
+ void this.enqueueTeam(event.teamName, 'runtime_activity', 0).catch(() => undefined);
return;
}
diff --git a/src/features/member-work-sync/main/adapters/output/TeamTaskStallJournalWorkSyncCooldown.ts b/src/features/member-work-sync/main/adapters/output/TeamTaskStallJournalWorkSyncCooldown.ts
index 699c97b6..c5dd44b4 100644
--- a/src/features/member-work-sync/main/adapters/output/TeamTaskStallJournalWorkSyncCooldown.ts
+++ b/src/features/member-work-sync/main/adapters/output/TeamTaskStallJournalWorkSyncCooldown.ts
@@ -7,10 +7,13 @@ const DEFAULT_WATCHDOG_COOLDOWN_MS = 10 * 60_000;
interface StallJournalEntry {
taskId: string;
+ memberName?: string;
state: string;
alertedAt?: string;
}
+type WatchdogCooldownResult = { active: boolean; retryAfterIso?: string };
+
function parseTime(value: string | undefined): number | null {
if (!value) {
return null;
@@ -19,6 +22,10 @@ function parseTime(value: string | undefined): number | null {
return Number.isFinite(time) ? time : null;
}
+function normalizeMemberName(value: string | undefined): string {
+ return value?.trim().toLowerCase() ?? '';
+}
+
export class TeamTaskStallJournalWorkSyncCooldown implements MemberWorkSyncWatchdogCooldownPort {
constructor(
private readonly teamsBasePath: string,
@@ -31,9 +38,18 @@ export class TeamTaskStallJournalWorkSyncCooldown implements MemberWorkSyncWatch
taskIds: string[];
nowIso: string;
}): Promise {
+ return (await this.getRecentNudgeCooldown(input)).active;
+ }
+
+ async getRecentNudgeCooldown(input: {
+ teamName: string;
+ memberName: string;
+ taskIds: string[];
+ nowIso: string;
+ }): Promise {
const taskIds = new Set(input.taskIds);
if (taskIds.size === 0) {
- return false;
+ return { active: false };
}
try {
@@ -43,19 +59,34 @@ export class TeamTaskStallJournalWorkSyncCooldown implements MemberWorkSyncWatch
);
const parsed = JSON.parse(raw) as unknown;
if (!Array.isArray(parsed)) {
- return true;
+ return { active: false };
}
const now = parseTime(input.nowIso) ?? Date.now();
- return parsed.some((entry): boolean => {
+ const expectedMemberName = normalizeMemberName(input.memberName);
+ let retryAfterMs: number | null = null;
+ for (const entry of parsed) {
const row = entry as Partial;
if (row.state !== 'alerted' || !row.taskId || !taskIds.has(row.taskId)) {
- return false;
+ continue;
+ }
+ const rowMemberName = normalizeMemberName(row.memberName);
+ if (rowMemberName && rowMemberName !== expectedMemberName) {
+ continue;
}
const alertedAt = parseTime(row.alertedAt);
- return alertedAt != null && now - alertedAt <= this.cooldownMs;
- });
- } catch (error) {
- return (error as NodeJS.ErrnoException).code !== 'ENOENT';
+ if (alertedAt == null || alertedAt > now || now - alertedAt >= this.cooldownMs) {
+ continue;
+ }
+ const entryRetryAfterMs = alertedAt + this.cooldownMs;
+ retryAfterMs =
+ retryAfterMs == null ? entryRetryAfterMs : Math.max(retryAfterMs, entryRetryAfterMs);
+ }
+ if (retryAfterMs == null) {
+ return { active: false };
+ }
+ return { active: true, retryAfterIso: new Date(retryAfterMs).toISOString() };
+ } catch {
+ return { active: false };
}
}
}
diff --git a/src/features/member-work-sync/main/composition/__tests__/memberWorkSyncTeamActivity.test.ts b/src/features/member-work-sync/main/composition/__tests__/memberWorkSyncTeamActivity.test.ts
index d352c19f..7079c5e2 100644
--- a/src/features/member-work-sync/main/composition/__tests__/memberWorkSyncTeamActivity.test.ts
+++ b/src/features/member-work-sync/main/composition/__tests__/memberWorkSyncTeamActivity.test.ts
@@ -1,8 +1,11 @@
import { describe, expect, it } from 'vitest';
import {
+ hasUncertainWorkSyncRuntimeActivity,
hasWorkSyncActiveRuntime,
isRuntimeEntryActiveForWorkSync,
+ isRuntimeMemberActiveForWorkSync,
+ isRuntimeMemberActivityUncertainForWorkSync,
} from '../memberWorkSyncTeamActivity';
import type { TeamAgentRuntimeEntry, TeamAgentRuntimeSnapshot } from '@shared/types';
@@ -39,14 +42,49 @@ describe('member work sync team activity', () => {
});
it('treats a confirmed bootstrap runtime entry as active', () => {
+ for (const pidSource of ['agent_process_table', 'opencode_bridge'] as const) {
+ expect(
+ isRuntimeEntryActiveForWorkSync(
+ createRuntimeEntry({
+ livenessKind: 'confirmed_bootstrap',
+ pidSource,
+ runtimeLastSeenAt: '2026-05-18T19:44:47.000Z',
+ })
+ )
+ ).toBe(true);
+ }
+ });
+
+ it('does not treat bootstrap-only confirmation as active runtime evidence', () => {
+ for (const pidSource of [
+ undefined,
+ 'runtime_bootstrap',
+ 'persisted_metadata',
+ 'tmux_child',
+ 'tmux_pane',
+ ] as const) {
+ expect(
+ isRuntimeEntryActiveForWorkSync(
+ createRuntimeEntry({
+ livenessKind: 'confirmed_bootstrap',
+ ...(pidSource ? { pidSource } : {}),
+ })
+ )
+ ).toBe(false);
+ }
+ });
+
+ it('does not count lead runtime entries as work-sync active teammates', () => {
expect(
isRuntimeEntryActiveForWorkSync(
createRuntimeEntry({
- livenessKind: 'confirmed_bootstrap',
- runtimeLastSeenAt: '2026-05-18T19:44:47.000Z',
+ memberName: 'team-lead',
+ backendType: 'lead',
+ livenessKind: undefined,
+ pidSource: 'lead_process',
})
)
- ).toBe(true);
+ ).toBe(false);
});
it('does not treat inactive liveness diagnostics as active by themselves', () => {
@@ -77,6 +115,12 @@ describe('member work sync team activity', () => {
expect(
hasWorkSyncActiveRuntime(
createRuntimeSnapshot({
+ 'team-lead': createRuntimeEntry({
+ memberName: 'team-lead',
+ backendType: 'lead',
+ livenessKind: undefined,
+ pidSource: 'lead_process',
+ }),
alice: createRuntimeEntry({ alive: false, livenessKind: 'stale_metadata' }),
bob: createRuntimeEntry({ memberName: 'bob', livenessKind: 'runtime_process' }),
})
@@ -88,6 +132,12 @@ describe('member work sync team activity', () => {
expect(
hasWorkSyncActiveRuntime(
createRuntimeSnapshot({
+ 'team-lead': createRuntimeEntry({
+ memberName: 'team-lead',
+ backendType: 'lead',
+ livenessKind: undefined,
+ pidSource: 'lead_process',
+ }),
alice: createRuntimeEntry({ alive: false, livenessKind: 'stale_metadata' }),
bob: createRuntimeEntry({
memberName: 'bob',
@@ -99,6 +149,50 @@ describe('member work sync team activity', () => {
).toBe(false);
});
+ it('checks active runtime evidence for a specific teammate', () => {
+ const snapshot = createRuntimeSnapshot({
+ alice: createRuntimeEntry({ memberName: 'alice', livenessKind: 'runtime_process' }),
+ bob: createRuntimeEntry({ memberName: 'bob', alive: false, livenessKind: 'stale_metadata' }),
+ });
+
+ expect(isRuntimeMemberActiveForWorkSync(snapshot, 'ALICE')).toBe(true);
+ expect(isRuntimeMemberActiveForWorkSync(snapshot, 'bob')).toBe(false);
+ expect(isRuntimeMemberActiveForWorkSync(snapshot, 'team-lead')).toBe(false);
+ });
+
+ it('treats process table unavailability as uncertain runtime activity', () => {
+ const snapshot = createRuntimeSnapshot({
+ alice: createRuntimeEntry({
+ memberName: 'alice',
+ alive: false,
+ livenessKind: 'registered_only',
+ runtimeDiagnostic: 'runtime pid could not be verified because process table unavailable',
+ }),
+ bob: createRuntimeEntry({ memberName: 'bob', alive: false, livenessKind: 'stale_metadata' }),
+ });
+
+ expect(hasWorkSyncActiveRuntime(snapshot)).toBe(false);
+ expect(hasUncertainWorkSyncRuntimeActivity(snapshot)).toBe(true);
+ expect(isRuntimeMemberActivityUncertainForWorkSync(snapshot, 'alice')).toBe(true);
+ expect(isRuntimeMemberActivityUncertainForWorkSync(snapshot, 'bob')).toBe(false);
+ });
+
+ it('recognizes process table is unavailable diagnostics as uncertain runtime activity', () => {
+ const snapshot = createRuntimeSnapshot({
+ alice: createRuntimeEntry({
+ memberName: 'alice',
+ alive: false,
+ livenessKind: 'confirmed_bootstrap',
+ pidSource: 'runtime_bootstrap',
+ runtimeDiagnostic: 'runtime pid could not be verified because process table is unavailable',
+ }),
+ });
+
+ expect(hasWorkSyncActiveRuntime(snapshot)).toBe(false);
+ expect(hasUncertainWorkSyncRuntimeActivity(snapshot)).toBe(true);
+ expect(isRuntimeMemberActivityUncertainForWorkSync(snapshot, 'alice')).toBe(true);
+ });
+
it('handles missing snapshots as inactive', () => {
expect(hasWorkSyncActiveRuntime(null)).toBe(false);
expect(hasWorkSyncActiveRuntime(undefined)).toBe(false);
diff --git a/src/features/member-work-sync/main/composition/createMemberWorkSyncFeature.ts b/src/features/member-work-sync/main/composition/createMemberWorkSyncFeature.ts
index b20bd774..c617e653 100644
--- a/src/features/member-work-sync/main/composition/createMemberWorkSyncFeature.ts
+++ b/src/features/member-work-sync/main/composition/createMemberWorkSyncFeature.ts
@@ -63,13 +63,75 @@ import type { TeamTaskReader } from '@main/services/team/TeamTaskReader';
import type { TeamChangeEvent } from '@shared/types';
const STALE_STATUS_MAX_AGE_MS = 2 * 60_000;
+const CAUGHT_UP_STATUS_MAX_AGE_MS = 5 * 60_000;
const PROOF_MISSING_RECOVERY_RECENT_WINDOW_MS = 10 * 60_000;
+function isAcceptedWorkLeaseStatus(status: MemberWorkSyncStatus): boolean {
+ return (
+ status.report?.accepted === true &&
+ (status.state === 'still_working' || status.state === 'blocked')
+ );
+}
+
+function getAcceptedWorkLeaseStaleness(
+ status: MemberWorkSyncStatus,
+ nowMs: number
+): 'missing' | 'expired' | null {
+ if (!isAcceptedWorkLeaseStatus(status)) {
+ return null;
+ }
+
+ const reportExpiresAtMs = Date.parse(status.report?.expiresAt ?? '');
+ if (!Number.isFinite(reportExpiresAtMs) || !Number.isFinite(nowMs)) {
+ return 'missing';
+ }
+ return reportExpiresAtMs <= nowMs ? 'expired' : null;
+}
+
+function isEmptyAgendaStaleState(status: MemberWorkSyncStatus): boolean {
+ return (
+ status.agenda.items.length === 0 &&
+ (status.state === 'needs_sync' ||
+ status.state === 'still_working' ||
+ status.state === 'blocked' ||
+ status.state === 'unknown')
+ );
+}
+
+function statusNeedsBackgroundRefresh(status: MemberWorkSyncStatus, nowMs: number): boolean {
+ if (isEmptyAgendaStaleState(status)) {
+ return true;
+ }
+
+ const evaluatedAtMs = Date.parse(status.evaluatedAt);
+ if (!Number.isFinite(evaluatedAtMs)) {
+ return true;
+ }
+
+ if (status.state === 'caught_up' && nowMs - evaluatedAtMs > CAUGHT_UP_STATUS_MAX_AGE_MS) {
+ return true;
+ }
+
+ if (status.agenda.items.length === 0) {
+ return false;
+ }
+
+ if (status.state === 'needs_sync' && nowMs - evaluatedAtMs > STALE_STATUS_MAX_AGE_MS) {
+ return true;
+ }
+
+ return getAcceptedWorkLeaseStaleness(status, nowMs) !== null;
+}
+
function getStatusStalenessDiagnostics(status: MemberWorkSyncStatus, nowMs: number): string[] {
const diagnostics: string[] = [];
const evaluatedAtMs = Date.parse(status.evaluatedAt);
if (!Number.isFinite(evaluatedAtMs)) {
diagnostics.push('status_evaluated_at_invalid');
+ } else if (isEmptyAgendaStaleState(status)) {
+ diagnostics.push('empty_agenda_state_refresh_enqueued');
+ } else if (status.state === 'caught_up' && nowMs - evaluatedAtMs > CAUGHT_UP_STATUS_MAX_AGE_MS) {
+ diagnostics.push('caught_up_stale_refresh_enqueued');
} else if (
status.agenda.items.length > 0 &&
['needs_sync', 'still_working', 'blocked'].includes(status.state) &&
@@ -78,13 +140,10 @@ function getStatusStalenessDiagnostics(status: MemberWorkSyncStatus, nowMs: numb
diagnostics.push('status_stale_refresh_enqueued');
}
- const reportExpiresAtMs = Date.parse(status.report?.expiresAt ?? '');
- if (
- status.report?.accepted &&
- Number.isFinite(reportExpiresAtMs) &&
- reportExpiresAtMs <= nowMs &&
- (status.state === 'still_working' || status.state === 'blocked')
- ) {
+ const leaseStaleness = getAcceptedWorkLeaseStaleness(status, nowMs);
+ if (leaseStaleness === 'missing') {
+ diagnostics.push('accepted_report_lease_missing_refresh_enqueued');
+ } else if (leaseStaleness === 'expired') {
diagnostics.push('accepted_report_lease_expired_refresh_enqueued');
}
@@ -169,6 +228,7 @@ export function createMemberWorkSyncFeature(deps: {
kanbanManager: TeamKanbanManager;
membersMetaStore: TeamMembersMetaStore;
isTeamActive?: (teamName: string) => Promise | boolean;
+ isMemberActive?: (input: { teamName: string; memberName: string }) => Promise | boolean;
canDispatchNudges?: (teamName: string) => Promise | boolean;
listLifecycleActiveTeamNames?: () => Promise;
queueQuietWindowMs?: number;
@@ -253,7 +313,14 @@ export function createMemberWorkSyncFeature(deps: {
...(deps.reviewPickupEscalation ? { reviewPickupEscalation: deps.reviewPickupEscalation } : {}),
reportToken,
auditJournal,
- ...(deps.isTeamActive ? { lifecycle: { isTeamActive: deps.isTeamActive } } : {}),
+ ...(deps.isTeamActive
+ ? {
+ lifecycle: {
+ isTeamActive: deps.isTeamActive,
+ ...(deps.isMemberActive ? { isMemberActive: deps.isMemberActive } : {}),
+ },
+ }
+ : {}),
logger: deps.logger,
};
const diagnosticsReader = new MemberWorkSyncDiagnosticsReader(useCaseDeps);
@@ -269,6 +336,16 @@ export function createMemberWorkSyncFeature(deps: {
retryable: 0,
terminal: 0,
});
+ const addNudgeDispatchSummaries = (
+ left: MemberWorkSyncNudgeDispatchSummary,
+ right: MemberWorkSyncNudgeDispatchSummary
+ ): MemberWorkSyncNudgeDispatchSummary => ({
+ claimed: left.claimed + right.claimed,
+ delivered: left.delivered + right.delivered,
+ superseded: left.superseded + right.superseded,
+ retryable: left.retryable + right.retryable,
+ terminal: left.terminal + right.terminal,
+ });
const filterNudgeDispatchReadyTeamNames = async (teamNames: string[]): Promise => {
const uniqueTeamNames = [...new Set(teamNames.map((name) => name.trim()).filter(Boolean))];
if (!deps.canDispatchNudges) {
@@ -290,25 +367,82 @@ export function createMemberWorkSyncFeature(deps: {
);
return readiness.filter((item) => item.ready).map((item) => item.teamName);
};
+ const refreshBackgroundStaleStatuses = async (teamNames: string[]): Promise => {
+ const nowMs = clock.now().getTime();
+ let refreshed = 0;
+ for (const teamName of teamNames) {
+ let memberNames: string[];
+ try {
+ memberNames = await agendaSource.loadActiveMemberNames(teamName);
+ } catch (error) {
+ deps.logger?.warn('member work sync background refresh member scan failed', {
+ teamName,
+ error: String(error),
+ });
+ continue;
+ }
+
+ for (const memberName of memberNames) {
+ try {
+ const status = await store.read({ teamName, memberName });
+ if (status && !statusNeedsBackgroundRefresh(status, nowMs)) {
+ continue;
+ }
+ await reconciler.execute(
+ { teamName, memberName },
+ {
+ reconciledBy: 'queue',
+ triggerReasons: [status ? 'manual_refresh' : 'startup_scan'],
+ }
+ );
+ refreshed += 1;
+ } catch (error) {
+ deps.logger?.warn('member work sync background refresh failed', {
+ teamName,
+ memberName,
+ error: String(error),
+ });
+ }
+ }
+ }
+
+ if (refreshed > 0) {
+ deps.logger?.debug('member work sync background stale refresh completed', { refreshed });
+ }
+ };
const dispatchNudgesForReadyTeams = async (
teamNames: string[],
- claimedBy: string
+ claimedBy: string,
+ options: { refreshBackgroundStaleStatuses?: boolean } = {}
): Promise => {
const readyTeamNames = await filterNudgeDispatchReadyTeamNames(teamNames);
if (readyTeamNames.length === 0) {
return emptyNudgeDispatchSummary();
}
- return nudgeDispatcher.dispatchDue({
- teamNames: readyTeamNames,
- claimedBy,
- });
+ const dispatchReadyNudges = () =>
+ nudgeDispatcher.dispatchDue({
+ teamNames: readyTeamNames,
+ claimedBy,
+ });
+ const initialSummary = await dispatchReadyNudges();
+ if (options.refreshBackgroundStaleStatuses !== false) {
+ await refreshBackgroundStaleStatuses(readyTeamNames);
+ return addNudgeDispatchSummaries(initialSummary, await dispatchReadyNudges());
+ }
+ return initialSummary;
};
const queue = new MemberWorkSyncEventQueue({
reconcile: async (request, context: MemberWorkSyncReconcileContext) => {
await reconciler.execute(request, context);
- await dispatchNudgesForReadyTeams([request.teamName], `member-work-sync:${process.pid}`);
+ if (context.isCancelled?.()) {
+ return;
+ }
+ await dispatchNudgesForReadyTeams([request.teamName], `member-work-sync:${process.pid}`, {
+ refreshBackgroundStaleStatuses: false,
+ });
},
isTeamActive: deps.isTeamActive ?? (() => true),
+ reconcileInactiveTeams: true,
...(deps.queueQuietWindowMs != null ? { quietWindowMs: deps.queueQuietWindowMs } : {}),
auditJournal,
logger: deps.logger,
diff --git a/src/features/member-work-sync/main/composition/memberWorkSyncTeamActivity.ts b/src/features/member-work-sync/main/composition/memberWorkSyncTeamActivity.ts
index a6a475a2..a739f201 100644
--- a/src/features/member-work-sync/main/composition/memberWorkSyncTeamActivity.ts
+++ b/src/features/member-work-sync/main/composition/memberWorkSyncTeamActivity.ts
@@ -1,7 +1,17 @@
-import type { TeamAgentRuntimeEntry, TeamAgentRuntimeSnapshot } from '@shared/types';
+import { mentionsProcessTableUnavailable } from '@shared/utils/teamLaunchFailureReason';
+
+import { normalizeMemberName } from '../../core/domain';
+
+import type {
+ TeamAgentRuntimeEntry,
+ TeamAgentRuntimePidSource,
+ TeamAgentRuntimeSnapshot,
+} from '@shared/types';
type RuntimeLivenessKind = NonNullable;
+const WORK_SYNC_RESERVED_MEMBER_NAMES = new Set(['team-lead', 'user']);
+
const WORK_SYNC_INACTIVE_LIVENESS_KINDS = new Set([
'permission_blocked',
'runtime_process_candidate',
@@ -11,20 +21,107 @@ const WORK_SYNC_INACTIVE_LIVENESS_KINDS = new Set([
'not_found',
]);
+const WORK_SYNC_BOOTSTRAP_ONLY_PID_SOURCES = new Set([
+ 'runtime_bootstrap',
+ 'persisted_metadata',
+]);
+
+const WORK_SYNC_CONFIRMED_BOOTSTRAP_ACTIVE_PID_SOURCES = new Set([
+ 'agent_process_table',
+ 'opencode_bridge',
+]);
+
export function isRuntimeEntryActiveForWorkSync(
- entry: Pick | null | undefined
+ entry:
+ | Pick<
+ TeamAgentRuntimeEntry,
+ 'alive' | 'backendType' | 'livenessKind' | 'memberName' | 'pidSource'
+ >
+ | null
+ | undefined
): boolean {
if (entry?.alive !== true) {
return false;
}
+ if (
+ entry.backendType === 'lead' ||
+ WORK_SYNC_RESERVED_MEMBER_NAMES.has(entry.memberName.trim().toLowerCase())
+ ) {
+ return false;
+ }
+ if (
+ entry.livenessKind === 'confirmed_bootstrap' &&
+ (!entry.pidSource ||
+ WORK_SYNC_BOOTSTRAP_ONLY_PID_SOURCES.has(entry.pidSource) ||
+ !WORK_SYNC_CONFIRMED_BOOTSTRAP_ACTIVE_PID_SOURCES.has(entry.pidSource))
+ ) {
+ return false;
+ }
if (!entry.livenessKind) {
return true;
}
return !WORK_SYNC_INACTIVE_LIVENESS_KINDS.has(entry.livenessKind);
}
+function isRuntimeEntryRelevantForWorkSync(
+ entry: Pick
+): boolean {
+ return (
+ entry.backendType !== 'lead' &&
+ !WORK_SYNC_RESERVED_MEMBER_NAMES.has(entry.memberName.trim().toLowerCase())
+ );
+}
+
+function runtimeEntryMentionsProcessTableUnavailable(
+ entry: Pick
+): boolean {
+ return [entry.runtimeDiagnostic, ...(entry.diagnostics ?? [])].some((message) =>
+ mentionsProcessTableUnavailable(message)
+ );
+}
+
+export function hasUncertainWorkSyncRuntimeActivity(
+ snapshot: Pick | null | undefined
+): boolean {
+ return Object.values(snapshot?.members ?? {}).some(
+ (entry) =>
+ isRuntimeEntryRelevantForWorkSync(entry) && runtimeEntryMentionsProcessTableUnavailable(entry)
+ );
+}
+
export function hasWorkSyncActiveRuntime(
snapshot: Pick | null | undefined
): boolean {
return Object.values(snapshot?.members ?? {}).some(isRuntimeEntryActiveForWorkSync);
}
+
+export function isRuntimeMemberActiveForWorkSync(
+ snapshot: Pick | null | undefined,
+ memberName: string
+): boolean {
+ const normalizedMemberName = normalizeMemberName(memberName);
+ if (!normalizedMemberName) {
+ return false;
+ }
+ return Object.values(snapshot?.members ?? {}).some(
+ (entry) =>
+ normalizeMemberName(entry.memberName) === normalizedMemberName &&
+ isRuntimeEntryActiveForWorkSync(entry)
+ );
+}
+
+export function isRuntimeMemberActivityUncertainForWorkSync(
+ snapshot: Pick | null | undefined,
+ memberName: string
+): boolean {
+ const normalizedMemberName = normalizeMemberName(memberName);
+ if (!normalizedMemberName) {
+ return false;
+ }
+ return Object.values(snapshot?.members ?? {}).some(
+ (entry) =>
+ normalizeMemberName(entry.memberName) === normalizedMemberName &&
+ isRuntimeEntryRelevantForWorkSync(entry) &&
+ runtimeEntryMentionsProcessTableUnavailable(entry)
+ );
+}
diff --git a/src/features/member-work-sync/main/index.ts b/src/features/member-work-sync/main/index.ts
index 6f5f1fa8..f451680f 100644
--- a/src/features/member-work-sync/main/index.ts
+++ b/src/features/member-work-sync/main/index.ts
@@ -9,6 +9,9 @@ export {
createMemberWorkSyncFeature,
} from './composition/createMemberWorkSyncFeature';
export {
+ hasUncertainWorkSyncRuntimeActivity,
hasWorkSyncActiveRuntime,
isRuntimeEntryActiveForWorkSync,
+ isRuntimeMemberActiveForWorkSync,
+ isRuntimeMemberActivityUncertainForWorkSync,
} from './composition/memberWorkSyncTeamActivity';
diff --git a/src/features/member-work-sync/main/infrastructure/CompositeMemberWorkSyncBusySignal.ts b/src/features/member-work-sync/main/infrastructure/CompositeMemberWorkSyncBusySignal.ts
index 242b7456..5a28a725 100644
--- a/src/features/member-work-sync/main/infrastructure/CompositeMemberWorkSyncBusySignal.ts
+++ b/src/features/member-work-sync/main/infrastructure/CompositeMemberWorkSyncBusySignal.ts
@@ -22,14 +22,6 @@ export class CompositeMemberWorkSyncBusySignal implements MemberWorkSyncBusySign
memberName: input.memberName,
error: String(error),
});
- const nowMs = Date.parse(input.nowIso);
- return {
- busy: true,
- reason: 'busy_signal_error',
- retryAfterIso: new Date(
- (Number.isFinite(nowMs) ? nowMs : Date.now()) + 60_000
- ).toISOString(),
- };
}
}
diff --git a/src/features/member-work-sync/main/infrastructure/JsonMemberWorkSyncStore.ts b/src/features/member-work-sync/main/infrastructure/JsonMemberWorkSyncStore.ts
index c35f1c97..c1477ed0 100644
--- a/src/features/member-work-sync/main/infrastructure/JsonMemberWorkSyncStore.ts
+++ b/src/features/member-work-sync/main/infrastructure/JsonMemberWorkSyncStore.ts
@@ -110,6 +110,7 @@ interface OutboxIndexFile {
type OutboxIndexRoute = OutboxIndexFile['items'][string];
type OutboxDueRoute = [string, OutboxIndexRoute];
+const MEMBER_WORK_SYNC_OUTBOX_CLAIM_STALE_MS = 5 * 60 * 1000;
export interface JsonMemberWorkSyncStoreDeps {
auditJournal?: MemberWorkSyncAuditJournalPort;
@@ -117,8 +118,12 @@ export interface JsonMemberWorkSyncStoreDeps {
now?: () => Date;
}
-function normalizeMemberKey(memberName: string): string {
- return memberName.trim().toLowerCase();
+function normalizeMemberKey(memberName: unknown): string {
+ return typeof memberName === 'string' ? memberName.trim().toLowerCase() : '';
+}
+
+function normalizeTeamKey(teamName: unknown): string {
+ return typeof teamName === 'string' ? teamName.trim().toLowerCase() : '';
}
function emptyMetricsIndex(): MetricsIndexFile {
@@ -242,38 +247,87 @@ function canReviveOutboxItem(status: MemberWorkSyncOutboxItem['status']): boolea
return status === 'superseded' || (!isOutboxTerminal(status) && status !== 'pending');
}
+function isReportIntentOwnedBy(
+ teamName: string,
+ memberName: string,
+ intent: MemberWorkSyncReportIntent
+): boolean {
+ return (
+ normalizeTeamKey(intent.teamName) === normalizeTeamKey(teamName) &&
+ normalizeMemberKey(intent.memberName) === normalizeMemberKey(memberName)
+ );
+}
+
+function isOutboxItemOwnedBy(
+ teamName: string,
+ memberName: string,
+ item: MemberWorkSyncOutboxItem
+): boolean {
+ return (
+ normalizeTeamKey(item.teamName) === normalizeTeamKey(teamName) &&
+ normalizeMemberKey(item.memberName) === normalizeMemberKey(memberName)
+ );
+}
+
+function parseIsoMs(value: string | undefined): number | null {
+ if (!value) {
+ return null;
+ }
+ const ms = Date.parse(value);
+ return Number.isFinite(ms) ? ms : null;
+}
+
+function isStaleClaim(claimedAt: string | undefined, nowIso: string): boolean {
+ const claimedAtMs = parseIsoMs(claimedAt);
+ const nowMs = parseIsoMs(nowIso);
+ return (
+ claimedAtMs != null &&
+ nowMs != null &&
+ (claimedAtMs > nowMs || nowMs - claimedAtMs >= MEMBER_WORK_SYNC_OUTBOX_CLAIM_STALE_MS)
+ );
+}
+
+function applyOptionalNextAttemptAt(
+ item: MemberWorkSyncOutboxItem,
+ nextAttemptAt: string | undefined
+): void {
+ if (nextAttemptAt) {
+ item.nextAttemptAt = nextAttemptAt;
+ return;
+ }
+ delete item.nextAttemptAt;
+}
+
+function isNextAttemptDue(nextAttemptAt: string | undefined, nowIso: string): boolean {
+ if (!nextAttemptAt) {
+ return true;
+ }
+ const nextAttemptAtMs = parseIsoMs(nextAttemptAt);
+ if (nextAttemptAtMs == null) {
+ return true;
+ }
+ const nowMs = parseIsoMs(nowIso);
+ return nowMs != null && nextAttemptAtMs <= nowMs;
+}
+
function canClaimOutboxItem(item: MemberWorkSyncOutboxItem, nowIso: string): boolean {
+ if (item.status === 'claimed') {
+ return isStaleClaim(item.claimedAt ?? item.updatedAt, nowIso);
+ }
if (item.status !== 'pending' && item.status !== 'failed_retryable') {
return false;
}
- if (!item.nextAttemptAt) {
- return true;
- }
- return item.nextAttemptAt <= nowIso;
+ return isNextAttemptDue(item.nextAttemptAt, nowIso);
}
-function getReviewPickupIntentKey(item: Pick): string | null {
- if (item.payload.workSyncIntent !== 'review_pickup') {
- return null;
+function canClaimOutboxRoute(route: OutboxIndexRoute, nowIso: string): boolean {
+ if (route.status === 'claimed') {
+ return isStaleClaim(route.updatedAt, nowIso);
}
- const explicit = item.payload.workSyncIntentKey?.trim();
- if (explicit) {
- return explicit;
- }
- const requestEventIds = [...new Set(item.payload.workSyncReviewRequestEventIds ?? [])]
- .map((id) => id.trim())
- .filter(Boolean)
- .sort();
- return requestEventIds.length > 0 ? `review-pickup:${requestEventIds.join('+')}` : null;
-}
-
-function isSameReviewPickupIntent(
- current: MemberWorkSyncOutboxItem,
- input: MemberWorkSyncOutboxEnsureInput
-): boolean {
- const currentIntentKey = getReviewPickupIntentKey(current);
- const inputIntentKey = getReviewPickupIntentKey({ payload: input.payload });
- return Boolean(currentIntentKey && inputIntentKey && currentIntentKey === inputIntentKey);
+ return (
+ (route.status === 'pending' || route.status === 'failed_retryable') &&
+ isNextAttemptDue(route.nextAttemptAt, nowIso)
+ );
}
function getDueOutboxRoutes(
@@ -282,8 +336,7 @@ function getDueOutboxRoutes(
limit: number
): OutboxDueRoute[] {
return Object.entries(index.items)
- .filter(([, route]) => route.status === 'pending' || route.status === 'failed_retryable')
- .filter(([, route]) => !route.nextAttemptAt || route.nextAttemptAt <= nowIso)
+ .filter(([, route]) => canClaimOutboxRoute(route, nowIso))
.sort((left, right) => {
const leftTime = left[1].nextAttemptAt ?? left[1].updatedAt;
const rightTime = right[1].nextAttemptAt ?? right[1].updatedAt;
@@ -636,10 +689,10 @@ export class JsonMemberWorkSyncStore
staleIndex = true;
}
}
- const missingIndexedPending = staleIndex
+ const unindexedOrStaleIndexedPending = staleIndex
? false
- : await this.hasMissingIndexedPendingReport(teamName, index);
- if (staleIndex || missingIndexedPending) {
+ : await this.hasUnindexedOrStaleIndexedPendingReport(teamName, index);
+ if (staleIndex || unindexedOrStaleIndexedPending) {
await this.enqueue(teamName, async () => {
await withFileLock(this.paths.getPendingReportsIndexPath(teamName), async () => {
index = await this.repairPendingReportsIndex(teamName);
@@ -679,29 +732,58 @@ export class JsonMemberWorkSyncStore
if (!route) {
return;
}
- await withFileLock(
- this.paths.getMemberReportsPath(teamName, route.memberName),
- async () => {
- const reports = await this.readMemberReportsFile(teamName, route.memberName);
- const current = reports.intents[id];
- if (current?.status !== 'pending') {
- return;
+ const updateRoute = async (
+ targetRoute: PendingReportsIndexFile['items'][string]
+ ): Promise => {
+ let staleRoute = false;
+ await withFileLock(
+ this.paths.getMemberReportsPath(teamName, targetRoute.memberName),
+ async () => {
+ const reports = await this.readMemberReportsFile(teamName, targetRoute.memberName);
+ const current = reports.intents[id];
+ if (!current) {
+ delete index.items[id];
+ staleRoute = true;
+ return;
+ }
+ if (!isReportIntentOwnedBy(teamName, targetRoute.memberName, current)) {
+ delete index.items[id];
+ staleRoute = true;
+ return;
+ }
+ if (current.status !== 'pending') {
+ return;
+ }
+ const next: MemberWorkSyncReportIntent = {
+ ...current,
+ status: result.status,
+ resultCode: result.resultCode,
+ processedAt: result.processedAt,
+ };
+ reports.intents[id] = next;
+ await this.writeMemberReportsFile(teamName, targetRoute.memberName, reports);
+ index.items[id] = toPendingReportIndexItem(
+ next,
+ this.paths.getMemberKey(next.memberName)
+ );
+ await this.writePendingReportsIndexFile(teamName, index);
}
- reports.intents[id] = {
- ...current,
- status: result.status,
- resultCode: result.resultCode,
- processedAt: result.processedAt,
- };
- await this.writeMemberReportsFile(teamName, route.memberName, reports);
- index.items[id] = {
- ...route,
- status: result.status,
- processedAt: result.processedAt,
- };
- await this.writePendingReportsIndexFile(teamName, index);
+ );
+ return staleRoute;
+ };
+
+ let staleRoute = await updateRoute(route);
+ if (staleRoute) {
+ index = await this.repairPendingReportsIndex(teamName);
+ const repairedRoute = index.items[id];
+ if (!repairedRoute) {
+ return;
}
- );
+ staleRoute = await updateRoute(repairedRoute);
+ if (staleRoute) {
+ await this.repairPendingReportsIndex(teamName);
+ }
+ }
});
});
}
@@ -721,21 +803,20 @@ export class JsonMemberWorkSyncStore
const current = outbox.items[input.id];
if (current) {
if (current.payloadHash !== input.payloadHash) {
- if (isSameReviewPickupIntent(current, input) && !isOutboxTerminal(current.status)) {
+ if (current.status !== 'delivered' && current.status !== 'failed_terminal') {
const next: MemberWorkSyncOutboxItem = {
...current,
agendaFingerprint: input.agendaFingerprint,
payloadHash: input.payloadHash,
payload: input.payload,
status: 'pending',
+ attemptGeneration:
+ current.status === 'claimed'
+ ? current.attemptGeneration + 1
+ : current.attemptGeneration,
updatedAt: input.nowIso,
};
- const nextAttemptAt = input.nextAttemptAt ?? current.nextAttemptAt;
- if (nextAttemptAt) {
- next.nextAttemptAt = nextAttemptAt;
- } else {
- delete next.nextAttemptAt;
- }
+ applyOptionalNextAttemptAt(next, input.nextAttemptAt);
delete next.claimedBy;
delete next.claimedAt;
delete next.lastError;
@@ -761,12 +842,7 @@ export class JsonMemberWorkSyncStore
status: 'pending',
updatedAt: input.nowIso,
};
- const nextAttemptAt = input.nextAttemptAt ?? current.nextAttemptAt;
- if (nextAttemptAt) {
- next.nextAttemptAt = nextAttemptAt;
- } else {
- delete next.nextAttemptAt;
- }
+ applyOptionalNextAttemptAt(next, input.nextAttemptAt);
delete next.claimedBy;
delete next.claimedAt;
delete next.lastError;
@@ -820,45 +896,67 @@ export class JsonMemberWorkSyncStore
}
let dueRoutes = getDueOutboxRoutes(index, input.nowIso, input.limit);
if (
- dueRoutes.length > 0 &&
dueRoutes.length < Math.max(0, input.limit) &&
- (await this.hasMissingIndexedDueOutboxItem(input.teamName, index, input.nowIso))
+ (await this.hasUnindexedOrStaleIndexedDueOutboxItem(input.teamName, index, input.nowIso))
) {
index = await this.repairOutboxIndex(input.teamName);
dueRoutes = getDueOutboxRoutes(index, input.nowIso, input.limit);
}
- let staleIndex = false;
- for (const [id, route] of dueRoutes) {
- await withFileLock(
- this.paths.getMemberOutboxPath(input.teamName, route.memberName),
- async () => {
- const outbox = await this.readMemberOutboxFile(input.teamName, route.memberName);
- const item = outbox.items[id];
- if (!item || !canClaimOutboxItem(item, input.nowIso)) {
- delete index.items[id];
- staleIndex = true;
- return;
- }
- const next: MemberWorkSyncOutboxItem = {
- ...item,
- status: 'claimed',
- attemptGeneration: item.attemptGeneration + 1,
- claimedBy: input.claimedBy,
- claimedAt: input.nowIso,
- updatedAt: input.nowIso,
- };
- delete next.lastError;
- outbox.items[id] = next;
- await this.writeMemberOutboxFile(input.teamName, route.memberName, outbox);
- index.items[id] = toOutboxIndexItem(next, route.memberKey);
- claimed.push(next);
+ const claimRoutes = async (routes: OutboxDueRoute[]): Promise => {
+ let staleIndex = false;
+ for (const [id, route] of routes) {
+ if (claimed.length >= Math.max(0, input.limit)) {
+ break;
}
- );
- }
+ await withFileLock(
+ this.paths.getMemberOutboxPath(input.teamName, route.memberName),
+ async () => {
+ const outbox = await this.readMemberOutboxFile(input.teamName, route.memberName);
+ const item = outbox.items[id];
+ if (!item || !canClaimOutboxItem(item, input.nowIso)) {
+ delete index.items[id];
+ staleIndex = true;
+ return;
+ }
+ const memberKey = this.paths.getMemberKey(item.memberName);
+ if (!isOutboxItemOwnedBy(input.teamName, route.memberName, item)) {
+ delete index.items[id];
+ staleIndex = true;
+ return;
+ }
+ const next: MemberWorkSyncOutboxItem = {
+ ...item,
+ status: 'claimed',
+ attemptGeneration: item.attemptGeneration + 1,
+ claimedBy: input.claimedBy,
+ claimedAt: input.nowIso,
+ updatedAt: input.nowIso,
+ };
+ delete next.nextAttemptAt;
+ delete next.lastError;
+ outbox.items[id] = next;
+ await this.writeMemberOutboxFile(input.teamName, route.memberName, outbox);
+ index.items[id] = toOutboxIndexItem(next, memberKey);
+ claimed.push(next);
+ }
+ );
+ }
+ return staleIndex;
+ };
+ let staleIndex = await claimRoutes(dueRoutes);
if (staleIndex) {
index = await this.repairOutboxIndex(input.teamName);
+ const remainingLimit = Math.max(0, input.limit) - claimed.length;
+ dueRoutes =
+ remainingLimit > 0 ? getDueOutboxRoutes(index, input.nowIso, remainingLimit) : [];
+ staleIndex = dueRoutes.length > 0 ? await claimRoutes(dueRoutes) : false;
+ if (staleIndex) {
+ await this.repairOutboxIndex(input.teamName);
+ } else if (dueRoutes.length > 0) {
+ await this.writeOutboxIndexFile(input.teamName, index);
+ }
} else if (dueRoutes.length > 0) {
await this.writeOutboxIndexFile(input.teamName, index);
}
@@ -869,7 +967,7 @@ export class JsonMemberWorkSyncStore
async markDelivered(input: MemberWorkSyncOutboxMarkDeliveredInput): Promise {
await this.updateOutboxItem(input.teamName, input.id, (current) => {
- if (current?.attemptGeneration !== input.attemptGeneration) {
+ if (current?.attemptGeneration !== input.attemptGeneration || current.status !== 'claimed') {
return current;
}
const next: MemberWorkSyncOutboxItem = {
@@ -883,6 +981,7 @@ export class JsonMemberWorkSyncStore
updatedAt: input.nowIso,
};
delete next.lastError;
+ delete next.nextAttemptAt;
return next;
});
}
@@ -903,7 +1002,10 @@ export class JsonMemberWorkSyncStore
async markFailed(input: MemberWorkSyncOutboxMarkFailedInput): Promise {
await this.updateOutboxItem(input.teamName, input.id, (current) => {
- if (current?.attemptGeneration !== input.attemptGeneration) {
+ if (
+ current?.attemptGeneration !== input.attemptGeneration ||
+ isOutboxTerminal(current.status)
+ ) {
return current;
}
const next: MemberWorkSyncOutboxItem = {
@@ -923,6 +1025,17 @@ export class JsonMemberWorkSyncStore
async countRecentDelivered(
input: MemberWorkSyncOutboxCountRecentDeliveredInput
): Promise {
+ const workSyncIntentKeyPrefix = input.workSyncIntentKeyPrefix?.trim();
+ if (workSyncIntentKeyPrefix) {
+ const memberOutbox = await this.readMemberOutboxFile(input.teamName, input.memberName);
+ return Object.values(memberOutbox.items).filter(
+ (item) =>
+ item.status === 'delivered' &&
+ item.updatedAt >= input.sinceIso &&
+ item.payload.workSyncIntentKey?.startsWith(workSyncIntentKeyPrefix) === true
+ ).length;
+ }
+
let index = await this.readOutboxIndexFile(input.teamName);
if (Object.keys(index.items).length === 0) {
await this.enqueue(input.teamName, async () => {
@@ -1003,7 +1116,8 @@ export class JsonMemberWorkSyncStore
(item) =>
item.payload.workSyncIntentKey === intentKey &&
item.updatedAt >= input.sinceIso &&
- item.status !== 'failed_terminal'
+ item.status !== 'failed_terminal' &&
+ item.status !== 'superseded'
)
.sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
const latest = matches[0];
@@ -1178,17 +1292,48 @@ export class JsonMemberWorkSyncStore
if (!route) {
return;
}
- await withFileLock(this.paths.getMemberOutboxPath(teamName, route.memberName), async () => {
- const outbox = await this.readMemberOutboxFile(teamName, route.memberName);
- const next = updater(outbox.items[id]);
- if (!next) {
+ const updateRoute = async (targetRoute: OutboxIndexRoute): Promise => {
+ let staleRoute = false;
+ await withFileLock(
+ this.paths.getMemberOutboxPath(teamName, targetRoute.memberName),
+ async () => {
+ const outbox = await this.readMemberOutboxFile(teamName, targetRoute.memberName);
+ const current = outbox.items[id];
+ if (!current) {
+ delete index.items[id];
+ staleRoute = true;
+ return;
+ }
+ if (!isOutboxItemOwnedBy(teamName, targetRoute.memberName, current)) {
+ delete index.items[id];
+ staleRoute = true;
+ return;
+ }
+ const next = updater(current);
+ if (!next) {
+ return;
+ }
+ outbox.items[id] = next;
+ await this.writeMemberOutboxFile(teamName, targetRoute.memberName, outbox);
+ index.items[id] = toOutboxIndexItem(next, this.paths.getMemberKey(next.memberName));
+ await this.writeOutboxIndexFile(teamName, index);
+ }
+ );
+ return staleRoute;
+ };
+
+ let staleRoute = await updateRoute(route);
+ if (staleRoute) {
+ index = await this.repairOutboxIndex(teamName);
+ const repairedRoute = index.items[id];
+ if (!repairedRoute) {
return;
}
- outbox.items[id] = next;
- await this.writeMemberOutboxFile(teamName, route.memberName, outbox);
- index.items[id] = toOutboxIndexItem(next, route.memberKey);
- await this.writeOutboxIndexFile(teamName, index);
- });
+ staleRoute = await updateRoute(repairedRoute);
+ if (staleRoute) {
+ await this.repairOutboxIndex(teamName);
+ }
+ }
});
});
}
@@ -1258,11 +1403,17 @@ export class JsonMemberWorkSyncStore
for (const { memberName, reports } of await this.scanMemberReports(teamName)) {
const memberKey = this.paths.getMemberKey(memberName);
for (const intent of Object.values(reports.intents)) {
+ if (!isReportIntentOwnedBy(teamName, memberName, intent)) {
+ continue;
+ }
index.items[intent.id] = toPendingReportIndexItem(intent, memberKey);
repairedMembers.add(intent.memberName);
}
}
for (const intent of Object.values((await this.readLegacyPendingFile(teamName)).intents)) {
+ if (!isReportIntentOwnedBy(teamName, intent.memberName, intent)) {
+ continue;
+ }
const memberKey = this.paths.getMemberKey(intent.memberName);
if (!index.items[intent.id]) {
await withFileLock(
@@ -1307,11 +1458,17 @@ export class JsonMemberWorkSyncStore
for (const { memberName, outbox } of await this.scanMemberOutboxes(teamName)) {
const memberKey = this.paths.getMemberKey(memberName);
for (const item of Object.values(outbox.items)) {
+ if (!isOutboxItemOwnedBy(teamName, memberName, item)) {
+ continue;
+ }
index.items[item.id] = toOutboxIndexItem(item, memberKey);
repairedMembers.add(item.memberName);
}
}
for (const item of Object.values((await this.readLegacyOutboxFile(teamName)).items)) {
+ if (!isOutboxItemOwnedBy(teamName, item.memberName, item)) {
+ continue;
+ }
const memberKey = this.paths.getMemberKey(item.memberName);
if (!index.items[item.id]) {
await withFileLock(this.paths.getMemberOutboxPath(teamName, item.memberName), async () => {
@@ -1389,26 +1546,54 @@ export class JsonMemberWorkSyncStore
return reports;
}
- private async hasMissingIndexedPendingReport(
+ private async hasUnindexedOrStaleIndexedPendingReport(
teamName: string,
index: PendingReportsIndexFile
): Promise {
- const indexedIds = new Set(Object.keys(index.items));
- for (const { reports } of await this.scanMemberReports(teamName)) {
+ const routes = index.items;
+ for (const { memberName, reports } of await this.scanMemberReports(teamName)) {
for (const intent of Object.values(reports.intents)) {
- if (intent.status === 'pending' && !indexedIds.has(intent.id)) {
+ if (!isReportIntentOwnedBy(teamName, memberName, intent)) {
+ continue;
+ }
+ const route = routes[intent.id];
+ if (
+ intent.status === 'pending' &&
+ !this.isCurrentPendingReportRoute(teamName, route, intent)
+ ) {
return true;
}
}
}
for (const intent of Object.values((await this.readLegacyPendingFile(teamName)).intents)) {
- if (intent.status === 'pending' && !indexedIds.has(intent.id)) {
+ if (!isReportIntentOwnedBy(teamName, intent.memberName, intent)) {
+ continue;
+ }
+ const route = routes[intent.id];
+ if (
+ intent.status === 'pending' &&
+ !this.isCurrentPendingReportRoute(teamName, route, intent)
+ ) {
return true;
}
}
return false;
}
+ private isCurrentPendingReportRoute(
+ teamName: string,
+ route: PendingReportsIndexFile['items'][string] | undefined,
+ intent: MemberWorkSyncReportIntent
+ ): boolean {
+ return (
+ !!route &&
+ normalizeTeamKey(intent.teamName) === normalizeTeamKey(teamName) &&
+ route.status === 'pending' &&
+ normalizeMemberKey(route.memberName) === normalizeMemberKey(intent.memberName) &&
+ route.memberKey === this.paths.getMemberKey(intent.memberName)
+ );
+ }
+
private async scanMemberOutboxes(
teamName: string
): Promise<{ memberName: string; outbox: MemberOutboxFile }[]> {
@@ -1419,27 +1604,56 @@ export class JsonMemberWorkSyncStore
return outboxes;
}
- private async hasMissingIndexedDueOutboxItem(
+ private async hasUnindexedOrStaleIndexedDueOutboxItem(
teamName: string,
index: OutboxIndexFile,
nowIso: string
): Promise {
- const indexedIds = new Set(Object.keys(index.items));
- for (const { outbox } of await this.scanMemberOutboxes(teamName)) {
+ const routes = index.items;
+ for (const { memberName, outbox } of await this.scanMemberOutboxes(teamName)) {
for (const item of Object.values(outbox.items)) {
- if (canClaimOutboxItem(item, nowIso) && !indexedIds.has(item.id)) {
+ if (!isOutboxItemOwnedBy(teamName, memberName, item)) {
+ continue;
+ }
+ const route = routes[item.id];
+ if (
+ canClaimOutboxItem(item, nowIso) &&
+ !this.isCurrentDueOutboxRoute(teamName, route, item, nowIso)
+ ) {
return true;
}
}
}
for (const item of Object.values((await this.readLegacyOutboxFile(teamName)).items)) {
- if (canClaimOutboxItem(item, nowIso) && !indexedIds.has(item.id)) {
+ if (!isOutboxItemOwnedBy(teamName, item.memberName, item)) {
+ continue;
+ }
+ const route = routes[item.id];
+ if (
+ canClaimOutboxItem(item, nowIso) &&
+ !this.isCurrentDueOutboxRoute(teamName, route, item, nowIso)
+ ) {
return true;
}
}
return false;
}
+ private isCurrentDueOutboxRoute(
+ teamName: string,
+ route: OutboxIndexRoute | undefined,
+ item: MemberWorkSyncOutboxItem,
+ nowIso: string
+ ): boolean {
+ return (
+ !!route &&
+ normalizeTeamKey(item.teamName) === normalizeTeamKey(teamName) &&
+ normalizeMemberKey(route.memberName) === normalizeMemberKey(item.memberName) &&
+ route.memberKey === this.paths.getMemberKey(item.memberName) &&
+ canClaimOutboxRoute(route, nowIso)
+ );
+ }
+
private async appendAudit(input: {
teamName: string;
memberName: string;
diff --git a/src/features/member-work-sync/main/infrastructure/MemberWorkSyncEventQueue.ts b/src/features/member-work-sync/main/infrastructure/MemberWorkSyncEventQueue.ts
index 7365c92f..705bfe0b 100644
--- a/src/features/member-work-sync/main/infrastructure/MemberWorkSyncEventQueue.ts
+++ b/src/features/member-work-sync/main/infrastructure/MemberWorkSyncEventQueue.ts
@@ -61,6 +61,7 @@ interface QueueItem {
maxRunAt: number;
triggerReasons: Set;
triggerReasonCounts: Map;
+ retryCount: number;
recovery?: MemberWorkSyncReconcileContext['recovery'];
}
@@ -84,9 +85,13 @@ export interface MemberWorkSyncEventQueueDeps {
context: MemberWorkSyncReconcileContext
): Promise;
isTeamActive(teamName: string): Promise | boolean;
+ reconcileInactiveTeams?: boolean;
quietWindowMs?: number;
triggerTiming?: Partial>>;
concurrency?: number;
+ retryDelayMs?: number;
+ reconcileTimeoutMs?: number;
+ maxRetryAttempts?: number;
now?: () => number;
nowIso?: () => string;
auditJournal?: MemberWorkSyncAuditJournalPort;
@@ -101,12 +106,17 @@ function unrefTimer(timer: ReturnType