improvement(i18n): Improve Simplified Chinese localization quality Merge pull request #200 from CharAznable98/main
Improve Simplified Chinese localization quality
This commit is contained in:
commit
3b933058c6
52 changed files with 4192 additions and 3132 deletions
15
.github/codeql/codeql-config.yml
vendored
Normal file
15
.github/codeql/codeql-config.yml
vendored
Normal file
|
|
@ -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/**'
|
||||
67
.github/workflows/codeql.yml
vendored
Normal file
67
.github/workflows/codeql.yml
vendored
Normal file
|
|
@ -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 }}
|
||||
|
|
@ -21,7 +21,7 @@ jobs:
|
|||
if: ${{ github.event_name == 'workflow_dispatch' || ((github.event_name != 'issue_comment' || github.event.issue.pull_request) && github.event.comment.user.type != 'Bot') }}
|
||||
env:
|
||||
REVIEWROUTER_API_URL: "https://api.reviewrouter.site"
|
||||
REVIEWROUTER_ACTION_VERSION: "c23ae97660c3674a2ebc9076bb5cd4f1bbd85657"
|
||||
REVIEWROUTER_ACTION_VERSION: "1603215454b4c5cf3387b40ae674a46eeb7ee96b"
|
||||
REVIEWROUTER_OIDC_AUDIENCE: "reviewrouter"
|
||||
REVIEWROUTER_RUNTIME_CONFIG_MODE: "oidc"
|
||||
REVIEWROUTER_STATIC_CONFIG_FALLBACK: "true"
|
||||
|
|
@ -42,7 +42,7 @@ jobs:
|
|||
|
||||
- name: Preflight ReviewRouter interaction
|
||||
id: preflight
|
||||
uses: 777genius/review-router@c23ae97660c3674a2ebc9076bb5cd4f1bbd85657
|
||||
uses: 777genius/review-router@1603215454b4c5cf3387b40ae674a46eeb7ee96b
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
REVIEW_ROUTER_MODE: "interaction-preflight"
|
||||
|
|
@ -78,7 +78,7 @@ jobs:
|
|||
|
||||
- name: Run ReviewRouter interaction
|
||||
if: ${{ steps.preflight.outputs.should_run == 'true' }}
|
||||
uses: 777genius/review-router@c23ae97660c3674a2ebc9076bb5cd4f1bbd85657
|
||||
uses: 777genius/review-router@1603215454b4c5cf3387b40ae674a46eeb7ee96b
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
REVIEW_ROUTER_MODE: "interaction"
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
<h1 align="center"><a href="https://agentteams.live/">Agent Teams</a></h1>
|
||||
|
||||
<p align="center">
|
||||
<strong><code>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.</code></strong>
|
||||
<strong><code>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.</code></strong>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
|
|
|
|||
|
|
@ -14,6 +14,6 @@
|
|||
"test:watch": "vitest --config vitest.config.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=24.16.0 <25"
|
||||
"node": ">=24.15.0 <25"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
1
landing/.gitignore
vendored
1
landing/.gitignore
vendored
|
|
@ -5,6 +5,7 @@ node_modules
|
|||
.env
|
||||
--host/
|
||||
product-docs/.vitepress/dist/
|
||||
product-docs/.vitepress/cache/
|
||||
|
||||
# Large video files
|
||||
public/video/*.mp4
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
.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;
|
||||
@media (max-width: 360px) {
|
||||
.cyber-hero__title {
|
||||
font-size: 2.1rem;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,15 +1,18 @@
|
|||
<script setup lang="ts">
|
||||
import robotLeadLounge from "~/assets/images/footer/robot-lead-lounge-v1.webp";
|
||||
import { buildDocsHref } from "~/utils/docsUrl";
|
||||
|
||||
const { t, locale } = useI18n();
|
||||
const { repoUrl } = useGithubRepo();
|
||||
const { baseURL } = useRuntimeConfig().app;
|
||||
const runtimeConfig = useRuntimeConfig();
|
||||
const { baseURL } = runtimeConfig.app;
|
||||
const year = new Date().getFullYear();
|
||||
const authorLabel = computed(() => locale.value === 'ru' ? 'Автор' : 'Author');
|
||||
const docsHref = computed(() => {
|
||||
const base = baseURL.replace(/\/?$/, '/');
|
||||
return `${base}${locale.value === 'ru' ? 'docs/ru/' : 'docs/'}`;
|
||||
});
|
||||
const docsHref = computed(() => buildDocsHref({
|
||||
locale: locale.value,
|
||||
docsSiteUrl: runtimeConfig.public.docsSiteUrl,
|
||||
embeddedBaseURL: baseURL,
|
||||
}));
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
|
|
|||
|
|
@ -1,13 +1,18 @@
|
|||
<script setup lang="ts">
|
||||
import { mdiMenu, mdiClose, mdiGithub } from '@mdi/js';
|
||||
import { buildDocsHref } from '~/utils/docsUrl';
|
||||
|
||||
const { t, locale } = useI18n();
|
||||
const { repoUrl } = useGithubRepo();
|
||||
const { baseURL } = useRuntimeConfig().app;
|
||||
const runtimeConfig = useRuntimeConfig();
|
||||
const { baseURL } = runtimeConfig.app;
|
||||
const menuOpen = ref(false);
|
||||
|
||||
const withBase = (path: string) => `${baseURL.replace(/\/?$/, '/')}${path.replace(/^\/+/, '')}`;
|
||||
const docsHref = computed(() => withBase(locale.value === 'ru' ? 'docs/ru/' : 'docs/'));
|
||||
const docsHref = computed(() => buildDocsHref({
|
||||
locale: locale.value,
|
||||
docsSiteUrl: runtimeConfig.public.docsSiteUrl,
|
||||
embeddedBaseURL: baseURL,
|
||||
}));
|
||||
const isRu = computed(() => locale.value === 'ru');
|
||||
const openMenuLabel = computed(() => (isRu.value ? 'Открыть меню' : 'Open menu'));
|
||||
const closeMenuLabel = computed(() => (isRu.value ? 'Закрыть меню' : 'Close menu'));
|
||||
|
|
@ -811,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;
|
||||
|
|
|
|||
|
|
@ -974,9 +974,13 @@ const linuxRobotBubble = computed(() => locale.value === 'ru' ? 'Готов на
|
|||
}
|
||||
|
||||
.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(() => locale.value === 'ru' ? 'Готов на
|
|||
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;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -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<HTMLElement | null>(null);
|
||||
const activeHeroMessageIndex = ref(0);
|
||||
const heroMessagePhase = ref<HeroMessagePhase>("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);
|
||||
|
||||
|
|
@ -71,7 +72,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 locale.value === "ru"
|
||||
|
|
|
|||
|
|
@ -7,17 +7,30 @@ declare const process: {
|
|||
env: Record<string, string | undefined>;
|
||||
};
|
||||
|
||||
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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"private": true,
|
||||
"type": "module",
|
||||
"engines": {
|
||||
"node": ">=24.16.0 <25"
|
||||
"node": ">=24.15.0 <25"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "nuxt dev",
|
||||
|
|
|
|||
|
|
@ -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/" },
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ const props = withDefaults(defineProps<{ type?: "start" | "reference" }>(), {
|
|||
type: "start"
|
||||
});
|
||||
|
||||
type CardText = { title: string; desc: string };
|
||||
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;
|
||||
|
|
@ -26,10 +26,12 @@ const REFERENCE_ICONS = ["◈", "⌁", "▦", "⌘", "?"];
|
|||
const CARD_TEXT: Record<string, { start: CardText[]; reference: CardText[] }> = {
|
||||
"": {
|
||||
start: [
|
||||
{ title: "Quickstart", desc: "Install the app and create your first team." },
|
||||
{ title: "Installation", desc: "Platforms, releases, and running from source." },
|
||||
{ title: "Create a team", desc: "Roles, lead prompt, and task boundaries." },
|
||||
{ title: "Code review", desc: "Review task changes with hunk-level decisions." }
|
||||
{ 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." },
|
||||
|
|
@ -41,10 +43,12 @@ const CARD_TEXT: Record<string, { start: CardText[]; reference: CardText[] }> =
|
|||
},
|
||||
ru: {
|
||||
start: [
|
||||
{ title: "Быстрый старт", desc: "Поставить приложение и создать первую команду." },
|
||||
{ title: "Установка", desc: "Платформы, релизы и запуск из исходников." },
|
||||
{ title: "Создание команды", desc: "Роли, lead prompt и границы работы." },
|
||||
{ title: "Код-ревью", desc: "Проверка изменений по задачам и hunk-level decisions." }
|
||||
{ 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: "Команды, задачи, роли и уровни автономности." },
|
||||
|
|
@ -147,10 +151,10 @@ const cards = computed(() => {
|
|||
const prefix = locale.value ? `/${locale.value}` : "";
|
||||
|
||||
return entries.map((entry, index) => ({
|
||||
icon: icons[index],
|
||||
icon: entry.icon ?? icons[index] ?? String(index + 1).padStart(2, "0"),
|
||||
title: entry.title,
|
||||
desc: entry.desc,
|
||||
link: `${prefix}${links[index]}`
|
||||
link: entry.link ?? `${prefix}${links[index]}`
|
||||
}));
|
||||
});
|
||||
</script>
|
||||
|
|
|
|||
108
landing/product-docs/guide/beginner-workflow.md
Normal file
108
landing/product-docs/guide/beginner-workflow.md
Normal file
|
|
@ -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. |
|
||||
|
||||
<ZoomImage src="/screenshots/guides/task-board-annotated.png" alt="Annotated Agent Teams task board" caption="The board is the main operating surface after launch: messages, columns, review cards, and the task list stay visible together." />
|
||||
|
||||
## 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).
|
||||
111
landing/product-docs/guide/create-first-team.md
Normal file
111
landing/product-docs/guide/create-first-team.md
Normal file
|
|
@ -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`.
|
||||
|
||||
<ZoomImage src="/screenshots/guides/create-team-annotated.png" alt="Annotated Create Team dialog" caption="Create Team: name the team, add members, choose roles and models, then enable Worktree only when you want isolated Git worktrees." />
|
||||
|
||||
## 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).
|
||||
88
landing/product-docs/guide/review-and-approve.md
Normal file
88
landing/product-docs/guide/review-and-approve.md
Normal file
|
|
@ -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.
|
||||
|
||||
<ZoomImage src="/screenshots/guides/task-detail-annotated.png" alt="Annotated task detail view for review" caption="Start with the task description, then check attachments, changes, and execution logs before approving anything." />
|
||||
|
||||
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.
|
||||
|
||||
<ZoomImage src="/screenshots/guides/code-review-annotated.png" alt="Annotated code review screen with changed files, Accept All, and hunk actions" caption="Review each file first. Use Accept All only after you understand the diff. Keep or undo individual hunks when only part of a change is correct." />
|
||||
|
||||
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.
|
||||
100
landing/product-docs/guide/run-and-monitor-work.md
Normal file
100
landing/product-docs/guide/run-and-monitor-work.md
Normal file
|
|
@ -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
|
||||
|
||||
<ZoomImage src="/screenshots/guides/task-board-annotated.png" alt="Annotated task board with messages, kanban lanes, review cards, and task list" caption="Use the board to scan messages, task state, review-ready work, and the right-side task list without opening raw files." />
|
||||
|
||||
| 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
|
||||
|
||||
<ZoomImage src="/screenshots/guides/task-detail-annotated.png" alt="Annotated task detail view with description, attachments, changes, and execution logs" caption="Task detail is where you confirm the task scope, attached context, changed files, and runtime evidence." />
|
||||
|
||||
## 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).
|
||||
|
|
@ -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
|
||||
|
||||
<ZoomImage src="/screenshots/1.jpg" alt="Agent Teams kanban board" caption="Task status, teammate activity, and review workflow stay visible in one workspace." />
|
||||
<ZoomImage src="/screenshots/product-preview.jpg" alt="Agent Teams kanban board" caption="Task status, teammate activity, and review workflow stay visible in one workspace." />
|
||||
|
|
|
|||
109
landing/product-docs/ru/guide/beginner-workflow.md
Normal file
109
landing/product-docs/ru/guide/beginner-workflow.md
Normal file
|
|
@ -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. |
|
||||
|
||||
<ZoomImage src="/screenshots/guides/task-board-annotated.png" alt="Аннотированная доска задач Agent Teams" caption="Доска - главная рабочая поверхность после запуска: сообщения, колонки, review-карточки и список задач видны вместе." />
|
||||
|
||||
## Рекомендуемый порядок гайдов
|
||||
|
||||
Для первого успешного запуска идите в таком порядке:
|
||||
|
||||
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).
|
||||
112
landing/product-docs/ru/guide/create-first-team.md
Normal file
112
landing/product-docs/ru/guide/create-first-team.md
Normal file
|
|
@ -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`.
|
||||
|
||||
<ZoomImage src="/screenshots/guides/create-team-annotated.png" alt="Аннотированный диалог Create Team" caption="Create Team: назовите команду, добавьте участников, выберите роли и модели, затем включайте Worktree только если нужна Git-изоляция." />
|
||||
|
||||
## 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).
|
||||
89
landing/product-docs/ru/guide/review-and-approve.md
Normal file
89
landing/product-docs/ru/guide/review-and-approve.md
Normal file
|
|
@ -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.
|
||||
|
||||
<ZoomImage src="/screenshots/guides/task-detail-annotated.png" alt="Аннотированный task detail для review" caption="Начните с task description, затем проверьте attachments, changes и execution logs до approval." />
|
||||
|
||||
Проверьте:
|
||||
|
||||
- понятная ли цель задачи
|
||||
- совпадают ли файлы с ожидаемым 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.
|
||||
|
||||
<ZoomImage src="/screenshots/guides/code-review-annotated.png" alt="Аннотированный code review screen с changed files, Accept All и hunk actions" caption="Сначала проверьте каждый file. Accept All используйте только после понимания diff. Keep или undo применяйте для отдельных hunks." />
|
||||
|
||||
Порядок:
|
||||
|
||||
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.
|
||||
101
landing/product-docs/ru/guide/run-and-monitor-work.md
Normal file
101
landing/product-docs/ru/guide/run-and-monitor-work.md
Normal file
|
|
@ -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 по колонкам
|
||||
|
||||
<ZoomImage src="/screenshots/guides/task-board-annotated.png" alt="Аннотированная доска с messages, kanban lanes, review cards и task list" caption="Board помогает одновременно видеть messages, task state, review-ready work и правый task list без чтения raw-файлов." />
|
||||
|
||||
| Колонка | Что значит | Что делать |
|
||||
| --- | --- | --- |
|
||||
| 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
|
||||
|
||||
<ZoomImage src="/screenshots/guides/task-detail-annotated.png" alt="Аннотированная карточка задачи с description, attachments, changes и execution logs" caption="Task detail помогает подтвердить scope, attached context, changed files и runtime evidence." />
|
||||
|
||||
## 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).
|
||||
|
|
@ -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-приложение для орке
|
|||
|
||||
## Превью продукта
|
||||
|
||||
<ZoomImage src="/screenshots/1.jpg" alt="Канбан-доска Agent Teams" caption="Статусы задач, активность агентов и review workflow видны в одном рабочем пространстве." />
|
||||
<ZoomImage src="/screenshots/product-preview.jpg" alt="Канбан-доска Agent Teams" caption="Статусы задач, активность агентов и review workflow видны в одном рабочем пространстве." />
|
||||
|
|
|
|||
15
landing/product-docs/tsconfig.json
Normal file
15
landing/product-docs/tsconfig.json
Normal file
|
|
@ -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"]
|
||||
}
|
||||
12
landing/public/docs/index.html
Normal file
12
landing/public/docs/index.html
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=https://agent-teams-ai-docs.onrender.com/">
|
||||
<link rel="canonical" href="https://agent-teams-ai-docs.onrender.com/">
|
||||
<title>Redirecting to Agent Teams Docs</title>
|
||||
</head>
|
||||
<body>
|
||||
<a href="https://agent-teams-ai-docs.onrender.com/">Agent Teams Docs</a>
|
||||
</body>
|
||||
</html>
|
||||
12
landing/public/docs/ru/index.html
Normal file
12
landing/public/docs/ru/index.html
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<!doctype html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=https://agent-teams-ai-docs.onrender.com/ru/">
|
||||
<link rel="canonical" href="https://agent-teams-ai-docs.onrender.com/ru/">
|
||||
<title>Redirecting to Agent Teams Docs</title>
|
||||
</head>
|
||||
<body>
|
||||
<a href="https://agent-teams-ai-docs.onrender.com/ru/">Agent Teams Docs</a>
|
||||
</body>
|
||||
</html>
|
||||
BIN
landing/public/screenshots/guides/code-review-annotated.png
Normal file
BIN
landing/public/screenshots/guides/code-review-annotated.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 378 KiB |
BIN
landing/public/screenshots/guides/create-team-annotated.png
Normal file
BIN
landing/public/screenshots/guides/create-team-annotated.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 422 KiB |
BIN
landing/public/screenshots/guides/task-board-annotated.png
Normal file
BIN
landing/public/screenshots/guides/task-board-annotated.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.2 MiB |
BIN
landing/public/screenshots/guides/task-detail-annotated.png
Normal file
BIN
landing/public/screenshots/guides/task-detail-annotated.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 448 KiB |
BIN
landing/public/screenshots/product-preview.jpg
Normal file
BIN
landing/public/screenshots/product-preview.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 322 KiB |
|
|
@ -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")}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
`;
|
||||
});
|
||||
|
|
|
|||
29
landing/utils/docsUrl.ts
Normal file
29
landing/utils/docsUrl.ts
Normal file
|
|
@ -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/'}`;
|
||||
}
|
||||
|
|
@ -48,6 +48,6 @@
|
|||
"vitest": "^3.1.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=24.16.0 <25"
|
||||
"node": ">=24.15.0 <25"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
"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": {
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,17 +1,17 @@
|
|||
{
|
||||
"cliStatus": {
|
||||
"actions": {
|
||||
"alreadyLoggedIn": "已经登录了吗?",
|
||||
"becomeSponsor": "成为提案国",
|
||||
"alreadyLoggedIn": "已经登录?",
|
||||
"becomeSponsor": "成为赞助商",
|
||||
"cancel": "取消",
|
||||
"checkNow": "现在检查",
|
||||
"checkNow": "立即查看",
|
||||
"checkUpdates": "检查更新",
|
||||
"checking": "正在检查...",
|
||||
"checking": "检查…",
|
||||
"connect": "连接",
|
||||
"extensions": "扩展",
|
||||
"login": "登录",
|
||||
"manage": "管理",
|
||||
"manageProviders": "管理供应商",
|
||||
"manageProviders": "管理提供商",
|
||||
"plan": "计划",
|
||||
"recheck": "重新检查",
|
||||
"recheckProvider": "重新检查 {{provider}}",
|
||||
|
|
@ -20,161 +20,161 @@
|
|||
"useCode": "使用代码"
|
||||
},
|
||||
"atlas": {
|
||||
"alt": "地图集云",
|
||||
"description": "Atlas Cloud是一个全模式的AI推论平台,它让开发者获得一个单一的AI API来访问视频生成,图像生成,以及LLM API. 与其管理多个供应商集成,不如连接一次,并获得所有模式300+全方位模型的统一访问. 请检查access-date=中的日期值 (帮助) Atlas Cloud新编码计划推广 更方便预算 API访问.",
|
||||
"openCodeProvider": "打开代码提供者",
|
||||
"plan": "阿特拉斯云编码计划",
|
||||
"sponsor": "发起人"
|
||||
"alt": "Atlas Cloud",
|
||||
"description": "Atlas Cloud 是一个全模态 AI 推理平台,为开发者提供单一 AI API 来访问视频生成、图像生成和 LLM API。您无需管理多个提供商集成,只需连接一次即可统一访问跨所有模态的 300 多个精选模型。查看 Atlas Cloud 的新编码计划促销活动,以获取更实惠的 API 访问权限。",
|
||||
"openCodeProvider": "OpenCode 提供商",
|
||||
"plan": "Atlas Cloud 编码计划",
|
||||
"sponsor": "赞助"
|
||||
},
|
||||
"errors": {
|
||||
"checkStatusFailed": "检查 CLI 状态失败",
|
||||
"checkStatusFailed": "无法检查 CLI 状态",
|
||||
"installationFailed": "安装失败",
|
||||
"refreshFailed": "检查更新失败 。 检查您的网络连接并再次尝试 。",
|
||||
"runtimeUpdatedRefreshFailed": "运行时间已更新, 但无法刷新提供者状态 。"
|
||||
"refreshFailed": "无法检查更新。检查您的网络连接并重试。",
|
||||
"runtimeUpdatedRefreshFailed": "运行时已更新,但无法刷新提供商状态。"
|
||||
},
|
||||
"hints": {
|
||||
"backgroundStatus": "{{runtime}}状态将在背景中检查.",
|
||||
"codexApiKeyFallback": "{{hint}} ZXCV 1ZXCV 如果您切换了认证模式,则可以使用密钥倒置。",
|
||||
"codexAutoApiKey": "{{hint}} 苏维埃社会主义共和国 自动会继续使用API密钥,直到ChatGPT连接.",
|
||||
"codexFinishLogin": "在浏览器中完成 ChatGPT 登录 。 如果提示, 请输入显示的代码 。",
|
||||
"codexNoActiveLogin": "用法限制仅在Codex CLI看到一个活动中的ChatGPT账户后出现. 现在它没有报告ChatGPT的登录。",
|
||||
"codexNoActiveManagedSession": "用法限制仅在Codex CLI看到一个活动中的ChatGPT账户后出现. 本地 Codex 账户数据已存在, 但目前没有选择活动管理会话 。",
|
||||
"codexReconnectNeeded": "用法限制仅在 Codex 刷新当前选中的 ChatGPT 会话后才会出现 。 现在本地会议需要重新连接。",
|
||||
"firstCheckSlow": "第一次检查可能要30秒",
|
||||
"loginRequiredForTeams": "浏览会话和项目在不登录的情况下工作. 只需要登录即可运行代理团队.",
|
||||
"troubleshootTitle": "如果你确定你登录, 尝试这些步骤:"
|
||||
"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": "无需登录即可浏览会话和项目。仅需要登录才能运行 Agent Team。",
|
||||
"troubleshootTitle": "如果您确定已登录,请尝试以下步骤:"
|
||||
},
|
||||
"installer": {
|
||||
"checkingLatest": "正在检查最新版本...",
|
||||
"downloading": "正在下载 {{runtime}}...",
|
||||
"installing": "正在安装 {{runtime}}...",
|
||||
"checkingLatest": "正在检查最新版本…",
|
||||
"downloading": "正在下载 {{runtime}}…",
|
||||
"installing": "正在安装 {{runtime}}…",
|
||||
"success": "成功安装 {{runtime}} v{{version}}",
|
||||
"verifying": "正在验证校验和..."
|
||||
"verifying": "正在验证校验和…"
|
||||
},
|
||||
"labels": {
|
||||
"apiKeyRequired": "需要的 API 密钥",
|
||||
"comingSoon": "马上就来",
|
||||
"collapseProviderDetails": "折叠提供者细节",
|
||||
"expandProviderDetails": "扩展提供者细节",
|
||||
"apiKeyRequired": "需要 API 密钥",
|
||||
"comingSoon": "即将推出",
|
||||
"collapseProviderDetails": "折叠提供商详细信息",
|
||||
"expandProviderDetails": "展开提供商详细信息",
|
||||
"generateLink": "生成链接",
|
||||
"loadingRateLimits": "速率限制加载",
|
||||
"loggedOut": "供应商已登录",
|
||||
"loggedOut": "提供商已注销",
|
||||
"loginAuthFailed": "认证失败",
|
||||
"loginAuthUpdated": "更新认证",
|
||||
"loginAuthUpdated": "认证已更新",
|
||||
"loginComplete": "登录完成",
|
||||
"loginFailed": "登录失败",
|
||||
"loginTitle": "登录",
|
||||
"logoutFailed": "注销失败",
|
||||
"logoutTitle": "注销",
|
||||
"logoutTitle": "退出",
|
||||
"notLoggedIn": "未登录",
|
||||
"openLogin": "打开登录",
|
||||
"providerActionRequired": "需要提供者采取的行动",
|
||||
"resets": "重新发送 {{time}}",
|
||||
"runtimeLoginTitle": "{{runtime}} 苏维埃社会主义共和国 登录"
|
||||
"providerActionRequired": "需要提供商采取行动",
|
||||
"resets": "复位 {{time}}",
|
||||
"runtimeLoginTitle": "{{runtime}} 登录"
|
||||
},
|
||||
"loading": {
|
||||
"aiProviders": "正在检查 AI 提供者...",
|
||||
"claudeCli": "正在检查克劳德CLI..."
|
||||
"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 路由 。"
|
||||
"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}} 失败启动健康检查.",
|
||||
"configuredHealthCheckFailed": "配置的 {{runtime}} 启动运行状况检查失败。",
|
||||
"configuredNotFound": "未找到配置的 {{runtime}}。",
|
||||
"foundButFailed": "发现 {{runtime}} 失败启动",
|
||||
"healthCheckFailedDescription": "该应用程序发现了配置的{{runtime}},但其启动健康检查失败. 修理或重新安装,然后重试。",
|
||||
"foundButFailed": "找到 {{runtime}} 但启动失败",
|
||||
"healthCheckFailedDescription": "应用找到配置的 {{runtime}},但其启动健康检查失败。修复或重新安装,然后重试。",
|
||||
"install": "安装 {{runtime}}",
|
||||
"installRequiredDescription": "{{runtime}}是团队提供和会话管理所需的. 安装开始 。",
|
||||
"isRequired": "需要{{runtime}}",
|
||||
"reinstall": "莱因斯托尔 {{runtime}}"
|
||||
"installRequiredDescription": "团队配置和会话管理需要 {{runtime}}。安装它即可开始。",
|
||||
"isRequired": "{{runtime}} 为必填项",
|
||||
"reinstall": "重新安装 {{runtime}}"
|
||||
},
|
||||
"runtimeInstall": {
|
||||
"checking": "检查中",
|
||||
"codexTitle": "在应用数据中安装代码CLI",
|
||||
"downloading": "下载",
|
||||
"downloadingPercent": "下载 {{percent}}%",
|
||||
"checking": "检查",
|
||||
"codexTitle": "将 Codex CLI 安装到应用数据中",
|
||||
"downloading": "正在下载",
|
||||
"downloadingPercent": "正在下载 {{percent}}%",
|
||||
"install": "安装",
|
||||
"installing": "安装",
|
||||
"openCodeTitle": "安装 OpenCode 运行时间到应用数据",
|
||||
"installing": "安装中",
|
||||
"openCodeTitle": "将 OpenCode 运行时安装到应用数据中",
|
||||
"retryInstall": "重试安装"
|
||||
},
|
||||
"troubleshoot": {
|
||||
"again": "再来一次",
|
||||
"authStatusCommand": "您所配置的 CLI 认证状态命令",
|
||||
"checkLoggedIn": "- 检查它是否显示\"Logged in\"",
|
||||
"click": "单击",
|
||||
"loginCommand": "运行时间登录命令",
|
||||
"logoutCommand": "运行时间登录命令",
|
||||
"openTerminal": "打开终端并运行:",
|
||||
"reloginPrefix": "如果上面写着登录但应用程序看不到的话,请试试:",
|
||||
"sameRuntime": "确保您的终端中的 CLI 与应用程序使用的运行时间相同",
|
||||
"again": "再次",
|
||||
"authStatusCommand": "您配置的 CLI 认证状态命令",
|
||||
"checkLoggedIn": "- 检查是否显示“已登录”",
|
||||
"click": "点击",
|
||||
"loginCommand": "运行时登录命令",
|
||||
"logoutCommand": "运行时注销命令",
|
||||
"openTerminal": "打开终端并运行:",
|
||||
"reloginPrefix": "如果显示已登录,但应用看不到它,请尝试:",
|
||||
"sameRuntime": "确保终端中的 CLI 与应用使用的运行时相同",
|
||||
"statusCacheHint": "- 有时状态会缓存几秒钟",
|
||||
"then": "接下来"
|
||||
"then": "然后"
|
||||
},
|
||||
"warnings": {
|
||||
"multipleApiKeysMissing": "一个或多个提供者被设定为API密钥模式,但没有配置API密钥. 打开管理供应商以添加密钥或切换连接模式.",
|
||||
"multipleApiKeysNeedAttention": "一个或多个提供者被设定为API密钥模式,需要关注. 打开管理供应商来审查保存的密钥或切换连接模式 。",
|
||||
"notAuthenticated": "{{runtime}}已经安装,但您没有认证 。 团队提供和AI功能需要登录.",
|
||||
"singleApiKeyMissing": "{{provider}}被设定为API密钥模式,但没有配置API密钥. 打开管理供应商以添加密钥或切换连接模式 。",
|
||||
"singleApiKeyNeedsAttention": "{{provider}}设定为API密钥模式,但没有连接. 打开管理提供者来审查保存的密钥或切换连接模式 。"
|
||||
"multipleApiKeysMissing": "一个或多个提供商设置为 API 密钥模式,但未配置 API 密钥。打开管理提供商以添加密钥或切换连接模式。",
|
||||
"multipleApiKeysNeedAttention": "一个或多个提供商已设置为 API 密钥模式,需要引起注意。打开管理提供商以查看保存的密钥或切换连接模式。",
|
||||
"notAuthenticated": "{{runtime}} 已安装,但您未经过认证。团队配置和 AI 功能需要登录。",
|
||||
"singleApiKeyMissing": "{{provider}} 设置为 API 密钥模式,但未配置 API 密钥。打开管理提供商以添加密钥或切换连接模式。",
|
||||
"singleApiKeyNeedsAttention": "{{provider}} 设置为 API 密钥模式,但未连接。打开管理提供商以查看保存的密钥或切换连接模式。"
|
||||
}
|
||||
},
|
||||
"recentProjects": {
|
||||
"selectFolderTitle": "选择工程文件夹",
|
||||
"selectFolderTitle": "选择项目文件夹",
|
||||
"selectFolder": "选择文件夹",
|
||||
"failedToLoad": "装入工程失败",
|
||||
"failedToLoad": "无法加载项目",
|
||||
"retry": "重试",
|
||||
"noProjects": "未找到工程",
|
||||
"noMatches": "没有“ {{query}}” 的匹配",
|
||||
"noProjects": "未找到项目",
|
||||
"noMatches": "没有匹配“{{query}}”",
|
||||
"noRecentProjects": "未找到最近的项目",
|
||||
"emptyDescription": "最近Claude和Codex的活动会在这里出现.",
|
||||
"loadMore": "装入更多",
|
||||
"emptyDescription": "最近的 Claude 和 Codex 活动将出现在这里。",
|
||||
"loadMore": "加载更多",
|
||||
"card": {
|
||||
"deleted": "删除",
|
||||
"projectFolderMissing": "项目文件夹已不存在",
|
||||
"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}}已执行"
|
||||
"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": "搜索项目..."
|
||||
"searchPlaceholder": "搜索项目…"
|
||||
},
|
||||
"actions": {
|
||||
"selectTeam": "选择团队",
|
||||
|
|
@ -182,16 +182,16 @@
|
|||
"clearSearch": "清除搜索"
|
||||
},
|
||||
"windowsAdmin": {
|
||||
"title": "建议使用 Windows 管理员模式",
|
||||
"description": "OpenCode 运行时间检查可以在代理 Teams AI 没有提升时超时. 在启动 OpenCode 团队前以管理员身份重新启动应用程序 。"
|
||||
"title": "推荐使用 Windows 管理员模式",
|
||||
"description": "当 Agent Teams AI 未提升时,OpenCode 运行时检查可能会超时。在启动 OpenCode 团队之前,使用以管理员身份运行重新启动应用。"
|
||||
},
|
||||
"webPreview": {
|
||||
"title": "打开桌面应用程序以完整功能",
|
||||
"description": "浏览器版本仍在开发中. 这里的项目行动、整合和现场状态更新可能有限。 使用桌面应用程序可靠地访问所有特性 。"
|
||||
"title": "打开桌面应用以获取完整功能",
|
||||
"description": "浏览器版本仍在开发中。项目操作、集成和实时状态更新可能会受到限制。使用桌面应用可靠地访问所有功能。"
|
||||
},
|
||||
"updateBanner": {
|
||||
"newVersionAvailable": "新版本可用",
|
||||
"restartNow": "重新开始",
|
||||
"viewDetails": "查看细节"
|
||||
"restartNow": "立即重新启动",
|
||||
"viewDetails": "查看详情"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
{
|
||||
"fallback": "出了点问题"
|
||||
"fallback": "出了点问题。"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,62 +2,62 @@
|
|||
"store": {
|
||||
"actions": {
|
||||
"addCustom": "添加自定义",
|
||||
"openDashboard": "打开挂板",
|
||||
"openDashboard": "打开控制台",
|
||||
"refreshCatalog": "刷新目录"
|
||||
},
|
||||
"capabilities": {
|
||||
"mcp": "磁共振:{{status}}",
|
||||
"plugins": "插件: {{status}}",
|
||||
"skills": "技能:{{status}}"
|
||||
"mcp": "MCP:{{status}}",
|
||||
"plugins": "插件:{{status}}",
|
||||
"skills": "技能:{{status}}"
|
||||
},
|
||||
"desktopOnly": "只有桌面应用程序可用 。",
|
||||
"desktopOnly": "仅在桌面应用中可用。",
|
||||
"provider": {
|
||||
"checkingStatus": "正在检查提供者状态...",
|
||||
"checkingStatus": "正在检查提供商状态…",
|
||||
"connected": "已连接",
|
||||
"loading": "正在装入...",
|
||||
"loading": "加载中…",
|
||||
"needsSetup": "需要设置",
|
||||
"readyToConfigure": "准备配置",
|
||||
"unsupported": "不支持"
|
||||
},
|
||||
"runtime": {
|
||||
"checkingAvailabilityDescription": "扩展需要配置的运行时间来管理插件,MCP服务器,技能和供应商连接.",
|
||||
"checkingAvailabilityTitle": "检查扩展运行时间可用性",
|
||||
"failedToStartDescription": "在运行时间通过启动健康检查之前,延长时间将被禁用。 打开Dash板修理或重新安装.",
|
||||
"failedToStartTitle": "已找到配置的运行时间, 但启动失败",
|
||||
"multimodelCapabilitiesDescription": "提供方的支持可因各节而异. 插件仅在运行时间明确宣布支持时显示 。",
|
||||
"multimodelCapabilitiesTitle": "多模式运行时间能力",
|
||||
"needsSignInDescription": "{{runtime}}被发现了{{version}},但插件安装被禁用,直到从Dashboard上签名.",
|
||||
"checkingAvailabilityDescription": "扩展需要配置的运行时来管理插件、MCP 服务器、技能和提供商连接。",
|
||||
"checkingAvailabilityTitle": "检查扩展运行时可用性",
|
||||
"failedToStartDescription": "在运行时通过其启动运行状况检查之前,扩展将被禁用。打开控制台进行修复或重新安装。",
|
||||
"failedToStartTitle": "已找到配置的运行时但启动失败",
|
||||
"multimodelCapabilitiesDescription": "不同功能的提供商支持可能不同。仅当运行时明确声明支持时才会显示插件。",
|
||||
"multimodelCapabilitiesTitle": "多模型运行时功能",
|
||||
"needsSignInDescription": "找到了 {{runtime}}{{version}},但在您从控制台登录之前,插件安装将被禁用。",
|
||||
"needsSignInTitle": "{{runtime}} 需要登录",
|
||||
"notAvailableDescription": "扩展功能在运行时间安装之前被禁用. 打开Dash板安装并重试.",
|
||||
"notAvailableTitle": "配置的运行时间不可用",
|
||||
"readyDescription": "插件可以从此页{{versionSuffix}}安装.",
|
||||
"readyTitle": "{{runtime}}准备好了",
|
||||
"requiredForMutations": "安装或卸载扩展需要配置的运行时间. 从Dashboard上安装或修复."
|
||||
"notAvailableDescription": "在安装运行时之前,扩展将被禁用。打开控制台进行安装并重试。",
|
||||
"notAvailableTitle": "配置的运行时不可用",
|
||||
"readyDescription": "可以从此页面安装插件 {{versionSuffix}}。",
|
||||
"readyTitle": "{{runtime}} 已准备好",
|
||||
"requiredForMutations": "安装或卸载扩展需要配置的运行时。从控制台安装或修复它。"
|
||||
},
|
||||
"sessionsRestartWarning": "运行会话在重新启动前不会接收扩展更改 。",
|
||||
"sessionsRestartWarning": "正在运行的会话在重新启动之前不会获取扩展更改。",
|
||||
"tabs": {
|
||||
"apiKeys": {
|
||||
"description": "在线服务的秘密密钥 。 在此添加它们, 这样插件, 服务器和集成可以连接和工作 。",
|
||||
"label": "API 苏维埃社会主义共和国 键"
|
||||
"description": "在线服务的密钥。将它们添加到此处,以便插件、服务器和集成可以连接和工作。",
|
||||
"label": "API 密钥"
|
||||
},
|
||||
"mcpServers": {
|
||||
"description": "连接到外部工具和应用程序 。 他们让运行时间读取数据或者做超过这个应用程序的行动.",
|
||||
"label": "MCP 苏维埃社会主义共和国 服务器"
|
||||
"description": "与外部工具和应用的连接。它们让运行时读取数据或执行此应用之外的操作。",
|
||||
"label": "MCP 服务器"
|
||||
},
|
||||
"plugins": {
|
||||
"description": "跑步时间加一点 在多模型模式中,当支持时,它们目前适用于Anthropic会话。 更广泛的提供者支助正在发展之中。",
|
||||
"description": "运行时的小附加组件。在多模型模式下,它们当前适用于受支持的 Anthropic 会话。更广泛的提供商支持正在开发中。",
|
||||
"label": "插件"
|
||||
},
|
||||
"skills": {
|
||||
"description": "为普通工作准备的指令。 它们有助于运行时间更一致地处理可重复的任务.",
|
||||
"description": "常见工作的现成说明。它们帮助运行时更一致地处理可重复的任务。",
|
||||
"label": "技能"
|
||||
}
|
||||
},
|
||||
"title": "扩展"
|
||||
},
|
||||
"pluginsPanel": {
|
||||
"activeFilters": "{{count}}活动",
|
||||
"browseByFit": "以适合方式浏览",
|
||||
"activeFilters": "{{count}} 活跃",
|
||||
"browseByFit": "按适合浏览",
|
||||
"capabilities": "能力",
|
||||
"categories": "类别",
|
||||
"clearAllFilters": "清除所有过滤器",
|
||||
|
|
@ -80,93 +80,93 @@
|
|||
"plugins_other": "{{count}} 插件"
|
||||
},
|
||||
"empty": {
|
||||
"description": "稍后检查新插件",
|
||||
"filteredDescription": "尝试调整搜索或过滤标准",
|
||||
"filteredTitle": "没有匹配过滤器的插件",
|
||||
"description": "稍后回来查看新插件",
|
||||
"filteredDescription": "尝试调整您的搜索或过滤条件",
|
||||
"filteredTitle": "没有插件符合您的过滤器",
|
||||
"title": "没有可用的插件"
|
||||
},
|
||||
"filterDescription": "按类别、能力或安装状态缩小目录。",
|
||||
"installedOnly": "仅安装",
|
||||
"providerSupportNotice": "目前只为Anthropic(克劳德)会议保证插件支持。 我们正在支持插件 跨所有代理。",
|
||||
"resultsUpdateInstantly": "精炼过滤器时立即更新结果。",
|
||||
"searchPlaceholder": "搜索插件...",
|
||||
"selectedCount": "{{count}}选中",
|
||||
"showing": "显示{{shown}}页:1{{total}}插件",
|
||||
"filterDescription": "按类别、功能或安装状态缩小目录范围。",
|
||||
"installedOnly": "仅已安装",
|
||||
"providerSupportNotice": "目前仅保证 Anthropic (Claude) 会话的插件支持。我们正在努力支持所有智能体的插件。",
|
||||
"resultsUpdateInstantly": "当您优化过滤器时,结果会立即更新。",
|
||||
"searchPlaceholder": "搜索插件…",
|
||||
"selectedCount": "已选择 {{count}}",
|
||||
"showing": "正在显示 {{shown}} / {{total}} 个插件",
|
||||
"sort": {
|
||||
"category": "类别",
|
||||
"nameAsc": "名称 A-Z",
|
||||
"nameDesc": "名字为Z - A级",
|
||||
"popular": "大众"
|
||||
"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}}选中"
|
||||
"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": "安装中..."
|
||||
"installing": "正在安装…"
|
||||
},
|
||||
"description": "在没有目录的情况下手动添加服务器 。",
|
||||
"description": "手动添加服务器,无需目录。",
|
||||
"errors": {
|
||||
"installFailed": "安装失败",
|
||||
"invalidServerName": "无效的服务器名称 。 使用字母数字字符,破折号,下划线,点.",
|
||||
"npmPackageRequired": "需要 npm 软件包名称",
|
||||
"serverNameRequired": "需要服务器名称",
|
||||
"serverUrlRequired": "需要服务器 URL"
|
||||
"invalidServerName": "服务器名称无效。使用字母数字字符、破折号、下划线、点。",
|
||||
"npmPackageRequired": "npm 包名是必需的",
|
||||
"serverNameRequired": "服务器名称为必填项",
|
||||
"serverUrlRequired": "服务器 URL 为必填项"
|
||||
},
|
||||
"fields": {
|
||||
"environmentVariables": "环境变量",
|
||||
"headers": "页眉",
|
||||
"npmPackage": "npm 软件包",
|
||||
"headers": "标头",
|
||||
"npmPackage": "npm 包",
|
||||
"scope": "范围",
|
||||
"serverName": "服务器名称",
|
||||
"serverUrl": "服务器 URL",
|
||||
"serverUrl": "服务器地址",
|
||||
"transport": "运输",
|
||||
"transportType": "运输类型",
|
||||
"versionOptional": "版本( 可选)"
|
||||
"versionOptional": "版本(可选)"
|
||||
},
|
||||
"title": "添加自定义 MCP 服务器",
|
||||
"transport": {
|
||||
"httpSse": "ZXCVKEN0ZXCV / ZXCVTKEN1ZXCV",
|
||||
"stdio": "Stdio (npm) (英语)."
|
||||
"httpSse": "HTTP/SSE",
|
||||
"stdio": "Stdio (npm)"
|
||||
},
|
||||
"placeholders": {
|
||||
"headerName": "页眉 - Name",
|
||||
"envVarName": "ENV_VAR_NAME 苏维埃社会主义共和国",
|
||||
"headerName": "标头名称",
|
||||
"envVarName": "ENV_VAR_NAME",
|
||||
"serverName": "我的服务器",
|
||||
"latest": "最新消息",
|
||||
"latest": "最新的",
|
||||
"value": "价值",
|
||||
"serverUrl": "https://api.example.com/mcp 苏维埃社会主义共和国"
|
||||
"serverUrl": "https://api.example.com/mcp"
|
||||
}
|
||||
},
|
||||
"mcpDetail": {
|
||||
"auth": {
|
||||
"remoteMayNeedHeaders": "远程 MCP服务器可能仍然需要自定义头或API密钥,即使登记册没有描述它们. 如果安装后连接失败, 请检查提供者 docs 。",
|
||||
"required": "此服务器需要认证"
|
||||
"remoteMayNeedHeaders": "即使注册表没有描述,远程 MCP 服务器可能仍然需要自定义标头或 API 密钥。如果安装后连接失败,请检查提供商文档。",
|
||||
"required": "该服务器需要认证"
|
||||
},
|
||||
"diagnostics": {
|
||||
"launchTarget": "发射目标"
|
||||
"launchTarget": "发送目标"
|
||||
},
|
||||
"form": {
|
||||
"autoFilled": "自动填充",
|
||||
"environmentVariables": "环境变量",
|
||||
"headers": "页眉",
|
||||
"headers": "标头",
|
||||
"scope": "范围",
|
||||
"serverName": "服务器名称"
|
||||
},
|
||||
"install": {
|
||||
"httpTransport": "HTTP: (英语).{{transport}}",
|
||||
"manualSetupDescription": "此服务器需要手动设置 。 检查仓库以获取安装指令 。",
|
||||
"httpTransport": "HTTP:{{transport}}",
|
||||
"manualSetupDescription": "该服务器需要手动设置。检查仓库以获取安装说明。",
|
||||
"manualSetupRequired": "需要手动设置",
|
||||
"npmPackage": "注:{{package}}",
|
||||
"npmPackage": "npm: {{package}}",
|
||||
"manage": "管理安装",
|
||||
"install": "安装服务器"
|
||||
},
|
||||
|
|
@ -177,25 +177,25 @@
|
|||
},
|
||||
"metadata": {
|
||||
"author": "作者",
|
||||
"githubStars": "GitHub 星号",
|
||||
"githubStars": "GitHub 之星",
|
||||
"hosting": "托管",
|
||||
"installType": "安装类型",
|
||||
"license": "许可证",
|
||||
"published": "已出版",
|
||||
"license": "执照",
|
||||
"published": "已发表",
|
||||
"source": "来源",
|
||||
"updated": "更新",
|
||||
"updated": "已更新",
|
||||
"version": "版本"
|
||||
},
|
||||
"scope": {
|
||||
"local": "当地",
|
||||
"local": "本地",
|
||||
"project": "项目"
|
||||
},
|
||||
"tools": {
|
||||
"title": "工具 ({{count}})",
|
||||
"title_few": "工具 ({{count}})",
|
||||
"title_many": "工具 ({{count}})",
|
||||
"title_one": "工具 ({{count}})",
|
||||
"title_other": "工具 ({{count}})"
|
||||
"title": "工具({{count}})",
|
||||
"title_few": "工具({{count}})",
|
||||
"title_many": "工具({{count}})",
|
||||
"title_one": "工具({{count}})",
|
||||
"title_other": "工具({{count}})"
|
||||
},
|
||||
"placeholders": {
|
||||
"serverName": "我的服务器"
|
||||
|
|
@ -205,86 +205,86 @@
|
|||
"actions": {
|
||||
"cancel": "取消",
|
||||
"createSkill": "创建技能",
|
||||
"preparing": "准备...",
|
||||
"reviewAndCreate": "审查和创建",
|
||||
"reviewAndSave": "审查并保存",
|
||||
"preparing": "正在准备…",
|
||||
"reviewAndCreate": "审核和创建",
|
||||
"reviewAndSave": "查看并保存",
|
||||
"saveSkill": "保存技能"
|
||||
},
|
||||
"advanced": {
|
||||
"customDescription": "此技能使用自定义的标记下格式, 因此在此直接编辑 。",
|
||||
"customTitle": "2. SKILL.md编辑器.",
|
||||
"description": "大多数人可以跳过这个。 只有在您想要直接控制原始标记下文件时才打开 。",
|
||||
"customDescription": "该技能使用自定义的 markdown 格式,所以直接在这里编辑。",
|
||||
"customTitle": "2.SKILL.md 编辑器",
|
||||
"description": "大多数人可以跳过这一点。仅当您想直接控制原始 Markdown 文件时才打开它。",
|
||||
"hide": "隐藏高级编辑器",
|
||||
"resetFromStructuredFields": "从结构化字段重置",
|
||||
"show": "显示高级编辑器",
|
||||
"title": "4.高级 SKILL.md 编辑器"
|
||||
},
|
||||
"basics": {
|
||||
"description": "给这种技能一个明确的名字,选择谁可以使用它,并决定它应该住在哪里.",
|
||||
"title": "1. 基本情况"
|
||||
"description": "给这个技能一个清晰的名称,选择谁可以使用它,并决定它应该存在的位置。",
|
||||
"title": "1. 基础知识"
|
||||
},
|
||||
"description": {
|
||||
"create": "用简单的语言描述工作流程,审查将要创建的文件,然后保存它。",
|
||||
"edit": "更新此技能, 审查由此产生的文件更改, 然后保存它 。"
|
||||
"create": "用通俗易懂的语言描述工作流程,查看将创建的文件,然后保存。",
|
||||
"edit": "更新此技能,查看生成的文件更改,然后保存。"
|
||||
},
|
||||
"extraFiles": {
|
||||
"addedFiles": "添加的文件:",
|
||||
"addedFiles": "添加的文件:",
|
||||
"assets": "资产",
|
||||
"assetsDescription": "添加截图或捆绑的介质,前提是它们有助于解释工作流程.",
|
||||
"description": "只有当支持文件、脚本或资产的技能确实需要时,才添加它们。",
|
||||
"lockedForEdits": "根和文件夹已锁定用于编辑",
|
||||
"optionalDescription": "添加将包含在审查中的启动文件,并与 `SKILL.md` 一起编写.",
|
||||
"assetsDescription": "仅当屏幕截图或捆绑媒体有助于解释工作流程时才添加它们。",
|
||||
"description": "仅当该技能确实需要时才添加支持文档、脚本或资产。",
|
||||
"lockedForEdits": "根目录和文件夹已锁定以进行编辑",
|
||||
"optionalDescription": "添加将包含在评论中并与“SKILL.md”一起编写的入门文件。",
|
||||
"optionalTitle": "可选文件",
|
||||
"references": "参考资料",
|
||||
"referencesDescription": "添加支持文件、 链接或运行时间可以查看的例子 。",
|
||||
"references": "参考",
|
||||
"referencesDescription": "添加运行时可以查看的支持文档、链接或示例。",
|
||||
"scripts": "脚本",
|
||||
"scriptsDescription": "添加帮助命令或设置注释. 在分享这种技能之前仔细审查。",
|
||||
"scriptsDescription": "添加帮助命令或设置注释。在分享此技能之前请仔细查看。",
|
||||
"title": "3. 额外文件"
|
||||
},
|
||||
"fields": {
|
||||
"compatibility": "兼容性",
|
||||
"description": "说明",
|
||||
"description": "描述",
|
||||
"folderName": "文件夹名称",
|
||||
"folderNameHint": "我们从技能名称中自动提出这个建议,所以审查立即进行。",
|
||||
"invocation": "应如何使用",
|
||||
"license": "许可证",
|
||||
"folderNameHint": "我们会根据技能名称自动建议此操作,以便立即进行审核。",
|
||||
"invocation": "应该如何使用",
|
||||
"license": "执照",
|
||||
"name": "技能名称",
|
||||
"notes": "额外纸条或护栏",
|
||||
"root": "在哪里储存",
|
||||
"scope": "谁能用呢?",
|
||||
"steps": "接下来的主要步骤",
|
||||
"whenToUse": "什么时候才能找到这个"
|
||||
"notes": "额外注释或护栏",
|
||||
"root": "存放在哪里",
|
||||
"scope": "谁可以使用它",
|
||||
"steps": "需要遵循的主要步骤",
|
||||
"whenToUse": "何时达到这个目标"
|
||||
},
|
||||
"instructions": {
|
||||
"description": "这些章节为您生成技能文件, 因此您不需要编辑降标, 除非您想要 。",
|
||||
"locked": "结构化字段被锁定,因为您切换到下面的手动`SKILL.md`编辑.",
|
||||
"title": "2. 指示"
|
||||
"description": "这些部分会为您生成技能文件,因此除非您愿意,否则不需要编辑 Markdown。",
|
||||
"locked": "结构化字段被锁定,因为您切换到下面的手动“SKILL.md”编辑。",
|
||||
"title": "2. 使用说明"
|
||||
},
|
||||
"invocation": {
|
||||
"auto": "可自动使用",
|
||||
"manualOnly": "只有在你要求的时候"
|
||||
"auto": "可以自动使用",
|
||||
"manualOnly": "只有当你要求的时候"
|
||||
},
|
||||
"placeholders": {
|
||||
"description": "这种技巧能帮助什么",
|
||||
"name": "写简洁的技巧名称",
|
||||
"notes": "示例:列出缺失的测试,回归和风险假设.",
|
||||
"steps": "1. 检查有关档案。\n2. 先解释主要风险。\n3. 提出最安全的解决办法。",
|
||||
"whenToUse": "示例: 当任务为代码检讨或错误分类请求时使用此功能 。",
|
||||
"license": "MIT 苏维埃社会主义共和国",
|
||||
"compatibility": "圆形码,光标"
|
||||
"description": "这项技能有什么帮助",
|
||||
"name": "写出简洁的技能名称",
|
||||
"notes": "示例:指出缺失的测试、回归和风险假设。",
|
||||
"steps": "1.检查相关文件。 2、先说明主要风险。 3.提出最安全的修复建议。",
|
||||
"whenToUse": "示例:当任务是代码审核或错误分类请求时使用此选项。",
|
||||
"license": "麻省理工学院",
|
||||
"compatibility": "Claude Code,光标"
|
||||
},
|
||||
"review": {
|
||||
"creating": "创造技能",
|
||||
"hint": "首先审查文件更改,然后在下一步确认保存 。",
|
||||
"creating": "创建技能",
|
||||
"hint": "首先查看文件更改,然后在下一步中确认保存。",
|
||||
"saving": "保存此技能"
|
||||
},
|
||||
"root": {
|
||||
"codexOnly": "- 只有代码",
|
||||
"codexOnly": "- 仅 Codex",
|
||||
"shared": "- 共享"
|
||||
},
|
||||
"scope": {
|
||||
"project": "项目:{{project}}",
|
||||
"projectUnavailable": "无法执行的项目",
|
||||
"project": "项目:{{project}}",
|
||||
"projectUnavailable": "项目不可用",
|
||||
"user": "用户"
|
||||
},
|
||||
"title": {
|
||||
|
|
@ -297,10 +297,10 @@
|
|||
"cancel": "取消",
|
||||
"delete": "删除",
|
||||
"deleteSkill": "删除技能",
|
||||
"deleting": "正在删除...",
|
||||
"deleting": "正在删除…",
|
||||
"editSkill": "编辑技能",
|
||||
"openFolder": "打开文件夹",
|
||||
"openSkillFile": "打开 SKILL.md",
|
||||
"openSkillFile": "打开技能.md",
|
||||
"retry": "重试"
|
||||
},
|
||||
"badges": {
|
||||
|
|
@ -308,75 +308,75 @@
|
|||
"autoUse": "自动使用",
|
||||
"hasScripts": "有脚本",
|
||||
"manualUse": "手动使用",
|
||||
"references": "参考资料",
|
||||
"storedIn": "存放于{{root}}"
|
||||
"references": "参考",
|
||||
"storedIn": "存储在 {{root}} 中"
|
||||
},
|
||||
"deleteDialog": {
|
||||
"description": "删除此技能并移动到回收站?",
|
||||
"descriptionWithName": "删除\"{{name}}\"并将其移动到垃圾堆? 如果需要, 您可以稍后从回收站恢复它 。",
|
||||
"title": "删除技能?"
|
||||
"description": "删除该技能并将其移至垃圾箱?",
|
||||
"descriptionWithName": "删除“{{name}}”并将其移至垃圾箱?如果需要,您可以稍后从“垃圾箱”中恢复它。",
|
||||
"title": "删除技能?"
|
||||
},
|
||||
"descriptionFallback": "检查发现了技能元数据和原始指令.",
|
||||
"descriptionFallback": "检查发现的技能元数据和原始指令。",
|
||||
"errors": {
|
||||
"deleteFailed": "删除技能失败",
|
||||
"loadFailed": "无法装入此技能 。"
|
||||
"loadFailed": "无法加载该技能。"
|
||||
},
|
||||
"files": {
|
||||
"advancedDetails": "高级文件细节",
|
||||
"advancedDetails": "高级文件详细信息",
|
||||
"assets": "资产",
|
||||
"references": "参考资料",
|
||||
"references": "参考",
|
||||
"scripts": "脚本",
|
||||
"storedAt": "存放于"
|
||||
"storedAt": "存储于"
|
||||
},
|
||||
"includes": {
|
||||
"assets": "资产",
|
||||
"instructionsOnly": "只是技巧指导",
|
||||
"references": "参考文献",
|
||||
"instructionsOnly": "只是技能说明",
|
||||
"references": "参考",
|
||||
"scripts": "脚本"
|
||||
},
|
||||
"invocation": {
|
||||
"auto": "匹配任务时自动运行。",
|
||||
"manualOnly": "只有在你明确要求的时候才能跑"
|
||||
"manualOnly": "仅当您明确要求时才运行。"
|
||||
},
|
||||
"issues": {
|
||||
"bundledScripts": "此技能包括捆绑的脚本",
|
||||
"reviewCarefully": "在使用之前仔细审查一下这个技能"
|
||||
"bundledScripts": "该技能包括捆绑脚本",
|
||||
"reviewCarefully": "使用此技能之前请仔细查看"
|
||||
},
|
||||
"loading": "正在装入技能细节...",
|
||||
"loading": "正在加载技能详细信息…",
|
||||
"scope": {
|
||||
"personal": "你的个人能力",
|
||||
"projectOnly": "只有这个项目"
|
||||
"personal": "你的个人技能",
|
||||
"projectOnly": "仅此项目"
|
||||
},
|
||||
"summary": {
|
||||
"howUsed": "如何使用",
|
||||
"included": "怎么会这样",
|
||||
"whoCanUse": "谁能用呢?"
|
||||
"included": "附带什么",
|
||||
"whoCanUse": "谁可以使用它"
|
||||
},
|
||||
"titleFallback": "技能细节"
|
||||
"titleFallback": "技能详情"
|
||||
},
|
||||
"skillsPanel": {
|
||||
"actions": {
|
||||
"createSkill": "创建技能",
|
||||
"import": "导入"
|
||||
"import": "进口"
|
||||
},
|
||||
"badges": {
|
||||
"assets": "资产",
|
||||
"hasScripts": "有脚本",
|
||||
"needsAttention": "需要关注",
|
||||
"references": "参考资料",
|
||||
"storedIn": "存放于{{root}}"
|
||||
"needsAttention": "需要注意",
|
||||
"references": "参考",
|
||||
"storedIn": "存储在 {{root}} 中"
|
||||
},
|
||||
"configuredRuntime": "已配置的运行时间",
|
||||
"configuredRuntime": "配置的运行时",
|
||||
"counts": {
|
||||
"codexOnly": "{{count}} 苏维埃社会主义共和国 仅编码",
|
||||
"codexOnly": "{{count}} 仅限 Codex",
|
||||
"personal": "{{count}} 个人",
|
||||
"project": "{{count}} 项目",
|
||||
"shared": "共享 {{count}}",
|
||||
"total": "{{count}}共计",
|
||||
"codexOnly_few": "{{count}} 苏维埃社会主义共和国 仅编码",
|
||||
"codexOnly_many": "{{count}} 苏维埃社会主义共和国 仅编码",
|
||||
"codexOnly_one": "{{count}} 苏维埃社会主义共和国 仅编码",
|
||||
"codexOnly_other": "{{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}} 个人",
|
||||
|
|
@ -385,269 +385,269 @@
|
|||
"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}}共计"
|
||||
"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": "尝试不同的搜索术语或切换过滤器 。",
|
||||
"noMatches": "没有符合您搜索条件的技能",
|
||||
"noMatchesDescription": "尝试不同的搜索词或切换过滤器。",
|
||||
"noSkills": "还没有技能",
|
||||
"noSkillsDescription": "创建您的第一个教授可重复工作流程的技能, 或者导入您已经使用的工作流程 。"
|
||||
"noSkillsDescription": "创建您的第一项技能来教授可重复的工作流程,或导入您已经使用的技能。"
|
||||
},
|
||||
"filters": {
|
||||
"all": "所有技能",
|
||||
"codexOnly": "仅编码",
|
||||
"codexOnly": "仅 Codex",
|
||||
"hasScripts": "有脚本",
|
||||
"needsAttention": "需要关注",
|
||||
"personal": "个人",
|
||||
"needsAttention": "需要注意",
|
||||
"personal": "个人的",
|
||||
"project": "项目",
|
||||
"shared": "共享"
|
||||
},
|
||||
"hero": {
|
||||
"codexAvailable": "使用 `.codex` 当一个技能应该只保留 Codex 时.",
|
||||
"codexUnavailable": "现有的`.codex`技能在这里仍然可以编辑,但新的 Codex 唯一技能需要启用 Codex 运行时间.",
|
||||
"description": "技能是可重复使用的指示,有助于运行时间更一致地处理同样的任务.",
|
||||
"guidance": "将个人技能用于所有你想要的习惯。 将工程技能用于仅在一个代码库内讲得通的工作流程.",
|
||||
"personalContext": "你现在只看到个人技能",
|
||||
"projectContext": "您看到的是{{project}}的技能 加上您的个人技能。",
|
||||
"codexAvailable": "当技能应仅适用于 Codex 时,请使用“.codex”。",
|
||||
"codexUnavailable": "现有的“.codex”技能在此处保持可编辑状态,但新的仅限 Codex 的技能需要启用 Codex 运行时。",
|
||||
"description": "技能是可重用的指令,可帮助运行时更一致地处理同类任务。",
|
||||
"guidance": "使用个人技能来养成你想要的随处习惯。将项目技能用于仅在一个代码库中有意义的工作流程。",
|
||||
"personalContext": "您现在只能看到您的个人技能。",
|
||||
"projectContext": "您正在看到 {{project}} 的技能以及您的个人技能。",
|
||||
"title": "教授可重复的工作"
|
||||
},
|
||||
"invocation": {
|
||||
"auto": "适合时自动运行",
|
||||
"manualOnly": "只当您明确要求时运行"
|
||||
"manualOnly": "仅在您明确要求时运行"
|
||||
},
|
||||
"loading": {
|
||||
"loading": "正在装入技能...",
|
||||
"refreshing": "刷新技能中..."
|
||||
"loading": "技能加载中…",
|
||||
"refreshing": "技能刷新…"
|
||||
},
|
||||
"runtimeAudience": "`.claude`,`.cursor`和`.agents`的共享技能可以提供给{{audience}}. 存储在`.codex`中的技能在 Codex 支持可用时只保留 Codex.",
|
||||
"runtimeAudience": "{{audience}} 可以使用“.claude”、“.cursor”和“.agents”中的共享技能。当 Codex 支持可用时,存储在“.codex”中的技能仅适用于 Codex。",
|
||||
"scope": {
|
||||
"project": "这个项目",
|
||||
"user": "个人"
|
||||
"project": "此项目",
|
||||
"user": "个人的"
|
||||
},
|
||||
"searchPlaceholder": "以技能名称或它能帮助什么搜索...",
|
||||
"searchPlaceholder": "按技能名称或它的帮助进行搜索…",
|
||||
"sections": {
|
||||
"personal": {
|
||||
"description": "随处可见你想要的卫生用品和指示",
|
||||
"description": "您想要的习惯和说明随处可见。",
|
||||
"title": "个人技能"
|
||||
},
|
||||
"project": {
|
||||
"description": "只有这个密码库才有意义的工作流程。",
|
||||
"description": "仅对此代码库有意义的工作流程。",
|
||||
"title": "项目技能"
|
||||
}
|
||||
},
|
||||
"sort": {
|
||||
"label": "排序技能",
|
||||
"name": "名称",
|
||||
"recent": "近期"
|
||||
"label": "排序技巧",
|
||||
"name": "姓名",
|
||||
"recent": "最近的"
|
||||
},
|
||||
"status": {
|
||||
"hasScripts": "包括脚本, 所以仔细审查",
|
||||
"needsAttention": "依赖它之前需要注意",
|
||||
"hasScripts": "包含脚本,请仔细查看",
|
||||
"needsAttention": "在依赖它之前需要注意",
|
||||
"ready": "准备使用"
|
||||
},
|
||||
"success": {
|
||||
"created": "技能创建成功。",
|
||||
"imported": "成功导入技能 。",
|
||||
"imported": "技能导入成功。",
|
||||
"saved": "技能保存成功。"
|
||||
}
|
||||
},
|
||||
"pluginDetail": {
|
||||
"unknown": "未知数",
|
||||
"unknown": "未知",
|
||||
"metadata": {
|
||||
"author": "作者",
|
||||
"category": "类别",
|
||||
"source": "来源",
|
||||
"version": "版本",
|
||||
"capabilities": "能力",
|
||||
"installs": "安装"
|
||||
"installs": "安装量"
|
||||
},
|
||||
"scope": {
|
||||
"label": "范围:",
|
||||
"label": "范围:",
|
||||
"options": {
|
||||
"user": "用户( 全球)",
|
||||
"project": "项目(分摊)",
|
||||
"local": "当地( 被忽略)"
|
||||
"user": "用户(全球)",
|
||||
"project": "项目(共享)",
|
||||
"local": "本地(gitignored)"
|
||||
}
|
||||
},
|
||||
"links": {
|
||||
"homepage": "主页",
|
||||
"contact": "联系人"
|
||||
"contact": "接触"
|
||||
},
|
||||
"readme": {
|
||||
"loading": "正在装入 ZXCVTKEN0ZXCV...",
|
||||
"empty": "没有ZXCVKEN0ZXCV。"
|
||||
"loading": "正在加载自述文件…",
|
||||
"empty": "没有可用的自述文件。"
|
||||
}
|
||||
},
|
||||
"skillImport": {
|
||||
"title": "导入技能",
|
||||
"description": "选择一个已有的技能文件夹, 审查要复制的内容, 然后导入到您支持的技能位置 。",
|
||||
"description": "选择一个现有技能文件夹,查看将复制的内容,然后将其导入到您支持的技能位置之一。",
|
||||
"steps": {
|
||||
"chooseFolder": {
|
||||
"title": "1.选择技能文件夹",
|
||||
"description": "此文件夹应该已经包含 `SKILL.md`, `Skill.md`, 或 `skill.md` 文件 。"
|
||||
"description": "该文件夹应该已包含“SKILL.md”、“Skill.md”或“skill.md”文件。"
|
||||
},
|
||||
"location": {
|
||||
"title": "2. 决定属于何处",
|
||||
"description": "个人技能随处可见。 项目技能只为一个代码库出现."
|
||||
"title": "2. 决定它所属的地方",
|
||||
"description": "个人技能无处不在。项目技能仅针对一个代码库显示。"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"sourceFolder": "源文件夹",
|
||||
"destinationFolderName": "目标文件夹名称",
|
||||
"audience": "谁能用呢?",
|
||||
"storage": "在哪里储存"
|
||||
"audience": "谁可以使用它",
|
||||
"storage": "存放在哪里"
|
||||
},
|
||||
"placeholders": {
|
||||
"defaultFolderName": "源文件夹名称的默认值"
|
||||
"defaultFolderName": "默认为源文件夹名称"
|
||||
},
|
||||
"actions": {
|
||||
"browse": "浏览",
|
||||
"cancel": "取消",
|
||||
"preparing": "准备...",
|
||||
"reviewAndImport": "审查和导入",
|
||||
"preparing": "正在准备…",
|
||||
"reviewAndImport": "审核和导入",
|
||||
"importSkill": "导入技能",
|
||||
"backToImport": "返回导入"
|
||||
},
|
||||
"scope": {
|
||||
"user": "用户",
|
||||
"project": "项目:{{project}}",
|
||||
"projectUnavailable": "无法执行的项目"
|
||||
"project": "项目:{{project}}",
|
||||
"projectUnavailable": "项目不可用"
|
||||
},
|
||||
"rootSuffix": {
|
||||
"codexOnly": "- 只有代码",
|
||||
"codexOnly": "- 仅 Codex",
|
||||
"shared": "- 共享"
|
||||
},
|
||||
"reviewHint": "首先审查复制的文件,然后在下一步确认导入.",
|
||||
"reviewHint": "首先检查复制的文件,然后在下一步中确认导入。",
|
||||
"reviewLabel": "导入此技能",
|
||||
"errors": {
|
||||
"missingSkillFile": "此文件夹看起来还不是技能 。 它需要一个SKILL.md,Skill.md,或技能Md文件.",
|
||||
"symbolicLinks": "此文件夹包含符号链接 。 导入真实文件而不是链接 。",
|
||||
"tooManyFiles": "此技能文件夹太大, 无法同时导入 。 删除额外文件并再次尝试 。",
|
||||
"tooLarge": "此技能文件夹太大, 无法安全导入 。 调整大资产,再试一次。",
|
||||
"invalidFolderName": "用字母、数字、点、破折号或下划线选择一个更简单的目的文件夹名称。",
|
||||
"mustBeDirectory": "选择要导入的文件夹, 而不是一个文件 。",
|
||||
"reviewFailed": "审查导入更改失败",
|
||||
"importFailed": "导入技能失败"
|
||||
"missingSkillFile": "这个文件夹看起来还不像技能。它需要 SKILL.md、Skill.md 或 skill.md 文件。",
|
||||
"symbolicLinks": "该文件夹包含符号链接。导入真实文件而不是链接。",
|
||||
"tooManyFiles": "该技能文件夹太大,无法一次导入。删除多余的文件并重试。",
|
||||
"tooLarge": "该技能文件夹太大,无法安全导入。修剪大量资产并重试。",
|
||||
"invalidFolderName": "使用字母、数字、点、破折号或下划线选择一个更简单的目标文件夹名称。",
|
||||
"mustBeDirectory": "选择要导入的文件夹,而不是单个文件。",
|
||||
"reviewFailed": "无法审核导入更改",
|
||||
"importFailed": "技能导入失败"
|
||||
}
|
||||
},
|
||||
"mcpPanel": {
|
||||
"sort": {
|
||||
"nameAsc": "名称 A-Z",
|
||||
"nameDesc": "名称 Z A",
|
||||
"nameAsc": "名称 A→Z",
|
||||
"nameDesc": "名称 Z→A",
|
||||
"toolsDesc": "大多数工具"
|
||||
},
|
||||
"health": {
|
||||
"title": "MCP 苏维埃社会主义共和国 健康状况",
|
||||
"checkingViaRuntime": "通过{{runtime}}检查已安装的ZXVTOKEN0ZXCV服务器.",
|
||||
"lastChecked": "上次选中的 {{time}}",
|
||||
"description": "从此页面运行诊断,以验证已安装的MCP连接.",
|
||||
"checking": "正在检查...",
|
||||
"title": "MCP 健康状况",
|
||||
"checkingViaRuntime": "通过 {{runtime}} 检查已安装的 MCP 服务器…",
|
||||
"lastChecked": "最后检查 {{time}}",
|
||||
"description": "从此页面运行诊断以验证已安装的 MCP 连接。",
|
||||
"checking": "检查…",
|
||||
"checkStatus": "检查状态"
|
||||
},
|
||||
"diagnostics": {
|
||||
"title": "运行时间 MCP 诊断",
|
||||
"title": "运行时 MCP 诊断",
|
||||
"serversCount": "{{count}} 服务器",
|
||||
"serversCount_one": "{{count}} 服务器",
|
||||
"serversCount_other": "{{count}} 服务器",
|
||||
"waiting": "等待诊断结果...",
|
||||
"waiting": "等待诊断结果…",
|
||||
"disableReasons": {
|
||||
"checkingRuntimeStatus": "正在检查运行时间状态...",
|
||||
"checkingRuntimeAvailability": "正在检查运行时间可用性...",
|
||||
"runtimeFailedToStart": "已找到配置的运行时间, 但启动失败 。 打开Dash板进行修理或重新安装.",
|
||||
"runtimeRequired": "需要配置的运行时间 。 从Dashboard上安装或修复."
|
||||
"checkingRuntimeStatus": "正在检查运行时状态…",
|
||||
"checkingRuntimeAvailability": "检查运行时可用性…",
|
||||
"runtimeFailedToStart": "已找到配置的运行时,但启动失败。打开控制台进行修复或重新安装。",
|
||||
"runtimeRequired": "需要配置的运行时。从控制台安装或修复它。"
|
||||
},
|
||||
"serversCount_few": "{{count}} 服务器",
|
||||
"serversCount_many": "{{count}} 服务器"
|
||||
},
|
||||
"searchPlaceholder": "搜索 MCP 服务器...",
|
||||
"searchPlaceholder": "搜索 MCP 服务器…",
|
||||
"runtime": {
|
||||
"notAvailable": "{{runtime}}不详",
|
||||
"notAvailable": "{{runtime}} 不可用",
|
||||
"notInstalled": "{{runtime}} 未安装",
|
||||
"requiredDescription": "MCP 健康检查要求{{runtime}}。去Dashboard安装或修复它。"
|
||||
"requiredDescription": "MCP 运行状况检查需要 {{runtime}}。转至控制台进行安装或修复。"
|
||||
},
|
||||
"empty": {
|
||||
"searchTitle": "未找到服务器",
|
||||
"title": "没有可用的 MCP 服务器",
|
||||
"searchDescription": "尝试不同的搜索名词",
|
||||
"description": "稍后检查新服务器"
|
||||
"searchDescription": "尝试不同的搜索词",
|
||||
"description": "稍后回来查看新服务器"
|
||||
},
|
||||
"loadMore": "装入更多"
|
||||
"loadMore": "加载更多"
|
||||
},
|
||||
"apiKeys": {
|
||||
"description": "安全存储 API 键,用于安装 MCP 服务器时自动填充.",
|
||||
"description": "安全存储 API 密钥,以便在安装 MCP 服务器时自动填充。",
|
||||
"storage": {
|
||||
"osKeychain": "密钥通过{{backend}}加密,并以限制文件权限存储(只有所有者).",
|
||||
"localEncryption": "OS 密钥链不可用 - 密钥在本地用 AES-256加密. 为了加强保护,安装密钥环服务(gnome-keyring,kwallet)."
|
||||
"osKeychain": "密钥通过 {{backend}} 加密并以受限文件权限存储(仅限所有者)。",
|
||||
"localEncryption": "操作系统钥匙串不可用 - 密钥使用 AES-256 在本地加密。为了获得更强的保护,请安装密钥环服务(gnome-keyring、kwallet)。"
|
||||
},
|
||||
"actions": {
|
||||
"add": "添加 API 密钥",
|
||||
"addFirst": "添加您的第一个密钥",
|
||||
"addFirst": "添加您的第一把钥匙",
|
||||
"edit": "编辑",
|
||||
"copied": "已复制!",
|
||||
"copyEnvVarName": "复制环境变量名",
|
||||
"copied": "复制了!",
|
||||
"copyEnvVarName": "复制环境变量名称",
|
||||
"confirmDelete": "再次点击确认",
|
||||
"delete": "删除"
|
||||
},
|
||||
"empty": {
|
||||
"title": "没有保存 ZXCVKEN0ZXCV 密钥",
|
||||
"description": "在安装 MCP 服务器时将密钥添加到自动填充环境变量中."
|
||||
"title": "未保存 API 密钥",
|
||||
"description": "安装 MCP 服务器时添加密钥以自动填充环境变量。"
|
||||
},
|
||||
"form": {
|
||||
"addTitle": "添加 API 密钥",
|
||||
"editTitle": "编辑 API 密钥",
|
||||
"addDescription": "在MCP服务器安装中存储用于自动填充的API密钥.",
|
||||
"editDescription": "更新关键细节 。 您必须重新输入值 。",
|
||||
"keychainUnavailable": "OS 键链不可用 - 用 AES-256 本地加密的键. 为OS级保护安装 gnome- keyring 。",
|
||||
"name": "名称",
|
||||
"namePlaceholder": "例如,OpenAI生产",
|
||||
"addDescription": "存储 API 密钥以便在 MCP 服务器安装中自动填充。",
|
||||
"editDescription": "更新关键细节。您必须重新输入该值。",
|
||||
"keychainUnavailable": "操作系统钥匙串不可用 - 使用 AES-256 在本地加密的密钥。安装 gnome-keyring 以实现操作系统级别的保护。",
|
||||
"name": "姓名",
|
||||
"namePlaceholder": "例如 OpenAI 制作",
|
||||
"environmentVariableName": "环境变量名称",
|
||||
"envVarPlaceholder": "例如,OPENAI_API_KEY",
|
||||
"value": "数值",
|
||||
"reenterValue": "重新输入密钥值",
|
||||
"valuePlaceholder": "嘘...",
|
||||
"envVarPlaceholder": "例如 OPENAI_API_KEY",
|
||||
"value": "价值",
|
||||
"reenterValue": "重新输入键值",
|
||||
"valuePlaceholder": "sk-…",
|
||||
"scope": "范围",
|
||||
"userScopeLabel": "用户( 全球)",
|
||||
"projectScopeLabel": "项目:{{project}}",
|
||||
"projectUnavailable": "无法执行的项目",
|
||||
"boundTo": "界于{{path}}",
|
||||
"userScopeLabel": "用户(全球)",
|
||||
"projectScopeLabel": "项目:{{project}}",
|
||||
"projectUnavailable": "项目不可用",
|
||||
"boundTo": "绑定到 {{path}}",
|
||||
"cancel": "取消",
|
||||
"saving": "正在保存...",
|
||||
"saving": "保存…",
|
||||
"update": "更新",
|
||||
"save": "保存",
|
||||
"errors": {
|
||||
"invalidEnvVarFormat": "用字母,数字,下划线 必须以字母或下划线开头 。",
|
||||
"nameRequired": "需要名称",
|
||||
"envVarRequired": "需要环境变量名称",
|
||||
"invalidEnvVar": "无效的环境变量名称",
|
||||
"valueRequired": "需要关键值",
|
||||
"projectScopeRequiresProject": "工程范围 API 密钥需要运行中的项目",
|
||||
"invalidEnvVarFormat": "使用字母、数字、下划线。必须以字母或下划线开头。",
|
||||
"nameRequired": "姓名为必填项",
|
||||
"envVarRequired": "环境变量名称为必填项",
|
||||
"invalidEnvVar": "环境变量名称无效",
|
||||
"valueRequired": "键值必填",
|
||||
"projectScopeRequiresProject": "项目范围的 API 密钥需要一个活动项目",
|
||||
"saveFailed": "保存失败"
|
||||
}
|
||||
}
|
||||
},
|
||||
"skillReview": {
|
||||
"title": "审查技能变化",
|
||||
"description": "{{reviewLabel}}先预览文件系统更改. 在下文确认之前,没有文字。",
|
||||
"title": "查看技能变更",
|
||||
"description": "{{reviewLabel}} 首先预览文件系统更改。在您确认以下内容之前,不会写入任何内容。",
|
||||
"noPreview": "没有可用的预览。",
|
||||
"confirmPromptPrefix": "查看下面的 diff, 然后使用",
|
||||
"confirmPromptSuffix": "应用这些修改。",
|
||||
"confirmPromptPrefix": "查看下面的差异,然后使用",
|
||||
"confirmPromptSuffix": "应用这些更改。",
|
||||
"noChanges": "尚未检测到文件更改。",
|
||||
"binaryBadge": "二进制",
|
||||
"binaryPreviewHidden": "未显示二进制文件预览 。 文件将被复制为-is 。",
|
||||
"binaryPreviewHidden": "不显示二进制文件预览。文件将按原样复制。",
|
||||
"summary": {
|
||||
"fileChanges": "{{count}} 文件更改",
|
||||
"fileChanges_one": "{{count}} 文件更改",
|
||||
"fileChanges_other": "{{count}} 文件更改",
|
||||
"new": "{{count}}新设",
|
||||
"updated": "更新 {{count}}",
|
||||
"removed": "{{count}}删除",
|
||||
"new": "{{count}} 新",
|
||||
"updated": "{{count}} 已更新",
|
||||
"removed": "{{count}} 已删除",
|
||||
"binary": "{{count}} 二进制",
|
||||
"fileChanges_few": "{{count}} 文件更改",
|
||||
"fileChanges_many": "{{count}} 文件更改"
|
||||
|
|
@ -657,32 +657,32 @@
|
|||
"toolsCount": "{{count}} 工具",
|
||||
"toolsCount_one": "{{count}} 工具",
|
||||
"toolsCount_other": "{{count}} 工具",
|
||||
"envCount": "{{count}}内存",
|
||||
"envCount_one": "{{count}} 掩体",
|
||||
"envCount_other": "{{count}}内存",
|
||||
"auth": "自动",
|
||||
"byAuthor": "由{{author}}公司制作",
|
||||
"envCount": "{{count}} 环境",
|
||||
"envCount_one": "{{count}} 环境",
|
||||
"envCount_other": "{{count}} 环境",
|
||||
"auth": "授权",
|
||||
"byAuthor": "通过 {{author}}",
|
||||
"hosting": {
|
||||
"remote": "远程",
|
||||
"local": "当地",
|
||||
"both": "两者"
|
||||
"remote": "偏僻的",
|
||||
"local": "本地",
|
||||
"both": "两个都"
|
||||
},
|
||||
"toolsCount_few": "{{count}} 工具",
|
||||
"toolsCount_many": "{{count}} 工具",
|
||||
"envCount_few": "{{count}}内存",
|
||||
"envCount_many": "{{count}}内存",
|
||||
"envCount_few": "{{count}} 环境",
|
||||
"envCount_many": "{{count}} 环境",
|
||||
"repository": "仓库",
|
||||
"website": "网站"
|
||||
},
|
||||
"installButton": {
|
||||
"installing": "安装中...",
|
||||
"removing": "删除...",
|
||||
"done": "写好了",
|
||||
"installing": "正在安装…",
|
||||
"removing": "正在删除…",
|
||||
"done": "完毕",
|
||||
"retry": "重试",
|
||||
"uninstall": "卸载",
|
||||
"install": "安装"
|
||||
},
|
||||
"pluginCard": {
|
||||
"official": "官方"
|
||||
"official": "官方的"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,31 +1,31 @@
|
|||
{
|
||||
"cost": {
|
||||
"breakdownTitle": "成本细目(每100个令牌)",
|
||||
"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": "亚剂费用",
|
||||
"breakdownTitle": "成本明细(每 100 万个 Token)",
|
||||
"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": "共计"
|
||||
"total": "总计"
|
||||
},
|
||||
"insights": {
|
||||
"agent": "代理人",
|
||||
|
|
@ -33,185 +33,185 @@
|
|||
"agent_many": "代理人",
|
||||
"agent_one": "代理人",
|
||||
"agent_other": "代理人",
|
||||
"agentTree": "代理树 ({{count}}) 代理树 ({{unit}})",
|
||||
"background": "(背景情况)",
|
||||
"agentTree": "智能体树 ({{count}} {{unit}})",
|
||||
"background": "(后台)",
|
||||
"bashCommands": "Bash 命令",
|
||||
"outOfScopeFindings": "范围外调查结果({{count}})",
|
||||
"outOfScopeFindings": "超出范围的调查结果 ({{count}})",
|
||||
"questionsAsked": "提出的问题 ({{count}})",
|
||||
"repeated": "重复",
|
||||
"skillsInvoked": "被举报技能({{count}})",
|
||||
"skillsInvoked": "调用的技能 ({{count}})",
|
||||
"taskDispatches": "任务调度 ({{count}})",
|
||||
"tasksCreated": "创建的任务( {{count}})",
|
||||
"tasksCreated": "已创建任务 ({{count}})",
|
||||
"teamMode": "团队模式",
|
||||
"teams": "团队:{{teams}}",
|
||||
"title": "会话透视",
|
||||
"total": "共计",
|
||||
"unique": "独一无二",
|
||||
"skillsInvoked_few": "被举报技能({{count}})",
|
||||
"skillsInvoked_many": "被举报技能({{count}})",
|
||||
"skillsInvoked_one": "被举报技能({{count}})",
|
||||
"skillsInvoked_other": "被举报技能({{count}})",
|
||||
"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}})",
|
||||
"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": "关键外卖"
|
||||
"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": "惩戒",
|
||||
"corrections": "修正",
|
||||
"failed": "失败",
|
||||
"fileReadRedundancy": "文件读取冗余",
|
||||
"firstMessage": "第一个消息",
|
||||
"firstRun": "第一个运行",
|
||||
"firstMessage": "第一条消息",
|
||||
"firstRun": "第一次运行",
|
||||
"frictionRate": "摩擦率",
|
||||
"lastRun": "上次运行",
|
||||
"messagesBeforeWork": "工作前的信件",
|
||||
"lastRun": "最后一次运行",
|
||||
"messagesBeforeWork": "开始工作前消息",
|
||||
"passed": "通过",
|
||||
"promptQuality": "提示质量",
|
||||
"promptQuality": "提示词质量",
|
||||
"readsPerUniqueFile": "读取/唯一文件",
|
||||
"snapshot": "简介",
|
||||
"snapshot": "快照",
|
||||
"snapshot_few": "快照",
|
||||
"snapshot_many": "快照",
|
||||
"snapshot_one": "简介",
|
||||
"snapshot_one": "快照",
|
||||
"snapshot_other": "快照",
|
||||
"startupOverhead": "启动间接费用",
|
||||
"testProgression": "测试进度",
|
||||
"startupOverhead": "启动开销",
|
||||
"testProgression": "测试进展",
|
||||
"title": "质量信号",
|
||||
"tokensBeforeWork": "工作前托肯斯语Name",
|
||||
"totalReads": "读数共计",
|
||||
"uniqueFiles": "独一无二的文件",
|
||||
"userMessages": "用户信件",
|
||||
"percentOfTotal": "占总数的百分比"
|
||||
"tokensBeforeWork": "工作前的 Token",
|
||||
"totalReads": "总读取次数",
|
||||
"uniqueFiles": "唯一文件",
|
||||
"userMessages": "用户消息",
|
||||
"percentOfTotal": "占总数的%"
|
||||
},
|
||||
"tokens": {
|
||||
"apiCalls": "API 苏维埃社会主义共和国 电话",
|
||||
"apiCalls": "API 调用",
|
||||
"cacheCreate": "缓存创建",
|
||||
"cacheEfficiency": "缓存效率",
|
||||
"cacheRead": "缓存已读",
|
||||
"cacheReadPct": "快取读取%",
|
||||
"cacheRead": "缓存读取",
|
||||
"cacheReadPct": "缓存读取率",
|
||||
"coldStart": "冷启动",
|
||||
"cost": "费用",
|
||||
"input": "投入",
|
||||
"model": "型号",
|
||||
"no": "没有",
|
||||
"output": "产出",
|
||||
"readWriteRatio": "R/W比率",
|
||||
"title": "调用",
|
||||
"total": "共计",
|
||||
"yes": "对"
|
||||
"cost": "成本",
|
||||
"input": "输入",
|
||||
"model": "模型",
|
||||
"no": "否",
|
||||
"output": "输出",
|
||||
"readWriteRatio": "读/写比",
|
||||
"title": "Token 使用",
|
||||
"total": "总计",
|
||||
"yes": "是"
|
||||
},
|
||||
"subagents": {
|
||||
"title": "副剂",
|
||||
"title": "子智能体",
|
||||
"metrics": {
|
||||
"count": "计数",
|
||||
"totalTokens": "共计",
|
||||
"totalDuration": "期间共计",
|
||||
"totalCost": "费用共计"
|
||||
"count": "数量",
|
||||
"totalTokens": "Token 总数",
|
||||
"totalDuration": "总持续时间",
|
||||
"totalCost": "总成本"
|
||||
},
|
||||
"table": {
|
||||
"description": "说明",
|
||||
"description": "描述",
|
||||
"type": "类型",
|
||||
"tokens": "键",
|
||||
"duration": "会期",
|
||||
"cost": "费用"
|
||||
"tokens": "Token",
|
||||
"duration": "持续时间",
|
||||
"cost": "成本"
|
||||
}
|
||||
},
|
||||
"overview": {
|
||||
"title": "概览",
|
||||
"yes": "对",
|
||||
"no": "没有",
|
||||
"title": "概述",
|
||||
"yes": "是",
|
||||
"no": "否",
|
||||
"metrics": {
|
||||
"duration": "会期",
|
||||
"messages": "信件",
|
||||
"contextUsage": "背景使用情况",
|
||||
"duration": "持续时间",
|
||||
"messages": "消息",
|
||||
"contextUsage": "上下文使用",
|
||||
"compactions": "压缩",
|
||||
"branch": "处",
|
||||
"subagents": "副剂",
|
||||
"branch": "分支",
|
||||
"subagents": "子智能体",
|
||||
"project": "项目",
|
||||
"sessionId": "会话编号"
|
||||
"sessionId": "会话 ID"
|
||||
}
|
||||
},
|
||||
"timeline": {
|
||||
"title": "时间线和活动( A)",
|
||||
"title": "时间线与活动",
|
||||
"idleAnalysis": "空闲分析",
|
||||
"metrics": {
|
||||
"idleGaps": "空闲差距",
|
||||
"totalIdle": "闲置共计",
|
||||
"activeTime": "活动时间",
|
||||
"idlePercent": "闲置%"
|
||||
"idleGaps": "空闲间隙",
|
||||
"totalIdle": "总空闲时间",
|
||||
"activeTime": "活跃时间",
|
||||
"idlePercent": "空闲率"
|
||||
},
|
||||
"modelSwitches": "型号开关({{count}})",
|
||||
"modelSwitches_one": "型号开关({{count}})",
|
||||
"modelSwitches_other": "型号开关({{count}})",
|
||||
"messageNumber": "# 迈克 #{{number}}",
|
||||
"keyEvents": "关键事件",
|
||||
"modelSwitches_few": "型号开关({{count}})",
|
||||
"modelSwitches_many": "型号开关({{count}})"
|
||||
"modelSwitches": "模型切换({{count}})",
|
||||
"modelSwitches_one": "模型切换({{count}})",
|
||||
"modelSwitches_other": "模型切换({{count}})",
|
||||
"messageNumber": "消息#{{number}}",
|
||||
"keyEvents": "重要事件",
|
||||
"modelSwitches_few": "模型切换({{count}})",
|
||||
"modelSwitches_many": "模型切换({{count}})"
|
||||
},
|
||||
"tools": {
|
||||
"title": "工具使用",
|
||||
"summary": "{{formattedCount}} 跨越{{toolCount}}工具的总通话量",
|
||||
"summary": "共 {{formattedCount}} 次调用,涵盖 {{toolCount}} 个工具",
|
||||
"columns": {
|
||||
"tool": "工具",
|
||||
"calls": "电话",
|
||||
"calls": "调用次数",
|
||||
"errors": "错误",
|
||||
"successPercent": "成功率(%)",
|
||||
"health": "卫生"
|
||||
"successPercent": "成功率",
|
||||
"health": "健康状态"
|
||||
}
|
||||
},
|
||||
"git": {
|
||||
"title": "Git 活动",
|
||||
"commits": "提交",
|
||||
"pushes": "推动",
|
||||
"linesAdded": "添加的行数",
|
||||
"linesRemoved": "删除的行",
|
||||
"branchesCreated": "创建分支"
|
||||
"pushes": "推送",
|
||||
"linesAdded": "新增行数",
|
||||
"linesRemoved": "删除行数",
|
||||
"branchesCreated": "创建的分支"
|
||||
},
|
||||
"friction": {
|
||||
"title": "Friction 信号",
|
||||
"rate": "滑动率:{{rate}}百分比(%)",
|
||||
"correctionsCount": "{{count}}更正",
|
||||
"correctionsCount_one": "{{count}}更正",
|
||||
"corrections": "惩戒",
|
||||
"thrashingSignals": "闪烁信号",
|
||||
"repeatedBashCommands": "重复的巴什命令",
|
||||
"reworkedFiles": "重修的文件( 3+编辑)",
|
||||
"correctionsCount_few": "{{count}}更正",
|
||||
"correctionsCount_many": "{{count}}更正",
|
||||
"correctionsCount_other": "{{count}}更正"
|
||||
"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": "投入",
|
||||
"permissionDenied": "权限被拒绝",
|
||||
"messageIndex": "消息#{{index}}",
|
||||
"input": "输入",
|
||||
"error": "错误",
|
||||
"count": "{{count}} 错误",
|
||||
"count_one": "{{count}} 错误",
|
||||
"permissionDenialCount": "{{count}} 许可拒绝",
|
||||
"permissionDenialCount_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}} 许可拒绝"
|
||||
"permissionDenialCount_few": "{{count}} 权限拒绝次数",
|
||||
"permissionDenialCount_many": "{{count}} 权限拒绝次数",
|
||||
"permissionDenialCount_other": "{{count}} 权限拒绝次数"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1096,7 +1096,10 @@ export class AgentTeamsRuntimeProviderManagementCliClient implements RuntimeProv
|
|||
if (process.platform === 'win32' && isOpenCodeNodeModulesSymlinkError(failure.message)) {
|
||||
const profileId = extractProfileIdFromSymlinkError(failure.message);
|
||||
if (profileId) {
|
||||
const junctionReady = ensureOpenCodeProfileNodeModulesJunction(profileId, failure.message);
|
||||
const junctionReady = ensureOpenCodeProfileNodeModulesJunction(
|
||||
profileId,
|
||||
failure.message
|
||||
);
|
||||
if (junctionReady) {
|
||||
try {
|
||||
const retryResult = await execCli(
|
||||
|
|
@ -1116,7 +1119,8 @@ export class AgentTeamsRuntimeProviderManagementCliClient implements RuntimeProv
|
|||
}
|
||||
}
|
||||
|
||||
const retryResponse = extractJsonObjectFromError<RuntimeProviderManagementViewResponse>(error);
|
||||
const retryResponse =
|
||||
extractJsonObjectFromError<RuntimeProviderManagementViewResponse>(error);
|
||||
if (retryResponse) {
|
||||
return retryResponse;
|
||||
}
|
||||
|
|
@ -1176,7 +1180,10 @@ export class AgentTeamsRuntimeProviderManagementCliClient implements RuntimeProv
|
|||
if (process.platform === 'win32' && isOpenCodeNodeModulesSymlinkError(failure.message)) {
|
||||
const profileId = extractProfileIdFromSymlinkError(failure.message);
|
||||
if (profileId) {
|
||||
const junctionReady = ensureOpenCodeProfileNodeModulesJunction(profileId, failure.message);
|
||||
const junctionReady = ensureOpenCodeProfileNodeModulesJunction(
|
||||
profileId,
|
||||
failure.message
|
||||
);
|
||||
if (junctionReady) {
|
||||
try {
|
||||
const retryResult = await execCli(
|
||||
|
|
|
|||
|
|
@ -21,9 +21,7 @@
|
|||
* - synthetic assistant messages (model='<synthetic>')
|
||||
*/
|
||||
|
||||
import {
|
||||
HARD_NOISE_TAGS,
|
||||
} from '@main/constants/messageTags';
|
||||
import { HARD_NOISE_TAGS } from '@main/constants/messageTags';
|
||||
import { LocalFileSystemProvider } from '@main/services/infrastructure/LocalFileSystemProvider';
|
||||
import { type ChatHistoryEntry, type ContentBlock } from '@main/types';
|
||||
import { createLogger } from '@shared/utils/logger';
|
||||
|
|
|
|||
|
|
@ -181,10 +181,7 @@ export class SubagentResolver {
|
|||
}
|
||||
|
||||
private isAuthoredUserMessage(message: ParsedMessage): boolean {
|
||||
return (
|
||||
isHumanAuthoredParsedUserMessage(message) ||
|
||||
isDisplayableTeammateProtocol(message)
|
||||
);
|
||||
return isHumanAuthoredParsedUserMessage(message) || isDisplayableTeammateProtocol(message);
|
||||
}
|
||||
|
||||
private extractUserText(message: ParsedMessage): string {
|
||||
|
|
|
|||
|
|
@ -405,7 +405,10 @@ export function buildDisplayItemsFromMessages(
|
|||
|
||||
// Check for teammate messages (non-meta user messages with <teammate-message> content)
|
||||
// One user message may contain multiple <teammate-message> blocks
|
||||
if (msg.type === 'user' && (isHumanAuthoredUserTurn(msg) || isDisplayableTeammateProtocol(msg))) {
|
||||
if (
|
||||
msg.type === 'user' &&
|
||||
(isHumanAuthoredUserTurn(msg) || isDisplayableTeammateProtocol(msg))
|
||||
) {
|
||||
const rawText =
|
||||
typeof msg.content === 'string'
|
||||
? msg.content
|
||||
|
|
|
|||
|
|
@ -66,9 +66,7 @@ export function classifyUserTurnProvenance(
|
|||
return originKind;
|
||||
}
|
||||
|
||||
const legacyProtocolKind = classifyLegacyProtocolText(
|
||||
getTextContent(getMessageContent(message))
|
||||
);
|
||||
const legacyProtocolKind = classifyLegacyProtocolText(getTextContent(getMessageContent(message)));
|
||||
if (legacyProtocolKind) {
|
||||
return legacyProtocolKind;
|
||||
}
|
||||
|
|
@ -97,9 +95,7 @@ export function isSyntheticReplayNoise(message: UserTurnProvenanceInput): boolea
|
|||
);
|
||||
}
|
||||
|
||||
export function isDisplayableTeammateProtocol(
|
||||
message: UserTurnProvenanceInput
|
||||
): boolean {
|
||||
export function isDisplayableTeammateProtocol(message: UserTurnProvenanceInput): boolean {
|
||||
return (
|
||||
classifyUserTurnProvenance(message) === 'teammate-protocol' &&
|
||||
message.isMeta !== true &&
|
||||
|
|
@ -149,9 +145,7 @@ function normalizeOriginKind(
|
|||
}
|
||||
}
|
||||
|
||||
function classifyLegacyProtocolText(
|
||||
text: string | undefined
|
||||
): UserTurnProvenanceKind | undefined {
|
||||
function classifyLegacyProtocolText(text: string | undefined): UserTurnProvenanceKind | undefined {
|
||||
if (!text) {
|
||||
return undefined;
|
||||
}
|
||||
|
|
@ -215,9 +209,7 @@ function hasSystemOutputContent(content: unknown): boolean {
|
|||
Array.isArray(content) &&
|
||||
content.some(
|
||||
(block) =>
|
||||
isContentBlock(block) &&
|
||||
block.type === 'text' &&
|
||||
startsWithSystemOutputTag(block.text)
|
||||
isContentBlock(block) && block.type === 'text' && startsWithSystemOutputTag(block.text)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue