{modelLabel}
{effortLabel ? {effortLabel} : null}
diff --git a/src/mobile/views/ThreadView.test.tsx b/src/mobile/views/ThreadView.test.tsx
index b3d19a5d6..23bd06690 100644
--- a/src/mobile/views/ThreadView.test.tsx
+++ b/src/mobile/views/ThreadView.test.tsx
@@ -438,6 +438,52 @@ describe("mobile ThreadView", () => {
expect(view.container.querySelector(".m-compose-summary .lucide-zap")).toBeNull();
});
+ it("shows the session-pinned runtime model in the compact summary", () => {
+ const baseStatus = makeCodexStatus();
+ fixtures.agentStatuses = [
+ {
+ ...baseStatus,
+ runtimeVariants: {
+ sdk: {
+ presentationMode: "gui",
+ installed: true,
+ authState: "authenticated",
+ authUsesProviderLogin: false,
+ capabilities: {
+ ...baseStatus.capabilities,
+ models: [{ id: "sdk-model", label: "Pinned SDK model" }],
+ efforts: ["high"],
+ modelEfforts: { "sdk-model": ["high"] },
+ },
+ },
+ },
+ sessionRuntimeRouting: { prefixes: { "sdk:": "sdk" } },
+ },
+ ];
+ const thread = {
+ ...makeTerminalThread(),
+ presentationMode: "gui",
+ config: { model: "sdk-model", effort: "high" },
+ sessionRef: {
+ providerSessionId: "sdk:session-1",
+ discoveredAt: "2026-01-01T00:00:00.000Z",
+ },
+ } as Thread;
+
+ const view = render(
+ undefined}
+ onSubmitInput={() => Promise.resolve()}
+ />,
+ );
+
+ expect(view.container.querySelector(".m-compose-summary")).toHaveTextContent(
+ "Pinned SDK model",
+ );
+ });
+
it("hosts an open runtime request above the composer bubble, outside its clip", () => {
const thread = { ...makeTerminalThread(), presentationMode: "gui" } as Thread;
useAppStore.setState({
@@ -571,8 +617,14 @@ describe("mobile ThreadView", () => {
expect(card?.closest(".m-compose-bubble")).toBeNull();
});
- it("hosts the auth-required dock in the same action-dock card", () => {
- fixtures.agentStatuses = [{ ...makeCodexStatus(), authState: "missing" }];
+ it("uses GUI authentication for the auth-required action dock", () => {
+ fixtures.agentStatuses = [
+ {
+ ...makeCodexStatus(),
+ authState: "authenticated",
+ presentationAuthStates: { gui: "missing" },
+ },
+ ];
const thread = { ...makeTerminalThread(), presentationMode: "gui" } as Thread;
const view = render(
@@ -589,6 +641,28 @@ describe("mobile ThreadView", () => {
expect(card?.closest(".m-compose-bubble")).toBeNull();
});
+ it("does not show an auth dock when GUI auth is ready despite missing root auth", () => {
+ fixtures.agentStatuses = [
+ {
+ ...makeCodexStatus(),
+ authState: "missing",
+ presentationAuthStates: { gui: "authenticated" },
+ },
+ ];
+ const thread = { ...makeTerminalThread(), presentationMode: "gui" } as Thread;
+
+ const view = render(
+ undefined}
+ onSubmitInput={() => Promise.resolve()}
+ />,
+ );
+
+ expect(view.container.querySelector(".m-thread-action-docks")).toBeNull();
+ });
+
it("keeps the composer expanded when the keyboard is dismissed (no collapse-on-focus-loss)", async () => {
const { container } = render(
{
expect(innerScript).toContain("printf '\\033]777;poracode-login-complete=lc_");
expect(innerScript).toContain('"$__lc_exit"');
});
+
+ it("opens update commands with update-specific terminal state", () => {
+ runAgentInstallCommand({
+ label: "Update Cursor SDK",
+ command: "npm install -g '@cursor/sdk@^1.0.24'",
+ project: posixProject,
+ purpose: "update",
+ });
+
+ expect(loginTerminalStore.open).toHaveBeenCalledWith(
+ expect.objectContaining({
+ label: "Update Cursor SDK",
+ purpose: "update",
+ shellId: expect.stringMatching(/^update:/u),
+ }),
+ );
+ });
});
diff --git a/src/renderer/actions/agentLoginActions.ts b/src/renderer/actions/agentLoginActions.ts
index e29d827ff..73390e4b4 100644
--- a/src/renderer/actions/agentLoginActions.ts
+++ b/src/renderer/actions/agentLoginActions.ts
@@ -154,10 +154,15 @@ export function runAgentInstallCommand(input: {
env?: Record;
onCommandComplete?: (exitCode: number) => void;
project?: Project;
+ purpose?: "install" | "update";
}): boolean {
const project = input.project ?? resolveLoginProject();
if (!project) {
- toast.warning(i18n._(msg`Add a project before installing an agent.`));
+ toast.warning(
+ input.purpose === "update"
+ ? i18n._(msg`Add a project before updating an agent.`)
+ : i18n._(msg`Add a project before installing an agent.`),
+ );
return false;
}
@@ -170,7 +175,7 @@ export function runAgentInstallCommand(input: {
.catch(() => undefined);
}
- const shellId = `install:${crypto.randomUUID()}`;
+ const shellId = `${input.purpose ?? "install"}:${crypto.randomUUID()}`;
const command = buildTerminalCommand({
command: typeof input.command === "function" ? input.command(project) : input.command,
env: input.env,
@@ -200,7 +205,7 @@ export function runAgentInstallCommand(input: {
shellId,
label: input.label,
projectLocation: project.location,
- purpose: "install",
+ purpose: input.purpose ?? "install",
onForceClose: () => {
stopWatching();
fireOnce(-1);
diff --git a/src/renderer/actions/prAutomationActions.ts b/src/renderer/actions/prAutomationActions.ts
index 589f42694..abd406a4c 100644
--- a/src/renderer/actions/prAutomationActions.ts
+++ b/src/renderer/actions/prAutomationActions.ts
@@ -1,6 +1,7 @@
import { toast } from "@heroui/react";
import { msg } from "@lingui/core/macro";
import { getProjectAgentStatuses } from "@/shared/agentStatus";
+import { authStateForPresentation } from "@/shared/agentSelection";
import type { AgentStatus, PrWatch, Project, ScheduledTaskConfig } from "@/shared/contracts";
import type { SharedSettings } from "@/shared/settings";
import { friendlyError } from "@/shared/messages";
@@ -33,7 +34,11 @@ export function resolvePrAutomationAgent(
const agents = getProjectAgentStatuses(project.location, windowsAgents, wslAgents)
.filter((agent) => {
const modes = agent.capabilities.presentationModes ?? [agent.capabilities.presentationMode];
- return agent.installed && agent.authState !== "missing" && modes.includes("gui");
+ return (
+ agent.installed &&
+ authStateForPresentation(agent, "gui") !== "missing" &&
+ modes.includes("gui")
+ );
})
.map((agent) => agentWithCapabilities(agent, "gui"))
.filter((agent) => agent.capabilities.models.length > 0);
diff --git a/src/renderer/components/common/ProviderModelMenu/parts/buildItems.ts b/src/renderer/components/common/ProviderModelMenu/parts/buildItems.ts
index 88cb7c529..0bba6c37a 100644
--- a/src/renderer/components/common/ProviderModelMenu/parts/buildItems.ts
+++ b/src/renderer/components/common/ProviderModelMenu/parts/buildItems.ts
@@ -27,6 +27,7 @@ export interface ProviderModelMenuProvider {
label: string;
icon?: string;
presentationMode?: ThreadPresentationMode;
+ runtimeVariant?: string;
/** Unique UI identity when one adapter exposes multiple model surfaces. */
modelPickerKey?: string;
/** Settings key used for hidden-model persistence. */
diff --git a/src/renderer/components/common/ProviderModelMenu/parts/providerIdentity.ts b/src/renderer/components/common/ProviderModelMenu/parts/providerIdentity.ts
index 9e8de412d..d24c90f17 100644
--- a/src/renderer/components/common/ProviderModelMenu/parts/providerIdentity.ts
+++ b/src/renderer/components/common/ProviderModelMenu/parts/providerIdentity.ts
@@ -1,19 +1,40 @@
import type { ThreadPresentationMode } from "@/shared/contracts";
-export const CURSOR_ACP_MODEL_VISIBILITY_KEY = "cursor-acp";
-
type ProviderIdentityInput = {
kind: string;
label?: string;
presentationMode?: ThreadPresentationMode;
+ runtimeVariant?: string;
modelPickerKey?: string;
hiddenModelsKey?: string;
+ /** Adapter-declared runtime badge for the surface (`AgentCapability.runtimeLabel`). */
+ capabilities?: { runtimeLabel?: string | undefined };
+};
+
+/**
+ * Compatibility defaults for provider surfaces that shipped before their
+ * adapter declared a `runtimeLabel` capability / a named runtime variant per
+ * GUI surface.
+ *
+ * Shared code below never branches on a provider kind — it only looks the kind
+ * up in this table. Entries exist purely so already-persisted hidden-model keys
+ * and already-shipped surface labels stay stable; a provider that declares
+ * `runtimeLabel` on every runtime surface needs no entry here.
+ */
+const legacySurfaceIdentity: Record<
+ string,
+ { terminalRuntimeLabel?: string; defaultGuiRuntimeVariant?: string }
+> = {
+ // Cursor's CLI surface has no adapter-declared runtimeLabel, and threads that
+ // predate named runtime variants persist their GUI hidden models under the
+ // ACP surface key.
+ cursor: { terminalRuntimeLabel: "CLI", defaultGuiRuntimeVariant: "acp" },
};
export function providerMenuKey(provider: ProviderIdentityInput): string {
if (provider.modelPickerKey) return provider.modelPickerKey;
return provider.presentationMode
- ? `${provider.kind}:${provider.presentationMode}`
+ ? `${provider.kind}:${provider.presentationMode}${provider.runtimeVariant ? `:${provider.runtimeVariant}` : ""}`
: provider.kind;
}
@@ -22,16 +43,40 @@ export function providerVisibilityKey(provider: ProviderIdentityInput): string {
return modelVisibilityKey(provider.kind, provider.presentationMode);
}
+/**
+ * Runtime-variant id that owns a surface: the caller-supplied variant, else the
+ * provider's legacy default for its structured surface. Terminal surfaces are
+ * never runtime-scoped.
+ */
+function resolveRuntimeVariantId(
+ agentKind: string,
+ presentationMode?: ThreadPresentationMode,
+ runtimeVariant?: string,
+): string | undefined {
+ if (presentationMode !== "gui") return undefined;
+ return (
+ runtimeVariant?.toLowerCase() ?? legacySurfaceIdentity[agentKind]?.defaultGuiRuntimeVariant
+ );
+}
+
+/** Settings key used to persist hidden models for one provider surface. */
export function modelVisibilityKey(
agentKind: string,
presentationMode?: ThreadPresentationMode,
+ runtimeVariant?: string,
): string {
- return agentKind === "cursor" && presentationMode === "gui"
- ? CURSOR_ACP_MODEL_VISIBILITY_KEY
- : agentKind;
+ const variant = resolveRuntimeVariantId(agentKind, presentationMode, runtimeVariant);
+ return variant ? `${agentKind}-${variant}` : agentKind;
}
export function providerLabelForPresentation(provider: ProviderIdentityInput): string {
- if (provider.kind !== "cursor") return provider.label ?? provider.kind;
- return provider.presentationMode === "terminal" ? "Cursor CLI" : (provider.label ?? "Cursor");
+ const label = provider.label ?? provider.kind;
+ const runtimeLabel =
+ provider.presentationMode === "terminal"
+ ? legacySurfaceIdentity[provider.kind]?.terminalRuntimeLabel
+ : provider.capabilities?.runtimeLabel;
+ if (!runtimeLabel) return label;
+ // Callers may pass a provider whose label was already qualified by this
+ // function (menu providers are built once and re-rendered); stay idempotent.
+ return label.endsWith(` ${runtimeLabel}`) ? label : `${label} ${runtimeLabel}`;
}
diff --git a/src/renderer/components/providers/cursor/index.test.tsx b/src/renderer/components/providers/cursor/index.test.tsx
new file mode 100644
index 000000000..f2e527992
--- /dev/null
+++ b/src/renderer/components/providers/cursor/index.test.tsx
@@ -0,0 +1,114 @@
+// @vitest-environment node
+
+import { describe, expect, it, vi } from "vitest";
+import type { AgentCapability, ThreadConfig } from "@/shared/contracts";
+import { getComposerControls } from "../providerComposer";
+import "./index";
+
+const sdkCapabilities: AgentCapability = {
+ runtimeLabel: "SDK",
+ models: [],
+ efforts: [],
+ modelEfforts: {},
+ modes: ["agent", "plan"],
+ approvalPolicies: [
+ { id: "default", label: "Auto-review" },
+ { id: "never", label: "Allow All Tools" },
+ ],
+ sandboxModes: [
+ { id: "workspace-write", label: "Workspace Sandbox" },
+ { id: "danger-full-access", label: "No Sandbox" },
+ ],
+ defaultApprovalPolicy: "default",
+ defaultSandboxMode: "workspace-write",
+ bypassPermissions: {
+ approvalPolicy: "never",
+ sandboxMode: "danger-full-access",
+ },
+ supportsResume: true,
+ supportsDirectInput: false,
+ liveInputMode: "server",
+ presentationMode: "gui",
+ settingDefs: [],
+};
+
+function permissionToggle(
+ config: ThreadConfig,
+ onConfigChange: (patch: Partial) => void,
+) {
+ const controls = getComposerControls("cursor")?.({
+ capabilities: sdkCapabilities,
+ config,
+ isDisabled: false,
+ onConfigChange,
+ presentationMode: "gui",
+ });
+ const permission = controls?.find(
+ (control) => "iconKind" in control && control.iconKind === "permission",
+ );
+ if (!permission || permission.kind !== "toggle") {
+ throw new Error("Cursor permission toggle was not registered.");
+ }
+ return permission;
+}
+
+describe("Cursor composer controls", () => {
+ it("shows the active structured runtime beside the model controls", () => {
+ const controls = getComposerControls("cursor")?.({
+ capabilities: sdkCapabilities,
+ config: { model: "auto" },
+ isDisabled: false,
+ onConfigChange: () => undefined,
+ presentationMode: "gui",
+ });
+
+ expect(controls?.[0]).toMatchObject({ kind: "static", value: "SDK" });
+ });
+
+ it("enables and displays full access only when both SDK safety controls bypass", () => {
+ const onConfigChange = vi.fn<(patch: Partial) => void>();
+ const supervised = permissionToggle(
+ {
+ model: "auto",
+ approvalPolicy: "never",
+ sandboxMode: "workspace-write",
+ },
+ onConfigChange,
+ );
+
+ expect(supervised.isSelected).toBe(false);
+ supervised.onChange?.(true);
+ expect(onConfigChange).toHaveBeenCalledWith({
+ approvalPolicy: "never",
+ sandboxMode: "danger-full-access",
+ });
+
+ const unrestricted = permissionToggle(
+ {
+ model: "auto",
+ approvalPolicy: "never",
+ sandboxMode: "danger-full-access",
+ },
+ onConfigChange,
+ );
+ expect(unrestricted.isSelected).toBe(true);
+ });
+
+ it("restores the SDK's safe defaults when full access is disabled", () => {
+ const onConfigChange = vi.fn<(patch: Partial) => void>();
+ const permission = permissionToggle(
+ {
+ model: "auto",
+ approvalPolicy: "never",
+ sandboxMode: "danger-full-access",
+ },
+ onConfigChange,
+ );
+
+ permission.onChange?.(false);
+ expect(onConfigChange).toHaveBeenCalledWith({
+ approvalPolicy: "default",
+ sandboxMode: "workspace-write",
+ });
+ });
+});
diff --git a/src/renderer/components/providers/cursor/index.tsx b/src/renderer/components/providers/cursor/index.tsx
index 5061c1671..7499b964a 100644
--- a/src/renderer/components/providers/cursor/index.tsx
+++ b/src/renderer/components/providers/cursor/index.tsx
@@ -3,6 +3,7 @@ export * from "./CursorIcon";
import { CursorIcon } from "./CursorIcon";
import providerManifest from "./manifest";
import type { ComposerControl } from "@/renderer/components/thread/ThreadComposer";
+import { resolveUnrestrictedPermissionConfig } from "@/shared/agents/unrestrictedPermissions";
import { fullAccessToggle, planWorkToggle } from "../composerControlBuilders";
import { registerProviderIcon } from "../ProviderIcon";
import { registerComposerControls } from "../providerComposer";
@@ -38,9 +39,23 @@ registerConflictResolverDefaults(PROVIDER_KIND, {
registerComposerControls(PROVIDER_KIND, ({ capabilities, config, isDisabled, onConfigChange }) => {
const hasPlanMode = capabilities.modes.includes("plan");
const isPlanMode = config.mode === "plan";
- const isFullAccess = (config.approvalPolicy ?? "default") === "never";
+ const unrestricted = resolveUnrestrictedPermissionConfig(capabilities);
+ const isFullAccess =
+ (unrestricted.approvalPolicy === undefined ||
+ config.approvalPolicy === unrestricted.approvalPolicy) &&
+ (unrestricted.sandboxMode === undefined || config.sandboxMode === unrestricted.sandboxMode);
const controls: ComposerControl[] = [
+ ...(capabilities.runtimeLabel
+ ? [
+ {
+ kind: "static" as const,
+ value: capabilities.runtimeLabel,
+ hideLabelOnWrap: true,
+ tier: 6,
+ },
+ ]
+ : []),
...(hasPlanMode
? [
planWorkToggle({
@@ -55,8 +70,23 @@ registerComposerControls(PROVIDER_KIND, ({ capabilities, config, isDisabled, onC
fullAccessToggle({
isFullAccess,
isDisabled,
- onChange: (isSelected) =>
- onConfigChange({ approvalPolicy: isSelected ? "never" : "default" }),
+ onChange: (isSelected) => {
+ if (isSelected) {
+ onConfigChange(unrestricted);
+ return;
+ }
+ onConfigChange({
+ approvalPolicy: "default",
+ ...(capabilities.sandboxModes.length > 0
+ ? {
+ sandboxMode:
+ capabilities.defaultSandboxMode ??
+ capabilities.sandboxModes[0]?.id ??
+ "workspace-write",
+ }
+ : {}),
+ });
+ },
}),
]
: []),
diff --git a/src/renderer/components/thread/ContinueInProviderDialog.tsx b/src/renderer/components/thread/ContinueInProviderDialog.tsx
index aa819c928..dc3f79902 100644
--- a/src/renderer/components/thread/ContinueInProviderDialog.tsx
+++ b/src/renderer/components/thread/ContinueInProviderDialog.tsx
@@ -32,6 +32,7 @@ import { useAttachments } from "../composer/useAttachments";
import { flattenSegments } from "../composer/serializeMentions";
import { PresentationModeTabs } from "./PresentationModeTabs";
import {
+ agentStatusForPresentation,
capabilitiesForPresentation,
filterHiddenModels,
resolveModelSelection,
@@ -267,6 +268,9 @@ export function ContinueInProviderDialog(props: {
const selectedAgent = otherAgents.find((a) => a.kind === selectedKind);
const sourcePresentationMode =
thread.presentationMode ?? sourceAgent?.capabilities.presentationMode ?? "terminal";
+ const sourceRuntimeStatus = sourceAgent
+ ? agentStatusForPresentation(sourceAgent, sourcePresentationMode, thread.sessionRef)
+ : undefined;
const lastPresentationModeByAgent = useSharedSettings((s) => s.lastPresentationModeByAgent);
const setLastPresentationMode = useSharedSettings((s) => s.setLastPresentationMode);
const [targetPresentationMode, setTargetPresentationMode] = useState(() =>
@@ -388,11 +392,8 @@ export function ContinueInProviderDialog(props: {
const hiddenModelIds = useSharedSettings(
(s) => s.hiddenModels[modelVisibilityKey(thread.agentKind, sourcePresentationMode)],
);
- const filteredSourceCaps = sourceAgent
- ? filterHiddenModels(
- capabilitiesForPresentation(sourceAgent.capabilities, sourcePresentationMode),
- hiddenModelIds,
- )
+ const filteredSourceCaps = sourceRuntimeStatus
+ ? filterHiddenModels(sourceRuntimeStatus.capabilities, hiddenModelIds)
: undefined;
const models = filteredSourceCaps?.models ?? [];
const extractModel = thread.config.model || models[0]?.id || "";
diff --git a/src/renderer/components/thread/ThreadComposerSection.test.tsx b/src/renderer/components/thread/ThreadComposerSection.test.tsx
index 49b16c8c1..431e61d97 100644
--- a/src/renderer/components/thread/ThreadComposerSection.test.tsx
+++ b/src/renderer/components/thread/ThreadComposerSection.test.tsx
@@ -4,6 +4,7 @@ import type { ReactNode } from "react";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { renderWithI18n as render } from "@/renderer/testUtils/i18n";
import type { AgentStatus, Thread } from "@/shared/contracts";
+import "@/renderer/components/providers/bootstrap";
import { useAppStore } from "@/renderer/state/appStore";
import { useSharedSettings } from "@/renderer/state/sharedSettingsStore";
import { useThreadTodoDockStore } from "@/renderer/state/threadTodoDockStore";
@@ -178,6 +179,18 @@ const claudeTerminalStatus: AgentStatus = {
},
};
+function typeComposerText(editor: HTMLElement, text: string) {
+ const textNode = document.createTextNode(text);
+ editor.replaceChildren(textNode);
+ const range = document.createRange();
+ range.setStart(textNode, text.length);
+ range.collapse(true);
+ const selection = window.getSelection();
+ selection?.removeAllRanges();
+ selection?.addRange(range);
+ fireEvent.input(editor);
+}
+
describe("ThreadComposerSection", () => {
beforeEach(() => {
useSharedSettings.setState({ collapseTerminalComposer: false });
@@ -288,6 +301,51 @@ describe("ThreadComposerSection", () => {
expect(screen.getByTestId("control-kinds")).toBeEmptyDOMElement();
});
+ it("uses GUI presentation capabilities for slash commands and /fast submission", () => {
+ const divergentStatus: AgentStatus = {
+ ...codexGuiStatus,
+ capabilities: {
+ ...codexGuiStatus.capabilities,
+ models: [{ id: "cli-model", label: "CLI model" }],
+ efforts: [],
+ modelEfforts: {},
+ fastModels: [],
+ liveInputMode: "terminal",
+ presentationMode: "terminal",
+ presentationModes: ["terminal", "gui"],
+ presentationCapabilities: {
+ gui: {
+ models: [{ id: "gpt-5.4", label: "5.4" }],
+ efforts: ["high"],
+ defaultEffort: "high",
+ modelEfforts: { "gpt-5.4": ["high"] },
+ fastModels: ["gpt-5.4"],
+ modes: ["agent"],
+ approvalPolicies: [{ id: "on-request", label: "On Request" }],
+ sandboxModes: [{ id: "workspace-write", label: "Workspace Write" }],
+ supportsResume: true,
+ supportsDirectInput: true,
+ liveInputMode: "server",
+ presentationMode: "gui",
+ settingDefs: [],
+ },
+ },
+ },
+ };
+ renderComposer({ agentStatus: divergentStatus });
+
+ const input = screen.getByRole("textbox");
+ typeComposerText(input, "/fast");
+
+ expect(screen.getByRole("option", { name: /\/fast/ })).toBeInTheDocument();
+ fireEvent.click(screen.getByRole("button", { name: "send" }));
+
+ expect(runtimeActions.changeThreadConfig).toHaveBeenCalledWith(guiThread.id, {
+ model: "gpt-5.4",
+ fast: true,
+ });
+ });
+
it("hides the terminal composer collapse button in remote sessions", () => {
const { unmount } = renderComposer({
thread: terminalThread,
diff --git a/src/renderer/components/thread/ThreadComposerSection.tsx b/src/renderer/components/thread/ThreadComposerSection.tsx
index 7205308dc..5d531f125 100644
--- a/src/renderer/components/thread/ThreadComposerSection.tsx
+++ b/src/renderer/components/thread/ThreadComposerSection.tsx
@@ -12,6 +12,7 @@ import { ChevronDown, GitFork, Monitor } from "lucide-react";
import { useLingui } from "@lingui/react/macro";
import type { AgentStatus, ProjectLocation, PromptSegment, Thread } from "@/shared/contracts";
import { friendlyError } from "@/shared/messages";
+import { agentStatusForPresentation } from "@/shared/agentSelection";
import {
changeThreadConfig,
clearThreadPendingSteer,
@@ -216,6 +217,9 @@ function ThreadComposerSectionInner(props: ThreadComposerSectionProps & { thread
const [contextDockOpen, setContextDockOpen] = useState(false);
const presentationMode =
thread.presentationMode ?? agentStatus?.capabilities.presentationMode ?? "terminal";
+ const effectiveAgentStatus = agentStatus
+ ? agentStatusForPresentation(agentStatus, presentationMode, thread.sessionRef)
+ : undefined;
const usesTerminalPresentation = presentationMode === "terminal";
// Composer MCP servers are bound at session-create time for the active
// thread, so the "+" menu shows this run's bindings read-only: the enabled
@@ -227,11 +231,13 @@ function ThreadComposerSectionInner(props: ThreadComposerSectionProps & { thread
// settings page instead of per-thread, so their composer carries no MCP
// display at all — no built-in rows, no custom servers, and no read-only
// "none for this run" fallback.
- const providerOwnsMcp = agentStatus ? providerOwnsMcpConfig(agentStatus.capabilities) : false;
+ const providerOwnsMcp = effectiveAgentStatus
+ ? providerOwnsMcpConfig(effectiveAgentStatus.capabilities)
+ : false;
const mcpServers = composerMcpServers.map((descriptor) => ({
descriptor,
- enabled: thread.config[descriptor.configKey] === true,
- visible: !providerOwnsMcp && thread.config[descriptor.configKey] === true,
+ enabled: thread.config?.[descriptor.configKey] === true,
+ visible: !providerOwnsMcp && thread.config?.[descriptor.configKey] === true,
onToggle: () => {},
}));
const launchCustomMcpNames = useAppStore(
@@ -246,7 +252,7 @@ function ThreadComposerSectionInner(props: ThreadComposerSectionProps & { thread
}));
const mcpMentions: McpMentionItem[] = [
...composerMcpServers
- .filter((descriptor) => thread.config[descriptor.configKey] === true)
+ .filter((descriptor) => thread.config?.[descriptor.configKey] === true)
.map((descriptor) => ({
id: descriptor.id,
name: t(descriptor.label),
@@ -254,7 +260,7 @@ function ThreadComposerSectionInner(props: ThreadComposerSectionProps & { thread
detail: t`MCP server`,
enabled: true,
})),
- ...(thread.config.computerUse === true
+ ...(thread.config?.computerUse === true
? [
{
id: COMPUTER_USE_MCP_ID,
@@ -269,23 +275,23 @@ function ThreadComposerSectionInner(props: ThreadComposerSectionProps & { thread
const skillCommands = useSkillSlashCommands(projectLocation, thread.agentKind);
const availableCommands = resolveAvailableSlashCommands(
thread.slashCommands,
- agentStatus?.capabilities.slashCommands,
+ effectiveAgentStatus?.capabilities.slashCommands,
{
agentKind: thread.agentKind,
presentationMode,
hasEffort:
((
- agentStatus?.capabilities.modelEfforts?.[thread.config.model] ??
- agentStatus?.capabilities.efforts ??
+ effectiveAgentStatus?.capabilities.modelEfforts?.[thread.config?.model ?? ""] ??
+ effectiveAgentStatus?.capabilities.efforts ??
[]
).length ?? 0) > 0,
- supportsFast: agentStatus
- ? supportsUsableFastMode(agentStatus.capabilities, thread.config.model)
+ supportsFast: effectiveAgentStatus
+ ? supportsUsableFastMode(effectiveAgentStatus.capabilities, thread.config?.model ?? "")
: false,
skillCommands,
- disabledSkillNames: agentStatus?.capabilities.disabledSkillNames,
+ disabledSkillNames: effectiveAgentStatus?.capabilities.disabledSkillNames,
skillCatalogAuthoritative:
- agentStatus?.capabilities.reportsSkillCatalog === true &&
+ effectiveAgentStatus?.capabilities.reportsSkillCatalog === true &&
presentationMode === "gui" &&
thread.slashCommands !== undefined,
},
@@ -293,14 +299,15 @@ function ThreadComposerSectionInner(props: ThreadComposerSectionProps & { thread
const filteredCommands = filterSlashCommands(availableCommands, slashQuery);
const showCommandPanel = filteredCommands.length > 0;
const { authRequired, hasRuntimeAuthError } = resolveThreadAuthState({
- authState: agentStatus?.authState,
+ authState: effectiveAgentStatus?.authState,
errorDockStates,
});
const canShowRuntimeChrome = !usesTerminalPresentation || isRemote;
const isServerControlled =
- agentStatus?.capabilities.liveInputMode === "server" || !usesTerminalPresentation;
- const isTerminalInput = agentStatus?.capabilities.liveInputMode === "terminal";
- const needsFocusBeforeInput = agentStatus?.capabilities.requiresTerminalFocusBeforeInput === true;
+ effectiveAgentStatus?.capabilities.liveInputMode === "server" || !usesTerminalPresentation;
+ const isTerminalInput = effectiveAgentStatus?.capabilities.liveInputMode === "terminal";
+ const needsFocusBeforeInput =
+ effectiveAgentStatus?.capabilities.requiresTerminalFocusBeforeInput === true;
const canQueueServerInput =
isServerControlled &&
!usesTerminalPresentation &&
@@ -357,9 +364,16 @@ function ThreadComposerSectionInner(props: ThreadComposerSectionProps & { thread
: s.statuses[thread.projectId]?.branch),
);
const hiddenModelIds = useSharedSettings(
- (s) => s.hiddenModels[modelVisibilityKey(thread.agentKind, presentationMode)],
+ (s) =>
+ s.hiddenModels[
+ modelVisibilityKey(
+ thread.agentKind,
+ presentationMode,
+ effectiveAgentStatus?.capabilities.runtimeLabel,
+ )
+ ],
);
- const controls = buildControls(thread, agentStatus, hiddenModelIds, (config) =>
+ const controls = buildControls(thread, effectiveAgentStatus, hiddenModelIds, (config) =>
changeThreadConfig(thread.id, config),
);
const controlsWithOpenSignal = controls.map((control): ComposerControl => {
@@ -395,7 +409,7 @@ function ThreadComposerSectionInner(props: ThreadComposerSectionProps & { thread
);
const contextSummary = resolveThreadContextUsageSummary({
thread,
- agentStatus,
+ agentStatus: effectiveAgentStatus,
reportedUsage: reportedContextUsage,
});
const showContextIndicator =
@@ -466,7 +480,7 @@ function ThreadComposerSectionInner(props: ThreadComposerSectionProps & { thread
const composerSession = composerSessionRef.current;
submitComposerPrompt(segments, {
thread,
- agentStatus,
+ agentStatus: effectiveAgentStatus,
presentationMode,
usesTerminalPresentation,
canSubmit,
@@ -669,7 +683,7 @@ function ThreadComposerSectionInner(props: ThreadComposerSectionProps & { thread
threadConfig={thread.config}
worktreePath={thread.worktreePath}
branchName={branchName}
- agentStatus={agentStatus}
+ agentStatus={effectiveAgentStatus}
project={project}
contextSummary={contextSummary}
errorDockStates={errorDockStates}
@@ -725,7 +739,7 @@ function ThreadComposerSectionInner(props: ThreadComposerSectionProps & { thread
? t`Deny and tell the agent what to do differently…`
: isServerControlled
? (props.composerPlaceholder ??
- t`Ask ${agentStatus?.label ?? agentFallbackLabel} anything about this workspace`)
+ t`Ask ${effectiveAgentStatus?.label ?? agentFallbackLabel} anything about this workspace`)
: t`Send a message...`
}
projectLocation={projectLocation}
@@ -840,8 +854,8 @@ function ThreadComposerSectionInner(props: ThreadComposerSectionProps & { thread
customMcpServers={customMcpServers}
readOnly={!providerOwnsMcp}
computerUse={{
- enabled: thread.config.computerUse === true,
- visible: !providerOwnsMcp && thread.config.computerUse === true,
+ enabled: thread.config?.computerUse === true,
+ visible: !providerOwnsMcp && thread.config?.computerUse === true,
onToggle: () => {},
}}
showFileOption
diff --git a/src/renderer/components/thread/ThreadDraftView.tsx b/src/renderer/components/thread/ThreadDraftView.tsx
index f6e4191a7..c27a824be 100644
--- a/src/renderer/components/thread/ThreadDraftView.tsx
+++ b/src/renderer/components/thread/ThreadDraftView.tsx
@@ -597,7 +597,13 @@ export function ThreadDraftView(props: {
const hiddenModelIds = useSharedSettings((s) =>
selectedAgent
- ? s.hiddenModels[modelVisibilityKey(selectedAgent.kind, presentationMode)]
+ ? s.hiddenModels[
+ modelVisibilityKey(
+ selectedAgent.kind,
+ presentationMode,
+ selectedAgentForConfig?.capabilities.runtimeLabel,
+ )
+ ]
: undefined,
);
const allHiddenModels = useSharedSettings((s) => s.hiddenModels);
@@ -1024,7 +1030,7 @@ export function ThreadDraftView(props: {
{...(props.restoreWorktreeSelectionToken !== undefined
? { restoreWorktreeSelectionToken: props.restoreWorktreeSelectionToken }
: {})}
- selectedAgent={selectedAgent}
+ selectedAgent={selectedAgentForConfig ?? selectedAgent}
controls={draftControls}
config={{
model,
diff --git a/src/renderer/components/thread/buildModelPickerControls.test.ts b/src/renderer/components/thread/buildModelPickerControls.test.ts
index 7322bd238..e43ea2bee 100644
--- a/src/renderer/components/thread/buildModelPickerControls.test.ts
+++ b/src/renderer/components/thread/buildModelPickerControls.test.ts
@@ -5,6 +5,7 @@ import type { AgentCapability, AgentStatus } from "@/shared/contracts";
import {
buildModelPickerControls,
buildProviderModelMenuProviders,
+ expandAgentToVisibilityProviders,
patchConfigForModelChange,
} from "./buildModelPickerControls";
@@ -183,4 +184,46 @@ describe("buildProviderModelMenuProviders", () => {
"composer-2.5[context=default,reasoning=medium,fast=false]",
]);
});
+
+ it("exposes independently installed Cursor ACP and SDK model surfaces", () => {
+ const guiCapabilities = {
+ ...cursorStatus.capabilities,
+ presentationMode: "gui" as const,
+ presentationModes: ["gui" as const],
+ liveInputMode: "server" as const,
+ };
+ const providers = expandAgentToVisibilityProviders({
+ ...cursorStatus,
+ runtimeVariants: {
+ acp: {
+ presentationMode: "gui",
+ installed: true,
+ authState: "authenticated",
+ authUsesProviderLogin: true,
+ capabilities: {
+ ...guiCapabilities,
+ runtimeLabel: "ACP",
+ models: [{ id: "acp-model", label: "ACP Model" }],
+ },
+ },
+ sdk: {
+ presentationMode: "gui",
+ installed: true,
+ authState: "authenticated",
+ authUsesProviderLogin: false,
+ capabilities: {
+ ...guiCapabilities,
+ runtimeLabel: "SDK",
+ models: [{ id: "sdk-model", label: "SDK Model" }],
+ },
+ },
+ },
+ });
+
+ expect(providers.map(({ label, hiddenModelsKey }) => ({ label, hiddenModelsKey }))).toEqual([
+ { label: "Cursor CLI", hiddenModelsKey: "cursor" },
+ { label: "Cursor ACP", hiddenModelsKey: "cursor-acp" },
+ { label: "Cursor SDK", hiddenModelsKey: "cursor-sdk" },
+ ]);
+ });
});
diff --git a/src/renderer/components/thread/buildModelPickerControls.tsx b/src/renderer/components/thread/buildModelPickerControls.tsx
index e75e82ef9..8a10c648a 100644
--- a/src/renderer/components/thread/buildModelPickerControls.tsx
+++ b/src/renderer/components/thread/buildModelPickerControls.tsx
@@ -65,15 +65,37 @@ export type BuildModelPickerControlsInput = {
function makeMenuProvider(
agent: AgentStatus,
presentationMode: ThreadPresentationMode,
+ runtimeVariant?: string,
): ProviderModelMenuProvider {
+ const presentationCapabilities = capabilitiesForPresentation(
+ agent.capabilities,
+ presentationMode,
+ );
+ // A surface is runtime-scoped when the adapter declares a runtime badge that
+ // names one of its runtime variants for this presentation mode.
+ const declaredRuntimeVariant = presentationCapabilities.runtimeLabel?.toLowerCase();
+ const resolvedRuntimeVariant =
+ runtimeVariant ??
+ (declaredRuntimeVariant &&
+ agent.runtimeVariants?.[declaredRuntimeVariant]?.presentationMode === presentationMode
+ ? declaredRuntimeVariant
+ : undefined);
+ const runtime = resolvedRuntimeVariant
+ ? agent.runtimeVariants?.[resolvedRuntimeVariant]
+ : undefined;
const provider: ProviderModelMenuProvider = {
kind: agent.kind,
label: agent.label,
presentationMode,
+ ...(resolvedRuntimeVariant ? { runtimeVariant: resolvedRuntimeVariant } : {}),
...(agent.icon ? { icon: agent.icon } : {}),
- modelPickerKey: providerMenuKey({ kind: agent.kind, presentationMode }),
- hiddenModelsKey: modelVisibilityKey(agent.kind, presentationMode),
- capabilities: capabilitiesForPresentation(agent.capabilities, presentationMode),
+ modelPickerKey: providerMenuKey({
+ kind: agent.kind,
+ presentationMode,
+ ...(resolvedRuntimeVariant ? { runtimeVariant: resolvedRuntimeVariant } : {}),
+ }),
+ hiddenModelsKey: modelVisibilityKey(agent.kind, presentationMode, resolvedRuntimeVariant),
+ capabilities: runtime?.capabilities ?? presentationCapabilities,
};
return { ...provider, label: providerLabelForPresentation(provider) };
}
@@ -107,19 +129,30 @@ export function buildProviderModelMenuProviders(
}
/**
- * Expand an agent into one menu provider per model-visibility surface. Most
- * agents have a single surface; Cursor exposes separate CLI (terminal) and ACP
- * (gui) surfaces, each with its own hidden-model persistence key. Surfaces whose
- * only model is the synthetic "auto" entry are dropped — they have nothing to
- * toggle.
+ * Expand an agent into one menu provider per model-visibility surface. Only
+ * providers that declare named runtime variants have more than one surface (for
+ * example a CLI terminal surface plus independently detected structured
+ * runtimes), each with its own hidden-model persistence key. Surfaces whose only
+ * model is the synthetic "auto" entry are dropped — they have nothing to toggle.
*/
export function expandAgentToVisibilityProviders(agent: AgentStatus): ProviderModelMenuProvider[] {
- if (agent.kind !== "cursor") return [statusToMenuProvider(agent)];
+ const runtimeVariants = agent.runtimeVariants;
+ if (!runtimeVariants || Object.keys(runtimeVariants).length === 0) {
+ return [statusToMenuProvider(agent)];
+ }
const supported = agent.capabilities.presentationModes ?? [agent.capabilities.presentationMode];
- return supported
- .map((presentationMode) => makeMenuProvider(agent, presentationMode))
- .filter((provider) => provider.capabilities.models.some((model) => model.id !== "auto"));
+ const providers = supported.flatMap((presentationMode) => {
+ const runtimeProviders = Object.entries(runtimeVariants)
+ .filter(([, runtime]) => runtime.installed && runtime.presentationMode === presentationMode)
+ .map(([runtimeVariant]) => makeMenuProvider(agent, presentationMode, runtimeVariant));
+ return runtimeProviders.length > 0
+ ? runtimeProviders
+ : [makeMenuProvider(agent, presentationMode)];
+ });
+ return providers.filter((provider) =>
+ provider.capabilities.models.some((model) => model.id !== "auto"),
+ );
}
export function patchConfigForModelChange(
@@ -281,9 +314,10 @@ export function appendProviderComposerControls(
function normalizeCursorComposerConfig(
agentKind: string,
- config: ThreadConfig,
+ config: ThreadConfig | undefined,
capabilities: AgentStatus["capabilities"],
): ThreadConfig {
+ if (!config) return { model: capabilities.models[0]?.id ?? "auto" };
if (agentKind !== "cursor" || capabilities.models.some((model) => model.id === config.model)) {
return config;
}
diff --git a/src/renderer/components/thread/threadContextUsage.test.ts b/src/renderer/components/thread/threadContextUsage.test.ts
index c190951e7..7e3d1f29e 100644
--- a/src/renderer/components/thread/threadContextUsage.test.ts
+++ b/src/renderer/components/thread/threadContextUsage.test.ts
@@ -75,6 +75,45 @@ describe("threadContextUsage", () => {
expect(summary.breakdown).toEqual([{ id: "input", label: "Input", tokens: 71_000 }]);
});
+ it("uses the session-pinned runtime's context catalog", () => {
+ const sdkCapabilities = {
+ ...baseAgent.capabilities,
+ models: [{ id: "sdk-model", label: "Pinned SDK model" }],
+ contextSizes: [{ id: "272k", label: "272K" }],
+ modelContextSizes: { "sdk-model": ["272k"] },
+ defaultContextSize: "272k",
+ };
+ const summary = resolveThreadContextUsageSummary({
+ thread: {
+ ...baseThread,
+ agentKind: "cursor",
+ config: { model: "sdk-model" },
+ sessionRef: {
+ providerSessionId: "sdk:session-1",
+ discoveredAt: "2026-01-01T00:00:00.000Z",
+ },
+ },
+ agentStatus: {
+ ...baseAgent,
+ kind: "cursor",
+ runtimeVariants: {
+ sdk: {
+ presentationMode: "gui",
+ installed: true,
+ authState: "authenticated",
+ authUsesProviderLogin: false,
+ capabilities: sdkCapabilities,
+ },
+ },
+ sessionRuntimeRouting: { prefixes: { "sdk:": "sdk" } },
+ },
+ reportedUsage: { usedTokens: 68_000 },
+ });
+
+ expect(summary.maxTokens).toBe(272_000);
+ expect(summary.percent).toBe(25);
+ });
+
it("keeps provider-reported max authoritative over the selected context intent", () => {
const summary = resolveThreadContextUsageSummary({
thread: { ...baseThread, config: { model: "claude-opus-4-7", contextSize: "1m" } },
diff --git a/src/renderer/components/thread/threadContextUsage.ts b/src/renderer/components/thread/threadContextUsage.ts
index 1cb47a794..6243a76b5 100644
--- a/src/renderer/components/thread/threadContextUsage.ts
+++ b/src/renderer/components/thread/threadContextUsage.ts
@@ -7,7 +7,7 @@ import type {
ThreadContextUsage,
} from "@/shared/contracts";
import { i18n } from "@/renderer/i18n/i18n";
-import { capabilitiesForPresentation } from "@/shared/agentSelection";
+import { agentStatusForPresentation } from "@/shared/agentSelection";
import { formatTokenCount } from "./formatTokenCount";
export interface ThreadContextUsageSummary {
@@ -38,7 +38,7 @@ export function resolveThreadContextUsageSummary(input: {
const presentationMode =
thread.presentationMode ?? agentStatus?.capabilities.presentationMode ?? "terminal";
const capabilities = agentStatus
- ? capabilitiesForPresentation(agentStatus.capabilities, presentationMode)
+ ? agentStatusForPresentation(agentStatus, presentationMode, thread.sessionRef).capabilities
: undefined;
const configuredMaxTokens = inferConfiguredContextLimit(thread, capabilities);
const usedTokens = reportedUsage?.usedTokens;
@@ -94,10 +94,11 @@ function inferConfiguredContextLimit(
thread: Thread,
capabilities: AgentCapability | undefined,
): number | undefined {
+ const model = thread.config?.model;
const contextId =
- thread.config.contextSize ??
- parseContextSizeParam(thread.config.model) ??
- capabilities?.modelContextSizes?.[thread.config.model]?.[0] ??
+ thread.config?.contextSize ??
+ parseContextSizeParam(model) ??
+ (model ? capabilities?.modelContextSizes?.[model]?.[0] : undefined) ??
capabilities?.defaultContextSize;
const option = contextId
? capabilities?.contextSizes?.find((candidate) => candidate.id === contextId)
@@ -106,11 +107,12 @@ function inferConfiguredContextLimit(
return (
parseContextTokenLimit(option?.label) ??
parseContextTokenLimit(contextId) ??
- parseContextTokenLimit(thread.config.model)
+ parseContextTokenLimit(model)
);
}
-function parseContextSizeParam(modelId: string): string | undefined {
+function parseContextSizeParam(modelId: string | undefined): string | undefined {
+ if (!modelId) return undefined;
const bracket = /\[([^\]]+)\]/.exec(modelId)?.[1];
if (!bracket) return undefined;
const contextParam = /(?:^|,)\s*context\s*=\s*([^,\]]+)/i.exec(bracket)?.[1]?.trim();
diff --git a/src/renderer/components/thread/threadDraftViewHelpers.ts b/src/renderer/components/thread/threadDraftViewHelpers.ts
index 7f1897abd..6624b238d 100644
--- a/src/renderer/components/thread/threadDraftViewHelpers.ts
+++ b/src/renderer/components/thread/threadDraftViewHelpers.ts
@@ -8,7 +8,7 @@ import type {
} from "@/shared/contracts";
import { migrateCursorBaseId, parseCursorModelId } from "@/shared/cursorModelId";
import {
- capabilitiesForPresentation,
+ agentStatusForPresentation,
modelSelectionFor,
resolveModelSelection,
resolveReasoningSelection,
@@ -196,10 +196,7 @@ export function agentWithCapabilities(
agent: AgentStatus,
presentationMode: ThreadPresentationMode,
): AgentStatus {
- return {
- ...agent,
- capabilities: capabilitiesForPresentation(agent.capabilities, presentationMode),
- };
+ return agentStatusForPresentation(agent, presentationMode);
}
export function formatAgentList(names: string[]): string {
diff --git a/src/renderer/locales/de/messages.po b/src/renderer/locales/de/messages.po
index 989e0fbb4..8277eca4a 100644
--- a/src/renderer/locales/de/messages.po
+++ b/src/renderer/locales/de/messages.po
@@ -228,6 +228,11 @@ msgstr "{0}-Grenze"
msgid "{0} logged out."
msgstr "{0} hat sich abgemeldet."
+#. placeholder {0}: runtime.capabilities.models.length
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "{0} models"
+msgstr "{0} Modelle"
+
#. placeholder {0}: agent.name
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "{0} needs authentication."
@@ -553,6 +558,10 @@ msgstr "{visibleCount} von {totalCount} sichtbar"
msgid "/absolute/path/to/project"
msgstr "/absolute/path/to/project"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "/path/to/node_modules/@cursor/sdk"
+msgstr "/pfad/zu/node_modules/@cursor/sdk"
+
#: src/renderer/components/skills/SkillsManager.tsx
#~ msgid "/skill-creator Create a new managed skill for {destination}."
#~ msgstr "/skill-creator Erstelle einen neuen verwalteten Skill für {destination}."
@@ -653,13 +662,34 @@ msgstr "Konten"
#: src/renderer/components/thread/ThreadHeaderStatus.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "ACP"
msgstr "ACP"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP (installed Cursor Agent)"
+#~ msgstr "ACP (installierter Cursor Agent)"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "ACP Agents"
msgstr "ACP-Agenten"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP installed"
+msgstr "ACP installiert"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP not installed"
+msgstr "ACP nicht installiert"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "ACP uses the Cursor Agent login. SDK uses @cursor/sdk with CURSOR_API_KEY."
+msgstr "ACP verwendet die Cursor-Agent-Anmeldung. Das SDK verwendet @cursor/sdk mit CURSOR_API_KEY."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP uses the installed Cursor Agent. SDK loads an external @cursor/sdk package."
+#~ msgstr "ACP verwendet den installierten Cursor Agent. Das SDK lädt ein externes @cursor/sdk-Paket."
+
#: src/renderer/views/ProjectSettingsOverlay/parts/ActionsSection.tsx
msgid "Action command"
msgstr "Aktionsbefehl"
@@ -743,6 +773,10 @@ msgstr "Fügen Sie ein Projekt hinzu, bevor Sie einen Agenten installieren."
msgid "Add a project before signing in."
msgstr "Fügen Sie ein Projekt hinzu, bevor Sie sich anmelden."
+#: src/renderer/actions/agentLoginActions.ts
+msgid "Add a project before updating an agent."
+msgstr "Füge ein Projekt hinzu, bevor du einen Agenten aktualisierst."
+
#: src/renderer/views/PullRequestsView/PullRequestsView.tsx
msgid "Add a project to see pull requests."
msgstr "Fügen Sie ein Projekt hinzu, um Pull Requests anzuzeigen."
@@ -1122,6 +1156,10 @@ msgstr "Eine andere Operation für dieses Experiment läuft noch."
msgid "Antigravity"
msgstr "Antigravity"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "API key required"
+msgstr "API-Schlüssel erforderlich"
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "API_KEY=value"
msgstr "API_KEY=value"
@@ -1229,7 +1267,7 @@ msgstr "Sind Sie sicher, dass Sie alle nicht bereitgestellten Änderungen rückg
msgid "Arguments"
msgstr "Argumente"
-#. placeholder {0}: agentStatus?.label ?? agentFallbackLabel
+#. placeholder {0}: effectiveAgentStatus?.label ?? agentFallbackLabel
#. placeholder {0}: project.name
#: src/renderer/components/thread/ThreadComposerSection.tsx
#: src/renderer/views/QuickComposerOverlay/QuickComposerOverlay.tsx
@@ -1375,6 +1413,10 @@ msgstr "Terminal-Panel automatisch anzeigen"
msgid "Automatically show the terminal panel when running commands or creating worktrees."
msgstr "Zeigt das Terminal-Panel automatisch an, wenn Befehle ausgeführt oder Arbeitsbäume erstellt werden."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Autopilot"
+msgstr "Autopilot"
+
#: src/renderer/components/skills/SkillImportModal.tsx
msgid "Availability"
msgstr "Verfügbarkeit"
@@ -1962,6 +2004,10 @@ msgstr "SSH-Identitätsdatei auswählen"
msgid "Choose the display language for Poracode's interface."
msgstr "Wählen Sie die Anzeigesprache für die Benutzeroberfläche von Poracode."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Choose the structured runtime for new Cursor GUI threads. Running threads keep their current runtime."
+#~ msgstr "Wählen Sie die strukturierte Laufzeit für neue Cursor-GUI-Threads. Laufende Threads behalten ihre aktuelle Laufzeit."
+
#: src/renderer/views/MainView/parts/RightPanel/parts/BrowserPanel/parts/BrowserToolbar.tsx
msgid "Choose thread to attach to"
msgstr "Thread zum Anhängen auswählen"
@@ -2657,6 +2703,7 @@ msgstr "Enthält vertrauliche Werte; manuell hinzufügen"
#: src/mobile/ComposerInfoChips.tsx
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
#: src/renderer/components/thread/threadContextUsage.ts
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Context"
msgstr "Kontext"
@@ -3143,6 +3190,26 @@ msgstr "Aktuelle Serie"
msgid "Cursor"
msgstr "Cursor"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Cursor GUI runtime updated."
+msgstr "Cursor-GUI-Laufzeit aktualisiert."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Cursor SDK (external package)"
+#~ msgstr "Cursor SDK (externes Paket)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK is up to date."
+msgstr "Das Cursor SDK ist auf dem neuesten Stand."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK update targets"
+msgstr "Ziele für Cursor-SDK-Aktualisierung"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK updated to v{nextVersion}."
+msgstr "Cursor SDK wurde auf v{nextVersion} aktualisiert."
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/views/SchedulesView/ScheduleEditor.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
@@ -3155,6 +3222,10 @@ msgstr "Benutzerdefiniert"
msgid "Custom commands available from the project context menu (right-click)."
msgstr "Benutzerdefinierte Befehle, die im Projektkontextmenü verfügbar sind (Rechtsklick)."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "custom path"
+msgstr "benutzerdefinierter Pfad"
+
#: src/renderer/commands/composerCommands.ts
msgid "Cycle permission mode"
msgstr "Berechtigungsmodus durchschalten"
@@ -3196,6 +3267,7 @@ msgstr "Ablehnen"
msgid "DeepSeek"
msgstr "DeepSeek"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
msgid "Default"
msgstr "Standard"
@@ -3884,6 +3956,10 @@ msgstr "Geben Sie eine gültige HTTP- oder HTTPS-URL ein."
msgid "Enter a valid SSH target and port."
msgstr "Geben Sie ein gültiges SSH-Ziel und einen gültigen Port ein."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Enter an absolute @cursor/sdk package path, or leave this blank for automatic discovery."
+msgstr "Geben Sie einen absoluten Pfad zum @cursor/sdk-Paket ein oder lassen Sie dieses Feld für die automatische Erkennung leer."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "Enter one MCP server configuration."
msgstr "Geben Sie eine MCP-Server-Konfiguration ein."
@@ -4200,6 +4276,7 @@ msgstr "Ziel konnte nicht aktualisiert werden"
#: src/renderer/components/providers/modelDisplay.ts
#: src/renderer/components/thread/buildModelPickerControls.tsx
#: src/renderer/views/SettingsOverlay/parts/CrossagentRoutingSection.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Fast"
msgstr "Schnell"
@@ -4349,8 +4426,12 @@ msgid "First-class Command Code CLI integration using Poracode's native runtime.
msgstr "Erstklassige Command Code CLI-Integration mithilfe der nativen Laufzeit von Poracode."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
-msgid "First-class Cursor Agent integration using Poracode's native runtime."
-msgstr "Erstklassige Cursor Agent-Integration mit der nativen Laufzeit von Poracode."
+#~ msgid "First-class Cursor Agent integration using Poracode's native runtime."
+#~ msgstr "Erstklassige Cursor Agent-Integration mit der nativen Laufzeit von Poracode."
+
+#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
+msgid "First-class Cursor integration using ACP or the public SDK runtime."
+msgstr "Erstklassige Cursor-Integration über ACP oder die öffentliche SDK-Laufzeit."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
msgid "First-class Factory Droid integration using Poracode's ACP runtime."
@@ -4663,6 +4744,10 @@ msgstr "Gitignorierte Dateien zum Kopieren aus dem Hauptprojekt in jeden neuen A
msgid "GLM 5.2 (optional label)"
msgstr "GLM 5.2 (optionale Beschriftung)"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global"
+msgstr "global"
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/components/mcp/McpExternalImportModal.tsx
#: src/renderer/components/mcp/McpProjectDestinationDropdown.tsx
@@ -4691,6 +4776,14 @@ msgstr "Global (Windows)"
msgid "Global folder"
msgstr "Globaler Ordner"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global npm"
+msgstr "globales npm"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global pnpm"
+msgstr "globales pnpm"
+
#: src/renderer/commands/shortcutCatalog.ts
msgid "Go back in navigation history"
msgstr "Im Navigationsverlauf zurückgehen"
@@ -4751,6 +4844,10 @@ msgstr "Gruppiere Projekte, damit Seitenleiste, Zeitpläne und Pull Requests jew
msgid "GUI chat font size"
msgstr "Schriftgröße des GUI-Chats"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "GUI runtime"
+msgstr "GUI-Laufzeit"
+
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
msgid "handle"
msgstr "handle"
@@ -5067,13 +5164,46 @@ msgstr "Installieren Sie {0}."
msgid "Install {env}"
msgstr "Installieren Sie {env}"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK"
+msgstr "ACP + SDK installieren"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK in {environment}"
+msgstr "ACP + SDK in {environment} installieren"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Install ACP, SDK, or both, then choose which runtime starts new Cursor GUI chats. Existing chats stay pinned to the runtime that created them."
+msgstr "Installieren Sie ACP, SDK oder beides und wählen Sie dann aus, welche Laufzeit neue Cursor-GUI-Chats startet. Bestehende Chats bleiben an die Laufzeit gebunden, die sie erstellt hat."
+
#: src/renderer/components/thread/ThreadDraftComposerArea.tsx
msgid "Install CLI hooks"
msgstr "Installieren Sie CLI-Hooks"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP)"
+msgstr "Cursor Agent (ACP) installieren"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP) in {environment}"
+msgstr "Cursor Agent (ACP) in {environment} installieren"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK"
+msgstr "Cursor SDK installieren"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK in {environment}"
+msgstr "Cursor SDK in {environment} installieren"
+
+#. placeholder {0}: target.label
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "Install in {0}"
+msgstr "In {0} installieren"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
-msgid "Install in WSL: {distro}"
-msgstr "In WSL installieren: {distro}"
+#~ msgid "Install in WSL: {distro}"
+#~ msgstr "In WSL installieren: {distro}"
#. placeholder {0}: props.targetLabel
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
@@ -5116,6 +5246,7 @@ msgid "Install v{version}"
msgstr "v{version} installieren"
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Installed"
@@ -5946,6 +6077,10 @@ msgstr "Modell"
msgid "Model added to favorites"
msgstr "Modell zu Favoriten hinzugefügt"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Model controls"
+msgstr "Modellsteuerungen"
+
#. placeholder {0}: index + 1
#: src/renderer/components/experiment/NewExperimentModal.tsx
#~ msgid "Model for candidate {0}"
@@ -5978,6 +6113,7 @@ msgstr "Modellnutzung"
msgid "Models"
msgstr "Modelle"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/ProfileSettings.tsx
msgid "Modes"
msgstr "Modi"
@@ -6758,6 +6894,7 @@ msgstr "Kein Git-Repository"
msgid "Not found"
msgstr "Nicht gefunden"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Not installed"
@@ -7450,6 +7587,7 @@ msgstr "Angeheftete Aufgabenrouten"
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/thread/ThreadTodoDock.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Plan"
msgstr "Plan"
@@ -7676,6 +7814,10 @@ msgstr "Projektordner"
msgid "Project folder updated. Reopen any terminals in this project."
msgstr "Projektordner aktualisiert. Öffnen Sie alle Terminals in diesem Projekt erneut."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "project managed"
+msgstr "projektverwaltet"
+
#: src/renderer/views/MainView/parts/CreateProject/CreateProjectModal.tsx
#: src/renderer/views/ProjectSettingsOverlay/parts/GeneralSection.tsx
msgid "Project name"
@@ -7974,6 +8116,7 @@ msgid "Ready. Turn this on to advertise the Tailscale HTTPS URL in new pairing c
msgstr "Bereit. Aktiviere dies, um die Tailscale-HTTPS-URL in neuen Pairing-Codes bekanntzugeben."
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Reasoning"
msgstr "Begründung"
@@ -8734,6 +8877,7 @@ msgstr "Laufzeitoptionen"
#: src/renderer/views/FileEditorOverlay/parts/FileEditorPane/parts/EditorToolbar.tsx
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
#: src/renderer/views/SettingsOverlay/parts/ClaudeProfileSettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/OpenCodeProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Save"
@@ -8752,6 +8896,10 @@ msgstr "Änderungen speichern"
msgid "Save Claude profile"
msgstr "Claude-Profil speichern"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Save Cursor GUI runtime"
+msgstr "Cursor-GUI-Laufzeit speichern"
+
#: src/renderer/commands/registry.ts
msgid "Save File"
msgstr "Datei speichern"
@@ -8844,6 +8992,30 @@ msgstr "Scrollgeschwindigkeitsmultiplikator für den Terminal-Scrollback-Puffer.
msgid "Scroll to bottom"
msgstr "Nach unten scrollen"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK"
+msgstr "SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK installed"
+msgstr "SDK installiert"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK mode requires a separately installed @cursor/sdk package and CURSOR_API_KEY. It does not use the Cursor Agent CLI login."
+msgstr "Der SDK-Modus erfordert ein separat installiertes @cursor/sdk-Paket und CURSOR_API_KEY. Er verwendet nicht die Anmeldung der Cursor Agent CLI."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK not installed"
+msgstr "SDK nicht installiert"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path"
+msgstr "SDK-Paketpfad"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path (optional)"
+msgstr "SDK-Paketpfad (optional)"
+
#: src/renderer/components/thread/ChatPane/parts/items/commandSummary.ts
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
#: src/renderer/views/MainView/parts/Sidebar/Sidebar.tsx
@@ -9314,6 +9486,7 @@ msgstr "Melde dich auf dem gekoppelten Desktop an und aktualisiere dann diesen S
#: src/renderer/components/thread/ThreadAuthRequiredDock.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Sign in required"
msgstr "Anmeldung erforderlich"
@@ -9787,6 +9960,10 @@ msgstr "Auf diesem Gerät gespeichert; der Desktop behält seine eigenen Werte."
#~ msgid "Stored on this phone; the desktop keeps its own values."
#~ msgstr "Auf diesem Telefon gespeichert; der Desktop behält seine eigenen Werte."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Structured runtime"
+msgstr "Strukturierte Laufzeit"
+
#: src/mobile/views/DesktopWorkspacePanel.tsx
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/thread/ChatPane/parts/items/SubAgentOverlay.tsx
@@ -10302,6 +10479,7 @@ msgstr "Diese integrierten MCP-Server werden von OpenCode-Threads gemeinsam genu
#: src/renderer/components/thread/ChatPane/parts/items/Reasoning.tsx
#: src/renderer/components/thread/ChatPane/parts/items/ReasoningInline.tsx
#: src/renderer/components/thread/ThreadComposer.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Thinking"
msgstr "Denkt …"
@@ -11070,6 +11248,10 @@ msgstr "Nicht unterstützt"
msgid "Up one level"
msgstr "Eine Ebene nach oben"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "update"
+msgstr "Aktualisierung"
+
#: src/renderer/components/thread/ThreadAgentUpdateDock.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Update"
@@ -11092,6 +11274,14 @@ msgstr "Branch aktualisieren"
msgid "Update checks are not available in development mode."
msgstr "Im Entwicklungsmodus kann nicht nach Updates gesucht werden."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK"
+msgstr "Cursor SDK aktualisieren"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK in {environment}"
+msgstr "Cursor SDK in {environment} aktualisieren"
+
#: src/renderer/i18n/sharedMessages.ts
msgid "Update error: {detail}"
msgstr "Update-Fehler: {detail}"
@@ -11104,6 +11294,10 @@ msgstr "Update-Methode"
msgid "Update Poracode on your desktop to use port forwarding."
msgstr "Aktualisieren Sie Poracode auf Ihrem Desktop, um die Portweiterleitung zu nutzen."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update SDK"
+msgstr "SDK aktualisieren"
+
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
msgid "Update task"
msgstr "Aufgabe aktualisieren"
@@ -11158,6 +11352,10 @@ msgstr "{0} wird aktualisiert"
msgid "Updating {0} ({env})"
msgstr "Aktualisieren von {0} ({env})"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "Updating in this terminal. Closes when finished."
+msgstr "Aktualisierung in diesem Terminal. Wird nach Abschluss geschlossen."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "URL"
msgstr "URL"
@@ -11587,6 +11785,7 @@ msgstr "Gewinner zusammengeführt."
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/workspace/WorkspaceNameDialog.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Work"
msgstr "Arbeit"
@@ -11775,6 +11974,10 @@ msgstr "WSL-Basisordner"
#~ msgid "WSL user"
#~ msgstr "WSL-Benutzer"
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "WSL: {distro}"
+msgstr "WSL: {distro}"
+
#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx
msgid "Your local changes are stashed and will be re-applied when you commit or abort this merge."
msgstr "Ihre lokalen Änderungen befinden sich im Stash und werden erneut angewendet, wenn Sie diese Zusammenführung committen oder abbrechen."
diff --git a/src/renderer/locales/en/messages.po b/src/renderer/locales/en/messages.po
index 9eaa17a53..9208ad7db 100644
--- a/src/renderer/locales/en/messages.po
+++ b/src/renderer/locales/en/messages.po
@@ -228,6 +228,11 @@ msgstr "{0} limit"
msgid "{0} logged out."
msgstr "{0} logged out."
+#. placeholder {0}: runtime.capabilities.models.length
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "{0} models"
+msgstr "{0} models"
+
#. placeholder {0}: agent.name
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "{0} needs authentication."
@@ -553,6 +558,10 @@ msgstr "{visibleCount} of {totalCount} visible"
msgid "/absolute/path/to/project"
msgstr "/absolute/path/to/project"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "/path/to/node_modules/@cursor/sdk"
+msgstr "/path/to/node_modules/@cursor/sdk"
+
#: src/renderer/components/skills/SkillsManager.tsx
#~ msgid "/skill-creator Create a new managed skill for {destination}."
#~ msgstr "/skill-creator Create a new managed skill for {destination}."
@@ -653,13 +662,34 @@ msgstr "Accounts"
#: src/renderer/components/thread/ThreadHeaderStatus.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "ACP"
msgstr "ACP"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP (installed Cursor Agent)"
+#~ msgstr "ACP (installed Cursor Agent)"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "ACP Agents"
msgstr "ACP Agents"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP installed"
+msgstr "ACP installed"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP not installed"
+msgstr "ACP not installed"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "ACP uses the Cursor Agent login. SDK uses @cursor/sdk with CURSOR_API_KEY."
+msgstr "ACP uses the Cursor Agent login. SDK uses @cursor/sdk with CURSOR_API_KEY."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP uses the installed Cursor Agent. SDK loads an external @cursor/sdk package."
+#~ msgstr "ACP uses the installed Cursor Agent. SDK loads an external @cursor/sdk package."
+
#: src/renderer/views/ProjectSettingsOverlay/parts/ActionsSection.tsx
msgid "Action command"
msgstr "Action command"
@@ -743,6 +773,10 @@ msgstr "Add a project before installing an agent."
msgid "Add a project before signing in."
msgstr "Add a project before signing in."
+#: src/renderer/actions/agentLoginActions.ts
+msgid "Add a project before updating an agent."
+msgstr "Add a project before updating an agent."
+
#: src/renderer/views/PullRequestsView/PullRequestsView.tsx
msgid "Add a project to see pull requests."
msgstr "Add a project to see pull requests."
@@ -1122,6 +1156,10 @@ msgstr "Another operation for this experiment is still running."
msgid "Antigravity"
msgstr "Antigravity"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "API key required"
+msgstr "API key required"
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "API_KEY=value"
msgstr "API_KEY=value"
@@ -1229,7 +1267,7 @@ msgstr "Are you sure you want to revert all unstaged changes? This cannot be und
msgid "Arguments"
msgstr "Arguments"
-#. placeholder {0}: agentStatus?.label ?? agentFallbackLabel
+#. placeholder {0}: effectiveAgentStatus?.label ?? agentFallbackLabel
#. placeholder {0}: project.name
#: src/renderer/components/thread/ThreadComposerSection.tsx
#: src/renderer/views/QuickComposerOverlay/QuickComposerOverlay.tsx
@@ -1375,6 +1413,10 @@ msgstr "Auto-show terminal panel"
msgid "Automatically show the terminal panel when running commands or creating worktrees."
msgstr "Automatically show the terminal panel when running commands or creating worktrees."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Autopilot"
+msgstr "Autopilot"
+
#: src/renderer/components/skills/SkillImportModal.tsx
msgid "Availability"
msgstr "Availability"
@@ -1962,6 +2004,10 @@ msgstr "Choose SSH identity file"
msgid "Choose the display language for Poracode's interface."
msgstr "Choose the display language for Poracode's interface."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Choose the structured runtime for new Cursor GUI threads. Running threads keep their current runtime."
+#~ msgstr "Choose the structured runtime for new Cursor GUI threads. Running threads keep their current runtime."
+
#: src/renderer/views/MainView/parts/RightPanel/parts/BrowserPanel/parts/BrowserToolbar.tsx
msgid "Choose thread to attach to"
msgstr "Choose thread to attach to"
@@ -2657,6 +2703,7 @@ msgstr "Contains sensitive values; add manually"
#: src/mobile/ComposerInfoChips.tsx
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
#: src/renderer/components/thread/threadContextUsage.ts
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Context"
msgstr "Context"
@@ -3143,6 +3190,26 @@ msgstr "Current streak"
msgid "Cursor"
msgstr "Cursor"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Cursor GUI runtime updated."
+msgstr "Cursor GUI runtime updated."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Cursor SDK (external package)"
+#~ msgstr "Cursor SDK (external package)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK is up to date."
+msgstr "Cursor SDK is up to date."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK update targets"
+msgstr "Cursor SDK update targets"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK updated to v{nextVersion}."
+msgstr "Cursor SDK updated to v{nextVersion}."
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/views/SchedulesView/ScheduleEditor.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
@@ -3155,6 +3222,10 @@ msgstr "Custom"
msgid "Custom commands available from the project context menu (right-click)."
msgstr "Custom commands available from the project context menu (right-click)."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "custom path"
+msgstr "custom path"
+
#: src/renderer/commands/composerCommands.ts
msgid "Cycle permission mode"
msgstr "Cycle permission mode"
@@ -3196,6 +3267,7 @@ msgstr "Decline"
msgid "DeepSeek"
msgstr "DeepSeek"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
msgid "Default"
msgstr "Default"
@@ -3884,6 +3956,10 @@ msgstr "Enter a valid HTTP or HTTPS URL."
msgid "Enter a valid SSH target and port."
msgstr "Enter a valid SSH target and port."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Enter an absolute @cursor/sdk package path, or leave this blank for automatic discovery."
+msgstr "Enter an absolute @cursor/sdk package path, or leave this blank for automatic discovery."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "Enter one MCP server configuration."
msgstr "Enter one MCP server configuration."
@@ -4200,6 +4276,7 @@ msgstr "Failed to update goal"
#: src/renderer/components/providers/modelDisplay.ts
#: src/renderer/components/thread/buildModelPickerControls.tsx
#: src/renderer/views/SettingsOverlay/parts/CrossagentRoutingSection.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Fast"
msgstr "Fast"
@@ -4349,8 +4426,12 @@ msgid "First-class Command Code CLI integration using Poracode's native runtime.
msgstr "First-class Command Code CLI integration using Poracode's native runtime."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
-msgid "First-class Cursor Agent integration using Poracode's native runtime."
-msgstr "First-class Cursor Agent integration using Poracode's native runtime."
+#~ msgid "First-class Cursor Agent integration using Poracode's native runtime."
+#~ msgstr "First-class Cursor Agent integration using Poracode's native runtime."
+
+#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
+msgid "First-class Cursor integration using ACP or the public SDK runtime."
+msgstr "First-class Cursor integration using ACP or the public SDK runtime."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
msgid "First-class Factory Droid integration using Poracode's ACP runtime."
@@ -4663,6 +4744,10 @@ msgstr "Gitignored files to copy from the main project into each new worktree. G
msgid "GLM 5.2 (optional label)"
msgstr "GLM 5.2 (optional label)"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global"
+msgstr "global"
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/components/mcp/McpExternalImportModal.tsx
#: src/renderer/components/mcp/McpProjectDestinationDropdown.tsx
@@ -4691,6 +4776,14 @@ msgstr "Global (Windows)"
msgid "Global folder"
msgstr "Global folder"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global npm"
+msgstr "global npm"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global pnpm"
+msgstr "global pnpm"
+
#: src/renderer/commands/shortcutCatalog.ts
msgid "Go back in navigation history"
msgstr "Go back in navigation history"
@@ -4751,6 +4844,10 @@ msgstr "Group projects so the sidebar, schedules, and pull requests only show on
msgid "GUI chat font size"
msgstr "GUI chat font size"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "GUI runtime"
+msgstr "GUI runtime"
+
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
msgid "handle"
msgstr "handle"
@@ -5067,13 +5164,46 @@ msgstr "Install {0}."
msgid "Install {env}"
msgstr "Install {env}"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK"
+msgstr "Install ACP + SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK in {environment}"
+msgstr "Install ACP + SDK in {environment}"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Install ACP, SDK, or both, then choose which runtime starts new Cursor GUI chats. Existing chats stay pinned to the runtime that created them."
+msgstr "Install ACP, SDK, or both, then choose which runtime starts new Cursor GUI chats. Existing chats stay pinned to the runtime that created them."
+
#: src/renderer/components/thread/ThreadDraftComposerArea.tsx
msgid "Install CLI hooks"
msgstr "Install CLI hooks"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP)"
+msgstr "Install Cursor Agent (ACP)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP) in {environment}"
+msgstr "Install Cursor Agent (ACP) in {environment}"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK"
+msgstr "Install Cursor SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK in {environment}"
+msgstr "Install Cursor SDK in {environment}"
+
+#. placeholder {0}: target.label
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "Install in {0}"
+msgstr "Install in {0}"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
-msgid "Install in WSL: {distro}"
-msgstr "Install in WSL: {distro}"
+#~ msgid "Install in WSL: {distro}"
+#~ msgstr "Install in WSL: {distro}"
#. placeholder {0}: props.targetLabel
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
@@ -5116,6 +5246,7 @@ msgid "Install v{version}"
msgstr "Install v{version}"
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Installed"
@@ -5946,6 +6077,10 @@ msgstr "Model"
msgid "Model added to favorites"
msgstr "Model added to favorites"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Model controls"
+msgstr "Model controls"
+
#. placeholder {0}: index + 1
#: src/renderer/components/experiment/NewExperimentModal.tsx
#~ msgid "Model for candidate {0}"
@@ -5978,6 +6113,7 @@ msgstr "Model usage"
msgid "Models"
msgstr "Models"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/ProfileSettings.tsx
msgid "Modes"
msgstr "Modes"
@@ -6758,6 +6894,7 @@ msgstr "Not a Git repository"
msgid "Not found"
msgstr "Not found"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Not installed"
@@ -7450,6 +7587,7 @@ msgstr "Pinned task routes"
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/thread/ThreadTodoDock.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Plan"
msgstr "Plan"
@@ -7676,6 +7814,10 @@ msgstr "Project folder"
msgid "Project folder updated. Reopen any terminals in this project."
msgstr "Project folder updated. Reopen any terminals in this project."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "project managed"
+msgstr "project managed"
+
#: src/renderer/views/MainView/parts/CreateProject/CreateProjectModal.tsx
#: src/renderer/views/ProjectSettingsOverlay/parts/GeneralSection.tsx
msgid "Project name"
@@ -7974,6 +8116,7 @@ msgid "Ready. Turn this on to advertise the Tailscale HTTPS URL in new pairing c
msgstr "Ready. Turn this on to advertise the Tailscale HTTPS URL in new pairing codes."
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Reasoning"
msgstr "Reasoning"
@@ -8734,6 +8877,7 @@ msgstr "Runtime options"
#: src/renderer/views/FileEditorOverlay/parts/FileEditorPane/parts/EditorToolbar.tsx
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
#: src/renderer/views/SettingsOverlay/parts/ClaudeProfileSettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/OpenCodeProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Save"
@@ -8752,6 +8896,10 @@ msgstr "Save changes"
msgid "Save Claude profile"
msgstr "Save Claude profile"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Save Cursor GUI runtime"
+msgstr "Save Cursor GUI runtime"
+
#: src/renderer/commands/registry.ts
msgid "Save File"
msgstr "Save File"
@@ -8844,6 +8992,30 @@ msgstr "Scroll speed multiplier for the terminal scrollback buffer."
msgid "Scroll to bottom"
msgstr "Scroll to bottom"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK"
+msgstr "SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK installed"
+msgstr "SDK installed"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK mode requires a separately installed @cursor/sdk package and CURSOR_API_KEY. It does not use the Cursor Agent CLI login."
+msgstr "SDK mode requires a separately installed @cursor/sdk package and CURSOR_API_KEY. It does not use the Cursor Agent CLI login."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK not installed"
+msgstr "SDK not installed"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path"
+msgstr "SDK package path"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path (optional)"
+msgstr "SDK package path (optional)"
+
#: src/renderer/components/thread/ChatPane/parts/items/commandSummary.ts
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
#: src/renderer/views/MainView/parts/Sidebar/Sidebar.tsx
@@ -9314,6 +9486,7 @@ msgstr "Sign in on the paired desktop, then refresh this status."
#: src/renderer/components/thread/ThreadAuthRequiredDock.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Sign in required"
msgstr "Sign in required"
@@ -9787,6 +9960,10 @@ msgstr "Stored on this device; the desktop keeps its own values."
#~ msgid "Stored on this phone; the desktop keeps its own values."
#~ msgstr "Stored on this phone; the desktop keeps its own values."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Structured runtime"
+msgstr "Structured runtime"
+
#: src/mobile/views/DesktopWorkspacePanel.tsx
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/thread/ChatPane/parts/items/SubAgentOverlay.tsx
@@ -10302,6 +10479,7 @@ msgstr "These built-in MCP servers are shared by OpenCode threads. Saving update
#: src/renderer/components/thread/ChatPane/parts/items/Reasoning.tsx
#: src/renderer/components/thread/ChatPane/parts/items/ReasoningInline.tsx
#: src/renderer/components/thread/ThreadComposer.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Thinking"
msgstr "Thinking"
@@ -11070,6 +11248,10 @@ msgstr "Unsupported"
msgid "Up one level"
msgstr "Up one level"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "update"
+msgstr "update"
+
#: src/renderer/components/thread/ThreadAgentUpdateDock.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Update"
@@ -11092,6 +11274,14 @@ msgstr "Update branch"
msgid "Update checks are not available in development mode."
msgstr "Update checks are not available in development mode."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK"
+msgstr "Update Cursor SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK in {environment}"
+msgstr "Update Cursor SDK in {environment}"
+
#: src/renderer/i18n/sharedMessages.ts
msgid "Update error: {detail}"
msgstr "Update error: {detail}"
@@ -11104,6 +11294,10 @@ msgstr "Update method"
msgid "Update Poracode on your desktop to use port forwarding."
msgstr "Update Poracode on your desktop to use port forwarding."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update SDK"
+msgstr "Update SDK"
+
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
msgid "Update task"
msgstr "Update task"
@@ -11158,6 +11352,10 @@ msgstr "Updating {0}"
msgid "Updating {0} ({env})"
msgstr "Updating {0} ({env})"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "Updating in this terminal. Closes when finished."
+msgstr "Updating in this terminal. Closes when finished."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "URL"
msgstr "URL"
@@ -11587,6 +11785,7 @@ msgstr "Winner merged."
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/workspace/WorkspaceNameDialog.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Work"
msgstr "Work"
@@ -11775,6 +11974,10 @@ msgstr "WSL base folder"
#~ msgid "WSL user"
#~ msgstr "WSL user"
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "WSL: {distro}"
+msgstr "WSL: {distro}"
+
#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx
msgid "Your local changes are stashed and will be re-applied when you commit or abort this merge."
msgstr "Your local changes are stashed and will be re-applied when you commit or abort this merge."
diff --git a/src/renderer/locales/es/messages.po b/src/renderer/locales/es/messages.po
index dfacac7ef..569e0ab5c 100644
--- a/src/renderer/locales/es/messages.po
+++ b/src/renderer/locales/es/messages.po
@@ -228,6 +228,11 @@ msgstr "Límite de {0}"
msgid "{0} logged out."
msgstr "Sesión de {0} cerrada."
+#. placeholder {0}: runtime.capabilities.models.length
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "{0} models"
+msgstr "{0} modelos"
+
#. placeholder {0}: agent.name
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "{0} needs authentication."
@@ -553,6 +558,10 @@ msgstr "{visibleCount} de {totalCount} visibles"
msgid "/absolute/path/to/project"
msgstr "/absolute/path/to/project"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "/path/to/node_modules/@cursor/sdk"
+msgstr "/ruta/a/node_modules/@cursor/sdk"
+
#: src/renderer/components/skills/SkillsManager.tsx
#~ msgid "/skill-creator Create a new managed skill for {destination}."
#~ msgstr "/skill-creator Crea una nueva skill administrada para {destination}."
@@ -653,13 +662,34 @@ msgstr "Cuentas"
#: src/renderer/components/thread/ThreadHeaderStatus.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "ACP"
msgstr "ACP"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP (installed Cursor Agent)"
+#~ msgstr "ACP (Cursor Agent instalado)"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "ACP Agents"
msgstr "Agentes ACP"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP installed"
+msgstr "ACP instalado"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP not installed"
+msgstr "ACP no instalado"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "ACP uses the Cursor Agent login. SDK uses @cursor/sdk with CURSOR_API_KEY."
+msgstr "ACP usa el inicio de sesión de Cursor Agent. El SDK usa @cursor/sdk con CURSOR_API_KEY."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP uses the installed Cursor Agent. SDK loads an external @cursor/sdk package."
+#~ msgstr "ACP usa Cursor Agent instalado. El SDK carga un paquete @cursor/sdk externo."
+
#: src/renderer/views/ProjectSettingsOverlay/parts/ActionsSection.tsx
msgid "Action command"
msgstr "Comando de acción"
@@ -743,6 +773,10 @@ msgstr "Agrega un proyecto antes de instalar un agente."
msgid "Add a project before signing in."
msgstr "Agrega un proyecto antes de iniciar sesión."
+#: src/renderer/actions/agentLoginActions.ts
+msgid "Add a project before updating an agent."
+msgstr "Añade un proyecto antes de actualizar un agente."
+
#: src/renderer/views/PullRequestsView/PullRequestsView.tsx
msgid "Add a project to see pull requests."
msgstr "Agrega un proyecto para ver las pull requests."
@@ -1122,6 +1156,10 @@ msgstr "Otra operación de este experimento todavía está en curso."
msgid "Antigravity"
msgstr "Antigravity"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "API key required"
+msgstr "Se requiere una clave de API"
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "API_KEY=value"
msgstr "API_KEY=value"
@@ -1229,7 +1267,7 @@ msgstr "¿Seguro que quieres revertir todos los cambios sin preparar? Esto no se
msgid "Arguments"
msgstr "Argumentos"
-#. placeholder {0}: agentStatus?.label ?? agentFallbackLabel
+#. placeholder {0}: effectiveAgentStatus?.label ?? agentFallbackLabel
#. placeholder {0}: project.name
#: src/renderer/components/thread/ThreadComposerSection.tsx
#: src/renderer/views/QuickComposerOverlay/QuickComposerOverlay.tsx
@@ -1375,6 +1413,10 @@ msgstr "Mostrar el panel del terminal automáticamente"
msgid "Automatically show the terminal panel when running commands or creating worktrees."
msgstr "Mostrar automáticamente el panel del terminal al ejecutar comandos o crear worktrees."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Autopilot"
+msgstr "Piloto automático"
+
#: src/renderer/components/skills/SkillImportModal.tsx
msgid "Availability"
msgstr "Disponibilidad"
@@ -1962,6 +2004,10 @@ msgstr "Elegir archivo de identidad SSH"
msgid "Choose the display language for Poracode's interface."
msgstr "Elige el idioma de visualización de la interfaz de Poracode."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Choose the structured runtime for new Cursor GUI threads. Running threads keep their current runtime."
+#~ msgstr "Elige el entorno de ejecución estructurado para los nuevos hilos de la GUI de Cursor. Los hilos en ejecución conservan su entorno actual."
+
#: src/renderer/views/MainView/parts/RightPanel/parts/BrowserPanel/parts/BrowserToolbar.tsx
msgid "Choose thread to attach to"
msgstr "Elige el hilo al que adjuntar"
@@ -2657,6 +2703,7 @@ msgstr "Contiene valores confidenciales; añádelo manualmente"
#: src/mobile/ComposerInfoChips.tsx
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
#: src/renderer/components/thread/threadContextUsage.ts
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Context"
msgstr "Contexto"
@@ -3143,6 +3190,26 @@ msgstr "Racha actual"
msgid "Cursor"
msgstr "Cursor"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Cursor GUI runtime updated."
+msgstr "Entorno de ejecución de la GUI de Cursor actualizado."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Cursor SDK (external package)"
+#~ msgstr "Cursor SDK (paquete externo)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK is up to date."
+msgstr "El SDK de Cursor está actualizado."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK update targets"
+msgstr "Destinos de actualización del SDK de Cursor"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK updated to v{nextVersion}."
+msgstr "El SDK de Cursor se actualizó a v{nextVersion}."
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/views/SchedulesView/ScheduleEditor.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
@@ -3155,6 +3222,10 @@ msgstr "Personalizado"
msgid "Custom commands available from the project context menu (right-click)."
msgstr "Comandos personalizados disponibles desde el menú contextual del proyecto (clic derecho)."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "custom path"
+msgstr "ruta personalizada"
+
#: src/renderer/commands/composerCommands.ts
msgid "Cycle permission mode"
msgstr "Alternar modo de permisos"
@@ -3196,6 +3267,7 @@ msgstr "Rechazar"
msgid "DeepSeek"
msgstr "DeepSeek"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
msgid "Default"
msgstr "Predeterminado"
@@ -3884,6 +3956,10 @@ msgstr "Introduce una URL HTTP o HTTPS válida."
msgid "Enter a valid SSH target and port."
msgstr "Introduce un destino SSH y un puerto válidos."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Enter an absolute @cursor/sdk package path, or leave this blank for automatic discovery."
+msgstr "Introduce una ruta absoluta al paquete @cursor/sdk o deja este campo en blanco para la detección automática."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "Enter one MCP server configuration."
msgstr "Introduce una configuración de servidor MCP."
@@ -4200,6 +4276,7 @@ msgstr "No se pudo actualizar el objetivo"
#: src/renderer/components/providers/modelDisplay.ts
#: src/renderer/components/thread/buildModelPickerControls.tsx
#: src/renderer/views/SettingsOverlay/parts/CrossagentRoutingSection.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Fast"
msgstr "Rápido"
@@ -4349,8 +4426,12 @@ msgid "First-class Command Code CLI integration using Poracode's native runtime.
msgstr "Integración de primera clase de Command Code CLI usando el runtime nativo de Poracode."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
-msgid "First-class Cursor Agent integration using Poracode's native runtime."
-msgstr "Integración de primera clase de Cursor Agent usando el runtime nativo de Poracode."
+#~ msgid "First-class Cursor Agent integration using Poracode's native runtime."
+#~ msgstr "Integración de primera clase de Cursor Agent usando el runtime nativo de Poracode."
+
+#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
+msgid "First-class Cursor integration using ACP or the public SDK runtime."
+msgstr "Integración completa con Cursor mediante ACP o el entorno de ejecución público del SDK."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
msgid "First-class Factory Droid integration using Poracode's ACP runtime."
@@ -4663,6 +4744,10 @@ msgstr "Archivos ignorados por Git para copiar del proyecto principal a cada nue
msgid "GLM 5.2 (optional label)"
msgstr "GLM 5.2 (etiqueta opcional)"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global"
+msgstr "global"
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/components/mcp/McpExternalImportModal.tsx
#: src/renderer/components/mcp/McpProjectDestinationDropdown.tsx
@@ -4691,6 +4776,14 @@ msgstr "Global (Windows)"
msgid "Global folder"
msgstr "Carpeta global"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global npm"
+msgstr "npm global"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global pnpm"
+msgstr "pnpm global"
+
#: src/renderer/commands/shortcutCatalog.ts
msgid "Go back in navigation history"
msgstr "Retroceder en el historial de navegación"
@@ -4751,6 +4844,10 @@ msgstr "Agrupa proyectos para que la barra lateral, las programaciones y los pul
msgid "GUI chat font size"
msgstr "Tamaño de fuente del chat de la GUI"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "GUI runtime"
+msgstr "Entorno de ejecución de la GUI"
+
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
msgid "handle"
msgstr "identificador"
@@ -5067,13 +5164,46 @@ msgstr "Instalar {0}."
msgid "Install {env}"
msgstr "Instalar {env}"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK"
+msgstr "Instalar ACP + SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK in {environment}"
+msgstr "Instalar ACP + SDK en {environment}"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Install ACP, SDK, or both, then choose which runtime starts new Cursor GUI chats. Existing chats stay pinned to the runtime that created them."
+msgstr "Instala ACP, SDK o ambos y luego elige qué entorno de ejecución inicia los nuevos chats de la interfaz de Cursor. Los chats existentes permanecen vinculados al entorno que los creó."
+
#: src/renderer/components/thread/ThreadDraftComposerArea.tsx
msgid "Install CLI hooks"
msgstr "Instalar hooks de CLI"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP)"
+msgstr "Instalar Cursor Agent (ACP)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP) in {environment}"
+msgstr "Instalar Cursor Agent (ACP) en {environment}"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK"
+msgstr "Instalar Cursor SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK in {environment}"
+msgstr "Instalar Cursor SDK en {environment}"
+
+#. placeholder {0}: target.label
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "Install in {0}"
+msgstr "Instalar en {0}"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
-msgid "Install in WSL: {distro}"
-msgstr "Instalar en WSL: {distro}"
+#~ msgid "Install in WSL: {distro}"
+#~ msgstr "Instalar en WSL: {distro}"
#. placeholder {0}: props.targetLabel
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
@@ -5116,6 +5246,7 @@ msgid "Install v{version}"
msgstr "Instalar v{version}"
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Installed"
@@ -5946,6 +6077,10 @@ msgstr "Modelo"
msgid "Model added to favorites"
msgstr "Modelo agregado a favoritos"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Model controls"
+msgstr "Controles del modelo"
+
#. placeholder {0}: index + 1
#: src/renderer/components/experiment/NewExperimentModal.tsx
#~ msgid "Model for candidate {0}"
@@ -5978,6 +6113,7 @@ msgstr "Uso de modelos"
msgid "Models"
msgstr "Modelos"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/ProfileSettings.tsx
msgid "Modes"
msgstr "Modos"
@@ -6758,6 +6894,7 @@ msgstr "No es un repositorio Git"
msgid "Not found"
msgstr "No encontrado"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Not installed"
@@ -7450,6 +7587,7 @@ msgstr "Rutas de tarea fijadas"
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/thread/ThreadTodoDock.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Plan"
msgstr "Plan"
@@ -7676,6 +7814,10 @@ msgstr "Carpeta del proyecto"
msgid "Project folder updated. Reopen any terminals in this project."
msgstr "Carpeta del proyecto actualizada. Vuelve a abrir cualquier terminal de este proyecto."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "project managed"
+msgstr "gestionado por el proyecto"
+
#: src/renderer/views/MainView/parts/CreateProject/CreateProjectModal.tsx
#: src/renderer/views/ProjectSettingsOverlay/parts/GeneralSection.tsx
msgid "Project name"
@@ -7974,6 +8116,7 @@ msgid "Ready. Turn this on to advertise the Tailscale HTTPS URL in new pairing c
msgstr "Listo. Actívalo para anunciar la URL HTTPS de Tailscale en los nuevos códigos de emparejamiento."
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Reasoning"
msgstr "Razonamiento"
@@ -8734,6 +8877,7 @@ msgstr "Opciones de runtime"
#: src/renderer/views/FileEditorOverlay/parts/FileEditorPane/parts/EditorToolbar.tsx
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
#: src/renderer/views/SettingsOverlay/parts/ClaudeProfileSettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/OpenCodeProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Save"
@@ -8752,6 +8896,10 @@ msgstr "Guardar cambios"
msgid "Save Claude profile"
msgstr "Guardar perfil de Claude"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Save Cursor GUI runtime"
+msgstr "Guardar el entorno de ejecución de la GUI de Cursor"
+
#: src/renderer/commands/registry.ts
msgid "Save File"
msgstr "Guardar archivo"
@@ -8844,6 +8992,30 @@ msgstr "Multiplicador de la velocidad de desplazamiento del búfer de historial
msgid "Scroll to bottom"
msgstr "Desplazar al final"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK"
+msgstr "SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK installed"
+msgstr "SDK instalado"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK mode requires a separately installed @cursor/sdk package and CURSOR_API_KEY. It does not use the Cursor Agent CLI login."
+msgstr "El modo SDK requiere un paquete @cursor/sdk instalado por separado y CURSOR_API_KEY. No usa el inicio de sesión de la CLI de Cursor Agent."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK not installed"
+msgstr "SDK no instalado"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path"
+msgstr "Ruta del paquete SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path (optional)"
+msgstr "Ruta del paquete SDK (opcional)"
+
#: src/renderer/components/thread/ChatPane/parts/items/commandSummary.ts
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
#: src/renderer/views/MainView/parts/Sidebar/Sidebar.tsx
@@ -9314,6 +9486,7 @@ msgstr "Inicia sesión en el escritorio emparejado y luego actualiza este estado
#: src/renderer/components/thread/ThreadAuthRequiredDock.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Sign in required"
msgstr "Se requiere iniciar sesión"
@@ -9787,6 +9960,10 @@ msgstr "Guardado en este dispositivo; el equipo de escritorio conserva sus propi
#~ msgid "Stored on this phone; the desktop keeps its own values."
#~ msgstr "Guardado en este teléfono; el escritorio conserva sus propios valores."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Structured runtime"
+msgstr "Entorno de ejecución estructurado"
+
#: src/mobile/views/DesktopWorkspacePanel.tsx
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/thread/ChatPane/parts/items/SubAgentOverlay.tsx
@@ -10302,6 +10479,7 @@ msgstr "Estos servidores MCP integrados se comparten entre los hilos de OpenCode
#: src/renderer/components/thread/ChatPane/parts/items/Reasoning.tsx
#: src/renderer/components/thread/ChatPane/parts/items/ReasoningInline.tsx
#: src/renderer/components/thread/ThreadComposer.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Thinking"
msgstr "Pensando"
@@ -11070,6 +11248,10 @@ msgstr "No compatible"
msgid "Up one level"
msgstr "Subir un nivel"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "update"
+msgstr "actualización"
+
#: src/renderer/components/thread/ThreadAgentUpdateDock.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Update"
@@ -11092,6 +11274,14 @@ msgstr "Actualizar rama"
msgid "Update checks are not available in development mode."
msgstr "Las comprobaciones de actualizaciones no están disponibles en el modo de desarrollo."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK"
+msgstr "Actualizar el SDK de Cursor"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK in {environment}"
+msgstr "Actualizar el SDK de Cursor en {environment}"
+
#: src/renderer/i18n/sharedMessages.ts
msgid "Update error: {detail}"
msgstr "Error de actualización: {detail}"
@@ -11104,6 +11294,10 @@ msgstr "Método de actualización"
msgid "Update Poracode on your desktop to use port forwarding."
msgstr "Actualiza Poracode en tu escritorio para usar el reenvío de puertos."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update SDK"
+msgstr "Actualizar SDK"
+
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
msgid "Update task"
msgstr "Actualizar tarea"
@@ -11158,6 +11352,10 @@ msgstr "Actualizando {0}"
msgid "Updating {0} ({env})"
msgstr "Actualizando {0} ({env})"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "Updating in this terminal. Closes when finished."
+msgstr "Actualizando en este terminal. Se cerrará al finalizar."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "URL"
msgstr "URL"
@@ -11587,6 +11785,7 @@ msgstr "Ganador fusionado."
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/workspace/WorkspaceNameDialog.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Work"
msgstr "Trabajo"
@@ -11775,6 +11974,10 @@ msgstr "Carpeta base de WSL"
#~ msgid "WSL user"
#~ msgstr "Usuario de WSL"
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "WSL: {distro}"
+msgstr "WSL: {distro}"
+
#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx
msgid "Your local changes are stashed and will be re-applied when you commit or abort this merge."
msgstr "Tus cambios locales están en un stash y se volverán a aplicar cuando confirmes o abortes esta fusión."
diff --git a/src/renderer/locales/fr/messages.po b/src/renderer/locales/fr/messages.po
index 8342359b4..55aa3b66c 100644
--- a/src/renderer/locales/fr/messages.po
+++ b/src/renderer/locales/fr/messages.po
@@ -228,6 +228,11 @@ msgstr "limite {0}"
msgid "{0} logged out."
msgstr "{0} s'est déconnecté."
+#. placeholder {0}: runtime.capabilities.models.length
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "{0} models"
+msgstr "{0} modèles"
+
#. placeholder {0}: agent.name
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "{0} needs authentication."
@@ -553,6 +558,10 @@ msgstr "{visibleCount} sur {totalCount} visibles"
msgid "/absolute/path/to/project"
msgstr "/absolute/path/to/project"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "/path/to/node_modules/@cursor/sdk"
+msgstr "/chemin/vers/node_modules/@cursor/sdk"
+
#: src/renderer/components/skills/SkillsManager.tsx
#~ msgid "/skill-creator Create a new managed skill for {destination}."
#~ msgstr "/skill-creator Créez une nouvelle compétence gérée pour {destination}."
@@ -653,13 +662,34 @@ msgstr "Comptes"
#: src/renderer/components/thread/ThreadHeaderStatus.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "ACP"
msgstr "ACP"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP (installed Cursor Agent)"
+#~ msgstr "ACP (Cursor Agent installé)"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "ACP Agents"
msgstr "Agents ACP"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP installed"
+msgstr "ACP installé"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP not installed"
+msgstr "ACP non installé"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "ACP uses the Cursor Agent login. SDK uses @cursor/sdk with CURSOR_API_KEY."
+msgstr "ACP utilise la connexion Cursor Agent. Le SDK utilise @cursor/sdk avec CURSOR_API_KEY."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP uses the installed Cursor Agent. SDK loads an external @cursor/sdk package."
+#~ msgstr "ACP utilise le Cursor Agent installé. Le SDK charge un package @cursor/sdk externe."
+
#: src/renderer/views/ProjectSettingsOverlay/parts/ActionsSection.tsx
msgid "Action command"
msgstr "Commande d'action"
@@ -743,6 +773,10 @@ msgstr "Ajoutez un projet avant d'installer un agent."
msgid "Add a project before signing in."
msgstr "Ajoutez un projet avant de vous connecter."
+#: src/renderer/actions/agentLoginActions.ts
+msgid "Add a project before updating an agent."
+msgstr "Ajoutez un projet avant de mettre à jour un agent."
+
#: src/renderer/views/PullRequestsView/PullRequestsView.tsx
msgid "Add a project to see pull requests."
msgstr "Ajoutez un projet pour voir les pull requests."
@@ -1122,6 +1156,10 @@ msgstr "Une autre opération pour cette expérience est toujours en cours."
msgid "Antigravity"
msgstr "Antigravity"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "API key required"
+msgstr "Clé API requise"
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "API_KEY=value"
msgstr "API_KEY=value"
@@ -1229,7 +1267,7 @@ msgstr "Êtes-vous sûr de vouloir annuler toutes les modifications non indexée
msgid "Arguments"
msgstr "Arguments"
-#. placeholder {0}: agentStatus?.label ?? agentFallbackLabel
+#. placeholder {0}: effectiveAgentStatus?.label ?? agentFallbackLabel
#. placeholder {0}: project.name
#: src/renderer/components/thread/ThreadComposerSection.tsx
#: src/renderer/views/QuickComposerOverlay/QuickComposerOverlay.tsx
@@ -1375,6 +1413,10 @@ msgstr "Afficher automatiquement le panneau de terminal"
msgid "Automatically show the terminal panel when running commands or creating worktrees."
msgstr "Afficher automatiquement le panneau de terminal lors de l'exécution de commandes ou de la création de worktrees."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Autopilot"
+msgstr "Pilote automatique"
+
#: src/renderer/components/skills/SkillImportModal.tsx
msgid "Availability"
msgstr "Disponibilité"
@@ -1962,6 +2004,10 @@ msgstr "Choisir le fichier d’identité SSH"
msgid "Choose the display language for Poracode's interface."
msgstr "Choisissez la langue d'affichage de l'interface de Poracode."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Choose the structured runtime for new Cursor GUI threads. Running threads keep their current runtime."
+#~ msgstr "Choisissez l’environnement d’exécution structuré des nouveaux fils de l’interface Cursor. Les fils en cours conservent leur environnement actuel."
+
#: src/renderer/views/MainView/parts/RightPanel/parts/BrowserPanel/parts/BrowserToolbar.tsx
msgid "Choose thread to attach to"
msgstr "Choisissez le fil auquel attacher"
@@ -2657,6 +2703,7 @@ msgstr "Contient des valeurs sensibles ; ajoutez-le manuellement"
#: src/mobile/ComposerInfoChips.tsx
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
#: src/renderer/components/thread/threadContextUsage.ts
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Context"
msgstr "Contexte"
@@ -3143,6 +3190,26 @@ msgstr "Série actuelle"
msgid "Cursor"
msgstr "Cursor"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Cursor GUI runtime updated."
+msgstr "Environnement d’exécution de l’interface Cursor mis à jour."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Cursor SDK (external package)"
+#~ msgstr "Cursor SDK (package externe)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK is up to date."
+msgstr "Le SDK Cursor est à jour."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK update targets"
+msgstr "Cibles de mise à jour du SDK Cursor"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK updated to v{nextVersion}."
+msgstr "Le SDK Cursor a été mis à jour vers la v{nextVersion}."
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/views/SchedulesView/ScheduleEditor.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
@@ -3155,6 +3222,10 @@ msgstr "Personnalisé"
msgid "Custom commands available from the project context menu (right-click)."
msgstr "Commandes personnalisées disponibles dans le menu contextuel du projet (clic droit)."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "custom path"
+msgstr "chemin personnalisé"
+
#: src/renderer/commands/composerCommands.ts
msgid "Cycle permission mode"
msgstr "Parcourir les modes d'autorisation"
@@ -3196,6 +3267,7 @@ msgstr "Refuser"
msgid "DeepSeek"
msgstr "DeepSeek"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
msgid "Default"
msgstr "Par défaut"
@@ -3884,6 +3956,10 @@ msgstr "Saisissez une URL HTTP ou HTTPS valide."
msgid "Enter a valid SSH target and port."
msgstr "Saisissez une cible SSH et un port valides."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Enter an absolute @cursor/sdk package path, or leave this blank for automatic discovery."
+msgstr "Saisissez un chemin absolu vers le package @cursor/sdk ou laissez ce champ vide pour la détection automatique."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "Enter one MCP server configuration."
msgstr "Saisissez une configuration de serveur MCP."
@@ -4200,6 +4276,7 @@ msgstr "Impossible de mettre à jour l'objectif"
#: src/renderer/components/providers/modelDisplay.ts
#: src/renderer/components/thread/buildModelPickerControls.tsx
#: src/renderer/views/SettingsOverlay/parts/CrossagentRoutingSection.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Fast"
msgstr "Rapide"
@@ -4349,8 +4426,12 @@ msgid "First-class Command Code CLI integration using Poracode's native runtime.
msgstr "Intégration CLI Command Code de première classe à l’aide du runtime natif de Poracode."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
-msgid "First-class Cursor Agent integration using Poracode's native runtime."
-msgstr "Intégration de première classe de Cursor Agent utilisant le runtime natif de Poracode."
+#~ msgid "First-class Cursor Agent integration using Poracode's native runtime."
+#~ msgstr "Intégration de première classe de Cursor Agent utilisant le runtime natif de Poracode."
+
+#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
+msgid "First-class Cursor integration using ACP or the public SDK runtime."
+msgstr "Intégration Cursor complète utilisant ACP ou l’environnement d’exécution public du SDK."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
msgid "First-class Factory Droid integration using Poracode's ACP runtime."
@@ -4663,6 +4744,10 @@ msgstr "Fichiers Gitignorés à copier du projet principal dans chaque nouvel ar
msgid "GLM 5.2 (optional label)"
msgstr "GLM 5.2 (libellé optionnel)"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global"
+msgstr "global"
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/components/mcp/McpExternalImportModal.tsx
#: src/renderer/components/mcp/McpProjectDestinationDropdown.tsx
@@ -4691,6 +4776,14 @@ msgstr "Global (Windows)"
msgid "Global folder"
msgstr "Dossier global"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global npm"
+msgstr "npm global"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global pnpm"
+msgstr "pnpm global"
+
#: src/renderer/commands/shortcutCatalog.ts
msgid "Go back in navigation history"
msgstr "Reculer dans l'historique de navigation"
@@ -4751,6 +4844,10 @@ msgstr "Regroupez les projets pour que la barre latérale, les planifications et
msgid "GUI chat font size"
msgstr "Taille de la police de discussion de l'interface graphique"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "GUI runtime"
+msgstr "Environnement d’exécution de l’interface"
+
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
msgid "handle"
msgstr "identifiant"
@@ -5067,13 +5164,46 @@ msgstr "Installez {0}."
msgid "Install {env}"
msgstr "Installer {env}"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK"
+msgstr "Installer ACP + SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK in {environment}"
+msgstr "Installer ACP + SDK dans {environment}"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Install ACP, SDK, or both, then choose which runtime starts new Cursor GUI chats. Existing chats stay pinned to the runtime that created them."
+msgstr "Installez ACP, le SDK ou les deux, puis choisissez l’environnement d’exécution qui lance les nouveaux chats de l’interface Cursor. Les chats existants restent associés à l’environnement qui les a créés."
+
#: src/renderer/components/thread/ThreadDraftComposerArea.tsx
msgid "Install CLI hooks"
msgstr "Installer les hooks CLI"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP)"
+msgstr "Installer Cursor Agent (ACP)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP) in {environment}"
+msgstr "Installer Cursor Agent (ACP) dans {environment}"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK"
+msgstr "Installer le SDK Cursor"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK in {environment}"
+msgstr "Installer le SDK Cursor dans {environment}"
+
+#. placeholder {0}: target.label
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "Install in {0}"
+msgstr "Installer dans {0}"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
-msgid "Install in WSL: {distro}"
-msgstr "Installer dans WSL : {distro}"
+#~ msgid "Install in WSL: {distro}"
+#~ msgstr "Installer dans WSL : {distro}"
#. placeholder {0}: props.targetLabel
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
@@ -5116,6 +5246,7 @@ msgid "Install v{version}"
msgstr "Installer v{version}"
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Installed"
@@ -5945,6 +6076,10 @@ msgstr "Modèle"
msgid "Model added to favorites"
msgstr "Modèle ajouté aux favoris"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Model controls"
+msgstr "Contrôles du modèle"
+
#. placeholder {0}: index + 1
#: src/renderer/components/experiment/NewExperimentModal.tsx
#~ msgid "Model for candidate {0}"
@@ -5977,6 +6112,7 @@ msgstr "Utilisation des modèles"
msgid "Models"
msgstr "Modèles"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/ProfileSettings.tsx
msgid "Modes"
msgstr "Modes"
@@ -6757,6 +6893,7 @@ msgstr "Pas un dépôt Git"
msgid "Not found"
msgstr "Pas trouvé"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Not installed"
@@ -7449,6 +7586,7 @@ msgstr "Routes de tâche épinglées"
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/thread/ThreadTodoDock.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Plan"
msgstr "Plan"
@@ -7675,6 +7813,10 @@ msgstr "Dossier du projet"
msgid "Project folder updated. Reopen any terminals in this project."
msgstr "Dossier du projet mis à jour. Rouvrez les terminaux de ce projet."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "project managed"
+msgstr "géré par le projet"
+
#: src/renderer/views/MainView/parts/CreateProject/CreateProjectModal.tsx
#: src/renderer/views/ProjectSettingsOverlay/parts/GeneralSection.tsx
msgid "Project name"
@@ -7973,6 +8115,7 @@ msgid "Ready. Turn this on to advertise the Tailscale HTTPS URL in new pairing c
msgstr "Prêt. Activez cette option pour annoncer l’URL HTTPS Tailscale dans les nouveaux codes d’appairage."
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Reasoning"
msgstr "Raisonnement"
@@ -8733,6 +8876,7 @@ msgstr "Options d'exécution"
#: src/renderer/views/FileEditorOverlay/parts/FileEditorPane/parts/EditorToolbar.tsx
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
#: src/renderer/views/SettingsOverlay/parts/ClaudeProfileSettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/OpenCodeProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Save"
@@ -8751,6 +8895,10 @@ msgstr "Enregistrer les modifications"
msgid "Save Claude profile"
msgstr "Enregistrer le profil de Claude"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Save Cursor GUI runtime"
+msgstr "Enregistrer l’environnement d’exécution de l’interface Cursor"
+
#: src/renderer/commands/registry.ts
msgid "Save File"
msgstr "Enregistrer le fichier"
@@ -8843,6 +8991,30 @@ msgstr "Multiplicateur de vitesse de défilement pour le tampon de défilement d
msgid "Scroll to bottom"
msgstr "Faire défiler vers le bas"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK"
+msgstr "SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK installed"
+msgstr "SDK installé"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK mode requires a separately installed @cursor/sdk package and CURSOR_API_KEY. It does not use the Cursor Agent CLI login."
+msgstr "Le mode SDK nécessite un package @cursor/sdk installé séparément et CURSOR_API_KEY. Il n’utilise pas la connexion de la CLI Cursor Agent."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK not installed"
+msgstr "SDK non installé"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path"
+msgstr "Chemin du package SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path (optional)"
+msgstr "Chemin du package SDK (facultatif)"
+
#: src/renderer/components/thread/ChatPane/parts/items/commandSummary.ts
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
#: src/renderer/views/MainView/parts/Sidebar/Sidebar.tsx
@@ -9313,6 +9485,7 @@ msgstr "Connectez-vous sur le bureau appairé, puis actualisez cet état."
#: src/renderer/components/thread/ThreadAuthRequiredDock.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Sign in required"
msgstr "Connexion requise"
@@ -9786,6 +9959,10 @@ msgstr "Enregistré sur cet appareil ; l’ordinateur conserve ses propres valeu
#~ msgid "Stored on this phone; the desktop keeps its own values."
#~ msgstr "Stocké sur ce téléphone ; l'ordinateur conserve ses propres valeurs."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Structured runtime"
+msgstr "Environnement d’exécution structuré"
+
#: src/mobile/views/DesktopWorkspacePanel.tsx
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/thread/ChatPane/parts/items/SubAgentOverlay.tsx
@@ -10301,6 +10478,7 @@ msgstr "Ces serveurs MCP intégrés sont partagés entre les fils OpenCode. L'en
#: src/renderer/components/thread/ChatPane/parts/items/Reasoning.tsx
#: src/renderer/components/thread/ChatPane/parts/items/ReasoningInline.tsx
#: src/renderer/components/thread/ThreadComposer.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Thinking"
msgstr "Réflexion"
@@ -11069,6 +11247,10 @@ msgstr "Non pris en charge"
msgid "Up one level"
msgstr "Remonter d'un niveau"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "update"
+msgstr "mise à jour"
+
#: src/renderer/components/thread/ThreadAgentUpdateDock.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Update"
@@ -11091,6 +11273,14 @@ msgstr "Mettre à jour la branche"
msgid "Update checks are not available in development mode."
msgstr "La recherche de mises à jour n’est pas disponible en mode développement."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK"
+msgstr "Mettre à jour le SDK Cursor"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK in {environment}"
+msgstr "Mettre à jour le SDK Cursor dans {environment}"
+
#: src/renderer/i18n/sharedMessages.ts
msgid "Update error: {detail}"
msgstr "Erreur de mise à jour : {detail}"
@@ -11103,6 +11293,10 @@ msgstr "Méthode de mise à jour"
msgid "Update Poracode on your desktop to use port forwarding."
msgstr "Mettez à jour Poracode sur votre bureau pour utiliser le transfert de port."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update SDK"
+msgstr "Mettre à jour le SDK"
+
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
msgid "Update task"
msgstr "Tâche de mise à jour"
@@ -11157,6 +11351,10 @@ msgstr "Mise à jour de {0}"
msgid "Updating {0} ({env})"
msgstr "Mise à jour de {0} ({env})"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "Updating in this terminal. Closes when finished."
+msgstr "Mise à jour dans ce terminal. Il se fermera une fois terminée."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "URL"
msgstr "URL"
@@ -11586,6 +11784,7 @@ msgstr "Gagnant fusionné."
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/workspace/WorkspaceNameDialog.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Work"
msgstr "Travail"
@@ -11774,6 +11973,10 @@ msgstr "Dossier de base WSL"
#~ msgid "WSL user"
#~ msgstr "Utilisateur WSL"
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "WSL: {distro}"
+msgstr "WSL : {distro}"
+
#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx
msgid "Your local changes are stashed and will be re-applied when you commit or abort this merge."
msgstr "Vos modifications locales sont dans un stash et seront réappliquées lorsque vous validerez ou abandonnerez cette fusion."
diff --git a/src/renderer/locales/ja/messages.po b/src/renderer/locales/ja/messages.po
index 39237ac4f..c62caf95c 100644
--- a/src/renderer/locales/ja/messages.po
+++ b/src/renderer/locales/ja/messages.po
@@ -228,6 +228,11 @@ msgstr "{0}制限"
msgid "{0} logged out."
msgstr "{0}がログアウトしました。"
+#. placeholder {0}: runtime.capabilities.models.length
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "{0} models"
+msgstr "{0} 個のモデル"
+
#. placeholder {0}: agent.name
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "{0} needs authentication."
@@ -552,6 +557,10 @@ msgstr "{visibleCount}/{totalCount}が表示されます"
msgid "/absolute/path/to/project"
msgstr "/absolute/path/to/project"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "/path/to/node_modules/@cursor/sdk"
+msgstr "/パス/先/node_modules/@cursor/sdk"
+
#: src/renderer/components/skills/SkillsManager.tsx
#~ msgid "/skill-creator Create a new managed skill for {destination}."
#~ msgstr "/skill-creator {destination} 用の新しい管理対象スキルを作成してください。"
@@ -652,13 +661,34 @@ msgstr "アカウント"
#: src/renderer/components/thread/ThreadHeaderStatus.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "ACP"
msgstr "ACP"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP (installed Cursor Agent)"
+#~ msgstr "ACP(インストール済みの Cursor Agent)"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "ACP Agents"
msgstr "ACPエージェント"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP installed"
+msgstr "ACP インストール済み"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP not installed"
+msgstr "ACP 未インストール"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "ACP uses the Cursor Agent login. SDK uses @cursor/sdk with CURSOR_API_KEY."
+msgstr "ACP は Cursor Agent のログインを使用します。SDK は CURSOR_API_KEY と @cursor/sdk を使用します。"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP uses the installed Cursor Agent. SDK loads an external @cursor/sdk package."
+#~ msgstr "ACP はインストール済みの Cursor Agent を使用します。SDK は外部の @cursor/sdk パッケージを読み込みます。"
+
#: src/renderer/views/ProjectSettingsOverlay/parts/ActionsSection.tsx
msgid "Action command"
msgstr "アクションコマンド"
@@ -742,6 +772,10 @@ msgstr "エージェントをインストールする前にプロジェクトを
msgid "Add a project before signing in."
msgstr "サインインする前にプロジェクトを追加してください。"
+#: src/renderer/actions/agentLoginActions.ts
+msgid "Add a project before updating an agent."
+msgstr "エージェントを更新する前にプロジェクトを追加してください。"
+
#: src/renderer/views/PullRequestsView/PullRequestsView.tsx
msgid "Add a project to see pull requests."
msgstr "プルリクエストを表示するには、プロジェクトを追加してください。"
@@ -1121,6 +1155,10 @@ msgstr "この実験の別の操作がまだ実行中です。"
msgid "Antigravity"
msgstr "Antigravity"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "API key required"
+msgstr "API キーが必要です"
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "API_KEY=value"
msgstr "API_KEY=value"
@@ -1228,7 +1266,7 @@ msgstr "ステージングされていない変更をすべて元に戻しても
msgid "Arguments"
msgstr "引数"
-#. placeholder {0}: agentStatus?.label ?? agentFallbackLabel
+#. placeholder {0}: effectiveAgentStatus?.label ?? agentFallbackLabel
#. placeholder {0}: project.name
#: src/renderer/components/thread/ThreadComposerSection.tsx
#: src/renderer/views/QuickComposerOverlay/QuickComposerOverlay.tsx
@@ -1374,6 +1412,10 @@ msgstr "端末パネルの自動表示"
msgid "Automatically show the terminal panel when running commands or creating worktrees."
msgstr "コマンドの実行時またはワークツリーの作成時に、端末パネルを自動的に表示します。"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Autopilot"
+msgstr "自動操縦"
+
#: src/renderer/components/skills/SkillImportModal.tsx
msgid "Availability"
msgstr "利用範囲"
@@ -1961,6 +2003,10 @@ msgstr "SSH 秘密鍵ファイルを選択"
msgid "Choose the display language for Poracode's interface."
msgstr "Poracode のインターフェースの表示言語を選択します。"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Choose the structured runtime for new Cursor GUI threads. Running threads keep their current runtime."
+#~ msgstr "新しい Cursor GUI スレッドで使用する構造化ランタイムを選択します。実行中のスレッドでは現在のランタイムが維持されます。"
+
#: src/renderer/views/MainView/parts/RightPanel/parts/BrowserPanel/parts/BrowserToolbar.tsx
msgid "Choose thread to attach to"
msgstr "接続するスレッドを選択してください"
@@ -2656,6 +2702,7 @@ msgstr "機密値が含まれています。手動で追加してください"
#: src/mobile/ComposerInfoChips.tsx
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
#: src/renderer/components/thread/threadContextUsage.ts
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Context"
msgstr "コンテキスト"
@@ -3142,6 +3189,26 @@ msgstr "現在の連続日数"
msgid "Cursor"
msgstr "Cursor"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Cursor GUI runtime updated."
+msgstr "Cursor GUI ランタイムを更新しました。"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Cursor SDK (external package)"
+#~ msgstr "Cursor SDK(外部パッケージ)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK is up to date."
+msgstr "Cursor SDK は最新です。"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK update targets"
+msgstr "Cursor SDK の更新先"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK updated to v{nextVersion}."
+msgstr "Cursor SDK を v{nextVersion} に更新しました。"
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/views/SchedulesView/ScheduleEditor.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
@@ -3154,6 +3221,10 @@ msgstr "カスタム"
msgid "Custom commands available from the project context menu (right-click)."
msgstr "プロジェクトのコンテキスト メニュー (右クリック) から使用できるカスタム コマンド。"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "custom path"
+msgstr "カスタムパス"
+
#: src/renderer/commands/composerCommands.ts
msgid "Cycle permission mode"
msgstr "許可モードを切り替え"
@@ -3195,6 +3266,7 @@ msgstr "辞退"
msgid "DeepSeek"
msgstr "DeepSeek"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
msgid "Default"
msgstr "デフォルト"
@@ -3883,6 +3955,10 @@ msgstr "有効なHTTPまたはHTTPSのURLを入力してください。"
msgid "Enter a valid SSH target and port."
msgstr "有効な SSH 接続先とポートを入力してください。"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Enter an absolute @cursor/sdk package path, or leave this blank for automatic discovery."
+msgstr "@cursor/sdk パッケージへの絶対パスを入力するか、空欄にして自動検出を使用します。"
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "Enter one MCP server configuration."
msgstr "MCPサーバー設定を1つ入力してください。"
@@ -4199,6 +4275,7 @@ msgstr "目標を更新できませんでした"
#: src/renderer/components/providers/modelDisplay.ts
#: src/renderer/components/thread/buildModelPickerControls.tsx
#: src/renderer/views/SettingsOverlay/parts/CrossagentRoutingSection.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Fast"
msgstr "速い"
@@ -4348,8 +4425,12 @@ msgid "First-class Command Code CLI integration using Poracode's native runtime.
msgstr "Poracode のネイティブ ランタイムを使用したファーストクラスの Command Code CLI 統合。"
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
-msgid "First-class Cursor Agent integration using Poracode's native runtime."
-msgstr "Poracode のネイティブ ランタイムを使用したファーストクラスの Cursor Agent 統合。"
+#~ msgid "First-class Cursor Agent integration using Poracode's native runtime."
+#~ msgstr "Poracode のネイティブ ランタイムを使用したファーストクラスの Cursor Agent 統合。"
+
+#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
+msgid "First-class Cursor integration using ACP or the public SDK runtime."
+msgstr "ACP または公開 SDK ランタイムを使用する Cursor のファーストクラス統合。"
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
msgid "First-class Factory Droid integration using Poracode's ACP runtime."
@@ -4662,6 +4743,10 @@ msgstr "メイン プロジェクトから各新しいワークツリーにコ
msgid "GLM 5.2 (optional label)"
msgstr "GLM 5.2(任意のラベル)"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global"
+msgstr "グローバル"
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/components/mcp/McpExternalImportModal.tsx
#: src/renderer/components/mcp/McpProjectDestinationDropdown.tsx
@@ -4690,6 +4775,14 @@ msgstr "グローバル (Windows)"
msgid "Global folder"
msgstr "グローバルフォルダー"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global npm"
+msgstr "グローバル npm"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global pnpm"
+msgstr "グローバル pnpm"
+
#: src/renderer/commands/shortcutCatalog.ts
msgid "Go back in navigation history"
msgstr "ナビゲーション履歴で戻る"
@@ -4750,6 +4843,10 @@ msgstr "プロジェクトをグループ化して、サイドバー・スケジ
msgid "GUI chat font size"
msgstr "GUIチャットのフォントサイズ"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "GUI runtime"
+msgstr "GUI ランタイム"
+
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
msgid "handle"
msgstr "ハンドル"
@@ -5066,13 +5163,46 @@ msgstr "{0}をインストールします。"
msgid "Install {env}"
msgstr "{env}をインストールする"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK"
+msgstr "ACP + SDK をインストール"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK in {environment}"
+msgstr "{environment} に ACP + SDK をインストール"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Install ACP, SDK, or both, then choose which runtime starts new Cursor GUI chats. Existing chats stay pinned to the runtime that created them."
+msgstr "ACP、SDK、または両方をインストールし、新しい Cursor GUI チャットを開始するランタイムを選択します。既存のチャットは作成元のランタイムに固定されます。"
+
#: src/renderer/components/thread/ThreadDraftComposerArea.tsx
msgid "Install CLI hooks"
msgstr "CLIフックをインストールする"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP)"
+msgstr "Cursor Agent(ACP)をインストール"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP) in {environment}"
+msgstr "{environment} に Cursor Agent(ACP)をインストール"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK"
+msgstr "Cursor SDK をインストール"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK in {environment}"
+msgstr "{environment} に Cursor SDK をインストール"
+
+#. placeholder {0}: target.label
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "Install in {0}"
+msgstr "{0} にインストール"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
-msgid "Install in WSL: {distro}"
-msgstr "WSL にインストール:{distro}"
+#~ msgid "Install in WSL: {distro}"
+#~ msgstr "WSL にインストール:{distro}"
#. placeholder {0}: props.targetLabel
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
@@ -5115,6 +5245,7 @@ msgid "Install v{version}"
msgstr "v{version} をインストール"
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Installed"
@@ -5944,6 +6075,10 @@ msgstr "モデル"
msgid "Model added to favorites"
msgstr "モデルをお気に入りに追加しました"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Model controls"
+msgstr "モデルコントロール"
+
#. placeholder {0}: index + 1
#: src/renderer/components/experiment/NewExperimentModal.tsx
#~ msgid "Model for candidate {0}"
@@ -5976,6 +6111,7 @@ msgstr "モデルの使用状況"
msgid "Models"
msgstr "モデル"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/ProfileSettings.tsx
msgid "Modes"
msgstr "モード"
@@ -6756,6 +6892,7 @@ msgstr "Git リポジトリではありません"
msgid "Not found"
msgstr "見つかりません"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Not installed"
@@ -7448,6 +7585,7 @@ msgstr "固定されたタスクルート"
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/thread/ThreadTodoDock.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Plan"
msgstr "計画"
@@ -7674,6 +7812,10 @@ msgstr "プロジェクトフォルダー"
msgid "Project folder updated. Reopen any terminals in this project."
msgstr "プロジェクトフォルダーを更新しました。このプロジェクト内のターミナルを開き直してください。"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "project managed"
+msgstr "プロジェクト管理"
+
#: src/renderer/views/MainView/parts/CreateProject/CreateProjectModal.tsx
#: src/renderer/views/ProjectSettingsOverlay/parts/GeneralSection.tsx
msgid "Project name"
@@ -7972,6 +8114,7 @@ msgid "Ready. Turn this on to advertise the Tailscale HTTPS URL in new pairing c
msgstr "準備完了。オンにすると、新しいペアリングコードで Tailscale HTTPS URL が通知されます。"
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Reasoning"
msgstr "推論"
@@ -8732,6 +8875,7 @@ msgstr "実行時オプション"
#: src/renderer/views/FileEditorOverlay/parts/FileEditorPane/parts/EditorToolbar.tsx
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
#: src/renderer/views/SettingsOverlay/parts/ClaudeProfileSettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/OpenCodeProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Save"
@@ -8750,6 +8894,10 @@ msgstr "変更を保存"
msgid "Save Claude profile"
msgstr "Claude プロフィールを保存"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Save Cursor GUI runtime"
+msgstr "Cursor GUI ランタイムを保存"
+
#: src/renderer/commands/registry.ts
msgid "Save File"
msgstr "ファイルの保存"
@@ -8842,6 +8990,30 @@ msgstr "端末のスクロールバック バッファのスクロール速度
msgid "Scroll to bottom"
msgstr "一番下までスクロール"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK"
+msgstr "SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK installed"
+msgstr "SDK インストール済み"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK mode requires a separately installed @cursor/sdk package and CURSOR_API_KEY. It does not use the Cursor Agent CLI login."
+msgstr "SDK モードには、別途インストールした @cursor/sdk パッケージと CURSOR_API_KEY が必要です。Cursor Agent CLI のログインは使用されません。"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK not installed"
+msgstr "SDK 未インストール"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path"
+msgstr "SDK パッケージのパス"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path (optional)"
+msgstr "SDK パッケージのパス(任意)"
+
#: src/renderer/components/thread/ChatPane/parts/items/commandSummary.ts
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
#: src/renderer/views/MainView/parts/Sidebar/Sidebar.tsx
@@ -9312,6 +9484,7 @@ msgstr "ペアリング済みのデスクトップでサインインしてから
#: src/renderer/components/thread/ThreadAuthRequiredDock.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Sign in required"
msgstr "サインインが必要です"
@@ -9785,6 +9958,10 @@ msgstr "このデバイスに保存されます。デスクトップ側の値は
#~ msgid "Stored on this phone; the desktop keeps its own values."
#~ msgstr "このスマートフォンに保存されます。デスクトップ側は独自の値を保持します。"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Structured runtime"
+msgstr "構造化ランタイム"
+
#: src/mobile/views/DesktopWorkspacePanel.tsx
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/thread/ChatPane/parts/items/SubAgentOverlay.tsx
@@ -10300,6 +10477,7 @@ msgstr "これらの組み込みMCPサーバーはOpenCodeスレッド間で共
#: src/renderer/components/thread/ChatPane/parts/items/Reasoning.tsx
#: src/renderer/components/thread/ChatPane/parts/items/ReasoningInline.tsx
#: src/renderer/components/thread/ThreadComposer.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Thinking"
msgstr "思考中"
@@ -11068,6 +11246,10 @@ msgstr "サポートされていません"
msgid "Up one level"
msgstr "一つ上の階層へ"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "update"
+msgstr "更新"
+
#: src/renderer/components/thread/ThreadAgentUpdateDock.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Update"
@@ -11090,6 +11272,14 @@ msgstr "ブランチを更新する"
msgid "Update checks are not available in development mode."
msgstr "開発モードではアップデートを確認できません。"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK"
+msgstr "Cursor SDK を更新"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK in {environment}"
+msgstr "{environment} の Cursor SDK を更新"
+
#: src/renderer/i18n/sharedMessages.ts
msgid "Update error: {detail}"
msgstr "更新エラー:{detail}"
@@ -11102,6 +11292,10 @@ msgstr "更新方法"
msgid "Update Poracode on your desktop to use port forwarding."
msgstr "ポート転送を使用するには、デスクトップの Poracode を更新してください。"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update SDK"
+msgstr "SDK を更新"
+
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
msgid "Update task"
msgstr "更新タスク"
@@ -11156,6 +11350,10 @@ msgstr "{0}を更新しています"
msgid "Updating {0} ({env})"
msgstr "{0}({env}) を更新しています"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "Updating in this terminal. Closes when finished."
+msgstr "このターミナルで更新中です。完了すると閉じます。"
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "URL"
msgstr "URL"
@@ -11585,6 +11783,7 @@ msgstr "勝者をマージしました。"
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/workspace/WorkspaceNameDialog.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Work"
msgstr "作業"
@@ -11773,6 +11972,10 @@ msgstr "WSL ベースフォルダー"
#~ msgid "WSL user"
#~ msgstr "WSL ユーザー"
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "WSL: {distro}"
+msgstr "WSL:{distro}"
+
#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx
msgid "Your local changes are stashed and will be re-applied when you commit or abort this merge."
msgstr "ローカルでの変更はスタッシュに保存されており、このマージをコミットまたは中止すると再適用されます。"
diff --git a/src/renderer/locales/ko/messages.po b/src/renderer/locales/ko/messages.po
index afe60d62b..e8615d3fd 100644
--- a/src/renderer/locales/ko/messages.po
+++ b/src/renderer/locales/ko/messages.po
@@ -228,6 +228,11 @@ msgstr "{0} 한도"
msgid "{0} logged out."
msgstr "{0} 로그아웃되었습니다."
+#. placeholder {0}: runtime.capabilities.models.length
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "{0} models"
+msgstr "모델 {0}개"
+
#. placeholder {0}: agent.name
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "{0} needs authentication."
@@ -553,6 +558,10 @@ msgstr "{totalCount}개 중 {visibleCount}개 표시"
msgid "/absolute/path/to/project"
msgstr "/absolute/path/to/project"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "/path/to/node_modules/@cursor/sdk"
+msgstr "/경로/node_modules/@cursor/sdk"
+
#: src/renderer/components/skills/SkillsManager.tsx
#~ msgid "/skill-creator Create a new managed skill for {destination}."
#~ msgstr "/skill-creator {destination}에 사용할 새로운 관리형 스킬을 만드세요."
@@ -653,13 +662,34 @@ msgstr "계정"
#: src/renderer/components/thread/ThreadHeaderStatus.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "ACP"
msgstr "ACP"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP (installed Cursor Agent)"
+#~ msgstr "ACP(설치된 Cursor Agent)"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "ACP Agents"
msgstr "ACP 에이전트"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP installed"
+msgstr "ACP 설치됨"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP not installed"
+msgstr "ACP 설치되지 않음"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "ACP uses the Cursor Agent login. SDK uses @cursor/sdk with CURSOR_API_KEY."
+msgstr "ACP는 Cursor Agent 로그인을 사용합니다. SDK는 CURSOR_API_KEY와 함께 @cursor/sdk를 사용합니다."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP uses the installed Cursor Agent. SDK loads an external @cursor/sdk package."
+#~ msgstr "ACP는 설치된 Cursor Agent를 사용합니다. SDK는 외부 @cursor/sdk 패키지를 불러옵니다."
+
#: src/renderer/views/ProjectSettingsOverlay/parts/ActionsSection.tsx
msgid "Action command"
msgstr "액션 명령"
@@ -743,6 +773,10 @@ msgstr "에이전트를 설치하기 전에 프로젝트를 추가하세요."
msgid "Add a project before signing in."
msgstr "로그인하기 전에 프로젝트를 추가하세요."
+#: src/renderer/actions/agentLoginActions.ts
+msgid "Add a project before updating an agent."
+msgstr "에이전트를 업데이트하기 전에 프로젝트를 추가하세요."
+
#: src/renderer/views/PullRequestsView/PullRequestsView.tsx
msgid "Add a project to see pull requests."
msgstr "풀 리퀘스트를 보려면 프로젝트를 추가하세요."
@@ -1122,6 +1156,10 @@ msgstr "이 실험에 대한 다른 작업이 아직 실행 중입니다."
msgid "Antigravity"
msgstr "Antigravity"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "API key required"
+msgstr "API 키 필요"
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "API_KEY=value"
msgstr "API_KEY=value"
@@ -1229,7 +1267,7 @@ msgstr "스테이징되지 않은 모든 변경 사항을 되돌리시겠습니
msgid "Arguments"
msgstr "인수"
-#. placeholder {0}: agentStatus?.label ?? agentFallbackLabel
+#. placeholder {0}: effectiveAgentStatus?.label ?? agentFallbackLabel
#. placeholder {0}: project.name
#: src/renderer/components/thread/ThreadComposerSection.tsx
#: src/renderer/views/QuickComposerOverlay/QuickComposerOverlay.tsx
@@ -1375,6 +1413,10 @@ msgstr "터미널 패널 자동 표시"
msgid "Automatically show the terminal panel when running commands or creating worktrees."
msgstr "명령을 실행하거나 작업 트리를 생성할 때 터미널 패널을 자동으로 표시합니다."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Autopilot"
+msgstr "자동 조종"
+
#: src/renderer/components/skills/SkillImportModal.tsx
msgid "Availability"
msgstr "사용 범위"
@@ -1962,6 +2004,10 @@ msgstr "SSH ID 파일 선택"
msgid "Choose the display language for Poracode's interface."
msgstr "Poracode 인터페이스의 표시 언어를 선택하세요."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Choose the structured runtime for new Cursor GUI threads. Running threads keep their current runtime."
+#~ msgstr "새 Cursor GUI 스레드에 사용할 구조화 런타임을 선택하세요. 실행 중인 스레드는 현재 런타임을 유지합니다."
+
#: src/renderer/views/MainView/parts/RightPanel/parts/BrowserPanel/parts/BrowserToolbar.tsx
msgid "Choose thread to attach to"
msgstr "첨부할 스레드를 선택하세요."
@@ -2657,6 +2703,7 @@ msgstr "민감한 값이 포함되어 있습니다. 직접 추가하세요"
#: src/mobile/ComposerInfoChips.tsx
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
#: src/renderer/components/thread/threadContextUsage.ts
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Context"
msgstr "컨텍스트"
@@ -3143,6 +3190,26 @@ msgstr "현재 연속 기록"
msgid "Cursor"
msgstr "Cursor"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Cursor GUI runtime updated."
+msgstr "Cursor GUI 런타임을 업데이트했습니다."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Cursor SDK (external package)"
+#~ msgstr "Cursor SDK(외부 패키지)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK is up to date."
+msgstr "Cursor SDK가 최신 상태입니다."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK update targets"
+msgstr "Cursor SDK 업데이트 대상"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK updated to v{nextVersion}."
+msgstr "Cursor SDK를 v{nextVersion}(으)로 업데이트했습니다."
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/views/SchedulesView/ScheduleEditor.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
@@ -3155,6 +3222,10 @@ msgstr "맞춤"
msgid "Custom commands available from the project context menu (right-click)."
msgstr "프로젝트 상황에 맞는 메뉴(오른쪽 클릭)에서 사용할 수 있는 사용자 정의 명령."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "custom path"
+msgstr "사용자 지정 경로"
+
#: src/renderer/commands/composerCommands.ts
msgid "Cycle permission mode"
msgstr "권한 모드 순환"
@@ -3196,6 +3267,7 @@ msgstr "거절"
msgid "DeepSeek"
msgstr "DeepSeek"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
msgid "Default"
msgstr "기본값"
@@ -3884,6 +3956,10 @@ msgstr "유효한 HTTP 또는 HTTPS URL을 입력하세요."
msgid "Enter a valid SSH target and port."
msgstr "올바른 SSH 대상과 포트를 입력하세요."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Enter an absolute @cursor/sdk package path, or leave this blank for automatic discovery."
+msgstr "@cursor/sdk 패키지의 절대 경로를 입력하거나 자동 검색을 사용하려면 비워 두세요."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "Enter one MCP server configuration."
msgstr "MCP 서버 구성 하나를 입력하세요."
@@ -4200,6 +4276,7 @@ msgstr "목표를 업데이트하지 못했습니다"
#: src/renderer/components/providers/modelDisplay.ts
#: src/renderer/components/thread/buildModelPickerControls.tsx
#: src/renderer/views/SettingsOverlay/parts/CrossagentRoutingSection.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Fast"
msgstr "빠르게"
@@ -4349,8 +4426,12 @@ msgid "First-class Command Code CLI integration using Poracode's native runtime.
msgstr "Poracode의 네이티브 런타임을 사용한 최고 수준의 Command Code CLI 통합."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
-msgid "First-class Cursor Agent integration using Poracode's native runtime."
-msgstr "Poracode의 네이티브 런타임을 사용하는 일급 Cursor Agent 통합."
+#~ msgid "First-class Cursor Agent integration using Poracode's native runtime."
+#~ msgstr "Poracode의 네이티브 런타임을 사용하는 일급 Cursor Agent 통합."
+
+#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
+msgid "First-class Cursor integration using ACP or the public SDK runtime."
+msgstr "ACP 또는 공개 SDK 런타임을 사용하는 완전한 Cursor 통합입니다."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
msgid "First-class Factory Droid integration using Poracode's ACP runtime."
@@ -4663,6 +4744,10 @@ msgstr "기본 프로젝트에서 각각의 새 작업 트리로 복사할 Gitig
msgid "GLM 5.2 (optional label)"
msgstr "GLM 5.2 (선택 레이블)"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global"
+msgstr "전역"
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/components/mcp/McpExternalImportModal.tsx
#: src/renderer/components/mcp/McpProjectDestinationDropdown.tsx
@@ -4691,6 +4776,14 @@ msgstr "전역 (Windows)"
msgid "Global folder"
msgstr "전역 폴더"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global npm"
+msgstr "전역 npm"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global pnpm"
+msgstr "전역 pnpm"
+
#: src/renderer/commands/shortcutCatalog.ts
msgid "Go back in navigation history"
msgstr "탐색 기록에서 뒤로 이동"
@@ -4751,6 +4844,10 @@ msgstr "프로젝트를 그룹으로 묶어 사이드바, 일정, 풀 리퀘스
msgid "GUI chat font size"
msgstr "GUI 채팅 글꼴 크기"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "GUI runtime"
+msgstr "GUI 런타임"
+
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
msgid "handle"
msgstr "핸들"
@@ -5067,13 +5164,46 @@ msgstr "{0}을(를) 설치합니다."
msgid "Install {env}"
msgstr "{env} 설치"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK"
+msgstr "ACP + SDK 설치"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK in {environment}"
+msgstr "{environment}에 ACP + SDK 설치"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Install ACP, SDK, or both, then choose which runtime starts new Cursor GUI chats. Existing chats stay pinned to the runtime that created them."
+msgstr "ACP, SDK 또는 둘 다 설치한 다음 새 Cursor GUI 채팅을 시작할 런타임을 선택하세요. 기존 채팅은 생성한 런타임에 계속 고정됩니다."
+
#: src/renderer/components/thread/ThreadDraftComposerArea.tsx
msgid "Install CLI hooks"
msgstr "CLI 후크 설치"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP)"
+msgstr "Cursor Agent(ACP) 설치"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP) in {environment}"
+msgstr "{environment}에 Cursor Agent(ACP) 설치"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK"
+msgstr "Cursor SDK 설치"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK in {environment}"
+msgstr "{environment}에 Cursor SDK 설치"
+
+#. placeholder {0}: target.label
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "Install in {0}"
+msgstr "{0}에 설치"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
-msgid "Install in WSL: {distro}"
-msgstr "WSL에 설치: {distro}"
+#~ msgid "Install in WSL: {distro}"
+#~ msgstr "WSL에 설치: {distro}"
#. placeholder {0}: props.targetLabel
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
@@ -5116,6 +5246,7 @@ msgid "Install v{version}"
msgstr "v{version} 설치"
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Installed"
@@ -5946,6 +6077,10 @@ msgstr "모델"
msgid "Model added to favorites"
msgstr "모델을 즐겨찾기에 추가함"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Model controls"
+msgstr "모델 컨트롤"
+
#. placeholder {0}: index + 1
#: src/renderer/components/experiment/NewExperimentModal.tsx
#~ msgid "Model for candidate {0}"
@@ -5978,6 +6113,7 @@ msgstr "모델 사용량"
msgid "Models"
msgstr "모델"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/ProfileSettings.tsx
msgid "Modes"
msgstr "모드"
@@ -6758,6 +6894,7 @@ msgstr "Git 저장소가 아님"
msgid "Not found"
msgstr "찾을 수 없음"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Not installed"
@@ -7450,6 +7587,7 @@ msgstr "고정된 작업 경로"
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/thread/ThreadTodoDock.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Plan"
msgstr "계획"
@@ -7676,6 +7814,10 @@ msgstr "프로젝트 폴더"
msgid "Project folder updated. Reopen any terminals in this project."
msgstr "프로젝트 폴더가 업데이트되었습니다. 이 프로젝트의 터미널을 다시 여세요."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "project managed"
+msgstr "프로젝트에서 관리"
+
#: src/renderer/views/MainView/parts/CreateProject/CreateProjectModal.tsx
#: src/renderer/views/ProjectSettingsOverlay/parts/GeneralSection.tsx
msgid "Project name"
@@ -7974,6 +8116,7 @@ msgid "Ready. Turn this on to advertise the Tailscale HTTPS URL in new pairing c
msgstr "준비됨. 이 옵션을 켜면 새 페어링 코드에 Tailscale HTTPS URL이 광고됩니다."
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Reasoning"
msgstr "추론"
@@ -8734,6 +8877,7 @@ msgstr "런타임 옵션"
#: src/renderer/views/FileEditorOverlay/parts/FileEditorPane/parts/EditorToolbar.tsx
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
#: src/renderer/views/SettingsOverlay/parts/ClaudeProfileSettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/OpenCodeProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Save"
@@ -8752,6 +8896,10 @@ msgstr "변경 사항 저장"
msgid "Save Claude profile"
msgstr "Claude 프로필 저장"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Save Cursor GUI runtime"
+msgstr "Cursor GUI 런타임 저장"
+
#: src/renderer/commands/registry.ts
msgid "Save File"
msgstr "파일 저장"
@@ -8844,6 +8992,30 @@ msgstr "터미널 스크롤백 버퍼의 스크롤 속도 승수입니다."
msgid "Scroll to bottom"
msgstr "맨 아래로 스크롤"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK"
+msgstr "SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK installed"
+msgstr "SDK 설치됨"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK mode requires a separately installed @cursor/sdk package and CURSOR_API_KEY. It does not use the Cursor Agent CLI login."
+msgstr "SDK 모드에는 별도로 설치한 @cursor/sdk 패키지와 CURSOR_API_KEY가 필요합니다. Cursor Agent CLI 로그인을 사용하지 않습니다."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK not installed"
+msgstr "SDK 설치되지 않음"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path"
+msgstr "SDK 패키지 경로"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path (optional)"
+msgstr "SDK 패키지 경로(선택 사항)"
+
#: src/renderer/components/thread/ChatPane/parts/items/commandSummary.ts
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
#: src/renderer/views/MainView/parts/Sidebar/Sidebar.tsx
@@ -9314,6 +9486,7 @@ msgstr "페어링된 데스크톱에서 로그인한 다음 이 상태를 새로
#: src/renderer/components/thread/ThreadAuthRequiredDock.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Sign in required"
msgstr "로그인이 필요합니다"
@@ -9787,6 +9960,10 @@ msgstr "이 기기에 저장되며 데스크톱은 자체 값을 유지합니다
#~ msgid "Stored on this phone; the desktop keeps its own values."
#~ msgstr "이 휴대폰에 저장됩니다. 데스크톱은 자체 값을 유지합니다."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Structured runtime"
+msgstr "구조화 런타임"
+
#: src/mobile/views/DesktopWorkspacePanel.tsx
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/thread/ChatPane/parts/items/SubAgentOverlay.tsx
@@ -10302,6 +10479,7 @@ msgstr "이 기본 제공 MCP 서버는 OpenCode 스레드 간에 공유됩니
#: src/renderer/components/thread/ChatPane/parts/items/Reasoning.tsx
#: src/renderer/components/thread/ChatPane/parts/items/ReasoningInline.tsx
#: src/renderer/components/thread/ThreadComposer.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Thinking"
msgstr "생각 중"
@@ -11070,6 +11248,10 @@ msgstr "지원되지 않음"
msgid "Up one level"
msgstr "한 단계 위로"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "update"
+msgstr "업데이트"
+
#: src/renderer/components/thread/ThreadAgentUpdateDock.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Update"
@@ -11092,6 +11274,14 @@ msgstr "브랜치 업데이트"
msgid "Update checks are not available in development mode."
msgstr "개발 모드에서는 업데이트를 확인할 수 없습니다."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK"
+msgstr "Cursor SDK 업데이트"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK in {environment}"
+msgstr "{environment}에서 Cursor SDK 업데이트"
+
#: src/renderer/i18n/sharedMessages.ts
msgid "Update error: {detail}"
msgstr "업데이트 오류:{detail}"
@@ -11104,6 +11294,10 @@ msgstr "업데이트 방법"
msgid "Update Poracode on your desktop to use port forwarding."
msgstr "포트 포워딩을 사용하려면 데스크톱의 Poracode를 업데이트하세요."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update SDK"
+msgstr "SDK 업데이트"
+
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
msgid "Update task"
msgstr "작업 업데이트"
@@ -11158,6 +11352,10 @@ msgstr "{0} 업데이트 중"
msgid "Updating {0} ({env})"
msgstr "{0}({env}) 업데이트 중"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "Updating in this terminal. Closes when finished."
+msgstr "이 터미널에서 업데이트 중입니다. 완료되면 닫힙니다."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "URL"
msgstr "URL"
@@ -11587,6 +11785,7 @@ msgstr "우승자를 병합했습니다."
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/workspace/WorkspaceNameDialog.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Work"
msgstr "작업"
@@ -11775,6 +11974,10 @@ msgstr "WSL 기본 폴더"
#~ msgid "WSL user"
#~ msgstr "WSL 사용자"
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "WSL: {distro}"
+msgstr "WSL: {distro}"
+
#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx
msgid "Your local changes are stashed and will be re-applied when you commit or abort this merge."
msgstr "로컬 변경 사항이 스태시에 저장되어 있으며 이 병합을 커밋하거나 중단하면 다시 적용됩니다."
diff --git a/src/renderer/locales/pl/messages.po b/src/renderer/locales/pl/messages.po
index 8978f8907..769aa1fa6 100644
--- a/src/renderer/locales/pl/messages.po
+++ b/src/renderer/locales/pl/messages.po
@@ -228,6 +228,11 @@ msgstr "{0} – limit"
msgid "{0} logged out."
msgstr "{0} – wylogowano."
+#. placeholder {0}: runtime.capabilities.models.length
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "{0} models"
+msgstr "Modele: {0}"
+
#. placeholder {0}: agent.name
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "{0} needs authentication."
@@ -553,6 +558,10 @@ msgstr "Widoczne {visibleCount} z {totalCount}"
msgid "/absolute/path/to/project"
msgstr "/absolute/path/to/project"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "/path/to/node_modules/@cursor/sdk"
+msgstr "/ścieżka/do/node_modules/@cursor/sdk"
+
#: src/renderer/components/skills/SkillsManager.tsx
#~ msgid "/skill-creator Create a new managed skill for {destination}."
#~ msgstr "/skill-creator Utwórz nową zarządzaną umiejętność dla: {destination}."
@@ -653,13 +662,34 @@ msgstr "Konta"
#: src/renderer/components/thread/ThreadHeaderStatus.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "ACP"
msgstr "ACP"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP (installed Cursor Agent)"
+#~ msgstr "ACP (zainstalowany Cursor Agent)"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "ACP Agents"
msgstr "Agenci ACP"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP installed"
+msgstr "ACP zainstalowane"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP not installed"
+msgstr "ACP niezainstalowane"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "ACP uses the Cursor Agent login. SDK uses @cursor/sdk with CURSOR_API_KEY."
+msgstr "ACP używa logowania Cursor Agent. SDK używa @cursor/sdk z CURSOR_API_KEY."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP uses the installed Cursor Agent. SDK loads an external @cursor/sdk package."
+#~ msgstr "ACP używa zainstalowanego Cursor Agent. SDK ładuje zewnętrzny pakiet @cursor/sdk."
+
#: src/renderer/views/ProjectSettingsOverlay/parts/ActionsSection.tsx
msgid "Action command"
msgstr "Polecenie akcji"
@@ -743,6 +773,10 @@ msgstr "Dodaj projekt przed zainstalowaniem agenta."
msgid "Add a project before signing in."
msgstr "Dodaj projekt przed zalogowaniem."
+#: src/renderer/actions/agentLoginActions.ts
+msgid "Add a project before updating an agent."
+msgstr "Dodaj projekt przed aktualizacją agenta."
+
#: src/renderer/views/PullRequestsView/PullRequestsView.tsx
msgid "Add a project to see pull requests."
msgstr "Dodaj projekt, aby zobaczyć żądania ściągnięcia."
@@ -1122,6 +1156,10 @@ msgstr "Inna operacja dla tego eksperymentu wciąż trwa."
msgid "Antigravity"
msgstr "Antigravity"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "API key required"
+msgstr "Wymagany klucz API"
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "API_KEY=value"
msgstr "API_KEY=value"
@@ -1229,7 +1267,7 @@ msgstr "Czy na pewno chcesz cofnąć wszystkie niezindeksowane zmiany? Tego nie
msgid "Arguments"
msgstr "Argumenty"
-#. placeholder {0}: agentStatus?.label ?? agentFallbackLabel
+#. placeholder {0}: effectiveAgentStatus?.label ?? agentFallbackLabel
#. placeholder {0}: project.name
#: src/renderer/components/thread/ThreadComposerSection.tsx
#: src/renderer/views/QuickComposerOverlay/QuickComposerOverlay.tsx
@@ -1375,6 +1413,10 @@ msgstr "Automatyczne wyświetlanie panelu terminali"
msgid "Automatically show the terminal panel when running commands or creating worktrees."
msgstr "Automatycznie pokazuj panel terminala podczas uruchamiania poleceń lub tworzenia drzew roboczych."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Autopilot"
+msgstr "Autopilot"
+
#: src/renderer/components/skills/SkillImportModal.tsx
msgid "Availability"
msgstr "Dostępność"
@@ -1962,6 +2004,10 @@ msgstr "Wybierz plik tożsamości SSH"
msgid "Choose the display language for Poracode's interface."
msgstr "Wybierz język wyświetlania interfejsu Poracode."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Choose the structured runtime for new Cursor GUI threads. Running threads keep their current runtime."
+#~ msgstr "Wybierz środowisko strukturalne dla nowych wątków GUI Cursor. Uruchomione wątki zachowają bieżące środowisko."
+
#: src/renderer/views/MainView/parts/RightPanel/parts/BrowserPanel/parts/BrowserToolbar.tsx
msgid "Choose thread to attach to"
msgstr "Wybierz wątek, do którego chcesz dołączyć"
@@ -2657,6 +2703,7 @@ msgstr "Zawiera poufne wartości; dodaj ręcznie"
#: src/mobile/ComposerInfoChips.tsx
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
#: src/renderer/components/thread/threadContextUsage.ts
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Context"
msgstr "Kontekst"
@@ -3143,6 +3190,26 @@ msgstr "Obecna seria"
msgid "Cursor"
msgstr "Cursor"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Cursor GUI runtime updated."
+msgstr "Zaktualizowano środowisko GUI Cursor."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Cursor SDK (external package)"
+#~ msgstr "Cursor SDK (pakiet zewnętrzny)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK is up to date."
+msgstr "Cursor SDK jest aktualny."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK update targets"
+msgstr "Miejsca aktualizacji Cursor SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK updated to v{nextVersion}."
+msgstr "Zaktualizowano Cursor SDK do v{nextVersion}."
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/views/SchedulesView/ScheduleEditor.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
@@ -3155,6 +3222,10 @@ msgstr "Niestandardowe"
msgid "Custom commands available from the project context menu (right-click)."
msgstr "Polecenia niestandardowe dostępne z menu kontekstowego projektu (kliknij prawym przyciskiem myszy)."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "custom path"
+msgstr "niestandardowa ścieżka"
+
#: src/renderer/commands/composerCommands.ts
msgid "Cycle permission mode"
msgstr "Przełączaj tryb uprawnień"
@@ -3196,6 +3267,7 @@ msgstr "Odmów"
msgid "DeepSeek"
msgstr "DeepSeek"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
msgid "Default"
msgstr "Domyślne"
@@ -3884,6 +3956,10 @@ msgstr "Wprowadź prawidłowy adres URL HTTP lub HTTPS."
msgid "Enter a valid SSH target and port."
msgstr "Wprowadź prawidłowy cel SSH i port."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Enter an absolute @cursor/sdk package path, or leave this blank for automatic discovery."
+msgstr "Wprowadź bezwzględną ścieżkę do pakietu @cursor/sdk lub pozostaw to pole puste, aby użyć automatycznego wykrywania."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "Enter one MCP server configuration."
msgstr "Wprowadź jedną konfigurację serwera MCP."
@@ -4200,6 +4276,7 @@ msgstr "Nie udało się zaktualizować celu"
#: src/renderer/components/providers/modelDisplay.ts
#: src/renderer/components/thread/buildModelPickerControls.tsx
#: src/renderer/views/SettingsOverlay/parts/CrossagentRoutingSection.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Fast"
msgstr "Szybki"
@@ -4349,8 +4426,12 @@ msgid "First-class Command Code CLI integration using Poracode's native runtime.
msgstr "Pierwszorzędna integracja Command Code CLI przy użyciu natywnego środowiska wykonawczego Poracode."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
-msgid "First-class Cursor Agent integration using Poracode's native runtime."
-msgstr "Pierwszorzędna integracja Cursor Agent z wykorzystaniem natywnego środowiska uruchomieniowego Poracode."
+#~ msgid "First-class Cursor Agent integration using Poracode's native runtime."
+#~ msgstr "Pierwszorzędna integracja Cursor Agent z wykorzystaniem natywnego środowiska uruchomieniowego Poracode."
+
+#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
+msgid "First-class Cursor integration using ACP or the public SDK runtime."
+msgstr "Pełna integracja Cursor przy użyciu ACP lub publicznego środowiska SDK."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
msgid "First-class Factory Droid integration using Poracode's ACP runtime."
@@ -4663,6 +4744,10 @@ msgstr "Pliki ignorowane przez Git do skopiowania z głównego projektu do każd
msgid "GLM 5.2 (optional label)"
msgstr "GLM 5.2 (etykieta opcjonalna)"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global"
+msgstr "globalnie"
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/components/mcp/McpExternalImportModal.tsx
#: src/renderer/components/mcp/McpProjectDestinationDropdown.tsx
@@ -4691,6 +4776,14 @@ msgstr "Globalne (Windows)"
msgid "Global folder"
msgstr "Folder globalny"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global npm"
+msgstr "globalny npm"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global pnpm"
+msgstr "globalny pnpm"
+
#: src/renderer/commands/shortcutCatalog.ts
msgid "Go back in navigation history"
msgstr "Cofnij w historii nawigacji"
@@ -4751,6 +4844,10 @@ msgstr "Grupuj projekty, aby pasek boczny, harmonogramy i żądania ściągnięc
msgid "GUI chat font size"
msgstr "Rozmiar czcionki czatu GUI"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "GUI runtime"
+msgstr "Środowisko GUI"
+
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
msgid "handle"
msgstr "identyfikator"
@@ -5067,13 +5164,46 @@ msgstr "Zainstaluj {0}."
msgid "Install {env}"
msgstr "Zainstaluj {env}"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK"
+msgstr "Zainstaluj ACP + SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK in {environment}"
+msgstr "Zainstaluj ACP + SDK w {environment}"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Install ACP, SDK, or both, then choose which runtime starts new Cursor GUI chats. Existing chats stay pinned to the runtime that created them."
+msgstr "Zainstaluj ACP, SDK lub oba, a następnie wybierz środowisko uruchomieniowe dla nowych czatów interfejsu Cursor. Istniejące czaty pozostaną przypisane do środowiska, które je utworzyło."
+
#: src/renderer/components/thread/ThreadDraftComposerArea.tsx
msgid "Install CLI hooks"
msgstr "Zainstaluj haki CLI"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP)"
+msgstr "Zainstaluj Cursor Agent (ACP)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP) in {environment}"
+msgstr "Zainstaluj Cursor Agent (ACP) w {environment}"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK"
+msgstr "Zainstaluj Cursor SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK in {environment}"
+msgstr "Zainstaluj Cursor SDK w {environment}"
+
+#. placeholder {0}: target.label
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "Install in {0}"
+msgstr "Zainstaluj w {0}"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
-msgid "Install in WSL: {distro}"
-msgstr "Zainstaluj w WSL: {distro}"
+#~ msgid "Install in WSL: {distro}"
+#~ msgstr "Zainstaluj w WSL: {distro}"
#. placeholder {0}: props.targetLabel
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
@@ -5116,6 +5246,7 @@ msgid "Install v{version}"
msgstr "Zainstaluj v{version}"
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Installed"
@@ -5946,6 +6077,10 @@ msgstr "Model"
msgid "Model added to favorites"
msgstr "Model dodany do ulubionych"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Model controls"
+msgstr "Sterowanie modelem"
+
#. placeholder {0}: index + 1
#: src/renderer/components/experiment/NewExperimentModal.tsx
#~ msgid "Model for candidate {0}"
@@ -5978,6 +6113,7 @@ msgstr "Użycie modeli"
msgid "Models"
msgstr "Modele"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/ProfileSettings.tsx
msgid "Modes"
msgstr "Tryby"
@@ -6758,6 +6894,7 @@ msgstr "To nie jest repozytorium Git"
msgid "Not found"
msgstr "Nie znaleziono"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Not installed"
@@ -7450,6 +7587,7 @@ msgstr "Przypięte trasy zadań"
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/thread/ThreadTodoDock.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Plan"
msgstr "Plan"
@@ -7676,6 +7814,10 @@ msgstr "Folder projektu"
msgid "Project folder updated. Reopen any terminals in this project."
msgstr "Zaktualizowano folder projektu. Otwórz ponownie wszystkie terminale w tym projekcie."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "project managed"
+msgstr "zarządzany przez projekt"
+
#: src/renderer/views/MainView/parts/CreateProject/CreateProjectModal.tsx
#: src/renderer/views/ProjectSettingsOverlay/parts/GeneralSection.tsx
msgid "Project name"
@@ -7974,6 +8116,7 @@ msgid "Ready. Turn this on to advertise the Tailscale HTTPS URL in new pairing c
msgstr "Gotowe. Włącz to, aby ogłaszać adres HTTPS Tailscale w nowych kodach parowania."
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Reasoning"
msgstr "Rozumowanie"
@@ -8734,6 +8877,7 @@ msgstr "Opcje środowiska wykonawczego"
#: src/renderer/views/FileEditorOverlay/parts/FileEditorPane/parts/EditorToolbar.tsx
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
#: src/renderer/views/SettingsOverlay/parts/ClaudeProfileSettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/OpenCodeProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Save"
@@ -8752,6 +8896,10 @@ msgstr "Zapisz zmiany"
msgid "Save Claude profile"
msgstr "Zapisz profil Claude'a"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Save Cursor GUI runtime"
+msgstr "Zapisz środowisko GUI Cursor"
+
#: src/renderer/commands/registry.ts
msgid "Save File"
msgstr "Zapisz plik"
@@ -8844,6 +8992,30 @@ msgstr "Mnożnik prędkości przewijania dla bufora przewijania terminala."
msgid "Scroll to bottom"
msgstr "Przewiń w dół"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK"
+msgstr "SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK installed"
+msgstr "SDK zainstalowane"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK mode requires a separately installed @cursor/sdk package and CURSOR_API_KEY. It does not use the Cursor Agent CLI login."
+msgstr "Tryb SDK wymaga osobno zainstalowanego pakietu @cursor/sdk i zmiennej CURSOR_API_KEY. Nie używa logowania interfejsu CLI Cursor Agent."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK not installed"
+msgstr "SDK niezainstalowane"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path"
+msgstr "Ścieżka pakietu SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path (optional)"
+msgstr "Ścieżka pakietu SDK (opcjonalna)"
+
#: src/renderer/components/thread/ChatPane/parts/items/commandSummary.ts
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
#: src/renderer/views/MainView/parts/Sidebar/Sidebar.tsx
@@ -9314,6 +9486,7 @@ msgstr "Zaloguj się na sparowanym komputerze, a potem odśwież ten status."
#: src/renderer/components/thread/ThreadAuthRequiredDock.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Sign in required"
msgstr "Wymagane zalogowanie się"
@@ -9787,6 +9960,10 @@ msgstr "Przechowywane na tym urządzeniu; komputer zachowuje własne wartości."
#~ msgid "Stored on this phone; the desktop keeps its own values."
#~ msgstr "Przechowywane na tym telefonie; desktop zachowuje własne wartości."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Structured runtime"
+msgstr "Środowisko strukturalne"
+
#: src/mobile/views/DesktopWorkspacePanel.tsx
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/thread/ChatPane/parts/items/SubAgentOverlay.tsx
@@ -10302,6 +10479,7 @@ msgstr "Te wbudowane serwery MCP są współdzielone przez wątki OpenCode. Zapi
#: src/renderer/components/thread/ChatPane/parts/items/Reasoning.tsx
#: src/renderer/components/thread/ChatPane/parts/items/ReasoningInline.tsx
#: src/renderer/components/thread/ThreadComposer.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Thinking"
msgstr "Myślenie"
@@ -11070,6 +11248,10 @@ msgstr "Nieobsługiwane"
msgid "Up one level"
msgstr "Poziom wyżej"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "update"
+msgstr "aktualizacja"
+
#: src/renderer/components/thread/ThreadAgentUpdateDock.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Update"
@@ -11092,6 +11274,14 @@ msgstr "Zaktualizuj gałąź"
msgid "Update checks are not available in development mode."
msgstr "Sprawdzanie aktualizacji nie jest dostępne w trybie programistycznym."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK"
+msgstr "Zaktualizuj Cursor SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK in {environment}"
+msgstr "Zaktualizuj Cursor SDK w {environment}"
+
#: src/renderer/i18n/sharedMessages.ts
msgid "Update error: {detail}"
msgstr "Błąd aktualizacji: {detail}"
@@ -11104,6 +11294,10 @@ msgstr "Metoda aktualizacji"
msgid "Update Poracode on your desktop to use port forwarding."
msgstr "Zaktualizuj Poracode na komputerze, aby korzystać z przekierowywania portów."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update SDK"
+msgstr "Zaktualizuj SDK"
+
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
msgid "Update task"
msgstr "Aktualizuj zadanie"
@@ -11158,6 +11352,10 @@ msgstr "Aktualizowanie {0}"
msgid "Updating {0} ({env})"
msgstr "Aktualizowanie {0} ({env})"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "Updating in this terminal. Closes when finished."
+msgstr "Aktualizowanie w tym terminalu. Zostanie zamknięty po zakończeniu."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "URL"
msgstr "URL"
@@ -11587,6 +11785,7 @@ msgstr "Scalono zmiany zwycięzcy."
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/workspace/WorkspaceNameDialog.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Work"
msgstr "Praca"
@@ -11775,6 +11974,10 @@ msgstr "Folder bazowy WSL"
#~ msgid "WSL user"
#~ msgstr "Użytkownik WSL"
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "WSL: {distro}"
+msgstr "WSL: {distro}"
+
#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx
msgid "Your local changes are stashed and will be re-applied when you commit or abort this merge."
msgstr "Twoje lokalne zmiany są zapisane w skrytce i zostaną ponownie zastosowane po zatwierdzeniu lub przerwaniu tego scalania."
diff --git a/src/renderer/locales/pt-BR/messages.po b/src/renderer/locales/pt-BR/messages.po
index 00133eb0f..d37dcaa95 100644
--- a/src/renderer/locales/pt-BR/messages.po
+++ b/src/renderer/locales/pt-BR/messages.po
@@ -228,6 +228,11 @@ msgstr "Limite de {0}"
msgid "{0} logged out."
msgstr "{0} desconectado."
+#. placeholder {0}: runtime.capabilities.models.length
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "{0} models"
+msgstr "{0} modelos"
+
#. placeholder {0}: agent.name
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "{0} needs authentication."
@@ -553,6 +558,10 @@ msgstr "{visibleCount} de {totalCount} visíveis"
msgid "/absolute/path/to/project"
msgstr "/absolute/path/to/project"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "/path/to/node_modules/@cursor/sdk"
+msgstr "/caminho/para/node_modules/@cursor/sdk"
+
#: src/renderer/components/skills/SkillsManager.tsx
#~ msgid "/skill-creator Create a new managed skill for {destination}."
#~ msgstr "/skill-creator Crie uma nova skill gerenciada para {destination}."
@@ -653,13 +662,34 @@ msgstr "Contas"
#: src/renderer/components/thread/ThreadHeaderStatus.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "ACP"
msgstr "ACP"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP (installed Cursor Agent)"
+#~ msgstr "ACP (Cursor Agent instalado)"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "ACP Agents"
msgstr "Agentes ACP"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP installed"
+msgstr "ACP instalado"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP not installed"
+msgstr "ACP não instalado"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "ACP uses the Cursor Agent login. SDK uses @cursor/sdk with CURSOR_API_KEY."
+msgstr "O ACP usa o login do Cursor Agent. O SDK usa @cursor/sdk com CURSOR_API_KEY."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP uses the installed Cursor Agent. SDK loads an external @cursor/sdk package."
+#~ msgstr "O ACP usa o Cursor Agent instalado. O SDK carrega um pacote @cursor/sdk externo."
+
#: src/renderer/views/ProjectSettingsOverlay/parts/ActionsSection.tsx
msgid "Action command"
msgstr "Comando de ação"
@@ -743,6 +773,10 @@ msgstr "Adicione um projeto antes de instalar um agente."
msgid "Add a project before signing in."
msgstr "Adicione um projeto antes de fazer login."
+#: src/renderer/actions/agentLoginActions.ts
+msgid "Add a project before updating an agent."
+msgstr "Adicione um projeto antes de atualizar um agente."
+
#: src/renderer/views/PullRequestsView/PullRequestsView.tsx
msgid "Add a project to see pull requests."
msgstr "Adicione um projeto para ver os pull requests."
@@ -1122,6 +1156,10 @@ msgstr "Outra operação deste experimento ainda está em andamento."
msgid "Antigravity"
msgstr "Antigravity"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "API key required"
+msgstr "Chave de API necessária"
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "API_KEY=value"
msgstr "API_KEY=value"
@@ -1229,7 +1267,7 @@ msgstr "Tem certeza de que deseja reverter todas as alterações não preparadas
msgid "Arguments"
msgstr "Argumentos"
-#. placeholder {0}: agentStatus?.label ?? agentFallbackLabel
+#. placeholder {0}: effectiveAgentStatus?.label ?? agentFallbackLabel
#. placeholder {0}: project.name
#: src/renderer/components/thread/ThreadComposerSection.tsx
#: src/renderer/views/QuickComposerOverlay/QuickComposerOverlay.tsx
@@ -1375,6 +1413,10 @@ msgstr "Mostrar painel do terminal automaticamente"
msgid "Automatically show the terminal panel when running commands or creating worktrees."
msgstr "Mostrar automaticamente o painel do terminal ao executar comandos ou criar árvores de trabalho."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Autopilot"
+msgstr "Piloto automático"
+
#: src/renderer/components/skills/SkillImportModal.tsx
msgid "Availability"
msgstr "Disponibilidade"
@@ -1962,6 +2004,10 @@ msgstr "Escolher arquivo de identidade SSH"
msgid "Choose the display language for Poracode's interface."
msgstr "Escolha o idioma de exibição da interface do Poracode."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Choose the structured runtime for new Cursor GUI threads. Running threads keep their current runtime."
+#~ msgstr "Escolha o runtime estruturado para novas threads da interface do Cursor. As threads em execução mantêm o runtime atual."
+
#: src/renderer/views/MainView/parts/RightPanel/parts/BrowserPanel/parts/BrowserToolbar.tsx
msgid "Choose thread to attach to"
msgstr "Escolha o tópico ao qual anexar"
@@ -2657,6 +2703,7 @@ msgstr "Contém valores confidenciais; adicione manualmente"
#: src/mobile/ComposerInfoChips.tsx
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
#: src/renderer/components/thread/threadContextUsage.ts
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Context"
msgstr "Contexto"
@@ -3143,6 +3190,26 @@ msgstr "Sequência atual"
msgid "Cursor"
msgstr "Cursor"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Cursor GUI runtime updated."
+msgstr "Runtime da interface do Cursor atualizado."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Cursor SDK (external package)"
+#~ msgstr "Cursor SDK (pacote externo)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK is up to date."
+msgstr "O SDK do Cursor está atualizado."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK update targets"
+msgstr "Destinos de atualização do SDK do Cursor"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK updated to v{nextVersion}."
+msgstr "O SDK do Cursor foi atualizado para v{nextVersion}."
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/views/SchedulesView/ScheduleEditor.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
@@ -3155,6 +3222,10 @@ msgstr "Personalizado"
msgid "Custom commands available from the project context menu (right-click)."
msgstr "Comandos personalizados disponíveis no menu de contexto do projeto (clique com o botão direito)."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "custom path"
+msgstr "caminho personalizado"
+
#: src/renderer/commands/composerCommands.ts
msgid "Cycle permission mode"
msgstr "Alternar modo de permissão"
@@ -3196,6 +3267,7 @@ msgstr "Recusar"
msgid "DeepSeek"
msgstr "DeepSeek"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
msgid "Default"
msgstr "Padrão"
@@ -3884,6 +3956,10 @@ msgstr "Insira uma URL HTTP ou HTTPS válida."
msgid "Enter a valid SSH target and port."
msgstr "Insira um destino SSH e uma porta válidos."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Enter an absolute @cursor/sdk package path, or leave this blank for automatic discovery."
+msgstr "Informe um caminho absoluto para o pacote @cursor/sdk ou deixe este campo em branco para a detecção automática."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "Enter one MCP server configuration."
msgstr "Insira uma configuração de servidor MCP."
@@ -4200,6 +4276,7 @@ msgstr "Não foi possível atualizar o objetivo"
#: src/renderer/components/providers/modelDisplay.ts
#: src/renderer/components/thread/buildModelPickerControls.tsx
#: src/renderer/views/SettingsOverlay/parts/CrossagentRoutingSection.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Fast"
msgstr "Rápido"
@@ -4349,8 +4426,12 @@ msgid "First-class Command Code CLI integration using Poracode's native runtime.
msgstr "Integração de primeira classe da CLI Command Code usando o tempo de execução nativo do Poracode."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
-msgid "First-class Cursor Agent integration using Poracode's native runtime."
-msgstr "Integração de primeira classe do Cursor Agent usando o runtime nativo do Poracode."
+#~ msgid "First-class Cursor Agent integration using Poracode's native runtime."
+#~ msgstr "Integração de primeira classe do Cursor Agent usando o runtime nativo do Poracode."
+
+#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
+msgid "First-class Cursor integration using ACP or the public SDK runtime."
+msgstr "Integração completa com o Cursor usando ACP ou o ambiente de execução público do SDK."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
msgid "First-class Factory Droid integration using Poracode's ACP runtime."
@@ -4663,6 +4744,10 @@ msgstr "Arquivos gitignorados para copiar do projeto principal para cada nova á
msgid "GLM 5.2 (optional label)"
msgstr "GLM 5.2 (rótulo opcional)"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global"
+msgstr "global"
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/components/mcp/McpExternalImportModal.tsx
#: src/renderer/components/mcp/McpProjectDestinationDropdown.tsx
@@ -4691,6 +4776,14 @@ msgstr "Global (Windows)"
msgid "Global folder"
msgstr "Pasta global"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global npm"
+msgstr "npm global"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global pnpm"
+msgstr "pnpm global"
+
#: src/renderer/commands/shortcutCatalog.ts
msgid "Go back in navigation history"
msgstr "Voltar no histórico de navegação"
@@ -4751,6 +4844,10 @@ msgstr "Agrupe projetos para que a barra lateral, os agendamentos e os pull requ
msgid "GUI chat font size"
msgstr "Tamanho da fonte do bate-papo da GUI"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "GUI runtime"
+msgstr "Runtime da interface"
+
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
msgid "handle"
msgstr "identificador"
@@ -5067,13 +5164,46 @@ msgstr "Instale {0}."
msgid "Install {env}"
msgstr "Instalar {env}"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK"
+msgstr "Instalar ACP + SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK in {environment}"
+msgstr "Instalar ACP + SDK em {environment}"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Install ACP, SDK, or both, then choose which runtime starts new Cursor GUI chats. Existing chats stay pinned to the runtime that created them."
+msgstr "Instale o ACP, o SDK ou ambos e escolha qual ambiente de execução inicia novos chats da interface do Cursor. Os chats existentes permanecem vinculados ao ambiente que os criou."
+
#: src/renderer/components/thread/ThreadDraftComposerArea.tsx
msgid "Install CLI hooks"
msgstr "Instale ganchos CLI"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP)"
+msgstr "Instalar Cursor Agent (ACP)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP) in {environment}"
+msgstr "Instalar Cursor Agent (ACP) em {environment}"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK"
+msgstr "Instalar o SDK do Cursor"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK in {environment}"
+msgstr "Instalar o SDK do Cursor em {environment}"
+
+#. placeholder {0}: target.label
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "Install in {0}"
+msgstr "Instalar em {0}"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
-msgid "Install in WSL: {distro}"
-msgstr "Instalar no WSL: {distro}"
+#~ msgid "Install in WSL: {distro}"
+#~ msgstr "Instalar no WSL: {distro}"
#. placeholder {0}: props.targetLabel
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
@@ -5116,6 +5246,7 @@ msgid "Install v{version}"
msgstr "Instalar v{version}"
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Installed"
@@ -5946,6 +6077,10 @@ msgstr "Modelo"
msgid "Model added to favorites"
msgstr "Modelo adicionado aos favoritos"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Model controls"
+msgstr "Controles do modelo"
+
#. placeholder {0}: index + 1
#: src/renderer/components/experiment/NewExperimentModal.tsx
#~ msgid "Model for candidate {0}"
@@ -5978,6 +6113,7 @@ msgstr "Uso de modelos"
msgid "Models"
msgstr "Modelos"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/ProfileSettings.tsx
msgid "Modes"
msgstr "Modos"
@@ -6758,6 +6894,7 @@ msgstr "Não é um repositório Git"
msgid "Not found"
msgstr "Não encontrado"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Not installed"
@@ -7450,6 +7587,7 @@ msgstr "Rotas de tarefa fixadas"
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/thread/ThreadTodoDock.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Plan"
msgstr "Plano"
@@ -7676,6 +7814,10 @@ msgstr "Pasta do projeto"
msgid "Project folder updated. Reopen any terminals in this project."
msgstr "Pasta do projeto atualizada. Reabra os terminais neste projeto."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "project managed"
+msgstr "gerenciado pelo projeto"
+
#: src/renderer/views/MainView/parts/CreateProject/CreateProjectModal.tsx
#: src/renderer/views/ProjectSettingsOverlay/parts/GeneralSection.tsx
msgid "Project name"
@@ -7974,6 +8116,7 @@ msgid "Ready. Turn this on to advertise the Tailscale HTTPS URL in new pairing c
msgstr "Pronto. Ative para anunciar a URL HTTPS do Tailscale em novos códigos de pareamento."
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Reasoning"
msgstr "Raciocínio"
@@ -8734,6 +8877,7 @@ msgstr "Opções de tempo de execução"
#: src/renderer/views/FileEditorOverlay/parts/FileEditorPane/parts/EditorToolbar.tsx
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
#: src/renderer/views/SettingsOverlay/parts/ClaudeProfileSettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/OpenCodeProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Save"
@@ -8752,6 +8896,10 @@ msgstr "Salvar alterações"
msgid "Save Claude profile"
msgstr "Salvar perfil do Claude"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Save Cursor GUI runtime"
+msgstr "Salvar runtime da interface do Cursor"
+
#: src/renderer/commands/registry.ts
msgid "Save File"
msgstr "Salvar arquivo"
@@ -8844,6 +8992,30 @@ msgstr "Multiplicador de velocidade de rolagem para o buffer de rolagem do termi
msgid "Scroll to bottom"
msgstr "Rolar até o fim"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK"
+msgstr "SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK installed"
+msgstr "SDK instalado"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK mode requires a separately installed @cursor/sdk package and CURSOR_API_KEY. It does not use the Cursor Agent CLI login."
+msgstr "O modo SDK requer um pacote @cursor/sdk instalado separadamente e CURSOR_API_KEY. Ele não usa o login da CLI do Cursor Agent."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK not installed"
+msgstr "SDK não instalado"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path"
+msgstr "Caminho do pacote SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path (optional)"
+msgstr "Caminho do pacote SDK (opcional)"
+
#: src/renderer/components/thread/ChatPane/parts/items/commandSummary.ts
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
#: src/renderer/views/MainView/parts/Sidebar/Sidebar.tsx
@@ -9314,6 +9486,7 @@ msgstr "Entre no desktop pareado e depois atualize este status."
#: src/renderer/components/thread/ThreadAuthRequiredDock.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Sign in required"
msgstr "É necessário fazer login"
@@ -9787,6 +9960,10 @@ msgstr "Armazenado neste dispositivo; o desktop mantém os próprios valores."
#~ msgid "Stored on this phone; the desktop keeps its own values."
#~ msgstr "Armazenado neste telefone; o desktop mantém seus próprios valores."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Structured runtime"
+msgstr "Runtime estruturado"
+
#: src/mobile/views/DesktopWorkspacePanel.tsx
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/thread/ChatPane/parts/items/SubAgentOverlay.tsx
@@ -10302,6 +10479,7 @@ msgstr "Esses servidores MCP integrados são compartilhados entre as conversas d
#: src/renderer/components/thread/ChatPane/parts/items/Reasoning.tsx
#: src/renderer/components/thread/ChatPane/parts/items/ReasoningInline.tsx
#: src/renderer/components/thread/ThreadComposer.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Thinking"
msgstr "Pensando"
@@ -11070,6 +11248,10 @@ msgstr "Não compatível"
msgid "Up one level"
msgstr "Um nível acima"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "update"
+msgstr "atualização"
+
#: src/renderer/components/thread/ThreadAgentUpdateDock.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Update"
@@ -11092,6 +11274,14 @@ msgstr "Atualizar branch"
msgid "Update checks are not available in development mode."
msgstr "As verificações de atualização não estão disponíveis no modo de desenvolvimento."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK"
+msgstr "Atualizar o SDK do Cursor"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK in {environment}"
+msgstr "Atualizar o SDK do Cursor em {environment}"
+
#: src/renderer/i18n/sharedMessages.ts
msgid "Update error: {detail}"
msgstr "Erro de atualização: {detail}"
@@ -11104,6 +11294,10 @@ msgstr "Método de atualização"
msgid "Update Poracode on your desktop to use port forwarding."
msgstr "Atualize o Poracode no seu desktop para usar o encaminhamento de portas."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update SDK"
+msgstr "Atualizar SDK"
+
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
msgid "Update task"
msgstr "Atualizar tarefa"
@@ -11158,6 +11352,10 @@ msgstr "Atualizando {0}"
msgid "Updating {0} ({env})"
msgstr "Atualizando {0} ({env})"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "Updating in this terminal. Closes when finished."
+msgstr "Atualizando neste terminal. Ele será fechado ao terminar."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "URL"
msgstr "URL"
@@ -11587,6 +11785,7 @@ msgstr "Vencedor mesclado."
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/workspace/WorkspaceNameDialog.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Work"
msgstr "Trabalho"
@@ -11775,6 +11974,10 @@ msgstr "Pasta base do WSL"
#~ msgid "WSL user"
#~ msgstr "Usuário do WSL"
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "WSL: {distro}"
+msgstr "WSL: {distro}"
+
#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx
msgid "Your local changes are stashed and will be re-applied when you commit or abort this merge."
msgstr "Suas alterações locais estão guardadas em um stash e serão reaplicadas quando você fizer commit ou abortar esta mesclagem."
diff --git a/src/renderer/locales/ru/messages.po b/src/renderer/locales/ru/messages.po
index f23a15476..c413c7766 100644
--- a/src/renderer/locales/ru/messages.po
+++ b/src/renderer/locales/ru/messages.po
@@ -228,6 +228,11 @@ msgstr "Лимит {0}"
msgid "{0} logged out."
msgstr "{0} вышел из системы."
+#. placeholder {0}: runtime.capabilities.models.length
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "{0} models"
+msgstr "Моделей: {0}"
+
#. placeholder {0}: agent.name
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "{0} needs authentication."
@@ -553,6 +558,10 @@ msgstr "{visibleCount} из {totalCount} видимых"
msgid "/absolute/path/to/project"
msgstr "/absolute/path/to/project"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "/path/to/node_modules/@cursor/sdk"
+msgstr "/путь/к/node_modules/@cursor/sdk"
+
#: src/renderer/components/skills/SkillsManager.tsx
#~ msgid "/skill-creator Create a new managed skill for {destination}."
#~ msgstr "/skill-creator Создайте новый управляемый навык для {destination}."
@@ -653,13 +662,34 @@ msgstr "Аккаунты"
#: src/renderer/components/thread/ThreadHeaderStatus.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "ACP"
msgstr "ACP"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP (installed Cursor Agent)"
+#~ msgstr "ACP (установленный Cursor Agent)"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "ACP Agents"
msgstr "Агенты ACP"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP installed"
+msgstr "ACP установлен"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP not installed"
+msgstr "ACP не установлен"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "ACP uses the Cursor Agent login. SDK uses @cursor/sdk with CURSOR_API_KEY."
+msgstr "ACP использует вход Cursor Agent. SDK использует @cursor/sdk с CURSOR_API_KEY."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP uses the installed Cursor Agent. SDK loads an external @cursor/sdk package."
+#~ msgstr "ACP использует установленный Cursor Agent. SDK загружает внешний пакет @cursor/sdk."
+
#: src/renderer/views/ProjectSettingsOverlay/parts/ActionsSection.tsx
msgid "Action command"
msgstr "Команда действия"
@@ -743,6 +773,10 @@ msgstr "Добавьте проект перед установкой агент
msgid "Add a project before signing in."
msgstr "Добавьте проект перед входом."
+#: src/renderer/actions/agentLoginActions.ts
+msgid "Add a project before updating an agent."
+msgstr "Добавьте проект перед обновлением агента."
+
#: src/renderer/views/PullRequestsView/PullRequestsView.tsx
msgid "Add a project to see pull requests."
msgstr "Добавьте проект, чтобы увидеть pull request."
@@ -1122,6 +1156,10 @@ msgstr "Другая операция для этого эксперимента
msgid "Antigravity"
msgstr "Antigravity"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "API key required"
+msgstr "Требуется ключ API"
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "API_KEY=value"
msgstr "API_KEY=value"
@@ -1229,7 +1267,7 @@ msgstr "Вы уверены, что хотите откатить все неп
msgid "Arguments"
msgstr "Аргументы"
-#. placeholder {0}: agentStatus?.label ?? agentFallbackLabel
+#. placeholder {0}: effectiveAgentStatus?.label ?? agentFallbackLabel
#. placeholder {0}: project.name
#: src/renderer/components/thread/ThreadComposerSection.tsx
#: src/renderer/views/QuickComposerOverlay/QuickComposerOverlay.tsx
@@ -1375,6 +1413,10 @@ msgstr "Автопоказ панели терминала"
msgid "Automatically show the terminal panel when running commands or creating worktrees."
msgstr "Автоматически показывать панель терминала при выполнении команд или создании рабочих деревьев."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Autopilot"
+msgstr "Автопилот"
+
#: src/renderer/components/skills/SkillImportModal.tsx
msgid "Availability"
msgstr "Доступность"
@@ -1962,6 +2004,10 @@ msgstr "Выбрать файл идентификации SSH"
msgid "Choose the display language for Poracode's interface."
msgstr "Выберите язык интерфейса Poracode."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Choose the structured runtime for new Cursor GUI threads. Running threads keep their current runtime."
+#~ msgstr "Выберите структурированную среду выполнения для новых GUI-потоков Cursor. Запущенные потоки сохранят текущую среду."
+
#: src/renderer/views/MainView/parts/RightPanel/parts/BrowserPanel/parts/BrowserToolbar.tsx
msgid "Choose thread to attach to"
msgstr "Выберите тред для прикрепления"
@@ -2657,6 +2703,7 @@ msgstr "Содержит конфиденциальные значения; до
#: src/mobile/ComposerInfoChips.tsx
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
#: src/renderer/components/thread/threadContextUsage.ts
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Context"
msgstr "Контекст"
@@ -3143,6 +3190,26 @@ msgstr "Текущая серия"
msgid "Cursor"
msgstr "Cursor"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Cursor GUI runtime updated."
+msgstr "Среда выполнения GUI Cursor обновлена."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Cursor SDK (external package)"
+#~ msgstr "Cursor SDK (внешний пакет)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK is up to date."
+msgstr "Cursor SDK обновлён до последней версии."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK update targets"
+msgstr "Цели обновления Cursor SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK updated to v{nextVersion}."
+msgstr "Cursor SDK обновлён до v{nextVersion}."
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/views/SchedulesView/ScheduleEditor.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
@@ -3155,6 +3222,10 @@ msgstr "Пользовательский"
msgid "Custom commands available from the project context menu (right-click)."
msgstr "Пользовательские команды доступны из контекстного меню проекта (правый клик)."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "custom path"
+msgstr "пользовательский путь"
+
#: src/renderer/commands/composerCommands.ts
msgid "Cycle permission mode"
msgstr "Переключить режим разрешений"
@@ -3196,6 +3267,7 @@ msgstr "Отклонить"
msgid "DeepSeek"
msgstr "DeepSeek"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
msgid "Default"
msgstr "По умолчанию"
@@ -3884,6 +3956,10 @@ msgstr "Введите допустимый URL-адрес с протоколо
msgid "Enter a valid SSH target and port."
msgstr "Введите допустимый SSH-адрес и порт."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Enter an absolute @cursor/sdk package path, or leave this blank for automatic discovery."
+msgstr "Введите абсолютный путь к пакету @cursor/sdk или оставьте поле пустым для автоматического обнаружения."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "Enter one MCP server configuration."
msgstr "Введите конфигурацию одного сервера MCP."
@@ -4200,6 +4276,7 @@ msgstr "Не удалось обновить цель"
#: src/renderer/components/providers/modelDisplay.ts
#: src/renderer/components/thread/buildModelPickerControls.tsx
#: src/renderer/views/SettingsOverlay/parts/CrossagentRoutingSection.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Fast"
msgstr "Быстрый"
@@ -4349,8 +4426,12 @@ msgid "First-class Command Code CLI integration using Poracode's native runtime.
msgstr "Первоклассная интеграция Command Code CLI с использованием нативной среды выполнения Poracode."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
-msgid "First-class Cursor Agent integration using Poracode's native runtime."
-msgstr "Первоклассная интеграция Cursor Agent с использованием нативной среды выполнения Poracode."
+#~ msgid "First-class Cursor Agent integration using Poracode's native runtime."
+#~ msgstr "Первоклассная интеграция Cursor Agent с использованием нативной среды выполнения Poracode."
+
+#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
+msgid "First-class Cursor integration using ACP or the public SDK runtime."
+msgstr "Полноценная интеграция Cursor через ACP или общедоступную среду выполнения SDK."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
msgid "First-class Factory Droid integration using Poracode's ACP runtime."
@@ -4663,6 +4744,10 @@ msgstr "Игнорируемые Git файлы для копирования и
msgid "GLM 5.2 (optional label)"
msgstr "GLM 5.2 (необязательная метка)"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global"
+msgstr "глобально"
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/components/mcp/McpExternalImportModal.tsx
#: src/renderer/components/mcp/McpProjectDestinationDropdown.tsx
@@ -4691,6 +4776,14 @@ msgstr "Глобальные (Windows)"
msgid "Global folder"
msgstr "Глобальная папка"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global npm"
+msgstr "глобальный npm"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global pnpm"
+msgstr "глобальный pnpm"
+
#: src/renderer/commands/shortcutCatalog.ts
msgid "Go back in navigation history"
msgstr "Назад по истории навигации"
@@ -4751,6 +4844,10 @@ msgstr "Группируйте проекты, чтобы боковая пан
msgid "GUI chat font size"
msgstr "Размер шрифта чата в GUI"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "GUI runtime"
+msgstr "Среда выполнения GUI"
+
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
msgid "handle"
msgstr "никнейм"
@@ -5067,13 +5164,46 @@ msgstr "Установить {0}."
msgid "Install {env}"
msgstr "Установить {env}"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK"
+msgstr "Установить ACP + SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK in {environment}"
+msgstr "Установить ACP + SDK в {environment}"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Install ACP, SDK, or both, then choose which runtime starts new Cursor GUI chats. Existing chats stay pinned to the runtime that created them."
+msgstr "Установите ACP, SDK или оба варианта, затем выберите среду выполнения для новых чатов Cursor с графическим интерфейсом. Существующие чаты останутся привязаны к создавшей их среде."
+
#: src/renderer/components/thread/ThreadDraftComposerArea.tsx
msgid "Install CLI hooks"
msgstr "Установить хуки CLI"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP)"
+msgstr "Установить Cursor Agent (ACP)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP) in {environment}"
+msgstr "Установить Cursor Agent (ACP) в {environment}"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK"
+msgstr "Установить Cursor SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK in {environment}"
+msgstr "Установить Cursor SDK в {environment}"
+
+#. placeholder {0}: target.label
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "Install in {0}"
+msgstr "Установить в {0}"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
-msgid "Install in WSL: {distro}"
-msgstr "Установить в WSL: {distro}"
+#~ msgid "Install in WSL: {distro}"
+#~ msgstr "Установить в WSL: {distro}"
#. placeholder {0}: props.targetLabel
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
@@ -5116,6 +5246,7 @@ msgid "Install v{version}"
msgstr "Установить v{version}"
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Installed"
@@ -5946,6 +6077,10 @@ msgstr "Модель"
msgid "Model added to favorites"
msgstr "Модель добавлена в избранное"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Model controls"
+msgstr "Параметры модели"
+
#. placeholder {0}: index + 1
#: src/renderer/components/experiment/NewExperimentModal.tsx
#~ msgid "Model for candidate {0}"
@@ -5978,6 +6113,7 @@ msgstr "Использование моделей"
msgid "Models"
msgstr "Модели"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/ProfileSettings.tsx
msgid "Modes"
msgstr "Режимы"
@@ -6758,6 +6894,7 @@ msgstr "Не репозиторий Git"
msgid "Not found"
msgstr "Не найдено"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Not installed"
@@ -7450,6 +7587,7 @@ msgstr "Закреплённые маршруты задач"
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/thread/ThreadTodoDock.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Plan"
msgstr "План"
@@ -7676,6 +7814,10 @@ msgstr "Папка проекта"
msgid "Project folder updated. Reopen any terminals in this project."
msgstr "Папка проекта обновлена. Откройте заново все терминалы в этом проекте."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "project managed"
+msgstr "управляется проектом"
+
#: src/renderer/views/MainView/parts/CreateProject/CreateProjectModal.tsx
#: src/renderer/views/ProjectSettingsOverlay/parts/GeneralSection.tsx
msgid "Project name"
@@ -7974,6 +8116,7 @@ msgid "Ready. Turn this on to advertise the Tailscale HTTPS URL in new pairing c
msgstr "Готово. Включите, чтобы объявлять HTTPS-URL Tailscale в новых кодах сопряжения."
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Reasoning"
msgstr "Рассуждения"
@@ -8734,6 +8877,7 @@ msgstr "Параметры среды выполнения"
#: src/renderer/views/FileEditorOverlay/parts/FileEditorPane/parts/EditorToolbar.tsx
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
#: src/renderer/views/SettingsOverlay/parts/ClaudeProfileSettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/OpenCodeProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Save"
@@ -8752,6 +8896,10 @@ msgstr "Сохранить изменения"
msgid "Save Claude profile"
msgstr "Сохранить профиль Claude"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Save Cursor GUI runtime"
+msgstr "Сохранить среду выполнения GUI Cursor"
+
#: src/renderer/commands/registry.ts
msgid "Save File"
msgstr "Сохранить файл"
@@ -8844,6 +8992,30 @@ msgstr "Множитель скорости прокрутки для буфер
msgid "Scroll to bottom"
msgstr "Прокрутить вниз"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK"
+msgstr "SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK installed"
+msgstr "SDK установлен"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK mode requires a separately installed @cursor/sdk package and CURSOR_API_KEY. It does not use the Cursor Agent CLI login."
+msgstr "Для режима SDK требуется отдельно установленный пакет @cursor/sdk и CURSOR_API_KEY. Вход через CLI Cursor Agent не используется."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK not installed"
+msgstr "SDK не установлен"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path"
+msgstr "Путь к пакету SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path (optional)"
+msgstr "Путь к пакету SDK (необязательно)"
+
#: src/renderer/components/thread/ChatPane/parts/items/commandSummary.ts
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
#: src/renderer/views/MainView/parts/Sidebar/Sidebar.tsx
@@ -9314,6 +9486,7 @@ msgstr "Войдите на сопряжённом рабочем столе, з
#: src/renderer/components/thread/ThreadAuthRequiredDock.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Sign in required"
msgstr "Требуется вход"
@@ -9787,6 +9960,10 @@ msgstr "Сохраняется на этом устройстве; на комп
#~ msgid "Stored on this phone; the desktop keeps its own values."
#~ msgstr "Хранится на этом телефоне; на десктопе остаются собственные значения."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Structured runtime"
+msgstr "Структурированная среда выполнения"
+
#: src/mobile/views/DesktopWorkspacePanel.tsx
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/thread/ChatPane/parts/items/SubAgentOverlay.tsx
@@ -10302,6 +10479,7 @@ msgstr "Эти встроенные серверы MCP используются
#: src/renderer/components/thread/ChatPane/parts/items/Reasoning.tsx
#: src/renderer/components/thread/ChatPane/parts/items/ReasoningInline.tsx
#: src/renderer/components/thread/ThreadComposer.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Thinking"
msgstr "Размышление"
@@ -11070,6 +11248,10 @@ msgstr "Не поддерживается"
msgid "Up one level"
msgstr "На уровень вверх"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "update"
+msgstr "обновление"
+
#: src/renderer/components/thread/ThreadAgentUpdateDock.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Update"
@@ -11092,6 +11274,14 @@ msgstr "Обновить ветку"
msgid "Update checks are not available in development mode."
msgstr "Проверка обновлений недоступна в режиме разработки."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK"
+msgstr "Обновить Cursor SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK in {environment}"
+msgstr "Обновить Cursor SDK в {environment}"
+
#: src/renderer/i18n/sharedMessages.ts
msgid "Update error: {detail}"
msgstr "Ошибка обновления: {detail}"
@@ -11104,6 +11294,10 @@ msgstr "Способ обновления"
msgid "Update Poracode on your desktop to use port forwarding."
msgstr "Обновите Poracode на десктопе, чтобы использовать перенаправление портов."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update SDK"
+msgstr "Обновить SDK"
+
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
msgid "Update task"
msgstr "Обновить задачу"
@@ -11158,6 +11352,10 @@ msgstr "Обновление {0}"
msgid "Updating {0} ({env})"
msgstr "Обновление {0} ({env})"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "Updating in this terminal. Closes when finished."
+msgstr "Обновление выполняется в этом терминале. Он закроется после завершения."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "URL"
msgstr "URL"
@@ -11587,6 +11785,7 @@ msgstr "Изменения победителя слиты."
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/workspace/WorkspaceNameDialog.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Work"
msgstr "Работа"
@@ -11775,6 +11974,10 @@ msgstr "Базовая папка WSL"
#~ msgid "WSL user"
#~ msgstr "Пользователь WSL"
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "WSL: {distro}"
+msgstr "WSL: {distro}"
+
#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx
msgid "Your local changes are stashed and will be re-applied when you commit or abort this merge."
msgstr "Ваши локальные изменения сохранены в stash и будут применены повторно, когда вы закоммитите или прервёте это слияние."
diff --git a/src/renderer/locales/tr/messages.po b/src/renderer/locales/tr/messages.po
index 266361ca5..55f69124b 100644
--- a/src/renderer/locales/tr/messages.po
+++ b/src/renderer/locales/tr/messages.po
@@ -228,6 +228,11 @@ msgstr "{0} sınırı"
msgid "{0} logged out."
msgstr "{0} oturumu kapatıldı."
+#. placeholder {0}: runtime.capabilities.models.length
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "{0} models"
+msgstr "{0} model"
+
#. placeholder {0}: agent.name
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "{0} needs authentication."
@@ -553,6 +558,10 @@ msgstr "{totalCount} öğeden {visibleCount} tanesi görünür"
msgid "/absolute/path/to/project"
msgstr "/absolute/path/to/project"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "/path/to/node_modules/@cursor/sdk"
+msgstr "/yol/node_modules/@cursor/sdk"
+
#: src/renderer/components/skills/SkillsManager.tsx
#~ msgid "/skill-creator Create a new managed skill for {destination}."
#~ msgstr "/skill-creator {destination} için yeni bir yönetilen beceri oluştur."
@@ -653,13 +662,34 @@ msgstr "Hesaplar"
#: src/renderer/components/thread/ThreadHeaderStatus.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "ACP"
msgstr "ACP"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP (installed Cursor Agent)"
+#~ msgstr "ACP (yüklü Cursor Agent)"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "ACP Agents"
msgstr "ACP Temsilcileri"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP installed"
+msgstr "ACP yüklü"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP not installed"
+msgstr "ACP yüklü değil"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "ACP uses the Cursor Agent login. SDK uses @cursor/sdk with CURSOR_API_KEY."
+msgstr "ACP, Cursor Agent oturumunu kullanır. SDK, CURSOR_API_KEY ile @cursor/sdk kullanır."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP uses the installed Cursor Agent. SDK loads an external @cursor/sdk package."
+#~ msgstr "ACP, yüklü Cursor Agent'ı kullanır. SDK, harici bir @cursor/sdk paketi yükler."
+
#: src/renderer/views/ProjectSettingsOverlay/parts/ActionsSection.tsx
msgid "Action command"
msgstr "Eylem komutu"
@@ -743,6 +773,10 @@ msgstr "Bir aracıyı yüklemeden önce bir proje ekleyin."
msgid "Add a project before signing in."
msgstr "Oturum açmadan önce bir proje ekleyin."
+#: src/renderer/actions/agentLoginActions.ts
+msgid "Add a project before updating an agent."
+msgstr "Bir aracıyı güncellemeden önce proje ekleyin."
+
#: src/renderer/views/PullRequestsView/PullRequestsView.tsx
msgid "Add a project to see pull requests."
msgstr "Çekme isteklerini görmek için bir proje ekleyin."
@@ -1122,6 +1156,10 @@ msgstr "Bu deney için başka bir işlem hâlâ devam ediyor."
msgid "Antigravity"
msgstr "Antigravity"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "API key required"
+msgstr "API anahtarı gerekli"
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "API_KEY=value"
msgstr "API_KEY=value"
@@ -1229,7 +1267,7 @@ msgstr "Aşamalandırılmamış tüm değişiklikleri geri almak istediğinizden
msgid "Arguments"
msgstr "Bağımsız değişkenler"
-#. placeholder {0}: agentStatus?.label ?? agentFallbackLabel
+#. placeholder {0}: effectiveAgentStatus?.label ?? agentFallbackLabel
#. placeholder {0}: project.name
#: src/renderer/components/thread/ThreadComposerSection.tsx
#: src/renderer/views/QuickComposerOverlay/QuickComposerOverlay.tsx
@@ -1375,6 +1413,10 @@ msgstr "Terminal panelini otomatik göster"
msgid "Automatically show the terminal panel when running commands or creating worktrees."
msgstr "Komutları çalıştırırken veya çalışma ağaçları oluştururken terminal panelini otomatik olarak gösterin."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Autopilot"
+msgstr "Otomatik pilot"
+
#: src/renderer/components/skills/SkillImportModal.tsx
msgid "Availability"
msgstr "Kullanılabilirlik"
@@ -1962,6 +2004,10 @@ msgstr "SSH kimlik dosyasını seç"
msgid "Choose the display language for Poracode's interface."
msgstr "Poracode'un arayüzü için görüntüleme dilini seçin."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Choose the structured runtime for new Cursor GUI threads. Running threads keep their current runtime."
+#~ msgstr "Yeni Cursor GUI iş parçacıkları için yapılandırılmış çalışma zamanını seçin. Çalışan iş parçacıkları mevcut çalışma zamanını korur."
+
#: src/renderer/views/MainView/parts/RightPanel/parts/BrowserPanel/parts/BrowserToolbar.tsx
msgid "Choose thread to attach to"
msgstr "Eklenecek konuyu seçin"
@@ -2657,6 +2703,7 @@ msgstr "Hassas değerler içeriyor; elle ekleyin"
#: src/mobile/ComposerInfoChips.tsx
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
#: src/renderer/components/thread/threadContextUsage.ts
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Context"
msgstr "Bağlam"
@@ -3143,6 +3190,26 @@ msgstr "Güncel seri"
msgid "Cursor"
msgstr "Cursor"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Cursor GUI runtime updated."
+msgstr "Cursor GUI çalışma zamanı güncellendi."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Cursor SDK (external package)"
+#~ msgstr "Cursor SDK (harici paket)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK is up to date."
+msgstr "Cursor SDK güncel."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK update targets"
+msgstr "Cursor SDK güncelleme hedefleri"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK updated to v{nextVersion}."
+msgstr "Cursor SDK v{nextVersion} sürümüne güncellendi."
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/views/SchedulesView/ScheduleEditor.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
@@ -3155,6 +3222,10 @@ msgstr "Özel"
msgid "Custom commands available from the project context menu (right-click)."
msgstr "Proje içerik menüsünden erişilebilen özel komutlar (sağ tıklama)."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "custom path"
+msgstr "özel yol"
+
#: src/renderer/commands/composerCommands.ts
msgid "Cycle permission mode"
msgstr "İzin modunu değiştir"
@@ -3196,6 +3267,7 @@ msgstr "Reddet"
msgid "DeepSeek"
msgstr "DeepSeek"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
msgid "Default"
msgstr "Varsayılan"
@@ -3884,6 +3956,10 @@ msgstr "Geçerli bir HTTP veya HTTPS URL'si girin."
msgid "Enter a valid SSH target and port."
msgstr "Geçerli bir SSH hedefi ve bağlantı noktası girin."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Enter an absolute @cursor/sdk package path, or leave this blank for automatic discovery."
+msgstr "@cursor/sdk paketi için mutlak bir yol girin veya otomatik keşif için bu alanı boş bırakın."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "Enter one MCP server configuration."
msgstr "Bir MCP sunucusu yapılandırması girin."
@@ -4200,6 +4276,7 @@ msgstr "Hedef güncellenemedi"
#: src/renderer/components/providers/modelDisplay.ts
#: src/renderer/components/thread/buildModelPickerControls.tsx
#: src/renderer/views/SettingsOverlay/parts/CrossagentRoutingSection.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Fast"
msgstr "Hızlı"
@@ -4349,8 +4426,12 @@ msgid "First-class Command Code CLI integration using Poracode's native runtime.
msgstr "Poracode'un yerel çalışma zamanını kullanan birinci sınıf Command Code CLI entegrasyonu."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
-msgid "First-class Cursor Agent integration using Poracode's native runtime."
-msgstr "Poracode'un yerel çalışma zamanını kullanan birinci sınıf Cursor Agent entegrasyonu."
+#~ msgid "First-class Cursor Agent integration using Poracode's native runtime."
+#~ msgstr "Poracode'un yerel çalışma zamanını kullanan birinci sınıf Cursor Agent entegrasyonu."
+
+#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
+msgid "First-class Cursor integration using ACP or the public SDK runtime."
+msgstr "ACP veya genel SDK çalışma zamanını kullanan birinci sınıf Cursor entegrasyonu."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
msgid "First-class Factory Droid integration using Poracode's ACP runtime."
@@ -4663,6 +4744,10 @@ msgstr "Ana projeden her yeni çalışma ağacına kopyalanacak Git yok sayılan
msgid "GLM 5.2 (optional label)"
msgstr "GLM 5.2 (isteğe bağlı etiket)"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global"
+msgstr "genel"
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/components/mcp/McpExternalImportModal.tsx
#: src/renderer/components/mcp/McpProjectDestinationDropdown.tsx
@@ -4691,6 +4776,14 @@ msgstr "Genel (Windows)"
msgid "Global folder"
msgstr "Genel klasör"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global npm"
+msgstr "genel npm"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global pnpm"
+msgstr "genel pnpm"
+
#: src/renderer/commands/shortcutCatalog.ts
msgid "Go back in navigation history"
msgstr "Gezinme geçmişinde geri git"
@@ -4751,6 +4844,10 @@ msgstr "Projeleri gruplayın; böylece kenar çubuğu, zamanlamalar ve çekme is
msgid "GUI chat font size"
msgstr "GUI sohbet yazı tipi boyutu"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "GUI runtime"
+msgstr "GUI çalışma zamanı"
+
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
msgid "handle"
msgstr "kullanıcı adı"
@@ -5067,13 +5164,46 @@ msgstr "{0} yükleyin."
msgid "Install {env}"
msgstr "{env}'i yükleyin"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK"
+msgstr "ACP + SDK'yı yükle"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK in {environment}"
+msgstr "ACP + SDK'yı {environment} ortamına yükle"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Install ACP, SDK, or both, then choose which runtime starts new Cursor GUI chats. Existing chats stay pinned to the runtime that created them."
+msgstr "ACP'yi, SDK'yı veya her ikisini yükleyin, ardından yeni Cursor GUI sohbetlerini hangi çalışma zamanının başlatacağını seçin. Mevcut sohbetler, onları oluşturan çalışma zamanına bağlı kalır."
+
#: src/renderer/components/thread/ThreadDraftComposerArea.tsx
msgid "Install CLI hooks"
msgstr "CLI kancalarını yükle"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP)"
+msgstr "Cursor Agent'ı (ACP) yükle"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP) in {environment}"
+msgstr "Cursor Agent'ı (ACP) {environment} ortamına yükle"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK"
+msgstr "Cursor SDK'yı yükle"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK in {environment}"
+msgstr "Cursor SDK'yı {environment} ortamına yükle"
+
+#. placeholder {0}: target.label
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "Install in {0}"
+msgstr "{0} ortamına yükle"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
-msgid "Install in WSL: {distro}"
-msgstr "WSL'ye yükleyin: {distro}"
+#~ msgid "Install in WSL: {distro}"
+#~ msgstr "WSL'ye yükleyin: {distro}"
#. placeholder {0}: props.targetLabel
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
@@ -5116,6 +5246,7 @@ msgid "Install v{version}"
msgstr "v{version} sürümünü yükle"
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Installed"
@@ -5946,6 +6077,10 @@ msgstr "Model"
msgid "Model added to favorites"
msgstr "Model favorilere eklendi"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Model controls"
+msgstr "Model denetimleri"
+
#. placeholder {0}: index + 1
#: src/renderer/components/experiment/NewExperimentModal.tsx
#~ msgid "Model for candidate {0}"
@@ -5978,6 +6113,7 @@ msgstr "Model kullanımı"
msgid "Models"
msgstr "Modeller"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/ProfileSettings.tsx
msgid "Modes"
msgstr "Modlar"
@@ -6758,6 +6894,7 @@ msgstr "Git deposu değil"
msgid "Not found"
msgstr "Bulunamadı"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Not installed"
@@ -7450,6 +7587,7 @@ msgstr "Sabitlenmiş görev rotaları"
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/thread/ThreadTodoDock.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Plan"
msgstr "Plan"
@@ -7676,6 +7814,10 @@ msgstr "Proje klasörü"
msgid "Project folder updated. Reopen any terminals in this project."
msgstr "Proje klasörü güncellendi. Bu projedeki terminalleri yeniden açın."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "project managed"
+msgstr "proje tarafından yönetiliyor"
+
#: src/renderer/views/MainView/parts/CreateProject/CreateProjectModal.tsx
#: src/renderer/views/ProjectSettingsOverlay/parts/GeneralSection.tsx
msgid "Project name"
@@ -7974,6 +8116,7 @@ msgid "Ready. Turn this on to advertise the Tailscale HTTPS URL in new pairing c
msgstr "Hazır. Yeni eşleştirme kodlarında Tailscale HTTPS URL'sini duyurmak için bunu açın."
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Reasoning"
msgstr "Akıl yürütme"
@@ -8734,6 +8877,7 @@ msgstr "Çalışma zamanı seçenekleri"
#: src/renderer/views/FileEditorOverlay/parts/FileEditorPane/parts/EditorToolbar.tsx
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
#: src/renderer/views/SettingsOverlay/parts/ClaudeProfileSettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/OpenCodeProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Save"
@@ -8752,6 +8896,10 @@ msgstr "Değişiklikleri kaydet"
msgid "Save Claude profile"
msgstr "Claude profilini kaydet"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Save Cursor GUI runtime"
+msgstr "Cursor GUI çalışma zamanını kaydet"
+
#: src/renderer/commands/registry.ts
msgid "Save File"
msgstr "Dosyayı Kaydet"
@@ -8844,6 +8992,30 @@ msgstr "Terminal geri kaydırma arabelleği için kaydırma hızı çarpanı."
msgid "Scroll to bottom"
msgstr "Aşağıya doğru kaydır"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK"
+msgstr "SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK installed"
+msgstr "SDK yüklü"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK mode requires a separately installed @cursor/sdk package and CURSOR_API_KEY. It does not use the Cursor Agent CLI login."
+msgstr "SDK modu, ayrı olarak yüklenmiş bir @cursor/sdk paketi ve CURSOR_API_KEY gerektirir. Cursor Agent CLI oturumunu kullanmaz."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK not installed"
+msgstr "SDK yüklü değil"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path"
+msgstr "SDK paket yolu"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path (optional)"
+msgstr "SDK paket yolu (isteğe bağlı)"
+
#: src/renderer/components/thread/ChatPane/parts/items/commandSummary.ts
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
#: src/renderer/views/MainView/parts/Sidebar/Sidebar.tsx
@@ -9314,6 +9486,7 @@ msgstr "Eşleştirilmiş masaüstünde oturum açın, ardından bu durumu yenile
#: src/renderer/components/thread/ThreadAuthRequiredDock.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Sign in required"
msgstr "Oturum açmanız gerekiyor"
@@ -9787,6 +9960,10 @@ msgstr "Bu cihazda saklanır; masaüstü kendi değerlerini korur."
#~ msgid "Stored on this phone; the desktop keeps its own values."
#~ msgstr "Bu telefonda saklanır; masaüstü kendi değerlerini korur."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Structured runtime"
+msgstr "Yapılandırılmış çalışma zamanı"
+
#: src/mobile/views/DesktopWorkspacePanel.tsx
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/thread/ChatPane/parts/items/SubAgentOverlay.tsx
@@ -10302,6 +10479,7 @@ msgstr "Bu yerleşik MCP sunucuları OpenCode konuları arasında paylaşılır.
#: src/renderer/components/thread/ChatPane/parts/items/Reasoning.tsx
#: src/renderer/components/thread/ChatPane/parts/items/ReasoningInline.tsx
#: src/renderer/components/thread/ThreadComposer.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Thinking"
msgstr "Düşünme"
@@ -11070,6 +11248,10 @@ msgstr "Desteklenmiyor"
msgid "Up one level"
msgstr "Bir seviye yukarı"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "update"
+msgstr "güncelleme"
+
#: src/renderer/components/thread/ThreadAgentUpdateDock.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Update"
@@ -11092,6 +11274,14 @@ msgstr "Şubeyi güncelle"
msgid "Update checks are not available in development mode."
msgstr "Geliştirme modunda güncelleme denetimi kullanılamaz."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK"
+msgstr "Cursor SDK'yı güncelle"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK in {environment}"
+msgstr "{environment} ortamındaki Cursor SDK'yı güncelle"
+
#: src/renderer/i18n/sharedMessages.ts
msgid "Update error: {detail}"
msgstr "Güncelleme hatası: {detail}"
@@ -11104,6 +11294,10 @@ msgstr "Güncelleme yöntemi"
msgid "Update Poracode on your desktop to use port forwarding."
msgstr "Port yönlendirmeyi kullanmak için masaüstünüzdeki Poracode'u güncelleyin."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update SDK"
+msgstr "SDK'yı güncelle"
+
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
msgid "Update task"
msgstr "Görevi güncelle"
@@ -11158,6 +11352,10 @@ msgstr "{0} güncelleniyor"
msgid "Updating {0} ({env})"
msgstr "{0} ({env}) güncelleniyor"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "Updating in this terminal. Closes when finished."
+msgstr "Bu terminalde güncelleniyor. Tamamlandığında kapanır."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "URL"
msgstr "URL"
@@ -11587,6 +11785,7 @@ msgstr "Kazanan birleştirildi."
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/workspace/WorkspaceNameDialog.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Work"
msgstr "İş"
@@ -11775,6 +11974,10 @@ msgstr "WSL temel klasörü"
#~ msgid "WSL user"
#~ msgstr "WSL kullanıcısı"
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "WSL: {distro}"
+msgstr "WSL: {distro}"
+
#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx
msgid "Your local changes are stashed and will be re-applied when you commit or abort this merge."
msgstr "Yerel değişiklikleriniz zulada (stash) ve bu birleştirmeyi işlediğinizde veya iptal ettiğinizde yeniden uygulanacaktır."
diff --git a/src/renderer/locales/uk/messages.po b/src/renderer/locales/uk/messages.po
index 816e71700..ce654ec02 100644
--- a/src/renderer/locales/uk/messages.po
+++ b/src/renderer/locales/uk/messages.po
@@ -228,6 +228,11 @@ msgstr "Ліміт {0}"
msgid "{0} logged out."
msgstr "{0} вийшов із системи."
+#. placeholder {0}: runtime.capabilities.models.length
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "{0} models"
+msgstr "Моделей: {0}"
+
#. placeholder {0}: agent.name
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "{0} needs authentication."
@@ -553,6 +558,10 @@ msgstr "{visibleCount} із {totalCount} видимих"
msgid "/absolute/path/to/project"
msgstr "/absolute/path/to/project"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "/path/to/node_modules/@cursor/sdk"
+msgstr "/шлях/до/node_modules/@cursor/sdk"
+
#: src/renderer/components/skills/SkillsManager.tsx
#~ msgid "/skill-creator Create a new managed skill for {destination}."
#~ msgstr "/skill-creator Створіть нову керовану навичку для {destination}."
@@ -653,13 +662,34 @@ msgstr "Облікові записи"
#: src/renderer/components/thread/ThreadHeaderStatus.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "ACP"
msgstr "ACP"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP (installed Cursor Agent)"
+#~ msgstr "ACP (установлений Cursor Agent)"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "ACP Agents"
msgstr "Агенти ACP"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP installed"
+msgstr "ACP установлено"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP not installed"
+msgstr "ACP не встановлено"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "ACP uses the Cursor Agent login. SDK uses @cursor/sdk with CURSOR_API_KEY."
+msgstr "ACP використовує вхід Cursor Agent. SDK використовує @cursor/sdk із CURSOR_API_KEY."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP uses the installed Cursor Agent. SDK loads an external @cursor/sdk package."
+#~ msgstr "ACP використовує встановлений Cursor Agent. SDK завантажує зовнішній пакет @cursor/sdk."
+
#: src/renderer/views/ProjectSettingsOverlay/parts/ActionsSection.tsx
msgid "Action command"
msgstr "Команда дії"
@@ -743,6 +773,10 @@ msgstr "Додайте проєкт перед встановленням аге
msgid "Add a project before signing in."
msgstr "Додайте проєкт перед входом."
+#: src/renderer/actions/agentLoginActions.ts
+msgid "Add a project before updating an agent."
+msgstr "Додайте проєкт перед оновленням агента."
+
#: src/renderer/views/PullRequestsView/PullRequestsView.tsx
msgid "Add a project to see pull requests."
msgstr "Додайте проєкт, щоб переглянути pull request."
@@ -1122,6 +1156,10 @@ msgstr "Інша операція для цього експерименту щ
msgid "Antigravity"
msgstr "Antigravity"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "API key required"
+msgstr "Потрібен ключ API"
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "API_KEY=value"
msgstr "API_KEY=value"
@@ -1229,7 +1267,7 @@ msgstr "Ви впевнені, що хочете відкотити всі не
msgid "Arguments"
msgstr "Аргументи"
-#. placeholder {0}: agentStatus?.label ?? agentFallbackLabel
+#. placeholder {0}: effectiveAgentStatus?.label ?? agentFallbackLabel
#. placeholder {0}: project.name
#: src/renderer/components/thread/ThreadComposerSection.tsx
#: src/renderer/views/QuickComposerOverlay/QuickComposerOverlay.tsx
@@ -1375,6 +1413,10 @@ msgstr "Автоматично показувати панель терміна
msgid "Automatically show the terminal panel when running commands or creating worktrees."
msgstr "Автоматично показувати панель термінала під час виконання команд або створення робочих дерев."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Autopilot"
+msgstr "Автопілот"
+
#: src/renderer/components/skills/SkillImportModal.tsx
msgid "Availability"
msgstr "Доступність"
@@ -1962,6 +2004,10 @@ msgstr "Вибрати файл ідентифікації SSH"
msgid "Choose the display language for Poracode's interface."
msgstr "Виберіть мову відображення інтерфейсу Poracode."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Choose the structured runtime for new Cursor GUI threads. Running threads keep their current runtime."
+#~ msgstr "Виберіть структуроване середовище виконання для нових GUI-потоків Cursor. Запущені потоки збережуть поточне середовище."
+
#: src/renderer/views/MainView/parts/RightPanel/parts/BrowserPanel/parts/BrowserToolbar.tsx
msgid "Choose thread to attach to"
msgstr "Виберіть тред для прикріплення"
@@ -2657,6 +2703,7 @@ msgstr "Містить конфіденційні значення; додайт
#: src/mobile/ComposerInfoChips.tsx
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
#: src/renderer/components/thread/threadContextUsage.ts
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Context"
msgstr "Контекст"
@@ -3143,6 +3190,26 @@ msgstr "Поточна серія"
msgid "Cursor"
msgstr "Cursor"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Cursor GUI runtime updated."
+msgstr "Середовище виконання GUI Cursor оновлено."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Cursor SDK (external package)"
+#~ msgstr "Cursor SDK (зовнішній пакет)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK is up to date."
+msgstr "Cursor SDK оновлено до останньої версії."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK update targets"
+msgstr "Цілі оновлення Cursor SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK updated to v{nextVersion}."
+msgstr "Cursor SDK оновлено до v{nextVersion}."
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/views/SchedulesView/ScheduleEditor.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
@@ -3155,6 +3222,10 @@ msgstr "Користувацький"
msgid "Custom commands available from the project context menu (right-click)."
msgstr "Користувацькі команди доступні з контекстного меню проекту (правий клік)."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "custom path"
+msgstr "власний шлях"
+
#: src/renderer/commands/composerCommands.ts
msgid "Cycle permission mode"
msgstr "Перебирати режим дозволів"
@@ -3196,6 +3267,7 @@ msgstr "Відхилити"
msgid "DeepSeek"
msgstr "DeepSeek"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
msgid "Default"
msgstr "За замовчуванням"
@@ -3884,6 +3956,10 @@ msgstr "Введіть допустиму URL-адресу з протоколо
msgid "Enter a valid SSH target and port."
msgstr "Введіть дійсну SSH-адресу та порт."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Enter an absolute @cursor/sdk package path, or leave this blank for automatic discovery."
+msgstr "Введіть абсолютний шлях до пакета @cursor/sdk або залиште поле порожнім для автоматичного виявлення."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "Enter one MCP server configuration."
msgstr "Введіть конфігурацію одного сервера MCP."
@@ -4200,6 +4276,7 @@ msgstr "Не вдалося оновити мету"
#: src/renderer/components/providers/modelDisplay.ts
#: src/renderer/components/thread/buildModelPickerControls.tsx
#: src/renderer/views/SettingsOverlay/parts/CrossagentRoutingSection.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Fast"
msgstr "Швидкий"
@@ -4349,8 +4426,12 @@ msgid "First-class Command Code CLI integration using Poracode's native runtime.
msgstr "Першокласна інтеграція Command Code CLI з використанням нативного середовища виконання Poracode."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
-msgid "First-class Cursor Agent integration using Poracode's native runtime."
-msgstr "Першокласна інтеграція Cursor Agent із використанням нативного середовища виконання Poracode."
+#~ msgid "First-class Cursor Agent integration using Poracode's native runtime."
+#~ msgstr "Першокласна інтеграція Cursor Agent із використанням нативного середовища виконання Poracode."
+
+#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
+msgid "First-class Cursor integration using ACP or the public SDK runtime."
+msgstr "Повноцінна інтеграція Cursor через ACP або загальнодоступне середовище виконання SDK."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
msgid "First-class Factory Droid integration using Poracode's ACP runtime."
@@ -4663,6 +4744,10 @@ msgstr "Ігноровані Git файли для копіювання з ос
msgid "GLM 5.2 (optional label)"
msgstr "GLM 5.2 (необов'язкова мітка)"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global"
+msgstr "глобально"
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/components/mcp/McpExternalImportModal.tsx
#: src/renderer/components/mcp/McpProjectDestinationDropdown.tsx
@@ -4691,6 +4776,14 @@ msgstr "Глобальні (Windows)"
msgid "Global folder"
msgstr "Глобальна папка"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global npm"
+msgstr "глобальний npm"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global pnpm"
+msgstr "глобальний pnpm"
+
#: src/renderer/commands/shortcutCatalog.ts
msgid "Go back in navigation history"
msgstr "Назад в історії навігації"
@@ -4751,6 +4844,10 @@ msgstr "Групуйте проєкти, щоб бічна панель, роз
msgid "GUI chat font size"
msgstr "Розмір шрифту чату GUI"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "GUI runtime"
+msgstr "Середовище виконання GUI"
+
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
msgid "handle"
msgstr "нік"
@@ -5067,13 +5164,46 @@ msgstr "Встановити {0}."
msgid "Install {env}"
msgstr "Встановити {env}"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK"
+msgstr "Установити ACP + SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK in {environment}"
+msgstr "Установити ACP + SDK у {environment}"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Install ACP, SDK, or both, then choose which runtime starts new Cursor GUI chats. Existing chats stay pinned to the runtime that created them."
+msgstr "Установіть ACP, SDK або обидва варіанти, а потім виберіть середовище виконання для нових чатів Cursor із графічним інтерфейсом. Наявні чати залишаться прив’язаними до середовища, яке їх створило."
+
#: src/renderer/components/thread/ThreadDraftComposerArea.tsx
msgid "Install CLI hooks"
msgstr "Встановити хуки CLI"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP)"
+msgstr "Установити Cursor Agent (ACP)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP) in {environment}"
+msgstr "Установити Cursor Agent (ACP) у {environment}"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK"
+msgstr "Установити Cursor SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK in {environment}"
+msgstr "Установити Cursor SDK у {environment}"
+
+#. placeholder {0}: target.label
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "Install in {0}"
+msgstr "Установити в {0}"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
-msgid "Install in WSL: {distro}"
-msgstr "Встановити в WSL: {distro}"
+#~ msgid "Install in WSL: {distro}"
+#~ msgstr "Встановити в WSL: {distro}"
#. placeholder {0}: props.targetLabel
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
@@ -5116,6 +5246,7 @@ msgid "Install v{version}"
msgstr "Встановити v{version}"
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Installed"
@@ -5946,6 +6077,10 @@ msgstr "Модель"
msgid "Model added to favorites"
msgstr "Модель додано до обраного"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Model controls"
+msgstr "Елементи керування моделлю"
+
#. placeholder {0}: index + 1
#: src/renderer/components/experiment/NewExperimentModal.tsx
#~ msgid "Model for candidate {0}"
@@ -5978,6 +6113,7 @@ msgstr "Використання моделей"
msgid "Models"
msgstr "Моделі"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/ProfileSettings.tsx
msgid "Modes"
msgstr "Режими"
@@ -6758,6 +6894,7 @@ msgstr "Не репозиторій Git"
msgid "Not found"
msgstr "Не знайдено"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Not installed"
@@ -7450,6 +7587,7 @@ msgstr "Закріплені маршрути завдань"
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/thread/ThreadTodoDock.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Plan"
msgstr "План"
@@ -7676,6 +7814,10 @@ msgstr "Папка проєкту"
msgid "Project folder updated. Reopen any terminals in this project."
msgstr "Папку проєкту оновлено. Повторно відкрийте всі термінали в цьому проєкті."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "project managed"
+msgstr "керується проєктом"
+
#: src/renderer/views/MainView/parts/CreateProject/CreateProjectModal.tsx
#: src/renderer/views/ProjectSettingsOverlay/parts/GeneralSection.tsx
msgid "Project name"
@@ -7974,6 +8116,7 @@ msgid "Ready. Turn this on to advertise the Tailscale HTTPS URL in new pairing c
msgstr "Готово. Увімкніть, щоб оголошувати HTTPS-URL Tailscale у нових кодах сполучення."
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Reasoning"
msgstr "Міркування"
@@ -8734,6 +8877,7 @@ msgstr "Параметри середовища виконання"
#: src/renderer/views/FileEditorOverlay/parts/FileEditorPane/parts/EditorToolbar.tsx
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
#: src/renderer/views/SettingsOverlay/parts/ClaudeProfileSettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/OpenCodeProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Save"
@@ -8752,6 +8896,10 @@ msgstr "Зберегти зміни"
msgid "Save Claude profile"
msgstr "Зберегти профіль Claude"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Save Cursor GUI runtime"
+msgstr "Зберегти середовище виконання GUI Cursor"
+
#: src/renderer/commands/registry.ts
msgid "Save File"
msgstr "Зберегти файл"
@@ -8844,6 +8992,30 @@ msgstr "Множник швидкості прокручування буфер
msgid "Scroll to bottom"
msgstr "Прокрутити вниз"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK"
+msgstr "SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK installed"
+msgstr "SDK установлено"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK mode requires a separately installed @cursor/sdk package and CURSOR_API_KEY. It does not use the Cursor Agent CLI login."
+msgstr "Для режиму SDK потрібні окремо встановлений пакет @cursor/sdk і CURSOR_API_KEY. Вхід через CLI Cursor Agent не використовується."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK not installed"
+msgstr "SDK не встановлено"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path"
+msgstr "Шлях до пакета SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path (optional)"
+msgstr "Шлях до пакета SDK (необов’язково)"
+
#: src/renderer/components/thread/ChatPane/parts/items/commandSummary.ts
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
#: src/renderer/views/MainView/parts/Sidebar/Sidebar.tsx
@@ -9314,6 +9486,7 @@ msgstr "Увійдіть на спареному настільному комп
#: src/renderer/components/thread/ThreadAuthRequiredDock.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Sign in required"
msgstr "Потрібен вхід"
@@ -9787,6 +9960,10 @@ msgstr "Зберігається на цьому пристрої; на комп
#~ msgid "Stored on this phone; the desktop keeps its own values."
#~ msgstr "Збережено на цьому телефоні; десктоп зберігає власні значення."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Structured runtime"
+msgstr "Структуроване середовище виконання"
+
#: src/mobile/views/DesktopWorkspacePanel.tsx
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/thread/ChatPane/parts/items/SubAgentOverlay.tsx
@@ -10302,6 +10479,7 @@ msgstr "Ці вбудовані сервери MCP спільно викорис
#: src/renderer/components/thread/ChatPane/parts/items/Reasoning.tsx
#: src/renderer/components/thread/ChatPane/parts/items/ReasoningInline.tsx
#: src/renderer/components/thread/ThreadComposer.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Thinking"
msgstr "Міркування"
@@ -11070,6 +11248,10 @@ msgstr "Не підтримується"
msgid "Up one level"
msgstr "На рівень вище"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "update"
+msgstr "оновлення"
+
#: src/renderer/components/thread/ThreadAgentUpdateDock.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Update"
@@ -11092,6 +11274,14 @@ msgstr "Оновити гілку"
msgid "Update checks are not available in development mode."
msgstr "Перевірка оновлень недоступна в режимі розробки."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK"
+msgstr "Оновити Cursor SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK in {environment}"
+msgstr "Оновити Cursor SDK у {environment}"
+
#: src/renderer/i18n/sharedMessages.ts
msgid "Update error: {detail}"
msgstr "Помилка оновлення: {detail}"
@@ -11104,6 +11294,10 @@ msgstr "Спосіб оновлення"
msgid "Update Poracode on your desktop to use port forwarding."
msgstr "Оновіть Poracode на комп'ютері, щоб використовувати переспрямування портів."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update SDK"
+msgstr "Оновити SDK"
+
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
msgid "Update task"
msgstr "Оновити завдання"
@@ -11158,6 +11352,10 @@ msgstr "Оновлення {0}"
msgid "Updating {0} ({env})"
msgstr "Оновлення {0} ({env})"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "Updating in this terminal. Closes when finished."
+msgstr "Оновлення виконується в цьому терміналі. Він закриється після завершення."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "URL"
msgstr "URL"
@@ -11587,6 +11785,7 @@ msgstr "Зміни переможця злито."
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/workspace/WorkspaceNameDialog.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Work"
msgstr "Робота"
@@ -11775,6 +11974,10 @@ msgstr "Базова папка WSL"
#~ msgid "WSL user"
#~ msgstr "Користувач WSL"
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "WSL: {distro}"
+msgstr "WSL: {distro}"
+
#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx
msgid "Your local changes are stashed and will be re-applied when you commit or abort this merge."
msgstr "Ваші локальні зміни збережено в stash, і їх буде повторно застосовано, коли ви закомітите або перервете це злиття."
diff --git a/src/renderer/locales/vi/messages.po b/src/renderer/locales/vi/messages.po
index d082d0a55..568b0e956 100644
--- a/src/renderer/locales/vi/messages.po
+++ b/src/renderer/locales/vi/messages.po
@@ -228,6 +228,11 @@ msgstr "Giới hạn {0}"
msgid "{0} logged out."
msgstr "{0} đã đăng xuất."
+#. placeholder {0}: runtime.capabilities.models.length
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "{0} models"
+msgstr "{0} mô hình"
+
#. placeholder {0}: agent.name
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "{0} needs authentication."
@@ -553,6 +558,10 @@ msgstr "{visibleCount} trong số {totalCount} hiển thị"
msgid "/absolute/path/to/project"
msgstr "/absolute/path/to/project"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "/path/to/node_modules/@cursor/sdk"
+msgstr "/đường/dẫn/đến/node_modules/@cursor/sdk"
+
#: src/renderer/components/skills/SkillsManager.tsx
#~ msgid "/skill-creator Create a new managed skill for {destination}."
#~ msgstr "/skill-creator Tạo một skill được quản lý mới cho {destination}."
@@ -653,13 +662,34 @@ msgstr "Tài khoản"
#: src/renderer/components/thread/ThreadHeaderStatus.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "ACP"
msgstr "ACP"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP (installed Cursor Agent)"
+#~ msgstr "ACP (Cursor Agent đã cài đặt)"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "ACP Agents"
msgstr "Tác nhân ACP"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP installed"
+msgstr "Đã cài ACP"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP not installed"
+msgstr "Chưa cài ACP"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "ACP uses the Cursor Agent login. SDK uses @cursor/sdk with CURSOR_API_KEY."
+msgstr "ACP sử dụng thông tin đăng nhập Cursor Agent. SDK sử dụng @cursor/sdk với CURSOR_API_KEY."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP uses the installed Cursor Agent. SDK loads an external @cursor/sdk package."
+#~ msgstr "ACP sử dụng Cursor Agent đã cài đặt. SDK tải một gói @cursor/sdk bên ngoài."
+
#: src/renderer/views/ProjectSettingsOverlay/parts/ActionsSection.tsx
msgid "Action command"
msgstr "Lệnh hành động"
@@ -743,6 +773,10 @@ msgstr "Thêm một dự án trước khi cài đặt một tác nhân."
msgid "Add a project before signing in."
msgstr "Thêm một dự án trước khi đăng nhập."
+#: src/renderer/actions/agentLoginActions.ts
+msgid "Add a project before updating an agent."
+msgstr "Thêm dự án trước khi cập nhật tác nhân."
+
#: src/renderer/views/PullRequestsView/PullRequestsView.tsx
msgid "Add a project to see pull requests."
msgstr "Thêm một dự án để xem các pull request."
@@ -1122,6 +1156,10 @@ msgstr "Một thao tác khác của thử nghiệm này vẫn đang chạy."
msgid "Antigravity"
msgstr "Antigravity"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "API key required"
+msgstr "Cần khóa API"
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "API_KEY=value"
msgstr "API_KEY=value"
@@ -1229,7 +1267,7 @@ msgstr "Bạn có chắc chắn muốn hoàn nguyên tất cả các thay đổi
msgid "Arguments"
msgstr "Đối số"
-#. placeholder {0}: agentStatus?.label ?? agentFallbackLabel
+#. placeholder {0}: effectiveAgentStatus?.label ?? agentFallbackLabel
#. placeholder {0}: project.name
#: src/renderer/components/thread/ThreadComposerSection.tsx
#: src/renderer/views/QuickComposerOverlay/QuickComposerOverlay.tsx
@@ -1375,6 +1413,10 @@ msgstr "Tự động hiển thị bảng điều khiển thiết bị đầu cu
msgid "Automatically show the terminal panel when running commands or creating worktrees."
msgstr "Tự động hiển thị bảng terminal khi chạy lệnh hoặc tạo cây làm việc."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Autopilot"
+msgstr "Tự động"
+
#: src/renderer/components/skills/SkillImportModal.tsx
msgid "Availability"
msgstr "Phạm vi khả dụng"
@@ -1962,6 +2004,10 @@ msgstr "Chọn tệp danh tính SSH"
msgid "Choose the display language for Poracode's interface."
msgstr "Chọn ngôn ngữ hiển thị cho giao diện của Poracode."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Choose the structured runtime for new Cursor GUI threads. Running threads keep their current runtime."
+#~ msgstr "Chọn môi trường chạy có cấu trúc cho các luồng GUI Cursor mới. Các luồng đang chạy sẽ giữ môi trường hiện tại."
+
#: src/renderer/views/MainView/parts/RightPanel/parts/BrowserPanel/parts/BrowserToolbar.tsx
msgid "Choose thread to attach to"
msgstr "Chọn chủ đề để đính kèm"
@@ -2657,6 +2703,7 @@ msgstr "Có chứa giá trị nhạy cảm; hãy thêm thủ công"
#: src/mobile/ComposerInfoChips.tsx
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
#: src/renderer/components/thread/threadContextUsage.ts
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Context"
msgstr "Ngữ cảnh"
@@ -3143,6 +3190,26 @@ msgstr "Chuỗi ngày hiện tại"
msgid "Cursor"
msgstr "Cursor"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Cursor GUI runtime updated."
+msgstr "Đã cập nhật môi trường chạy GUI Cursor."
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Cursor SDK (external package)"
+#~ msgstr "Cursor SDK (gói bên ngoài)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK is up to date."
+msgstr "Cursor SDK đã được cập nhật."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK update targets"
+msgstr "Đích cập nhật Cursor SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK updated to v{nextVersion}."
+msgstr "Đã cập nhật Cursor SDK lên v{nextVersion}."
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/views/SchedulesView/ScheduleEditor.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
@@ -3155,6 +3222,10 @@ msgstr "Tùy chỉnh"
msgid "Custom commands available from the project context menu (right-click)."
msgstr "Các lệnh tùy chỉnh có sẵn từ menu ngữ cảnh của dự án (nhấp chuột phải)."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "custom path"
+msgstr "đường dẫn tùy chỉnh"
+
#: src/renderer/commands/composerCommands.ts
msgid "Cycle permission mode"
msgstr "Luân chuyển chế độ cho phép"
@@ -3196,6 +3267,7 @@ msgstr "Từ chối"
msgid "DeepSeek"
msgstr "DeepSeek"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
msgid "Default"
msgstr "Mặc định"
@@ -3884,6 +3956,10 @@ msgstr "Nhập URL HTTP hoặc HTTPS hợp lệ."
msgid "Enter a valid SSH target and port."
msgstr "Nhập đích SSH và cổng hợp lệ."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Enter an absolute @cursor/sdk package path, or leave this blank for automatic discovery."
+msgstr "Nhập đường dẫn tuyệt đối đến gói @cursor/sdk hoặc để trống để tự động phát hiện."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "Enter one MCP server configuration."
msgstr "Nhập một cấu hình máy chủ MCP."
@@ -4200,6 +4276,7 @@ msgstr "Không thể cập nhật mục tiêu"
#: src/renderer/components/providers/modelDisplay.ts
#: src/renderer/components/thread/buildModelPickerControls.tsx
#: src/renderer/views/SettingsOverlay/parts/CrossagentRoutingSection.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Fast"
msgstr "Nhanh"
@@ -4349,8 +4426,12 @@ msgid "First-class Command Code CLI integration using Poracode's native runtime.
msgstr "Tích hợp CLI Command Code hạng nhất bằng thời gian chạy gốc của Poracode."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
-msgid "First-class Cursor Agent integration using Poracode's native runtime."
-msgstr "Tích hợp Cursor Agent hạng nhất bằng runtime gốc của Poracode."
+#~ msgid "First-class Cursor Agent integration using Poracode's native runtime."
+#~ msgstr "Tích hợp Cursor Agent hạng nhất bằng runtime gốc của Poracode."
+
+#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
+msgid "First-class Cursor integration using ACP or the public SDK runtime."
+msgstr "Tích hợp Cursor đầy đủ bằng ACP hoặc môi trường chạy SDK công khai."
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
msgid "First-class Factory Droid integration using Poracode's ACP runtime."
@@ -4663,6 +4744,10 @@ msgstr "Các tệp được Gitignored để sao chép từ dự án chính vào
msgid "GLM 5.2 (optional label)"
msgstr "GLM 5.2 (nhãn tùy chọn)"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global"
+msgstr "toàn cục"
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/components/mcp/McpExternalImportModal.tsx
#: src/renderer/components/mcp/McpProjectDestinationDropdown.tsx
@@ -4691,6 +4776,14 @@ msgstr "Toàn cục (Windows)"
msgid "Global folder"
msgstr "Thư mục toàn cục"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global npm"
+msgstr "npm toàn cục"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global pnpm"
+msgstr "pnpm toàn cục"
+
#: src/renderer/commands/shortcutCatalog.ts
msgid "Go back in navigation history"
msgstr "Quay lại trong lịch sử điều hướng"
@@ -4751,6 +4844,10 @@ msgstr "Nhóm các dự án để thanh bên, lịch biểu và pull request ch
msgid "GUI chat font size"
msgstr "Kích thước phông chữ trò chuyện GUI"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "GUI runtime"
+msgstr "Môi trường chạy GUI"
+
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
msgid "handle"
msgstr "handle"
@@ -5067,13 +5164,46 @@ msgstr "Cài đặt {0}."
msgid "Install {env}"
msgstr "Cài đặt {env}"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK"
+msgstr "Cài đặt ACP + SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK in {environment}"
+msgstr "Cài đặt ACP + SDK trong {environment}"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Install ACP, SDK, or both, then choose which runtime starts new Cursor GUI chats. Existing chats stay pinned to the runtime that created them."
+msgstr "Cài đặt ACP, SDK hoặc cả hai, sau đó chọn môi trường chạy để bắt đầu các cuộc trò chuyện Cursor GUI mới. Các cuộc trò chuyện hiện có vẫn gắn với môi trường đã tạo ra chúng."
+
#: src/renderer/components/thread/ThreadDraftComposerArea.tsx
msgid "Install CLI hooks"
msgstr "Cài đặt móc CLI"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP)"
+msgstr "Cài đặt Cursor Agent (ACP)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP) in {environment}"
+msgstr "Cài đặt Cursor Agent (ACP) trong {environment}"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK"
+msgstr "Cài đặt Cursor SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK in {environment}"
+msgstr "Cài đặt Cursor SDK trong {environment}"
+
+#. placeholder {0}: target.label
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "Install in {0}"
+msgstr "Cài đặt trong {0}"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
-msgid "Install in WSL: {distro}"
-msgstr "Cài đặt trong WSL: {distro}"
+#~ msgid "Install in WSL: {distro}"
+#~ msgstr "Cài đặt trong WSL: {distro}"
#. placeholder {0}: props.targetLabel
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
@@ -5116,6 +5246,7 @@ msgid "Install v{version}"
msgstr "Cài đặt v{version}"
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Installed"
@@ -5946,6 +6077,10 @@ msgstr "Mô hình"
msgid "Model added to favorites"
msgstr "Đã thêm mô hình vào mục yêu thích"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Model controls"
+msgstr "Điều khiển mô hình"
+
#. placeholder {0}: index + 1
#: src/renderer/components/experiment/NewExperimentModal.tsx
#~ msgid "Model for candidate {0}"
@@ -5978,6 +6113,7 @@ msgstr "Mức dùng mô hình"
msgid "Models"
msgstr "Mô hình"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/ProfileSettings.tsx
msgid "Modes"
msgstr "Chế độ"
@@ -6758,6 +6894,7 @@ msgstr "Không phải kho lưu trữ Git"
msgid "Not found"
msgstr "Không tìm thấy"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Not installed"
@@ -7450,6 +7587,7 @@ msgstr "Tuyến tác vụ đã ghim"
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/thread/ThreadTodoDock.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Plan"
msgstr "kế hoạch"
@@ -7676,6 +7814,10 @@ msgstr "Thư mục dự án"
msgid "Project folder updated. Reopen any terminals in this project."
msgstr "Đã cập nhật thư mục dự án. Hãy mở lại bất kỳ terminal nào trong dự án này."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "project managed"
+msgstr "do dự án quản lý"
+
#: src/renderer/views/MainView/parts/CreateProject/CreateProjectModal.tsx
#: src/renderer/views/ProjectSettingsOverlay/parts/GeneralSection.tsx
msgid "Project name"
@@ -7974,6 +8116,7 @@ msgid "Ready. Turn this on to advertise the Tailscale HTTPS URL in new pairing c
msgstr "Sẵn sàng. Bật tùy chọn này để quảng bá URL HTTPS của Tailscale trong các mã ghép đôi mới."
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Reasoning"
msgstr "Suy luận"
@@ -8734,6 +8877,7 @@ msgstr "Tùy chọn thời gian chạy"
#: src/renderer/views/FileEditorOverlay/parts/FileEditorPane/parts/EditorToolbar.tsx
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
#: src/renderer/views/SettingsOverlay/parts/ClaudeProfileSettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/OpenCodeProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Save"
@@ -8752,6 +8896,10 @@ msgstr "Lưu thay đổi"
msgid "Save Claude profile"
msgstr "Lưu hồ sơ Claude"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Save Cursor GUI runtime"
+msgstr "Lưu môi trường chạy GUI Cursor"
+
#: src/renderer/commands/registry.ts
msgid "Save File"
msgstr "Lưu tập tin"
@@ -8844,6 +8992,30 @@ msgstr "Hệ số nhân tốc độ cuộn cho bộ đệm cuộn ngược đầ
msgid "Scroll to bottom"
msgstr "Cuộn xuống dưới cùng"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK"
+msgstr "SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK installed"
+msgstr "Đã cài SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK mode requires a separately installed @cursor/sdk package and CURSOR_API_KEY. It does not use the Cursor Agent CLI login."
+msgstr "Chế độ SDK yêu cầu gói @cursor/sdk được cài đặt riêng và CURSOR_API_KEY. Chế độ này không dùng thông tin đăng nhập CLI của Cursor Agent."
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK not installed"
+msgstr "Chưa cài SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path"
+msgstr "Đường dẫn gói SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path (optional)"
+msgstr "Đường dẫn gói SDK (không bắt buộc)"
+
#: src/renderer/components/thread/ChatPane/parts/items/commandSummary.ts
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
#: src/renderer/views/MainView/parts/Sidebar/Sidebar.tsx
@@ -9314,6 +9486,7 @@ msgstr "Đăng nhập trên máy tính đã ghép đôi, rồi làm mới trạn
#: src/renderer/components/thread/ThreadAuthRequiredDock.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Sign in required"
msgstr "Yêu cầu đăng nhập"
@@ -9787,6 +9960,10 @@ msgstr "Được lưu trên thiết bị này; máy tính để bàn giữ các
#~ msgid "Stored on this phone; the desktop keeps its own values."
#~ msgstr "Được lưu trên điện thoại này; desktop giữ các giá trị riêng."
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Structured runtime"
+msgstr "Môi trường chạy có cấu trúc"
+
#: src/mobile/views/DesktopWorkspacePanel.tsx
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/thread/ChatPane/parts/items/SubAgentOverlay.tsx
@@ -10302,6 +10479,7 @@ msgstr "Các máy chủ MCP tích hợp sẵn này được chia sẻ giữa cá
#: src/renderer/components/thread/ChatPane/parts/items/Reasoning.tsx
#: src/renderer/components/thread/ChatPane/parts/items/ReasoningInline.tsx
#: src/renderer/components/thread/ThreadComposer.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Thinking"
msgstr "Đang suy nghĩ"
@@ -11070,6 +11248,10 @@ msgstr "Không được hỗ trợ"
msgid "Up one level"
msgstr "Lên một cấp"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "update"
+msgstr "cập nhật"
+
#: src/renderer/components/thread/ThreadAgentUpdateDock.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Update"
@@ -11092,6 +11274,14 @@ msgstr "Cập nhật nhánh"
msgid "Update checks are not available in development mode."
msgstr "Không thể kiểm tra bản cập nhật trong chế độ phát triển."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK"
+msgstr "Cập nhật Cursor SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK in {environment}"
+msgstr "Cập nhật Cursor SDK trong {environment}"
+
#: src/renderer/i18n/sharedMessages.ts
msgid "Update error: {detail}"
msgstr "Lỗi cập nhật: {detail}"
@@ -11104,6 +11294,10 @@ msgstr "Phương thức cập nhật"
msgid "Update Poracode on your desktop to use port forwarding."
msgstr "Cập nhật Poracode trên máy tính của bạn để sử dụng tính năng chuyển tiếp cổng."
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update SDK"
+msgstr "Cập nhật SDK"
+
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
msgid "Update task"
msgstr "Cập nhật nhiệm vụ"
@@ -11158,6 +11352,10 @@ msgstr "Đang cập nhật {0}"
msgid "Updating {0} ({env})"
msgstr "Đang cập nhật {0} ({env})"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "Updating in this terminal. Closes when finished."
+msgstr "Đang cập nhật trong terminal này. Sẽ đóng khi hoàn tất."
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "URL"
msgstr "URL"
@@ -11587,6 +11785,7 @@ msgstr "Đã hợp nhất ứng viên thắng."
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/workspace/WorkspaceNameDialog.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Work"
msgstr "công việc"
@@ -11775,6 +11974,10 @@ msgstr "Thư mục gốc WSL"
#~ msgid "WSL user"
#~ msgstr "Người dùng WSL"
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "WSL: {distro}"
+msgstr "WSL: {distro}"
+
#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx
msgid "Your local changes are stashed and will be re-applied when you commit or abort this merge."
msgstr "Các thay đổi cục bộ của bạn đang được lưu trong stash và sẽ được áp dụng lại khi bạn commit hoặc hủy hợp nhất này."
diff --git a/src/renderer/locales/zh-CN/messages.po b/src/renderer/locales/zh-CN/messages.po
index 2c58cbf9e..8362ac858 100644
--- a/src/renderer/locales/zh-CN/messages.po
+++ b/src/renderer/locales/zh-CN/messages.po
@@ -228,6 +228,11 @@ msgstr "{0}限制"
msgid "{0} logged out."
msgstr "{0}已注销。"
+#. placeholder {0}: runtime.capabilities.models.length
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "{0} models"
+msgstr "{0} 个模型"
+
#. placeholder {0}: agent.name
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "{0} needs authentication."
@@ -553,6 +558,10 @@ msgstr "{totalCount} 中的 {visibleCount} 个可见"
msgid "/absolute/path/to/project"
msgstr "/absolute/path/to/project"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "/path/to/node_modules/@cursor/sdk"
+msgstr "/路径/到/node_modules/@cursor/sdk"
+
#: src/renderer/components/skills/SkillsManager.tsx
#~ msgid "/skill-creator Create a new managed skill for {destination}."
#~ msgstr "/skill-creator 为{destination}创建一个新的托管技能。"
@@ -653,13 +662,34 @@ msgstr "账户"
#: src/renderer/components/thread/ThreadHeaderStatus.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "ACP"
msgstr "ACP"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP (installed Cursor Agent)"
+#~ msgstr "ACP(已安装的 Cursor Agent)"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
msgid "ACP Agents"
msgstr "ACP 代理"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP installed"
+msgstr "ACP 已安装"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "ACP not installed"
+msgstr "ACP 未安装"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "ACP uses the Cursor Agent login. SDK uses @cursor/sdk with CURSOR_API_KEY."
+msgstr "ACP 使用 Cursor Agent 登录。SDK 使用 @cursor/sdk 和 CURSOR_API_KEY。"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "ACP uses the installed Cursor Agent. SDK loads an external @cursor/sdk package."
+#~ msgstr "ACP 使用已安装的 Cursor Agent。SDK 加载外部 @cursor/sdk 软件包。"
+
#: src/renderer/views/ProjectSettingsOverlay/parts/ActionsSection.tsx
msgid "Action command"
msgstr "操作指令"
@@ -743,6 +773,10 @@ msgstr "在安装代理之前添加项目。"
msgid "Add a project before signing in."
msgstr "登录前添加项目。"
+#: src/renderer/actions/agentLoginActions.ts
+msgid "Add a project before updating an agent."
+msgstr "请先添加项目,再更新智能体。"
+
#: src/renderer/views/PullRequestsView/PullRequestsView.tsx
msgid "Add a project to see pull requests."
msgstr "添加项目以查看拉取请求。"
@@ -1122,6 +1156,10 @@ msgstr "此实验的另一个操作仍在运行。"
msgid "Antigravity"
msgstr "Antigravity"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "API key required"
+msgstr "需要 API 密钥"
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "API_KEY=value"
msgstr "API_KEY=value"
@@ -1229,7 +1267,7 @@ msgstr "您确定要恢复所有未暂存的更改吗?此操作无法撤消。
msgid "Arguments"
msgstr "参数"
-#. placeholder {0}: agentStatus?.label ?? agentFallbackLabel
+#. placeholder {0}: effectiveAgentStatus?.label ?? agentFallbackLabel
#. placeholder {0}: project.name
#: src/renderer/components/thread/ThreadComposerSection.tsx
#: src/renderer/views/QuickComposerOverlay/QuickComposerOverlay.tsx
@@ -1375,6 +1413,10 @@ msgstr "自动显示终端面板"
msgid "Automatically show the terminal panel when running commands or creating worktrees."
msgstr "运行命令或创建工作树时自动显示终端面板。"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Autopilot"
+msgstr "自动驾驶"
+
#: src/renderer/components/skills/SkillImportModal.tsx
msgid "Availability"
msgstr "可用范围"
@@ -1962,6 +2004,10 @@ msgstr "选择 SSH 身份文件"
msgid "Choose the display language for Poracode's interface."
msgstr "选择 Poracode 界面的显示语言。"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Choose the structured runtime for new Cursor GUI threads. Running threads keep their current runtime."
+#~ msgstr "为新的 Cursor GUI 线程选择结构化运行时。正在运行的线程会保留其当前运行时。"
+
#: src/renderer/views/MainView/parts/RightPanel/parts/BrowserPanel/parts/BrowserToolbar.tsx
msgid "Choose thread to attach to"
msgstr "选择要附加到的线程"
@@ -2657,6 +2703,7 @@ msgstr "包含敏感值;请手动添加"
#: src/mobile/ComposerInfoChips.tsx
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
#: src/renderer/components/thread/threadContextUsage.ts
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Context"
msgstr "上下文"
@@ -3143,6 +3190,26 @@ msgstr "当前连续天数"
msgid "Cursor"
msgstr "Cursor"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Cursor GUI runtime updated."
+msgstr "Cursor GUI 运行时已更新。"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+#~ msgid "Cursor SDK (external package)"
+#~ msgstr "Cursor SDK(外部软件包)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK is up to date."
+msgstr "Cursor SDK 已是最新版本。"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK update targets"
+msgstr "Cursor SDK 更新目标"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Cursor SDK updated to v{nextVersion}."
+msgstr "Cursor SDK 已更新到 v{nextVersion}。"
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/views/SchedulesView/ScheduleEditor.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
@@ -3155,6 +3222,10 @@ msgstr "定制"
msgid "Custom commands available from the project context menu (right-click)."
msgstr "可从项目上下文菜单(右键单击)使用自定义命令。"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "custom path"
+msgstr "自定义路径"
+
#: src/renderer/commands/composerCommands.ts
msgid "Cycle permission mode"
msgstr "循环切换权限模式"
@@ -3196,6 +3267,7 @@ msgstr "拒绝"
msgid "DeepSeek"
msgstr "DeepSeek"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
msgid "Default"
msgstr "默认"
@@ -3884,6 +3956,10 @@ msgstr "请输入有效的 HTTP 或 HTTPS URL。"
msgid "Enter a valid SSH target and port."
msgstr "请输入有效的 SSH 目标和端口。"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Enter an absolute @cursor/sdk package path, or leave this blank for automatic discovery."
+msgstr "输入 @cursor/sdk 软件包的绝对路径,或留空以使用自动发现。"
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "Enter one MCP server configuration."
msgstr "请输入一个 MCP 服务器配置。"
@@ -4200,6 +4276,7 @@ msgstr "无法更新目标"
#: src/renderer/components/providers/modelDisplay.ts
#: src/renderer/components/thread/buildModelPickerControls.tsx
#: src/renderer/views/SettingsOverlay/parts/CrossagentRoutingSection.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Fast"
msgstr "快"
@@ -4349,8 +4426,12 @@ msgid "First-class Command Code CLI integration using Poracode's native runtime.
msgstr "使用 Poracode 的本机运行时实现一流的 Command Code CLI 集成。"
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
-msgid "First-class Cursor Agent integration using Poracode's native runtime."
-msgstr "使用 Poracode 原生运行时的一流 Cursor Agent 集成。"
+#~ msgid "First-class Cursor Agent integration using Poracode's native runtime."
+#~ msgstr "使用 Poracode 原生运行时的一流 Cursor Agent 集成。"
+
+#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
+msgid "First-class Cursor integration using ACP or the public SDK runtime."
+msgstr "使用 ACP 或公共 SDK 运行时的一流 Cursor 集成。"
#: src/renderer/views/SettingsOverlay/parts/agentRegistryNative.ts
msgid "First-class Factory Droid integration using Poracode's ACP runtime."
@@ -4663,6 +4744,10 @@ msgstr "Gitignored 文件从主项目复制到每个新工作树中。 Gitignore
msgid "GLM 5.2 (optional label)"
msgstr "GLM 5.2(可选标签)"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global"
+msgstr "全局"
+
#: src/renderer/commands/shortcutCatalog.ts
#: src/renderer/components/mcp/McpExternalImportModal.tsx
#: src/renderer/components/mcp/McpProjectDestinationDropdown.tsx
@@ -4691,6 +4776,14 @@ msgstr "全局 (Windows)"
msgid "Global folder"
msgstr "全局文件夹"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global npm"
+msgstr "全局 npm"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "global pnpm"
+msgstr "全局 pnpm"
+
#: src/renderer/commands/shortcutCatalog.ts
msgid "Go back in navigation history"
msgstr "在导航历史记录中后退"
@@ -4751,6 +4844,10 @@ msgstr "将项目分组,使侧边栏、计划和拉取请求一次只显示一
msgid "GUI chat font size"
msgstr "GUI聊天字体大小"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "GUI runtime"
+msgstr "GUI 运行时"
+
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
msgid "handle"
msgstr "用户名"
@@ -5067,13 +5164,46 @@ msgstr "安装{0}。"
msgid "Install {env}"
msgstr "安装{env}"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK"
+msgstr "安装 ACP + SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install ACP + SDK in {environment}"
+msgstr "在 {environment} 中安装 ACP + SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Install ACP, SDK, or both, then choose which runtime starts new Cursor GUI chats. Existing chats stay pinned to the runtime that created them."
+msgstr "安装 ACP、SDK 或两者,然后选择用于启动新 Cursor GUI 聊天的运行时。现有聊天会继续固定到创建它们的运行时。"
+
#: src/renderer/components/thread/ThreadDraftComposerArea.tsx
msgid "Install CLI hooks"
msgstr "安装 CLI 挂钩"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP)"
+msgstr "安装 Cursor Agent (ACP)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor Agent (ACP) in {environment}"
+msgstr "在 {environment} 中安装 Cursor Agent (ACP)"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK"
+msgstr "安装 Cursor SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Install Cursor SDK in {environment}"
+msgstr "在 {environment} 中安装 Cursor SDK"
+
+#. placeholder {0}: target.label
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "Install in {0}"
+msgstr "在 {0} 中安装"
+
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
-msgid "Install in WSL: {distro}"
-msgstr "在 WSL 中安装:{distro}"
+#~ msgid "Install in WSL: {distro}"
+#~ msgstr "在 WSL 中安装:{distro}"
#. placeholder {0}: props.targetLabel
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
@@ -5116,6 +5246,7 @@ msgid "Install v{version}"
msgstr "安装 v{version}"
#: src/renderer/components/skills/SkillMarketplaceModal.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Installed"
@@ -5945,6 +6076,10 @@ msgstr "模型"
msgid "Model added to favorites"
msgstr "已将模型添加到收藏夹"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Model controls"
+msgstr "模型控件"
+
#. placeholder {0}: index + 1
#: src/renderer/components/experiment/NewExperimentModal.tsx
#~ msgid "Model for candidate {0}"
@@ -5977,6 +6112,7 @@ msgstr "模型用量"
msgid "Models"
msgstr "模型"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/ProfileSettings.tsx
msgid "Modes"
msgstr "模式"
@@ -6757,6 +6893,7 @@ msgstr "不是 Git 存储库"
msgid "Not found"
msgstr "未找到"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/AgentEnvironmentRow.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Not installed"
@@ -7449,6 +7586,7 @@ msgstr "已固定的任务路由"
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/thread/ThreadTodoDock.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Plan"
msgstr "计划"
@@ -7675,6 +7813,10 @@ msgstr "项目文件夹"
msgid "Project folder updated. Reopen any terminals in this project."
msgstr "项目文件夹已更新。请重新打开此项目中的所有终端。"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "project managed"
+msgstr "由项目管理"
+
#: src/renderer/views/MainView/parts/CreateProject/CreateProjectModal.tsx
#: src/renderer/views/ProjectSettingsOverlay/parts/GeneralSection.tsx
msgid "Project name"
@@ -7973,6 +8115,7 @@ msgid "Ready. Turn this on to advertise the Tailscale HTTPS URL in new pairing c
msgstr "就绪。打开后,新的配对码会公布 Tailscale HTTPS URL。"
#: src/renderer/components/common/EffortContextMenu/EffortContextMenu.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Reasoning"
msgstr "推理"
@@ -8733,6 +8876,7 @@ msgstr "运行时选项"
#: src/renderer/views/FileEditorOverlay/parts/FileEditorPane/parts/EditorToolbar.tsx
#: src/renderer/views/ProfileOverlay/parts/EditProfileDialog.tsx
#: src/renderer/views/SettingsOverlay/parts/ClaudeProfileSettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/OpenCodeProviderSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/SingleAgentSettings.tsx
msgid "Save"
@@ -8751,6 +8895,10 @@ msgstr "保存更改"
msgid "Save Claude profile"
msgstr "保存 Claude 配置文件"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Save Cursor GUI runtime"
+msgstr "保存 Cursor GUI 运行时"
+
#: src/renderer/commands/registry.ts
msgid "Save File"
msgstr "保存文件"
@@ -8843,6 +8991,30 @@ msgstr "终端回滚缓冲区的滚动速度倍增器。"
msgid "Scroll to bottom"
msgstr "滚动到底部"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK"
+msgstr "SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK installed"
+msgstr "SDK 已安装"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK mode requires a separately installed @cursor/sdk package and CURSOR_API_KEY. It does not use the Cursor Agent CLI login."
+msgstr "SDK 模式需要单独安装 @cursor/sdk 软件包并设置 CURSOR_API_KEY。它不会使用 Cursor Agent CLI 的登录信息。"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "SDK not installed"
+msgstr "SDK 未安装"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path"
+msgstr "SDK 软件包路径"
+
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "SDK package path (optional)"
+msgstr "SDK 软件包路径(可选)"
+
#: src/renderer/components/thread/ChatPane/parts/items/commandSummary.ts
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
#: src/renderer/views/MainView/parts/Sidebar/Sidebar.tsx
@@ -9313,6 +9485,7 @@ msgstr "请在已配对的桌面端登录,然后刷新此状态。"
#: src/renderer/components/thread/ThreadAuthRequiredDock.tsx
#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Sign in required"
msgstr "需要登录"
@@ -9786,6 +9959,10 @@ msgstr "存储在此设备上;桌面端保留自己的设置值。"
#~ msgid "Stored on this phone; the desktop keeps its own values."
#~ msgstr "存储在这部手机上;桌面保留自己的值。"
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
+msgid "Structured runtime"
+msgstr "结构化运行时"
+
#: src/mobile/views/DesktopWorkspacePanel.tsx
#: src/renderer/components/layout/UnifiedRightPanel.tsx
#: src/renderer/components/thread/ChatPane/parts/items/SubAgentOverlay.tsx
@@ -10301,6 +10478,7 @@ msgstr "这些内置 MCP 服务器由 OpenCode 线程共享。保存后会更新
#: src/renderer/components/thread/ChatPane/parts/items/Reasoning.tsx
#: src/renderer/components/thread/ChatPane/parts/items/ReasoningInline.tsx
#: src/renderer/components/thread/ThreadComposer.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Thinking"
msgstr "思考"
@@ -11069,6 +11247,10 @@ msgstr "不支持"
msgid "Up one level"
msgstr "上一级"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "update"
+msgstr "更新"
+
#: src/renderer/components/thread/ThreadAgentUpdateDock.tsx
#: src/renderer/views/SettingsOverlay/parts/SingleAgentSettings/parts/HookPluginSettings.tsx
msgid "Update"
@@ -11091,6 +11273,14 @@ msgstr "更新分支"
msgid "Update checks are not available in development mode."
msgstr "开发模式下无法检查更新。"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK"
+msgstr "更新 Cursor SDK"
+
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update Cursor SDK in {environment}"
+msgstr "更新 {environment} 中的 Cursor SDK"
+
#: src/renderer/i18n/sharedMessages.ts
msgid "Update error: {detail}"
msgstr "更新错误:{detail}"
@@ -11103,6 +11293,10 @@ msgstr "更新方法"
msgid "Update Poracode on your desktop to use port forwarding."
msgstr "请在桌面端更新 Poracode 以使用端口转发。"
+#: src/renderer/views/SettingsOverlay/parts/cursorRuntimeInstall.ts
+msgid "Update SDK"
+msgstr "更新 SDK"
+
#: src/renderer/components/thread/ChatPane/parts/items/toolDisplay.ts
msgid "Update task"
msgstr "更新任务"
@@ -11157,6 +11351,10 @@ msgstr "正在更新{0}"
msgid "Updating {0} ({env})"
msgstr "更新{0}({env})"
+#: src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+msgid "Updating in this terminal. Closes when finished."
+msgstr "正在此终端中更新。完成后将关闭。"
+
#: src/renderer/components/mcp/McpServerEditor.tsx
msgid "URL"
msgstr "URL"
@@ -11586,6 +11784,7 @@ msgstr "已合并优胜者。"
#: src/renderer/components/providers/composerControlBuilders.tsx
#: src/renderer/components/workspace/WorkspaceNameDialog.tsx
+#: src/renderer/views/SettingsOverlay/parts/CursorProviderSettings.tsx
msgid "Work"
msgstr "工作"
@@ -11774,6 +11973,10 @@ msgstr "WSL 基础文件夹"
#~ msgid "WSL user"
#~ msgstr "WSL 用户"
+#: src/renderer/views/SettingsOverlay/parts/AcpRegistrySettings.tsx
+msgid "WSL: {distro}"
+msgstr "WSL:{distro}"
+
#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx
msgid "Your local changes are stashed and will be re-applied when you commit or abort this merge."
msgstr "您的本地更改已贮藏,在您提交或中止此合并时将重新应用。"
diff --git a/src/renderer/state/agentStatusesStore.test.ts b/src/renderer/state/agentStatusesStore.test.ts
index 0aef41709..a0c81034c 100644
--- a/src/renderer/state/agentStatusesStore.test.ts
+++ b/src/renderer/state/agentStatusesStore.test.ts
@@ -69,6 +69,92 @@ describe("setAgentStatuses", () => {
);
});
+ it("replaces the array when only a presentation capability catalog changes", () => {
+ const cached = makeStatus({
+ capabilities: {
+ ...makeStatus().capabilities,
+ presentationCapabilities: {
+ gui: {
+ models: [{ id: "old-gui-model", label: "Old GUI model" }],
+ },
+ },
+ },
+ });
+ const fresh = makeStatus({
+ capabilities: {
+ ...cached.capabilities,
+ presentationCapabilities: {
+ gui: {
+ models: [{ id: "new-gui-model", label: "New GUI model" }],
+ },
+ },
+ },
+ });
+
+ useAgentStatusesStore.getState().hydrateFromCache({ windows: [cached], wsl: [] });
+ useAgentStatusesStore.getState().setAgentStatuses([fresh]);
+
+ expect(
+ useAgentStatusesStore.getState().agentStatuses[0]?.capabilities.presentationCapabilities?.gui
+ ?.models,
+ ).toEqual([{ id: "new-gui-model", label: "New GUI model" }]);
+ });
+
+ it("replaces the array when only a pinned runtime variant changes", () => {
+ const base = makeStatus();
+ const cached = makeStatus({
+ runtimeVariants: {
+ sdk: {
+ presentationMode: "gui",
+ installed: true,
+ authState: "authenticated",
+ authUsesProviderLogin: false,
+ capabilities: {
+ ...base.capabilities,
+ models: [{ id: "old-sdk-model", label: "Old SDK model" }],
+ },
+ },
+ },
+ sessionRuntimeRouting: { prefixes: { "sdk:": "sdk" } },
+ });
+ const fresh = makeStatus({
+ ...cached,
+ runtimeVariants: {
+ sdk: {
+ ...cached.runtimeVariants!.sdk!,
+ capabilities: {
+ ...cached.runtimeVariants!.sdk!.capabilities,
+ models: [{ id: "new-sdk-model", label: "New SDK model" }],
+ },
+ },
+ },
+ });
+
+ useAgentStatusesStore.getState().hydrateFromCache({ windows: [cached], wsl: [] });
+ useAgentStatusesStore.getState().setAgentStatuses([fresh]);
+
+ expect(
+ useAgentStatusesStore.getState().agentStatuses[0]?.runtimeVariants?.sdk?.capabilities.models,
+ ).toEqual([{ id: "new-sdk-model", label: "New SDK model" }]);
+ });
+
+ it("replaces the array when only session runtime routing changes", () => {
+ const cached = makeStatus({
+ sessionRuntimeRouting: { prefixes: { "sdk:": "sdk" }, fallbackRuntime: "acp" },
+ });
+ const fresh = makeStatus({
+ ...cached,
+ sessionRuntimeRouting: { prefixes: { "sdk:": "sdk", "acp:": "acp" } },
+ });
+
+ useAgentStatusesStore.getState().hydrateFromCache({ windows: [cached], wsl: [] });
+ useAgentStatusesStore.getState().setAgentStatuses([fresh]);
+
+ expect(useAgentStatusesStore.getState().agentStatuses[0]?.sessionRuntimeRouting).toEqual({
+ prefixes: { "sdk:": "sdk", "acp:": "acp" },
+ });
+ });
+
it("replaces the array when only supportsOneShot flips (post-upgrade flag backfill)", () => {
// A status persisted before the flag existed lacks supportsOneShot; the
// freshly-detected one sets it. The store must adopt the fresh status so the
diff --git a/src/renderer/state/agentStatusesStore.ts b/src/renderer/state/agentStatusesStore.ts
index e15a1ead5..40d18a2ad 100644
--- a/src/renderer/state/agentStatusesStore.ts
+++ b/src/renderer/state/agentStatusesStore.ts
@@ -2,6 +2,7 @@ import { create } from "zustand";
import { createJSONStorage, persist } from "zustand/middleware";
import {
areAgentSlashCommandsEqual,
+ areAgentPresentationRuntimeFieldsEqual,
areAgentProviderMetadataEqual,
type AgentStatus,
type ProjectLocation,
@@ -59,6 +60,12 @@ function capabilitiesEqual(
a: AgentStatus["capabilities"],
b: AgentStatus["capabilities"],
): boolean {
+ if (
+ JSON.stringify(a.presentationCapabilities ?? {}) !==
+ JSON.stringify(b.presentationCapabilities ?? {})
+ ) {
+ return false;
+ }
if (a.models.length !== b.models.length) return false;
if (a.efforts.length !== b.efforts.length) return false;
for (let i = 0; i < a.models.length; i++) {
@@ -86,6 +93,7 @@ function statusesEqual(a: AgentStatus[], b: AgentStatus[]): boolean {
x.icon === b[i]!.icon &&
x.version === b[i]!.version &&
x.authState === b[i]!.authState &&
+ areAgentPresentationRuntimeFieldsEqual(x, b[i]!) &&
x.loginCommand === b[i]!.loginCommand &&
x.envKind === b[i]!.envKind &&
x.envDistro === b[i]!.envDistro &&
@@ -238,9 +246,10 @@ export const useAgentStatusesStore = create()(
}),
{
name: "poracode-agent-statuses-v1",
- version: 3,
- // v3 adds structured skill command metadata. Drop older cached statuses
- // so enabled skills are not hidden until the next manual provider refresh.
+ version: 5,
+ // v5 adds independently cached runtime variants. Drop older cached
+ // statuses so an existing thread cannot inherit whichever GUI runtime is
+ // currently the provider default.
// Mirrors the supervisor STATUS_CACHE_VERSION bump, which only invalidates
// the supervisor's on-disk cache, not this renderer localStorage copy.
migrate: (persisted) => {
diff --git a/src/renderer/state/loginTerminalStore.ts b/src/renderer/state/loginTerminalStore.ts
index f124313fc..d354a9354 100644
--- a/src/renderer/state/loginTerminalStore.ts
+++ b/src/renderer/state/loginTerminalStore.ts
@@ -16,7 +16,7 @@ export interface LoginTerminalSession {
label: string;
projectLocation: ProjectLocation;
/** Drives the overlay header copy. Defaults to "login". */
- purpose?: "login" | "install";
+ purpose?: "login" | "install" | "update";
onForceClose?: () => void;
/** Set when the command exits non-zero so the overlay can render a failed state. */
failedExitCode?: number;
diff --git a/src/renderer/state/slices/agentStatusesSlice.ts b/src/renderer/state/slices/agentStatusesSlice.ts
index 8c65a3c0a..e8c920097 100644
--- a/src/renderer/state/slices/agentStatusesSlice.ts
+++ b/src/renderer/state/slices/agentStatusesSlice.ts
@@ -1,5 +1,9 @@
import type { StateCreator } from "zustand";
-import { areAgentProviderMetadataEqual, type AgentStatus } from "@/shared/contracts";
+import {
+ areAgentPresentationRuntimeFieldsEqual,
+ areAgentProviderMetadataEqual,
+ type AgentStatus,
+} from "@/shared/contracts";
export interface AgentStatusesSlice {
agentStatuses: AgentStatus[];
@@ -17,6 +21,7 @@ function statusesEqual(a: AgentStatus[], b: AgentStatus[]): boolean {
x.icon === b[i]!.icon &&
x.version === b[i]!.version &&
x.authState === b[i]!.authState &&
+ areAgentPresentationRuntimeFieldsEqual(x, b[i]!) &&
x.loginCommand === b[i]!.loginCommand &&
areAgentProviderMetadataEqual(x.providerMetadata, b[i]!.providerMetadata),
);
diff --git a/src/renderer/state/usageRecorder.ts b/src/renderer/state/usageRecorder.ts
index 48eeb1919..d9211c4be 100644
--- a/src/renderer/state/usageRecorder.ts
+++ b/src/renderer/state/usageRecorder.ts
@@ -117,10 +117,10 @@ function metaOf(thread: Thread): Meta {
// profiles of the same provider is counted separately. The global rollup
// folds to the base provider at read time.
provider: thread.agentKind,
- model: thread.config.model ?? null,
+ model: thread.config?.model ?? null,
mode: thread.presentationMode === "gui" ? "chat" : "cli",
- fast: thread.config.fast === true,
- effort: thread.config.effort ?? null,
+ fast: thread.config?.fast === true,
+ effort: thread.config?.effort ?? null,
};
}
diff --git a/src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx b/src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
index 5c1648b05..df71c09d5 100644
--- a/src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
+++ b/src/renderer/views/LoginTerminalOverlay/LoginTerminalOverlay.tsx
@@ -97,7 +97,8 @@ export function LoginTerminalOverlay() {
if (!renderedSession) return null;
const isInstall = renderedSession.purpose === "install";
- const purposeNoun = isInstall ? t`install` : t`login`;
+ const isUpdate = renderedSession.purpose === "update";
+ const purposeNoun = isInstall ? t`install` : isUpdate ? t`update` : t`login`;
return (
@@ -134,7 +135,9 @@ export function LoginTerminalOverlay() {
? t`Exited with code ${renderedSession.failedExitCode}. Close to retry.`
: isInstall
? t`Installing in this terminal. Closes when finished.`
- : t`Complete the prompts in this terminal. Closes when finished.`}
+ : isUpdate
+ ? t`Updating in this terminal. Closes when finished.`
+ : t`Complete the prompts in this terminal. Closes when finished.`}
+
+ Install ACP, SDK, or both, then choose which runtime starts new Cursor GUI chats.
+ Existing chats stay pinned to the runtime that created them.
+
+