copy: second-round copy review across console, settings, agent and server messages

- Trim descriptions, empty states, confirm buttons and toasts to facts
- Unify terms per glossary: 待处理/待识别/整理记录/运行记录/凭证/子会话/Agent 上游
- Subscription-login termsNote states facts only (borrowed client identity, ToS/ban risk)
- Shorter, concrete goal templates for built-in Agent checks
- Human-readable nouns instead of table names in instance CRUD errors
- Audit labels for pi_upstream / schedule / automation_grant actions
- Glossary: add 上游、订阅登录、凭证、定时任务、巡检、运行记录、子会话、停止、持续授权

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-09-28 13:29:42 +08:00
1 parent c67f6a9682
commit 31a54186c7
58 files changed
+200 -188

No files matched your search

+14 -20
View File
@@ -155,10 +155,10 @@ function AutomationBanner({ a }: { a: Dashboard["automation"] }) {
</div>
<p className="mt-0.5 text-caption text-muted-foreground">
{paused
? "自动收录、下载、整理都已停下;查询与手动操作仍可用。"
? "自动收录、下载、整理已停止,手动操作仍可用。"
: readOnly
? "恢复后的只读对账:只核对不写入,确认无误后再关掉。"
: `${a.activeSubscriptions} 个订阅在追踪,按规则自动收录、下载与入库。`}
? "只核对,不写入。确认无误后关闭。"
: `${a.activeSubscriptions} 个订阅在追踪,自动收录、下载和整理。`}
</p>
</div>
</div>
@@ -170,7 +170,7 @@ function AutomationBanner({ a }: { a: Dashboard["automation"] }) {
checked={readOnly}
disabled={update.isPending}
onCheckedChange={(v) =>
setAutomation({ readOnlyReconcile: v }, v ? "已进入只读对账模式" : "已退出只读对账模式").catch(() => {})
setAutomation({ readOnlyReconcile: v }, v ? "已开启只读对账" : "已关闭只读对账").catch(() => {})
}
aria-label="只读对账模式"
/>
@@ -193,8 +193,8 @@ function AutomationBanner({ a }: { a: Dashboard["automation"] }) {
</Button>
}
title="暂停全部自动化?"
description="自动收录、下载、整理会停下,已提交的下载任务不受影响。随时可以恢复。"
confirmLabel="暂停"
description="自动收录、下载、整理会停止,已提交的下载任务不受影响。可随时恢复。"
confirmLabel="暂停自动化"
onConfirm={() => setAutomation({ enabled: false }, "自动化已暂停")}
/>
)}
@@ -278,9 +278,9 @@ function CurrentWork({ w }: { w: Dashboard["currentWork"] }) {
function NeedsAttention({ n }: { n: Dashboard["needsAttention"] }) {
return (
<Section title="需要我处理" icon={AlertTriangle} to={consolePath("inbox")}>
<Section title="待处理" icon={AlertTriangle} to={consolePath("inbox")}>
{n.total === 0 ? (
<EmptyState plain icon={CircleCheck} title="没有待你决定的事" className="py-6" />
<EmptyState plain icon={CircleCheck} title="没有待处理事项" className="py-6" />
) : (
<>
<p className="mb-2 text-title-sm font-semibold text-warning tabular-nums">
@@ -308,8 +308,8 @@ function CacheSection({ c }: { c: Dashboard["cache"] }) {
<EmptyState
plain
icon={HardDrive}
title="尚未登记下载器"
description="添加下载器实例后显示缓存卷水位。"
title="还没有下载器"
description="添加下载器后显示缓存水位。"
className="py-6"
/>
) : (
@@ -401,13 +401,7 @@ function SourcesSection({ s }: { s: Dashboard["sources"] }) {
return (
<Section title="来源健康" icon={Radio} to={consolePath("sources")}>
{rows.length === 0 ? (
<EmptyState
plain
icon={Radio}
title="还没有来源"
description="在站点工作台登记站点,在来源健康新建 Feed。"
className="py-6"
/>
<EmptyState plain icon={Radio} title="还没有来源" description="登记站点或新建 Feed 后显示。" className="py-6" />
) : (
<ul className="divide-y divide-border/60">
{rows.slice(0, 8).map((r) => {
@@ -438,7 +432,7 @@ function RecentOutput({ items }: { items: Dashboard["recentOutput"] }) {
return (
<Section title="最近产出" icon={ListTodo} to={consolePath("organize")}>
{items.length === 0 ? (
<EmptyState plain icon={ListTodo} title="还没有入库记录" className="py-6" />
<EmptyState plain icon={ListTodo} title="还没有整理记录" className="py-6" />
) : (
<ul className="divide-y divide-border/60">
{items.slice(0, 6).map((r) => {
@@ -478,7 +472,7 @@ export default function Home() {
<>
<PageHeader
title="首页"
description="系统是否在推进目标、完成了什么、还有什么缺口、是否需要你。"
description="目标进度、今日产出、缺口和待处理事项。"
actions={
<div className="flex items-center gap-2">
<LiveIndicator />
@@ -499,7 +493,7 @@ export default function Home() {
))}
</div>
) : q.isError ? (
<ErrorState title="首页数据加载失败" error={q.error} onRetry={() => q.refetch()} />
<ErrorState title="首页加载失败" error={q.error} onRetry={() => q.refetch()} />
) : (
<>
<AutomationBanner a={q.data.automation} />