projects 目录;后续其他目录的产品语义、生命周期和权限边界也在本文中继续补充。
工作区目录索引
目录名称只是存储作用域的类型,不是业务实体类型。插件中的“项目”“案件”“尽调任务”或“客户交付”都可以按本页模式绑定到
projects 目录。什么时候使用 projects
当一个插件业务实体同时满足以下特征时,应优先使用 projects:
- 该实体拥有独立的一组输入文件、解析结果和导出文件;
- 主智能体与多个子智能体需要读取同一组文件;
- 多个显式连接到同一平台项目的智能助理需要共享这些文件;
- 同一实体可以拥有多条会话,但不同实体之间必须隔离;
- 用户需要在平台项目列表中看到、进入、归档和恢复这个空间;
- 插件希望智能体的文件理解工具默认搜索当前实体的全部项目文件。
xperts 范围。不要为了省去平台项目创建与同步而把本应隔离的数据放进智能助理公共文件夹。
两层文件共享模型
projects 目录支持两层共享,但不会把所有智能助理状态混在一起:
共享平台项目不等于共享会话或共享能力图。会话仍然按
xpertId + projectId 隔离;两个智能助理可以读取同一个项目文件,同时保留各自的会话历史和最小权限工具集。
产品对象与身份模型
插件业务实体和平台对话项目(Chat Project)是两个对象。二者一对一映射,但必须使用两个独立标识符:
业务接口、页面选择和领域数据关联继续使用
businessEntityId;工作区文件、文件资产、会话和智能体运行使用 workspaceProjectId。不要让一个字段在不同接口中交替表达这两个概念。
推荐在业务实体中保存:
workspaceProjectId 应有租户范围内的唯一约束。数据传输对象(DTO)可以向前端返回它用于导航,但所有业务修改接口仍然提交业务实体标识符。
创建与同步生命周期
创建业务实体时,应先生成两个不同且稳定的 UUID,并先保存映射,再幂等创建平台项目:- 生成
businessEntityId和workspaceProjectId。 - 保存业务实体,状态为
provisioning。 - 调用
platform.project.provisioning.ensure(...)。 - 平台以调用方提供的
workspaceProjectId创建或校正平台项目,并连接预期的智能助理。 - 所有必要连接成功后置为
ready;失败后置为failed并保存可展示的错误。 - 只有
ready状态允许上传文件或启动依赖文件的工作流。
ensure 接收期望状态,因此同一个标识符的创建重试不会产生重复项目:
ensure 会保留既有智能助理连接并追加当前 xpertId,它不是完整连接集合的替换操作。若产品支持移除智能助理,应使用独立的授权项目成员操作。
业务实体是名称和归档状态的来源。改名、归档和恢复后再次执行 ensure;同步失败不回滚已经确认的业务操作,而是保留 failed 状态并提供显式重试。
删除需要单独定义产品策略。归档并不等于删除文件;如果支持永久删除,插件必须先说明业务数据、工作区文件、文件资产、会话和审计记录各自的保留规则。
文件目录与可移植引用
插件在平台项目内使用自己的稳定目录命名空间:projects 作用域。插件数据库只保存工作区文件可移植引用和必要的业务元数据,不保存宿主绝对路径、/workspace/... 沙箱路径、原始 Buffer 或 Base64 内容。
文件解析与智能体文件理解
上传完成后,插件应等待understandFile(...) 返回 FileAsset 文件资产,再保存源文件版本。平台解析仍可异步运行,例如使用 runInline: false;这里要求等待的是“文件资产已创建并返回”,而不是在调用后不等待结果。
会话与智能体运行绑定
智能助理应声明项目工作区策略:project-required 表示没有可信 projectId 时拒绝启动需要文件的运行,不回退到 xperts。project-preferred 仅用于确实允许兼容回退的智能助理。声明策略本身不会授予项目访问权;智能助理还必须显式连接到该平台项目。
以下所有执行入口必须传入同一个 workspaceProjectId:
- 每个已连接智能助理的新建或恢复主会话;
- 插件启动的智能助理任务;
- 工作流中的专业子智能体;
- 跨智能助理交接、重试和手工重跑;
- 沙箱和运行时工作区文件操作。
projectId。创建后不得把同一会话改绑到另一个平台项目;路由、请求和会话的平台项目不一致时应拒绝执行。
跨智能助理交接时,应为目标 xpertId + projectId 新建或选择会话,不能复用来源智能助理的会话。目标智能助理通过同一个可信 workspaceProjectId 读取共享文件,同时保留自己的会话与执行历史。
在平台项目模式下,文件理解工具的可见集合为:
- 当前平台项目的全部文件资产;
- 当前会话的显式附件;
- 两者去重后的结果。
parsed_file_list、parsed_file_search、parsed_file_search_all、parsed_file_read 和预览必须使用同一集合。模型不能自行指定另一个平台项目;跨项目文件资产标识符应返回统一的无权限或不可见结果,不能泄露该文件是否存在。
工作台导航与会话恢复
插件页面进入一个已就绪的业务实体后,应请求宿主打开当前智能助理对应的平台项目:xpertId + projectId 过滤会话,并恢复最近一条主会话;没有历史时创建新会话。插件不要自行拼接宿主路由地址,也不要把业务实体标识符误当成路由中的平台项目标识符。
一个平台项目可以连接多个智能助理,每个智能助理也可以拥有多条主会话。会话历史、最近会话和新会话必须按智能助理与平台项目的联合边界过滤,不能因为共享文件而合并会话。
权限与信任边界
- 工作区目录、租户、组织、用户、平台项目和智能助理身份必须来自可信运行时或服务端业务映射,不得由模型自由填写。
- 智能体可见工具参数中不要暴露
tenantId、catalog、scopeId、projectId或xpertId。 - 每次读、写、解析、搜索、预览和下载都重新校验插件领域权限、用户项目成员身份和当前智能助理与项目的显式连接。
- 平台项目权限不替代插件领域权限;插件仍需验证当前用户能否访问对应业务实体。
- 业务
scopeKey仍按智能助理/Xpert 隔离。运行时项目标识符只决定工作区作用域,不应改变插件业务数据的智能助理隔离键。 - 不要在错误消息中区分“其他平台项目中存在”与“完全不存在”。
失败状态与用户体验
平台项目同步成功但文件理解尚未完成时,应分别展示文件解析状态,不要把它误报为平台项目创建与同步失败。
上线与迁移
不要把已有xperts 引用静默解释为平台项目引用,也不要在平台项目同步失败时回退到智能助理公共文件夹。上线时应显式选择一种策略:执行可审计的文件与记录迁移、保留旧记录只读,或者仅允许新建业务实体使用项目空间。无论选择哪一种,都要让用户能够识别旧数据的作用域,并验证跨项目不会发生文件泄露。
验收清单
- 一个业务实体只对应一个稳定的
workspaceProjectId,重试不创建重复平台项目。 - 平台项目列表中可见该项目,并连接所有预期智能助理。
- 两个已连接智能助理无需复制文件即可搜索、读取和预览同一文件资产。
- 未连接的智能助理即使获得项目或文件资产标识符也不能访问文件。
- 已连接智能助理共享项目文件,但分别保留
xpertId + projectId会话历史。 - 业务改名、归档和恢复能同步到平台项目。
- 上传文件、可移植引用、文件资产和导出文件都属于映射的平台项目。
- 主智能体、解读智能体、规划智能体和编写智能体能搜索同一项目文件。
- 另一个平台项目的文件资产标识符不可读取,也不泄露存在性。
- 会话的平台项目绑定不可变。
project-required智能助理在无平台项目时拒绝依赖文件的运行。- 不使用平台项目的智能助理仍保持原有会话或
xperts行为。
后续目录说明模板
未来在本文增加其他工作区目录时,每一节至少回答以下问题:- 作用域身份:目录由哪个稳定标识符定位?是否还需要
scopeId? - 所有权:归用户、智能助理、组织、知识库还是其他产品对象所有?
- 生命周期:创建、改名、归档、恢复和删除由谁驱动?
- 共享模型:哪些会话、智能体、智能助理、用户或插件可以看见同一文件集合?
- 运行时选择:如何从可信上下文选中该目录?缺失时是否允许回退?
- 文件理解:文件资产的可见集合、附件合并和去重规则是什么?
- 权限边界:租户、组织、用户和领域权限如何共同校验?
- 路径约定:插件如何分配目录,哪些引用可以持久化?
- 保留与迁移:旧目录文件如何迁移,删除和合规策略是什么?
- 验收矩阵:同范围共享、跨范围隔离、重试幂等和回归行为如何验证?