用户可见结果
父 issue:#3660。依赖 #3662,沿用 #3661 / #3662 已交付的调用主链。
用户能够在多个已连接服务和账号间完成任务,例如“查看工作账号日程,并读取相关文件”。系统只加载需要的 skill、资源与操作说明,不把全部服务文档或 endpoints 暴露给模型。
实施范围
- 为服务发现提供有界的实例摘要和有效 skill refs;仅在契约支持时分页,不伪称上游支持分页。账户标签帮助选择,服务实例 ID 仍来自权威发现,不解析 slug 或名称猜测身份。
- 对多账号歧义进行澄清;共享一个 skill 的不同账号仍各自绑定执行目标和权限。
- 支持按指定资源读取 skill 关联文件,资源身份固定到已解析的 skill 版本,校验访问边界并限制内容量。
- 复用现有 operation catalog,提供名称/分类/关键词等简单、有界发现,选中后读取完整契约。skill 已提供充分信息时不强制额外搜索;不建设每轮语义筛选器或动态 tool 注册系统。
- 按 NyxID/Ornn 当前公开契约处理固定依赖、缺失和版本冲突;有限加载并检测循环。只有名称推荐或没有推荐时,明示可用能力与限制,不冒充精确加载。
- 为无 OpenAPI 的文档型服务落地受约束调用分支:只在现有代理和权限边界允许时执行,明确缺少 schema 校验,不作为 typed 校验失败后的绕过路径。不能通过修改外部产品协议实现本功能。
发现与缺口诊断的具体设计
默认主查询
读取当前身份的 NyxID /keys / service list,结合当前执行上下文已有授权边界输出可用实例到有效推荐的映射。服务名称、账号标签、状态与 refs 是目录;不批量加载正文。服务就绪但 refs 为空时保留实例。身份和已有授权过滤是确定性规则,不引入另一个语义筛选模型。
沿用父 issue 的 Agent Key 版本/凭据前提和“服务 ID 查询条件与授权事实分开”规则:可选 service_ids 用于缩小查询;同一受限普通 Agent Key 的有效服务过滤由 NyxID 负责,不新增第二套 allowlist。allow_all_services=true 仍必须限制输出。Channel sender bearer 与调用 key 不同的路径必须沿用阶段 1 确定的权威授权关系。
已有 NyxID skill 可指导 LLM 使用 CLI/API。依据宿主能力选择已有受约束执行入口,或扩展已有 inventory tool;不为了本阶段新增必须安装的 CLI、任意 shell 或第二套服务索引。上游不支持原生分页时可本地有界投影,并明确传输大小限制。
只有缺少任务所需的可用实例时才诊断
| 已获得的证据 |
处理 |
| 当前实例可用且有 refs |
LLM 选定精确引用并按需加载 |
| 当前实例可用但 refs 为空 |
用已有正式操作说明或报告推荐缺失,不提示新增权限 |
| 实例可见,但当前应用服务授权明确不包含它 |
提示按任务补充该服务的应用授权,不请求全部服务 |
| 凭据明确过期/撤销 |
指向该连接的重新授权流程,不要求重复创建连接 |
| 组织访问规则明确拒绝 |
解释缺少对应组织访问资格,不假装普通重连能修复 |
| 节点离线/连接不可用 |
报告连接就绪问题,不归因为 OAuth 权限 |
| 下游明确缺少 scope 或资源 ACL |
按实际错误指导对应权限修复,不将所有 403 归为 OAuth scope |
| 私有 skill 不可读 |
报告 skill 来源访问问题,不要求扩大下游服务权限 |
| 没有任何明确诊断证据 |
仅说明当前身份未发现可用连接;必要时再按目标查询公共 catalog,公共条目不是已连接证明 |
不可为了诊断扩大 token、借用 Bot 所有者或本机其他登录身份、枚举调用方不可见的账号。权限变化后重新查询,并沿用已明确的服务实例身份。
按需内容与通用调用
LLM 决定加载哪个 skill、读取哪个资源以及是否需要 operation 查询;运行时验证精确引用、路径边界和输出大小。相同精确引用可以复用内容,不能合并服务实例或凭据。skill 已足够时不强制 operation 搜索。文档型 HTTP 请求与已定义 operation 在统一调用契约中显式区分,共用既有授权和执行主链,不新增默认逐次审批。
最小查询与调用契约
以下是同一主链的逻辑能力,不要求每项新增一个 tool:
- 服务查询:可选服务实例 ID 列表与有界返回,输出实例摘要、有效 refs 和已知就绪状态;未知状态明确标识。相同查询条件不保存成新的权限配置。
- Skill 加载与资源读取:按精确引用加载主文档和资源目录;按该引用下的资源身份读取单个资源。拒绝跨包路径、任意 URL 和越界资源;上下文压缩后允许重读原精确版本。
- Operation 查询:在已选择的服务实例内,以关键词/分类及有界返回获取摘要;选择后按 operation ID 获取完整输入契约。返回截断/后续读取信息,不把全部 OpenAPI 内联进上下文;固定工具参数中不枚举全部 operation ID。
- 通用调用:服务实例绑定独立于 skill。已发布 operation 使用
operation ID + arguments;文档请求使用 method + relative path + request data,两种模式在强类型契约中互斥,复用已有 PublishedEndpoint / AuthoredRequest 语义。后者仅允许已准入服务/路径,不接受任意目标 URL,不成为前者校验失败的回退。
这些能力扩展阶段 1 的身份、引用和调用契约,复用阶段 2 的授权写入与结果机制,不另起工具注册或执行链。
验收
非目标
自动生成、审核或发布 skill 的平台,以及重新维护服务到 skill 的映射库。
用户可见结果
父 issue:#3660。依赖 #3662,沿用 #3661 / #3662 已交付的调用主链。
用户能够在多个已连接服务和账号间完成任务,例如“查看工作账号日程,并读取相关文件”。系统只加载需要的 skill、资源与操作说明,不把全部服务文档或 endpoints 暴露给模型。
实施范围
发现与缺口诊断的具体设计
默认主查询
读取当前身份的 NyxID
/keys/service list,结合当前执行上下文已有授权边界输出可用实例到有效推荐的映射。服务名称、账号标签、状态与 refs 是目录;不批量加载正文。服务就绪但 refs 为空时保留实例。身份和已有授权过滤是确定性规则,不引入另一个语义筛选模型。沿用父 issue 的 Agent Key 版本/凭据前提和“服务 ID 查询条件与授权事实分开”规则:可选
service_ids用于缩小查询;同一受限普通 Agent Key 的有效服务过滤由 NyxID 负责,不新增第二套 allowlist。allow_all_services=true仍必须限制输出。Channel sender bearer 与调用 key 不同的路径必须沿用阶段 1 确定的权威授权关系。已有 NyxID skill 可指导 LLM 使用 CLI/API。依据宿主能力选择已有受约束执行入口,或扩展已有 inventory tool;不为了本阶段新增必须安装的 CLI、任意 shell 或第二套服务索引。上游不支持原生分页时可本地有界投影,并明确传输大小限制。
只有缺少任务所需的可用实例时才诊断
不可为了诊断扩大 token、借用 Bot 所有者或本机其他登录身份、枚举调用方不可见的账号。权限变化后重新查询,并沿用已明确的服务实例身份。
按需内容与通用调用
LLM 决定加载哪个 skill、读取哪个资源以及是否需要 operation 查询;运行时验证精确引用、路径边界和输出大小。相同精确引用可以复用内容,不能合并服务实例或凭据。skill 已足够时不强制 operation 搜索。文档型 HTTP 请求与已定义 operation 在统一调用契约中显式区分,共用既有授权和执行主链,不新增默认逐次审批。
最小查询与调用契约
以下是同一主链的逻辑能力,不要求每项新增一个 tool:
operation ID + arguments;文档请求使用method + relative path + request data,两种模式在强类型契约中互斥,复用已有PublishedEndpoint / AuthoredRequest语义。后者仅允许已准入服务/路径,不接受任意目标 URL,不成为前者校验失败的回退。这些能力扩展阶段 1 的身份、引用和调用契约,复用阶段 2 的授权写入与结果机制,不另起工具注册或执行链。
验收
非目标
自动生成、审核或发布 skill 的平台,以及重新维护服务到 skill 的映射库。