FN-6749: rebaseline i18n lint guardrail
Rebaseline the i18n hardcoded-string lint guardrail for shipping dashboard surfaces. - Add scoped i18n lint ignores for non-shipping tests, stories, and deferred source-copy files with follow-up rationale. - Localize remaining plugin/view copy and replace technical glyph literals that should not be linted as prose. - Refresh synced locale catalogs and generated resource types, and document the lint baseline policy. Files changed: .changeset/fn-6749-i18n-lint-rebaseline.md | 5 + docs/i18n-contributing.md | 14 + i18next.config.ts | 96 ++ .../dashboard/app/components/AgentDetailView.tsx | 4 +- .../app/components/ConversationHistory.tsx | 4 +- .../app/components/DockerNodeOnboardingModal.tsx | 8 +- .../components/MilestoneSliceInterviewModal.tsx | 4 +- .../app/components/MissionInterviewModal.tsx | 4 +- .../app/components/ModelSelectionModal.tsx | 4 +- .../dashboard/app/components/NodeDetailModal.tsx | 15 +- .../dashboard/app/components/PlanningModeModal.tsx | 4 +- .../dashboard/app/components/SessionTerminal.tsx | 15 +- .../app/components/SubtaskBreakdownModal.tsx | 4 +- packages/dashboard/app/components/TaskForm.tsx | 4 +- .../dashboard/app/components/TerminalModal.tsx | 18 +- .../dashboard/app/plugins/pluginViewRegistry.tsx | 7 +- packages/i18n/locales/en/app.json | 890 +++++++++--- packages/i18n/locales/en/common.json | 82 +- packages/i18n/locales/es/app.json | 986 ++++++++++--- packages/i18n/locales/es/common.json | 82 +- packages/i18n/locales/fr/app.json | 986 ++++++++++--- packages/i18n/locales/fr/common.json | 82 +- packages/i18n/locales/ko/app.json | 1482 ++++++++++++++------ packages/i18n/locales/ko/cli.json | 8 +- packages/i18n/locales/ko/common.json | 82 +- packages/i18n/locales/zh-CN/app.json | 1482 ++++++++++++++------ packages/i18n/locales/zh-CN/cli.json | 8 +- packages/i18n/locales/zh-CN/common.json | 82 +- packages/i18n/locales/zh-TW/app.json | 1482 ++++++++++++++------ packages/i18n/locales/zh-TW/cli.json | 8 +- packages/i18n/locales/zh-TW/common.json | 82 +- packages/i18n/src/resources.d.ts | 459 +++--- 32 files changed, 6055 insertions(+), 2438 deletions(-) Fusion-Task-Id: FN-6749 Fusion-Task-Lineage: 789a7cbb-fdf8-4190-8cd2-6bf7d5e2d552
This commit is contained in:
5
.changeset/fn-6749-i18n-lint-rebaseline.md
Normal file
5
.changeset/fn-6749-i18n-lint-rebaseline.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
Rebaseline the dashboard i18n lint guardrail by excluding non-shipping tests and stories, suppressing technical token categories, localizing plugin missing-view copy, and tracking remaining source-copy deferrals with narrow follow-up tasks.
|
||||
@@ -31,6 +31,20 @@ pnpm i18n:lint # flag hardcoded user-facing strings
|
||||
pnpm i18n:gen-cli # regenerate the CLI static catalog import map
|
||||
```
|
||||
|
||||
## Lint baseline policy
|
||||
|
||||
`pnpm i18n:lint` is the hardcoded user-facing string guardrail and must stay
|
||||
green. Its file scope intentionally matches extraction: tests and stories are
|
||||
excluded because they are non-shipping fixtures and `extract` already ignores
|
||||
them. Suppress non-translatable token categories with narrow
|
||||
`lint.ignoredTags` / `lint.ignoredAttributes` entries, such as keyboard-key
|
||||
content in `<kbd>`, instead of hiding source directories.
|
||||
|
||||
Any remaining user-facing copy must be localized with `t()` / `<Trans>` and an
|
||||
`en` catalog entry. A temporary deferral is only acceptable when it is scoped to
|
||||
specific files or a small cluster in `lint.ignore`, includes an `FNXC` rationale,
|
||||
and has a filed follow-up task that removes the ignore.
|
||||
|
||||
## Translating an existing language
|
||||
|
||||
1. Run `pnpm i18n:sync` so every catalog has the current `en` keys (untranslated
|
||||
|
||||
@@ -4,6 +4,94 @@ import {
|
||||
recommendedAcceptedTags,
|
||||
} from "i18next-cli";
|
||||
|
||||
|
||||
const DEFERRED_I18N_LINT_FILES = [
|
||||
// FNXC:i18n-LintBaseline 2026-06-19-00:00:
|
||||
// These exact files still carry pre-existing user-facing copy debt after FN-6749 restored the guardrail scope and token suppression.
|
||||
// Deferral split: 23 settings section files -> FN-6771, 21 workflow/task/setup/PR files -> FN-6770, and 36 plugin/agent/mission/misc files -> FN-6769.
|
||||
// Keep the deferral file-scoped and remove entries as those follow-ups localize each cluster.
|
||||
"packages/dashboard/app/components/WorkflowSelector.tsx",
|
||||
"packages/dashboard/app/components/WorkflowResultsTab.tsx",
|
||||
"packages/dashboard/app/components/WorkflowNodeEditor.tsx",
|
||||
"packages/dashboard/app/components/TerminalModal.tsx",
|
||||
"packages/dashboard/app/components/TaskDetailModal.tsx",
|
||||
"packages/dashboard/app/components/TaskComments.tsx",
|
||||
"packages/dashboard/app/components/TaskChatTab.tsx",
|
||||
"packages/dashboard/app/components/StashConflictModal.tsx",
|
||||
"packages/dashboard/app/components/SetupWizardModal.tsx",
|
||||
"packages/dashboard/app/components/SettingsModal.tsx",
|
||||
"packages/dashboard/app/components/ScriptsModal.tsx",
|
||||
"packages/dashboard/app/components/ScheduleForm.tsx",
|
||||
"packages/dashboard/app/components/ScheduleCard.tsx",
|
||||
"packages/dashboard/app/components/RoutingTab.tsx",
|
||||
"packages/dashboard/app/components/RoutineEditor.tsx",
|
||||
"packages/dashboard/app/components/RoutineCard.tsx",
|
||||
"packages/dashboard/app/components/ResearchView.tsx",
|
||||
"packages/dashboard/app/components/QuickChatFAB.tsx",
|
||||
"packages/dashboard/app/components/PullRequestView.tsx",
|
||||
"packages/dashboard/app/components/ProjectSelector.tsx",
|
||||
"packages/dashboard/app/components/PrPanel.tsx",
|
||||
"packages/dashboard/app/components/PrCreateModal.tsx",
|
||||
"packages/dashboard/app/components/PiExtensionsManager.tsx",
|
||||
"packages/dashboard/app/components/NodeDetailModal.tsx",
|
||||
"packages/dashboard/app/components/ModelOnboardingModal.tsx",
|
||||
"packages/dashboard/app/components/MissionManager.tsx",
|
||||
"packages/dashboard/app/components/MissionInterviewModal.tsx",
|
||||
"packages/dashboard/app/components/MilestoneSliceInterviewModal.tsx",
|
||||
"packages/dashboard/app/components/MailboxView.tsx",
|
||||
"packages/dashboard/app/components/IssueMentionPopup.tsx",
|
||||
"packages/dashboard/app/components/InsightsView.tsx",
|
||||
"packages/dashboard/app/components/HermesRuntimeCard.tsx",
|
||||
"packages/dashboard/app/components/Header.tsx",
|
||||
"packages/dashboard/app/components/GroupTaskModal.tsx",
|
||||
"packages/dashboard/app/components/GitManagerModal.tsx",
|
||||
"packages/dashboard/app/components/GitHubStarPrompt.tsx",
|
||||
"packages/dashboard/app/components/ExecutorStatusBar.tsx",
|
||||
"packages/dashboard/app/components/ErrorBoundary.tsx",
|
||||
"packages/dashboard/app/components/DocumentsView.tsx",
|
||||
"packages/dashboard/app/components/DevServerView.tsx",
|
||||
"packages/dashboard/app/components/DashboardLoader.tsx",
|
||||
"packages/dashboard/app/components/CursorCliProviderCard.tsx",
|
||||
"packages/dashboard/app/components/CliBinaryPanel.tsx",
|
||||
"packages/dashboard/app/components/BranchGroupCard.tsx",
|
||||
"packages/dashboard/app/components/Board.tsx",
|
||||
"packages/dashboard/app/components/AgentsOverviewBar.tsx",
|
||||
"packages/dashboard/app/components/AgentRunHistory.tsx",
|
||||
"packages/dashboard/app/components/AgentPromptsManager.tsx",
|
||||
"packages/dashboard/app/components/AgentOnboardingModal.tsx",
|
||||
"packages/dashboard/app/components/AgentImportModal.tsx",
|
||||
"packages/dashboard/app/components/AgentGenerationModal.tsx",
|
||||
"packages/dashboard/app/components/AgentDetailView.tsx",
|
||||
"packages/dashboard/app/components/AddNodeModal.tsx",
|
||||
"packages/dashboard/app/components/ActivityLogModal.tsx",
|
||||
"packages/dashboard/app/components/ActivityFeed.tsx",
|
||||
"packages/dashboard/app/components/ActiveAgentsPanel.tsx",
|
||||
"packages/dashboard/app/components/nodes/WorkflowNodeTypes.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/WorktreesSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/SchedulingSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/ScheduledEvalsSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/RuntimesSections.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/ResearchProjectSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/ResearchGlobalSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/RemoteSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/ProjectModelsSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/PluginsSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/NotificationsSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/NodeSyncSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/NodeRoutingSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/MergeSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/MemorySection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/GlobalModelsSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/GlobalGeneralSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/GeneralSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/ExperimentalSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/CommandsSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/BackupsSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/AuthenticationSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/AppearanceSection.tsx",
|
||||
"packages/dashboard/app/components/settings/sections/AgentPermissionsSection.tsx",
|
||||
] as const;
|
||||
|
||||
/**
|
||||
* i18next-cli workflow config for the whole monorepo.
|
||||
*
|
||||
@@ -40,6 +128,14 @@ export default defineConfig({
|
||||
output: "packages/i18n/src/i18next-resources.d.ts",
|
||||
},
|
||||
lint: {
|
||||
/*
|
||||
* FNXC:i18n-LintBaseline 2026-06-19-00:00:
|
||||
* i18n lint must scan the same shipping surfaces as extract so it remains a trusted user-facing-copy guardrail.
|
||||
* Tests and stories are excluded because they are non-shipping fixtures and extract already excludes test files.
|
||||
* Keyboard-key glyphs inside <kbd> are technical tokens, not translated prose.
|
||||
*/
|
||||
ignore: ["**/__tests__/**", "**/*.test.*", "**/*.stories.*", ...DEFERRED_I18N_LINT_FILES],
|
||||
ignoredTags: ["kbd"],
|
||||
acceptedTags: recommendedAcceptedTags,
|
||||
acceptedAttributes: recommendedAcceptedAttributes,
|
||||
},
|
||||
|
||||
@@ -72,6 +72,8 @@ export function relativeTime(iso: string, t?: (key: string, defaultValue: string
|
||||
return tr("time.daysAgo", "{{n}}d ago", { n });
|
||||
}
|
||||
|
||||
const WARNING_ICON = "⚠️";
|
||||
|
||||
interface AgentDetailViewProps {
|
||||
agentId: string;
|
||||
projectId?: string;
|
||||
@@ -1186,7 +1188,7 @@ function DashboardTab({
|
||||
<div className="dashboard-tab dashboard-summary-layout">
|
||||
{budgetStatus?.isOverBudget && (
|
||||
<div className="budget-warning-banner" role="alert">
|
||||
<span>⚠️</span>
|
||||
<span>{WARNING_ICON}</span>
|
||||
<span><strong>{t("agents.budgetExhaustedTitle", "Budget Exhausted:")}</strong> {t("agents.budgetExhaustedBody", "This agent has exceeded its token budget and may operate with limited functionality.")}</span>
|
||||
</div>
|
||||
)}
|
||||
|
||||
@@ -5,6 +5,8 @@ import type { PlanningQuestion } from "@fusion/core";
|
||||
import { useState } from "react";
|
||||
import type { ConversationHistoryEntry } from "../api";
|
||||
|
||||
const COMMENT_ICON = "💬";
|
||||
|
||||
interface ConversationHistoryProps {
|
||||
entries: ConversationHistoryEntry[];
|
||||
defaultShowThinking?: boolean;
|
||||
@@ -129,7 +131,7 @@ export function ConversationHistory({ entries, defaultShowThinking = false }: Co
|
||||
<div className="conversation-entry-response">
|
||||
<strong>{t("conversation.yourResponse", "Your response")}</strong>
|
||||
<p>{formattedResponse || "—"}</p>
|
||||
{comment && <p className="conversation-comment">💬 {comment}</p>}
|
||||
{comment && <p className="conversation-comment">{COMMENT_ICON} {comment}</p>}
|
||||
</div>
|
||||
)}
|
||||
|
||||
|
||||
@@ -32,6 +32,10 @@ interface MountRow {
|
||||
}
|
||||
|
||||
const DEFAULT_URL = "http://localhost:4040";
|
||||
const DOCKER_MOUNT_MODE_LABELS = {
|
||||
readWrite: "rw",
|
||||
readOnly: "ro",
|
||||
} as const;
|
||||
|
||||
export function DockerNodeOnboardingModal({ isOpen, onClose, onSubmit, addToast: _addToast }: DockerNodeOnboardingModalProps) {
|
||||
const { t } = useTranslation("app");
|
||||
@@ -477,8 +481,8 @@ export function DockerNodeOnboardingModal({ isOpen, onClose, onSubmit, addToast:
|
||||
})
|
||||
}
|
||||
>
|
||||
<option value="rw">rw</option>
|
||||
<option value="ro">ro</option>
|
||||
<option value="rw">{DOCKER_MOUNT_MODE_LABELS.readWrite}</option>
|
||||
<option value="ro">{DOCKER_MOUNT_MODE_LABELS.readOnly}</option>
|
||||
</select>
|
||||
<button
|
||||
type="button"
|
||||
|
||||
@@ -35,6 +35,8 @@ import { useMobileScrollLock } from "../hooks/useMobileScrollLock";
|
||||
import { useViewportMode } from "../hooks/useViewportMode";
|
||||
import { getSessionTabId } from "../utils/getSessionTabId";
|
||||
|
||||
const WARNING_ICON = "⚠️";
|
||||
|
||||
interface MilestoneSliceInterviewModalProps {
|
||||
isOpen: boolean;
|
||||
onClose: () => void;
|
||||
@@ -575,7 +577,7 @@ export function MilestoneSliceInterviewModal({
|
||||
)}
|
||||
|
||||
<div className="ai-error-panel" role="alert">
|
||||
<div className="ai-error-icon">⚠️</div>
|
||||
<div className="ai-error-icon">{WARNING_ICON}</div>
|
||||
<div className="ai-error-message">{view.errorMessage}</div>
|
||||
<div className="ai-error-actions">
|
||||
<button className="btn" onClick={handleCancel}>
|
||||
|
||||
@@ -73,6 +73,8 @@ function parseModelSelection(value: string): { provider?: string; modelId?: stri
|
||||
};
|
||||
}
|
||||
|
||||
const WARNING_ICON = "⚠️";
|
||||
|
||||
interface MissionInterviewModalProps {
|
||||
isOpen: boolean;
|
||||
onClose: () => void;
|
||||
@@ -942,7 +944,7 @@ export function MissionInterviewModal({
|
||||
className="ai-error-panel"
|
||||
role="alert"
|
||||
>
|
||||
<div className="ai-error-icon">⚠️</div>
|
||||
<div className="ai-error-icon">{WARNING_ICON}</div>
|
||||
<div className="ai-error-message">{view.errorMessage}</div>
|
||||
<div className="ai-error-actions">
|
||||
<button className="btn btn-primary" onClick={() => void handleRetryFromError()} disabled={isRetrying}>
|
||||
|
||||
@@ -7,6 +7,8 @@ import { applyPresetToSelection } from "../utils/modelPresets";
|
||||
import { CustomModelDropdown } from "./CustomModelDropdown";
|
||||
import { Brain, X } from "lucide-react";
|
||||
|
||||
const PRESET_OPTION_SEPARATOR = "──────────";
|
||||
|
||||
interface ModelSelectionModalProps {
|
||||
isOpen: boolean;
|
||||
onClose: () => void;
|
||||
@@ -218,7 +220,7 @@ export function ModelSelectionModal({
|
||||
data-testid="model-selection-preset"
|
||||
>
|
||||
<option value="default">{t("modelSelection.useDefault", "Use default")}</option>
|
||||
{presets!.length > 0 && <option disabled>──────────</option>}
|
||||
{presets!.length > 0 && <option disabled>{PRESET_OPTION_SEPARATOR}</option>}
|
||||
{presets!.map((preset) => (
|
||||
<option key={preset.id} value={preset.id}>{preset.name}</option>
|
||||
))}
|
||||
|
||||
@@ -27,6 +27,13 @@ import { SettingsSyncConflictModal } from "./SettingsSyncConflictModal";
|
||||
import type { SettingsConflictEntry, ConflictResolutionResult } from "./SettingsSyncConflictModal";
|
||||
import "./NodeDetailModal.css";
|
||||
|
||||
const DOCKER_MOUNT_LABELS = {
|
||||
readWrite: "rw",
|
||||
readOnly: "ro",
|
||||
volume: "volume",
|
||||
bind: "bind",
|
||||
} as const;
|
||||
|
||||
interface NodeDetailModalProps {
|
||||
isOpen: boolean;
|
||||
onClose: () => void;
|
||||
@@ -614,16 +621,16 @@ export function NodeDetailModal({
|
||||
next[index] = { ...next[index], mode: event.target.value as "rw" | "ro" };
|
||||
setDockerConfigDraft({ ...dockerConfigDraft, volumeMounts: next });
|
||||
}}>
|
||||
<option value="rw">rw</option>
|
||||
<option value="ro">ro</option>
|
||||
<option value="rw">{DOCKER_MOUNT_LABELS.readWrite}</option>
|
||||
<option value="ro">{DOCKER_MOUNT_LABELS.readOnly}</option>
|
||||
</select>
|
||||
<select className="input" value={mount.type ?? "volume"} onChange={(event) => {
|
||||
const next = [...dockerConfigDraft.volumeMounts];
|
||||
next[index] = { ...next[index], type: event.target.value as "volume" | "bind" };
|
||||
setDockerConfigDraft({ ...dockerConfigDraft, volumeMounts: next });
|
||||
}}>
|
||||
<option value="volume">volume</option>
|
||||
<option value="bind">bind</option>
|
||||
<option value="volume">{DOCKER_MOUNT_LABELS.volume}</option>
|
||||
<option value="bind">{DOCKER_MOUNT_LABELS.bind}</option>
|
||||
</select>
|
||||
<button className="btn btn-sm" onClick={() => setDockerConfigDraft({ ...dockerConfigDraft, volumeMounts: dockerConfigDraft.volumeMounts.filter((_, i: number) => i !== index) })}>{t("nodes.removeButton", "Remove")}</button>
|
||||
</div>
|
||||
|
||||
@@ -57,6 +57,8 @@ import { useAutosizeTextarea } from "../hooks/useAutosizeTextarea";
|
||||
import { useToast } from "../hooks/useToast";
|
||||
import { getSessionTabId } from "../utils/getSessionTabId";
|
||||
|
||||
const WARNING_ICON = "⚠️";
|
||||
|
||||
interface PlanningModeModalProps {
|
||||
isOpen: boolean;
|
||||
onClose: () => void;
|
||||
@@ -2106,7 +2108,7 @@ export function PlanningModeModal({ isOpen, onClose, onTaskCreated, onTasksCreat
|
||||
className="ai-error-panel"
|
||||
role="alert"
|
||||
>
|
||||
<div className="ai-error-icon">⚠️</div>
|
||||
<div className="ai-error-icon">{WARNING_ICON}</div>
|
||||
<div className="ai-error-message">{view.errorMessage}</div>
|
||||
<div className="ai-error-actions">
|
||||
<button className="btn btn-primary" onClick={() => void handleRetryFromError()} disabled={isRetrying}>
|
||||
|
||||
@@ -49,6 +49,13 @@ const SEQ_ARROW_DOWN = "\x1b[B"; // CSI B
|
||||
const SEQ_ARROW_RIGHT = "\x1b[C"; // CSI C
|
||||
const SEQ_ARROW_LEFT = "\x1b[D"; // CSI D
|
||||
|
||||
const CLI_TERMINAL_KEY_LABELS = {
|
||||
ctrl: "Ctrl",
|
||||
escape: "Esc",
|
||||
tab: "Tab",
|
||||
ctrlC: "^C",
|
||||
} as const;
|
||||
|
||||
/**
|
||||
* Resolve the control byte for a sticky-Ctrl + key combination. Ctrl maps a
|
||||
* letter to its control code (A→0x01 … Z→0x1A): code = (toUpper(ch) & 0x1f).
|
||||
@@ -700,7 +707,7 @@ export function SessionTerminal({
|
||||
onMouseDown={keepFocus}
|
||||
onClick={() => setCtrlSticky((v) => !v)}
|
||||
>
|
||||
Ctrl
|
||||
{CLI_TERMINAL_KEY_LABELS.ctrl}
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
@@ -711,7 +718,7 @@ export function SessionTerminal({
|
||||
onMouseDown={keepFocus}
|
||||
onClick={() => emitBarKey(SEQ_ESC)}
|
||||
>
|
||||
Esc
|
||||
{CLI_TERMINAL_KEY_LABELS.escape}
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
@@ -722,7 +729,7 @@ export function SessionTerminal({
|
||||
onMouseDown={keepFocus}
|
||||
onClick={() => emitBarKey(SEQ_TAB)}
|
||||
>
|
||||
Tab
|
||||
{CLI_TERMINAL_KEY_LABELS.tab}
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
@@ -737,7 +744,7 @@ export function SessionTerminal({
|
||||
sendInput(SEQ_CTRL_C);
|
||||
}}
|
||||
>
|
||||
^C
|
||||
{CLI_TERMINAL_KEY_LABELS.ctrlC}
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
|
||||
@@ -27,6 +27,8 @@ import { useMobileScrollLock } from "../hooks/useMobileScrollLock";
|
||||
import { useViewportMode } from "../hooks/useViewportMode";
|
||||
import { getSessionTabId } from "../utils/getSessionTabId";
|
||||
|
||||
const WARNING_ICON = "⚠️";
|
||||
|
||||
interface SubtaskBreakdownModalProps {
|
||||
isOpen: boolean;
|
||||
onClose: () => void;
|
||||
@@ -718,7 +720,7 @@ export function SubtaskBreakdownModal({ isOpen, onClose, initialDescription, onT
|
||||
className="ai-error-panel"
|
||||
role="alert"
|
||||
>
|
||||
<div className="ai-error-icon">⚠️</div>
|
||||
<div className="ai-error-icon">{WARNING_ICON}</div>
|
||||
<div className="ai-error-message">{view.errorMessage}</div>
|
||||
<div className="ai-error-actions">
|
||||
<button className="btn btn-primary" onClick={() => void handleRetry()} disabled={isRetrying}>
|
||||
|
||||
@@ -48,6 +48,8 @@ export interface PendingImage {
|
||||
type TaskExecutionModeSelection = "standard" | "fast";
|
||||
export type BranchSelectionMode = "project-default" | "auto-new" | "existing" | "custom-new" | "shared-group";
|
||||
|
||||
const PRESET_OPTION_SEPARATOR = "──────────";
|
||||
|
||||
export interface TaskFormProps {
|
||||
mode: "create" | "edit";
|
||||
|
||||
@@ -1140,7 +1142,7 @@ export function TaskForm({
|
||||
disabled={disabled}
|
||||
>
|
||||
<option value="default">{t("taskForm.presetUseDefault", "Use default")}</option>
|
||||
{availablePresets.length > 0 ? <option disabled>──────────</option> : null}
|
||||
{availablePresets.length > 0 ? <option disabled>{PRESET_OPTION_SEPARATOR}</option> : null}
|
||||
{availablePresets.map((preset) => (
|
||||
<option key={preset.id} value={preset.id}>{preset.name}</option>
|
||||
))}
|
||||
|
||||
@@ -49,6 +49,14 @@ const XTERM_INIT_TIMEOUT_MS = 10000;
|
||||
|
||||
const XTERM_IMPORT_RETRY_DELAYS_MS = [500, 1500, 3000] as const;
|
||||
|
||||
const TERMINAL_KEY_LABELS = {
|
||||
ctrl: "Ctrl",
|
||||
alt: "Alt",
|
||||
escape: "ESC",
|
||||
tab: "Tab",
|
||||
pxUnit: "px",
|
||||
} as const;
|
||||
|
||||
export function ctrlChar(key: string): string {
|
||||
if (!key) {
|
||||
return "";
|
||||
@@ -1588,7 +1596,7 @@ export function TerminalModal({ isOpen, onClose, initialCommand, initialCommandG
|
||||
onClick={() => toggleModifier("ctrl")}
|
||||
aria-pressed={stickyModifier === "ctrl"}
|
||||
>
|
||||
Ctrl
|
||||
{TERMINAL_KEY_LABELS.ctrl}
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
@@ -1602,7 +1610,7 @@ export function TerminalModal({ isOpen, onClose, initialCommand, initialCommandG
|
||||
onClick={() => toggleModifier("alt")}
|
||||
aria-pressed={stickyModifier === "alt"}
|
||||
>
|
||||
Alt
|
||||
{TERMINAL_KEY_LABELS.alt}
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
@@ -1612,7 +1620,7 @@ export function TerminalModal({ isOpen, onClose, initialCommand, initialCommandG
|
||||
onTouchStart={preserveShortcutFocus}
|
||||
onClick={() => sendLiteralShortcut("\x1b")}
|
||||
>
|
||||
ESC
|
||||
{TERMINAL_KEY_LABELS.escape}
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
@@ -1622,7 +1630,7 @@ export function TerminalModal({ isOpen, onClose, initialCommand, initialCommandG
|
||||
onTouchStart={preserveShortcutFocus}
|
||||
onClick={() => sendLiteralShortcut("\t")}
|
||||
>
|
||||
Tab
|
||||
{TERMINAL_KEY_LABELS.tab}
|
||||
</button>
|
||||
</div>
|
||||
{/*
|
||||
@@ -1780,7 +1788,7 @@ export function TerminalModal({ isOpen, onClose, initialCommand, initialCommandG
|
||||
<Minus size={14} />
|
||||
</button>
|
||||
<span className="terminal-font-size-value" data-testid="terminal-font-size-value">
|
||||
{fontSize}px
|
||||
{fontSize}{TERMINAL_KEY_LABELS.pxUnit}
|
||||
</span>
|
||||
<button
|
||||
type="button"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import type { PluginDashboardViewContext } from "./types";
|
||||
import { AlertTriangle } from "lucide-react";
|
||||
import { lazy, Suspense, type LazyExoticComponent, type ReactElement, type ReactNode } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { ErrorBoundary } from "../components/ErrorBoundary";
|
||||
import "./pluginViewRegistry.css";
|
||||
|
||||
@@ -47,14 +48,16 @@ export function __test_clearPluginViewRegistry(): void {
|
||||
}
|
||||
|
||||
function PluginViewUnavailable({ viewId }: { viewId: string }): ReactNode {
|
||||
const { t } = useTranslation("app");
|
||||
|
||||
return (
|
||||
<section className="card plugin-dashboard-view-missing" data-testid="plugin-view-unavailable">
|
||||
<h2 className="plugin-dashboard-view-missing-title">
|
||||
<AlertTriangle />
|
||||
Plugin view unavailable
|
||||
{t("plugins.viewUnavailable", "Plugin view unavailable")}
|
||||
</h2>
|
||||
<p className="plugin-dashboard-view-missing-description">
|
||||
No host registration found for <code>{viewId}</code>.
|
||||
{t("plugins.noHostRegistration", "No host registration found for")} <code>{viewId}</code>.
|
||||
</p>
|
||||
</section>
|
||||
);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,4 @@
|
||||
{
|
||||
"actions": {
|
||||
"cancel": "Cancel",
|
||||
"close": "Close",
|
||||
"save": "Save"
|
||||
},
|
||||
"agents": {
|
||||
"ratings": {
|
||||
"trendDeclining": "↓ Declining",
|
||||
@@ -34,7 +29,6 @@
|
||||
"minutesAgo_other": "{{count}}m ago"
|
||||
}
|
||||
},
|
||||
"archive": "Archive",
|
||||
"board": {
|
||||
"rejection": {
|
||||
"capacityExhausted": "That column is at capacity. Try again when a slot frees up.",
|
||||
@@ -44,7 +38,6 @@
|
||||
"workflowMismatch": "Drag can't move a card between workflows. Use the workflow switcher instead."
|
||||
}
|
||||
},
|
||||
"cancel": "Cancel",
|
||||
"chat": {
|
||||
"failedToGetResponse": "Failed to get response",
|
||||
"failureReferenceId": "ID",
|
||||
@@ -54,25 +47,23 @@
|
||||
"openMailboxMessage": "Open mailbox message",
|
||||
"toolCallArgsPrefix": "args",
|
||||
"toolCallResultPrefix": "result",
|
||||
"toolCallsCount_one": "{{count}} tool calls",
|
||||
"toolCallsCount_other": "{{count}} tool calls",
|
||||
"toolCallsHeader": "Tool calls",
|
||||
"toolCallStatusCompleted": "completed",
|
||||
"toolCallStatusError": "error",
|
||||
"toolCallStatusErrors": "errors",
|
||||
"toolCallStatusRunning": "running",
|
||||
"toolCallsCount_one": "{{count}} tool calls",
|
||||
"toolCallsCount_other": "{{count}} tool calls",
|
||||
"toolCallsHeader": "Tool calls",
|
||||
"viewFailureDetails": "View failure details"
|
||||
},
|
||||
"close": "Close",
|
||||
"columns": {
|
||||
"archived": "Archived",
|
||||
"done": "Done",
|
||||
"in-progress": "In Progress",
|
||||
"in-review": "In Review",
|
||||
"todo": "Todo",
|
||||
"triage": "Planning"
|
||||
"commandCenter": {
|
||||
"range": {
|
||||
"allTime": "All time",
|
||||
"last24h": "Last 24h",
|
||||
"last30d": "Last 30 days",
|
||||
"last7d": "Last 7 days"
|
||||
}
|
||||
},
|
||||
"delete": "Delete",
|
||||
"health": {
|
||||
"anomaly": {
|
||||
"duplicateActiveId": "Duplicate active task ID",
|
||||
@@ -110,13 +101,6 @@
|
||||
"modelSetToDefault": "{{label}} model set to default"
|
||||
}
|
||||
},
|
||||
"nodeStatus": {
|
||||
"connecting": "Connecting",
|
||||
"error": "Error",
|
||||
"offline": "Offline",
|
||||
"online": "Online",
|
||||
"unknown": "Unknown"
|
||||
},
|
||||
"nodes": {
|
||||
"auth": {
|
||||
"differ": "Auth credentials differ",
|
||||
@@ -137,7 +121,13 @@
|
||||
"stopped": "Stopped"
|
||||
}
|
||||
},
|
||||
"refresh": "Refresh",
|
||||
"nodeStatus": {
|
||||
"connecting": "Connecting",
|
||||
"error": "Error",
|
||||
"offline": "Offline",
|
||||
"online": "Online",
|
||||
"unknown": "Unknown"
|
||||
},
|
||||
"research": {
|
||||
"providerGitHub": "GitHub",
|
||||
"providerLlmSynthesis": "LLM Synthesis",
|
||||
@@ -145,7 +135,6 @@
|
||||
"providerPageFetch": "Page Fetch",
|
||||
"providerWebSearch": "Web Search"
|
||||
},
|
||||
"retry": "Retry",
|
||||
"routing": {
|
||||
"policyLabel": {
|
||||
"block": "Block execution",
|
||||
@@ -205,14 +194,11 @@
|
||||
"zai": "GLM models by Zhipu AI — strong multilingual support"
|
||||
}
|
||||
},
|
||||
"skip": "Skip",
|
||||
"taskForm": {
|
||||
"nodeStatusConnecting": "Connecting",
|
||||
"nodeStatusError": "Error",
|
||||
"nodeStatusOffline": "Offline",
|
||||
"nodeStatusOnline": "Online",
|
||||
"phasePostMerge": "Post-merge",
|
||||
"phasePreMerge": "Pre-merge"
|
||||
"nodeStatusOnline": "Online"
|
||||
},
|
||||
"taskReview": {
|
||||
"never": "Never",
|
||||
@@ -220,8 +206,19 @@
|
||||
"refreshSourceInitialLoad": "Initial load",
|
||||
"refreshSourceManual": "Manual"
|
||||
},
|
||||
"tryAgain": "Try Again",
|
||||
"workflow": {
|
||||
"aggregateAllPassed": "All passed",
|
||||
"aggregateInProgress": "In progress",
|
||||
"aggregateNoResults": "No results",
|
||||
"customWorkflowFallback": "Custom workflow",
|
||||
"defaultWorkflow": "Default",
|
||||
"executionAwaitingCliApproval": "Awaiting CLI approval",
|
||||
"executionAwaitingInput": "Awaiting input",
|
||||
"executionCompleted": "Completed",
|
||||
"executionNotStarted": "Not started",
|
||||
"executionPaused": "Paused",
|
||||
"executionPostMerge": "Post-merge steps running",
|
||||
"executionPreMerge": "Pre-merge steps running",
|
||||
"postMerge": "Post-merge",
|
||||
"preMerge": "Pre-merge",
|
||||
"statusAdvisory": "Advisory failure",
|
||||
@@ -230,5 +227,24 @@
|
||||
"statusRunning": "Running…",
|
||||
"statusSkipped": "Skipped",
|
||||
"waitingForOutput": "Waiting for agent output…"
|
||||
},
|
||||
"workflowNodes": {
|
||||
"summaryAwaitInput": "Waits for user input",
|
||||
"summaryCodeDefault": "TypeScript",
|
||||
"summaryGateAdvisory": "Advisory",
|
||||
"summaryGateBlocks": "Gate (blocks)",
|
||||
"summaryHoldRelease": "Release: {{release}}",
|
||||
"summaryLoopIterations_one": "{{count}}x",
|
||||
"summaryLoopIterations_other": "{{count}}x",
|
||||
"summaryLoopUntilContains": "until contains \"{{value}}\"",
|
||||
"summaryLoopUntilMatches": "until matches /{{pattern}}/",
|
||||
"summaryNotConfigured": "Not configured",
|
||||
"summaryReviewType": "{{type}} review",
|
||||
"summarySeamExecute": "Execute (engine)",
|
||||
"summarySeamMerge": "Merge boundary",
|
||||
"summarySeamPlanning": "Plan (engine)",
|
||||
"summarySeamReview": "Review (engine)",
|
||||
"summarySeamStepExecute": "Step execute (engine)",
|
||||
"summarySeamUnknown": "Seam: {{seam}}"
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,4 @@
|
||||
{
|
||||
"actions": {
|
||||
"cancel": "Cancelar",
|
||||
"close": "Cerrar",
|
||||
"save": "Guardar"
|
||||
},
|
||||
"agents": {
|
||||
"ratings": {
|
||||
"trendDeclining": "",
|
||||
@@ -34,7 +29,6 @@
|
||||
"minutesAgo_other": ""
|
||||
}
|
||||
},
|
||||
"archive": "Archivar",
|
||||
"board": {
|
||||
"rejection": {
|
||||
"capacityExhausted": "",
|
||||
@@ -44,7 +38,6 @@
|
||||
"workflowMismatch": ""
|
||||
}
|
||||
},
|
||||
"cancel": "Cancelar",
|
||||
"chat": {
|
||||
"failedToGetResponse": "",
|
||||
"failureReferenceId": "",
|
||||
@@ -54,25 +47,23 @@
|
||||
"openMailboxMessage": "",
|
||||
"toolCallArgsPrefix": "",
|
||||
"toolCallResultPrefix": "",
|
||||
"toolCallsCount_one": "",
|
||||
"toolCallsCount_other": "",
|
||||
"toolCallsHeader": "",
|
||||
"toolCallStatusCompleted": "",
|
||||
"toolCallStatusError": "",
|
||||
"toolCallStatusErrors": "",
|
||||
"toolCallStatusRunning": "",
|
||||
"toolCallsCount_one": "",
|
||||
"toolCallsCount_other": "",
|
||||
"toolCallsHeader": "",
|
||||
"viewFailureDetails": ""
|
||||
},
|
||||
"close": "Cerrar",
|
||||
"columns": {
|
||||
"archived": "Archivado",
|
||||
"done": "Hecho",
|
||||
"in-progress": "En progreso",
|
||||
"in-review": "En revisión",
|
||||
"todo": "Por hacer",
|
||||
"triage": "Planificación"
|
||||
"commandCenter": {
|
||||
"range": {
|
||||
"allTime": "",
|
||||
"last24h": "",
|
||||
"last30d": "",
|
||||
"last7d": ""
|
||||
}
|
||||
},
|
||||
"delete": "Eliminar",
|
||||
"health": {
|
||||
"anomaly": {
|
||||
"duplicateActiveId": "",
|
||||
@@ -110,13 +101,6 @@
|
||||
"modelSetToDefault": ""
|
||||
}
|
||||
},
|
||||
"nodeStatus": {
|
||||
"connecting": "",
|
||||
"error": "",
|
||||
"offline": "",
|
||||
"online": "",
|
||||
"unknown": ""
|
||||
},
|
||||
"nodes": {
|
||||
"auth": {
|
||||
"differ": "",
|
||||
@@ -137,7 +121,13 @@
|
||||
"stopped": ""
|
||||
}
|
||||
},
|
||||
"refresh": "Actualizar",
|
||||
"nodeStatus": {
|
||||
"connecting": "",
|
||||
"error": "",
|
||||
"offline": "",
|
||||
"online": "",
|
||||
"unknown": ""
|
||||
},
|
||||
"research": {
|
||||
"providerGitHub": "",
|
||||
"providerLlmSynthesis": "",
|
||||
@@ -145,7 +135,6 @@
|
||||
"providerPageFetch": "",
|
||||
"providerWebSearch": ""
|
||||
},
|
||||
"retry": "Reintentar",
|
||||
"routing": {
|
||||
"policyLabel": {
|
||||
"block": "",
|
||||
@@ -205,14 +194,11 @@
|
||||
"zai": ""
|
||||
}
|
||||
},
|
||||
"skip": "Omitir",
|
||||
"taskForm": {
|
||||
"nodeStatusConnecting": "",
|
||||
"nodeStatusError": "",
|
||||
"nodeStatusOffline": "",
|
||||
"nodeStatusOnline": "",
|
||||
"phasePostMerge": "",
|
||||
"phasePreMerge": ""
|
||||
"nodeStatusOnline": ""
|
||||
},
|
||||
"taskReview": {
|
||||
"never": "",
|
||||
@@ -220,8 +206,19 @@
|
||||
"refreshSourceInitialLoad": "",
|
||||
"refreshSourceManual": ""
|
||||
},
|
||||
"tryAgain": "Reintentar",
|
||||
"workflow": {
|
||||
"aggregateAllPassed": "",
|
||||
"aggregateInProgress": "",
|
||||
"aggregateNoResults": "",
|
||||
"customWorkflowFallback": "",
|
||||
"defaultWorkflow": "",
|
||||
"executionAwaitingCliApproval": "",
|
||||
"executionAwaitingInput": "",
|
||||
"executionCompleted": "",
|
||||
"executionNotStarted": "",
|
||||
"executionPaused": "",
|
||||
"executionPostMerge": "",
|
||||
"executionPreMerge": "",
|
||||
"postMerge": "",
|
||||
"preMerge": "",
|
||||
"statusAdvisory": "",
|
||||
@@ -230,5 +227,24 @@
|
||||
"statusRunning": "",
|
||||
"statusSkipped": "",
|
||||
"waitingForOutput": ""
|
||||
},
|
||||
"workflowNodes": {
|
||||
"summaryAwaitInput": "",
|
||||
"summaryCodeDefault": "",
|
||||
"summaryGateAdvisory": "",
|
||||
"summaryGateBlocks": "",
|
||||
"summaryHoldRelease": "",
|
||||
"summaryLoopIterations_one": "",
|
||||
"summaryLoopIterations_other": "",
|
||||
"summaryLoopUntilContains": "",
|
||||
"summaryLoopUntilMatches": "",
|
||||
"summaryNotConfigured": "",
|
||||
"summaryReviewType": "",
|
||||
"summarySeamExecute": "",
|
||||
"summarySeamMerge": "",
|
||||
"summarySeamPlanning": "",
|
||||
"summarySeamReview": "",
|
||||
"summarySeamStepExecute": "",
|
||||
"summarySeamUnknown": ""
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,4 @@
|
||||
{
|
||||
"actions": {
|
||||
"cancel": "Annuler",
|
||||
"close": "Fermer",
|
||||
"save": "Enregistrer"
|
||||
},
|
||||
"agents": {
|
||||
"ratings": {
|
||||
"trendDeclining": "",
|
||||
@@ -34,7 +29,6 @@
|
||||
"minutesAgo_other": ""
|
||||
}
|
||||
},
|
||||
"archive": "Archiver",
|
||||
"board": {
|
||||
"rejection": {
|
||||
"capacityExhausted": "",
|
||||
@@ -44,7 +38,6 @@
|
||||
"workflowMismatch": ""
|
||||
}
|
||||
},
|
||||
"cancel": "Annuler",
|
||||
"chat": {
|
||||
"failedToGetResponse": "",
|
||||
"failureReferenceId": "",
|
||||
@@ -54,25 +47,23 @@
|
||||
"openMailboxMessage": "",
|
||||
"toolCallArgsPrefix": "",
|
||||
"toolCallResultPrefix": "",
|
||||
"toolCallsCount_one": "",
|
||||
"toolCallsCount_other": "",
|
||||
"toolCallsHeader": "",
|
||||
"toolCallStatusCompleted": "",
|
||||
"toolCallStatusError": "",
|
||||
"toolCallStatusErrors": "",
|
||||
"toolCallStatusRunning": "",
|
||||
"toolCallsCount_one": "",
|
||||
"toolCallsCount_other": "",
|
||||
"toolCallsHeader": "",
|
||||
"viewFailureDetails": ""
|
||||
},
|
||||
"close": "Fermer",
|
||||
"columns": {
|
||||
"archived": "Archivé",
|
||||
"done": "Terminé",
|
||||
"in-progress": "En cours",
|
||||
"in-review": "En revue",
|
||||
"todo": "À faire",
|
||||
"triage": "Planification"
|
||||
"commandCenter": {
|
||||
"range": {
|
||||
"allTime": "",
|
||||
"last24h": "",
|
||||
"last30d": "",
|
||||
"last7d": ""
|
||||
}
|
||||
},
|
||||
"delete": "Supprimer",
|
||||
"health": {
|
||||
"anomaly": {
|
||||
"duplicateActiveId": "",
|
||||
@@ -110,13 +101,6 @@
|
||||
"modelSetToDefault": ""
|
||||
}
|
||||
},
|
||||
"nodeStatus": {
|
||||
"connecting": "",
|
||||
"error": "",
|
||||
"offline": "",
|
||||
"online": "",
|
||||
"unknown": ""
|
||||
},
|
||||
"nodes": {
|
||||
"auth": {
|
||||
"differ": "",
|
||||
@@ -137,7 +121,13 @@
|
||||
"stopped": ""
|
||||
}
|
||||
},
|
||||
"refresh": "Actualiser",
|
||||
"nodeStatus": {
|
||||
"connecting": "",
|
||||
"error": "",
|
||||
"offline": "",
|
||||
"online": "",
|
||||
"unknown": ""
|
||||
},
|
||||
"research": {
|
||||
"providerGitHub": "",
|
||||
"providerLlmSynthesis": "",
|
||||
@@ -145,7 +135,6 @@
|
||||
"providerPageFetch": "",
|
||||
"providerWebSearch": ""
|
||||
},
|
||||
"retry": "Réessayer",
|
||||
"routing": {
|
||||
"policyLabel": {
|
||||
"block": "",
|
||||
@@ -205,14 +194,11 @@
|
||||
"zai": ""
|
||||
}
|
||||
},
|
||||
"skip": "Ignorer",
|
||||
"taskForm": {
|
||||
"nodeStatusConnecting": "",
|
||||
"nodeStatusError": "",
|
||||
"nodeStatusOffline": "",
|
||||
"nodeStatusOnline": "",
|
||||
"phasePostMerge": "",
|
||||
"phasePreMerge": ""
|
||||
"nodeStatusOnline": ""
|
||||
},
|
||||
"taskReview": {
|
||||
"never": "",
|
||||
@@ -220,8 +206,19 @@
|
||||
"refreshSourceInitialLoad": "",
|
||||
"refreshSourceManual": ""
|
||||
},
|
||||
"tryAgain": "Réessayer",
|
||||
"workflow": {
|
||||
"aggregateAllPassed": "",
|
||||
"aggregateInProgress": "",
|
||||
"aggregateNoResults": "",
|
||||
"customWorkflowFallback": "",
|
||||
"defaultWorkflow": "",
|
||||
"executionAwaitingCliApproval": "",
|
||||
"executionAwaitingInput": "",
|
||||
"executionCompleted": "",
|
||||
"executionNotStarted": "",
|
||||
"executionPaused": "",
|
||||
"executionPostMerge": "",
|
||||
"executionPreMerge": "",
|
||||
"postMerge": "",
|
||||
"preMerge": "",
|
||||
"statusAdvisory": "",
|
||||
@@ -230,5 +227,24 @@
|
||||
"statusRunning": "",
|
||||
"statusSkipped": "",
|
||||
"waitingForOutput": ""
|
||||
},
|
||||
"workflowNodes": {
|
||||
"summaryAwaitInput": "",
|
||||
"summaryCodeDefault": "",
|
||||
"summaryGateAdvisory": "",
|
||||
"summaryGateBlocks": "",
|
||||
"summaryHoldRelease": "",
|
||||
"summaryLoopIterations_one": "",
|
||||
"summaryLoopIterations_other": "",
|
||||
"summaryLoopUntilContains": "",
|
||||
"summaryLoopUntilMatches": "",
|
||||
"summaryNotConfigured": "",
|
||||
"summaryReviewType": "",
|
||||
"summarySeamExecute": "",
|
||||
"summarySeamMerge": "",
|
||||
"summarySeamPlanning": "",
|
||||
"summarySeamReview": "",
|
||||
"summarySeamStepExecute": "",
|
||||
"summarySeamUnknown": ""
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -21,6 +21,7 @@
|
||||
"agentRunLogsBackHint": "[Esc/q] 실행 목록으로 돌아가기",
|
||||
"agentRunLogsTitle": "실행 로그 ({{index}})",
|
||||
"agentsFooterHints": "[s] 시작 [x] 중지 [D] 삭제 [r] 새로고침 [Tab] 포커스 ↑↓ 선택",
|
||||
"agentsListTitle_one": "",
|
||||
"agentsListTitle_other": "",
|
||||
"agentsNoAgents": "에이전트가 없습니다.",
|
||||
"agentStarted": "에이전트 시작됨",
|
||||
@@ -44,6 +45,7 @@
|
||||
"filesEmpty": "(비어 있음)",
|
||||
"filesEmptyFile": "(빈 파일)",
|
||||
"filesFooterHints": "[Tab] 창 전환 [↑↓/jk] 이동 [Enter] 열기 [←/→] 접기/펼치기 [.] 숨김 [w] 줄 바꿈 [p] 프로젝트 [r] 새로고침",
|
||||
"filesMoreLines_one": "",
|
||||
"filesMoreLines_other": "",
|
||||
"filesSelectProject": "프로젝트 선택",
|
||||
"filesSelectToPreview": "미리볼 파일을 선택하세요",
|
||||
@@ -151,6 +153,7 @@
|
||||
"settingsFooterHints": "[Tab] 패널 전환 ↑↓ 설정 선택 [Space] 불리언 토글 [+/-] 숫자 조정 [←/→] 열거형 순환 [C/V/X/P/L/U/K/R] 원격 작업",
|
||||
"settingsInteractivePanelTitle": "설정",
|
||||
"settingsLoadingSettings": "설정 불러오는 중…",
|
||||
"settingsMoreModels_one": "",
|
||||
"settingsMoreModels_other": "",
|
||||
"settingsPanelTitle": "설정",
|
||||
"settingsPersistentTokenRegenerated": "영구 토큰이 재생성됨",
|
||||
@@ -218,9 +221,6 @@
|
||||
"utilitiesKillVitest": "Vitest 프로세스 종료",
|
||||
"utilitiesPanelTitle": "유틸리티",
|
||||
"utilitiesRefreshStats": "통계 새로고침",
|
||||
"utilitiesToggleEnginePause": "엔진 일시 정지 전환",
|
||||
"agentsListTitle_one": "",
|
||||
"filesMoreLines_one": "",
|
||||
"settingsMoreModels_one": ""
|
||||
"utilitiesToggleEnginePause": "엔진 일시 정지 전환"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,4 @@
|
||||
{
|
||||
"actions": {
|
||||
"cancel": "취소",
|
||||
"close": "닫기",
|
||||
"save": "저장"
|
||||
},
|
||||
"agents": {
|
||||
"ratings": {
|
||||
"trendDeclining": "",
|
||||
@@ -34,7 +29,6 @@
|
||||
"minutesAgo_other": ""
|
||||
}
|
||||
},
|
||||
"archive": "보관",
|
||||
"board": {
|
||||
"rejection": {
|
||||
"capacityExhausted": "",
|
||||
@@ -44,7 +38,6 @@
|
||||
"workflowMismatch": ""
|
||||
}
|
||||
},
|
||||
"cancel": "취소",
|
||||
"chat": {
|
||||
"failedToGetResponse": "",
|
||||
"failureReferenceId": "",
|
||||
@@ -54,25 +47,23 @@
|
||||
"openMailboxMessage": "",
|
||||
"toolCallArgsPrefix": "",
|
||||
"toolCallResultPrefix": "",
|
||||
"toolCallsCount_one": "",
|
||||
"toolCallsCount_other": "",
|
||||
"toolCallsHeader": "",
|
||||
"toolCallStatusCompleted": "",
|
||||
"toolCallStatusError": "",
|
||||
"toolCallStatusErrors": "",
|
||||
"toolCallStatusRunning": "",
|
||||
"toolCallsCount_one": "",
|
||||
"toolCallsCount_other": "",
|
||||
"toolCallsHeader": "",
|
||||
"viewFailureDetails": ""
|
||||
},
|
||||
"close": "닫기",
|
||||
"columns": {
|
||||
"archived": "보관됨",
|
||||
"done": "완료",
|
||||
"in-progress": "진행 중",
|
||||
"in-review": "검토 중",
|
||||
"todo": "할 일",
|
||||
"triage": "계획"
|
||||
"commandCenter": {
|
||||
"range": {
|
||||
"allTime": "",
|
||||
"last24h": "",
|
||||
"last30d": "",
|
||||
"last7d": ""
|
||||
}
|
||||
},
|
||||
"delete": "삭제",
|
||||
"health": {
|
||||
"anomaly": {
|
||||
"duplicateActiveId": "",
|
||||
@@ -110,13 +101,6 @@
|
||||
"modelSetToDefault": ""
|
||||
}
|
||||
},
|
||||
"nodeStatus": {
|
||||
"connecting": "",
|
||||
"error": "",
|
||||
"offline": "",
|
||||
"online": "",
|
||||
"unknown": ""
|
||||
},
|
||||
"nodes": {
|
||||
"auth": {
|
||||
"differ": "",
|
||||
@@ -137,7 +121,13 @@
|
||||
"stopped": ""
|
||||
}
|
||||
},
|
||||
"refresh": "새로고침",
|
||||
"nodeStatus": {
|
||||
"connecting": "",
|
||||
"error": "",
|
||||
"offline": "",
|
||||
"online": "",
|
||||
"unknown": ""
|
||||
},
|
||||
"research": {
|
||||
"providerGitHub": "",
|
||||
"providerLlmSynthesis": "",
|
||||
@@ -145,7 +135,6 @@
|
||||
"providerPageFetch": "",
|
||||
"providerWebSearch": ""
|
||||
},
|
||||
"retry": "재시도",
|
||||
"routing": {
|
||||
"policyLabel": {
|
||||
"block": "",
|
||||
@@ -205,14 +194,11 @@
|
||||
"zai": ""
|
||||
}
|
||||
},
|
||||
"skip": "건너뛰기",
|
||||
"taskForm": {
|
||||
"nodeStatusConnecting": "",
|
||||
"nodeStatusError": "",
|
||||
"nodeStatusOffline": "",
|
||||
"nodeStatusOnline": "",
|
||||
"phasePostMerge": "",
|
||||
"phasePreMerge": ""
|
||||
"nodeStatusOnline": ""
|
||||
},
|
||||
"taskReview": {
|
||||
"never": "",
|
||||
@@ -220,8 +206,19 @@
|
||||
"refreshSourceInitialLoad": "",
|
||||
"refreshSourceManual": ""
|
||||
},
|
||||
"tryAgain": "다시 시도",
|
||||
"workflow": {
|
||||
"aggregateAllPassed": "",
|
||||
"aggregateInProgress": "",
|
||||
"aggregateNoResults": "",
|
||||
"customWorkflowFallback": "",
|
||||
"defaultWorkflow": "",
|
||||
"executionAwaitingCliApproval": "",
|
||||
"executionAwaitingInput": "",
|
||||
"executionCompleted": "",
|
||||
"executionNotStarted": "",
|
||||
"executionPaused": "",
|
||||
"executionPostMerge": "",
|
||||
"executionPreMerge": "",
|
||||
"postMerge": "",
|
||||
"preMerge": "",
|
||||
"statusAdvisory": "",
|
||||
@@ -230,5 +227,24 @@
|
||||
"statusRunning": "",
|
||||
"statusSkipped": "",
|
||||
"waitingForOutput": ""
|
||||
},
|
||||
"workflowNodes": {
|
||||
"summaryAwaitInput": "",
|
||||
"summaryCodeDefault": "",
|
||||
"summaryGateAdvisory": "",
|
||||
"summaryGateBlocks": "",
|
||||
"summaryHoldRelease": "",
|
||||
"summaryLoopIterations_one": "",
|
||||
"summaryLoopIterations_other": "",
|
||||
"summaryLoopUntilContains": "",
|
||||
"summaryLoopUntilMatches": "",
|
||||
"summaryNotConfigured": "",
|
||||
"summaryReviewType": "",
|
||||
"summarySeamExecute": "",
|
||||
"summarySeamMerge": "",
|
||||
"summarySeamPlanning": "",
|
||||
"summarySeamReview": "",
|
||||
"summarySeamStepExecute": "",
|
||||
"summarySeamUnknown": ""
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -21,6 +21,7 @@
|
||||
"agentRunLogsBackHint": "[Esc/q] 返回运行列表",
|
||||
"agentRunLogsTitle": "运行日志({{index}})",
|
||||
"agentsFooterHints": "[s] 启动 [x] 停止 [D] 删除 [r] 刷新 [Tab] 焦点 ↑↓ 选择",
|
||||
"agentsListTitle_one": "",
|
||||
"agentsListTitle_other": "",
|
||||
"agentsNoAgents": "未找到代理。",
|
||||
"agentStarted": "代理已启动",
|
||||
@@ -44,6 +45,7 @@
|
||||
"filesEmpty": "(空)",
|
||||
"filesEmptyFile": "(空文件)",
|
||||
"filesFooterHints": "[Tab] 切换面板 [↑↓/jk] 移动 [Enter] 打开 [←/→] 折叠/展开 [.] 隐藏文件 [w] 换行 [p] 项目 [r] 重载",
|
||||
"filesMoreLines_one": "",
|
||||
"filesMoreLines_other": "",
|
||||
"filesSelectProject": "选择项目",
|
||||
"filesSelectToPreview": "选择文件以预览",
|
||||
@@ -151,6 +153,7 @@
|
||||
"settingsFooterHints": "[Tab] 切换面板 ↑↓ 选择设置 [Space] 切换布尔 [+/-] 调整数值 [←/→] 循环枚举 [C/V/X/P/L/U/K/R] 远程操作",
|
||||
"settingsInteractivePanelTitle": "设置",
|
||||
"settingsLoadingSettings": "正在加载设置…",
|
||||
"settingsMoreModels_one": "",
|
||||
"settingsMoreModels_other": "",
|
||||
"settingsPanelTitle": "设置",
|
||||
"settingsPersistentTokenRegenerated": "持久令牌已重新生成",
|
||||
@@ -218,9 +221,6 @@
|
||||
"utilitiesKillVitest": "终止 Vitest 进程",
|
||||
"utilitiesPanelTitle": "工具",
|
||||
"utilitiesRefreshStats": "刷新统计",
|
||||
"utilitiesToggleEnginePause": "切换引擎暂停",
|
||||
"agentsListTitle_one": "",
|
||||
"filesMoreLines_one": "",
|
||||
"settingsMoreModels_one": ""
|
||||
"utilitiesToggleEnginePause": "切换引擎暂停"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,4 @@
|
||||
{
|
||||
"actions": {
|
||||
"cancel": "取消",
|
||||
"close": "关闭",
|
||||
"save": "保存"
|
||||
},
|
||||
"agents": {
|
||||
"ratings": {
|
||||
"trendDeclining": "",
|
||||
@@ -34,7 +29,6 @@
|
||||
"minutesAgo_other": ""
|
||||
}
|
||||
},
|
||||
"archive": "归档",
|
||||
"board": {
|
||||
"rejection": {
|
||||
"capacityExhausted": "",
|
||||
@@ -44,7 +38,6 @@
|
||||
"workflowMismatch": ""
|
||||
}
|
||||
},
|
||||
"cancel": "取消",
|
||||
"chat": {
|
||||
"failedToGetResponse": "",
|
||||
"failureReferenceId": "",
|
||||
@@ -54,25 +47,23 @@
|
||||
"openMailboxMessage": "",
|
||||
"toolCallArgsPrefix": "",
|
||||
"toolCallResultPrefix": "",
|
||||
"toolCallsCount_one": "",
|
||||
"toolCallsCount_other": "",
|
||||
"toolCallsHeader": "",
|
||||
"toolCallStatusCompleted": "",
|
||||
"toolCallStatusError": "",
|
||||
"toolCallStatusErrors": "",
|
||||
"toolCallStatusRunning": "",
|
||||
"toolCallsCount_one": "",
|
||||
"toolCallsCount_other": "",
|
||||
"toolCallsHeader": "",
|
||||
"viewFailureDetails": ""
|
||||
},
|
||||
"close": "关闭",
|
||||
"columns": {
|
||||
"archived": "已归档",
|
||||
"done": "已完成",
|
||||
"in-progress": "进行中",
|
||||
"in-review": "审核中",
|
||||
"todo": "待办",
|
||||
"triage": "规划"
|
||||
"commandCenter": {
|
||||
"range": {
|
||||
"allTime": "",
|
||||
"last24h": "",
|
||||
"last30d": "",
|
||||
"last7d": ""
|
||||
}
|
||||
},
|
||||
"delete": "删除",
|
||||
"health": {
|
||||
"anomaly": {
|
||||
"duplicateActiveId": "",
|
||||
@@ -110,13 +101,6 @@
|
||||
"modelSetToDefault": ""
|
||||
}
|
||||
},
|
||||
"nodeStatus": {
|
||||
"connecting": "",
|
||||
"error": "",
|
||||
"offline": "",
|
||||
"online": "",
|
||||
"unknown": ""
|
||||
},
|
||||
"nodes": {
|
||||
"auth": {
|
||||
"differ": "",
|
||||
@@ -137,7 +121,13 @@
|
||||
"stopped": ""
|
||||
}
|
||||
},
|
||||
"refresh": "刷新",
|
||||
"nodeStatus": {
|
||||
"connecting": "",
|
||||
"error": "",
|
||||
"offline": "",
|
||||
"online": "",
|
||||
"unknown": ""
|
||||
},
|
||||
"research": {
|
||||
"providerGitHub": "",
|
||||
"providerLlmSynthesis": "",
|
||||
@@ -145,7 +135,6 @@
|
||||
"providerPageFetch": "",
|
||||
"providerWebSearch": ""
|
||||
},
|
||||
"retry": "重试",
|
||||
"routing": {
|
||||
"policyLabel": {
|
||||
"block": "",
|
||||
@@ -205,14 +194,11 @@
|
||||
"zai": ""
|
||||
}
|
||||
},
|
||||
"skip": "跳过",
|
||||
"taskForm": {
|
||||
"nodeStatusConnecting": "",
|
||||
"nodeStatusError": "",
|
||||
"nodeStatusOffline": "",
|
||||
"nodeStatusOnline": "",
|
||||
"phasePostMerge": "",
|
||||
"phasePreMerge": ""
|
||||
"nodeStatusOnline": ""
|
||||
},
|
||||
"taskReview": {
|
||||
"never": "",
|
||||
@@ -220,8 +206,19 @@
|
||||
"refreshSourceInitialLoad": "",
|
||||
"refreshSourceManual": ""
|
||||
},
|
||||
"tryAgain": "重试",
|
||||
"workflow": {
|
||||
"aggregateAllPassed": "",
|
||||
"aggregateInProgress": "",
|
||||
"aggregateNoResults": "",
|
||||
"customWorkflowFallback": "",
|
||||
"defaultWorkflow": "",
|
||||
"executionAwaitingCliApproval": "",
|
||||
"executionAwaitingInput": "",
|
||||
"executionCompleted": "",
|
||||
"executionNotStarted": "",
|
||||
"executionPaused": "",
|
||||
"executionPostMerge": "",
|
||||
"executionPreMerge": "",
|
||||
"postMerge": "",
|
||||
"preMerge": "",
|
||||
"statusAdvisory": "",
|
||||
@@ -230,5 +227,24 @@
|
||||
"statusRunning": "",
|
||||
"statusSkipped": "",
|
||||
"waitingForOutput": ""
|
||||
},
|
||||
"workflowNodes": {
|
||||
"summaryAwaitInput": "",
|
||||
"summaryCodeDefault": "",
|
||||
"summaryGateAdvisory": "",
|
||||
"summaryGateBlocks": "",
|
||||
"summaryHoldRelease": "",
|
||||
"summaryLoopIterations_one": "",
|
||||
"summaryLoopIterations_other": "",
|
||||
"summaryLoopUntilContains": "",
|
||||
"summaryLoopUntilMatches": "",
|
||||
"summaryNotConfigured": "",
|
||||
"summaryReviewType": "",
|
||||
"summarySeamExecute": "",
|
||||
"summarySeamMerge": "",
|
||||
"summarySeamPlanning": "",
|
||||
"summarySeamReview": "",
|
||||
"summarySeamStepExecute": "",
|
||||
"summarySeamUnknown": ""
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -21,6 +21,7 @@
|
||||
"agentRunLogsBackHint": "[Esc/q] 返回執行列表",
|
||||
"agentRunLogsTitle": "執行日誌({{index}})",
|
||||
"agentsFooterHints": "[s] 啟動 [x] 停止 [D] 刪除 [r] 重新整理 [Tab] 焦點 ↑↓ 選擇",
|
||||
"agentsListTitle_one": "",
|
||||
"agentsListTitle_other": "",
|
||||
"agentsNoAgents": "找不到代理。",
|
||||
"agentStarted": "代理已啟動",
|
||||
@@ -44,6 +45,7 @@
|
||||
"filesEmpty": "(空)",
|
||||
"filesEmptyFile": "(空檔案)",
|
||||
"filesFooterHints": "[Tab] 切換面板 [↑↓/jk] 移動 [Enter] 開啟 [←/→] 折疊/展開 [.] 隱藏檔案 [w] 換行 [p] 專案 [r] 重新載入",
|
||||
"filesMoreLines_one": "",
|
||||
"filesMoreLines_other": "",
|
||||
"filesSelectProject": "選擇專案",
|
||||
"filesSelectToPreview": "選擇檔案以預覽",
|
||||
@@ -151,6 +153,7 @@
|
||||
"settingsFooterHints": "[Tab] 切換面板 ↑↓ 選擇設定 [Space] 切換布林 [+/-] 調整數值 [←/→] 循環枚舉 [C/V/X/P/L/U/K/R] 遠端操作",
|
||||
"settingsInteractivePanelTitle": "設定",
|
||||
"settingsLoadingSettings": "正在載入設定…",
|
||||
"settingsMoreModels_one": "",
|
||||
"settingsMoreModels_other": "",
|
||||
"settingsPanelTitle": "設定",
|
||||
"settingsPersistentTokenRegenerated": "持久金鑰已重新產生",
|
||||
@@ -218,9 +221,6 @@
|
||||
"utilitiesKillVitest": "終止 Vitest 行程",
|
||||
"utilitiesPanelTitle": "工具",
|
||||
"utilitiesRefreshStats": "重新整理統計",
|
||||
"utilitiesToggleEnginePause": "切換引擎暫停",
|
||||
"agentsListTitle_one": "",
|
||||
"filesMoreLines_one": "",
|
||||
"settingsMoreModels_one": ""
|
||||
"utilitiesToggleEnginePause": "切換引擎暫停"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,4 @@
|
||||
{
|
||||
"actions": {
|
||||
"cancel": "取消",
|
||||
"close": "關閉",
|
||||
"save": "儲存"
|
||||
},
|
||||
"agents": {
|
||||
"ratings": {
|
||||
"trendDeclining": "",
|
||||
@@ -34,7 +29,6 @@
|
||||
"minutesAgo_other": ""
|
||||
}
|
||||
},
|
||||
"archive": "封存",
|
||||
"board": {
|
||||
"rejection": {
|
||||
"capacityExhausted": "",
|
||||
@@ -44,7 +38,6 @@
|
||||
"workflowMismatch": ""
|
||||
}
|
||||
},
|
||||
"cancel": "取消",
|
||||
"chat": {
|
||||
"failedToGetResponse": "",
|
||||
"failureReferenceId": "",
|
||||
@@ -54,25 +47,23 @@
|
||||
"openMailboxMessage": "",
|
||||
"toolCallArgsPrefix": "",
|
||||
"toolCallResultPrefix": "",
|
||||
"toolCallsCount_one": "",
|
||||
"toolCallsCount_other": "",
|
||||
"toolCallsHeader": "",
|
||||
"toolCallStatusCompleted": "",
|
||||
"toolCallStatusError": "",
|
||||
"toolCallStatusErrors": "",
|
||||
"toolCallStatusRunning": "",
|
||||
"toolCallsCount_one": "",
|
||||
"toolCallsCount_other": "",
|
||||
"toolCallsHeader": "",
|
||||
"viewFailureDetails": ""
|
||||
},
|
||||
"close": "關閉",
|
||||
"columns": {
|
||||
"archived": "已封存",
|
||||
"done": "已完成",
|
||||
"in-progress": "進行中",
|
||||
"in-review": "審查中",
|
||||
"todo": "待辦",
|
||||
"triage": "規劃"
|
||||
"commandCenter": {
|
||||
"range": {
|
||||
"allTime": "",
|
||||
"last24h": "",
|
||||
"last30d": "",
|
||||
"last7d": ""
|
||||
}
|
||||
},
|
||||
"delete": "刪除",
|
||||
"health": {
|
||||
"anomaly": {
|
||||
"duplicateActiveId": "",
|
||||
@@ -110,13 +101,6 @@
|
||||
"modelSetToDefault": ""
|
||||
}
|
||||
},
|
||||
"nodeStatus": {
|
||||
"connecting": "",
|
||||
"error": "",
|
||||
"offline": "",
|
||||
"online": "",
|
||||
"unknown": ""
|
||||
},
|
||||
"nodes": {
|
||||
"auth": {
|
||||
"differ": "",
|
||||
@@ -137,7 +121,13 @@
|
||||
"stopped": ""
|
||||
}
|
||||
},
|
||||
"refresh": "重新整理",
|
||||
"nodeStatus": {
|
||||
"connecting": "",
|
||||
"error": "",
|
||||
"offline": "",
|
||||
"online": "",
|
||||
"unknown": ""
|
||||
},
|
||||
"research": {
|
||||
"providerGitHub": "",
|
||||
"providerLlmSynthesis": "",
|
||||
@@ -145,7 +135,6 @@
|
||||
"providerPageFetch": "",
|
||||
"providerWebSearch": ""
|
||||
},
|
||||
"retry": "重試",
|
||||
"routing": {
|
||||
"policyLabel": {
|
||||
"block": "",
|
||||
@@ -205,14 +194,11 @@
|
||||
"zai": ""
|
||||
}
|
||||
},
|
||||
"skip": "略過",
|
||||
"taskForm": {
|
||||
"nodeStatusConnecting": "",
|
||||
"nodeStatusError": "",
|
||||
"nodeStatusOffline": "",
|
||||
"nodeStatusOnline": "",
|
||||
"phasePostMerge": "",
|
||||
"phasePreMerge": ""
|
||||
"nodeStatusOnline": ""
|
||||
},
|
||||
"taskReview": {
|
||||
"never": "",
|
||||
@@ -220,8 +206,19 @@
|
||||
"refreshSourceInitialLoad": "",
|
||||
"refreshSourceManual": ""
|
||||
},
|
||||
"tryAgain": "重試",
|
||||
"workflow": {
|
||||
"aggregateAllPassed": "",
|
||||
"aggregateInProgress": "",
|
||||
"aggregateNoResults": "",
|
||||
"customWorkflowFallback": "",
|
||||
"defaultWorkflow": "",
|
||||
"executionAwaitingCliApproval": "",
|
||||
"executionAwaitingInput": "",
|
||||
"executionCompleted": "",
|
||||
"executionNotStarted": "",
|
||||
"executionPaused": "",
|
||||
"executionPostMerge": "",
|
||||
"executionPreMerge": "",
|
||||
"postMerge": "",
|
||||
"preMerge": "",
|
||||
"statusAdvisory": "",
|
||||
@@ -230,5 +227,24 @@
|
||||
"statusRunning": "",
|
||||
"statusSkipped": "",
|
||||
"waitingForOutput": ""
|
||||
},
|
||||
"workflowNodes": {
|
||||
"summaryAwaitInput": "",
|
||||
"summaryCodeDefault": "",
|
||||
"summaryGateAdvisory": "",
|
||||
"summaryGateBlocks": "",
|
||||
"summaryHoldRelease": "",
|
||||
"summaryLoopIterations_one": "",
|
||||
"summaryLoopIterations_other": "",
|
||||
"summaryLoopUntilContains": "",
|
||||
"summaryLoopUntilMatches": "",
|
||||
"summaryNotConfigured": "",
|
||||
"summaryReviewType": "",
|
||||
"summarySeamExecute": "",
|
||||
"summarySeamMerge": "",
|
||||
"summarySeamPlanning": "",
|
||||
"summarySeamReview": "",
|
||||
"summarySeamStepExecute": "",
|
||||
"summarySeamUnknown": ""
|
||||
}
|
||||
}
|
||||
|
||||
459
packages/i18n/src/resources.d.ts
vendored
459
packages/i18n/src/resources.d.ts
vendored
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user