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

+16 -27
View File
@@ -155,7 +155,7 @@ export default function SiteWorkbenchPage() {
<span className="flex flex-wrap items-center gap-1.5">
{health ? <StatusBadge tone={health.tone}>{health.label}</StatusBadge> : null}
<StatusBadge tone={account.tone}>账号:{account.label}</StatusBadge>
{!s.enabled ? <StatusBadge tone="warning">站点已停用,只展示历史数据</StatusBadge> : null}
{!s.enabled ? <StatusBadge tone="warning">站点已停用,只显示历史数据</StatusBadge> : null}
{circuit ? <StatusBadge tone="warning">{circuit}</StatusBadge> : null}
<span className="text-meta text-muted-foreground">
快照 {relTime(coverage?.lastSnapshotAt ?? s.lastSnapshotAt)}
@@ -206,7 +206,7 @@ export default function SiteWorkbenchPage() {
snap.mutate(
{ id: siteId, maxPages: 2 },
{
onSuccess: () => toast.success("已排队快照,完成后刷新列表"),
onSuccess: () => toast.success("快照已排队"),
onError: (e) => toast.error(errorMessage(e)),
},
)
@@ -218,7 +218,7 @@ export default function SiteWorkbenchPage() {
<Button
size="sm"
disabled={!q || !s?.enabled || (live && releases.isFetching)}
title={q ? "绕过本地快照,向站点实时搜索当前关键词" : "先输入搜索词"}
title={q ? "跳过本地快照,直接在站点搜索" : "先输入搜索词"}
onClick={() => {
if (live) void releases.refetch();
else setLive(true);
@@ -273,12 +273,7 @@ export default function SiteWorkbenchPage() {
{releases.isPending ? (
<LoadingState rows={6} className="p-4" />
) : releases.error && !releases.data ? (
<ErrorState
plain
title="读取站点资源失败"
error={releases.error}
onRetry={() => void releases.refetch()}
/>
<ErrorState plain title="读取资源失败" error={releases.error} onRetry={() => void releases.refetch()} />
) : rows.length === 0 ? (
<EmptyState
plain
@@ -288,12 +283,12 @@ export default function SiteWorkbenchPage() {
}
description={
all.length
? "H&R / 做种 / 大小 / 上传时间只在已加载结果中筛选,可以加载更多或放宽条件。"
? "H&R、做种、大小、上传时间只筛选已加载的结果。加载更多或放宽条件。"
: coverage?.liveError
? `实时补查未成功(${coverage.liveError}),这不代表站点没有该资源。`
? `实时补查失败(${coverage.liveError}),站点上可能仍有该资源。`
: q
? "可以点“实时补查”向站点直接搜索。"
: "点“快照”抓取站点列表;快照受站点限流。"
? "点“实时补查”直接在站点搜索。"
: "点“快照”抓取站点列表。"
}
/>
) : (
@@ -338,13 +333,8 @@ export default function SiteWorkbenchPage() {
<TabsContent value="origin">
<EmptyState
icon={Globe}
title="原站视图在 M2 提供"
description={
<>
原站视图会接入后端浏览器会话(camofox-browser),在同一会话里查看真实页面、人工登录或处理验证,并与 Agent
交接控制权。首版只提供整理视图;需要看原站时,整理视图的详情里保留了资源的站点 ID 与来源时间。
</>
}
title="原站视图尚未提供"
description={<>计划在 M2 提供。资源详情里有站点 ID 和来源时间,可据此到原站查看。</>}
/>
</TabsContent>
</Tabs>
@@ -367,20 +357,19 @@ function CoverageBanner({
refreshError: unknown;
}) {
const notes: { tone: "warning" | "neutral" | "success"; text: string }[] = [];
if (refreshError)
notes.push({ tone: "warning", text: `刷新失败,保留上次数据并标为过期:${errorMessage(refreshError)}` });
if (refreshError) notes.push({ tone: "warning", text: `刷新失败,显示上次数据:${errorMessage(refreshError)}` });
if (coverage) {
if (!coverage.siteEnabled) notes.push({ tone: "warning", text: "站点已停用,只展示历史数据" });
if (!coverage.siteEnabled) notes.push({ tone: "warning", text: "站点已停用,只显示历史数据" });
if (coverage.stale)
notes.push({
tone: "warning",
text: coverage.lastSnapshotAt
? `快照已过期(上次 ${relTime(coverage.lastSnapshotAt)}),列表为既有数据`
: "从未快照,列表只来自 Feed 观察与实时补查",
? `快照已过期(上次 ${relTime(coverage.lastSnapshotAt)})`
: "没有快照,列表只来自 Feed 和实时补查",
});
if (coverage.liveError) notes.push({ tone: "warning", text: `实时补查失败:${coverage.liveError};已保留本地数据` });
if (coverage.liveError) notes.push({ tone: "warning", text: `实时补查失败:${coverage.liveError}` });
else if (coverage.live)
notes.push({ tone: "success", text: coverage.coalesced ? "已合并到进行中的同一实时搜索" : "已实时补查站点" });
notes.push({ tone: "success", text: coverage.coalesced ? "已合并到进行中的同一搜索" : "已实时补查" });
}
if (!notes.length) return null;
return (