From 8b123522adfa931fcfa4dc5138620116fda9fb4b Mon Sep 17 00:00:00 2001 From: JunWang233 Date: Sat, 1 Aug 2026 15:20:06 +0800 Subject: [PATCH 1/3] Support iOS 18 with system UI fallbacks --- CodegiOS/DesignSystem/GlassComponents.swift | 68 +- CodegiOS/DesignSystem/StateViews.swift | 8 +- .../Features/Onboarding/OnboardingView.swift | 2 +- .../Features/Projects/CloneRepoView.swift | 2 +- .../Projects/DirectoryBrowserView.swift | 2 +- .../Features/Servers/ServerEditorSheet.swift | 2 +- .../SessionDetail/AgentOptionsButton.swift | 6 +- .../SessionDetail/BranchPickerView.swift | 4 +- .../Features/SessionDetail/ComposeBar.swift | 12 +- .../SessionDetail/ComposeInsertSheet.swift | 2 +- .../SessionDetail/SessionDetailView.swift | 2 +- .../Settings/Agents/AgentConfigKimiView.swift | 8 +- .../Settings/Agents/AgentConfigPiView.swift | 8 +- .../Settings/Agents/AgentDetailView.swift | 8 +- .../Settings/Agents/AgentsSettingsView.swift | 2 +- .../ChatChannels/ChatChannelDetailView.swift | 4 +- .../ChatChannelsSettingsView.swift | 2 +- .../Settings/ChatChannels/WeixinQRView.swift | 2 +- .../ModelProvidersSettingsView.swift | 2 +- .../Settings/System/SystemSettingsView.swift | 4 +- .../VersionControlSettingsView.swift | 6 +- CodegiOS/Resources/Localizable.xcstrings | 3442 +++++++++-------- README.md | 5 +- docs/live-activity-analysis.md | 4 +- docs/live-activity-implementation.md | 4 +- project.yml | 4 +- 26 files changed, 1855 insertions(+), 1760 deletions(-) diff --git a/CodegiOS/DesignSystem/GlassComponents.swift b/CodegiOS/DesignSystem/GlassComponents.swift index f330ec1..243178f 100644 --- a/CodegiOS/DesignSystem/GlassComponents.swift +++ b/CodegiOS/DesignSystem/GlassComponents.swift @@ -1,5 +1,65 @@ import SwiftUI +/// Keeps Liquid Glass call sites buildable on the app's iOS 18 deployment +/// target. iOS 26 uses the native effect; earlier systems receive a flat, +/// tinted surface that preserves contrast and shape. +extension View { + @ViewBuilder + func codegGlassEffect(tint: Color? = nil, in shape: S) -> some View { + if #available(iOS 26.0, *) { + if let tint { + self.glassEffect(.regular.tint(tint), in: shape) + } else { + self.glassEffect(.regular, in: shape) + } + } else { + self + .background(Theme.bgElevated, in: shape) + .overlay { + if let tint { + shape.fill(tint) + } + } + } + } + + /// Uses native glass button styles on iOS 26 and the closest system button + /// styles on iOS 18–25. + @ViewBuilder + func codegGlassButtonStyle(prominent: Bool = false) -> some View { + if #available(iOS 26.0, *) { + if prominent { + self.buttonStyle(.glassProminent) + } else { + self.buttonStyle(.glass) + } + } else if prominent { + self.buttonStyle(.borderedProminent) + } else { + self.buttonStyle(.bordered) + } + } +} + +/// On iOS 26 this groups neighboring glass shapes so they can blend together. +/// Earlier systems do not have an equivalent container, so content is rendered +/// unchanged. +struct CodegGlassEffectContainer: View { + var spacing: CGFloat? + @ViewBuilder var content: () -> Content + + @ViewBuilder + var body: some View { + if #available(iOS 26.0, *) { + GlassEffectContainer(spacing: spacing) { + content() + } + } else { + content() + } + } +} + /// A Liquid Glass surface for cards and rows, with a faint hairline for /// definition on the dark backdrop. struct GlassCard: View { @@ -10,7 +70,7 @@ struct GlassCard: View { var body: some View { content() .padding(padding) - .glassEffect(.regular, in: RoundedRectangle(cornerRadius: cornerRadius, style: .continuous)) + .codegGlassEffect(in: RoundedRectangle(cornerRadius: cornerRadius, style: .continuous)) .hairlineBorder(cornerRadius) } } @@ -93,8 +153,8 @@ struct GlassRow: View { content() .padding(.horizontal, 14) .padding(.vertical, 12) - .glassEffect( - isSelected ? .regular.tint(Theme.accent.opacity(0.22)) : .regular, + .codegGlassEffect( + tint: isSelected ? Theme.accent.opacity(0.22) : nil, in: RoundedRectangle(cornerRadius: cornerRadius, style: .continuous) ) .hairlineBorder(cornerRadius, color: isSelected ? Theme.accent.opacity(0.45) : Theme.surfaceStroke) @@ -247,7 +307,7 @@ struct PrimaryGlassButton: View { .frame(maxWidth: .infinity) .padding(.vertical, 4) } - .buttonStyle(.glassProminent) + .codegGlassButtonStyle(prominent: true) .tint(tint) .disabled(isLoading) } diff --git a/CodegiOS/DesignSystem/StateViews.swift b/CodegiOS/DesignSystem/StateViews.swift index fc2c352..20f2dee 100644 --- a/CodegiOS/DesignSystem/StateViews.swift +++ b/CodegiOS/DesignSystem/StateViews.swift @@ -26,7 +26,7 @@ struct EmptyStateView: View { } if let actionTitle, let action { Button(actionTitle, action: action) - .buttonStyle(.glass) + .codegGlassButtonStyle() .tint(Theme.accent) .padding(.top, 4) } @@ -83,8 +83,8 @@ struct RefreshErrorBanner: View { } .padding(.horizontal, 14) .padding(.vertical, 11) - .glassEffect( - .regular.tint(Theme.danger.opacity(0.16)), + .codegGlassEffect( + tint: Theme.danger.opacity(0.16), in: RoundedRectangle(cornerRadius: Theme.Radius.md, style: .continuous) ) .hairlineBorder(Theme.Radius.md, color: Theme.danger.opacity(0.35)) @@ -110,7 +110,7 @@ struct InlineErrorView: View { .multilineTextAlignment(.center) if let retry { Button("Try Again", action: retry) - .buttonStyle(.glass) + .codegGlassButtonStyle() .tint(Theme.accent) .padding(.top, 4) } diff --git a/CodegiOS/Features/Onboarding/OnboardingView.swift b/CodegiOS/Features/Onboarding/OnboardingView.swift index 5bd839d..1f70d68 100644 --- a/CodegiOS/Features/Onboarding/OnboardingView.swift +++ b/CodegiOS/Features/Onboarding/OnboardingView.swift @@ -20,7 +20,7 @@ struct OnboardingView: View { .font(.system(size: 34, weight: .semibold)) .foregroundStyle(Theme.accent) .frame(width: 84, height: 84) - .glassEffect(.regular.tint(Theme.accentDim), in: RoundedRectangle(cornerRadius: Theme.Radius.xl, style: .continuous)) + .codegGlassEffect(tint: Theme.accentDim, in: RoundedRectangle(cornerRadius: Theme.Radius.xl, style: .continuous)) .hairlineBorder(Theme.Radius.xl, color: Theme.accent.opacity(0.3)) .padding(.bottom, 24) diff --git a/CodegiOS/Features/Projects/CloneRepoView.swift b/CodegiOS/Features/Projects/CloneRepoView.swift index f599b73..4a77056 100644 --- a/CodegiOS/Features/Projects/CloneRepoView.swift +++ b/CodegiOS/Features/Projects/CloneRepoView.swift @@ -101,7 +101,7 @@ struct CloneRepoView: View { } label: { Image(systemName: "folder") } - .buttonStyle(.glass) + .codegGlassButtonStyle() .tint(Theme.accent) .disabled(cloning) .accessibilityLabel("Browse") diff --git a/CodegiOS/Features/Projects/DirectoryBrowserView.swift b/CodegiOS/Features/Projects/DirectoryBrowserView.swift index 916ef7b..310c032 100644 --- a/CodegiOS/Features/Projects/DirectoryBrowserView.swift +++ b/CodegiOS/Features/Projects/DirectoryBrowserView.swift @@ -60,7 +60,7 @@ struct DirectoryBrowserView: View { Image(systemName: "chevron.up") .font(.body.weight(.semibold)) } - .buttonStyle(.glass) + .codegGlassButtonStyle() .tint(Theme.accent) .disabled(isRoot || isLoading) .accessibilityLabel("Up") diff --git a/CodegiOS/Features/Servers/ServerEditorSheet.swift b/CodegiOS/Features/Servers/ServerEditorSheet.swift index 5799fc5..2236b40 100644 --- a/CodegiOS/Features/Servers/ServerEditorSheet.swift +++ b/CodegiOS/Features/Servers/ServerEditorSheet.swift @@ -170,7 +170,7 @@ struct ServerEditorSheet: View { .frame(maxWidth: .infinity) .padding(.vertical, 4) } - .buttonStyle(.glass) + .codegGlassButtonStyle() .tint(Theme.accent) .disabled(model.isTesting || !model.canTest) diff --git a/CodegiOS/Features/SessionDetail/AgentOptionsButton.swift b/CodegiOS/Features/SessionDetail/AgentOptionsButton.swift index ce8c665..02beed9 100644 --- a/CodegiOS/Features/SessionDetail/AgentOptionsButton.swift +++ b/CodegiOS/Features/SessionDetail/AgentOptionsButton.swift @@ -376,7 +376,7 @@ private struct AgentOptionsSheet: View { } .padding(14) .frame(maxWidth: .infinity, alignment: .leading) - .glassEffect(.regular, in: RoundedRectangle(cornerRadius: Theme.Radius.md, style: .continuous)) + .codegGlassEffect(in: RoundedRectangle(cornerRadius: Theme.Radius.md, style: .continuous)) .hairlineBorder(Theme.Radius.md) } @@ -387,7 +387,7 @@ private struct AgentOptionsSheet: View { .foregroundStyle(Theme.danger) .fixedSize(horizontal: false, vertical: true) Button("Try Again") { options.load() } - .buttonStyle(.glass) + .codegGlassButtonStyle() .tint(Theme.accent) } .padding(14) @@ -511,7 +511,7 @@ struct OptionSection: View { .foregroundStyle(Theme.textTertiary) .padding(.horizontal, 4) VStack(spacing: 0) { content() } - .glassEffect(.regular, in: RoundedRectangle(cornerRadius: Theme.Radius.md, style: .continuous)) + .codegGlassEffect(in: RoundedRectangle(cornerRadius: Theme.Radius.md, style: .continuous)) .hairlineBorder(Theme.Radius.md) } } diff --git a/CodegiOS/Features/SessionDetail/BranchPickerView.swift b/CodegiOS/Features/SessionDetail/BranchPickerView.swift index 2c62c49..14f8f47 100644 --- a/CodegiOS/Features/SessionDetail/BranchPickerView.swift +++ b/CodegiOS/Features/SessionDetail/BranchPickerView.swift @@ -158,7 +158,7 @@ struct BranchPickerView: View { } } .padding(14) - .glassEffect(.regular, in: RoundedRectangle(cornerRadius: Theme.Radius.md, style: .continuous)) + .codegGlassEffect(in: RoundedRectangle(cornerRadius: Theme.Radius.md, style: .continuous)) .hairlineBorder(Theme.Radius.md) } else { Button { showNewBranch = true } label: { @@ -175,7 +175,7 @@ struct BranchPickerView: View { .contentShape(Rectangle()) } .buttonStyle(.plain) - .glassEffect(.regular, in: RoundedRectangle(cornerRadius: Theme.Radius.md, style: .continuous)) + .codegGlassEffect(in: RoundedRectangle(cornerRadius: Theme.Radius.md, style: .continuous)) .hairlineBorder(Theme.Radius.md) } } diff --git a/CodegiOS/Features/SessionDetail/ComposeBar.swift b/CodegiOS/Features/SessionDetail/ComposeBar.swift index 1f1faa0..1555b4c 100644 --- a/CodegiOS/Features/SessionDetail/ComposeBar.swift +++ b/CodegiOS/Features/SessionDetail/ComposeBar.swift @@ -56,7 +56,7 @@ struct ComposeBar: View { .transition(.opacity.combined(with: .move(edge: .bottom))) } - GlassEffectContainer(spacing: 8) { + CodegGlassEffectContainer(spacing: 8) { HStack(alignment: .bottom, spacing: 8) { addButton TextField("Message", text: $text, axis: .vertical) @@ -74,7 +74,7 @@ struct ComposeBar: View { // `xl` radius clamps to a capsule while the field is one // line (rhyming with the round +/send buttons) and relaxes // to a rounded rect as it grows — no hard switch needed. - .glassEffect(.regular, in: RoundedRectangle(cornerRadius: Theme.Radius.xl, style: .continuous)) + .codegGlassEffect(in: RoundedRectangle(cornerRadius: Theme.Radius.xl, style: .continuous)) .hairlineBorder(Theme.Radius.xl) actionButton @@ -161,7 +161,7 @@ struct ComposeBar: View { .font(.system(size: 16, weight: .semibold)) .frame(width: 26, height: 26) } - .buttonStyle(.glass) + .codegGlassButtonStyle() .clipShape(Circle()) .tint(Theme.textSecondary) .accessibilityLabel("Add or insert") @@ -175,7 +175,7 @@ struct ComposeBar: View { .font(.system(size: 16, weight: .bold)) .frame(width: 26, height: 26) } - .buttonStyle(.glassProminent) + .codegGlassButtonStyle(prominent: true) .tint(Theme.danger) .clipShape(Circle()) .transition(.scale.combined(with: .opacity)) @@ -186,7 +186,7 @@ struct ComposeBar: View { .font(.system(size: 16, weight: .bold)) .frame(width: 26, height: 26) } - .buttonStyle(.glassProminent) + .codegGlassButtonStyle(prominent: true) .tint(Theme.accent) .clipShape(Circle()) .disabled(!canSend) @@ -276,7 +276,7 @@ private struct NoticeBanner: View { } .padding(.horizontal, 12) .padding(.vertical, 9) - .glassEffect(.regular, in: RoundedRectangle(cornerRadius: Theme.Radius.md, style: .continuous)) + .codegGlassEffect(in: RoundedRectangle(cornerRadius: Theme.Radius.md, style: .continuous)) .hairlineBorder(Theme.Radius.md, color: Theme.accent.opacity(0.35)) .transition(.opacity.combined(with: .move(edge: .bottom))) } diff --git a/CodegiOS/Features/SessionDetail/ComposeInsertSheet.swift b/CodegiOS/Features/SessionDetail/ComposeInsertSheet.swift index c49b0dd..a0d3d0c 100644 --- a/CodegiOS/Features/SessionDetail/ComposeInsertSheet.swift +++ b/CodegiOS/Features/SessionDetail/ComposeInsertSheet.swift @@ -174,7 +174,7 @@ struct ComposeInsertSheet: View { .multilineTextAlignment(.center) .fixedSize(horizontal: false, vertical: true) Button("Try Again") { model.load(source) } - .buttonStyle(.glass) + .codegGlassButtonStyle() .tint(Theme.accent) } .padding(.horizontal, 32) diff --git a/CodegiOS/Features/SessionDetail/SessionDetailView.swift b/CodegiOS/Features/SessionDetail/SessionDetailView.swift index c0b3d29..7aa83c7 100644 --- a/CodegiOS/Features/SessionDetail/SessionDetailView.swift +++ b/CodegiOS/Features/SessionDetail/SessionDetailView.swift @@ -295,7 +295,7 @@ private struct JumpToLatestButton: View { .font(.system(size: 15, weight: .bold)) .foregroundStyle(Theme.accent) .frame(width: 40, height: 40) - .glassEffect(.regular, in: Circle()) + .codegGlassEffect(in: Circle()) .hairlineBorder(20) // An explicit hit shape so the whole disc is tappable (and the // tap can't slip past its edge into the transcript underneath). diff --git a/CodegiOS/Features/Settings/Agents/AgentConfigKimiView.swift b/CodegiOS/Features/Settings/Agents/AgentConfigKimiView.swift index e7890c3..2b64888 100644 --- a/CodegiOS/Features/Settings/Agents/AgentConfigKimiView.swift +++ b/CodegiOS/Features/Settings/Agents/AgentConfigKimiView.swift @@ -146,7 +146,7 @@ struct KimiConfigSection: View { else { Label("Fetch", systemImage: "arrow.clockwise").labelStyle(.titleAndIcon) } } .font(.subheadline.weight(.medium)) - .buttonStyle(.glass).tint(Theme.accent) + .codegGlassButtonStyle().tint(Theme.accent) .disabled(saving || fetchingModels) } } @@ -168,7 +168,7 @@ struct KimiConfigSection: View { Image(systemName: "list.bullet") .font(.body.weight(.medium)).frame(width: 34, height: 30) } - .buttonStyle(.glass).tint(Theme.textSecondary) + .codegGlassButtonStyle().tint(Theme.textSecondary) .accessibilityLabel("Choose a fetched model") } @@ -246,9 +246,9 @@ struct KimiConfigSection: View { HStack { Spacer(minLength: 0) if prominent { - saveButton(title, action).buttonStyle(.glassProminent).tint(Theme.accent).disabled(saving) + saveButton(title, action).codegGlassButtonStyle(prominent: true).tint(Theme.accent).disabled(saving) } else { - saveButton(title, action).buttonStyle(.glass).tint(Theme.accent).disabled(saving) + saveButton(title, action).codegGlassButtonStyle().tint(Theme.accent).disabled(saving) } } .padding(.horizontal, 16).padding(.vertical, 12) diff --git a/CodegiOS/Features/Settings/Agents/AgentConfigPiView.swift b/CodegiOS/Features/Settings/Agents/AgentConfigPiView.swift index fc26940..6386baa 100644 --- a/CodegiOS/Features/Settings/Agents/AgentConfigPiView.swift +++ b/CodegiOS/Features/Settings/Agents/AgentConfigPiView.swift @@ -159,7 +159,7 @@ struct PiConfigSection: View { Button { Task { await detectPiBinary() } } label: { Image(systemName: "arrow.clockwise").font(.body.weight(.medium)) } - .buttonStyle(.glass).tint(Theme.textSecondary) + .codegGlassButtonStyle().tint(Theme.textSecondary) .disabled(checkingPi || piOp != nil) .accessibilityLabel("Recheck") if !checkingPi { @@ -184,7 +184,7 @@ struct PiConfigSection: View { if validating { ProgressView().controlSize(.small) } else { Label("Validate", systemImage: "terminal").labelStyle(.titleAndIcon) } } - .font(.subheadline.weight(.medium)).buttonStyle(.glass).tint(Theme.accent) + .font(.subheadline.weight(.medium)).codegGlassButtonStyle().tint(Theme.accent) .disabled(validating || command.trimmingCharacters(in: .whitespaces).isEmpty) } } @@ -313,9 +313,9 @@ struct PiConfigSection: View { .padding(.horizontal, 14).padding(.vertical, 5) } if prominent { - label.buttonStyle(.glassProminent).tint(Theme.accent).disabled(disabled) + label.codegGlassButtonStyle(prominent: true).tint(Theme.accent).disabled(disabled) } else { - label.buttonStyle(.glass).tint(Theme.accent).disabled(disabled) + label.codegGlassButtonStyle().tint(Theme.accent).disabled(disabled) } } diff --git a/CodegiOS/Features/Settings/Agents/AgentDetailView.swift b/CodegiOS/Features/Settings/Agents/AgentDetailView.swift index 82718fd..d9b406b 100644 --- a/CodegiOS/Features/Settings/Agents/AgentDetailView.swift +++ b/CodegiOS/Features/Settings/Agents/AgentDetailView.swift @@ -308,7 +308,7 @@ struct AgentDetailView: View { Text(primary.label).fontWeight(.semibold) .padding(.horizontal, 18).padding(.vertical, 5) } - .buttonStyle(.glassProminent).tint(Theme.accent) + .codegGlassButtonStyle(prominent: true).tint(Theme.accent) .disabled(isInstalling || primary.disabled) Spacer(minLength: 0) if !secondary.isEmpty { versionMenu(secondary, iconOnly: true) } @@ -334,7 +334,7 @@ struct AgentDetailView: View { .font(.subheadline.weight(.medium)).padding(.horizontal, 16).padding(.vertical, 7) } } - .buttonStyle(.glass).tint(iconOnly ? Theme.textSecondary : Theme.accent) + .codegGlassButtonStyle().tint(iconOnly ? Theme.textSecondary : Theme.accent) .accessibilityLabel(iconOnly ? "More version actions" : "Manage version") .disabled(isInstalling) } @@ -499,7 +499,7 @@ struct AgentDetailView: View { } label: { Label("Clear Binary Cache", systemImage: "trash").frame(maxWidth: .infinity).padding(.vertical, 4) } - .buttonStyle(.glass) + .codegGlassButtonStyle() .tint(Theme.danger) .disabled(isInstalling) } @@ -643,7 +643,7 @@ private struct FlowFixButtons: View { Button { onTap(fix) } label: { Text(fix.label).font(.caption.weight(.medium)).padding(.horizontal, 10).padding(.vertical, 5) } - .buttonStyle(.glass) + .codegGlassButtonStyle() .tint(Theme.accent) .disabled(disabled) } diff --git a/CodegiOS/Features/Settings/Agents/AgentsSettingsView.swift b/CodegiOS/Features/Settings/Agents/AgentsSettingsView.swift index a770a46..e2b87bb 100644 --- a/CodegiOS/Features/Settings/Agents/AgentsSettingsView.swift +++ b/CodegiOS/Features/Settings/Agents/AgentsSettingsView.swift @@ -88,7 +88,7 @@ struct AgentsSettingsView: View { .multilineTextAlignment(.center) .padding(.horizontal, 16) .padding(.vertical, 11) - .glassEffect(.regular.tint(Theme.accent.opacity(0.18)), in: Capsule()) + .codegGlassEffect(tint: Theme.accent.opacity(0.18), in: Capsule()) .padding(.horizontal, 24) .padding(.bottom, 18) .transition(.move(edge: .bottom).combined(with: .opacity)) diff --git a/CodegiOS/Features/Settings/ChatChannels/ChatChannelDetailView.swift b/CodegiOS/Features/Settings/ChatChannels/ChatChannelDetailView.swift index 800026b..9dc1c15 100644 --- a/CodegiOS/Features/Settings/ChatChannels/ChatChannelDetailView.swift +++ b/CodegiOS/Features/Settings/ChatChannels/ChatChannelDetailView.swift @@ -148,7 +148,7 @@ struct ChatChannelDetailView: View { .frame(maxWidth: .infinity) .padding(.vertical, 4) } - .buttonStyle(.glass) + .codegGlassButtonStyle() .tint(role == .destructive ? Theme.danger : Theme.accent) .disabled(model.busy) } @@ -215,7 +215,7 @@ struct ChatChannelDetailView: View { .multilineTextAlignment(.center) .padding(.horizontal, 16) .padding(.vertical, 11) - .glassEffect(.regular.tint(Theme.accent.opacity(0.18)), in: Capsule()) + .codegGlassEffect(tint: Theme.accent.opacity(0.18), in: Capsule()) .padding(.horizontal, 24) .padding(.bottom, 18) .transition(.move(edge: .bottom).combined(with: .opacity)) diff --git a/CodegiOS/Features/Settings/ChatChannels/ChatChannelsSettingsView.swift b/CodegiOS/Features/Settings/ChatChannels/ChatChannelsSettingsView.swift index e1bef11..8ba8747 100644 --- a/CodegiOS/Features/Settings/ChatChannels/ChatChannelsSettingsView.swift +++ b/CodegiOS/Features/Settings/ChatChannels/ChatChannelsSettingsView.swift @@ -179,7 +179,7 @@ struct ChatChannelsSettingsView: View { .multilineTextAlignment(.center) .padding(.horizontal, 16) .padding(.vertical, 11) - .glassEffect(.regular.tint(Theme.accent.opacity(0.18)), in: Capsule()) + .codegGlassEffect(tint: Theme.accent.opacity(0.18), in: Capsule()) .padding(.horizontal, 24) .padding(.bottom, 18) .transition(.move(edge: .bottom).combined(with: .opacity)) diff --git a/CodegiOS/Features/Settings/ChatChannels/WeixinQRView.swift b/CodegiOS/Features/Settings/ChatChannels/WeixinQRView.swift index 4bba29c..16d20b7 100644 --- a/CodegiOS/Features/Settings/ChatChannels/WeixinQRView.swift +++ b/CodegiOS/Features/Settings/ChatChannels/WeixinQRView.swift @@ -87,7 +87,7 @@ struct WeixinQRView: View { Button { attempt += 1 } label: { Label("Refresh QR Code", systemImage: "arrow.clockwise") } - .buttonStyle(.glass) + .codegGlassButtonStyle() .tint(Theme.accent) } diff --git a/CodegiOS/Features/Settings/ModelProviders/ModelProvidersSettingsView.swift b/CodegiOS/Features/Settings/ModelProviders/ModelProvidersSettingsView.swift index b0bc362..7f3ec37 100644 --- a/CodegiOS/Features/Settings/ModelProviders/ModelProvidersSettingsView.swift +++ b/CodegiOS/Features/Settings/ModelProviders/ModelProvidersSettingsView.swift @@ -125,7 +125,7 @@ struct ModelProvidersSettingsView: View { .multilineTextAlignment(.center) .padding(.horizontal, 16) .padding(.vertical, 11) - .glassEffect(.regular.tint(Theme.accent.opacity(0.18)), in: Capsule()) + .codegGlassEffect(tint: Theme.accent.opacity(0.18), in: Capsule()) .padding(.horizontal, 24) .padding(.bottom, 18) .transition(.move(edge: .bottom).combined(with: .opacity)) diff --git a/CodegiOS/Features/Settings/System/SystemSettingsView.swift b/CodegiOS/Features/Settings/System/SystemSettingsView.swift index 42cff51..065576f 100644 --- a/CodegiOS/Features/Settings/System/SystemSettingsView.swift +++ b/CodegiOS/Features/Settings/System/SystemSettingsView.swift @@ -143,7 +143,7 @@ struct SystemSettingsView: View { Text("Test") } } - .buttonStyle(.glass).tint(Theme.accent) + .codegGlassButtonStyle().tint(Theme.accent) .disabled(model.probing || model.customShellPath.trimmingCharacters(in: .whitespaces).isEmpty) if let probe = model.probeResult { Label(probe ? "Executable found" : "Not found", systemImage: probe ? "checkmark.circle" : "xmark.circle") @@ -223,7 +223,7 @@ struct SystemSettingsView: View { .foregroundStyle(Theme.textPrimary) .multilineTextAlignment(.center) .padding(.horizontal, 16).padding(.vertical, 11) - .glassEffect(.regular.tint(Theme.accent.opacity(0.18)), in: Capsule()) + .codegGlassEffect(tint: Theme.accent.opacity(0.18), in: Capsule()) .padding(.horizontal, 24).padding(.bottom, 18) .transition(.move(edge: .bottom).combined(with: .opacity)) .task(id: toast) { diff --git a/CodegiOS/Features/Settings/VersionControl/VersionControlSettingsView.swift b/CodegiOS/Features/Settings/VersionControl/VersionControlSettingsView.swift index a4baedc..8c32dd4 100644 --- a/CodegiOS/Features/Settings/VersionControl/VersionControlSettingsView.swift +++ b/CodegiOS/Features/Settings/VersionControl/VersionControlSettingsView.swift @@ -131,10 +131,10 @@ struct VersionControlSettingsView: View { Text("Test") } } - .buttonStyle(.glass).tint(Theme.accent) + .codegGlassButtonStyle().tint(Theme.accent) .disabled(model.testing || model.customPath.trimmingCharacters(in: .whitespaces).isEmpty) Button("Save Path") { Task { await model.saveCustomPath() } } - .buttonStyle(.glassProminent).tint(Theme.accent) + .codegGlassButtonStyle(prominent: true).tint(Theme.accent) Spacer(minLength: 0) } .padding(.horizontal, 16).padding(.vertical, 11) @@ -182,7 +182,7 @@ struct VersionControlSettingsView: View { .foregroundStyle(Theme.textPrimary) .multilineTextAlignment(.center) .padding(.horizontal, 16).padding(.vertical, 11) - .glassEffect(.regular.tint(Theme.accent.opacity(0.18)), in: Capsule()) + .codegGlassEffect(tint: Theme.accent.opacity(0.18), in: Capsule()) .padding(.horizontal, 24).padding(.bottom, 18) .transition(.move(edge: .bottom).combined(with: .opacity)) .task(id: toast) { diff --git a/CodegiOS/Resources/Localizable.xcstrings b/CodegiOS/Resources/Localizable.xcstrings index 28c5f3a..1e866a6 100644 --- a/CodegiOS/Resources/Localizable.xcstrings +++ b/CodegiOS/Resources/Localizable.xcstrings @@ -1,1624 +1,6 @@ { "sourceLanguage" : "en", "strings" : { - "Cursor Configuration" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cursor 配置" - } - } - } - }, - "Both methods sign in to Cursor’s own backend — cursor-agent has no custom-endpoint support, so there is no API URL to set." : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "两种方式都登录 Cursor 自己的后端——cursor-agent 不支持自定义接入点,因此无需填写 API 地址。" - } - } - } - }, - "Authentication Method" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "认证方式" - } - } - } - }, - "Cursor API Key" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cursor API 密钥" - } - } - } - }, - "Sign in with your Cursor account in a terminal. No credential is stored here." : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在终端中使用你的 Cursor 账号登录,此处不保存任何凭据。" - } - } - } - }, - "A Cursor Dashboard account key for headless or server machines — an alternative to signing in." : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "供无界面或服务器环境使用的 Cursor Dashboard 账号密钥,可替代浏览器登录。" - } - } - } - }, - "Account" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "账号" - } - } - } - }, - "Create one in the Cursor Dashboard under Integrations." : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "可在 Cursor Dashboard 的 Integrations 中创建。" - } - } - } - }, - "Sign in to load the model list." : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "登录后才能加载模型列表。" - } - } - } - }, - "cursor-agent isn’t installed" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "尚未安装 cursor-agent" - } - } - } - }, - "Not signed in" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未登录" - } - } - } - }, - "Signed in" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已登录" - } - } - } - }, - "Run this on the machine hosting codeg, then refresh:" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在运行 codeg 的机器上执行以下命令,然后点击刷新:" - } - } - } - }, - "Passed to cursor-agent as its --model flag. Leave unset to use the account default." : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "作为 --model 参数传给 cursor-agent。留空则使用账号默认模型。" - } - } - } - }, - "Default Model" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "默认模型" - } - } - } - }, - "Account default" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "账号默认" - } - } - } - }, - "Loading models…" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "正在加载模型…" - } - } - } - }, - "Permissions" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "权限" - } - } - } - }, - "Rules and sandbox merge into ~/.cursor/cli-config.json, preserving keys the Cursor CLI wrote. Running sessions pick them up after a restart." : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "规则与沙盒会合并进 ~/.cursor/cli-config.json,并保留 Cursor CLI 自己写入的其它键。运行中的会话需重启后生效。" - } - } - } - }, - "Run Everything" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "全部放行" - } - } - } - }, - "Cursor runs commands without asking. Deny rules below still apply." : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cursor 执行命令时不再询问,下方的拒绝规则仍然生效。" - } - } - } - }, - "Cursor asks before running commands." : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cursor 执行命令前会先询问。" - } - } - } - }, - "Sandbox" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "沙盒" - } - } - } - }, - "Disabled" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已禁用" - } - } - } - }, - "Allow Rules" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "允许规则" - } - } - } - }, - "Deny Rules" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "拒绝规则" - } - } - } - }, - "Add allow rule" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "添加允许规则" - } - } - } - }, - "Add deny rule" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "添加拒绝规则" - } - } - } - }, - "Enter your Cursor API key, or switch to Official Subscription." : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "请填写 Cursor API 密钥,或切换为官方订阅。" - } - } - } - }, - "Compacting context…" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "正在压缩上下文…" - } - } - } - }, - "Context compacted" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "上下文已压缩" - } - } - } - }, - "Context compacted · %@ → %@ tokens" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "上下文已压缩 · %1$@ → %2$@ tokens" - } - } - } - }, - "Plan ready for review" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "计划已就绪,待确认" - } - } - } - }, - "Approve to start building, or send notes to have the plan revised." : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "批准后开始实施,或提交修改意见让其重新调整计划。" - } - } - } - }, - "The agent didn’t include a plan." : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "该智能体没有给出计划内容。" - } - } - } - }, - "What should change?" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "需要修改什么?" - } - } - } - }, - "Send Notes" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "发送意见" - } - } - } - }, - "Request Changes" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "要求修改" - } - } - } - }, - "Approve & Build" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "批准并实施" - } - } - } - }, - "Abandon Plan" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "放弃计划" - } - } - } - }, - "Entered plan mode" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已进入计划模式" - } - } - } - }, - "Plan ready" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "计划已就绪" - } - } - } - }, - "Switched mode" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已切换模式" - } - } - } - }, - "Grok Configuration" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Grok 配置" - } - } - } - }, - "The controls below merge into ~/.grok/config.toml, preserving your other keys and comments. Other keys stay editable under Advanced." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "下面的控件会合并写入 ~/.grok/config.toml,保留你的其它键与注释。其它键可在「高级」中编辑。" - } - } - } - }, - "Permission Mode" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "权限模式" - } - } - } - }, - "Use default" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "使用默认" - } - } - } - }, - "Ask every time" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "每次询问" - } - } - } - }, - "Always approve" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "始终允许" - } - } - } - }, - "Low (faster)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "低(更快)" - } - } - } - }, - "Medium (balanced)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "中(均衡)" - } - } - } - }, - "Max" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "最高" - } - } - } - }, - "XAI_API_KEY is configured." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已配置 XAI_API_KEY。" - } - } - } - }, - "No XAI_API_KEY set." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未设置 XAI_API_KEY。" - } - } - } - }, - "Saved as XAI_API_KEY for this agent, or run “grok login” in a terminal for subscription sign-in (SuperGrok / X Premium+)." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已保存为该 agent 的 XAI_API_KEY,或在终端运行“grok login”进行订阅登录(SuperGrok / X Premium+)。" - } - } - } - }, - "CodeBuddy Configuration" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "CodeBuddy 配置" - } - } - } - }, - "CodeBuddy authenticates with an API key. Mainland China builds also require the environment set to “China (internal)”; iOA builds use “iOA”. The overseas build leaves it unset." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "CodeBuddy 使用 API 密钥认证。中国大陆版还需将环境设为“中国(内网)”,iOA 版使用“iOA”,海外版则保持未设置。" - } - } - } - }, - "Saved as CODEBUDDY_API_KEY for this agent. Use the key issued by your private deployment." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "作为 CODEBUDDY_API_KEY 保存到该智能体。请使用你的私有化部署所签发的密钥。" - } - } - } - }, - "Saved as CODEBUDDY_API_KEY for this agent. Alternatively, sign in with the CodeBuddy CLI in a terminal." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "作为 CODEBUDDY_API_KEY 保存到该智能体。也可以在终端用 CodeBuddy CLI 登录。" - } - } - } - }, - "Environment" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "环境" - } - } - } - }, - "Overseas (default)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "海外(默认)" - } - } - } - }, - "China (internal)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "中国(内网)" - } - } - } - }, - "iOA" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "iOA" - } - } - } - }, - "Self-hosted (private deployment)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "自托管(私有化部署)" - } - } - } - }, - "Deployment URL" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "部署地址" - } - } - } - }, - "Enter a valid http(s) URL." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "请输入有效的 http(s) 地址。" - } - } - } - }, - "Saved as CODEBUDDY_BASE_URL and points CodeBuddy at your private endpoint. The region setting is left unset for self-hosted deployments." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "作为 CODEBUDDY_BASE_URL 保存,将 CodeBuddy 指向你的私有端点。自托管部署下区域设置保持未设置。" - } - } - } - }, - "Sets CODEBUDDY_INTERNET_ENVIRONMENT. Mainland China must use “China (internal)”; the overseas build leaves it unset." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "设置 CODEBUDDY_INTERNET_ENVIRONMENT。中国大陆须使用“中国(内网)”,海外版保持未设置。" - } - } - } - }, - "No API key? Run “codebuddy” in a terminal to sign in with your Tencent account instead." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "没有 API 密钥?可在终端运行“codebuddy”改用腾讯账号登录。" - } - } - } - }, - "Enter a valid http(s) URL for the self-hosted deployment." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "请为自托管部署输入有效的 http(s) 地址。" - } - } - } - }, - "Kimi Code Configuration" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kimi Code 配置" - } - } - } - }, - "`kimi acp` only authenticates with a stored login token and rejects API keys on their own. To use an API key, codeg writes a managed ~/.kimi-code/config.toml provider AND seeds a local gate token so the session opens — inference still runs on your key." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "`kimi acp` 只认可已存储的登录令牌,单独的 API 密钥会被拒绝。为支持 API 密钥,codeg 会写入受管的 ~/.kimi-code/config.toml 供应商,并植入一个本地闸门令牌以打开会话——推理仍走你的密钥。" - } - } - } - }, - "Authentication method" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "认证方式" - } - } - } - }, - "Kimi account login (subscription)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kimi 账号登录(订阅)" - } - } - } - }, - "“API key” writes a codeg-managed config.toml provider and seeds a gate token. “Login” clears that and uses a real `kimi login` session (requires a Kimi subscription)." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "“API 密钥”会写入由 codeg 管理的 config.toml 供应商并植入闸门令牌。“登录”会清除它,改用真正的 `kimi login` 会话(需要 Kimi 订阅)。" - } - } - } - }, - "Run `kimi login` in a terminal to sign in with a Kimi subscription account (device-code OAuth). codeg stores nothing and reuses Kimi’s own login. Saving here removes codeg’s API-key gate token." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在终端运行 `kimi login`,用 Kimi 订阅账号登录(设备码 OAuth)。codeg 不存储任何内容,复用 Kimi 自己的登录。在此保存会移除 codeg 的 API 密钥闸门令牌。" - } - } - } - }, - "Save Kimi Code Config" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存 Kimi Code 配置" - } - } - } - }, - "Provider type" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "供应商类型" - } - } - } - }, - "The provider protocol Kimi speaks (config.toml `type`). Use Kimi / Moonshot for a Moonshot / platform.kimi.com key." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kimi 使用的供应商协议(config.toml 的 `type`)。使用 Moonshot / platform.kimi.com 密钥时选 Kimi / Moonshot。" - } - } - } - }, - "International (api.moonshot.ai)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "国际(api.moonshot.ai)" - } - } - } - }, - "China (api.moonshot.cn)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "中国(api.moonshot.cn)" - } - } - } - }, - "Custom (OpenAI-compatible)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "自定义(OpenAI 兼容)" - } - } - } - }, - "International = api.moonshot.ai; China (platform.kimi.com keys) = api.moonshot.cn. Custom points at any OpenAI-compatible endpoint." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "国际 = api.moonshot.ai;中国(platform.kimi.com 密钥)= api.moonshot.cn。自定义可指向任意 OpenAI 兼容端点。" - } - } - } - }, - "Leave blank to use the provider SDK default." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "留空则使用供应商 SDK 的默认值。" - } - } - } - }, - "Written to ~/.kimi-code/config.toml and used for inference. From platform.kimi.com or platform.kimi.ai." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "写入 ~/.kimi-code/config.toml 并用于推理。来自 platform.kimi.com 或 platform.kimi.ai。" - } - } - } - }, - "Advanced: credential placement" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "高级:凭据写入位置" - } - } - } - }, - "Inline api_key" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "内联 api_key" - } - } - } - }, - "Provider env sub-table" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "供应商 env 子表" - } - } - } - }, - "Where the API key is written inside config.toml." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "API 密钥在 config.toml 中的写入位置。" - } - } - } - }, - "GCP project (GOOGLE_CLOUD_PROJECT)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "GCP 项目(GOOGLE_CLOUD_PROJECT)" - } - } - } - }, - "GCP location (GOOGLE_CLOUD_LOCATION)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "GCP 区域(GOOGLE_CLOUD_LOCATION)" - } - } - } - }, - "Vertex AI uses Google Application Default Credentials — run `gcloud auth application-default login` (no API key)." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vertex AI 使用 Google 应用默认凭据——请运行 `gcloud auth application-default login`(无需 API 密钥)。" - } - } - } - }, - "The model id to use. Click Fetch to list the models your key can access (e.g. kimi-k2.7-code) — avoids “model not found” errors." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "要使用的模型 id。点“获取”可列出你的密钥能访问的模型(如 kimi-k2.7-code)——避免“找不到模型”的错误。" - } - } - } - }, - "Max context size (optional)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "最大上下文长度(可选)" - } - } - } - }, - "Tokens, e.g. 262144. Leave blank to use the model default." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "以 token 计,如 262144。留空则使用模型默认值。" - } - } - } - }, - "Advanced: edit config.toml directly" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "高级:直接编辑 config.toml" - } - } - } - }, - "Written verbatim (comments preserved) and validated as TOML. codeg also seeds the gate token so the session opens." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "原样写入(保留注释)并按 TOML 校验。codeg 还会植入闸门令牌以打开会话。" - } - } - } - }, - "Save config.toml" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存 config.toml" - } - } - } - }, - "Authenticated via a Kimi account login." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已通过 Kimi 账号登录认证。" - } - } - } - }, - "Authenticated via API key (codeg seeded the local gate token)." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已通过 API 密钥认证(codeg 已植入本地闸门令牌)。" - } - } - } - }, - "Not authenticated yet — save an API key below (or sign in) to open Kimi sessions." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "尚未认证——请在下方保存 API 密钥(或登录)以打开 Kimi 会话。" - } - } - } - }, - "Enter a model id (Kimi requires one for API-key mode)." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "请输入模型 id(API 密钥模式下 Kimi 必须指定)。" - } - } - } - }, - "Kimi Code config saved" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kimi Code 配置已保存" - } - } - } - }, - "Enter an API key and endpoint first" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "请先输入 API 密钥和端点" - } - } - } - }, - "Key works, but no models were returned" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "密钥有效,但未返回任何模型" - } - } - } - }, - "Couldn’t list models — check the key and endpoint" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无法列出模型——请检查密钥和端点" - } - } - } - }, - "Runtime" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "运行时" - } - } - } - }, - "Choose which pi binary runs. Use the default, or point at your own pi build." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "选择运行哪个 pi 可执行文件。使用默认值,或指向你自己的 pi 构建。" - } - } - } - }, - "Default pi" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "默认 pi" - } - } - } - }, - "Custom pi" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "自定义 pi" - } - } - } - }, - "Use the bundled pi-acp adapter with the pi on your PATH. Install pi with: npm install -g @earendil-works/pi-coding-agent" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "使用内置的 pi-acp 适配器和 PATH 中的 pi。安装 pi:npm install -g @earendil-works/pi-coding-agent" - } - } - } - }, - "Run your own pi build, install, or wrapper." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "运行你自己的 pi 构建、安装或包装脚本。" - } - } - } - }, - "Enter a pi command to save" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "请输入 pi 命令后再保存" - } - } - } - }, - "Save Runtime" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存运行时" - } - } - } - }, - "Recheck" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "重新检查" - } - } - } - }, - "Install pi" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "安装 pi" - } - } - } - }, - "pi command or path" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "pi 命令或路径" - } - } - } - }, - "Validate" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "校验" - } - } - } - }, - "Command not found" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "找不到命令" - } - } - } - }, - "An absolute path, a command name on PATH, or a wrapper script (e.g. a monorepo ./pi-test.sh)." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "绝对路径、PATH 中的命令名,或包装脚本(如 monorepo 里的 ./pi-test.sh)。" - } - } - } - }, - "Config directory (PI_CODING_AGENT_DIR)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "配置目录(PI_CODING_AGENT_DIR)" - } - } - } - }, - "With a custom config directory, the Skills, Experts, and Office tools managed in Settings won’t apply to this pi — manage its skills in that folder directly." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "使用自定义配置目录后,设置中管理的技能、专家和 Office 工具将不适用于此 pi——请直接在该目录中管理其技能。" - } - } - } - }, - "Sessions directory (PI_CODING_AGENT_SESSION_DIR)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "会话目录(PI_CODING_AGENT_SESSION_DIR)" - } - } - } - }, - "Custom pi flags (--approve, -e, …) aren’t forwarded by pi-acp — wrap pi in a script and point the command at it." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "自定义 pi 参数(--approve、-e 等)不会被 pi-acp 转发——请将 pi 包进脚本并把命令指向该脚本。" - } - } - } - }, - "Pi Configuration" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pi 配置" - } - } - } - }, - "Pi authenticates with your model provider’s API key. The key is written to ~/.pi/agent/auth.json and the model selection to settings.json." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pi 使用你的模型供应商 API 密钥认证。密钥写入 ~/.pi/agent/auth.json,模型选择写入 settings.json。" - } - } - } - }, - "Custom provider…" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "自定义供应商……" - } - } - } - }, - "Select a provider" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "选择一个供应商" - } - } - } - }, - "Thinking" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "思考强度" - } - } - } - }, - "Off" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "关闭" - } - } - } - }, - "Minimal" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "最小" - } - } - } - }, - "Extra high" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "超高" - } - } - } - }, - "•••••• (saved — leave blank to keep)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "••••••(已保存——留空则保持不变)" - } - } - } - }, - "Stored in ~/.pi/agent/auth.json for the selected provider." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "为所选供应商保存到 ~/.pi/agent/auth.json。" - } - } - } - }, - "Save Pi Config" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存 Pi 配置" - } - } - } - }, - "Provider ID" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "供应商 ID" - } - } - } - }, - "API protocol" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "API 协议" - } - } - } - }, - "API endpoint (Base URL)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "API 端点(Base URL)" - } - } - } - }, - "Defines a provider in ~/.pi/agent/models.json at your endpoint. Most self-hosted or proxy servers use openai-completions." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在 ~/.pi/agent/models.json 中按你的端点定义一个供应商。多数自托管或代理服务器使用 openai-completions。" - } - } - } - }, - "Auto-trust opened workspaces" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "自动信任已打开的工作区" - } - } - } - }, - "When codeg connects pi to a folder, mark that folder trusted so pi loads the project’s local config and skills without a separate prompt." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "当 codeg 将 pi 连接到某文件夹时,把该文件夹标记为受信任,使 pi 无需额外提示即可加载项目的本地配置和技能。" - } - } - } - }, - "Only folders you open here are trusted, never your whole machine — and this affects config loading only, not what pi is allowed to run." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "只有你在此打开的文件夹会被信任,绝不会信任整台机器——且这只影响配置加载,不影响 pi 被允许执行的操作。" - } - } - } - }, - "Provider and model are required" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "供应商和模型为必填项" - } - } - } - }, - "API endpoint (Base URL) is required" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "API 端点(Base URL)为必填项" - } - } - } - }, - "Pi runtime saved" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pi 运行时已保存" - } - } - } - }, - "Pi config saved" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pi 配置已保存" - } - } - } - }, - "pi installed" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "pi 已安装" - } - } - } - }, - "Failed to install pi" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "安装 pi 失败" - } - } - } - }, - "pi uninstalled" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "pi 已卸载" - } - } - } - }, - "Failed to uninstall pi" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "卸载 pi 失败" - } - } - } - }, - "Failed to save workspace trust" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存工作区信任失败" - } - } - } - }, "… file truncated at %@ lines" : { }, @@ -1646,6 +28,17 @@ } } }, + "“API key” writes a codeg-managed config.toml provider and seeds a gate token. “Login” clears that and uses a real `kimi login` session (requires a Kimi subscription)." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "“API 密钥”会写入由 codeg 管理的 config.toml 供应商并植入闸门令牌。“登录”会清除它,改用真正的 `kimi login` 会话(需要 Kimi 订阅)。" + } + } + } + }, "“System” follows your device's Light / Dark setting." : { "extractionState" : "stale", "localizations" : { @@ -1865,13 +258,35 @@ } } }, - "%lld unpushed" : { - "extractionState" : "stale", + "%lld unpushed" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld 个待推送" + } + } + } + }, + "•••••• (saved — leave blank to keep)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••(已保存——留空则保持不变)" + } + } + } + }, + "`kimi acp` only authenticates with a stored login token and rejects API keys on their own. To use an API key, codeg writes a managed ~/.kimi-code/config.toml provider AND seeds a local gate token so the session opens — inference still runs on your key." : { + "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "%lld 个待推送" + "value" : "`kimi acp` 只认可已存储的登录令牌,单独的 API 密钥会被拒绝。为支持 API 密钥,codeg 会写入受管的 ~/.kimi-code/config.toml 供应商,并植入一个本地闸门令牌以打开会话——推理仍走你的密钥。" } } } @@ -1904,6 +319,17 @@ } } }, + "A Cursor Dashboard account key for headless or server machines — an alternative to signing in." : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "供无界面或服务器环境使用的 Cursor Dashboard 账号密钥,可替代浏览器登录。" + } + } + } + }, "A token with repo scope. We validate it before saving." : { "extractionState" : "stale", "localizations" : { @@ -1926,6 +352,16 @@ } } }, + "Abandon Plan" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "放弃计划" + } + } + } + }, "About" : { "localizations" : { "zh-Hans" : { @@ -1957,6 +393,28 @@ } } }, + "Account" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "账号" + } + } + } + }, + "Account default" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "账号默认" + } + } + } + }, "Active server" : { "extractionState" : "stale", "localizations" : { @@ -2045,6 +503,17 @@ } } }, + "Add allow rule" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "添加允许规则" + } + } + } + }, "Add Channel" : { "extractionState" : "stale", "localizations" : { @@ -2056,6 +525,17 @@ } } }, + "Add deny rule" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "添加拒绝规则" + } + } + } + }, "Add Folder" : { "extractionState" : "stale", "localizations" : { @@ -2242,6 +722,28 @@ } } }, + "Advanced: credential placement" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "高级:凭据写入位置" + } + } + } + }, + "Advanced: edit config.toml directly" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "高级:直接编辑 config.toml" + } + } + } + }, "Agent" : { "localizations" : { "zh-Hans" : { @@ -2350,6 +852,17 @@ } } }, + "Allow Rules" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "允许规则" + } + } + } + }, "Allowed actions" : { "extractionState" : "manual", "localizations" : { @@ -2372,6 +885,28 @@ } } }, + "Always approve" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "始终允许" + } + } + } + }, + "An absolute path, a command name on PATH, or a wrapper script (e.g. a monorepo ./pi-test.sh)." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "绝对路径、PATH 中的命令名,或包装脚本(如 monorepo 里的 ./pi-test.sh)。" + } + } + } + }, "Answer below, then submit. You can skip anytime." : { "extractionState" : "manual", "localizations" : { @@ -2393,6 +928,28 @@ } } }, + "API endpoint (Base URL)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "API 端点(Base URL)" + } + } + } + }, + "API endpoint (Base URL) is required" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "API 端点(Base URL)为必填项" + } + } + } + }, "API key" : { "extractionState" : "stale", "localizations" : { @@ -2426,6 +983,17 @@ } } }, + "API protocol" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "API 协议" + } + } + } + }, "API URL" : { "extractionState" : "stale", "localizations" : { @@ -2454,68 +1022,164 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "应用版本" + "value" : "应用版本" + } + } + } + }, + "Appearance" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "外观" + } + } + } + }, + "Approve & Build" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "批准并实施" + } + } + } + }, + "Approve to start building, or send notes to have the plan revised." : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "批准后开始实施,或提交修改意见让其重新调整计划。" + } + } + } + }, + "Args" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "参数" + } + } + } + }, + "Ask every time" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "每次询问" + } + } + } + }, + "Ask-user questions" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "向用户提问" + } + } + } + }, + "Attach" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "附加" + } + } + } + }, + "Auth Config" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "认证配置" + } + } + } + }, + "Auth Mode" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "认证方式" } } } }, - "Appearance" : { + "Authenticate" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "外观" + "value" : "验证身份" } } } }, - "Args" : { + "Authenticated via a Kimi account login." : { "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "参数" + "value" : "已通过 Kimi 账号登录认证。" } } } }, - "Ask-user questions" : { + "Authenticated via API key (codeg seeded the local gate token)." : { "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "向用户提问" + "value" : "已通过 API 密钥认证(codeg 已植入本地闸门令牌)。" } } } }, - "Attach" : { + "Authentication" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "附加" + "value" : "身份验证" } } } }, - "Auth Config" : { - "extractionState" : "stale", + "Authentication failed. Check your credentials and try again." : { "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "认证配置" + "value" : "身份验证失败。请检查凭据后重试。" } } } }, - "Auth Mode" : { - "extractionState" : "stale", + "Authentication method" : { + "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { @@ -2525,78 +1189,79 @@ } } }, - "Authenticate" : { + "Authentication Method" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "验证身份" + "value" : "认证方式" } } } }, - "Authentication" : { + "Authentication required." : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "身份验证" + "value" : "需要身份验证。" } } } }, - "Authentication failed. Check your credentials and try again." : { + "Auto-trust opened workspaces" : { + "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "身份验证失败。请检查凭据后重试。" + "value" : "自动信任已打开的工作区" } } } }, - "Authentication required." : { - "extractionState" : "stale", + "Background" : { + "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "需要身份验证。" + "value" : "后台" } } } }, - "Background" : { - "extractionState" : "manual", + "Base URL" : { + "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "后台" + "value" : "基础 URL" } } } }, - "Base URL" : { + "Bot Token" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "基础 URL" + "value" : "机器人令牌" } } } }, - "Bot Token" : { + "Both methods sign in to Cursor’s own backend — cursor-agent has no custom-endpoint support, so there is no API URL to set." : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "机器人令牌" + "value" : "两种方式都登录 Cursor 自己的后端——cursor-agent 不支持自定义接入点,因此无需填写 API 地址。" } } } @@ -2863,6 +1528,28 @@ } } }, + "China (api.moonshot.cn)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "中国(api.moonshot.cn)" + } + } + } + }, + "China (internal)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "中国(内网)" + } + } + } + }, "Choose a folder" : { "localizations" : { "zh-Hans" : { @@ -2928,6 +1615,17 @@ } } }, + "Choose which pi binary runs. Use the default, or point at your own pi build." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "选择运行哪个 pi 可执行文件。使用默认值,或指向你自己的 pi 构建。" + } + } + } + }, "Clear" : { "extractionState" : "stale", "localizations" : { @@ -2983,6 +1681,28 @@ } } }, + "CodeBuddy authenticates with an API key. Mainland China builds also require the environment set to “China (internal)”; iOA builds use “iOA”. The overseas build leaves it unset." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "CodeBuddy 使用 API 密钥认证。中国大陆版还需将环境设为“中国(内网)”,iOA 版使用“iOA”,海外版则保持未设置。" + } + } + } + }, + "CodeBuddy Configuration" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "CodeBuddy 配置" + } + } + } + }, "Codeg" : { }, @@ -3028,6 +1748,17 @@ } } }, + "Command not found" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "找不到命令" + } + } + } + }, "Command Prefix" : { "extractionState" : "stale", "localizations" : { @@ -3125,6 +1856,16 @@ } } }, + "Compacting context…" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "正在压缩上下文…" + } + } + } + }, "Completed-result cache" : { "extractionState" : "manual", "localizations" : { @@ -3146,6 +1887,17 @@ } } }, + "Config directory (PI_CODING_AGENT_DIR)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "配置目录(PI_CODING_AGENT_DIR)" + } + } + } + }, "Configuration" : { "extractionState" : "stale", "localizations" : { @@ -3244,6 +1996,26 @@ } } }, + "Context compacted" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "上下文已压缩" + } + } + } + }, + "Context compacted · %@ → %@ tokens" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "上下文已压缩 · %1$@ → %2$@ tokens" + } + } + } + }, "Conversation Tools" : { "extractionState" : "stale", "localizations" : { @@ -3272,171 +2044,259 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "复制" + "value" : "复制" + } + } + } + }, + "Copy file contents" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "复制文件内容" + } + } + } + }, + "Couldn’t list models — check the key and endpoint" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法列出模型——请检查密钥和端点" + } + } + } + }, + "Couldn’t Read QR Code" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法读取二维码" + } + } + } + }, + "Couldn’t Save" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法保存" + } + } + } + }, + "Couldn’t Save Channel" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法保存渠道" + } + } + } + }, + "Couldn’t Save MCP Server" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法保存 MCP 服务器" + } + } + } + }, + "Couldn’t Save Provider" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法保存供应商" + } + } + } + }, + "Couldn’t Save Server" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法保存服务器" } } } }, - "Copy file contents" : { + "Couldn’t Save Skill" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "复制文件内容" + "value" : "无法保存技能" } } } }, - "Couldn’t Read QR Code" : { - "extractionState" : "stale", + "Couldn’t submit. Please try again." : { + "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "无法读取二维码" + "value" : "提交失败,请重试。" } } } }, - "Couldn’t Save" : { - "extractionState" : "stale", + "Create" : { + "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "无法保存" + "value" : "创建" } } } }, - "Couldn’t Save Channel" : { + "Create a skill to guide this agent." : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "无法保存渠道" + "value" : "创建一个技能来指导该智能体。" } } } }, - "Couldn’t Save MCP Server" : { + "Create one in the Cursor Dashboard under Integrations." : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "无法保存 MCP 服务器" + "value" : "可在 Cursor Dashboard 的 Integrations 中创建。" } } } }, - "Couldn’t Save Provider" : { + "Create reusable message templates to drop into the chat composer." : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "无法保存供应商" + "value" : "创建可复用的消息模板,随时插入聊天输入框。" } } } }, - "Couldn’t Save Server" : { + "Created" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "无法保存服务器" + "value" : "创建时间" } } } }, - "Couldn’t Save Skill" : { + "Credentials" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "无法保存技能" + "value" : "凭据" } } } }, - "Couldn’t submit. Please try again." : { - "extractionState" : "manual", + "Current version %@" : { "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "提交失败,请重试。" + "value" : "当前版本 %@" } } } }, - "Create" : { - "extractionState" : "manual", + "Cursor API Key" : { + "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "创建" + "value" : "Cursor API 密钥" } } } }, - "Create a skill to guide this agent." : { + "Cursor asks before running commands." : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "创建一个技能来指导该智能体。" + "value" : "Cursor 执行命令前会先询问。" } } } }, - "Create reusable message templates to drop into the chat composer." : { + "Cursor Configuration" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "创建可复用的消息模板,随时插入聊天输入框。" + "value" : "Cursor 配置" } } } }, - "Created" : { + "Cursor runs commands without asking. Deny rules below still apply." : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "创建时间" + "value" : "Cursor 执行命令时不再询问,下方的拒绝规则仍然生效。" } } } }, - "Credentials" : { + "cursor-agent isn’t installed" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "凭据" + "value" : "尚未安装 cursor-agent" } } } }, - "Current version %@" : { + "Custom (OpenAI-compatible)" : { + "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "当前版本 %@" + "value" : "自定义(OpenAI 兼容)" } } } @@ -3485,6 +2345,39 @@ } } }, + "Custom pi" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自定义 pi" + } + } + } + }, + "Custom pi flags (--approve, -e, …) aren’t forwarded by pi-acp — wrap pi in a script and point the command at it." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自定义 pi 参数(--approve、-e 等)不会被 pi-acp 转发——请将 pi 包进脚本并把命令指向该脚本。" + } + } + } + }, + "Custom provider…" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自定义供应商……" + } + } + } + }, "Daily report" : { "localizations" : { "zh-Hans" : { @@ -3581,6 +2474,17 @@ } } }, + "Default Model" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "默认模型" + } + } + } + }, "Default Models by Tier" : { "localizations" : { "zh-Hans" : { @@ -3602,6 +2506,17 @@ } } }, + "Default pi" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "默认 pi" + } + } + } + }, "Default shell" : { "extractionState" : "stale", "localizations" : { @@ -3624,6 +2539,17 @@ } } }, + "Defines a provider in ~/.pi/agent/models.json at your endpoint. Most self-hosted or proxy servers use openai-completions." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在 ~/.pi/agent/models.json 中按你的端点定义一个供应商。多数自托管或代理服务器使用 openai-completions。" + } + } + } + }, "Delegation" : { "extractionState" : "stale", "localizations" : { @@ -3820,6 +2746,28 @@ } } }, + "Deny Rules" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "拒绝规则" + } + } + } + }, + "Deployment URL" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "部署地址" + } + } + } + }, "Depth limit" : { "extractionState" : "stale", "localizations" : { @@ -3886,6 +2834,17 @@ } } }, + "Disabled" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已禁用" + } + } + } + }, "Discard all changes to %@? This can't be undone." : { "localizations" : { "zh-Hans" : { @@ -4222,12 +3181,100 @@ } } }, + "Enter a model id (Kimi requires one for API-key mode)." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请输入模型 id(API 密钥模式下 Kimi 必须指定)。" + } + } + } + }, "Enter a new name for this session." : { "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "为此会话输入一个新名称。" + "value" : "为此会话输入一个新名称。" + } + } + } + }, + "Enter a pi command to save" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请输入 pi 命令后再保存" + } + } + } + }, + "Enter a valid http(s) URL for the self-hosted deployment." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请为自托管部署输入有效的 http(s) 地址。" + } + } + } + }, + "Enter a valid http(s) URL." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请输入有效的 http(s) 地址。" + } + } + } + }, + "Enter an API key and endpoint first" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请先输入 API 密钥和端点" + } + } + } + }, + "Enter your Cursor API key, or switch to Official Subscription." : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请填写 Cursor API 密钥,或切换为官方订阅。" + } + } + } + }, + "Entered plan mode" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已进入计划模式" + } + } + } + }, + "Environment" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "环境" } } } @@ -4329,6 +3376,17 @@ } } }, + "Extra high" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "超高" + } + } + } + }, "Extra High" : { "extractionState" : "stale", "localizations" : { @@ -4361,6 +3419,39 @@ } } }, + "Failed to install pi" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "安装 pi 失败" + } + } + } + }, + "Failed to save workspace trust" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存工作区信任失败" + } + } + } + }, + "Failed to uninstall pi" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "卸载 pi 失败" + } + } + } + }, "Fetch" : { "extractionState" : "stale", "localizations" : { @@ -4579,6 +3670,28 @@ } } }, + "GCP location (GOOGLE_CLOUD_LOCATION)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "GCP 区域(GOOGLE_CLOUD_LOCATION)" + } + } + } + }, + "GCP project (GOOGLE_CLOUD_PROJECT)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "GCP 项目(GOOGLE_CLOUD_PROJECT)" + } + } + } + }, "Gemini API Key" : { "extractionState" : "manual", "localizations" : { @@ -4677,6 +3790,17 @@ } } }, + "Grok Configuration" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Grok 配置" + } + } + } + }, "Hide" : { "extractionState" : "stale", "localizations" : { @@ -4752,6 +3876,17 @@ } } }, + "Inline api_key" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "内联 api_key" + } + } + } + }, "Insert" : { "extractionState" : "stale", "localizations" : { @@ -4796,6 +3931,17 @@ } } }, + "Install pi" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "安装 pi" + } + } + } + }, "Installed" : { "extractionState" : "manual", "localizations" : { @@ -4818,6 +3964,28 @@ } } }, + "International (api.moonshot.ai)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "国际(api.moonshot.ai)" + } + } + } + }, + "International = api.moonshot.ai; China (platform.kimi.com keys) = api.moonshot.cn. Custom points at any OpenAI-compatible endpoint." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "国际 = api.moonshot.ai;中国(platform.kimi.com 密钥)= api.moonshot.cn。自定义可指向任意 OpenAI 兼容端点。" + } + } + } + }, "Invalid agent" : { "extractionState" : "stale", "localizations" : { @@ -4851,6 +4019,17 @@ } } }, + "iOA" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "iOA" + } + } + } + }, "Jump to latest" : { "extractionState" : "stale", "localizations" : { @@ -4906,6 +4085,17 @@ } } }, + "Key works, but no models were returned" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "密钥有效,但未返回任何模型" + } + } + } + }, "Kick off tasks in any folder with your preferred agent." : { "extractionState" : "stale", "localizations" : { @@ -4917,6 +4107,39 @@ } } }, + "Kimi account login (subscription)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kimi 账号登录(订阅)" + } + } + } + }, + "Kimi Code config saved" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kimi Code 配置已保存" + } + } + } + }, + "Kimi Code Configuration" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kimi Code 配置" + } + } + } + }, "Language" : { "extractionState" : "stale", "localizations" : { @@ -5016,6 +4239,17 @@ } } }, + "Leave blank to use the provider SDK default." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "留空则使用供应商 SDK 的默认值。" + } + } + } + }, "Let agents pause to ask you a multiple-choice question and wait for an answer." : { "extractionState" : "manual", "localizations" : { @@ -5225,6 +4459,17 @@ } } }, + "Loading models…" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "正在加载模型…" + } + } + } + }, "Loading options…" : { "extractionState" : "stale", "localizations" : { @@ -5333,6 +4578,17 @@ } } }, + "Low (faster)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "低(更快)" + } + } + } + }, "Main" : { "extractionState" : "stale", "localizations" : { @@ -5419,6 +4675,28 @@ } } }, + "Max" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "最高" + } + } + } + }, + "Max context size (optional)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "最大上下文长度(可选)" + } + } + } + }, "Max tokens" : { "extractionState" : "stale", "localizations" : { @@ -5474,6 +4752,17 @@ } } }, + "Medium (balanced)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "中(均衡)" + } + } + } + }, "Message" : { "extractionState" : "stale", "localizations" : { @@ -5506,13 +4795,24 @@ } } }, - "Messages" : { - "extractionState" : "stale", + "Messages" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "消息" + } + } + } + }, + "Minimal" : { + "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "消息" + "value" : "最小" } } } @@ -5787,6 +5087,17 @@ } } }, + "No API key? Run “codebuddy” in a terminal to sign in with your Tencent account instead." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "没有 API 密钥?可在终端运行“codebuddy”改用腾讯账号登录。" + } + } + } + }, "No branches found." : { "extractionState" : "manual", "localizations" : { @@ -6176,6 +5487,17 @@ } } }, + "No XAI_API_KEY set." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "未设置 XAI_API_KEY。" + } + } + } + }, "Not a Git Repository" : { "extractionState" : "stale", "localizations" : { @@ -6198,6 +5520,17 @@ } } }, + "Not authenticated yet — save an API key below (or sign in) to open Kimi sessions." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "尚未认证——请在下方保存 API 密钥(或登录)以打开 Kimi 会话。" + } + } + } + }, "Not available on this server." : { "extractionState" : "stale", "localizations" : { @@ -6242,6 +5575,17 @@ } } }, + "Not signed in" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "未登录" + } + } + } + }, "Not Supported" : { "extractionState" : "stale", "localizations" : { @@ -6297,6 +5641,17 @@ } } }, + "Off" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "关闭" + } + } + } + }, "Official Subscription" : { "extractionState" : "stale", "localizations" : { @@ -6352,6 +5707,17 @@ } } }, + "Only folders you open here are trusted, never your whole machine — and this affects config loading only, not what pi is allowed to run." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "只有你在此打开的文件夹会被信任,绝不会信任整台机器——且这只影响配置加载,不影响 pi 被允许执行的操作。" + } + } + } + }, "Only needed for private repositories. Use a personal access token as the password." : { "extractionState" : "stale", "localizations" : { @@ -6479,6 +5845,17 @@ } } }, + "Overseas (default)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "海外(默认)" + } + } + } + }, "Parent Directory" : { "extractionState" : "stale", "localizations" : { @@ -6490,6 +5867,17 @@ } } }, + "Passed to cursor-agent as its --model flag. Leave unset to use the account default." : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "作为 --model 参数传给 cursor-agent。留空则使用账号默认模型。" + } + } + } + }, "Password / Token" : { "extractionState" : "stale", "localizations" : { @@ -6534,6 +5922,17 @@ } } }, + "Permission Mode" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "权限模式" + } + } + } + }, "Permission requests" : { "extractionState" : "manual", "localizations" : { @@ -6545,6 +5944,17 @@ } } }, + "Permissions" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "权限" + } + } + } + }, "Personal Access Token" : { "extractionState" : "stale", "localizations" : { @@ -6578,6 +5988,83 @@ } } }, + "Pi authenticates with your model provider’s API key. The key is written to ~/.pi/agent/auth.json and the model selection to settings.json." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pi 使用你的模型供应商 API 密钥认证。密钥写入 ~/.pi/agent/auth.json,模型选择写入 settings.json。" + } + } + } + }, + "pi command or path" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "pi 命令或路径" + } + } + } + }, + "Pi config saved" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pi 配置已保存" + } + } + } + }, + "Pi Configuration" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pi 配置" + } + } + } + }, + "pi installed" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "pi 已安装" + } + } + } + }, + "Pi runtime saved" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pi 运行时已保存" + } + } + } + }, + "pi uninstalled" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "pi 已卸载" + } + } + } + }, "Pick a server in the Chats tab to browse its folders." : { "extractionState" : "stale", "localizations" : { @@ -6655,6 +6142,27 @@ } } }, + "Plan ready" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "计划已就绪" + } + } + } + }, + "Plan ready for review" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "计划已就绪,待确认" + } + } + } + }, "Prefix" : { "extractionState" : "stale", "localizations" : { @@ -6716,40 +6224,84 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "项目" + "value" : "项目" + } + } + } + }, + "PROJECT" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "项目" + } + } + } + }, + "Prompt" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "提示词" + } + } + } + }, + "Provider" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "供应商" + } + } + } + }, + "Provider and model are required" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "供应商和模型为必填项" } } } }, - "PROJECT" : { + "Provider env sub-table" : { "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "项目" + "value" : "供应商 env 子表" } } } }, - "Prompt" : { + "Provider ID" : { "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "提示词" + "value" : "供应商 ID" } } } }, - "Provider" : { - "extractionState" : "stale", + "Provider type" : { + "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "供应商" + "value" : "供应商类型" } } } @@ -7046,6 +6598,17 @@ } } }, + "Recheck" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "重新检查" + } + } + } + }, "Recommended" : { "localizations" : { "zh-Hans" : { @@ -7350,6 +6913,17 @@ } } }, + "Request Changes" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "要求修改" + } + } + } + }, "Restart" : { "extractionState" : "stale", "localizations" : { @@ -7394,6 +6968,17 @@ } } }, + "Rules and sandbox merge into ~/.cursor/cli-config.json, preserving keys the Cursor CLI wrote. Running sessions pick them up after a restart." : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "规则与沙盒会合并进 ~/.cursor/cli-config.json,并保留 Cursor CLI 自己写入的其它键。运行中的会话需重启后生效。" + } + } + } + }, "Run `gemini` once on the server to complete Google OAuth." : { "localizations" : { "zh-Hans" : { @@ -7404,6 +6989,28 @@ } } }, + "Run `kimi login` in a terminal to sign in with a Kimi subscription account (device-code OAuth). codeg stores nothing and reuses Kimi’s own login. Saving here removes codeg’s API-key gate token." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在终端运行 `kimi login`,用 Kimi 订阅账号登录(设备码 OAuth)。codeg 不存储任何内容,复用 Kimi 自己的登录。在此保存会移除 codeg 的 API 密钥闸门令牌。" + } + } + } + }, + "Run Everything" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "全部放行" + } + } + } + }, "Run Preflight" : { "localizations" : { "zh-Hans" : { @@ -7414,6 +7021,27 @@ } } }, + "Run this on the machine hosting codeg, then refresh:" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在运行 codeg 的机器上执行以下命令,然后点击刷新:" + } + } + } + }, + "Run your own pi build, install, or wrapper." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "运行你自己的 pi 构建、安装或包装脚本。" + } + } + } + }, "Running" : { "extractionState" : "stale", "localizations" : { @@ -7425,6 +7053,28 @@ } } }, + "Runtime" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "运行时" + } + } + } + }, + "Sandbox" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "沙盒" + } + } + } + }, "Save" : { "extractionState" : "stale", "localizations" : { @@ -7447,6 +7097,17 @@ } } }, + "Save config.toml" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存 config.toml" + } + } + } + }, "Save for future operations" : { "localizations" : { "zh-Hans" : { @@ -7457,6 +7118,17 @@ } } }, + "Save Kimi Code Config" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存 Kimi Code 配置" + } + } + } + }, "Save Path" : { "extractionState" : "stale", "localizations" : { @@ -7468,6 +7140,72 @@ } } }, + "Save Pi Config" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存 Pi 配置" + } + } + } + }, + "Save Runtime" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存运行时" + } + } + } + }, + "Saved as CODEBUDDY_API_KEY for this agent. Alternatively, sign in with the CodeBuddy CLI in a terminal." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "作为 CODEBUDDY_API_KEY 保存到该智能体。也可以在终端用 CodeBuddy CLI 登录。" + } + } + } + }, + "Saved as CODEBUDDY_API_KEY for this agent. Use the key issued by your private deployment." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "作为 CODEBUDDY_API_KEY 保存到该智能体。请使用你的私有化部署所签发的密钥。" + } + } + } + }, + "Saved as CODEBUDDY_BASE_URL and points CodeBuddy at your private endpoint. The region setting is left unset for self-hosted deployments." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "作为 CODEBUDDY_BASE_URL 保存,将 CodeBuddy 指向你的私有端点。自托管部署下区域设置保持未设置。" + } + } + } + }, + "Saved as XAI_API_KEY for this agent, or run “grok login” in a terminal for subscription sign-in (SuperGrok / X Premium+)." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已保存为该 agent 的 XAI_API_KEY,或在终端运行“grok login”进行订阅登录(SuperGrok / X Premium+)。" + } + } + } + }, "Scan QR code" : { "extractionState" : "stale", "localizations" : { @@ -7580,6 +7318,17 @@ } } }, + "Select a provider" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "选择一个供应商" + } + } + } + }, "Select a Session" : { "extractionState" : "stale", "localizations" : { @@ -7646,6 +7395,17 @@ } } }, + "Self-hosted (private deployment)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自托管(私有化部署)" + } + } + } + }, "Send" : { "extractionState" : "stale", "localizations" : { @@ -7690,6 +7450,17 @@ } } }, + "Send Notes" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "发送意见" + } + } + } + }, "Send notes and corrections to an agent while it’s working." : { "extractionState" : "manual", "localizations" : { @@ -7816,29 +7587,51 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "会话详情" + "value" : "会话详情" + } + } + } + }, + "Session Key" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "会话密钥" + } + } + } + }, + "Sessions directory (PI_CODING_AGENT_SESSION_DIR)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "会话目录(PI_CODING_AGENT_SESSION_DIR)" } } } }, - "Session Key" : { + "Set as Default" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "会话密钥" + "value" : "设为默认" } } } }, - "Set as Default" : { - "extractionState" : "stale", + "Sets CODEBUDDY_INTERNET_ENVIRONMENT. Mainland China must use “China (internal)”; the overseas build leaves it unset." : { + "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "设为默认" + "value" : "设置 CODEBUDDY_INTERNET_ENVIRONMENT。中国大陆须使用“中国(内网)”,海外版保持未设置。" } } } @@ -7953,6 +7746,28 @@ } } }, + "Sign in to load the model list." : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "登录后才能加载模型列表。" + } + } + } + }, + "Sign in with your Cursor account in a terminal. No credential is stored here." : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在终端中使用你的 Cursor 账号登录,此处不保存任何凭据。" + } + } + } + }, "Sign-in" : { "extractionState" : "stale", "localizations" : { @@ -7964,6 +7779,17 @@ } } }, + "Signed in" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已登录" + } + } + } + }, "Signed in via ChatGPT subscription" : { "localizations" : { "zh-Hans" : { @@ -8246,6 +8072,17 @@ } } }, + "Stored in ~/.pi/agent/auth.json for the selected provider." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "为所选供应商保存到 ~/.pi/agent/auth.json。" + } + } + } + }, "Sub-agent" : { "extractionState" : "stale", "localizations" : { @@ -8312,6 +8149,17 @@ } } }, + "Switched mode" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已切换模式" + } + } + } + }, "System" : { "localizations" : { "zh-Hans" : { @@ -8486,6 +8334,16 @@ } } }, + "The agent didn’t include a plan." : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "该智能体没有给出计划内容。" + } + } + } + }, "The agent needs permission to continue." : { "extractionState" : "manual", "localizations" : { @@ -8562,6 +8420,17 @@ } } }, + "The controls below merge into ~/.grok/config.toml, preserving your other keys and comments. Other keys stay editable under Advanced." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "下面的控件会合并写入 ~/.grok/config.toml,保留你的其它键与注释。其它键可在「高级」中编辑。" + } + } + } + }, "The language the bot replies in." : { "extractionState" : "stale", "localizations" : { @@ -8573,6 +8442,28 @@ } } }, + "The model id to use. Click Fetch to list the models your key can access (e.g. kimi-k2.7-code) — avoids “model not found” errors." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "要使用的模型 id。点“获取”可列出你的密钥能访问的模型(如 kimi-k2.7-code)——避免“找不到模型”的错误。" + } + } + } + }, + "The provider protocol Kimi speaks (config.toml `type`). Use Kimi / Moonshot for a Moonshot / platform.kimi.com key." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kimi 使用的供应商协议(config.toml 的 `type`)。使用 Moonshot / platform.kimi.com 密钥时选 Kimi / Moonshot。" + } + } + } + }, "The server address changed — enter a token for the new endpoint." : { "extractionState" : "stale", "localizations" : { @@ -8628,6 +8519,17 @@ } } }, + "Thinking" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "思考强度" + } + } + } + }, "Thinking…" : { "localizations" : { "zh-Hans" : { @@ -8876,6 +8778,17 @@ } } }, + "Tokens, e.g. 262144. Leave blank to use the model default." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "以 token 计,如 262144。留空则使用模型默认值。" + } + } + } + }, "Tool" : { "extractionState" : "stale", "localizations" : { @@ -9189,6 +9102,28 @@ } } }, + "Use default" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用默认" + } + } + } + }, + "Use the bundled pi-acp adapter with the pi on your PATH. Install pi with: npm install -g @earendil-works/pi-coding-agent" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用内置的 pi-acp 适配器和 PATH 中的 pi。安装 pi:npm install -g @earendil-works/pi-coding-agent" + } + } + } + }, "User prompts" : { "extractionState" : "manual", "localizations" : { @@ -9247,6 +9182,17 @@ } } }, + "Validate" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "校验" + } + } + } + }, "Validate Token" : { "extractionState" : "stale", "localizations" : { @@ -9324,6 +9270,17 @@ } } }, + "Vertex AI uses Google Application Default Credentials — run `gcloud auth application-default login` (no API key)." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vertex AI 使用 Google 应用默认凭据——请运行 `gcloud auth application-default login`(无需 API 密钥)。" + } + } + } + }, "View" : { "extractionState" : "stale", "localizations" : { @@ -9445,6 +9402,28 @@ } } }, + "What should change?" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "需要修改什么?" + } + } + } + }, + "When codeg connects pi to a folder, mark that folder trusted so pi loads the project’s local config and skills without a separate prompt." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "当 codeg 将 pi 连接到某文件夹时,把该文件夹标记为受信任,使 pi 无需额外提示即可加载项目的本地配置和技能。" + } + } + } + }, "When off, the delegate_to_agent tool is hidden from the agent’s catalog." : { "extractionState" : "manual", "localizations" : { @@ -9456,6 +9435,17 @@ } } }, + "Where the API key is written inside config.toml." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "API 密钥在 config.toml 中的写入位置。" + } + } + } + }, "Which agent events are sent to your channels and webhooks." : { "extractionState" : "stale", "localizations" : { @@ -9489,6 +9479,17 @@ } } }, + "With a custom config directory, the Skills, Experts, and Office tools managed in Settings won’t apply to this pi — manage its skills in that folder directly." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用自定义配置目录后,设置中管理的技能、专家和 Office 工具将不适用于此 pi——请直接在该目录中管理其技能。" + } + } + } + }, "Working Tree Clean" : { "extractionState" : "stale", "localizations" : { @@ -9522,6 +9523,39 @@ } } }, + "Written to ~/.kimi-code/config.toml and used for inference. From platform.kimi.com or platform.kimi.ai." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "写入 ~/.kimi-code/config.toml 并用于推理。来自 platform.kimi.com 或 platform.kimi.ai。" + } + } + } + }, + "Written verbatim (comments preserved) and validated as TOML. codeg also seeds the gate token so the session opens." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "原样写入(保留注释)并按 TOML 校验。codeg 还会植入闸门令牌以打开会话。" + } + } + } + }, + "XAI_API_KEY is configured." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已配置 XAI_API_KEY。" + } + } + } + }, "You’re up to date." : { "extractionState" : "manual", "localizations" : { diff --git a/README.md b/README.md index 6b7a7cf..c139113 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,8 @@ A native, universal (iPhone + iPad) SwiftUI client for the [codeg](https://github.com/xintaofei/codeg) multi-agent coding server. Manage your codeg servers, browse their sessions, read the full transcript, and reply to the agent with the response streaming back in -real time. Built for iOS 26 with Apple's **Liquid Glass** design language and a -dark, developer-focused aesthetic. +real time. Supports iOS 18 and later, adopting Apple's **Liquid Glass** design +language on iOS 26 with system-style fallbacks on earlier releases. The app is a **pure API client** — all agent and conversation logic lives on the codeg backend; the app only calls its HTTP + WebSocket API. @@ -23,6 +23,7 @@ codeg backend; the app only calls its HTTP + WebSocket API. ## Requirements - Xcode 26 / iOS 26 SDK +- iOS 18 or later - [XcodeGen](https://github.com/yonyz/XcodeGen) (`brew install xcodegen`) — the Xcode project is generated from `project.yml` diff --git a/docs/live-activity-analysis.md b/docs/live-activity-analysis.md index ec4bf57..c4eba77 100644 --- a/docs/live-activity-analysis.md +++ b/docs/live-activity-analysis.md @@ -16,7 +16,7 @@ 2. **最高价值的「等待审批」态,在 app 级数据层根本看不见**。它不是 `ConversationStatus` 的一个 case;只活在**已打开会话**的 `SessionDetailViewModel` 里。app 级的轮询/列表层区分不了"在跑"和"卡着等你批"。要暴露它,得先有 M4 `SessionHub`(app 级持久连接)或服务端新增字段。 3. **「可操作」审批同样受 server 可达性约束**:即便推送把"等审批"送到锁屏,**按下 Approve 真正生效仍需手机能连回 server**。局域网 server + 人在外面 = 看得到、点不动。 -**好消息**:地基比想象的近 —— 传输层 `EventStream` 已经会说 attach/snapshot/replay 协议,`LiveSessionSnapshot` 天然就是一份 ContentState,token 在 Keychain 且后台可读,部署目标 iOS 26 让 ActivityKit 全量可用,`codeg://` 深链已就位。 +**好消息**:地基比想象的近 —— 传输层 `EventStream` 已经会说 attach/snapshot/replay 协议,`LiveSessionSnapshot` 天然就是一份 ContentState,token 在 Keychain 且后台可读,部署目标 iOS 18 已覆盖所规划的 ActivityKit 能力,`codeg://` 深链已就位。 **建议**:Live Activity 不该现在单独上,它是 M4(持久连接)/ M5(推送)的**下游**。分三阶段(§8):阶段 0 零服务端改动、只做前台可见的骨架用来验证 UI;真正的锁屏审批价值必须等推送基础设施。 @@ -147,7 +147,7 @@ Live Activity 要在后台/锁屏发光,需要一个"app 不在前台也能拿 1. **传输层已会说持久协议** —— `EventStream` 就是 `/ws/events` firehose,已实现 attach/snapshot/replay:`WSClientMessage.attach(subscriptionId, connectionId, sinceSeq)`(`EventStream.swift:8-35`)、`WSServerMessage.snapshot/replay/event/detached`(`:40-69`)、`Frame` 枚举(`:78-86`)。M4 `SessionHub` 是"把它包成一条 app 级持久连接 + 加 `scenePhase` 生命周期",**不是从零造协议**。 2. **ContentState 源现成** —— `LiveSessionSnapshot`(§2.2)+ `AcpEvent` 流已归约出 status / 活动工具 / 待审批标志 / token 用量。 3. **token 后台可读** —— `Keychain.swift:13,39`:service `com.codeg.ios.server-token`,`kSecAttrAccessibleAfterFirstUnlock`(首次解锁后后台可读,正是扩展所需)。**但**:keychain sharing(access group)当前**未配置**(无 entitlements)——扩展要读 token,需加 App Group + keychain 共享组。 -4. **平台就绪** —— 部署目标 iOS 26(`project.yml:5,37`),ActivityKit 全量可用。 +4. **平台就绪** —— 部署目标 iOS 18(`project.yml:5,40`),所规划的 ActivityKit 能力均可用。 5. **深链已就位** —— `codeg://`(`CFBundleURLTypes`)+ `Route` 枚举,Live Activity 点击回 app 落到 `Route.conversation(id)` 是现成的。 ### 需要新增的工程要件(落地清单) diff --git a/docs/live-activity-implementation.md b/docs/live-activity-implementation.md index 355d33a..8100537 100644 --- a/docs/live-activity-implementation.md +++ b/docs/live-activity-implementation.md @@ -81,7 +81,7 @@ targets: CodegActivityKit: type: framework platform: iOS - deploymentTarget: "26.0" + deploymentTarget: "18.0" sources: [CodegActivityKit] settings: base: @@ -104,7 +104,7 @@ targets: CodegWidgets: type: app-extension platform: iOS - deploymentTarget: "26.0" + deploymentTarget: "18.0" sources: [CodegWidgets] dependencies: - target: CodegActivityKit diff --git a/project.yml b/project.yml index 7a63c42..1328299 100644 --- a/project.yml +++ b/project.yml @@ -2,7 +2,7 @@ name: CodegiOS options: bundleIdPrefix: com.codeg deploymentTarget: - iOS: "26.0" + iOS: "18.0" createIntermediateGroups: true groupSortPosition: top developmentLanguage: en @@ -37,7 +37,7 @@ targets: CodegiOS: type: application platform: iOS - deploymentTarget: "26.0" + deploymentTarget: "18.0" sources: - path: CodegiOS dependencies: From 670b0693964724a8d70381e7de5ce088eb230d38 Mon Sep 17 00:00:00 2001 From: JunWang233 Date: Sat, 1 Aug 2026 15:54:44 +0800 Subject: [PATCH 2/3] Remove unrelated string catalog churn --- CodegiOS/Resources/Localizable.xcstrings | 3446 +++++++++++----------- 1 file changed, 1706 insertions(+), 1740 deletions(-) diff --git a/CodegiOS/Resources/Localizable.xcstrings b/CodegiOS/Resources/Localizable.xcstrings index 1e866a6..28c5f3a 100644 --- a/CodegiOS/Resources/Localizable.xcstrings +++ b/CodegiOS/Resources/Localizable.xcstrings @@ -1,40 +1,1647 @@ { "sourceLanguage" : "en", "strings" : { - "… file truncated at %@ lines" : { - + "Cursor Configuration" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cursor 配置" + } + } + } + }, + "Both methods sign in to Cursor’s own backend — cursor-agent has no custom-endpoint support, so there is no API URL to set." : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "两种方式都登录 Cursor 自己的后端——cursor-agent 不支持自定义接入点,因此无需填写 API 地址。" + } + } + } + }, + "Authentication Method" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "认证方式" + } + } + } + }, + "Cursor API Key" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cursor API 密钥" + } + } + } + }, + "Sign in with your Cursor account in a terminal. No credential is stored here." : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在终端中使用你的 Cursor 账号登录,此处不保存任何凭据。" + } + } + } + }, + "A Cursor Dashboard account key for headless or server machines — an alternative to signing in." : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "供无界面或服务器环境使用的 Cursor Dashboard 账号密钥,可替代浏览器登录。" + } + } + } + }, + "Account" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "账号" + } + } + } + }, + "Create one in the Cursor Dashboard under Integrations." : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "可在 Cursor Dashboard 的 Integrations 中创建。" + } + } + } + }, + "Sign in to load the model list." : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "登录后才能加载模型列表。" + } + } + } + }, + "cursor-agent isn’t installed" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "尚未安装 cursor-agent" + } + } + } + }, + "Not signed in" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "未登录" + } + } + } + }, + "Signed in" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已登录" + } + } + } + }, + "Run this on the machine hosting codeg, then refresh:" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在运行 codeg 的机器上执行以下命令,然后点击刷新:" + } + } + } + }, + "Passed to cursor-agent as its --model flag. Leave unset to use the account default." : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "作为 --model 参数传给 cursor-agent。留空则使用账号默认模型。" + } + } + } + }, + "Default Model" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "默认模型" + } + } + } + }, + "Account default" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "账号默认" + } + } + } + }, + "Loading models…" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "正在加载模型…" + } + } + } + }, + "Permissions" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "权限" + } + } + } + }, + "Rules and sandbox merge into ~/.cursor/cli-config.json, preserving keys the Cursor CLI wrote. Running sessions pick them up after a restart." : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "规则与沙盒会合并进 ~/.cursor/cli-config.json,并保留 Cursor CLI 自己写入的其它键。运行中的会话需重启后生效。" + } + } + } + }, + "Run Everything" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "全部放行" + } + } + } + }, + "Cursor runs commands without asking. Deny rules below still apply." : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cursor 执行命令时不再询问,下方的拒绝规则仍然生效。" + } + } + } + }, + "Cursor asks before running commands." : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cursor 执行命令前会先询问。" + } + } + } + }, + "Sandbox" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "沙盒" + } + } + } + }, + "Disabled" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已禁用" + } + } + } + }, + "Allow Rules" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "允许规则" + } + } + } + }, + "Deny Rules" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "拒绝规则" + } + } + } + }, + "Add allow rule" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "添加允许规则" + } + } + } + }, + "Add deny rule" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "添加拒绝规则" + } + } + } + }, + "Enter your Cursor API key, or switch to Official Subscription." : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请填写 Cursor API 密钥,或切换为官方订阅。" + } + } + } + }, + "Compacting context…" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "正在压缩上下文…" + } + } + } + }, + "Context compacted" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "上下文已压缩" + } + } + } + }, + "Context compacted · %@ → %@ tokens" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "上下文已压缩 · %1$@ → %2$@ tokens" + } + } + } + }, + "Plan ready for review" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "计划已就绪,待确认" + } + } + } + }, + "Approve to start building, or send notes to have the plan revised." : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "批准后开始实施,或提交修改意见让其重新调整计划。" + } + } + } + }, + "The agent didn’t include a plan." : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "该智能体没有给出计划内容。" + } + } + } + }, + "What should change?" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "需要修改什么?" + } + } + } + }, + "Send Notes" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "发送意见" + } + } + } + }, + "Request Changes" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "要求修改" + } + } + } + }, + "Approve & Build" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "批准并实施" + } + } + } + }, + "Abandon Plan" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "放弃计划" + } + } + } + }, + "Entered plan mode" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已进入计划模式" + } + } + } + }, + "Plan ready" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "计划已就绪" + } + } + } + }, + "Switched mode" : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已切换模式" + } + } + } + }, + "Grok Configuration" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Grok 配置" + } + } + } + }, + "The controls below merge into ~/.grok/config.toml, preserving your other keys and comments. Other keys stay editable under Advanced." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "下面的控件会合并写入 ~/.grok/config.toml,保留你的其它键与注释。其它键可在「高级」中编辑。" + } + } + } + }, + "Permission Mode" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "权限模式" + } + } + } + }, + "Use default" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用默认" + } + } + } + }, + "Ask every time" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "每次询问" + } + } + } + }, + "Always approve" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "始终允许" + } + } + } + }, + "Low (faster)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "低(更快)" + } + } + } + }, + "Medium (balanced)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "中(均衡)" + } + } + } + }, + "Max" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "最高" + } + } + } + }, + "XAI_API_KEY is configured." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已配置 XAI_API_KEY。" + } + } + } + }, + "No XAI_API_KEY set." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "未设置 XAI_API_KEY。" + } + } + } + }, + "Saved as XAI_API_KEY for this agent, or run “grok login” in a terminal for subscription sign-in (SuperGrok / X Premium+)." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已保存为该 agent 的 XAI_API_KEY,或在终端运行“grok login”进行订阅登录(SuperGrok / X Premium+)。" + } + } + } + }, + "CodeBuddy Configuration" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "CodeBuddy 配置" + } + } + } + }, + "CodeBuddy authenticates with an API key. Mainland China builds also require the environment set to “China (internal)”; iOA builds use “iOA”. The overseas build leaves it unset." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "CodeBuddy 使用 API 密钥认证。中国大陆版还需将环境设为“中国(内网)”,iOA 版使用“iOA”,海外版则保持未设置。" + } + } + } + }, + "Saved as CODEBUDDY_API_KEY for this agent. Use the key issued by your private deployment." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "作为 CODEBUDDY_API_KEY 保存到该智能体。请使用你的私有化部署所签发的密钥。" + } + } + } + }, + "Saved as CODEBUDDY_API_KEY for this agent. Alternatively, sign in with the CodeBuddy CLI in a terminal." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "作为 CODEBUDDY_API_KEY 保存到该智能体。也可以在终端用 CodeBuddy CLI 登录。" + } + } + } + }, + "Environment" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "环境" + } + } + } + }, + "Overseas (default)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "海外(默认)" + } + } + } + }, + "China (internal)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "中国(内网)" + } + } + } + }, + "iOA" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "iOA" + } + } + } + }, + "Self-hosted (private deployment)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自托管(私有化部署)" + } + } + } + }, + "Deployment URL" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "部署地址" + } + } + } + }, + "Enter a valid http(s) URL." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请输入有效的 http(s) 地址。" + } + } + } + }, + "Saved as CODEBUDDY_BASE_URL and points CodeBuddy at your private endpoint. The region setting is left unset for self-hosted deployments." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "作为 CODEBUDDY_BASE_URL 保存,将 CodeBuddy 指向你的私有端点。自托管部署下区域设置保持未设置。" + } + } + } + }, + "Sets CODEBUDDY_INTERNET_ENVIRONMENT. Mainland China must use “China (internal)”; the overseas build leaves it unset." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "设置 CODEBUDDY_INTERNET_ENVIRONMENT。中国大陆须使用“中国(内网)”,海外版保持未设置。" + } + } + } + }, + "No API key? Run “codebuddy” in a terminal to sign in with your Tencent account instead." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "没有 API 密钥?可在终端运行“codebuddy”改用腾讯账号登录。" + } + } + } + }, + "Enter a valid http(s) URL for the self-hosted deployment." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请为自托管部署输入有效的 http(s) 地址。" + } + } + } + }, + "Kimi Code Configuration" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kimi Code 配置" + } + } + } + }, + "`kimi acp` only authenticates with a stored login token and rejects API keys on their own. To use an API key, codeg writes a managed ~/.kimi-code/config.toml provider AND seeds a local gate token so the session opens — inference still runs on your key." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "`kimi acp` 只认可已存储的登录令牌,单独的 API 密钥会被拒绝。为支持 API 密钥,codeg 会写入受管的 ~/.kimi-code/config.toml 供应商,并植入一个本地闸门令牌以打开会话——推理仍走你的密钥。" + } + } + } + }, + "Authentication method" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "认证方式" + } + } + } + }, + "Kimi account login (subscription)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kimi 账号登录(订阅)" + } + } + } + }, + "“API key” writes a codeg-managed config.toml provider and seeds a gate token. “Login” clears that and uses a real `kimi login` session (requires a Kimi subscription)." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "“API 密钥”会写入由 codeg 管理的 config.toml 供应商并植入闸门令牌。“登录”会清除它,改用真正的 `kimi login` 会话(需要 Kimi 订阅)。" + } + } + } + }, + "Run `kimi login` in a terminal to sign in with a Kimi subscription account (device-code OAuth). codeg stores nothing and reuses Kimi’s own login. Saving here removes codeg’s API-key gate token." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在终端运行 `kimi login`,用 Kimi 订阅账号登录(设备码 OAuth)。codeg 不存储任何内容,复用 Kimi 自己的登录。在此保存会移除 codeg 的 API 密钥闸门令牌。" + } + } + } + }, + "Save Kimi Code Config" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存 Kimi Code 配置" + } + } + } + }, + "Provider type" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "供应商类型" + } + } + } + }, + "The provider protocol Kimi speaks (config.toml `type`). Use Kimi / Moonshot for a Moonshot / platform.kimi.com key." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kimi 使用的供应商协议(config.toml 的 `type`)。使用 Moonshot / platform.kimi.com 密钥时选 Kimi / Moonshot。" + } + } + } + }, + "International (api.moonshot.ai)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "国际(api.moonshot.ai)" + } + } + } + }, + "China (api.moonshot.cn)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "中国(api.moonshot.cn)" + } + } + } + }, + "Custom (OpenAI-compatible)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自定义(OpenAI 兼容)" + } + } + } + }, + "International = api.moonshot.ai; China (platform.kimi.com keys) = api.moonshot.cn. Custom points at any OpenAI-compatible endpoint." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "国际 = api.moonshot.ai;中国(platform.kimi.com 密钥)= api.moonshot.cn。自定义可指向任意 OpenAI 兼容端点。" + } + } + } + }, + "Leave blank to use the provider SDK default." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "留空则使用供应商 SDK 的默认值。" + } + } + } + }, + "Written to ~/.kimi-code/config.toml and used for inference. From platform.kimi.com or platform.kimi.ai." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "写入 ~/.kimi-code/config.toml 并用于推理。来自 platform.kimi.com 或 platform.kimi.ai。" + } + } + } + }, + "Advanced: credential placement" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "高级:凭据写入位置" + } + } + } + }, + "Inline api_key" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "内联 api_key" + } + } + } + }, + "Provider env sub-table" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "供应商 env 子表" + } + } + } + }, + "Where the API key is written inside config.toml." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "API 密钥在 config.toml 中的写入位置。" + } + } + } + }, + "GCP project (GOOGLE_CLOUD_PROJECT)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "GCP 项目(GOOGLE_CLOUD_PROJECT)" + } + } + } + }, + "GCP location (GOOGLE_CLOUD_LOCATION)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "GCP 区域(GOOGLE_CLOUD_LOCATION)" + } + } + } + }, + "Vertex AI uses Google Application Default Credentials — run `gcloud auth application-default login` (no API key)." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vertex AI 使用 Google 应用默认凭据——请运行 `gcloud auth application-default login`(无需 API 密钥)。" + } + } + } + }, + "The model id to use. Click Fetch to list the models your key can access (e.g. kimi-k2.7-code) — avoids “model not found” errors." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "要使用的模型 id。点“获取”可列出你的密钥能访问的模型(如 kimi-k2.7-code)——避免“找不到模型”的错误。" + } + } + } + }, + "Max context size (optional)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "最大上下文长度(可选)" + } + } + } + }, + "Tokens, e.g. 262144. Leave blank to use the model default." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "以 token 计,如 262144。留空则使用模型默认值。" + } + } + } + }, + "Advanced: edit config.toml directly" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "高级:直接编辑 config.toml" + } + } + } + }, + "Written verbatim (comments preserved) and validated as TOML. codeg also seeds the gate token so the session opens." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "原样写入(保留注释)并按 TOML 校验。codeg 还会植入闸门令牌以打开会话。" + } + } + } + }, + "Save config.toml" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存 config.toml" + } + } + } + }, + "Authenticated via a Kimi account login." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已通过 Kimi 账号登录认证。" + } + } + } + }, + "Authenticated via API key (codeg seeded the local gate token)." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已通过 API 密钥认证(codeg 已植入本地闸门令牌)。" + } + } + } + }, + "Not authenticated yet — save an API key below (or sign in) to open Kimi sessions." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "尚未认证——请在下方保存 API 密钥(或登录)以打开 Kimi 会话。" + } + } + } + }, + "Enter a model id (Kimi requires one for API-key mode)." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请输入模型 id(API 密钥模式下 Kimi 必须指定)。" + } + } + } + }, + "Kimi Code config saved" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kimi Code 配置已保存" + } + } + } + }, + "Enter an API key and endpoint first" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请先输入 API 密钥和端点" + } + } + } + }, + "Key works, but no models were returned" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "密钥有效,但未返回任何模型" + } + } + } + }, + "Couldn’t list models — check the key and endpoint" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法列出模型——请检查密钥和端点" + } + } + } + }, + "Runtime" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "运行时" + } + } + } + }, + "Choose which pi binary runs. Use the default, or point at your own pi build." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "选择运行哪个 pi 可执行文件。使用默认值,或指向你自己的 pi 构建。" + } + } + } + }, + "Default pi" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "默认 pi" + } + } + } + }, + "Custom pi" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自定义 pi" + } + } + } + }, + "Use the bundled pi-acp adapter with the pi on your PATH. Install pi with: npm install -g @earendil-works/pi-coding-agent" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用内置的 pi-acp 适配器和 PATH 中的 pi。安装 pi:npm install -g @earendil-works/pi-coding-agent" + } + } + } + }, + "Run your own pi build, install, or wrapper." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "运行你自己的 pi 构建、安装或包装脚本。" + } + } + } + }, + "Enter a pi command to save" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请输入 pi 命令后再保存" + } + } + } + }, + "Save Runtime" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存运行时" + } + } + } + }, + "Recheck" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "重新检查" + } + } + } + }, + "Install pi" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "安装 pi" + } + } + } + }, + "pi command or path" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "pi 命令或路径" + } + } + } + }, + "Validate" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "校验" + } + } + } + }, + "Command not found" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "找不到命令" + } + } + } + }, + "An absolute path, a command name on PATH, or a wrapper script (e.g. a monorepo ./pi-test.sh)." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "绝对路径、PATH 中的命令名,或包装脚本(如 monorepo 里的 ./pi-test.sh)。" + } + } + } + }, + "Config directory (PI_CODING_AGENT_DIR)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "配置目录(PI_CODING_AGENT_DIR)" + } + } + } + }, + "With a custom config directory, the Skills, Experts, and Office tools managed in Settings won’t apply to this pi — manage its skills in that folder directly." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用自定义配置目录后,设置中管理的技能、专家和 Office 工具将不适用于此 pi——请直接在该目录中管理其技能。" + } + } + } + }, + "Sessions directory (PI_CODING_AGENT_SESSION_DIR)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "会话目录(PI_CODING_AGENT_SESSION_DIR)" + } + } + } + }, + "Custom pi flags (--approve, -e, …) aren’t forwarded by pi-acp — wrap pi in a script and point the command at it." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自定义 pi 参数(--approve、-e 等)不会被 pi-acp 转发——请将 pi 包进脚本并把命令指向该脚本。" + } + } + } + }, + "Pi Configuration" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pi 配置" + } + } + } + }, + "Pi authenticates with your model provider’s API key. The key is written to ~/.pi/agent/auth.json and the model selection to settings.json." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pi 使用你的模型供应商 API 密钥认证。密钥写入 ~/.pi/agent/auth.json,模型选择写入 settings.json。" + } + } + } + }, + "Custom provider…" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自定义供应商……" + } + } + } + }, + "Select a provider" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "选择一个供应商" + } + } + } + }, + "Thinking" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "思考强度" + } + } + } + }, + "Off" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "关闭" + } + } + } + }, + "Minimal" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "最小" + } + } + } }, - "… file truncated at %lld lines" : { - "extractionState" : "stale", + "Extra high" : { + "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "…… 文件在第 %lld 行被截断" + "value" : "超高" } } } }, - "·" : { - + "•••••• (saved — leave blank to keep)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••(已保存——留空则保持不变)" + } + } + } }, - "“%@” will be permanently deleted. This can't be undone." : { + "Stored in ~/.pi/agent/auth.json for the selected provider." : { + "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "“%@” 将被永久删除。此操作无法撤销。" + "value" : "为所选供应商保存到 ~/.pi/agent/auth.json。" } } } }, - "“API key” writes a codeg-managed config.toml provider and seeds a gate token. “Login” clears that and uses a real `kimi login` session (requires a Kimi subscription)." : { + "Save Pi Config" : { "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "“API 密钥”会写入由 codeg 管理的 config.toml 供应商并植入闸门令牌。“登录”会清除它,改用真正的 `kimi login` 会话(需要 Kimi 订阅)。" + "value" : "保存 Pi 配置" + } + } + } + }, + "Provider ID" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "供应商 ID" + } + } + } + }, + "API protocol" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "API 协议" + } + } + } + }, + "API endpoint (Base URL)" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "API 端点(Base URL)" + } + } + } + }, + "Defines a provider in ~/.pi/agent/models.json at your endpoint. Most self-hosted or proxy servers use openai-completions." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在 ~/.pi/agent/models.json 中按你的端点定义一个供应商。多数自托管或代理服务器使用 openai-completions。" + } + } + } + }, + "Auto-trust opened workspaces" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自动信任已打开的工作区" + } + } + } + }, + "When codeg connects pi to a folder, mark that folder trusted so pi loads the project’s local config and skills without a separate prompt." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "当 codeg 将 pi 连接到某文件夹时,把该文件夹标记为受信任,使 pi 无需额外提示即可加载项目的本地配置和技能。" + } + } + } + }, + "Only folders you open here are trusted, never your whole machine — and this affects config loading only, not what pi is allowed to run." : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "只有你在此打开的文件夹会被信任,绝不会信任整台机器——且这只影响配置加载,不影响 pi 被允许执行的操作。" + } + } + } + }, + "Provider and model are required" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "供应商和模型为必填项" + } + } + } + }, + "API endpoint (Base URL) is required" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "API 端点(Base URL)为必填项" + } + } + } + }, + "Pi runtime saved" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pi 运行时已保存" + } + } + } + }, + "Pi config saved" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pi 配置已保存" + } + } + } + }, + "pi installed" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "pi 已安装" + } + } + } + }, + "Failed to install pi" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "安装 pi 失败" + } + } + } + }, + "pi uninstalled" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "pi 已卸载" + } + } + } + }, + "Failed to uninstall pi" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "卸载 pi 失败" + } + } + } + }, + "Failed to save workspace trust" : { + "extractionState" : "manual", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存工作区信任失败" + } + } + } + }, + "… file truncated at %@ lines" : { + + }, + "… file truncated at %lld lines" : { + "extractionState" : "stale", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "…… 文件在第 %lld 行被截断" + } + } + } + }, + "·" : { + + }, + "“%@” will be permanently deleted. This can't be undone." : { + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "“%@” 将被永久删除。此操作无法撤销。" } } } @@ -236,57 +1843,35 @@ "value" : "%lld sessions" } } - } - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%lld 个会话" - } - } - } - }, - "%lld sessions total" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "共 %lld 个会话" - } - } - } - }, - "%lld unpushed" : { - "extractionState" : "stale", - "localizations" : { + } + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "%lld 个待推送" + "value" : "%lld 个会话" } } } }, - "•••••• (saved — leave blank to keep)" : { - "extractionState" : "manual", + "%lld sessions total" : { + "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "••••••(已保存——留空则保持不变)" + "value" : "共 %lld 个会话" } } } }, - "`kimi acp` only authenticates with a stored login token and rejects API keys on their own. To use an API key, codeg writes a managed ~/.kimi-code/config.toml provider AND seeds a local gate token so the session opens — inference still runs on your key." : { - "extractionState" : "manual", + "%lld unpushed" : { + "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "`kimi acp` 只认可已存储的登录令牌,单独的 API 密钥会被拒绝。为支持 API 密钥,codeg 会写入受管的 ~/.kimi-code/config.toml 供应商,并植入一个本地闸门令牌以打开会话——推理仍走你的密钥。" + "value" : "%lld 个待推送" } } } @@ -319,17 +1904,6 @@ } } }, - "A Cursor Dashboard account key for headless or server machines — an alternative to signing in." : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "供无界面或服务器环境使用的 Cursor Dashboard 账号密钥,可替代浏览器登录。" - } - } - } - }, "A token with repo scope. We validate it before saving." : { "extractionState" : "stale", "localizations" : { @@ -352,16 +1926,6 @@ } } }, - "Abandon Plan" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "放弃计划" - } - } - } - }, "About" : { "localizations" : { "zh-Hans" : { @@ -393,28 +1957,6 @@ } } }, - "Account" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "账号" - } - } - } - }, - "Account default" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "账号默认" - } - } - } - }, "Active server" : { "extractionState" : "stale", "localizations" : { @@ -503,17 +2045,6 @@ } } }, - "Add allow rule" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "添加允许规则" - } - } - } - }, "Add Channel" : { "extractionState" : "stale", "localizations" : { @@ -525,17 +2056,6 @@ } } }, - "Add deny rule" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "添加拒绝规则" - } - } - } - }, "Add Folder" : { "extractionState" : "stale", "localizations" : { @@ -722,28 +2242,6 @@ } } }, - "Advanced: credential placement" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "高级:凭据写入位置" - } - } - } - }, - "Advanced: edit config.toml directly" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "高级:直接编辑 config.toml" - } - } - } - }, "Agent" : { "localizations" : { "zh-Hans" : { @@ -852,17 +2350,6 @@ } } }, - "Allow Rules" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "允许规则" - } - } - } - }, "Allowed actions" : { "extractionState" : "manual", "localizations" : { @@ -885,28 +2372,6 @@ } } }, - "Always approve" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "始终允许" - } - } - } - }, - "An absolute path, a command name on PATH, or a wrapper script (e.g. a monorepo ./pi-test.sh)." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "绝对路径、PATH 中的命令名,或包装脚本(如 monorepo 里的 ./pi-test.sh)。" - } - } - } - }, "Answer below, then submit. You can skip anytime." : { "extractionState" : "manual", "localizations" : { @@ -928,28 +2393,6 @@ } } }, - "API endpoint (Base URL)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "API 端点(Base URL)" - } - } - } - }, - "API endpoint (Base URL) is required" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "API 端点(Base URL)为必填项" - } - } - } - }, "API key" : { "extractionState" : "stale", "localizations" : { @@ -983,17 +2426,6 @@ } } }, - "API protocol" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "API 协议" - } - } - } - }, "API URL" : { "extractionState" : "stale", "localizations" : { @@ -1038,26 +2470,6 @@ } } }, - "Approve & Build" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "批准并实施" - } - } - } - }, - "Approve to start building, or send notes to have the plan revised." : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "批准后开始实施,或提交修改意见让其重新调整计划。" - } - } - } - }, "Args" : { "extractionState" : "manual", "localizations" : { @@ -1069,17 +2481,6 @@ } } }, - "Ask every time" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "每次询问" - } - } - } - }, "Ask-user questions" : { "extractionState" : "manual", "localizations" : { @@ -1135,89 +2536,34 @@ } } }, - "Authenticated via a Kimi account login." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已通过 Kimi 账号登录认证。" - } - } - } - }, - "Authenticated via API key (codeg seeded the local gate token)." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已通过 API 密钥认证(codeg 已植入本地闸门令牌)。" - } - } - } - }, - "Authentication" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "身份验证" - } - } - } - }, - "Authentication failed. Check your credentials and try again." : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "身份验证失败。请检查凭据后重试。" - } - } - } - }, - "Authentication method" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "认证方式" - } - } - } - }, - "Authentication Method" : { + "Authentication" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "认证方式" + "value" : "身份验证" } } } }, - "Authentication required." : { - "extractionState" : "stale", + "Authentication failed. Check your credentials and try again." : { "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "需要身份验证。" + "value" : "身份验证失败。请检查凭据后重试。" } } } }, - "Auto-trust opened workspaces" : { - "extractionState" : "manual", + "Authentication required." : { + "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "自动信任已打开的工作区" + "value" : "需要身份验证。" } } } @@ -1255,17 +2601,6 @@ } } }, - "Both methods sign in to Cursor’s own backend — cursor-agent has no custom-endpoint support, so there is no API URL to set." : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "两种方式都登录 Cursor 自己的后端——cursor-agent 不支持自定义接入点,因此无需填写 API 地址。" - } - } - } - }, "Branch" : { "extractionState" : "manual", "localizations" : { @@ -1528,28 +2863,6 @@ } } }, - "China (api.moonshot.cn)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "中国(api.moonshot.cn)" - } - } - } - }, - "China (internal)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "中国(内网)" - } - } - } - }, "Choose a folder" : { "localizations" : { "zh-Hans" : { @@ -1615,17 +2928,6 @@ } } }, - "Choose which pi binary runs. Use the default, or point at your own pi build." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "选择运行哪个 pi 可执行文件。使用默认值,或指向你自己的 pi 构建。" - } - } - } - }, "Clear" : { "extractionState" : "stale", "localizations" : { @@ -1681,28 +2983,6 @@ } } }, - "CodeBuddy authenticates with an API key. Mainland China builds also require the environment set to “China (internal)”; iOA builds use “iOA”. The overseas build leaves it unset." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "CodeBuddy 使用 API 密钥认证。中国大陆版还需将环境设为“中国(内网)”,iOA 版使用“iOA”,海外版则保持未设置。" - } - } - } - }, - "CodeBuddy Configuration" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "CodeBuddy 配置" - } - } - } - }, "Codeg" : { }, @@ -1748,17 +3028,6 @@ } } }, - "Command not found" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "找不到命令" - } - } - } - }, "Command Prefix" : { "extractionState" : "stale", "localizations" : { @@ -1856,16 +3125,6 @@ } } }, - "Compacting context…" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "正在压缩上下文…" - } - } - } - }, "Completed-result cache" : { "extractionState" : "manual", "localizations" : { @@ -1887,17 +3146,6 @@ } } }, - "Config directory (PI_CODING_AGENT_DIR)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "配置目录(PI_CODING_AGENT_DIR)" - } - } - } - }, "Configuration" : { "extractionState" : "stale", "localizations" : { @@ -1996,26 +3244,6 @@ } } }, - "Context compacted" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "上下文已压缩" - } - } - } - }, - "Context compacted · %@ → %@ tokens" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "上下文已压缩 · %1$@ → %2$@ tokens" - } - } - } - }, "Conversation Tools" : { "extractionState" : "stale", "localizations" : { @@ -2026,354 +3254,233 @@ } } } - }, - "Copied" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已复制" - } - } - } - }, - "Copy" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复制" - } - } - } - }, - "Copy file contents" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复制文件内容" - } - } - } - }, - "Couldn’t list models — check the key and endpoint" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无法列出模型——请检查密钥和端点" - } - } - } - }, - "Couldn’t Read QR Code" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无法读取二维码" - } - } - } - }, - "Couldn’t Save" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无法保存" - } - } - } - }, - "Couldn’t Save Channel" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无法保存渠道" - } - } - } - }, - "Couldn’t Save MCP Server" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无法保存 MCP 服务器" - } - } - } - }, - "Couldn’t Save Provider" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无法保存供应商" - } - } - } - }, - "Couldn’t Save Server" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无法保存服务器" - } - } - } - }, - "Couldn’t Save Skill" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无法保存技能" - } - } - } - }, - "Couldn’t submit. Please try again." : { - "extractionState" : "manual", + }, + "Copied" : { + "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "提交失败,请重试。" + "value" : "已复制" } } } }, - "Create" : { - "extractionState" : "manual", + "Copy" : { + "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "创建" + "value" : "复制" } } } }, - "Create a skill to guide this agent." : { + "Copy file contents" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "创建一个技能来指导该智能体。" + "value" : "复制文件内容" } } } }, - "Create one in the Cursor Dashboard under Integrations." : { + "Couldn’t Read QR Code" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "可在 Cursor Dashboard 的 Integrations 中创建。" + "value" : "无法读取二维码" } } } }, - "Create reusable message templates to drop into the chat composer." : { + "Couldn’t Save" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "创建可复用的消息模板,随时插入聊天输入框。" + "value" : "无法保存" } } } }, - "Created" : { + "Couldn’t Save Channel" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "创建时间" + "value" : "无法保存渠道" } } } }, - "Credentials" : { + "Couldn’t Save MCP Server" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "凭据" + "value" : "无法保存 MCP 服务器" } } } }, - "Current version %@" : { + "Couldn’t Save Provider" : { + "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "当前版本 %@" + "value" : "无法保存供应商" } } } }, - "Cursor API Key" : { + "Couldn’t Save Server" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Cursor API 密钥" + "value" : "无法保存服务器" } } } }, - "Cursor asks before running commands." : { + "Couldn’t Save Skill" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Cursor 执行命令前会先询问。" + "value" : "无法保存技能" } } } }, - "Cursor Configuration" : { - "extractionState" : "stale", + "Couldn’t submit. Please try again." : { + "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Cursor 配置" + "value" : "提交失败,请重试。" } } } }, - "Cursor runs commands without asking. Deny rules below still apply." : { - "extractionState" : "stale", + "Create" : { + "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Cursor 执行命令时不再询问,下方的拒绝规则仍然生效。" + "value" : "创建" } } } }, - "cursor-agent isn’t installed" : { + "Create a skill to guide this agent." : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "尚未安装 cursor-agent" + "value" : "创建一个技能来指导该智能体。" } } } }, - "Custom (OpenAI-compatible)" : { - "extractionState" : "manual", + "Create reusable message templates to drop into the chat composer." : { + "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "自定义(OpenAI 兼容)" + "value" : "创建可复用的消息模板,随时插入聊天输入框。" } } } }, - "Custom Endpoint" : { + "Created" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "自定义端点" + "value" : "创建时间" } } } }, - "Custom git path" : { + "Credentials" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "自定义 git 路径" + "value" : "凭据" } } } }, - "Custom install" : { - "extractionState" : "stale", + "Current version %@" : { "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "自定义安装" + "value" : "当前版本 %@" } } } }, - "Custom path" : { + "Custom Endpoint" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "自定义路径" + "value" : "自定义端点" } } } }, - "Custom pi" : { - "extractionState" : "manual", + "Custom git path" : { + "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "自定义 pi" + "value" : "自定义 git 路径" } } } }, - "Custom pi flags (--approve, -e, …) aren’t forwarded by pi-acp — wrap pi in a script and point the command at it." : { - "extractionState" : "manual", + "Custom install" : { + "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "自定义 pi 参数(--approve、-e 等)不会被 pi-acp 转发——请将 pi 包进脚本并把命令指向该脚本。" + "value" : "自定义安装" } } } }, - "Custom provider…" : { - "extractionState" : "manual", + "Custom path" : { + "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "自定义供应商……" + "value" : "自定义路径" } } } @@ -2474,17 +3581,6 @@ } } }, - "Default Model" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "默认模型" - } - } - } - }, "Default Models by Tier" : { "localizations" : { "zh-Hans" : { @@ -2506,17 +3602,6 @@ } } }, - "Default pi" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "默认 pi" - } - } - } - }, "Default shell" : { "extractionState" : "stale", "localizations" : { @@ -2539,17 +3624,6 @@ } } }, - "Defines a provider in ~/.pi/agent/models.json at your endpoint. Most self-hosted or proxy servers use openai-completions." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在 ~/.pi/agent/models.json 中按你的端点定义一个供应商。多数自托管或代理服务器使用 openai-completions。" - } - } - } - }, "Delegation" : { "extractionState" : "stale", "localizations" : { @@ -2746,28 +3820,6 @@ } } }, - "Deny Rules" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "拒绝规则" - } - } - } - }, - "Deployment URL" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "部署地址" - } - } - } - }, "Depth limit" : { "extractionState" : "stale", "localizations" : { @@ -2834,17 +3886,6 @@ } } }, - "Disabled" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已禁用" - } - } - } - }, "Discard all changes to %@? This can't be undone." : { "localizations" : { "zh-Hans" : { @@ -3181,100 +4222,12 @@ } } }, - "Enter a model id (Kimi requires one for API-key mode)." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "请输入模型 id(API 密钥模式下 Kimi 必须指定)。" - } - } - } - }, "Enter a new name for this session." : { "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "为此会话输入一个新名称。" - } - } - } - }, - "Enter a pi command to save" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "请输入 pi 命令后再保存" - } - } - } - }, - "Enter a valid http(s) URL for the self-hosted deployment." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "请为自托管部署输入有效的 http(s) 地址。" - } - } - } - }, - "Enter a valid http(s) URL." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "请输入有效的 http(s) 地址。" - } - } - } - }, - "Enter an API key and endpoint first" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "请先输入 API 密钥和端点" - } - } - } - }, - "Enter your Cursor API key, or switch to Official Subscription." : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "请填写 Cursor API 密钥,或切换为官方订阅。" - } - } - } - }, - "Entered plan mode" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已进入计划模式" - } - } - } - }, - "Environment" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "环境" + "value" : "为此会话输入一个新名称。" } } } @@ -3376,17 +4329,6 @@ } } }, - "Extra high" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "超高" - } - } - } - }, "Extra High" : { "extractionState" : "stale", "localizations" : { @@ -3419,39 +4361,6 @@ } } }, - "Failed to install pi" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "安装 pi 失败" - } - } - } - }, - "Failed to save workspace trust" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存工作区信任失败" - } - } - } - }, - "Failed to uninstall pi" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "卸载 pi 失败" - } - } - } - }, "Fetch" : { "extractionState" : "stale", "localizations" : { @@ -3670,28 +4579,6 @@ } } }, - "GCP location (GOOGLE_CLOUD_LOCATION)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "GCP 区域(GOOGLE_CLOUD_LOCATION)" - } - } - } - }, - "GCP project (GOOGLE_CLOUD_PROJECT)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "GCP 项目(GOOGLE_CLOUD_PROJECT)" - } - } - } - }, "Gemini API Key" : { "extractionState" : "manual", "localizations" : { @@ -3790,17 +4677,6 @@ } } }, - "Grok Configuration" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Grok 配置" - } - } - } - }, "Hide" : { "extractionState" : "stale", "localizations" : { @@ -3876,17 +4752,6 @@ } } }, - "Inline api_key" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "内联 api_key" - } - } - } - }, "Insert" : { "extractionState" : "stale", "localizations" : { @@ -3931,17 +4796,6 @@ } } }, - "Install pi" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "安装 pi" - } - } - } - }, "Installed" : { "extractionState" : "manual", "localizations" : { @@ -3964,28 +4818,6 @@ } } }, - "International (api.moonshot.ai)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "国际(api.moonshot.ai)" - } - } - } - }, - "International = api.moonshot.ai; China (platform.kimi.com keys) = api.moonshot.cn. Custom points at any OpenAI-compatible endpoint." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "国际 = api.moonshot.ai;中国(platform.kimi.com 密钥)= api.moonshot.cn。自定义可指向任意 OpenAI 兼容端点。" - } - } - } - }, "Invalid agent" : { "extractionState" : "stale", "localizations" : { @@ -4019,17 +4851,6 @@ } } }, - "iOA" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "iOA" - } - } - } - }, "Jump to latest" : { "extractionState" : "stale", "localizations" : { @@ -4085,17 +4906,6 @@ } } }, - "Key works, but no models were returned" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "密钥有效,但未返回任何模型" - } - } - } - }, "Kick off tasks in any folder with your preferred agent." : { "extractionState" : "stale", "localizations" : { @@ -4107,39 +4917,6 @@ } } }, - "Kimi account login (subscription)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kimi 账号登录(订阅)" - } - } - } - }, - "Kimi Code config saved" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kimi Code 配置已保存" - } - } - } - }, - "Kimi Code Configuration" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kimi Code 配置" - } - } - } - }, "Language" : { "extractionState" : "stale", "localizations" : { @@ -4239,17 +5016,6 @@ } } }, - "Leave blank to use the provider SDK default." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "留空则使用供应商 SDK 的默认值。" - } - } - } - }, "Let agents pause to ask you a multiple-choice question and wait for an answer." : { "extractionState" : "manual", "localizations" : { @@ -4459,17 +5225,6 @@ } } }, - "Loading models…" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "正在加载模型…" - } - } - } - }, "Loading options…" : { "extractionState" : "stale", "localizations" : { @@ -4578,17 +5333,6 @@ } } }, - "Low (faster)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "低(更快)" - } - } - } - }, "Main" : { "extractionState" : "stale", "localizations" : { @@ -4675,28 +5419,6 @@ } } }, - "Max" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "最高" - } - } - } - }, - "Max context size (optional)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "最大上下文长度(可选)" - } - } - } - }, "Max tokens" : { "extractionState" : "stale", "localizations" : { @@ -4752,17 +5474,6 @@ } } }, - "Medium (balanced)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "中(均衡)" - } - } - } - }, "Message" : { "extractionState" : "stale", "localizations" : { @@ -4795,24 +5506,13 @@ } } }, - "Messages" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "消息" - } - } - } - }, - "Minimal" : { - "extractionState" : "manual", + "Messages" : { + "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "最小" + "value" : "消息" } } } @@ -5087,17 +5787,6 @@ } } }, - "No API key? Run “codebuddy” in a terminal to sign in with your Tencent account instead." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "没有 API 密钥?可在终端运行“codebuddy”改用腾讯账号登录。" - } - } - } - }, "No branches found." : { "extractionState" : "manual", "localizations" : { @@ -5487,17 +6176,6 @@ } } }, - "No XAI_API_KEY set." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未设置 XAI_API_KEY。" - } - } - } - }, "Not a Git Repository" : { "extractionState" : "stale", "localizations" : { @@ -5520,17 +6198,6 @@ } } }, - "Not authenticated yet — save an API key below (or sign in) to open Kimi sessions." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "尚未认证——请在下方保存 API 密钥(或登录)以打开 Kimi 会话。" - } - } - } - }, "Not available on this server." : { "extractionState" : "stale", "localizations" : { @@ -5575,17 +6242,6 @@ } } }, - "Not signed in" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未登录" - } - } - } - }, "Not Supported" : { "extractionState" : "stale", "localizations" : { @@ -5641,17 +6297,6 @@ } } }, - "Off" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "关闭" - } - } - } - }, "Official Subscription" : { "extractionState" : "stale", "localizations" : { @@ -5707,17 +6352,6 @@ } } }, - "Only folders you open here are trusted, never your whole machine — and this affects config loading only, not what pi is allowed to run." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "只有你在此打开的文件夹会被信任,绝不会信任整台机器——且这只影响配置加载,不影响 pi 被允许执行的操作。" - } - } - } - }, "Only needed for private repositories. Use a personal access token as the password." : { "extractionState" : "stale", "localizations" : { @@ -5845,17 +6479,6 @@ } } }, - "Overseas (default)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "海外(默认)" - } - } - } - }, "Parent Directory" : { "extractionState" : "stale", "localizations" : { @@ -5867,17 +6490,6 @@ } } }, - "Passed to cursor-agent as its --model flag. Leave unset to use the account default." : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "作为 --model 参数传给 cursor-agent。留空则使用账号默认模型。" - } - } - } - }, "Password / Token" : { "extractionState" : "stale", "localizations" : { @@ -5922,17 +6534,6 @@ } } }, - "Permission Mode" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "权限模式" - } - } - } - }, "Permission requests" : { "extractionState" : "manual", "localizations" : { @@ -5944,17 +6545,6 @@ } } }, - "Permissions" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "权限" - } - } - } - }, "Personal Access Token" : { "extractionState" : "stale", "localizations" : { @@ -5988,83 +6578,6 @@ } } }, - "Pi authenticates with your model provider’s API key. The key is written to ~/.pi/agent/auth.json and the model selection to settings.json." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pi 使用你的模型供应商 API 密钥认证。密钥写入 ~/.pi/agent/auth.json,模型选择写入 settings.json。" - } - } - } - }, - "pi command or path" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "pi 命令或路径" - } - } - } - }, - "Pi config saved" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pi 配置已保存" - } - } - } - }, - "Pi Configuration" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pi 配置" - } - } - } - }, - "pi installed" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "pi 已安装" - } - } - } - }, - "Pi runtime saved" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pi 运行时已保存" - } - } - } - }, - "pi uninstalled" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "pi 已卸载" - } - } - } - }, "Pick a server in the Chats tab to browse its folders." : { "extractionState" : "stale", "localizations" : { @@ -6142,27 +6655,6 @@ } } }, - "Plan ready" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "计划已就绪" - } - } - } - }, - "Plan ready for review" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "计划已就绪,待确认" - } - } - } - }, "Prefix" : { "extractionState" : "stale", "localizations" : { @@ -6235,73 +6727,29 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "项目" - } - } - } - }, - "Prompt" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "提示词" - } - } - } - }, - "Provider" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "供应商" - } - } - } - }, - "Provider and model are required" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "供应商和模型为必填项" - } - } - } - }, - "Provider env sub-table" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "供应商 env 子表" + "value" : "项目" } } } }, - "Provider ID" : { + "Prompt" : { "extractionState" : "manual", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "供应商 ID" + "value" : "提示词" } } } }, - "Provider type" : { - "extractionState" : "manual", + "Provider" : { + "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "供应商类型" + "value" : "供应商" } } } @@ -6598,17 +7046,6 @@ } } }, - "Recheck" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "重新检查" - } - } - } - }, "Recommended" : { "localizations" : { "zh-Hans" : { @@ -6913,17 +7350,6 @@ } } }, - "Request Changes" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "要求修改" - } - } - } - }, "Restart" : { "extractionState" : "stale", "localizations" : { @@ -6968,17 +7394,6 @@ } } }, - "Rules and sandbox merge into ~/.cursor/cli-config.json, preserving keys the Cursor CLI wrote. Running sessions pick them up after a restart." : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "规则与沙盒会合并进 ~/.cursor/cli-config.json,并保留 Cursor CLI 自己写入的其它键。运行中的会话需重启后生效。" - } - } - } - }, "Run `gemini` once on the server to complete Google OAuth." : { "localizations" : { "zh-Hans" : { @@ -6989,28 +7404,6 @@ } } }, - "Run `kimi login` in a terminal to sign in with a Kimi subscription account (device-code OAuth). codeg stores nothing and reuses Kimi’s own login. Saving here removes codeg’s API-key gate token." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在终端运行 `kimi login`,用 Kimi 订阅账号登录(设备码 OAuth)。codeg 不存储任何内容,复用 Kimi 自己的登录。在此保存会移除 codeg 的 API 密钥闸门令牌。" - } - } - } - }, - "Run Everything" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "全部放行" - } - } - } - }, "Run Preflight" : { "localizations" : { "zh-Hans" : { @@ -7021,27 +7414,6 @@ } } }, - "Run this on the machine hosting codeg, then refresh:" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在运行 codeg 的机器上执行以下命令,然后点击刷新:" - } - } - } - }, - "Run your own pi build, install, or wrapper." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "运行你自己的 pi 构建、安装或包装脚本。" - } - } - } - }, "Running" : { "extractionState" : "stale", "localizations" : { @@ -7053,28 +7425,6 @@ } } }, - "Runtime" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "运行时" - } - } - } - }, - "Sandbox" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "沙盒" - } - } - } - }, "Save" : { "extractionState" : "stale", "localizations" : { @@ -7097,17 +7447,6 @@ } } }, - "Save config.toml" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存 config.toml" - } - } - } - }, "Save for future operations" : { "localizations" : { "zh-Hans" : { @@ -7118,17 +7457,6 @@ } } }, - "Save Kimi Code Config" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存 Kimi Code 配置" - } - } - } - }, "Save Path" : { "extractionState" : "stale", "localizations" : { @@ -7140,72 +7468,6 @@ } } }, - "Save Pi Config" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存 Pi 配置" - } - } - } - }, - "Save Runtime" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存运行时" - } - } - } - }, - "Saved as CODEBUDDY_API_KEY for this agent. Alternatively, sign in with the CodeBuddy CLI in a terminal." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "作为 CODEBUDDY_API_KEY 保存到该智能体。也可以在终端用 CodeBuddy CLI 登录。" - } - } - } - }, - "Saved as CODEBUDDY_API_KEY for this agent. Use the key issued by your private deployment." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "作为 CODEBUDDY_API_KEY 保存到该智能体。请使用你的私有化部署所签发的密钥。" - } - } - } - }, - "Saved as CODEBUDDY_BASE_URL and points CodeBuddy at your private endpoint. The region setting is left unset for self-hosted deployments." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "作为 CODEBUDDY_BASE_URL 保存,将 CodeBuddy 指向你的私有端点。自托管部署下区域设置保持未设置。" - } - } - } - }, - "Saved as XAI_API_KEY for this agent, or run “grok login” in a terminal for subscription sign-in (SuperGrok / X Premium+)." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已保存为该 agent 的 XAI_API_KEY,或在终端运行“grok login”进行订阅登录(SuperGrok / X Premium+)。" - } - } - } - }, "Scan QR code" : { "extractionState" : "stale", "localizations" : { @@ -7318,17 +7580,6 @@ } } }, - "Select a provider" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "选择一个供应商" - } - } - } - }, "Select a Session" : { "extractionState" : "stale", "localizations" : { @@ -7395,17 +7646,6 @@ } } }, - "Self-hosted (private deployment)" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "自托管(私有化部署)" - } - } - } - }, "Send" : { "extractionState" : "stale", "localizations" : { @@ -7450,17 +7690,6 @@ } } }, - "Send Notes" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "发送意见" - } - } - } - }, "Send notes and corrections to an agent while it’s working." : { "extractionState" : "manual", "localizations" : { @@ -7580,58 +7809,36 @@ } } } - }, - "Session Details" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "会话详情" - } - } - } - }, - "Session Key" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "会话密钥" - } - } - } - }, - "Sessions directory (PI_CODING_AGENT_SESSION_DIR)" : { - "extractionState" : "manual", + }, + "Session Details" : { + "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "会话目录(PI_CODING_AGENT_SESSION_DIR)" + "value" : "会话详情" } } } }, - "Set as Default" : { + "Session Key" : { "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "设为默认" + "value" : "会话密钥" } } } }, - "Sets CODEBUDDY_INTERNET_ENVIRONMENT. Mainland China must use “China (internal)”; the overseas build leaves it unset." : { - "extractionState" : "manual", + "Set as Default" : { + "extractionState" : "stale", "localizations" : { "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "设置 CODEBUDDY_INTERNET_ENVIRONMENT。中国大陆须使用“中国(内网)”,海外版保持未设置。" + "value" : "设为默认" } } } @@ -7746,28 +7953,6 @@ } } }, - "Sign in to load the model list." : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "登录后才能加载模型列表。" - } - } - } - }, - "Sign in with your Cursor account in a terminal. No credential is stored here." : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在终端中使用你的 Cursor 账号登录,此处不保存任何凭据。" - } - } - } - }, "Sign-in" : { "extractionState" : "stale", "localizations" : { @@ -7779,17 +7964,6 @@ } } }, - "Signed in" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已登录" - } - } - } - }, "Signed in via ChatGPT subscription" : { "localizations" : { "zh-Hans" : { @@ -8072,17 +8246,6 @@ } } }, - "Stored in ~/.pi/agent/auth.json for the selected provider." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "为所选供应商保存到 ~/.pi/agent/auth.json。" - } - } - } - }, "Sub-agent" : { "extractionState" : "stale", "localizations" : { @@ -8149,17 +8312,6 @@ } } }, - "Switched mode" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已切换模式" - } - } - } - }, "System" : { "localizations" : { "zh-Hans" : { @@ -8334,16 +8486,6 @@ } } }, - "The agent didn’t include a plan." : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "该智能体没有给出计划内容。" - } - } - } - }, "The agent needs permission to continue." : { "extractionState" : "manual", "localizations" : { @@ -8420,17 +8562,6 @@ } } }, - "The controls below merge into ~/.grok/config.toml, preserving your other keys and comments. Other keys stay editable under Advanced." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "下面的控件会合并写入 ~/.grok/config.toml,保留你的其它键与注释。其它键可在「高级」中编辑。" - } - } - } - }, "The language the bot replies in." : { "extractionState" : "stale", "localizations" : { @@ -8442,28 +8573,6 @@ } } }, - "The model id to use. Click Fetch to list the models your key can access (e.g. kimi-k2.7-code) — avoids “model not found” errors." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "要使用的模型 id。点“获取”可列出你的密钥能访问的模型(如 kimi-k2.7-code)——避免“找不到模型”的错误。" - } - } - } - }, - "The provider protocol Kimi speaks (config.toml `type`). Use Kimi / Moonshot for a Moonshot / platform.kimi.com key." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kimi 使用的供应商协议(config.toml 的 `type`)。使用 Moonshot / platform.kimi.com 密钥时选 Kimi / Moonshot。" - } - } - } - }, "The server address changed — enter a token for the new endpoint." : { "extractionState" : "stale", "localizations" : { @@ -8519,17 +8628,6 @@ } } }, - "Thinking" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "思考强度" - } - } - } - }, "Thinking…" : { "localizations" : { "zh-Hans" : { @@ -8778,17 +8876,6 @@ } } }, - "Tokens, e.g. 262144. Leave blank to use the model default." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "以 token 计,如 262144。留空则使用模型默认值。" - } - } - } - }, "Tool" : { "extractionState" : "stale", "localizations" : { @@ -9102,28 +9189,6 @@ } } }, - "Use default" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "使用默认" - } - } - } - }, - "Use the bundled pi-acp adapter with the pi on your PATH. Install pi with: npm install -g @earendil-works/pi-coding-agent" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "使用内置的 pi-acp 适配器和 PATH 中的 pi。安装 pi:npm install -g @earendil-works/pi-coding-agent" - } - } - } - }, "User prompts" : { "extractionState" : "manual", "localizations" : { @@ -9182,17 +9247,6 @@ } } }, - "Validate" : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "校验" - } - } - } - }, "Validate Token" : { "extractionState" : "stale", "localizations" : { @@ -9270,17 +9324,6 @@ } } }, - "Vertex AI uses Google Application Default Credentials — run `gcloud auth application-default login` (no API key)." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vertex AI 使用 Google 应用默认凭据——请运行 `gcloud auth application-default login`(无需 API 密钥)。" - } - } - } - }, "View" : { "extractionState" : "stale", "localizations" : { @@ -9402,28 +9445,6 @@ } } }, - "What should change?" : { - "extractionState" : "stale", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "需要修改什么?" - } - } - } - }, - "When codeg connects pi to a folder, mark that folder trusted so pi loads the project’s local config and skills without a separate prompt." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "当 codeg 将 pi 连接到某文件夹时,把该文件夹标记为受信任,使 pi 无需额外提示即可加载项目的本地配置和技能。" - } - } - } - }, "When off, the delegate_to_agent tool is hidden from the agent’s catalog." : { "extractionState" : "manual", "localizations" : { @@ -9435,17 +9456,6 @@ } } }, - "Where the API key is written inside config.toml." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "API 密钥在 config.toml 中的写入位置。" - } - } - } - }, "Which agent events are sent to your channels and webhooks." : { "extractionState" : "stale", "localizations" : { @@ -9479,17 +9489,6 @@ } } }, - "With a custom config directory, the Skills, Experts, and Office tools managed in Settings won’t apply to this pi — manage its skills in that folder directly." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "使用自定义配置目录后,设置中管理的技能、专家和 Office 工具将不适用于此 pi——请直接在该目录中管理其技能。" - } - } - } - }, "Working Tree Clean" : { "extractionState" : "stale", "localizations" : { @@ -9523,39 +9522,6 @@ } } }, - "Written to ~/.kimi-code/config.toml and used for inference. From platform.kimi.com or platform.kimi.ai." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "写入 ~/.kimi-code/config.toml 并用于推理。来自 platform.kimi.com 或 platform.kimi.ai。" - } - } - } - }, - "Written verbatim (comments preserved) and validated as TOML. codeg also seeds the gate token so the session opens." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "原样写入(保留注释)并按 TOML 校验。codeg 还会植入闸门令牌以打开会话。" - } - } - } - }, - "XAI_API_KEY is configured." : { - "extractionState" : "manual", - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已配置 XAI_API_KEY。" - } - } - } - }, "You’re up to date." : { "extractionState" : "manual", "localizations" : { From 2f49237a21b0eb684ad9bb702af217ebd78b192a Mon Sep 17 00:00:00 2001 From: JunWang233 Date: Sat, 1 Aug 2026 16:00:45 +0800 Subject: [PATCH 3/3] Keep fallback tint behind content --- CodegiOS/DesignSystem/GlassComponents.swift | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/CodegiOS/DesignSystem/GlassComponents.swift b/CodegiOS/DesignSystem/GlassComponents.swift index 243178f..1f7d764 100644 --- a/CodegiOS/DesignSystem/GlassComponents.swift +++ b/CodegiOS/DesignSystem/GlassComponents.swift @@ -13,13 +13,16 @@ extension View { self.glassEffect(.regular, in: shape) } } else { - self - .background(Theme.bgElevated, in: shape) - .overlay { + self.background { + ZStack { + shape.fill(Theme.bgElevated) + if let tint { shape.fill(tint) } } + .allowsHitTesting(false) + } } }