挂载与使用 Context
Context 把文档、对象和知识命名空间挂到能力树中。它不是固定的“六方法存储接口”:每个 provider 可以只实现自己真正支持的动词,~help 只披露实际能力。
Capability 驱动,而不是假设全功能
Section titled “Capability 驱动,而不是假设全功能”Context 可能提供:List、Get、Search、Write、Update、Delete。这些 handler 全部可选:
- 没有任何写 handler 的 provider 自动只读;
readOnly挂载可以进一步隐藏并拒绝一个原本可写 provider 的写动作;Search可能不存在,semantic search 还需要额外 capability;- 调用未披露的动词会得到
invalid_argument,不会假装成功。
什么时候选择 Context
Section titled “什么时候选择 Context”适合:文档、提示词、配置片段、知识库对象、Agent 中间产物,以及需要 URI、metadata、version 和分页列表的内容。
不适合:低延迟关系型查询、强事务工作流、任意大规模文件同步,或需要把对象当可执行工具的场景。工具调用应使用 tool/MCP/HTTP;Agent Skill 包可考虑 skillhub。
- 当前 SK 对目标路径有
register,且registerPaths允许; - 数据面读取需要目标路径
read,写入需要write; - S3 或带凭证的 Plugin provider 需要
system/secret:admin才能绑定authRef; - 宿主必须装配对应对象存储或 Plugin export。
路径权限与 SecretStore 引用的完整规则分别见权限、SK 与可见性和密钥、出站身份与安全边界。
使用宿主对象存储
Section titled “使用宿主对象存储”Cloudflare 的平台对象存储通常落在 R2,Node 宿主由自己的 ObjectStore 适配。挂载命令统一使用 r2 provider:
tb ctx mount ctx/team-notes \ --provider r2 \ --prefix team-notes/ \ --description "团队文档"如果只希望调用方读取:
tb ctx mount ctx/public-handbook \ --provider r2 \ --prefix handbook/ \ --read-only平台没有注入 ObjectStore 时,该 provider 会返回 unavailable;这不是靠修改节点配置可以修复的问题,需要部署者补齐宿主能力。
挂载 S3-compatible 存储
Section titled “挂载 S3-compatible 存储”凭证文件示例:
{ "accessKeyId": "...", "secretAccessKey": "..."}保存凭证并挂载:
tb secret set --name docs-s3 < s3-credential.json
tb ctx mount ctx/docs \ --provider s3 \ --endpoint https://s3.example.com \ --bucket docs \ --region auto \ --prefix knowledge/ \ --auth-ref docs-s3endpoint、bucket、region、prefix 是非敏感配置;access key 和 secret key 必须留在 SecretStore。挂载会在权限检查之后验证配置和必要的上游连通性。
读写与并发控制
Section titled “读写与并发控制”先查真实命令:
tb help ctx/docstb ctx ls ctx/docs读取:
tb ctx cat ctx/docs handbook/getting-started.md写入或整体替换:
tb ctx put ctx/docs handbook/getting-started.md \ --file ./getting-started.md \ --content-type text/markdown \ --meta owner=docs-team部分更新只适用于披露 Update 的 provider:
tb ctx patch ctx/docs handbook/getting-started.md \ --meta reviewed=yes响应中的 version 可用于乐观并发。更新重要对象时传 --if-version <version>;版本不匹配返回 conflict,调用方应重新读取并合并,而不是盲目覆盖。
搜索只在该 namespace 披露 Search 时使用:
tb ctx search ctx/docs "deployment"这与根级 tb search 不同:前者搜索 Context 条目,后者搜索全树可调用工具。
大对象与 $ref
Section titled “大对象与 $ref”小对象通常内联在 content 中;超过宿主阈值时,Get 可以返回 { "$ref": "..." }。该 URL 是短期能力:可能是对象存储预签名 URL,也可能是网关的 ~ref 中转。
- 不要把
$ref作为永久地址保存; - 不要转发给无关身份;
- 过期后重新执行 Get;
- 不要假设所有部署都直接暴露 R2/S3 URL。
tb help ctx/docs只列 provider 实际能力;tb ctx ls和cat能读取测试对象;- 可写 provider 的
put返回 URI/version,随后cat内容一致; - read-only 节点不披露写动词,写请求被拒;
- 受限 SK 能读指定 namespace,但看不到其他 Context;
tb secret ls不返回 S3 明文。
如果你要把这套验证编进 Agent 或客户端,按从 ~help 到调用读取 namespace 的真实命令与 schema。
| 现象 | 处理 |
|---|---|
unknown cmd |
provider 没有该 capability;重新读取节点 ~help |
| 写操作 403 | 缺 write,或节点以 readOnly 挂载 |
| S3 挂载要求 authRef | 先写 SecretStore,并使用 JSON 凭证对象 |
unavailable |
对象存储未装配、Secret 无法解析或上游不可达;按错误来源处理 |
conflict |
ifVersion 已过期;重新读取后合并 |
| Search 不存在 | 该 Context provider 未实现 Search;不要与根级工具 Search 混淆 |
$ref 失效 |
URL 已过期或节点已卸载;重新 Get |
卸载与数据回滚
Section titled “卸载与数据回滚”tb ctx unmount ctx/docstb tree ctx --depth 2卸载移除树节点,不等于删除外部 bucket 或其中对象。先确认数据保留策略,再决定是否在对象存储侧清理。S3 凭证也不会自动删除;确认没有其他挂载引用后,才能执行:
tb secret rm docs-s3迁移 provider 时建议先以新路径只读挂载并比对 List/Get,再启用写入、切换调用方,最后卸载旧节点。不要把切换、删数据和删凭证压成一次操作。
- 接入本机目录:阅读Device 反向连接;
- Context 来自自建服务:阅读外部 Plugin;
- 需要命令级调用而不是内容访问:选择MCP或HTTP 工具;
- 具体动词参数始终以目标节点
~help和tb ctx --help为准; - 挂载、对象版本或
$ref异常:进入故障排查与升级。