docs(plan): v0.2 adds Pi subagents and scheduled-jobs board

Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
rootandClaude Fable 5.1 committed 2026-09-28 02:09:39 +08:00
1 parent b839ed4056
commit 16ab2a6c84
97 files changed
+592 -648

No files matched your search

+11 -14
View File
@@ -110,7 +110,7 @@ export default function PreferencesPage() {
const next = t.status === "active" ? "disabled" : "active";
try {
await update.mutateAsync({ id: t.id, status: next });
toast.success(next === "active" ? "已重新启用,同语义抑制已解除" : "已停用,留下抑制记录");
toast.success(next === "active" ? "已启用,抑制已解除" : "已停用");
} catch (err) {
toast.error(errorMessage(err));
}
@@ -125,7 +125,7 @@ export default function PreferencesPage() {
at: s.createdAt,
ts: Date.parse(s.createdAt),
tone: "warning",
title: `「${label}」被${supReason(s.reason)},写入抑制记录`,
title: `「${label}」加入抑制(${supReason(s.reason)})`,
meta: actorName(s.suppressedBy),
});
if (s.liftedAt)
@@ -158,7 +158,7 @@ export default function PreferencesPage() {
<>
<PageHeader
title="偏好标签"
description="一个偏好一个标签。软偏好影响排序,硬规则直接排除;手动取消的偏好不会被 Agent 自动加回。"
description="软偏好影响排序,硬规则直接排除。手动取消的偏好 Agent 不会再加回。"
actions={
<Button onClick={() => setForm({ open: true, tag: null })}>
<Plus />
@@ -201,10 +201,10 @@ export default function PreferencesPage() {
<EmptyState
icon={Tags}
title={filtered ? "没有符合条件的偏好" : "还没有偏好标签"}
description="偏好可以在这里添加,也可以在 Agent 会话里说「以后都这样」形成长期偏好。"
description="点「添加偏好」,或在 Agent 会话里说明长期偏好。"
/>
) : (
<Panel title="偏好" description={`${tags.data.items.length} 个标签,点开看规则与证据`}>
<Panel title="偏好" description={`${tags.data.items.length} 个标签`}>
<div className="grid gap-3 sm:grid-cols-2 lg:grid-cols-3">
{tags.data.items.map((t) => (
<TagCard key={t.id} tag={t} onOpen={() => setSelectedId(t.id)} />
@@ -216,10 +216,7 @@ export default function PreferencesPage() {
<Panel title="抑制记录" description={`${activeSups.length} 条生效中`} bodyClassName="space-y-3">
<div className="flex gap-2 rounded-lg border border-warning/30 bg-warning/10 px-3 py-2 text-caption text-foreground">
<ShieldOff className="mt-0.5 h-4 w-4 shrink-0 text-warning" />
<p>
手动停用、删除或修改语义的偏好会留下抑制记录,Agent
不会根据同一旧证据自动加回;只有你重新启用、重新添加或在这里明确解除后才会恢复。
</p>
<p>停用、删除或修改语义的偏好会留下抑制记录,Agent 不会按旧证据加回。重新启用、重新添加或解除抑制后恢复。</p>
</div>
{sups.isPending ? (
<LoadingState rows={2} />
@@ -249,7 +246,7 @@ export default function PreferencesPage() {
)}
</Panel>
<Panel title="历史" description="停用、删除、解除抑制的记录(新 → 旧)">
<Panel title="历史" description="停用、删除、解除抑制(新 → 旧)">
{sups.isPending || deleted.isPending ? (
<LoadingState rows={2} />
) : history.length === 0 ? (
@@ -271,13 +268,13 @@ export default function PreferencesPage() {
<ConfirmDialog
trigger={<Button variant="destructive">删除</Button>}
title={`删除「${selected.label}」?`}
description="删除后会留下抑制记录,Agent 不会据同一旧证据自动加回;以后需要可重新添加。"
description="删除后留下抑制记录,Agent 不会按旧证据加回。"
confirmLabel="删除"
destructive
onConfirm={async () => {
try {
await del.mutateAsync(selected.id);
toast.success("已删除,留下抑制记录");
toast.success("已删除");
setSelectedId(null);
} catch (err) {
toast.error(errorMessage(err));
@@ -344,7 +341,7 @@ function TagRevisions({ id }: { id: string }) {
if (q.isPending) return <LoadingState rows={2} />;
if (q.isError) return <ErrorState plain error={q.error} onRetry={() => q.refetch()} />;
if (q.data.length === 0)
return <p className="text-caption text-muted-foreground">没有修订记录(W4 之前创建的标签不带历史)。</p>;
return <p className="text-caption text-muted-foreground">没有修订记录。W4 之前创建的标签没有历史。</p>;
return (
<ul className="space-y-2">
{q.data.map((r) => (
@@ -396,7 +393,7 @@ function SuppressionRow({
</Button>
}
title="解除这条抑制?"
description="解除后,Agent 可以再次根据证据提出同一偏好(仍需走正常授权)。标签本身不会自动恢复。"
description="解除后,Agent 可按证据再次提出这个偏好,仍需授权。标签不会恢复。"
confirmLabel="解除"
onConfirm={onLift}
/>