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

+9 -18
View File
@@ -168,7 +168,7 @@ export function draftToJson(
if (s.trim() === "") return undefined;
const n = Number(s);
if (!Number.isFinite(n) || (opts.int && !Number.isInteger(n))) {
errors[key] = opts.int ? "请输入整数" : "请输入数字";
errors[key] = opts.int ? "须是整数" : "须是数字";
return undefined;
}
if (opts.min !== undefined && n < opts.min) errors[key] = `不能小于 ${opts.min}`;
@@ -177,7 +177,7 @@ export function draftToJson(
};
const minGb = num("minSizeGb", d.minSizeGb, { min: 0 });
const maxGb = num("maxSizeGb", d.maxSizeGb, { min: 0.01 });
if (minGb !== undefined && maxGb !== undefined && minGb > maxGb) errors.maxSizeGb = "上限需大于下限";
if (minGb !== undefined && maxGb !== undefined && minGb > maxGb) errors.maxSizeGb = "上限须大于下限";
const minTier = num("minTierSteps", d.minTierSteps, { int: true, min: 0, max: 5 });
const ceiling = num("ceilingTier", d.ceilingTier, { int: true, min: 0, max: 5 });
if (Object.keys(errors).length) return { ok: false, errors };
@@ -323,7 +323,7 @@ export function SlotRulesEditor({
<div className="flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2">
<div className="min-w-0">
<p className="text-caption font-medium text-foreground">只接受蓝光二次压制</p>
<p className="text-meta text-muted-foreground">不含原盘与 Remux;压制不等于"越大越好"</p>
<p className="text-meta text-muted-foreground">不含原盘和 Remux</p>
</div>
<Switch
checked={value.requireEncode}
@@ -370,7 +370,7 @@ export function SlotRulesEditor({
/>
</FormField>
</div>
<FormField label="内容版本(剪辑)" hint="与分辨率等交付特征分开;不选即不限">
<FormField label="内容版本(剪辑)" hint="不选即不限">
<ChipToggleGroup
label="内容版本"
options={o(CUTS, CUT_LABEL)}
@@ -386,7 +386,7 @@ export function SlotRulesEditor({
onChange={(v) => set("contentTypes", v)}
/>
</FormField>
<FormField label="字段未知时" hint="资源缺少判断所需字段(如字幕)时的处理">
<FormField label="字段未知时" hint="资源缺少判断字段(如字幕)时">
<Select
value={value.unknownPolicy || "__none"}
onValueChange={(v) => set("unknownPolicy", v === "__none" ? "" : (v as SlotRulesDraft["unknownPolicy"]))}
@@ -408,7 +408,7 @@ export function SlotRulesEditor({
<fieldset className="space-y-3 border-t border-border/60 pt-4">
<legend className="mb-1 text-label font-semibold tracking-[0.18em] text-muted-foreground uppercase">
软偏好 · 硬条件通过后排序,按点选顺序越靠前越好
软偏好 · 通过硬条件后排序,越靠前越优先
</legend>
<FormField label="HDR">
<ChipToggleGroup
@@ -444,7 +444,7 @@ export function SlotRulesEditor({
<fieldset className="space-y-3 border-t border-border/60 pt-4">
<legend className="mb-1 text-label font-semibold tracking-[0.18em] text-muted-foreground uppercase">
升级阈值 · 创建替换计划,不直接覆盖旧文件
升级 · 生成替换计划,不直接覆盖旧文件
</legend>
<div className="flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2">
<p className="text-caption font-medium text-foreground">允许自动升级</p>
@@ -470,12 +470,7 @@ export function SlotRulesEditor({
placeholder="1"
/>
</FormField>
<FormField
label="封顶等级"
htmlFor={`${id}-ceil`}
error={errors.ceilingTier}
hint="当前资产达到后不再升级(0–5)"
>
<FormField label="封顶等级" htmlFor={`${id}-ceil`} error={errors.ceilingTier} hint="达到后不再升级(0–5)">
<Input
id={`${id}-ceil`}
inputMode="numeric"
@@ -486,11 +481,7 @@ export function SlotRulesEditor({
/>
</FormField>
</div>
<FormField
label="合格压制组名单"
htmlFor={`${id}-allow`}
hint="设置后名单外的压制不自动升级,低劣压制不会只因 BluRay 标签替换"
>
<FormField label="合格压制组名单" htmlFor={`${id}-allow`} hint="设置后,名单外的压制不触发自动升级">
<Input
id={`${id}-allow`}
value={value.encodeGroupAllowlist}