style(copy): punctuation rules and site-wide fix with a CI check (QA U11)

- glossary: 10 punctuation rules (full-width in Chinese, CJK/Latin spacing,
  full-width parens around Chinese, single ellipsis, 「」 quotes, period rules)
- scripts/check-copy-punctuation.mjs: checks string literals, templates and JSX
  text (not comments, types, keys, match/compare strings); --fix, --strict,
  --by-file; wired into deno task ci as check:copy in warn mode
- --fix applied to web, server and contracts; files other lanes were editing
  (subscriptions, sites, browser, agent, auth/account, inventory) left for them
- tests updated for the changed messages

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-09-28 20:09:29 +08:00
1 parent 9b017906cf
commit 52402864d6
143 files changed
+985 -606

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"
@@ -161,13 +161,13 @@ export function AgentCheckDialog({
onChange={(e) => set("name", e.target.value)}
/>
</FormField>
<FormField label="目标" htmlFor="ac-goal" required error={errors.goal} hint={`可用占位符:${PLACEHOLDERS}`}>
<FormField label="目标" htmlFor="ac-goal" required error={errors.goal} hint={`可用占位符:${PLACEHOLDERS}`}>
<Textarea
id="ac-goal"
rows={4}
value={d.goal}
aria-invalid={!!errors.goal}
placeholder="检查 {{openDecisions}} 条待处理事项,给出处理建议"
placeholder="检查 {{openDecisions}} 条待处理事项,给出处理建议"
onChange={(e) => set("goal", e.target.value)}
/>
</FormField>
@@ -207,7 +207,7 @@ export function AgentCheckDialog({
onChange={(e) => set("maxToolCalls", e.target.value)}
/>
</FormField>
<FormField label="最长时长(秒)" htmlFor="ac-secs" error={errors.maxDurationSec}>
<FormField label="最长时长(秒)" htmlFor="ac-secs" error={errors.maxDurationSec}>
<Input
id="ac-secs"
type="number"
@@ -217,7 +217,7 @@ export function AgentCheckDialog({
onChange={(e) => set("maxDurationSec", e.target.value)}
/>
</FormField>
<FormField label="触发条件" htmlFor="ac-trigger" hint="条件不满足时跳过,不唤醒模型">
<FormField label="触发条件" htmlFor="ac-trigger" hint="条件不满足时跳过,不唤醒模型">
<Select value={d.trigger} onValueChange={(v) => set("trigger", v as AgentCheckTrigger)}>
<SelectTrigger id="ac-trigger" className="w-full">
<SelectValue />
@@ -270,7 +270,7 @@ export function AgentCheckDialog({
<label htmlFor="ac-recover" className="flex items-center justify-between gap-3 text-caption">
<span>
允许授权内恢复
<span className="ml-2 text-meta text-muted-foreground">需有效持续授权,否则只读</span>
<span className="ml-2 text-meta text-muted-foreground">需有效持续授权,否则只读</span>
</span>
<Switch id="ac-recover" checked={d.allowRecover} onCheckedChange={(v) => set("allowRecover", v)} />
</label>