refactor(ui): consolidate sidebar from 24 items to 9 flat items
Remove 6 group headers and reduce navigation to: Dashboard, Agents, Work, Messages, Documents, Approvals, Runs, Social Media, Settings. Absorbed sections remain accessible via command palette. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
9928efed81
commit
d5c9440ab4
3 files changed
+110
-179
No files matched your search
+28
-99
@@ -2,35 +2,25 @@ import { useCallback, useEffect, useMemo, useRef } from "react";
|
||||
import { AnimatePresence, motion } from "framer-motion";
|
||||
import {
|
||||
ArrowClockwise,
|
||||
Bell,
|
||||
Brain,
|
||||
CalendarBlank,
|
||||
CaretUpDown,
|
||||
ChartBar,
|
||||
ChatCircle,
|
||||
Check,
|
||||
Command,
|
||||
Cpu,
|
||||
CurrencyCircleDollar,
|
||||
FileText,
|
||||
FolderOpen,
|
||||
Gear,
|
||||
Heartbeat,
|
||||
Kanban,
|
||||
Lightning,
|
||||
ListChecks,
|
||||
MagnifyingGlass,
|
||||
Megaphone,
|
||||
Plus,
|
||||
Pulse,
|
||||
Robot,
|
||||
Rows,
|
||||
ShieldCheck,
|
||||
Trash,
|
||||
UserPlus,
|
||||
SquaresFour,
|
||||
Target,
|
||||
TreeStructure,
|
||||
SidebarSimple,
|
||||
TerminalWindow,
|
||||
WarningCircle,
|
||||
@@ -91,69 +81,22 @@ import { unwrap } from "./lib/desktop";
|
||||
import { formatMoney, formatTime } from "./lib/formatters";
|
||||
|
||||
type NavItemDef = { id: SectionId; labelKey: string; icon: typeof SquaresFour };
|
||||
type NavGroupDef = { labelKey: string; items: NavItemDef[] };
|
||||
type NavItem = { id: SectionId; label: string; icon: typeof SquaresFour };
|
||||
type NavGroup = { label: string; items: NavItem[] };
|
||||
type PaletteAction = {
|
||||
key: string;
|
||||
section: SectionId;
|
||||
entityId?: string;
|
||||
};
|
||||
|
||||
const navGroupDefs: NavGroupDef[] = [
|
||||
{
|
||||
labelKey: "nav.group.overview",
|
||||
items: [
|
||||
{ id: "overview", labelKey: "nav.overview", icon: SquaresFour },
|
||||
{ id: "inbox", labelKey: "nav.inbox", icon: Bell },
|
||||
{ id: "standup", labelKey: "nav.standup", icon: Heartbeat },
|
||||
{ id: "performance", labelKey: "nav.performance", icon: ChartBar },
|
||||
{ id: "runs", labelKey: "nav.runs", icon: TerminalWindow },
|
||||
],
|
||||
},
|
||||
{
|
||||
labelKey: "nav.group.organization",
|
||||
items: [
|
||||
{ id: "agents", labelKey: "nav.agents", icon: Robot },
|
||||
{ id: "orgchart", labelKey: "nav.orgchart", icon: TreeStructure },
|
||||
{ id: "hiring", labelKey: "nav.hiring", icon: UserPlus },
|
||||
{ id: "communication", labelKey: "nav.communication", icon: ChatCircle },
|
||||
{ id: "goals", labelKey: "nav.goals", icon: Target },
|
||||
{ id: "projects", labelKey: "nav.projects", icon: Kanban },
|
||||
{ id: "tasks", labelKey: "nav.tasks", icon: ListChecks },
|
||||
{ id: "sprints", labelKey: "nav.sprints", icon: Rows },
|
||||
],
|
||||
},
|
||||
{
|
||||
labelKey: "nav.group.automation",
|
||||
items: [
|
||||
{ id: "automation", labelKey: "nav.automation", icon: Lightning },
|
||||
{ id: "approvals", labelKey: "nav.approvals", icon: ShieldCheck },
|
||||
],
|
||||
},
|
||||
{
|
||||
labelKey: "nav.group.knowledge",
|
||||
items: [
|
||||
{ id: "documents", labelKey: "nav.documents", icon: FileText },
|
||||
{ id: "knowledge", labelKey: "nav.knowledge", icon: Brain },
|
||||
{ id: "meetings", labelKey: "nav.meetings", icon: CalendarBlank },
|
||||
],
|
||||
},
|
||||
{
|
||||
labelKey: "nav.group.operations",
|
||||
items: [
|
||||
{ id: "costs", labelKey: "nav.costs", icon: CurrencyCircleDollar },
|
||||
{ id: "activity", labelKey: "nav.activity", icon: Pulse },
|
||||
{ id: "social", labelKey: "nav.social", icon: Megaphone },
|
||||
],
|
||||
},
|
||||
{
|
||||
labelKey: "nav.group.infrastructure",
|
||||
items: [
|
||||
{ id: "connectors", labelKey: "nav.connectors", icon: Cpu },
|
||||
{ id: "workspaces", labelKey: "nav.workspaces", icon: FolderOpen },
|
||||
],
|
||||
},
|
||||
const sidebarNavDefs: NavItemDef[] = [
|
||||
{ id: "overview", labelKey: "nav.overview", icon: SquaresFour },
|
||||
{ id: "agents", labelKey: "nav.agents", icon: Robot },
|
||||
{ id: "tasks", labelKey: "nav.work", icon: ListChecks },
|
||||
{ id: "communication", labelKey: "nav.communication", icon: ChatCircle },
|
||||
{ id: "documents", labelKey: "nav.documents", icon: FileText },
|
||||
{ id: "approvals", labelKey: "nav.approvals", icon: ShieldCheck },
|
||||
{ id: "runs", labelKey: "nav.runs", icon: TerminalWindow },
|
||||
{ id: "social", labelKey: "nav.social", icon: Megaphone },
|
||||
];
|
||||
|
||||
export function App() {
|
||||
@@ -167,11 +110,8 @@ export function App() {
|
||||
const setLocale = useAppStore((s) => s.setLocale);
|
||||
const t = useMemo(() => createTranslator(locale), [locale]);
|
||||
|
||||
const navGroups: NavGroup[] = useMemo(() => navGroupDefs.map((group) => ({
|
||||
label: t(group.labelKey),
|
||||
items: group.items.map((item) => ({ id: item.id, label: t(item.labelKey), icon: item.icon })),
|
||||
})), [t]);
|
||||
const navItems: NavItem[] = useMemo(() => navGroups.flatMap((group) => group.items).concat({ id: "settings", label: t("nav.settings"), icon: Gear }), [navGroups, t]);
|
||||
const sidebarNav: NavItem[] = useMemo(() => sidebarNavDefs.map((item) => ({ id: item.id, label: t(item.labelKey), icon: item.icon })), [t]);
|
||||
const navItems: NavItem[] = useMemo(() => sidebarNav.concat({ id: "settings", label: t("nav.settings"), icon: Gear }), [sidebarNav, t]);
|
||||
|
||||
const snapshot = useAppStore((s) => s.snapshot);
|
||||
const setSnapshot = useAppStore((s) => s.setSnapshot);
|
||||
@@ -436,7 +376,6 @@ export function App() {
|
||||
|
||||
const activeInboxCount = inboxItems.length;
|
||||
const navBadges = useMemo<Partial<Record<SectionId, { count: number; tone: "default" | "warn" | "danger" }>>>(() => badges ? {
|
||||
inbox: activeInboxCount > 0 ? { count: activeInboxCount, tone: "warn" } : undefined,
|
||||
runs:
|
||||
badges.failedRuns > 0
|
||||
? { count: badges.failedRuns, tone: "danger" }
|
||||
@@ -445,8 +384,7 @@ export function App() {
|
||||
: undefined,
|
||||
tasks: badges.todoTasks > 0 ? { count: badges.todoTasks, tone: "default" } : undefined,
|
||||
approvals: badges.pendingApprovals > 0 ? { count: badges.pendingApprovals, tone: "warn" } : undefined,
|
||||
costs: badges.budgetWarnings > 0 ? { count: badges.budgetWarnings, tone: "danger" } : undefined,
|
||||
communication: badges.unreadMessages > 0 ? { count: badges.unreadMessages, tone: "warn" } : undefined,
|
||||
communication: (badges.unreadMessages + activeInboxCount) > 0 ? { count: badges.unreadMessages + activeInboxCount, tone: "warn" } : undefined,
|
||||
} : {}, [badges, activeInboxCount]);
|
||||
|
||||
const companyWorkspaces = useMemo(() => snapshot?.workspaces.filter((workspace) => !currentCompany || workspace.companyId === currentCompany.id) ?? [], [snapshot, currentCompany]);
|
||||
@@ -775,30 +713,21 @@ export function App() {
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
<nav aria-label="Main navigation" className={`flex-1 overflow-y-auto pb-3 ${sidebarCollapsed ? "px-1.5" : "px-3"}`}>
|
||||
{navGroups.map((group) => (
|
||||
<div key={group.label} className="mb-1">
|
||||
{!sidebarCollapsed ? (
|
||||
<div className="px-3 pb-1.5 pt-4 text-[10px] font-semibold uppercase tracking-[0.08em] text-[color:var(--muted)]">{group.label}</div>
|
||||
) : (
|
||||
<div className="pb-1 pt-3" />
|
||||
)}
|
||||
<div className="space-y-0.5">
|
||||
{group.items.map((item) => (
|
||||
<SectionButton
|
||||
key={item.id}
|
||||
active={section === item.id}
|
||||
label={item.label}
|
||||
icon={item.icon}
|
||||
onClick={() => setSection(item.id)}
|
||||
badge={navBadges[item.id]?.count}
|
||||
badgeTone={navBadges[item.id]?.tone}
|
||||
collapsed={sidebarCollapsed}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
<nav aria-label="Main navigation" className={`flex-1 overflow-y-auto pb-3 ${sidebarCollapsed ? "px-1.5 pt-2" : "px-3 pt-2"}`}>
|
||||
<div className="space-y-0.5">
|
||||
{sidebarNav.map((item) => (
|
||||
<SectionButton
|
||||
key={item.id}
|
||||
active={section === item.id}
|
||||
label={item.label}
|
||||
icon={item.icon}
|
||||
onClick={() => setSection(item.id)}
|
||||
badge={navBadges[item.id]?.count}
|
||||
badgeTone={navBadges[item.id]?.tone}
|
||||
collapsed={sidebarCollapsed}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</nav>
|
||||
<div className={`border-t border-[color:var(--line)] py-2 ${sidebarCollapsed ? "px-1.5" : "px-3"}`}>
|
||||
<SectionButton
|
||||
@@ -825,7 +754,7 @@ export function App() {
|
||||
<div className="mx-auto flex w-full max-w-[1040px] flex-col px-6 py-6 lg:px-10 lg:py-8">
|
||||
<header className="mb-8 flex items-start justify-between gap-4 border-b border-[color:var(--line)] pb-5 lg:mb-10 lg:gap-6">
|
||||
<h1 className="text-[24px] tracking-[-0.03em] text-[color:var(--text)] lg:text-[31px]">
|
||||
{navItems.find((item) => item.id === section)?.label}
|
||||
{navItems.find((item) => item.id === section)?.label ?? t(`nav.${section}`)}
|
||||
</h1>
|
||||
<div className="flex shrink-0 items-center gap-3 lg:gap-5">
|
||||
<button
|
||||
|
||||
+41
-40
@@ -12,6 +12,7 @@ export const en: Record<string, string> = {
|
||||
"nav.goals": "Goals",
|
||||
"nav.projects": "Projects",
|
||||
"nav.tasks": "Tasks",
|
||||
"nav.work": "Work",
|
||||
"nav.sprints": "Sprints",
|
||||
"nav.automation": "Automation",
|
||||
"nav.approvals": "Approvals",
|
||||
@@ -51,7 +52,7 @@ export const en: Record<string, string> = {
|
||||
// ── Onboarding flow ──
|
||||
"onboarding.title": "Start a real local-first\nagent company.",
|
||||
"onboarding.subtitle": "AgentCompany Desktop",
|
||||
"onboarding.description": "This flow creates one company, binds one execution-ready connector, links an optional workspace, writes the first goal, creates the operating project, and queues the first execution task.",
|
||||
"onboarding.description": "Set up your company, connect an AI runtime, and launch your first task.",
|
||||
"onboarding.step1Title": "Create the operating boundary",
|
||||
"onboarding.step2Title": "Define the first real goal",
|
||||
"onboarding.step3Title": "Launch summary",
|
||||
@@ -64,29 +65,29 @@ export const en: Record<string, string> = {
|
||||
"onboarding.companyDescriptionPlaceholder": "Optional context for the company operating model.",
|
||||
"onboarding.primaryConnector": "Primary connector",
|
||||
"onboarding.connectorReadiness": "Connector readiness",
|
||||
"onboarding.connectorInfo": "Only connectors in `ready` state with session resume and structured transcripts are offered here. Re-run connector health checks from Settings if the list is empty.",
|
||||
"onboarding.connectorInfo": "If this list is empty, check connector health in Settings.",
|
||||
"onboarding.workspaceFolder": "Workspace folder",
|
||||
"onboarding.workspaceFolderOptional": "(optional)",
|
||||
"onboarding.workspaceFolderPlaceholder": "/Users/you/project",
|
||||
"onboarding.workspaceHelp": "If set, the first execution task will be bound to this path and the path will be registered as the primary workspace.",
|
||||
"onboarding.workspaceHelp": "First task will use this as the workspace.",
|
||||
"onboarding.autoApprove": "Auto-approve hire and strategy approvals",
|
||||
"onboarding.autoApproveLabel": "Auto-approve hire and strategy approvals",
|
||||
"onboarding.autoApproveHelp": "Useful for single-operator flows. Leave it off if you want the board to gate organization changes explicitly.",
|
||||
"onboarding.autoApproveHelp": "Skips board review for hiring and strategy changes.",
|
||||
"onboarding.continue": "Continue",
|
||||
"onboarding.back": "Back",
|
||||
"onboarding.goal": "Goal",
|
||||
"onboarding.goalPlaceholder": "e.g. Ship the first customer-ready desktop demo",
|
||||
"onboarding.acceptanceCriteria": "Acceptance criteria",
|
||||
"onboarding.acceptanceCriteriaPlaceholder": "Describe what successful execution looks like, what cannot be skipped, and any delivery constraints.",
|
||||
"onboarding.acceptanceCriteriaPlaceholder": "What does success look like?",
|
||||
"onboarding.executionHandoff": "Execution handoff",
|
||||
"onboarding.executionHandoffLine1": "The selected connector becomes the CEO agent runtime for the first launch.",
|
||||
"onboarding.executionHandoffLine2": "The app will create the company, the primary workspace, the CEO agent, the kickoff project, and the first task.",
|
||||
"onboarding.executionHandoffLine3": "If the worker is already ready, the first run will be queued immediately; otherwise the scheduler will pick it up once the runtime is available.",
|
||||
"onboarding.executionHandoffLine1": "The selected connector runs the CEO agent.",
|
||||
"onboarding.executionHandoffLine2": "Creates the company, workspace, CEO agent, project, and first task.",
|
||||
"onboarding.executionHandoffLine3": "Execution starts immediately or when the runtime is available.",
|
||||
"onboarding.launching": "Launching...",
|
||||
"onboarding.launchCompany": "Launch Company",
|
||||
"onboarding.isLive": "is live.",
|
||||
"onboarding.launchDescription": "The company shell is created. The first project and task are registered, and the kickoff execution is queued.",
|
||||
"onboarding.launchDescriptionDeferred": "The company shell is created. The first project and task are registered, and the kickoff execution is prepared for deferred execution once the runtime is ready.",
|
||||
"onboarding.launchDescription": "Company created. First task queued.",
|
||||
"onboarding.launchDescriptionDeferred": "Company created. Execution starts when runtime is ready.",
|
||||
"onboarding.connector": "Connector",
|
||||
"onboarding.leadAgent": "Lead agent",
|
||||
"onboarding.ceoAgentCreated": "CEO agent created",
|
||||
@@ -104,12 +105,12 @@ export const en: Record<string, string> = {
|
||||
"onboarding.openControlCenter": "Open Control Center",
|
||||
"onboarding.cancel": "Cancel",
|
||||
"onboarding.enterCompanyName": "Enter a company name.",
|
||||
"onboarding.connectorRequired": "At least one execution-ready connector is required before you can continue.",
|
||||
"onboarding.connectorRequired": "A ready connector is required to continue.",
|
||||
"onboarding.describeFirstGoal": "Describe the first real company goal.",
|
||||
"onboarding.unableToBootstrap": "Unable to bootstrap the company.",
|
||||
"onboarding.unableToOpenControlCenter": "Unable to open the control center.",
|
||||
"onboarding.connectorNotInstalled": "Install, authenticate, and fully validate at least one supported CLI runtime before creating the company.",
|
||||
"onboarding.connectorWarning": "Install, authenticate, and fully validate at least one supported CLI runtime before creating the company.",
|
||||
"onboarding.connectorNotInstalled": "Install and authenticate a CLI runtime first.",
|
||||
"onboarding.connectorWarning": "Install and authenticate a CLI runtime first.",
|
||||
"onboarding.languageSelection": "Language",
|
||||
"onboarding.selectLanguage": "Select language",
|
||||
|
||||
@@ -321,11 +322,11 @@ export const en: Record<string, string> = {
|
||||
"exec.workspaceLabel": "Workspace:",
|
||||
"exec.costLabel": "Cost:",
|
||||
"exec.beingReviewedBy": "Being reviewed by {0}",
|
||||
"exec.submittedForReview": "{0} submitted this task for review. {1} will approve, request revisions, or escalate.",
|
||||
"exec.submittedForReview": "{0} submitted this task for review by {1}.",
|
||||
"exec.governanceRequired": "Governance action required",
|
||||
"exec.waitingOnReview": "Task is waiting on review",
|
||||
"exec.blockedGovernance": "Create an approval so leadership can resolve the blocker, provide credentials, or authorize the next privileged action.",
|
||||
"exec.reviewGovernance": "Create an approval entry if this task needs an explicit operator decision before it can move forward.",
|
||||
"exec.blockedGovernance": "Create an approval to unblock this task.",
|
||||
"exec.reviewGovernance": "Request a decision before proceeding.",
|
||||
"exec.createUnblockApproval": "Create unblock approval",
|
||||
"exec.createReviewApproval": "Create review approval",
|
||||
"exec.cancelRun": "Cancel run",
|
||||
@@ -342,7 +343,7 @@ export const en: Record<string, string> = {
|
||||
"exec.runningEllipsis": "Running...",
|
||||
"exec.completedRun": "Completed run",
|
||||
"exec.communication": "Communication",
|
||||
"exec.noMessagesYet": "No messages yet. Agents will post updates here during runs.",
|
||||
"exec.noMessagesYet": "No messages yet",
|
||||
"exec.sendMessage": "Send a message to the team...",
|
||||
"exec.send": "Send",
|
||||
"exec.createTask": "Create task",
|
||||
@@ -392,7 +393,7 @@ export const en: Record<string, string> = {
|
||||
"exec.reveal": "Reveal",
|
||||
"exec.noRemoteUrl": "No remote URL",
|
||||
"exec.selectWorkspace": "Select a workspace",
|
||||
"exec.selectWorkspaceDetail": "Choose a workspace to inspect the agents, tasks, runs, and documents bound to it.",
|
||||
"exec.selectWorkspaceDetail": "Select a workspace to view its details.",
|
||||
"exec.agents": "Agents",
|
||||
"exec.tasks": "Tasks",
|
||||
"exec.runs": "Runs",
|
||||
@@ -418,7 +419,7 @@ export const en: Record<string, string> = {
|
||||
"exec.enableUpdater": "Enable updater checks",
|
||||
"exec.companyAutonomy": "Company autonomy",
|
||||
"exec.autoApproveLabel": "Auto-approve hire and strategy approvals",
|
||||
"exec.autoApproveDesc": "Automatically approve agent hiring requests and CEO strategy approvals so the company can continue operating without waiting on the board for those specific approval types.",
|
||||
"exec.autoApproveDesc": "Auto-approve hiring and CEO strategy decisions without board review.",
|
||||
"exec.actions": "Actions",
|
||||
"exec.saveSettings": "Save settings",
|
||||
"exec.checkForUpdates": "Check for updates",
|
||||
@@ -437,7 +438,7 @@ export const en: Record<string, string> = {
|
||||
"exec.secretDeleted": "Secret deleted.",
|
||||
"exec.settingsSaved": "Settings saved.",
|
||||
"exec.updateCheckStarted": "Update check started.",
|
||||
"exec.updateCheckSkipped": "Update check skipped because no release update feed is configured.",
|
||||
"exec.updateCheckSkipped": "No update feed configured.",
|
||||
"exec.profileBackupCreated": "Profile backup created at {0}.",
|
||||
"exec.profileRestored": "Profile restored.",
|
||||
"exec.storeSecret": "Store secret",
|
||||
@@ -446,8 +447,8 @@ export const en: Record<string, string> = {
|
||||
"exec.secretNameFormat": "Name must be alphanumeric with underscores, starting with a letter or underscore.",
|
||||
"exec.secretValueLabel": "Secret value",
|
||||
"exec.secretValueEmpty": "Secret value cannot be empty.",
|
||||
"exec.secretValuePlaceholder": "Paste the secret value. It will be encrypted before persistence.",
|
||||
"exec.secretBindingInfo": "Connector secret bindings use `ENV_NAME=secret-name` lines. Values stay outside renderer state after submission.",
|
||||
"exec.secretValuePlaceholder": "Paste the secret value",
|
||||
"exec.secretBindingInfo": "Format: `ENV_NAME=secret-name`",
|
||||
"exec.status": "Status",
|
||||
|
||||
// ── Communication hub ──
|
||||
@@ -460,13 +461,13 @@ export const en: Record<string, string> = {
|
||||
"comm.agentsCount": "{0} agents",
|
||||
"comm.selectChannel": "Select a channel",
|
||||
"comm.selectChannelView": "Select a channel to view messages",
|
||||
"comm.monitorComms": "Monitor internal agent communications across departments",
|
||||
"comm.monitorComms": "",
|
||||
"comm.noDiscussionYet": "No discussion yet",
|
||||
"comm.commentsAppearHere": "Comments for this task will appear here as agents and the board coordinate.",
|
||||
"comm.commentsAppearHere": "No comments yet",
|
||||
"comm.noMatchFilters": "No messages match your filters",
|
||||
"comm.noMessagesChannel": "No messages in this channel yet",
|
||||
"comm.adjustFilters": "Try adjusting your search or filters",
|
||||
"comm.messagesAppear": "Messages will appear here as agents work and communicate",
|
||||
"comm.messagesAppear": "No messages yet",
|
||||
"comm.openTask": "Open task",
|
||||
"comm.selectChannelSend": "Select a channel to read and send messages.",
|
||||
"comm.replyInDiscussion": "Reply in task discussion...",
|
||||
@@ -524,8 +525,8 @@ export const en: Record<string, string> = {
|
||||
"dash.poor": "Poor",
|
||||
"dash.critical": "Critical",
|
||||
"dash.noAgentsYet": "No agents hired yet",
|
||||
"dash.createCeoAgent": "Create a CEO agent to start building your company",
|
||||
"dash.noActivityYet": "No activity yet. Start by creating agents and tasks.",
|
||||
"dash.createCeoAgent": "",
|
||||
"dash.noActivityYet": "No activity yet",
|
||||
"dash.liveRuns": "Live Runs",
|
||||
"dash.running": "running",
|
||||
"dash.allQuiet": "All quiet",
|
||||
@@ -569,7 +570,7 @@ export const en: Record<string, string> = {
|
||||
"dash.inProgress": "In Progress",
|
||||
"dash.inReview": "In Review",
|
||||
"dash.noTasksYet": "No tasks yet",
|
||||
"dash.tasksAppearBoard": "Tasks created by agents will appear here on the board",
|
||||
"dash.tasksAppearBoard": "No tasks yet",
|
||||
"dash.runFailed": "Run failed",
|
||||
"dash.browserAction": "Browser action",
|
||||
"dash.workflow": "Workflow",
|
||||
@@ -611,7 +612,7 @@ export const en: Record<string, string> = {
|
||||
|
||||
// ── Runs ──
|
||||
"runs.noRunsYet": "No runs yet",
|
||||
"runs.noRunsDetail": "Start a task run from the task queue or onboarding handoff. This surface becomes the operator console for queue state, failures, and live log tails.",
|
||||
"runs.noRunsDetail": "Runs appear here once tasks are executed.",
|
||||
"runs.activeLabel": "Active",
|
||||
"runs.queuedOrRunning": "Queued or running right now",
|
||||
"runs.needsAttention": "Needs attention",
|
||||
@@ -621,7 +622,7 @@ export const en: Record<string, string> = {
|
||||
"runs.runQueue": "Run queue",
|
||||
"runs.searchRuns": "Search by task, agent, connector, workspace, or error",
|
||||
"runs.noRunsMatch": "No runs match this filter",
|
||||
"runs.noRunsMatchDetail": "Widen the status filter or clear the search query to inspect the full run history.",
|
||||
"runs.noRunsMatchDetail": "Try adjusting the filters.",
|
||||
"runs.runDetail": "Run detail",
|
||||
"runs.openConsole": "Open console",
|
||||
"runs.cancelRun": "Cancel run",
|
||||
@@ -649,10 +650,10 @@ export const en: Record<string, string> = {
|
||||
"auto.rules": "Rules",
|
||||
"auto.activityLog": "Activity Log",
|
||||
"auto.noAutomationRules": "No automation rules",
|
||||
"auto.noAutomationDesc": "Create your first rule to make the company autonomous. Rules trigger actions based on events like task changes, run completions, and agent idle states.",
|
||||
"auto.noAutomationDesc": "Rules automate actions based on company events.",
|
||||
"auto.createFirstRule": "Create First Rule",
|
||||
"auto.noRulesMatch": "No rules match the current filter.",
|
||||
"auto.noActivityLog": "No automation activity yet. Rules will log executions here when they fire.",
|
||||
"auto.noActivityLog": "No activity yet",
|
||||
"auto.editRule": "Edit Automation Rule",
|
||||
"auto.newRuleTitle": "New Automation Rule",
|
||||
"auto.ruleName": "Rule Name",
|
||||
@@ -671,7 +672,7 @@ export const en: Record<string, string> = {
|
||||
"auto.workflowPipelines": "Workflow Pipelines",
|
||||
"auto.newWorkflow": "New Workflow",
|
||||
"auto.noWorkflowPipelines": "No workflow pipelines",
|
||||
"auto.noWorkflowDesc": "Workflows are multi-step automation pipelines. They chain actions together so your AI company runs end-to-end processes automatically.",
|
||||
"auto.noWorkflowDesc": "Chain multiple actions into automated pipelines.",
|
||||
"auto.createFirstWorkflow": "Create First Workflow",
|
||||
"auto.editWorkflow": "Edit Workflow",
|
||||
"auto.newWorkflowTitle": "New Workflow",
|
||||
@@ -681,7 +682,7 @@ export const en: Record<string, string> = {
|
||||
"auto.pipelineSteps": "Pipeline Steps (JSON Array)",
|
||||
"auto.createWorkflow": "Create Workflow",
|
||||
"auto.automationEngine": "Automation Engine",
|
||||
"auto.automationEngineDesc": "Rules trigger actions based on company events. Workflows chain multiple steps into pipelines. Together, they let your AI company run fully autonomously -- responding to changes, routing work, and keeping every department in sync without manual intervention.",
|
||||
"auto.automationEngineDesc": "Rules and workflows automate your company end-to-end.",
|
||||
"auto.automationRulesTab": "Automation Rules",
|
||||
"auto.workflowsTab": "Workflows",
|
||||
"auto.noStepsDefined": "No steps defined",
|
||||
@@ -694,12 +695,12 @@ export const en: Record<string, string> = {
|
||||
"social.accountsConnected": "{0} account{1} connected",
|
||||
"social.addAccount": "Add Account",
|
||||
"social.howItWorks": "How it works",
|
||||
"social.howItWorksDesc": "Add your social media accounts here. Click \"Login\" to open a browser where you can sign in. Your session is saved locally so marketing agents can post content, reply to users, and browse feeds using browser automation. All actions are logged and can require Board approval.",
|
||||
"social.howItWorksDesc": "Add accounts, log in via browser. Agents post through browser automation. All actions are logged.",
|
||||
"social.accounts": "Accounts",
|
||||
"social.actionHistory": "Action History",
|
||||
"social.noAccounts": "No social accounts",
|
||||
"social.noAccountsDesc": "Add your first social media account to enable marketing automation",
|
||||
"social.noActions": "No browser actions yet. Agents will create actions when working on social media tasks.",
|
||||
"social.noAccountsDesc": "Add an account to get started",
|
||||
"social.noActions": "No browser actions yet",
|
||||
"social.addSocialAccount": "Add Social Account",
|
||||
"social.platform": "Platform",
|
||||
"social.usernameHandle": "Username / Handle",
|
||||
@@ -754,7 +755,7 @@ export const en: Record<string, string> = {
|
||||
"standup.highlights": "Highlights",
|
||||
"standup.agentStatus": "Agent Status",
|
||||
"standup.noData": "No standup data",
|
||||
"standup.noDataDesc": "Company needs active agents to generate standup reports",
|
||||
"standup.noDataDesc": "Appears once agents are active",
|
||||
"standup.inProgress": "in progress",
|
||||
"standup.doneLabel": "done",
|
||||
"standup.blockedLabel": "blocked",
|
||||
@@ -782,7 +783,7 @@ export const en: Record<string, string> = {
|
||||
"conn.status": "Status",
|
||||
"conn.capabilityMatrix": "Capability matrix",
|
||||
"conn.command": "Command",
|
||||
"conn.commandInfo": "AgentCompany pins connector execution to the audited binary for this runtime. Command overrides are not accepted from the renderer.",
|
||||
"conn.commandInfo": "Pinned to the audited runtime binary.",
|
||||
"conn.model": "Model",
|
||||
"conn.modelRequired": "Model (required)",
|
||||
"conn.connectorDefault": "Use connector default",
|
||||
@@ -790,7 +791,7 @@ export const en: Record<string, string> = {
|
||||
"conn.loadingModels": "Loading available models...",
|
||||
"conn.secretBindings": "Secret bindings",
|
||||
"conn.operationalNotes": "Operational notes",
|
||||
"conn.healthCheckInfo": "Connector health checks run automatically on app launch, after save, and after terminal login is opened.",
|
||||
"conn.healthCheckInfo": "Health checks run automatically.",
|
||||
"conn.refreshingState": "Refreshing connector state...",
|
||||
"conn.latestHealthCheck": "Latest health-check detail",
|
||||
"conn.configDoc": "Configuration doc",
|
||||
|
||||
+41
-40
@@ -12,6 +12,7 @@ export const zh: Record<string, string> = {
|
||||
"nav.goals": "目标",
|
||||
"nav.projects": "项目",
|
||||
"nav.tasks": "任务",
|
||||
"nav.work": "工作",
|
||||
"nav.sprints": "迭代",
|
||||
"nav.automation": "自动化",
|
||||
"nav.approvals": "审批",
|
||||
@@ -51,7 +52,7 @@ export const zh: Record<string, string> = {
|
||||
// ── 引导流程 ──
|
||||
"onboarding.title": "创建一个本地优先的\n智能体公司。",
|
||||
"onboarding.subtitle": "AgentCompany 桌面端",
|
||||
"onboarding.description": "此流程将创建一个公司,绑定一个可执行的连接器,关联一个可选的工作区,编写第一个目标,创建运营项目,并安排第一个执行任务。",
|
||||
"onboarding.description": "创建公司、连接 AI 运行时、启动第一个任务。",
|
||||
"onboarding.step1Title": "建立运营边界",
|
||||
"onboarding.step2Title": "定义第一个目标",
|
||||
"onboarding.step3Title": "启动概要",
|
||||
@@ -64,29 +65,29 @@ export const zh: Record<string, string> = {
|
||||
"onboarding.companyDescriptionPlaceholder": "可选的公司运营模式说明。",
|
||||
"onboarding.primaryConnector": "主连接器",
|
||||
"onboarding.connectorReadiness": "连接器就绪状态",
|
||||
"onboarding.connectorInfo": "此处仅展示处于 `ready` 状态且支持会话恢复和结构化记录的连接器。如列表为空,请在设置中重新运行连接器健康检查。",
|
||||
"onboarding.connectorInfo": "列表为空时,请在设置中检查连接器健康状态。",
|
||||
"onboarding.workspaceFolder": "工作区目录",
|
||||
"onboarding.workspaceFolderOptional": "(可选)",
|
||||
"onboarding.workspaceFolderPlaceholder": "/Users/you/project",
|
||||
"onboarding.workspaceHelp": "设置后,首个执行任务将绑定到此路径,该路径将被注册为主工作区。",
|
||||
"onboarding.workspaceHelp": "首个任务将使用此路径作为工作区。",
|
||||
"onboarding.autoApprove": "自动批准招聘和战略审批",
|
||||
"onboarding.autoApproveLabel": "自动批准招聘和战略审批",
|
||||
"onboarding.autoApproveHelp": "适用于单操作员流程。如需董事会对组织变更进行明确审批,请关闭此选项。",
|
||||
"onboarding.autoApproveHelp": "跳过招聘和战略变更的董事会审批。",
|
||||
"onboarding.continue": "继续",
|
||||
"onboarding.back": "返回",
|
||||
"onboarding.goal": "目标",
|
||||
"onboarding.goalPlaceholder": "例如:交付第一个面向客户的桌面演示",
|
||||
"onboarding.acceptanceCriteria": "验收标准",
|
||||
"onboarding.acceptanceCriteriaPlaceholder": "描述成功执行的标准、不可跳过的事项以及交付约束。",
|
||||
"onboarding.acceptanceCriteriaPlaceholder": "成功的标准是什么?",
|
||||
"onboarding.executionHandoff": "执行交接",
|
||||
"onboarding.executionHandoffLine1": "所选连接器将作为首次启动的CEO智能体运行时。",
|
||||
"onboarding.executionHandoffLine2": "应用将创建公司、主工作区、CEO智能体、启动项目和第一个任务。",
|
||||
"onboarding.executionHandoffLine3": "如果执行器已就绪,首次运行将立即排队;否则调度器将在运行时可用后执行。",
|
||||
"onboarding.executionHandoffLine1": "所选连接器运行 CEO 智能体。",
|
||||
"onboarding.executionHandoffLine2": "创建公司、工作区、CEO 智能体、项目和首个任务。",
|
||||
"onboarding.executionHandoffLine3": "立即执行,或在运行时可用后执行。",
|
||||
"onboarding.launching": "正在启动...",
|
||||
"onboarding.launchCompany": "启动公司",
|
||||
"onboarding.isLive": "已上线。",
|
||||
"onboarding.launchDescription": "公司已创建。首个项目和任务已注册,启动执行已排入队列。",
|
||||
"onboarding.launchDescriptionDeferred": "公司已创建。首个项目和任务已注册,启动执行将在运行时就绪后进行。",
|
||||
"onboarding.launchDescription": "公司已创建,首个任务已排队。",
|
||||
"onboarding.launchDescriptionDeferred": "公司已创建,运行时就绪后开始执行。",
|
||||
"onboarding.connector": "连接器",
|
||||
"onboarding.leadAgent": "首席智能体",
|
||||
"onboarding.ceoAgentCreated": "CEO智能体已创建",
|
||||
@@ -104,12 +105,12 @@ export const zh: Record<string, string> = {
|
||||
"onboarding.openControlCenter": "打开控制中心",
|
||||
"onboarding.cancel": "取消",
|
||||
"onboarding.enterCompanyName": "请输入公司名称。",
|
||||
"onboarding.connectorRequired": "继续前需要至少一个处于可执行状态的连接器。",
|
||||
"onboarding.connectorRequired": "需要一个就绪的连接器才能继续。",
|
||||
"onboarding.describeFirstGoal": "请描述公司的第一个目标。",
|
||||
"onboarding.unableToBootstrap": "无法初始化公司。",
|
||||
"onboarding.unableToOpenControlCenter": "无法打开控制中心。",
|
||||
"onboarding.connectorNotInstalled": "请先安装、认证并验证至少一个受支持的CLI运行时,再创建公司。",
|
||||
"onboarding.connectorWarning": "请先安装、认证并验证至少一个受支持的CLI运行时,再创建公司。",
|
||||
"onboarding.connectorNotInstalled": "请先安装并认证一个 CLI 运行时。",
|
||||
"onboarding.connectorWarning": "请先安装并认证一个 CLI 运行时。",
|
||||
"onboarding.languageSelection": "语言",
|
||||
"onboarding.selectLanguage": "选择语言",
|
||||
|
||||
@@ -321,11 +322,11 @@ export const zh: Record<string, string> = {
|
||||
"exec.workspaceLabel": "工作区:",
|
||||
"exec.costLabel": "费用:",
|
||||
"exec.beingReviewedBy": "正在由 {0} 审核",
|
||||
"exec.submittedForReview": "{0} 已提交此任务进行审核。{1} 将批准、请求修改或升级处理。",
|
||||
"exec.submittedForReview": "{0} 已提交此任务由 {1} 审核。",
|
||||
"exec.governanceRequired": "需要治理操作",
|
||||
"exec.waitingOnReview": "任务等待审核中",
|
||||
"exec.blockedGovernance": "创建审批以便管理层解决阻塞、提供凭证或授权下一步特权操作。",
|
||||
"exec.reviewGovernance": "如果此任务需要操作者明确决策才能继续,请创建审批条目。",
|
||||
"exec.blockedGovernance": "创建审批以解除此任务的阻塞。",
|
||||
"exec.reviewGovernance": "继续前请求一个决策。",
|
||||
"exec.createUnblockApproval": "创建解除阻塞审批",
|
||||
"exec.createReviewApproval": "创建审核审批",
|
||||
"exec.cancelRun": "取消运行",
|
||||
@@ -342,7 +343,7 @@ export const zh: Record<string, string> = {
|
||||
"exec.runningEllipsis": "运行中...",
|
||||
"exec.completedRun": "已完成的运行",
|
||||
"exec.communication": "沟通",
|
||||
"exec.noMessagesYet": "暂无消息。智能体在运行时会在此发布更新。",
|
||||
"exec.noMessagesYet": "暂无消息",
|
||||
"exec.sendMessage": "向团队发送消息...",
|
||||
"exec.send": "发送",
|
||||
"exec.createTask": "创建任务",
|
||||
@@ -392,7 +393,7 @@ export const zh: Record<string, string> = {
|
||||
"exec.reveal": "在文件管理器中显示",
|
||||
"exec.noRemoteUrl": "无远程地址",
|
||||
"exec.selectWorkspace": "选择一个工作区",
|
||||
"exec.selectWorkspaceDetail": "选择一个工作区以检查绑定的智能体、任务、运行和文档。",
|
||||
"exec.selectWorkspaceDetail": "选择一个工作区以查看详情。",
|
||||
"exec.agents": "智能体",
|
||||
"exec.tasks": "任务",
|
||||
"exec.runs": "运行",
|
||||
@@ -418,7 +419,7 @@ export const zh: Record<string, string> = {
|
||||
"exec.enableUpdater": "启用更新检查",
|
||||
"exec.companyAutonomy": "公司自治",
|
||||
"exec.autoApproveLabel": "自动批准招聘和战略审批",
|
||||
"exec.autoApproveDesc": "自动批准智能体招聘请求和CEO战略审批,使公司无需等待董事会即可继续运营。",
|
||||
"exec.autoApproveDesc": "自动批准招聘和 CEO 战略决策,无需董事会审批。",
|
||||
"exec.actions": "操作",
|
||||
"exec.saveSettings": "保存设置",
|
||||
"exec.checkForUpdates": "检查更新",
|
||||
@@ -437,7 +438,7 @@ export const zh: Record<string, string> = {
|
||||
"exec.secretDeleted": "密钥已删除。",
|
||||
"exec.settingsSaved": "设置已保存。",
|
||||
"exec.updateCheckStarted": "更新检查已开始。",
|
||||
"exec.updateCheckSkipped": "更新检查已跳过,因为未配置发布更新源。",
|
||||
"exec.updateCheckSkipped": "未配置更新源。",
|
||||
"exec.profileBackupCreated": "配置备份已创建于 {0}。",
|
||||
"exec.profileRestored": "配置已恢复。",
|
||||
"exec.storeSecret": "存储密钥",
|
||||
@@ -446,8 +447,8 @@ export const zh: Record<string, string> = {
|
||||
"exec.secretNameFormat": "名称必须是字母数字加下划线,以字母或下划线开头。",
|
||||
"exec.secretValueLabel": "密钥值",
|
||||
"exec.secretValueEmpty": "密钥值不能为空。",
|
||||
"exec.secretValuePlaceholder": "粘贴密钥值。提交前将进行加密。",
|
||||
"exec.secretBindingInfo": "连接器密钥绑定使用 `ENV_NAME=secret-name` 格式。提交后值将不再保留在渲染进程状态中。",
|
||||
"exec.secretValuePlaceholder": "粘贴密钥值",
|
||||
"exec.secretBindingInfo": "格式:`ENV_NAME=secret-name`",
|
||||
"exec.status": "状态",
|
||||
|
||||
// ── 沟通中心 ──
|
||||
@@ -460,13 +461,13 @@ export const zh: Record<string, string> = {
|
||||
"comm.agentsCount": "{0} 个智能体",
|
||||
"comm.selectChannel": "选择一个频道",
|
||||
"comm.selectChannelView": "选择一个频道以查看消息",
|
||||
"comm.monitorComms": "监控各部门之间的内部智能体通信",
|
||||
"comm.monitorComms": "",
|
||||
"comm.noDiscussionYet": "暂无讨论",
|
||||
"comm.commentsAppearHere": "智能体和董事会协调时,此任务的评论将显示在这里。",
|
||||
"comm.commentsAppearHere": "暂无评论",
|
||||
"comm.noMatchFilters": "没有匹配筛选条件的消息",
|
||||
"comm.noMessagesChannel": "此频道暂无消息",
|
||||
"comm.adjustFilters": "尝试调整搜索条件或筛选器",
|
||||
"comm.messagesAppear": "智能体工作和通信时,消息将显示在这里",
|
||||
"comm.messagesAppear": "暂无消息",
|
||||
"comm.openTask": "打开任务",
|
||||
"comm.selectChannelSend": "选择一个频道以读取和发送消息。",
|
||||
"comm.replyInDiscussion": "在任务讨论中回复...",
|
||||
@@ -524,8 +525,8 @@ export const zh: Record<string, string> = {
|
||||
"dash.poor": "较差",
|
||||
"dash.critical": "危急",
|
||||
"dash.noAgentsYet": "尚未招聘智能体",
|
||||
"dash.createCeoAgent": "创建CEO智能体以开始构建您的公司",
|
||||
"dash.noActivityYet": "暂无活动。请先创建智能体和任务。",
|
||||
"dash.createCeoAgent": "",
|
||||
"dash.noActivityYet": "暂无活动",
|
||||
"dash.liveRuns": "实时运行",
|
||||
"dash.running": "运行中",
|
||||
"dash.allQuiet": "一切平静",
|
||||
@@ -569,7 +570,7 @@ export const zh: Record<string, string> = {
|
||||
"dash.inProgress": "进行中",
|
||||
"dash.inReview": "审核中",
|
||||
"dash.noTasksYet": "暂无任务",
|
||||
"dash.tasksAppearBoard": "智能体创建的任务将显示在此看板上",
|
||||
"dash.tasksAppearBoard": "暂无任务",
|
||||
"dash.runFailed": "运行失败",
|
||||
"dash.browserAction": "浏览器操作",
|
||||
"dash.workflow": "工作流",
|
||||
@@ -611,7 +612,7 @@ export const zh: Record<string, string> = {
|
||||
|
||||
// ── 运行 ──
|
||||
"runs.noRunsYet": "暂无运行",
|
||||
"runs.noRunsDetail": "从任务队列或引导交接启动任务运行。此界面将成为队列状态、失败和实时日志追踪的运营控制台。",
|
||||
"runs.noRunsDetail": "任务执行后运行记录将显示在这里。",
|
||||
"runs.activeLabel": "活跃",
|
||||
"runs.queuedOrRunning": "正在排队或运行中",
|
||||
"runs.needsAttention": "需要关注",
|
||||
@@ -621,7 +622,7 @@ export const zh: Record<string, string> = {
|
||||
"runs.runQueue": "运行队列",
|
||||
"runs.searchRuns": "按任务、智能体、连接器、工作区或错误搜索",
|
||||
"runs.noRunsMatch": "没有匹配此筛选条件的运行",
|
||||
"runs.noRunsMatchDetail": "放宽状态筛选或清除搜索查询以查看完整运行历史。",
|
||||
"runs.noRunsMatchDetail": "尝试调整筛选条件。",
|
||||
"runs.runDetail": "运行详情",
|
||||
"runs.openConsole": "打开控制台",
|
||||
"runs.cancelRun": "取消运行",
|
||||
@@ -649,10 +650,10 @@ export const zh: Record<string, string> = {
|
||||
"auto.rules": "规则",
|
||||
"auto.activityLog": "活动日志",
|
||||
"auto.noAutomationRules": "暂无自动化规则",
|
||||
"auto.noAutomationDesc": "创建您的第一条规则以使公司自主运营。规则根据任务变更、运行完成和智能体空闲等事件触发操作。",
|
||||
"auto.noAutomationDesc": "规则根据公司事件自动触发操作。",
|
||||
"auto.createFirstRule": "创建第一条规则",
|
||||
"auto.noRulesMatch": "没有匹配当前筛选条件的规则。",
|
||||
"auto.noActivityLog": "暂无自动化活动。规则触发时将在此记录执行日志。",
|
||||
"auto.noActivityLog": "暂无活动",
|
||||
"auto.editRule": "编辑自动化规则",
|
||||
"auto.newRuleTitle": "新建自动化规则",
|
||||
"auto.ruleName": "规则名称",
|
||||
@@ -671,7 +672,7 @@ export const zh: Record<string, string> = {
|
||||
"auto.workflowPipelines": "工作流管线",
|
||||
"auto.newWorkflow": "新工作流",
|
||||
"auto.noWorkflowPipelines": "暂无工作流管线",
|
||||
"auto.noWorkflowDesc": "工作流是多步骤自动化管线。它们将多个操作串联起来,使您的AI公司能自动端到端运行流程。",
|
||||
"auto.noWorkflowDesc": "将多个操作串联为自动化管线。",
|
||||
"auto.createFirstWorkflow": "创建第一个工作流",
|
||||
"auto.editWorkflow": "编辑工作流",
|
||||
"auto.newWorkflowTitle": "新建工作流",
|
||||
@@ -681,7 +682,7 @@ export const zh: Record<string, string> = {
|
||||
"auto.pipelineSteps": "管线步骤(JSON数组)",
|
||||
"auto.createWorkflow": "创建工作流",
|
||||
"auto.automationEngine": "自动化引擎",
|
||||
"auto.automationEngineDesc": "规则根据公司事件触发操作。工作流将多个步骤串联成管线。两者结合,让您的AI公司完全自主运营——响应变化、分配工作,保持各部门同步,无需人工干预。",
|
||||
"auto.automationEngineDesc": "规则和工作流让公司端到端自动运营。",
|
||||
"auto.automationRulesTab": "自动化规则",
|
||||
"auto.workflowsTab": "工作流",
|
||||
"auto.noStepsDefined": "未定义步骤",
|
||||
@@ -694,12 +695,12 @@ export const zh: Record<string, string> = {
|
||||
"social.accountsConnected": "已连接 {0} 个账号",
|
||||
"social.addAccount": "添加账号",
|
||||
"social.howItWorks": "使用说明",
|
||||
"social.howItWorksDesc": "在此添加您的社交媒体账号。点击「登录」打开浏览器进行登录。您的会话将保存在本地,以便营销智能体通过浏览器自动化发布内容、回复用户和浏览动态。所有操作均有日志记录,且可要求董事会审批。",
|
||||
"social.howItWorksDesc": "添加账号并通过浏览器登录。智能体通过浏览器自动化发布内容,所有操作均有日志记录。",
|
||||
"social.accounts": "账号",
|
||||
"social.actionHistory": "操作历史",
|
||||
"social.noAccounts": "暂无社交账号",
|
||||
"social.noAccountsDesc": "添加您的第一个社交媒体账号以启用营销自动化",
|
||||
"social.noActions": "暂无浏览器操作。智能体处理社交媒体任务时将创建操作。",
|
||||
"social.noAccountsDesc": "添加账号以开始使用",
|
||||
"social.noActions": "暂无浏览器操作",
|
||||
"social.addSocialAccount": "添加社交账号",
|
||||
"social.platform": "平台",
|
||||
"social.usernameHandle": "用户名 / 账号名",
|
||||
@@ -754,7 +755,7 @@ export const zh: Record<string, string> = {
|
||||
"standup.highlights": "亮点",
|
||||
"standup.agentStatus": "智能体状态",
|
||||
"standup.noData": "暂无站会数据",
|
||||
"standup.noDataDesc": "公司需要活跃的智能体才能生成站会报告",
|
||||
"standup.noDataDesc": "智能体活跃后将显示",
|
||||
"standup.inProgress": "进行中",
|
||||
"standup.doneLabel": "已完成",
|
||||
"standup.blockedLabel": "已阻塞",
|
||||
@@ -782,7 +783,7 @@ export const zh: Record<string, string> = {
|
||||
"conn.status": "状态",
|
||||
"conn.capabilityMatrix": "能力矩阵",
|
||||
"conn.command": "命令",
|
||||
"conn.commandInfo": "AgentCompany将连接器执行固定到此运行时的审计二进制文件。渲染进程不接受命令覆盖。",
|
||||
"conn.commandInfo": "固定到审计的运行时二进制文件。",
|
||||
"conn.model": "模型",
|
||||
"conn.modelRequired": "模型(必填)",
|
||||
"conn.connectorDefault": "使用连接器默认值",
|
||||
@@ -790,7 +791,7 @@ export const zh: Record<string, string> = {
|
||||
"conn.loadingModels": "正在加载可用模型...",
|
||||
"conn.secretBindings": "密钥绑定",
|
||||
"conn.operationalNotes": "运维备注",
|
||||
"conn.healthCheckInfo": "连接器健康检查在应用启动、保存后和打开终端登录后自动运行。",
|
||||
"conn.healthCheckInfo": "健康检查自动运行。",
|
||||
"conn.refreshingState": "正在刷新连接器状态...",
|
||||
"conn.latestHealthCheck": "最新健康检查详情",
|
||||
"conn.configDoc": "配置文档",
|
||||
|
||||
Reference in new issue
Block a user