Files
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

800 lines
35 KiB
TypeScript

import { useMemo } from "react";
import type { WorkspaceFileReferenceCopy } from "@tutti-os/workspace-file-reference/contracts";
import type { TranslateFn } from "../../i18n/index";
import {
agentGUIProviderIdentityDisplayName,
resolveAgentGUIProviderCatalogIdentity
} from "../../providerIdentityCatalog";
import type { AgentMessageMarkdownWorkspaceAppIcon } from "../../shared/AgentMessageMarkdown";
import type { AgentGUIHomeSuggestionId } from "../../types";
import { resolveAgentGUIProviderDisplayLabel } from "./model/agentGuiProviderIdentity";
import { buildAgentHomeSuggestions } from "./model/agentHomeSuggestions";
import type { AgentGUIViewLabels } from "./AgentGUINodeView";
import {
agentGUIConversationRailLabels,
type AgentGUIConversationRailLabels
} from "./view/agentGUIConversationRailLabels";
import { agentGUIProviderManagerLabels } from "./view/agentGUIProviderManagerLabels";
import { agentGUIUsageStatusLabels } from "./view/agentGUIUsageStatusLabels";
import { agentQuickPromptLabels } from "./composer/quickPrompts/agentQuickPromptLabels";
import { agentSlashPaletteLabels } from "./composer/agentSlashPaletteLabels";
import { agentGUIProjectLaunchLabels } from "./composer/agentGUIProjectLaunchLabels";
import { agentGUITuttiModeLabels } from "./view/agentGUITuttiModeLabels";
import { agentGUIConnectorLabels } from "./composer/agentGUIConnectorLabels";
export { buildAgentHomeSuggestions };
export function useAgentGUIConversationRailLabels(
t: TranslateFn
): AgentGUIConversationRailLabels {
return useMemo(() => agentGUIConversationRailLabels(t), [t]);
}
const workspaceFileReferenceLocaleKeyByPickerKey: Record<string, string> = {
"actions.cancel": "common.cancel",
"directoryPicker.confirm": "agentHost.agentGui.directoryPicker.confirm",
"directoryPicker.emptySearch":
"agentHost.agentGui.directoryPicker.emptySearch",
"directoryPicker.searchPlaceholder":
"agentHost.agentGui.directoryPicker.searchPlaceholder",
"directoryPicker.title": "agentHost.agentGui.directoryPicker.title",
"referencePicker.confirm": "agentHost.agentGui.referencePicker.confirm",
"referencePicker.clearFilter":
"agentHost.agentGui.referencePicker.clearFilter",
"referencePicker.emptyDirectory":
"agentHost.agentGui.referencePicker.emptyDirectory",
"referencePicker.emptyPreview":
"agentHost.agentGui.referencePicker.emptyPreview",
"referencePicker.emptySearch":
"agentHost.agentGui.referencePicker.emptySearch",
"referencePicker.fileTypeAll":
"agentHost.agentGui.referencePicker.fileTypeAll",
"referencePicker.fileTypeDocument":
"agentHost.agentGui.referencePicker.fileTypeDocument",
"referencePicker.fileTypeImage":
"agentHost.agentGui.referencePicker.fileTypeImage",
"referencePicker.fileTypeOther":
"agentHost.agentGui.referencePicker.fileTypeOther",
"referencePicker.fileTypeSeparator":
"agentHost.agentGui.referencePicker.fileTypeSeparator",
"referencePicker.fileTypeVideo":
"agentHost.agentGui.referencePicker.fileTypeVideo",
"referencePicker.fileTypeWebpage":
"agentHost.agentGui.referencePicker.fileTypeWebpage",
"referencePicker.loadMore": "agentHost.agentGui.referencePicker.loadMore",
"referencePicker.loadMoreGroups":
"agentHost.agentGui.referencePicker.loadMoreGroups",
"referencePicker.loading": "agentHost.agentGui.referencePicker.loading",
"referencePicker.loadError": "agentHost.agentGui.referencePicker.loadError",
"referencePicker.previewBinary":
"agentHost.agentGui.referencePicker.previewBinary",
"referencePicker.previewDecodeFailed":
"agentHost.agentGui.referencePicker.previewDecodeFailed",
"referencePicker.previewError":
"agentHost.agentGui.referencePicker.previewError",
"referencePicker.previewFileTooLarge":
"agentHost.agentGui.referencePicker.previewFileTooLarge",
"referencePicker.previewFolder":
"agentHost.agentGui.referencePicker.previewFolder",
"referencePicker.previewHierarchy":
"agentHost.agentGui.referencePicker.previewHierarchy",
"referencePicker.previewLoading":
"agentHost.agentGui.referencePicker.previewLoading",
"referencePicker.previewModified":
"agentHost.agentGui.referencePicker.previewModified",
"referencePicker.previewSize":
"agentHost.agentGui.referencePicker.previewSize",
"referencePicker.previewSource":
"agentHost.agentGui.referencePicker.previewSource",
"referencePicker.previewTextTooLarge":
"agentHost.agentGui.referencePicker.previewTextTooLarge",
"referencePicker.previewTooLarge":
"agentHost.agentGui.referencePicker.previewTooLarge",
"referencePicker.previewUnavailable":
"agentHost.agentGui.referencePicker.previewUnavailable",
"referencePicker.previewUnsupported":
"agentHost.agentGui.referencePicker.previewUnsupported",
"referencePicker.searchPlaceholder":
"agentHost.agentGui.referencePicker.searchPlaceholder",
"referencePicker.selectGroupHint":
"agentHost.agentGui.referencePicker.selectGroupHint",
"referencePicker.selectedCount":
"agentHost.agentGui.referencePicker.selectedCount",
"referencePicker.sourceColumn":
"agentHost.agentGui.referencePicker.sourceColumn",
"referencePicker.title": "agentHost.agentGui.referencePicker.title"
};
export function useAgentGUIViewLabels(input: {
disabledHomeSuggestions?: readonly AgentGUIHomeSuggestionId[];
displayProviderLabel: string;
fallbackAgentTitle: string;
t: TranslateFn;
workspaceAppIcons: readonly AgentMessageMarkdownWorkspaceAppIcon[];
workspaceId: string;
}): AgentGUIViewLabels {
const {
disabledHomeSuggestions,
displayProviderLabel,
fallbackAgentTitle,
t,
workspaceAppIcons,
workspaceId
} = input;
return useMemo<AgentGUIViewLabels>(() => {
const providerInterpolation = { provider: displayProviderLabel };
return {
initialPlaceholder: t(
"agentHost.agentGui.initialPlaceholder",
providerInterpolation
),
followupPlaceholder: t(
"agentHost.agentGui.followupPlaceholder",
providerInterpolation
),
installRequiredPlaceholder: t(
"agentHost.agentGui.installRequiredPlaceholder",
providerInterpolation
),
installRequiredAction: t("agentHost.agentGui.installRequiredAction"),
providerGateCheckingTitle: t(
"agentHost.agentGui.providerGateCheckingTitle"
),
providerGateCheckingDescription: t(
"agentHost.agentGui.providerGateCheckingDescription",
providerInterpolation
),
providerGateCheckingAgentsDescription: t(
"agentHost.agentGui.providerGateCheckingAgentsDescription"
),
providerGateInstallTitle: t(
"agentHost.agentGui.providerGateInstallTitle",
providerInterpolation
),
providerGateInstallDescription: t(
"agentHost.agentGui.providerGateInstallDescription",
providerInterpolation
),
providerGateInstallAction: t(
"agentHost.agentGui.providerGateInstallAction"
),
providerGateLoginTitle: t(
"agentHost.agentGui.providerGateLoginTitle",
providerInterpolation
),
providerGateLoginDescription: t(
"agentHost.agentGui.providerGateLoginDescription",
providerInterpolation
),
providerGateLoginAction: t("agentHost.agentGui.providerGateLoginAction"),
providerGateModelPlanAction: t(
"agentHost.agentGui.providerGateModelPlanAction"
),
providerGateComingSoonTitle: t(
"agentHost.agentGui.providerGateComingSoonTitle",
providerInterpolation
),
providerGateComingSoonDescription: t(
"agentHost.agentGui.providerGateComingSoonDescription",
providerInterpolation
),
providerGateComingSoonAction: t(
"agentHost.agentGui.providerGateComingSoonAction"
),
providerGateUnavailableTitle: t(
"agentHost.agentGui.providerGateUnavailableTitle",
providerInterpolation
),
providerGateUnavailableDescription: t(
"agentHost.agentGui.providerGateUnavailableDescription",
providerInterpolation
),
providerGateRetryAction: t("agentHost.agentGui.providerGateRetryAction"),
providerGateRuntimeSelectionTitle: t(
"agentHost.agentGui.providerGateRuntimeSelectionTitle",
providerInterpolation
),
providerGateRuntimeSelectionDescription: t(
"agentHost.agentGui.providerGateRuntimeSelectionDescription",
providerInterpolation
),
providerGateRuntimeSelectionAction: t(
"agentHost.agentGui.providerGateRuntimeSelectionAction"
),
providerGatePendingInstall: t(
"agentHost.agentGui.providerGatePendingInstall"
),
providerGatePendingLogin: t(
"agentHost.agentGui.providerGatePendingLogin"
),
providerGatePendingRefresh: t(
"agentHost.agentGui.providerGatePendingRefresh"
),
collaboratorSessionReadOnlyPlaceholder: t(
"agentHost.agentGui.collaboratorSessionReadOnlyPlaceholder"
),
send: t("agentHost.agentGui.send"),
modelLabel: t("agentHost.agentGui.modelLabel"),
modelSelectionLabel: t("agentHost.agentGui.modelSelectionLabel"),
modelContextWindowSuffix: t(
"agentHost.agentGui.modelContextWindowSuffix"
),
modelTooltipVersionLabel: t(
"agentHost.agentGui.modelTooltipVersionLabel"
),
defaultModel: t("agentHost.agentGui.defaultModel"),
loadingOptions: t("agentHost.agentGui.loadingOptions"),
composerOptionsLoadFailed: t(
"agentHost.agentGui.composerOptionsLoadFailed"
),
composerOptionsRetry: t("agentHost.agentGui.composerOptionsRetry"),
composerOptionsRetryTooltip: t(
"agentHost.agentGui.composerOptionsRetryTooltip"
),
inheritedUnavailable: t("agentHost.agentGui.inheritedUnavailable"),
reasoningLabel: t("agentHost.agentGui.reasoningLabel"),
reasoningDegreeLabel: t("agentHost.agentGui.reasoningDegreeLabel"),
reasoningOptionDefault: t("agentHost.agentGui.reasoningOptionDefault"),
reasoningOptionMinimal: t("agentHost.agentGui.reasoningOptionMinimal"),
reasoningOptionLow: t("agentHost.agentGui.reasoningOptionLow"),
reasoningOptionMedium: t("agentHost.agentGui.reasoningOptionMedium"),
reasoningOptionHigh: t("agentHost.agentGui.reasoningOptionHigh"),
reasoningOptionXHigh: t("agentHost.agentGui.reasoningOptionXHigh"),
reasoningOptionMax: t("agentHost.agentGui.reasoningOptionMax"),
reasoningOptionUltra: t("agentHost.agentGui.reasoningOptionUltra"),
speedLabel: t("agentHost.agentGui.speedLabel"),
speedSelectionLabel: t("agentHost.agentGui.speedSelectionLabel"),
speedOptionStandard: t("agentHost.agentGui.speedOptionStandard"),
speedOptionStandardDescription: t(
"agentHost.agentGui.speedOptionStandardDescription"
),
speedOptionFast: t("agentHost.agentGui.speedOptionFast"),
speedOptionFastDescription: t(
"agentHost.agentGui.speedOptionFastDescription"
),
permissionLabel: t("agentHost.agentGui.permissionLabel"),
permissionModeReadOnly: t("agentHost.agentGui.permissionModeReadOnly"),
permissionModeAuto: t("agentHost.agentGui.permissionModeAuto"),
permissionModeFullAccess: t(
"agentHost.agentGui.permissionModeFullAccess"
),
permissionModeChangeUnavailableDuringTurn: t(
"agentHost.agentGui.permissionModeChangeUnavailableDuringTurn"
),
modelDescriptions: {
frontierComplexCoding: t(
"agentHost.agentGui.modelDescriptions.frontierComplexCoding"
),
everydayCoding: t(
"agentHost.agentGui.modelDescriptions.everydayCoding"
),
smallFastCostEfficient: t(
"agentHost.agentGui.modelDescriptions.smallFastCostEfficient"
),
codingOptimized: t(
"agentHost.agentGui.modelDescriptions.codingOptimized"
),
ultraFastCoding: t(
"agentHost.agentGui.modelDescriptions.ultraFastCoding"
),
professionalLongRunning: t(
"agentHost.agentGui.modelDescriptions.professionalLongRunning"
)
},
planModeLabel: t("agentHost.agentGui.planModeLabel"),
codexSaverModeLabel: t("agentHost.agentGui.codexSaverModeLabel"),
codexSaverModeDescription: t(
"agentHost.agentGui.codexSaverModeDescription"
),
rtkSaverModeLabel: t("agentHost.agentGui.rtkSaverModeLabel"),
rtkSaverModeDescription: t("agentHost.agentGui.rtkSaverModeDescription"),
normalModeLabel: t("agentHost.agentGui.normalModeLabel"),
normalModeDescription: t("agentHost.agentGui.normalModeDescription"),
...agentGUITuttiModeLabels(t),
planModeDescription: t("agentHost.agentGui.planModeDescription"),
planModeOnLabel: t("agentHost.agentGui.planModeOnLabel"),
planModeOffLabel: t("agentHost.agentGui.planModeOffLabel"),
planUnavailable: t("agentHost.agentGui.planUnavailable"),
queuedLabel: t("agentHost.agentGui.queuedLabel"),
queuePausedByUserLabel: t("agentHost.agentGui.queuePausedByUserLabel"),
sendQueuedPromptNext: t("agentHost.agentGui.sendQueuedPromptNext"),
editQueuedPrompt: t("agentHost.agentGui.editQueuedPrompt"),
deleteQueuedPrompt: t("agentHost.agentGui.deleteQueuedPrompt"),
queuedPromptMoreActions: t("agentHost.agentGui.queuedPromptMoreActions"),
stop: t("agentHost.agentGui.stop"),
stopping: t("agentHost.agentGui.stopping"),
slashStatusTitle: t("agentHost.agentGui.slashStatusTitle"),
slashStatusSession: t("agentHost.agentGui.slashStatusSession"),
slashStatusBaseUrl: t("agentHost.agentGui.slashStatusBaseUrl"),
slashStatusContext: t("agentHost.agentGui.slashStatusContext"),
slashStatusLimits: t("agentHost.agentGui.slashStatusLimits"),
slashStatusAccount: t("agentHost.agentGui.slashStatusAccount"),
slashStatusProviderAccount: (provider: string) => {
const identity = resolveAgentGUIProviderCatalogIdentity(provider);
if (!identity) {
return null;
}
return t("agentHost.agentGui.slashStatusProviderAccount", {
provider: agentGUIProviderIdentityDisplayName(identity, t)
});
},
slashStatusClose: t("agentHost.agentGui.slashStatusClose"),
slashStatusContextValue: (input: {
percentLeft: number;
usedTokens: string;
totalTokens: string;
}) =>
t("agentHost.agentGui.slashStatusContextValue", {
percentLeft: input.percentLeft,
usedTokens: input.usedTokens,
totalTokens: input.totalTokens
}),
slashStatusContextUnavailable: t(
"agentHost.agentGui.slashStatusContextUnavailable"
),
slashStatusLimitsUnavailable: t(
"agentHost.agentGui.slashStatusLimitsUnavailable"
),
slashStatusEmptyValue: t("agentHost.agentGui.slashStatusEmptyValue"),
slashStatusUsageJustUpdated: t(
"agentHost.agentGui.slashStatusUsageJustUpdated"
),
slashStatusUsageMinutesAgo: (count: number) =>
t("agentHost.agentGui.slashStatusUsageMinutesAgo", { count }),
slashStatusUsageHoursAgo: (count: number) =>
t("agentHost.agentGui.slashStatusUsageHoursAgo", { count }),
slashStatusUsageUpdating: t(
"agentHost.agentGui.slashStatusUsageUpdating"
),
slashStatusUsageRefreshFailed: t(
"agentHost.agentGui.slashStatusUsageRefreshFailed"
),
slashStatusUsageRefreshAria: t(
"agentHost.agentGui.slashStatusUsageRefreshAria"
),
...agentGUIUsageStatusLabels(t),
usageChipLabel: (input: { percent: number }) =>
t("agentHost.agentGui.usageChipLabel", { percent: input.percent }),
usageTooltipLabel: t("agentHost.agentGui.usageTooltipLabel"),
usagePopoverTitle: t("agentHost.agentGui.usagePopoverTitle"),
usageContextWindowLabel: t("agentHost.agentGui.usageContextWindowLabel"),
usageTokensLabel: t("agentHost.agentGui.usageTokensLabel"),
usageLimitsLabel: t("agentHost.agentGui.usageLimitsLabel"),
usageCompactAction: t("agentHost.agentGui.usageCompactAction"),
planImplementationLead: t("agentHost.agentGui.planImplementationLead"),
planImplementationConfirm: t(
"agentHost.agentGui.planImplementationConfirm"
),
planImplementationFeedbackPlaceholder: t(
"agentHost.agentGui.planImplementationFeedbackPlaceholder"
),
planImplementationSend: t("agentHost.agentGui.planImplementationSend"),
planImplementationSkip: t("agentHost.agentGui.planImplementationSkip"),
noRunningResponse: t("agentHost.agentGui.noRunningResponse"),
empty: t("agentHost.agentGui.empty", providerInterpolation),
homeSuggestions: buildAgentHomeSuggestions(
t,
workspaceId,
workspaceAppIcons ?? [],
disabledHomeSuggestions
),
homeSuggestionsClose: t("agentHost.agentGui.homeSuggestionsClose"),
emptyForProvider: (provider: string) =>
t("agentHost.agentGui.empty", {
provider: resolveAgentGUIProviderDisplayLabel(
provider,
fallbackAgentTitle
)
}),
emptyProvider: displayProviderLabel,
emptyProviderForProvider: (provider: string) =>
resolveAgentGUIProviderDisplayLabel(provider, fallbackAgentTitle),
conversations: t("agentHost.agentGui.conversations"),
agentConfig: t("agentHost.agentGui.agentConfig"),
agentSettingsMenu: t("agentHost.agentGui.agentSettingsMenu"),
agentEnvSetup: t("agentHost.agentGui.agentEnvSetup"),
...agentGUIProviderManagerLabels(t),
...agentGUIConversationRailLabels(t),
conversationFilterAll: t("agentHost.agentGui.conversationFilterAll"),
conversationFilterCodex: t("agentHost.agentGui.conversationFilterCodex"),
conversationFilterClaudeCode: t(
"agentHost.agentGui.conversationFilterClaudeCode"
),
conversationFilterTutti: t("agentHost.agentGui.conversationFilterTutti"),
providerSwitchLabel: t("agentHost.agentGui.providerSwitchLabel"),
sharedAgentOwnerSeparator: t(
"agentHost.agentGui.sharedAgentOwnerSeparator"
),
loadingConversation: t("agentHost.agentGui.loadingConversation"),
continuedFromTask: t("agentHost.agentGui.continuedFromTask"),
selectionAddToConversation: t(
"agentHost.agentGui.selectionAddToConversation"
),
selectionAskInSide: t("agentHost.agentGui.selectionAskInSide"),
scrollToBottom: t("agentHost.agentGui.scrollToBottom"),
fallbackAgentTitle,
untitledConversationTitle: t(
"agentHost.workspaceAgentsUntitledConversation"
),
sectionToday: t("agentHost.agentGui.sectionToday"),
sectionYesterday: t("agentHost.agentGui.sectionYesterday"),
sectionEarlier: t("agentHost.agentGui.sectionEarlier"),
projectSectionEdit: t("agentHost.agentGui.projectSectionEdit"),
projectSectionMoreActions: t(
"agentHost.agentGui.projectSectionMoreActions"
),
projectSectionViewFiles: t("agentHost.agentGui.projectSectionViewFiles"),
pinProject: t("agentHost.agentGui.pinProject"),
unpinProject: t("agentHost.agentGui.unpinProject"),
pinnedProjectAccessibleName: (projectLabel: string) =>
t("agentHost.agentGui.pinnedProjectAccessibleName", {
project: projectLabel
}),
projectRailCreateProject: t(
"agentHost.agentGui.projectRailCreateProject"
),
projectRailLinkExistingProject: t(
"agentHost.agentGui.projectRailLinkExistingProject"
),
removeProject: t("agentHost.agentGui.removeProject"),
removeProjectConfirmDescription: (projectLabel: string) =>
t("agentHost.agentGui.removeProjectConfirmDescription", {
project: projectLabel
}),
removeProjectConfirmTitle: t(
"agentHost.agentGui.removeProjectConfirmTitle"
),
batchDeleteProjectSessions: t(
"agentHost.agentGui.batchDeleteProjectSessions"
),
batchDeleteProjectSessionsTitle: t(
"agentHost.agentGui.batchDeleteProjectSessionsTitle"
),
batchDeleteProjectSessionsBody: (count: number, project: string) =>
t("agentHost.agentGui.batchDeleteProjectSessionsBody", {
count,
project
}),
batchDeleteProjectSessionsConfirm: t(
"agentHost.agentGui.batchDeleteProjectSessionsConfirm"
),
conversationsSectionMoreActions: t(
"agentHost.agentGui.conversationsSectionMoreActions"
),
batchDeleteConversations: t(
"agentHost.agentGui.batchDeleteConversations"
),
batchDeleteConversationsTitle: t(
"agentHost.agentGui.batchDeleteConversationsTitle"
),
batchDeleteConversationsBody: (count: number) =>
t("agentHost.agentGui.batchDeleteConversationsBody", {
count
}),
batchDeleteConversationsConfirm: t(
"agentHost.agentGui.batchDeleteConversationsConfirm"
),
approvalRequired: t(
"agentHost.agentGui.approvalRequired",
providerInterpolation
),
fileChangeApprovalRequired: t(
"agentHost.agentGui.fileChangeApprovalRequired",
providerInterpolation
),
approvalUnavailable: t("agentHost.agentGui.approvalUnavailable"),
authRequired: t("agentHost.agentGui.authRequired"),
authLogin: t("agentHost.agentGui.authLogin"),
activatingSession: t("agentHost.agentGui.activatingSession"),
cancellingSession: t("agentHost.agentGui.cancellingSession"),
retryActivation: t("agentHost.agentGui.retryActivation"),
continueInNewConversation: t(
"agentHost.agentGui.continueInNewConversation"
),
goalLabel: t("agentHost.agentGui.goalLabel"),
goalTitleActive: t("agentHost.agentGui.goalTitleActive"),
goalTitlePaused: t("agentHost.agentGui.goalTitlePaused"),
goalTitleBlocked: t("agentHost.agentGui.goalTitleBlocked"),
goalTitleUsageLimited: t("agentHost.agentGui.goalTitleUsageLimited"),
goalTitleBudgetLimited: t("agentHost.agentGui.goalTitleBudgetLimited"),
goalTitleComplete: t("agentHost.agentGui.goalTitleComplete"),
goalBudgetUsage: (used: number, budget: number) =>
t("agentHost.agentGui.goalBudgetUsage", { used, budget }),
goalClearHint: t("agentHost.agentGui.goalClearHint"),
goalEditAction: t("agentHost.agentGui.goalEditAction"),
goalPauseAction: t("agentHost.agentGui.goalPauseAction"),
goalResumeAction: t("agentHost.agentGui.goalResumeAction"),
goalClearAction: t("agentHost.agentGui.goalClearAction"),
goalRemoved: t("agentHost.agentGui.goalRemoved"),
processing: t("agentHost.agentGui.processing"),
turnSummary: t("agentHost.agentGui.turnSummary"),
userMessageLocator: t("agentHost.agentGui.userMessageLocator"),
planLead: t("agentHost.agentGui.planLead"),
planModes: [
{
id: "acceptEdits",
label: t("agentHost.agentGui.planModes.acceptEdits.label"),
description: t("agentHost.agentGui.planModes.acceptEdits.description")
},
{
id: "default",
label: t("agentHost.agentGui.planModes.askFirst.label"),
description: t("agentHost.agentGui.planModes.askFirst.description")
},
{
id: "bypassPermissions",
label: t("agentHost.agentGui.planModes.allowAll.label"),
description: t("agentHost.agentGui.planModes.allowAll.description")
},
{
id: "auto",
label: t("agentHost.agentGui.planModes.auto.label"),
description: t("agentHost.agentGui.planModes.auto.description")
}
],
stayInPlan: t("agentHost.agentGui.stayInPlan"),
sendFeedback: t("agentHost.agentGui.sendFeedback"),
feedbackPlaceholder: t("agentHost.agentGui.feedbackPlaceholder"),
previousQuestion: t("agentHost.agentGui.previousQuestion"),
nextQuestion: t("agentHost.agentGui.nextQuestion"),
submitAnswers: t("agentHost.agentGui.submitAnswers"),
answerPlaceholder: t("agentHost.agentGui.answerPlaceholder"),
waitingForAnswer: t("agentHost.agentGui.waitingForAnswer"),
returnToConversation: t("agentHost.agentGui.returnToConversation"),
continueAnswering: t("agentHost.agentGui.continueAnswering"),
thinkingLabel: t("agentHost.workspaceAgentSessionDetailThinking"),
toolCallsLabel: (count: number) =>
t("agentHost.workspaceAgentSessionDetailToolCalls", { count }),
openConversationWindow: t("agentHost.agentGui.openConversationWindow"),
showMoreConversations: t("agentHost.agentGui.showMoreConversations"),
showLessConversations: t("agentHost.agentGui.showLessConversations"),
deleteSession: t("agentHost.agentGui.deleteSession"),
pinSession: t("agentHost.agentGui.pinSession"),
moreSessionActions: t("agentHost.agentGui.moreSessionActions"),
copyAsMarkdown: t("agentHost.agentGui.copyAsMarkdown"),
copyAsReference: t("agentHost.agentGui.copyAsReference"),
markSessionUnread: t("agentHost.agentGui.markSessionUnread"),
conversationCopyImage: t("agentHost.agentGui.conversationCopyImage"),
conversationCopyMentionPrefix: t(
"agentHost.agentGui.conversationCopyMentionPrefix"
),
conversationCopyFile: t("agentHost.agentGui.conversationCopyFile"),
// Template label; the serializer substitutes {{count}} itself, and the
// i18n runtime keeps the placeholder intact when t() gets no params.
conversationCopyPreviousMessages: t(
"agentHost.agentGui.conversationCopyPreviousMessages"
),
// Template label; the copy hook substitutes {{count}} itself.
conversationCopyImagesOmitted: t(
"agentHost.agentGui.conversationCopyImagesOmitted"
),
copiedToClipboard: t("agentHost.agentGui.messageCopied"),
copyFailed: t("common.copyFailed"),
sessionActionUnavailable: t(
"agentHost.agentGui.sessionActionUnavailable"
),
renameSession: t("agentHost.agentGui.renameSession"),
renameSessionTitle: t("agentHost.agentGui.renameSessionTitle"),
renameSessionDescription: t(
"agentHost.agentGui.renameSessionDescription"
),
renameSessionPlaceholder: t(
"agentHost.agentGui.renameSessionPlaceholder"
),
renameSessionSave: t("agentHost.agentGui.renameSessionSave"),
unpinSession: t("agentHost.agentGui.unpinSession"),
deleteSessionTitle: t("agentHost.agentGui.deleteSessionTitle"),
deleteSessionBody: t("agentHost.agentGui.deleteSessionBody"),
deleteSessionConfirm: t("agentHost.agentGui.deleteSessionConfirm"),
conversationRailResizeAria: t(
"agentHost.agentGui.conversationRailResizeAria"
),
relativeTimeJustNow: t("agentHost.agentGui.relativeTimeJustNow"),
relativeTimeMinutes: (count: number) =>
t("agentHost.agentGui.relativeTimeMinutes", { count }),
relativeTimeHours: (count: number) =>
t("agentHost.agentGui.relativeTimeHours", { count }),
relativeTimeDays: (count: number) =>
t("agentHost.agentGui.relativeTimeDays", { count }),
relativeTimeMonths: (count: number) =>
t("agentHost.agentGui.relativeTimeMonths", { count }),
relativeTimeYears: (count: number) =>
t("agentHost.agentGui.relativeTimeYears", { count }),
syncPending: t("agentHost.agentGui.syncPending"),
syncSynced: t("agentHost.agentGui.syncSynced"),
syncFailed: t("agentHost.agentGui.syncFailed"),
...agentGUIProjectLaunchLabels(t),
promptTipsPrefix: t("agentHost.agentGui.promptTipsPrefix"),
reviewPicker: {
title: t("agentHost.agentGui.reviewPicker.title"),
targetLabel: t("agentHost.agentGui.reviewPicker.targetLabel"),
searchPlaceholder: t(
"agentHost.agentGui.reviewPicker.searchPlaceholder"
),
noResults: t("agentHost.agentGui.reviewPicker.noResults"),
uncommitted: t("agentHost.agentGui.reviewPicker.uncommitted"),
baseBranch: t("agentHost.agentGui.reviewPicker.baseBranch"),
commit: t("agentHost.agentGui.reviewPicker.commit"),
custom: t("agentHost.agentGui.reviewPicker.custom"),
branchLabel: t("agentHost.agentGui.reviewPicker.branchLabel"),
branchPlaceholder: t(
"agentHost.agentGui.reviewPicker.branchPlaceholder"
),
branchLoading: t("agentHost.agentGui.reviewPicker.branchLoading"),
branchEmpty: t("agentHost.agentGui.reviewPicker.branchEmpty"),
commitPlaceholder: t(
"agentHost.agentGui.reviewPicker.commitPlaceholder"
),
customPlaceholder: t(
"agentHost.agentGui.reviewPicker.customPlaceholder"
),
submit: t("agentHost.agentGui.reviewPicker.submit"),
cancel: t("agentHost.agentGui.reviewPicker.cancel")
},
quickPrompts: agentQuickPromptLabels(t),
promptTips: [
{
id: "set-workspace",
label: t("agentHost.agentGui.promptTips.setWorkspace.label"),
prompt: t("agentHost.agentGui.promptTips.setWorkspace.prompt")
},
{
id: "use-issue",
label: t("agentHost.agentGui.promptTips.useIssue.label"),
prompt: t("agentHost.agentGui.promptTips.useIssue.prompt")
},
{
id: "map-current-state",
label: t("agentHost.agentGui.promptTips.mapCurrentState.label"),
prompt: t("agentHost.agentGui.promptTips.mapCurrentState.prompt")
},
{
id: "continue-recent-session",
label: t("agentHost.agentGui.promptTips.continueRecentSession.label"),
prompt: t(
"agentHost.agentGui.promptTips.continueRecentSession.prompt"
)
},
{
id: "reference-other-agents",
label: t("agentHost.agentGui.promptTips.referenceOtherAgents.label"),
prompt: t("agentHost.agentGui.promptTips.referenceOtherAgents.prompt")
},
{
id: "control-permissions",
label: t("agentHost.agentGui.promptTips.controlPermissions.label"),
prompt: t("agentHost.agentGui.promptTips.controlPermissions.prompt")
}
],
cancel: t("common.cancel"),
...agentSlashPaletteLabels(t),
slashCommandCompactLabel: t(
"agentHost.agentGui.slashCommandCompactLabel"
),
slashCommandContextLabel: t(
"agentHost.agentGui.slashCommandContextLabel"
),
slashCommandFastLabel: t("agentHost.agentGui.slashCommandFastLabel"),
slashCommandGoalLabel: t("agentHost.agentGui.slashCommandGoalLabel"),
slashCommandInitLabel: t("agentHost.agentGui.slashCommandInitLabel"),
slashCommandPlanLabel: t("agentHost.agentGui.slashCommandPlanLabel"),
slashCommandReviewLabel: t("agentHost.agentGui.slashCommandReviewLabel"),
slashCommandStatusLabel: t("agentHost.agentGui.slashCommandStatusLabel"),
slashCommandUsageLabel: t("agentHost.agentGui.slashCommandUsageLabel"),
slashCommandCompactDescription: t(
"agentHost.agentGui.slashCommandCompactDescription"
),
slashCommandContextDescription: t(
"agentHost.agentGui.slashCommandContextDescription"
),
slashCommandFastDescription: t(
"agentHost.agentGui.slashCommandFastDescription"
),
slashCommandGoalDescription: t(
"agentHost.agentGui.slashCommandGoalDescription"
),
slashCommandInitDescription: t(
"agentHost.agentGui.slashCommandInitDescription"
),
slashCommandPlanDescription: t(
"agentHost.agentGui.slashCommandPlanDescription"
),
slashCommandReviewDescription: t(
"agentHost.agentGui.slashCommandReviewDescription"
),
slashCommandStatusDescription: t(
"agentHost.agentGui.slashCommandStatusDescription"
),
slashCommandUsageDescription: t(
"agentHost.agentGui.slashCommandUsageDescription"
),
browserUseCapabilityLabel: t(
"agentHost.agentGui.browserUseCapabilityLabel"
),
browserUseCapabilityDescription: t(
"agentHost.agentGui.browserUseCapabilityDescription"
),
browserUseCapabilityDescriptionAutoConnect: t(
"agentHost.agentGui.browserUseCapabilityDescriptionAutoConnect"
),
browserUseCapabilityDescriptionIsolated: t(
"agentHost.agentGui.browserUseCapabilityDescriptionIsolated"
),
browserUseCapabilitySettingsLabel: t(
"agentHost.agentGui.browserUseCapabilitySettingsLabel"
),
browserUseCapabilitySettingsDescription: t(
"agentHost.agentGui.browserUseCapabilitySettingsDescription"
),
capabilityInlineSettingsLabel: t(
"agentHost.agentGui.capabilityInlineSettingsLabel"
),
computerUseCapabilityLabel: t(
"agentHost.agentGui.computerUseCapabilityLabel"
),
computerUseCapabilityDescription: t(
"agentHost.agentGui.computerUseCapabilityDescription"
),
computerUseCapabilitySetupRequiredDescription: t(
"agentHost.agentGui.computerUseCapabilitySetupRequiredDescription"
),
computerUseCapabilityAuthorizationRequiredDescription: t(
"agentHost.agentGui.computerUseCapabilityAuthorizationRequiredDescription"
),
computerUseCapabilityAuthorizationUnknownDescription: t(
"agentHost.agentGui.computerUseCapabilityAuthorizationUnknownDescription"
),
computerUseCapabilitySettingsLabel: t(
"agentHost.agentGui.computerUseCapabilitySettingsLabel"
),
computerUseCapabilitySettingsDescription: t(
"agentHost.agentGui.computerUseCapabilitySettingsDescription"
),
fileMentionPalette: t("agentHost.agentGui.fileMentionPalette"),
fileMentionLoading: t("agentHost.agentGui.fileMentionLoading"),
fileMentionEmpty: t("agentHost.agentGui.fileMentionEmpty"),
fileMentionError: t("agentHost.agentGui.fileMentionError"),
fileMentionTabHint: t("agentHost.agentGui.fileMentionTabHint"),
fileDropHint: t("agentHost.agentGui.fileDropHint"),
mentionPalette: t("agentHost.agentGui.mentionPalette"),
removeMention: t("common.remove"),
addReference: t("agentHost.agentGui.addReference"),
addContent: t("agentHost.agentGui.addContent"),
addContentResourcePanel: t("agentHost.agentGui.addContentResourcePanel"),
...agentGUIConnectorLabels(t),
referenceWorkspaceFiles: t("agentHost.issue.referenceWorkspaceFiles"),
handoffConversation: t("agentHost.agentGui.handoffConversation"),
handoffConversationTooltip: t(
"agentHost.agentGui.handoffConversationTooltip"
),
handoffConversationMenu: t("agentHost.agentGui.handoffConversationMenu"),
handoffTargetDeviceSource: (deviceLabel: string) =>
t("agentHost.agentGui.handoffTargetDeviceSource", {
device: deviceLabel
}),
handoffTargetSelf: t("agentHost.agentGui.handoffTargetSelf"),
handoffTargetShared: t("agentHost.agentGui.handoffTargetShared")
};
}, [
displayProviderLabel,
disabledHomeSuggestions,
fallbackAgentTitle,
t,
workspaceId,
workspaceAppIcons
]);
}
export function useAgentGUIWorkspaceFileReferenceCopy(
t: TranslateFn
): WorkspaceFileReferenceCopy {
return useMemo<WorkspaceFileReferenceCopy>(
() => ({
t(key, values) {
const localeKey = workspaceFileReferenceLocaleKeyByPickerKey[key];
return localeKey ? t(localeKey, values) : key;
}
}),
[t]
);
}