feat(整理): 问题在整理记录就地处理,识别失败自动叫智能体识别

- 整理记录「需要处理」:列表 attention 筛选与统计同口径(没被后来的整理取代,且有未关闭事项或失败 / 部分完成未忽略),
  记录带 attention(原因类别、精简事项、能否让智能体识别);忽略端点记 attention_cleared_at(迁移 0078)并关闭关联事项
- 识别失败(organize_identity)按 agent.autoIdentifyOrganize 自动派一次识别会话;新能力 organize.assign_identity
  指定作品后复用人工指定的钩子路径自动重新整理,只放行本事项的识别会话与用户对话;整理记录里可手动「让智能体识别」
- GET /attention:整理需要处理条数、等你批准的智能体操作、系统健康问题(铃铛 / 首页 / 运行状态共用)
- 原因码文案不再指向待处理;命令面板「待处理」换成「需要处理的整理记录」

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-10-06 16:47:18 +08:00
1 parent 414ea7c890
commit 1c1a954703
25 files changed
+1037 -35

No files matched your search

+29
View File
@@ -1088,6 +1088,34 @@ export const EpisodeMappingApplyRuleOutput = z.object({
decisionStatus: DecisionStatus,
});
/** organize.assign_identity:给「没识别出作品」的整理事项指定作品并重新整理 */
/** mediaEntityId 与 tmdb 二选一(都给时用 mediaEntityId,都没给由处理器拒绝) */
export const OrganizeAssignIdentityInput = z.object({
/** 「没识别出作品」事项 ID(调查目标里给出) */
decisionId: Id,
mediaEntityId: Id.optional(),
tmdb: z
.object({
type: z.enum(["movie", "tv"]),
id: z
.string()
.trim()
.regex(/^\d{1,10}$/),
})
.optional(),
/** 为什么是这个作品(依据),至少一条 */
reasons: z.array(z.string().trim().min(1).max(300)).min(1).max(10),
});
export const OrganizeAssignIdentityOutput = z.object({
mediaEntityId: Id,
/** 重新整理的记录与状态 */
recordId: Id.nullable(),
status: z.string(),
decisionStatus: DecisionStatus,
});
export type OrganizeAssignIdentityInput = z.infer<typeof OrganizeAssignIdentityInput>;
export type OrganizeAssignIdentityOutput = z.infer<typeof OrganizeAssignIdentityOutput>;
/** 能力 ID → 输入/输出 schema(server 注册处理器、agent 生成工具定义时共用) */
// ── schedule.draft_check:按自然语言需求起草巡检(建成未启用,用户在计划页检查后启用) ──
@@ -1167,6 +1195,7 @@ export const CAPABILITY_IO = {
"episode_mapping.inspect": { input: EpisodeMappingInspectInput, output: EpisodeMappingInspectOutput },
"episode_mapping.simulate": { input: EpisodeMappingSimulateInput, output: EpisodeMappingSimulateOutput },
"episode_mapping.apply_rule": { input: EpisodeMappingApplyRuleInput, output: EpisodeMappingApplyRuleOutput },
"organize.assign_identity": { input: OrganizeAssignIdentityInput, output: OrganizeAssignIdentityOutput },
} as const satisfies Record<KnownCapabilityId, { input: z.ZodType; output: z.ZodType }>;
type CapabilityIo = typeof CAPABILITY_IO;