跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

Capability 预检与版本契约

按具体行为检查特性标签,区分协议、封套和事件版本。

客户端先读取 GET /capabilities,确认协议、可用行为、工作区及当前审批策略,再调用相应接口。相同 v1 不代表所有 daemon 都开启同样能力。

三条版本轴

字段或常量当前值管理的变化
capabilities 的 v / CAPABILITIES_SCHEMA_VERSION1capability envelope 结构
protocol.current / SERVE_PROTOCOL_VERSIONv1协议与行为特性
SSE 的 v / EVENT_SCHEMA_VERSION1事件 frame 结构

三者独立。添加可选字段或新 tag 可在 v1 内增量进行;改变既有 frame 形状需要相应 schema 版本变化,不能只因 protocol 仍是 v1 就忽略事件不兼容。

当前支持协议列表为 ['v1']。不应假定未来 supported 只含一项,也不要把 unstable_* 行为视为无条件稳定。

Envelope 的读取

原始 envelope 提供 mode、features、canonical workspaceCwd,以及可选 workspaces、protocol、policy。features 是特性列表,不能把 SDK 转换后的便利结构直接当成原始 JSON 形状。

workspaceCwd 是主工作区;workspaces 是登记目录与信任信息。multi_workspace_sessions 是多运行时能力,不能仅从主路径字段猜测所有请求都发往 primary。

permission_mediation 的 modes 是构建支持的策略集合,policy.permission 才是当前采用的策略。同样,mcp_guardrails 支持 warn/enforce 不代表当前一定 enforce。

条件特性

Tag主要启用条件
require_authrequire-auth 配置开启
mcp_workspace_pool / mcp_pool_restartpool 实际开启
allow_originOrigin allowlist 功能实际启用
prompt_absolute_deadline / writer_idle_timeout相应期限为正
workspace_settings / user_language_sync / workspace_voice持久设置能力可用
session_shell_commandsession shell 显式启用
rate_limit运行时限流启用
workspace_reloadreload 实现可用
workspace_voice_transcription / voice_transcribe对应语音路径可用

QWEN_SERVE_NO_MCP_POOL=1 会使两个 pool 标签消失,但改变 MCP budget 数字本身不会删除 mcp_guardrails。标签描述行为存在,配置与状态决定具体数值和当前结果。

必须分别预检的接口

  • secondary session rewind 需要 session_rewind 加 multi_workspace_session_rewind;shell 对应 session_shell_command 加 multi_workspace_session_shell。
  • workspace_session_export 与 workspace_archived_session_export 分别控制活动、归档完整导出,不能由 session_export 或 workspace_qualified_rest_core 推断。
  • workspace_session_live_state 独立于 workspace_qualified_rest_core,且要求受信 runtime;持久 transcript 的有限未信任读取策略不外推到 live 状态。
  • session_catalog_batch 独立支持最多 20 个登记工作区的目录批量请求,单工作区也可广告;不能从 multi_workspace_sessions 推断。
  • extension_management_v2、extension_local_path_install、extension_batch_activation_v2 是独立承诺;有 V2 管理不代表支持本地路径或批量 activation。
  • workspace_file_read_cursor 需单独确认游标读取,不能从一般文件读取推断。

缺少精确 tag 时使用已确认的兼容接口或显示不支持,不能试探带副作用的新接口后再靠错误猜测。

Activation 提交与生效分开

extension_activation_explicit_refresh 表示 activation 操作在持久策略提交后完成,不直接刷新所有 live sessions。需立即生效时,再针对需要的 workspace 提交 refresh;全局默认变化没有一个可替代全部 workspace 的单次刷新。

未主动刷新者由后续约 30 秒 generation reconciler 收敛。有该 tag 的客户端才采用这种两步流程;旧 daemon 已在 activation 内刷新,不能再无条件额外刷新一次。

Skill 设置标签也有替换:workspace_skill_settings_toggle / workspace_skill_settings_batch_toggle 替代旧的 catalog-validated toggle 标签。正确修订行为可能在 v1 中通过新 tag 取代旧 tag,客户端必须跟随准确的能力名称。

认证在预检之前

--require-auth 下 capabilities 本身要求 bearer;无法先匿名读取 require_auth 再决定是否提交凭据。未认证 401 是该阶段可见的反馈,成功登录后的 tag 才是硬化状态确认。

不要把无法读取 capabilities 当作“没有功能”,也不要因为某 tag 在编译注册表中存在就声称当前部署广告了它。

修改注册表的要求

上游 SERVE_CAPABILITY_REGISTRY 记录每个 tag 的 since 和可选 modes;CONDITIONAL_SERVE_FEATURES 将条件成员与 predicate 放在一起。新增有条件功能时,两处都要维护,并验证开启/关闭条件下的广告结果。

getRegisteredServeFeatures 返回未筛选注册集合,getAdvertisedServeFeatures 才按协议与运行时条件筛选。客户端以实际响应为准;内部测试不能只证明某字符串在注册表里存在。