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

@@ -142,7 +142,7 @@ export function AgentCheckDialog({
<DialogContent className="max-h-[90vh] overflow-y-auto sm:max-w-xl">
<DialogHeader>
<DialogTitle>{job ? "编辑巡检" : "新建巡检"}</DialogTitle>
<DialogDescription>到点按目标入队一次 Agent 会话,只在白名单与预算内行动。</DialogDescription>
<DialogDescription>到点按目标发起一次 Agent 会话,只在白名单和预算内执行。</DialogDescription>
</DialogHeader>
<form
className="grid gap-1"
@@ -171,7 +171,7 @@ export function AgentCheckDialog({
onChange={(e) => set("goal", e.target.value)}
/>
</FormField>
<FormField label="能力白名单" hint="不选即只读类全部">
<FormField label="能力白名单" hint="不选则放行全部只读能力">
<div className="grid max-h-48 gap-1 overflow-y-auto rounded-tight border border-border/70 px-2.5 py-2 sm:grid-cols-2">
{READONLY_CAPS.map((c) => {
const on = d.caps.includes(c.id);
@@ -235,7 +235,7 @@ export function AgentCheckDialog({
label="间隔"
htmlFor="ac-every"
error={errors.every}
hint={cronJob ? "cron 调度请在卡片上修改" : undefined}
hint={cronJob ? "cron 表达式在卡片上修改" : undefined}
>
<div className="flex gap-2">
<Input
+1 -1
View File
@@ -33,7 +33,7 @@ export const TRIGGER_LABEL: Record<ScheduleTrigger, string> = {
};
export const CHECK_TRIGGER_LABEL: Record<AgentCheckTrigger, string> = {
always: "每次都跑",
always: "每次运行",
open_decisions: "有待处理时",
stalled_downloads: "有下载无进展时",
subscriptions_active: "有追踪订阅时",
@@ -17,7 +17,7 @@ export function RunsSheet({ job, onClose }: { job: ScheduledJob | null; onClose:
<DetailSheet
open={!!job}
onOpenChange={(o) => !o && onClose()}
title={job ? `${job.name} · 历史` : "历史"}
title={job ? `${job.name} · 运行记录` : "运行记录"}
description={
job ? `${describeSchedule(job.schedule)} · 累计 ${job.runCount} 次,失败 ${job.failCount} 次` : undefined
}
@@ -41,7 +41,7 @@ function AgentCheckSummary({ config }: { config: Partial<AgentCheckConfig> }) {
预算:{budget.maxToolCalls ? `${budget.maxToolCalls} 次调用` : "默认"}
{budget.maxDurationSec ? ` · ${budget.maxDurationSec} 秒` : ""}
</span>
<span>能力:{allow.length ? `${allow.length} 项` : "只读全部"}</span>
<span>能力:{allow.length ? `${allow.length} 项` : "全部只读能力"}</span>
{config.allowRecover ? <span>允许授权内恢复</span> : null}
{config.reportAsDecision ? <span>写入待处理</span> : null}
</div>
@@ -156,7 +156,7 @@ export function ScheduleCard({
</Button>
<Button size="sm" variant="ghost" onClick={() => onHistory(job)}>
<History />
查看历史
运行记录
</Button>
<span className="ml-auto flex items-center gap-1">
{job.customized ? (
@@ -184,8 +184,8 @@ export function ScheduleCard({
</Button>
}
title={`删除「${job.name}」?`}
description="运行历史一并删除,不影响已产生的 Agent 会话。"
confirmLabel="删除"
description="运行记录一并删除,已产生的 Agent 会话保留。"
confirmLabel="删除巡检"
destructive
onConfirm={() =>
del.mutateAsync({ id: job.id }).then(