feat(agent): subscription.list, decision.list, download.inspect; grant-scoped requiresApproval

- three read-only summary capabilities (38 registered); task.inspect points
  download task ids to download.inspect
- probe queries reject empty / single-letter / wildcard-only terms; externalId
  documented as string; every description says when to use it
- download.plan requiresApproval uses coveringGrant (shared with authorize)

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-09-29 01:58:28 +08:00
1 parent 3134e3a55e
commit 975a14ace7
7 files changed
+510 -94

No files matched your search

+57 -20
View File
@@ -66,6 +66,9 @@ export const CAPABILITY_IDS = [
"policy.preview",
"policy.apply",
"inventory.query",
"subscription.list",
"decision.list",
"download.inspect",
"agent.spawn",
"agent.await",
"site.list",
@@ -129,7 +132,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"catalog.lookup": d(
"catalog.lookup",
"查作品",
"按标题/别名/外部 ID 查本地作品与元数据候选",
"按标题/别名/外部 ID 查本地作品与元数据候选。确认作品身份、拿作品 ID 时用;查库里已有文件与版本目标用 inventory.query",
"read",
"CatalogLookup",
"read",
@@ -140,7 +143,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"release.search": d(
"release.search",
"搜资源",
"先查本地资源索引与站点快照,不足时对已开启站点实时补查",
"先查本地资源索引与站点快照,不足时对已开启站点实时补查。找可下载的资源时用,检索词写作品名或关键词;已知作品时优先传 mediaEntityId",
"read",
"ReleaseSearch",
"read",
@@ -151,7 +154,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"release.inspect": d(
"release.inspect",
"看资源详情",
"读取资源详情、文件清单、促销与解析结果",
"读取资源详情、文件清单、促销与解析结果。看某条资源的文件清单、促销或解析细节时用;不要逐条遍历搜索结果",
"read",
"ReleaseInspect",
"read",
@@ -162,7 +165,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"identity.resolve": d(
"identity.resolve",
"识别身份",
"为观察/资源提出身份映射;证据充分时自动接受,有歧义时转为待处理事项",
"为观察/资源提出身份映射;证据充分时自动接受,有歧义时转为待处理事项。资源 / 观察还没对上作品时用;已识别的资源不要重复提交",
"propose",
"IdentityResolve",
"organize.execute",
@@ -173,7 +176,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"download.plan": d(
"download.plan",
"生成下载计划",
"评估候选,生成占用版本目标(slot)与预算预留的下载计划;不提交",
"评估候选,生成占用版本目标(slot)与预算预留的下载计划;不提交。选定资源后、提交前用;不会提交下载,也不预留版本目标",
"preview",
"DownloadPlan",
"organize.execute",
@@ -184,7 +187,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"download.submit": d(
"download.submit",
"提交下载",
"按已保存的计划提交到下载器;校验授权与硬阈值",
"按已保存的计划提交到下载器;校验授权与硬阈值。只提交 download.plan 生成的计划;结果未知时先用 download.inspect / task.inspect 核对,不要重复提交",
"execute",
"DownloadSubmit",
"organize.execute",
@@ -195,7 +198,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"download.recheck": d(
"download.recheck",
"重新校验/恢复下载",
"对已纳管的下载任务强制重新校验(action=recheck),或恢复非阈值、非人工的暂停(action=resume);不换源、不删除、不改保存路径",
"对已纳管的下载任务强制重新校验(action=recheck),或恢复非阈值、非人工的暂停(action=resume);不换源、不删除、不改保存路径。下载失败或文件缺失时用;换源、删除不在此能力内",
"execute",
"DownloadRecheck",
"organize.execute",
@@ -206,7 +209,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"organize.plan": d(
"organize.plan",
"生成整理计划",
"生成并保存整理计划:冻结源/目标路径、整理方式与前置条件;不执行",
"生成并保存整理计划:冻结源/目标路径、整理方式与前置条件;不执行。下载完成后整理入库前用;只生成计划不动文件",
"preview",
"OrganizePlan",
"organize.read",
@@ -217,7 +220,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"organize.execute": d(
"organize.execute",
"执行整理",
"执行已保存的整理计划(复制/移动),生成整理记录",
"执行已保存的整理计划(复制/移动),生成整理记录。只执行 organize.plan 生成且指纹未变的计划;指纹不一致时重新生成计划",
"execute",
"OrganizeExecute",
"organize.execute",
@@ -228,7 +231,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"task.inspect": d(
"task.inspect",
"查看任务",
"读取任务状态、业务时间线与错误",
"读取任务状态、业务时间线与错误。按业务任务 ID 查看;下载任务 ID 或种子 hash 用 download.inspect",
"read",
"TaskInspect",
"read",
@@ -239,7 +242,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"task.retry": d(
"task.retry",
"重试任务",
"对失败/死信任务重新排队;副作用经操作账本去重",
"对失败/死信任务重新排队;副作用经操作账本去重。只用于失败 / 死信的任务;同一任务不要反复重试",
"execute",
"TaskRetry",
"organize.execute",
@@ -250,7 +253,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"task.cancel": d(
"task.cancel",
"取消任务",
"停止未来步骤,不撤销已完成的外部动作",
"停止未来步骤,不撤销已完成的外部动作。用户要求停止或任务明显无意义时用",
"execute",
"TaskCancel",
"organize.execute",
@@ -261,7 +264,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"policy.preview": d(
"policy.preview",
"预览策略",
"用历史数据回放策略草案,展示新增命中与误排除",
"用历史数据回放策略草案,展示新增命中与误排除。发布策略前用,确认影响范围",
"preview",
"PolicyPreview",
"read",
@@ -272,7 +275,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"policy.apply": d(
"policy.apply",
"发布策略",
"发布策略版本(需授权);不直接执行 JavaScript",
"发布策略版本(需授权);不直接执行 JavaScript。只在用户明确要求发布策略时用",
"execute",
"PolicyApply",
"admin",
@@ -283,7 +286,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"inventory.query": d(
"inventory.query",
"查库存",
"查询本地资产、版本目标满足情况与外部库存证据",
"查询本地资产、版本目标满足情况与外部库存证据。查某个作品有哪些文件与版本目标时用;想盘点全部就不给 query,不要用单字母探查",
"read",
"InventoryQuery",
"read",
@@ -291,6 +294,40 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
true,
false,
),
// AG-3 只读摘要:订阅 / 待处理事项 / 下载任务。输出是摘要(不含凭证与私有链接),供模型盘点与调查
"subscription.list": d(
"subscription.list",
"列出订阅",
"按状态或媒体类型分组列出订阅摘要(作品、模式、状态、版本目标满足数、上次/下次搜索)。盘点订阅、找缺版本时用;查单个作品的文件与版本目标用 inventory.query",
"read",
"SubscriptionList",
"read",
"low",
true,
false,
),
"decision.list": d(
"decision.list",
"列出待处理事项",
"列出待处理事项摘要(种类、严重度、对象、尝试次数与可选处理 options),缺省只列未关闭的。巡检或汇总待处理时用;不要用它处理事项,处理由用户在待处理中心选择",
"read",
"DecisionList",
"read",
"low",
true,
false,
),
"download.inspect": d(
"download.inspect",
"查看下载任务",
"按下载任务 ID 或种子 hash 读取下载任务状态、进度、错误、关联计划、资源、业务任务、整理记录与待处理事项。调查下载失败或无进展时用;业务任务 ID 用 task.inspect",
"read",
"DownloadInspect",
"read",
"low",
true,
false,
),
// 子代理(设置 pi.subagents 开启后才提供给模型):类别 propose——只建有界子会话,不产生外部副作用,
// "先给方案"的会话也能派生(子会话同样只给方案);授权不高于父会话,由服务端校验
"agent.spawn": d(
@@ -307,7 +344,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"agent.await": d(
"agent.await",
"等待子会话",
"等待本会话派生的子会话结束(等待期间不调用模型),返回各自状态、用量与汇报摘要;超时仍未结束的标为 pending",
"等待本会话派生的子会话结束(等待期间不调用模型),返回各自状态、用量与汇报摘要;超时仍未结束的标为 pending。派生子会话后汇总前用;没有派生子会话时不要调用",
"read",
"AgentAwait",
"read",
@@ -319,7 +356,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"site.list": d(
"site.list",
"列出站点",
"列出已登记站点的健康、登录状态与账号摘要(不含凭证)",
"列出已登记站点的健康、登录状态与账号摘要(不含凭证)。排查站点问题或确认站点可用时用",
"read",
"SiteList",
"read",
@@ -331,7 +368,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"site.health_check": d(
"site.health_check",
"检测站点",
"检测站点首页连通与登录态,写回站点健康状态",
"检测站点首页连通与登录态,写回站点健康状态。站点连通或登录态可疑时用;不要频繁检测",
"execute",
"SiteHealthCheck",
"admin",
@@ -343,7 +380,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"site.refresh_login": d(
"site.refresh_login",
"刷新站点登录",
"对站点账号重新登录或校验 Cookie / API Key,成功后拉取用户数据;需持续授权或审批",
"对站点账号重新登录或校验 Cookie / API Key,成功后拉取用户数据;需持续授权或审批。站点登录失效时用;验证码等人工步骤无法自动完成",
"execute",
"SiteLoginRefresh",
"admin",
@@ -354,7 +391,7 @@ export const CAPABILITY_CATALOG: Record<KnownCapabilityId, CapabilityDescriptor>
"site.user_data": d(
"site.user_data",
"查站点用户数据",
"读取站点账号的最新用户数据(上传、下载、分享率、魔力、做种)与按天历史",
"读取站点账号的最新用户数据(上传、下载、分享率、魔力、做种)与按天历史。关心分享率、魔力或做种情况时用",
"read",
"SiteUserData",
"read",