agent-Specialization/static/src/locales/en-US/personalization.ts
JOJO c76431a8f1 feat(tools): 网页提取白名单直提 + recall 记忆纳入已读文件
- extract_webpage/save_webpage 命中白名单域名时本机直提:GitHub 代码页走
  jsDelivr CDN 直链(备 GitHub API),其余白名单页用 trafilatura 正文识别,
  失败自动回退 Tavily;内置白名单 github.com,个人空间可关闭/追加域名
- trafilatura 进 requirements(可选依赖,缺失时静默降级全走 Tavily)
- recall_project_memory 返回记忆全文后标记为已读,可直接 edit_file

Co-authored-by: Astrion powered by Kimi-K3 <astrion-agent@users.noreply.github.com>
2026-09-12 11:30:38 +08:00

401 lines
22 KiB
TypeScript

// Locale namespace: personalization (en-US mirror, keys must match zh-CN/personalization.ts exactly).
// Used by: static/src/components/personalization/PersonalizationDrawer.vue
export default {
// ── Personal space drawer: chrome ──
closePersonalSpaceAriaLabel: 'Close personal space',
tabAriaLabel: 'Switch personal space sections',
loadingPersonalization: 'Loading personalization settings...',
// ── Tabs ──
tabGeneral: 'General',
tabPreferences: 'Personalization',
tabModel: 'Model & Thinking',
tabAppearance: 'Appearance & Display',
tabWorkspace: 'Workspace & Permissions',
tabContext: 'Context',
tabTools: 'Tools & Skills',
tabFiles: 'Files & Images',
tabVoice: 'Voice Model',
tabSubAgents: 'Sub-agents',
tabReviewAgents: 'Review Agents',
tabAdmin: 'Admin',
// ── General ──
autoTitleTitle: 'Auto-generate conversation titles',
autoTitleDesc: 'On by default; when off, the title uses the first message',
tutorialTitle: 'Getting started',
tutorialDesc: 'Learn key features and common settings through highlights and callouts',
tutorialButton: 'Start tutorial',
appUpdateTitle: 'App updates',
appUpdateDesc: 'Current version: {version} · {checked}',
appCheckUpdate: 'Check for updates',
appChecking: 'Checking...',
appVersionUnknown: 'Unknown',
appUpdateNotChecked: 'Not checked',
appUpdateFound: 'New version available',
appUpdateLatest: 'Up to date',
appUpdateNeverChecked: 'Not checked yet',
appUpdateJustChecked: 'Just checked',
appUpdateCheckedAt: 'Last checked: {time}',
appUpdateFailed: 'Failed to check for updates',
appUpdateNoUrl: 'No download URL available',
logoutTitle: 'Sign out',
logoutDesc: 'End the current account session',
// ── Personalization ──
preferencesTitle: 'Enable personalized prompts',
preferencesDesc: 'Your preferences are only injected when enabled',
selfIdentifyTitle: "AI agent's name",
selfIdentifyPlaceholder: 'e.g. Nova, Assistant A',
userNameTitle: 'What to call you',
userNamePlaceholder: 'e.g. Jojo, Teacher',
professionTitle: 'Profession',
professionPlaceholder: 'e.g. Product manager, Designer',
toneTitle: 'Tone',
tonePlaceholder: 'Choose or type a tone',
considerationsTitle: 'Always consider',
considerationsDesc: 'Referenced as background before every answer',
considerationsPlaceholder: 'e.g. The user owns a brown male teddy dog since 2014...',
hideBlockBordersTitle: 'Hide block borders',
hideBlockBordersDesc: 'Remove dividers between stacked blocks for a cleaner look',
minimalExpandHeightTitle: 'Limit expanded height',
minimalExpandHeightDesc: 'In minimal mode, cap the height when expanding the summary line; scroll inside if it overflows',
communicationStyleTitle: 'Communication style',
communicationStyleDesc: 'How the agent communicates with you',
communicationDefault: 'Default',
communicationDefaultDesc: 'Standard AI style',
communicationHumanLike: 'Human-like',
communicationHumanLikeDesc: 'Mimics natural human conversation',
communicationAuto: 'Auto',
communicationAutoDesc: 'Natural in chat; structured answers for complex questions',
conversationContinuityTitle: 'Conversation continuity',
conversationContinuityDesc: 'How strongly the agent continues past conversations and memory',
continuityHigh: 'High',
continuityHighDesc: 'Actively follows up on history, memory and project context',
continuityMedium: 'Medium',
continuityMediumDesc: 'Prioritizes the current conversation; references history when needed',
continuityLow: 'Low',
continuityLowDesc: 'Keeps conversations independent; rarely looks at history',
// ── Model & Thinking ──
defaultModelTitle: 'Default model',
defaultModelDesc: 'Preferred model for new conversations and the first request after sign-in',
modelDisabled: 'Disabled by administrator',
defaultThinkingModeTitle: 'Default thinking mode',
defaultThinkingModeDesc: 'Initial thinking mode on sign-in or when starting a new task',
reasoningEffortTitle: 'Default reasoning effort',
reasoningEffortDesc: 'Reasoning effort level attached to model requests in thinking mode',
runModeFast: 'Fast mode',
runModeFastDesc: 'Prioritizes speed, skips the thinking model',
runModeThinking: 'Thinking mode',
runModeThinkingDesc: 'Uses the thinking model for the whole conversation',
effortDefault: 'Default',
effortDefaultDesc: 'No effort specified, uses API default',
effortLow: 'Low',
effortLowDesc: 'Lowest reasoning, fastest responses',
effortMedium: 'Medium',
effortMediumDesc: 'Light reasoning',
effortHigh: 'High',
effortHighDesc: 'Balanced reasoning',
effortXhigh: 'Extra high',
effortXhighDesc: 'Stronger reasoning',
effortMax: 'Max',
effortMaxDesc: 'Maximum reasoning, best for the hardest tasks',
badgeTextOnly: 'Multimodal',
badgeThinking: 'Thinking',
// ── Appearance & Display ──
themeTitle: 'Theme',
themeDesc: 'Switch between Classic, Light and Dark',
groupByWorkspaceTitle: 'Group chats by project',
groupByWorkspaceDesc: 'Fold conversation history by workspace or project in the sidebar',
newChatBlankTitle: 'New Chat opens a blank page',
newChatBlankDesc: 'When on, "New Chat" routes to the new-chat page and the conversation is created on the first message; when off, an empty conversation is created immediately',
useCustomNamesTitle: 'Use custom names',
useCustomNamesDesc: 'Use the self-name and user name from personalization in the conversation area',
enhancedToolDisplayTitle: 'Enhanced tool display',
enhancedToolDisplayDesc: 'Show tool blocks as formatted content; off shows raw JSON',
showStatusAvatarTitle: 'Show assistant status avatar',
showStatusAvatarDesc: 'Show idle, thinking, and tool-call status animations on the welcome page and at the end of conversations',
showGitStatusBarTitle: 'Show Git status bar',
showGitStatusBarDesc: 'Show branch and change stats above the input when the workspace is a Git repo',
autoOpenTerminalTitle: 'Auto-open terminal panel',
autoOpenTerminalDesc: 'Open the sidebar terminal panel automatically when a terminal is created',
quickDockAutoExpandTitle: 'Auto-expand quick dock',
quickDockAutoExpandDesc: 'Expand the quick dock automatically when it has content; when off, expand it only with the side button',
editSummaryLiveTitle: 'Show edit summary live',
editSummaryLiveDesc: 'Show edited files in real time during a run; when off, show them only after the run completes',
filePreviewWrapTitle: 'Wrap file preview lines',
filePreviewWrapDesc: 'Wrap file previews to the panel width; when off, long lines scroll horizontally',
blockDisplayModeTitle: 'Block display mode',
blockDisplayModeDesc: 'How thinking and tool blocks are displayed',
blockDisplayTraditional: 'Traditional list',
blockDisplayTraditionalDesc: 'Vertical list in chronological order, classic style',
blockDisplayStacked: 'Stacked animation',
blockDisplayStackedDesc: 'Stacks more than 6 items under "More", animated',
blockDisplayMinimal: 'Minimal mode',
blockDisplayMinimalDesc: 'Summary line + seamless expand, streamed output',
badgeRecommended: 'Recommended',
badgeNew: 'New',
compactMessageTitle: 'Compact system messages',
compactMessageDesc: 'How compact system messages (review, sub-agents) are displayed',
compactMessageFull: 'Full info',
compactMessageFullDesc: 'Show full original content for review, sub-agent and other system messages',
compactMessageBrief: 'Brief',
compactMessageBriefDesc: 'Replace system messages with a one-line summary',
themeClassic: 'Classic',
themeClassicDesc: 'Beige tones, soft and high-contrast',
themeLight: 'Light',
themeLightDesc: 'Pure white + elegant grey, clean and fresh',
themeDark: 'Dark',
themeDarkDesc: 'Deep grey + black, dimmed with colorful accents',
localeZhCN: '简体中文',
localeChineseDesc: 'Chinese (Simplified)',
localeEnglish: 'English',
localeEnglishDesc: 'English (US)',
// ── Workspace & Permissions ──
defaultPermissionTitle: 'Default permission',
defaultPermissionDesc: 'Default permission mode for new conversations',
permissionReadonly: 'Read-only',
permissionReadonlyDesc: 'Read/search tools only; modification operations are rejected',
permissionApproval: 'Approval',
permissionApprovalDesc: 'Tools that modify workspace files require manual approval',
permissionAutoApproval: 'Auto-approval',
permissionAutoApprovalDesc: 'Writes pass through; high-risk operations are auto-approved by the background review agent',
permissionUnrestricted: 'Unrestricted',
permissionUnrestrictedDesc: 'Tools execute directly through the normal flow',
defaultWorkModeTitle: 'Default work mode',
workRunModeDesc: 'Default work mode for new conversations; locked to read-only in plan mode',
workModePlan: 'Plan',
workModePlanDesc: 'Only makes a plan and executes after approval',
workModeAsk: 'Ask',
workModeAskDesc: 'Discuss and confirm before starting',
workModeExecute: 'Execute',
workModeExecuteDesc: 'Fills in details and starts directly',
agentsMdInjectTitle: 'Auto-inject AGENTS.md',
agentsMdInjectDesc: 'Automatically inject system prompt when AGENTS.md exists in the workspace root',
claudeMdInjectTitle: 'Auto-inject CLAUDE.md',
claudeMdInjectDesc: 'Automatically inject system prompt when CLAUDE.md exists in the workspace root (off by default, injected alongside AGENTS.md)',
agentsSkillsScanTitle: 'Scan .agents/skills/ directory',
agentsSkillsScanDesc: 'Auto-scan industry skills under .agents/skills/ (Agent Skills open standard path) and list them with .astrion/skills/ skills; duplicates with the same name make read_skill error out and suggest reading by specific path',
modifyHistoryTitle: 'Track file changes',
modifyHistoryDesc: 'After each task, save this round of write/edit file changes as diffs under .astrion/modify_history/ so accidental overwrites (e.g. by git checkout) can be recovered manually',
versionControlDivider: 'Version control',
versioningByDefaultTitle: 'Enable versioning for new chats',
versioningByDefaultDesc: 'Turned on automatically when creating a new chat; can be disabled below the input',
backupModeTitle: 'Backup mode',
backupModeDesc: 'Shallow backup only tracks AI-edited files; full backup snapshots the whole workspace',
shallowBackup: 'Shallow',
shallowBackupDesc: 'Fast, only restores edited files',
fullBackup: 'Full',
fullBackupDesc: 'Full workspace snapshot; the first one may be slow',
goalModeDivider: 'Goal mode',
goalReviewActiveTitle: 'Review agent gathers evidence',
goalReviewActiveDesc: 'When on, runs read-only commands to verify goals; when off, judges from conversation only',
goalMaxTurnsTitle: 'Max auto-continuation turns',
goalMaxTurnsDesc: 'Automatically continues up to 1-100 turns after the main model stops',
goalTokenLimitTitle: 'Enable cumulative token limit',
goalTokenLimitDesc: 'Stop goal mode when cumulative input/output exceeds the limit',
goalTokenLimitValueTitle: 'Cumulative token limit',
goalTokenLimitValueDesc: 'Goal mode stops when cumulative consumption reaches this value',
// ── Context ──
recentConversationsTitle: 'Recent conversation hints',
recentConversationsDesc: 'Inject several recent non-empty conversations from the current workspace into the system prompt',
recentConversationsCountTitle: 'Recent conversations to inject',
restoreDefault: 'Restore default',
maxMemoryInjectTitle: 'Max memory injection',
noLimitPlaceholder: 'No limit',
compressionStrategyTitle: 'Context compression strategy',
compressionStrategyDesc: 'Control auto shallow and deep compression separately',
autoShallowCompressTitle: 'Auto shallow compression',
autoDeepCompressTitle: 'Auto deep compression',
shallowTriggerTokens: 'Shallow compression trigger context',
shallowKeepRecentTools: 'Recent tools kept in shallow compression',
shallowKeepTurnTools: 'Tools kept for current turn (shallow)',
shallowMaxReplace: 'Max replacements per round',
shallowToolInterval: 'Trigger on tool-call interval',
deepTriggerTokens: 'Deep compression trigger context',
deepCompressInjectTitle: 'Directly inject deep compression',
deepCompressInjectDesc: 'When on, inject the full text of previous compressions; when off, only hint the file location',
restoreCompressionDefaults: 'Restore compression defaults',
// ── Tools & Skills ──
silentToolDisableTitle: 'Silently disable tools',
silentToolDisableDesc: 'No hint message when disabling tools; the model won\'t notice disabled items',
hideToolApprovalTitle: 'Hide tool approval panel',
hideToolApprovalDesc: 'In auto-approval mode, the approval panel no longer expands while tools are being reviewed in the background',
toolIntentTitle: 'Tool intent hints',
toolIntentDesc: 'State briefly what a tool will do before calling it',
skillHintsTitle: 'Skill hint system',
skillHintsDesc: 'Suggest relevant skills to the model when specific keywords are detected',
strictSkillTitle: 'Strict constraints',
strictSkillDesc: 'Applies only to skills enabled in personal space',
terminalToolsTitle: 'Terminal tools',
subAgentToolsTitle: 'Sub-agent tools',
runCommandFgTitle: 'run_command foreground',
runCommandBgTitle: 'run_command background',
availableSkillsTitle: 'Available skills',
availableSkillsDesc: 'Checked skills are injected into the system prompt and synced to .astrion/skills/ in the workspace',
disabledToolCategoriesTitle: 'Default disabled tool categories',
disabledToolCategoriesDesc: 'These categories stay off in new tasks once selected',
toolLoadingTitle: 'On-demand tools (dynamic loading)',
toolLoadingDesc: 'Checked tools are not injected into context by default; the model fetches their full definitions on demand via load_tools, saving tokens and improving tool selection accuracy. Only affects new conversations; existing conversations keep the snapshot taken at creation',
toolLoadingEnabledTitle: 'Enable dynamic tool loading',
toolLoadingCat: {
workflow: 'Workflows',
sub_agent: 'Sub-agents',
conversation: 'Conversation review',
memory_write: 'Memory write',
personalization: 'Personalization',
skill_create: 'Skills',
mcp: 'MCP',
misc: 'Easter egg'
},
webDirectExtractTitle: 'Direct extraction whitelist',
webDirectExtractDesc:
'Whitelisted sites are extracted locally (GitHub code files via CDN raw links, others via readability-style parsing) at no Tavily quota cost; falls back to Tavily automatically on failure',
webDirectExtractEnabledTitle: 'Enable whitelist direct extraction',
webDirectExtractDomainsTitle: 'Additional whitelisted domains',
webDirectExtractBuiltinBadge: 'Built-in',
webDirectExtractDomainPlaceholder: 'Enter a domain, e.g. docs.python.org',
webDirectExtractAdd: 'Add',
// ── Files & Images ──
imageCompressionTitle: 'Image compression',
imageCompressionDesc: 'Scale down images proportionally when sent or viewed via view_image',
imageOriginal: 'Original',
imageOriginalDesc: 'No compression',
image1080p: '1080p',
image1080pDesc: 'Scale down so the longest edge stays within 1080p',
image720p: '720p',
image720pDesc: 'Scale down so the longest edge stays within 720p',
image540p: '540p',
image540pDesc: 'Scale down so the longest edge stays within 540p',
// ── Data ──
usageEyebrow: 'Conversation usage',
usageTitle: 'Usage statistics',
usageDesc: 'Cumulative input/output tokens, conversation count, user messages and tool calls across all conversations',
usageInputLabel: 'Input tokens',
usageOutputLabel: 'Output tokens',
usageConversationsLabel: 'Conversations',
usageMessagesLabel: 'User messages',
usageToolsLabel: 'Tool calls',
usageSyncing: 'Syncing latest statistics...',
usageUpdated: 'Updated {time}',
usageRefreshing: 'Refreshing...',
usageRefresh: 'Refresh',
usageNeverRefreshed: 'Not refreshed yet',
usageUnknownTime: 'Unknown time',
usageFetchFailed: 'Failed to fetch usage statistics',
// ── Voice model ──
voiceModelIntro: 'On-device speech recognition model (SenseVoice int8) supporting mixed Chinese/English with automatic punctuation. The model is about 228MB and runs locally on the phone with no network needed.',
voiceModelTitle: 'Speech recognition model',
voiceModelReady: 'Downloaded (228MB)',
voiceModelDownloading: 'Downloading {percent}% — {msg}',
voiceModelPartial: 'Incomplete download, please download again',
voiceModelNotDownloaded: 'Not downloaded — click to download',
voiceDownloadingBtn: 'Downloading...',
voiceRedownload: 'Re-download',
voiceDownloadModel: 'Download model',
voiceAppOnlyAlert: 'Voice model downloads are only available inside the App',
voicePreparing: 'Preparing...',
// ── Sub-agents ──
subAgentsIntro: 'Manage sub-agent roles for multi-agent mode. Preset roles can be edited (creating a custom override); custom roles can be created, edited and deleted.',
compressThresholdTitle: 'Context compression threshold',
compressThresholdDesc: 'Deep compression triggers when a sub-agent\'s context tokens exceed this value (default 150000)',
maxTurnsTitle: 'Max execution turns',
maxTurnsDesc: 'Max execution turns for a single traditional background sub-agent task (one turn = one model call). Leave empty for the default of 50; 0 means unlimited (use with care — runaway tasks keep consuming API quota). Multi-agent team members are long-term collaborators and are not limited by this',
saving: 'Saving...',
roleListTitle: 'Roles',
newRole: '+ New Role',
noRoles: 'No roles yet',
customTag: 'Custom',
presetTag: 'Preset',
noDescription: 'No description',
roleMetaId: 'ID: {id} · Thinking mode: {mode}',
roleMetaModel: ' · Model: {model}',
edit: 'Edit',
roleEditorEditTitle: 'Edit role',
roleEditorCreateTitle: 'New role',
roleIdTitle: 'Role ID',
roleIdPlaceholder: 'Lowercase letters and underscores, e.g. api-designer',
roleNameTitle: 'Display name',
roleNamePlaceholder: 'e.g. API Designer',
roleDescTitle: 'Description',
roleDescPlaceholder: 'One sentence describing the role',
thinkingModeTitle: 'Thinking mode',
roleThinkingDesc: 'fast = quick responses, thinking = reasoning',
fastResponseMode: 'Quick response mode',
thinkingReasoningMode: 'Reasoning mode',
modelTitle: 'Model',
roleModelEmptyDesc: 'Leave empty to use the default model',
defaultModelOption: 'Default model',
roleDefaultModelDesc: 'Uses default_model from the config file',
textOnly: 'Text only',
promptBodyTitle: 'Prompt Body (Markdown)',
promptBodyPlaceholder: 'Custom prompt body for this role...',
deleteRoleConfirm: 'Delete role "{name}"?',
// ── Review agents ──
reviewIntro: 'Configure models and run parameters for the three review agents. They share the model library with sub-agents; leave empty to use the library default.',
reviewAgentAutoApproval: 'Auto-approval agent',
reviewAgentAutoApprovalDesc: 'Judges whether a tool call is out of scope or dangerous in auto-approval mode',
reviewAgentGoalReview: 'Goal review agent',
reviewAgentGoalReviewDesc: 'Judges whether long-term goals are truly met in goal mode',
reviewAgentWorkflowReview: 'Workflow review agent',
reviewAgentWorkflowReviewDesc: 'Judges whether stage output meets the bar at workflow review nodes',
reviewModelEmptyDesc: 'Leave empty to use the model library default',
reviewDefaultModelDesc: 'Uses the model library default_model',
titleModelTitle: 'Title generation model',
titleModelDesc: 'Choose the AI model used to generate conversation titles, shared with sub-agents',
externalSessionHeaderTitle: 'External session header',
externalSessionHeaderDesc: 'Send a stable per-conversation x-opencode-session header to OpenCode endpoints for session routing and cache optimization; disabled means no header is sent',
titleDefaultModelDesc: 'Uses the sub-agent model library default',
reviewThinkingDesc: 'Falls back to fast mode automatically when the model does not support thinking',
timeoutTitle: 'Review request timeout',
timeoutDesc: 'Single model request timeout (5-3600 seconds)',
maxRoundsTitle: 'Max review rounds',
maxRoundsDesc: 'Applies the fallback when no conclusion is reached within this many rounds (1-50)',
commandTimeoutTitle: 'Evidence command timeout',
commandTimeoutDesc: 'Single timeout for read-only evidence commands (1-600 seconds)',
// ── Admin ──
mcpConfigTitle: 'MCP server management',
mcpConfigDesc: 'Configure MCP servers centrally to manage tool extensions',
adminMonitorTitle: 'Admin monitor',
adminMonitorDesc: 'Quota trends, container status, project storage and upload security',
apiAdminTitle: 'API management',
apiAdminDesc: 'Manage API calls and account',
customToolsAdminTitle: 'Custom tool management',
customToolsAdminDesc: 'Create and edit custom tool files online',
open: 'Open',
// ── Alerts & errors (script: toast/confirm/Error) ──
modelDisabledTitle: 'Model disabled',
modelDisabledMessage: 'This model has been disabled by the administrator and cannot be selected',
modelModeConflictTitle: 'Model / thinking mode conflict',
modelThinkingOnlyWarning: '{label} only supports thinking mode. Your setting was kept.',
modelFastOnlyWarning: '{label} only supports fast mode. Your setting was kept.',
// ── Experience onboarding ──
expTitle: 'First time? Choose a mode that fits you',
expSubtitle: 'Speed, web access and tool scope differ; switch anytime in personal space',
expConfirmStart: 'Confirm & Start',
expModeFastBadge: 'Lightning',
expModeFastTitle: 'Quick answers',
expModeFastDesc: "Answers your questions quickly, searches the web, and doesn't write files",
expModeThinkingBadge: 'Thinking',
expModeThinkingTitle: 'Think first',
expModeThinkingDesc: "Thinks before completing tasks, searches the web, and doesn't write files; replies take longer",
expModeResearchBadge: 'Research',
expModeResearchTitle: 'Multi-step research',
expModeResearchDesc: 'Multi-step reasoning and 20+ tools for complex tasks; replies may take a while',
expModeExpertBadge: 'Expert',
expModeExpertTitle: 'Full-featured exploration',
expModeExpertDesc: 'Explore every configuration option freely; built for agent experts and practitioners',
} as const;