能力对应关系
1. 建立业务项目关联
先决定应用使用通用协作项目,还是由应用持有业务对象并关联项目。后者应声明实体绑定的项目类型,实现IProjectTypeProvider,让打开项目和预配时都能验证已保存的业务关联。
业务对象应保存一次生成的目标项目 ID;在授权上下文中调用 ensure(),后续重试保持相同 ID。该操作负责项目预配,不会生成业务任务或启动 Agent。名称和归档状态来自应用已保存的业务事实。
若支持会话首次发送时创建业务项目,可实现可选的 createForConversation():使用宿主提供的创建事务保存业务对象及关联,宿主负责平台项目与会话绑定的提交或回滚。应用有配置确认步骤时仍需先完成确认,不应在该回调内再次预配、启动 Agent 或进行外部 I/O。
详见项目预配运行时。项目预配与应用专用工作空间的初始化是不同流程,后者见应用初始化配置。
应用嵌入 ChatKit 时,前端如何启用项目选择器、读取项目类型目录、处理业务创建入口和固定项目 Workbench,参见 ChatKit:项目与项目类型选择。前端选定的项目上下文应与上述业务关联保持一致。
2. 注册任务来源与业务类型
使用稳定的 Provider key 注册IProjectTaskProvider,并将实现纳入插件模块。snapshot(context) 在可信租户、组织、用户和项目范围内读取业务记录;项目不归该来源管理时返回 null。
快照包含 revision 和任务集合。任务应提供以下信息:
任务集合应覆盖该来源在当前项目中的完整有效计划,不是某次分页或界面筛选的结果。既有来源任务从新快照中消失时,平台会将其标记为已取消并保留记录;不要把暂未加载的任务误当成业务删除。
业务类型在 Provider 的
taskTypes 中声明本地化名称和受支持图标。kind 仍表达任务结构,不应拿业务类型代替它。progress 省略时保留既有值,显式 null 清除;taskType 也支持省略保留、null 清除。
可选的 linked(context, links) 在平台投影提交后接收来源 key 与平台任务 ID 的对应关系,适合幂等回填关联。snapshot() 只读取事实;linked() 可以重试,不能在其中启动业务工作。
3. 业务提交后请求同步
以下片段展示调用顺序,context 和业务命令均由应用服务从已认证并已授权的宿主上下文构造:
refresh() 返回 { status: 'queued' } 表示同步请求已持久保存,不表示快照处理完成。后台读取 Provider 快照并更新平台索引;插件应把业务保存结果与同步结果分开反馈。请求提交失败时保留业务成功结果,记录待同步状态并安排后续重试。
graph() 读取已保存任务和当前执行事实,不能用它代替同步请求。change() 通过任务 ID 和 expectedRevision 维护计划日期等字段;它不能替应用修改来源任务的层级和依赖。resolveExecution() 验证并返回特定尝试的执行目标,不应自行猜测“最近一次对话”。
原生业务执行继续由应用现有的工具、委派或后台工作流程负责。任务 Provider 和同步 API 不承担启动与验收职责;平台通用派发、状态更新和验收入口也不能接管应用来源任务。
4. 接入工作台与成果入口
在 Assistant 的中间件能力中声明project.tasks feature,复用平台 View platform.project-tasks__timeline。该 View 在有项目上下文的会话 Workbench 中按需打开,项目页也使用同一任务数据与执行定位。
若应用提供“打开项目任务”工具,应从可信运行上下文取得当前项目,检查访问后发出标准打开视图事件。这个工具只负责导航,不能顺便创建项目、派发或重试任务。应用自己的业务 View 可继续承载编辑和验收操作,见视图扩展。
成果通过实际文件或 Artifact 接口保存,再向用户提供相应引用。任务快照中的 outputSummary 只是执行摘要,不是交付物;文件范围和版本处理见工作空间文件与 Artifacts。
验证接入效果
上述接口以当前源码契约为准。启用异步同步需要配套的宿主实现与数据库迁移,再部署调用
refresh() 的插件;SDK 类型可导入不等于部署环境已提供对应能力。旧宿主缺少 refresh() 时应明确报告不可用,不退回通过读接口写入。源码与文档校验不能替代目标环境的实际接入验证。