Files
ycode/docs/对话资料沉淀与任务引用确认-2026-10-17.md

178 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 对话资料沉淀与任务引用:源码核对(2026-10-17)
用户确认问题:对话如何沉淀到资料库,普通资料库与项目资料库如何区分,以及对话/任务是否自动以资料库为依据。
本轮使用reverse-engineer-anything技能复核既有REA捕获正文。没有上传、修改或创建原版资料;发现主窗口有运行中会话后仅做被动观察,没有导航或发送测试消息。以下业务结论均为固定源码观察,不是完整运行态或后端行为验收。
## 1. 证据
原版均为WorkBuddy **5.8.3**。主要归档:
- 资料库及共用已加载脚本:`ev_82a9ad8ec38c807e465646d749e2cedbb150fec62e30234c97acd0bb309c349e`,`.tmp/rea-four-modules-library-stable-20261017.json`。
- 主窗口脚本:`ev_2b8db4eb73c59a8d3d80c3e37db5ea9b5bf1d13390d5238d81ff2cc53d11dc09`,`.tmp/rea-todo18-main-scripts.json`。
- 项目详情及发送逻辑:`ev_ca0195278ba08b57f2d847e4d96e3a35490f26367b71b810563b01b03470d000`,`.tmp/rea-todo20-project-detail.json`;任务页补充 `ev_8782905c492acd1618e137480a3da8a8d7eba56e8f328e4856b008e1dd7f34ea`。
- 本轮只读主窗口:`ev_87e1797f654b717af1b300cbf1c971ade495e48b5a43e1f254903defd6e0b23c`,`.tmp/rea-library-task-link-baseline-20261017.json` / `.png`。只证明当前画面,不用于证明自动检索或上传行为。
页面捕获有policy_filtered范围,未归属脚本/资源被排除。下面以实际包含的模块正文为边界;缺失工具/后端行为不能按负面搜索当成全产品不存在。
## 2. 三类资料不能混为同一保存动作
| 类型 | 当前证据确认 | 不能据此推出 |
| --- | --- | --- |
| 本地产物 | 成功write/edit/present_files/imagegen等工具事件被投影为任务产物;有内部artifact-index路径 | 云端入库、整段对话被保存、所有项目源文件都成为资料 |
| 普通资料库 | 个人/团队文档空间;由fetchSpaces取得,选择器按个人/团队展示 | 对任意账号都可见、默认全库全文进入每轮模型请求 |
| 项目资料范围 | lockProjectId时取得该项目的space.id并锁定树;另有项目NetDrive资产选择/上传路径 | 两个入口必然共用或必然分离后台存储、可跨项目访问 |
项目资料库首先体现**项目归属和选择范围**。`space`文档系统和项目NetDrive在客户端有不同路径;不能只靠名称合并成同一后端,也不能反推成两套数据库。
## 3. 对话产物如何保存
### 自动归集为本地产物
源`contexts`中的artifact规则与分支解析,以及`artifact-DiRw8UKk.js:isHiddenArtifactPath`,表明本地产物索引和云文档写入是两条链路。索引不是把聊天原文上传到资料库。
### 产物工具栏的显式保存
`selection-quote-conversation-input-eBPyMR25.js:resolvePersonalUploadTargets`(字符偏移3799附近,SHA-256 `80904295f5a938dbfacf8e2e5bceab978eaf9d1d3a467c4e8d4076f639bee271`)按能力开关、canSave、是否项目会话和服务可用性决定入口:
- `libraryUpload`路径要求非项目会话;旧NetDrive个人库路径也检查非项目会话。
- `projectAsset`路径要求项目会话、可保存及项目NetDrive能力可用。
- 这是该工具栏的入口策略,不代表用户通过其他产品入口永远不能跨空间保存。
`detail-panel-wrapper-BZPa078h.js:uploadArtifactToPersonalLibrary`(偏移33344,SHA-256 `004a480f8014fd9eb68fe3df85f0557480b60765514ff0f6ee9fd55821b4049c`)读取产物、准备上传、调用backend.uploadToKnowledge。已有节点/内容hash可复用,变更时可能按nodeBlockId更新,并处理容量/格式等失败。
同模块`project-asset`分支(偏移61647附近)校验项目角色、解析url/sandbox/conversation中的projectId,初始化该项目NetDrive,然后打开上传选择流程;不是自动把产物上传任意项目。
### 模型工具写库
`src-DbE1_mgM.js:convertLibraryUpload`(偏移1049061,SHA-256 `6c6ce63c93854783270e855572797d75e536e3b8d4548410e31fe9d147e1feb4`)及`LibraryUploadView`证明存在LibraryUpload工具和结果/错误展示。
因此写库不只可能由人工按钮完成,也可能通过模型工具;但何时由模型调用、工具完整参数与个人/团队/项目目标选择仍缺后端/受控运行证据。不能说“每次对话自动写库”,也不能说“只能手动按钮写库”。
`local-docs-facade`的autoSaveContext/saveContext是本地Office编辑上下文保存,不等于聊天入库或资料库上传。
## 4. 普通资料与项目资料如何被引用
`space-library-picker-iy0rD3_T.js`(SHA-256 `648cf973cd4f7b2b7ae8cd7a0db26755d8671583ead81a62bcfa185491901ea3`):
- 普通模式fetchSpaces请求`/space/api/view/query/spaces`,分个人和团队;查询搜索由选择器关键词触发。
- lockProjectId模式调用`fetchProjectSpace(projectId)`→`POST /space/api/view/query/projectspace`,从space.value取space.id,再按该ID读取records。隐藏普通tab/搜索,只构造当前项目树。
`space-library-DZ_aI7LI.js:buildSpacePickerBlocks`(偏移4608;SHA-256 `91bbbd1b9b1602088e8e19d495f29b44da25d8df20028c663163baa8db3d5cbd`)在用户选中资料后生成隐藏的`skill://library`引用及space-doc块,保留docId、URL、kind、source等元数据。发送转换会把所选URL带入本轮输入。
这证明**显式选择资料→引用与所需技能→本轮发送**的客户端通路;尚未证明library技能实际读取过程、全部检索工具、内容解析时机及是否全量读取目录。
## 5. 对话如何使用项目任务/待办
`use-project-local-chat-config-DqSrAK4B.js`(SHA-256 `e6e153194a543b5cdc52c5cac1f96727571aa2ca9b2ab78bf6c79bc35d05f636`)的useLocalTaskAggregatedProvider同时提供待办计划、项目NetDrive资料和本地文件候选;todo候选默认过滤已完成项。
选中待办后,`create-local-todo-chip-CS01etNd.js:createLocalTodoChip`(SHA-256 `0496cea90c780a2480ef063f79dd8555929295aada161d0c38ba63a920d48d5a`)产生todo://id引用,包含projectId、状态、标题/描述/摘要、snapshotSessionId和tags。这是对待办的引用,不是把其他所有会话都并入上下文。
项目详情已捕获的teams/cloud发送链路中:
- extractTodoContext识别所选todo,构造todo-reference。
- collectTodoNetdriveAttachments按projectId+todoId读取待办,把其明确关联的netdisk附件加入tdrive-attachments。
- 因而有“选中待办后自动补关联附件”的逻辑,不等于检索整个项目资料库。
本批证据未观察到独立task://chip,不能据此断言全产品不存在。用户说的“任务”须区分项目待办引用、实际对话任务和定时任务执行。
## 6. 自动上下文的准确边界
在`project-detail-page-DdYKdEkr.js:resolveAndSendPrompt`(SHA-256 `a5630ae6ad4e053e8d085a569a67c102c4226a14c7f27a3e62e69601d0f8d2c1`)的**teams/cloud**发送链路,原版在可解析根信息时加入:
```xml
<tdrive-root id="…" dir_name="…" scope="project" />
```
还包含项目指令、连接器状态、所选todo/附件、工作总结和当前时间等,固定块有首轮/变更去重。根指针不包含目录全文或所有文件正文。
同链路默认可走backend.resolveMessage,解析显式blocks和项目上下文,失败/超时可回退本地拼装;后端算法与实际检索范围未知。
**不能把上述结论外推到所有本地项目会话。** local的createConversation→adapter.prompt已确认携带projectId、promptContentBlocks、projectResources;后者只有connectorSkills/mcpServers/projectSkills,没有资料列表。本地adapter/内核是否另注入根或自主检索仍待证。
因此当前可确认的层级是:
1. 按项目或个人/团队范围选择资料:已证。
2. 显式引用资料/待办,并在部分发送链路补关联上下文:已证。
3. teams/cloud路径默认携带可解析的项目根指针:已证。
4. 模型每次任务都自动list/search/read全库,或全库正文自动注入:未证。
5. 原版定时任务默认自动检索资料库:未证,需另核对持久化引用与触发执行链路。
自动化列表中的dataSource会参与local/cloud来源与开关能力判断,不能据该字段名断言“阅读资料源”。中文资源另有外部数据源同步到协作项目的文案,也不能仅凭词条证明当前定时执行会读取资料库。
## 7. YCode当前与开发计划修订
- 当前YCode自动组装能力快照、非空项目指令、个性化/记忆;显式quotes/attachments和工作目录路径随消息进入请求。没有资料库读写/检索服务,也没有项目资产模型。
- 普通文件工具可以读取工作目录,这不代表资料库自动接入;项目指令注入也不代表资产全文进入上下文。定时任务尚未实现。
- 三模块开发必须包括对话入口:本地产物归集;个人/项目目标明确的入库动作;保留类型与来源的资料/todo引用;按作用域解析和实际读取记录。
- 不把资料库引用全部降成普通路径或一段拼接文本,也不能仅显示引用chip而模型请求没有对应资源。
- 先前计划中的内容快照是YCode本地适配建议,**不是已证原版全文冻结行为**。现在应先保留原版引用身份、URL/ID、类型和元数据;云资料何时解析/读哪一版仍待证。本地可增加快照保障历史重建,但必须单列为适配决定。
- 项目资料范围应显式绑定projectId;不因有projectId就静默注入个人/其他项目全部资料。
本轮只新增确认记录、更新开发计划链接与引用语义说明;没有修改业务功能。尚未完成上传/引用/模型检索的受控运行验收。
## 8. 追加确认:何时拆解任务、何时沉淀资料
### 8.1 对话内计划与项目事项分别看待
已捕获的`adapters-DF2aWDY_.js`(SHA-256 `c4529f43704680c595661fc20578ee813cac20912a9f2324e9b03c33e04ea0c4`,位于项目详情REA归档)中:
- `PlanToolAdapter`识别plan_create/plan_update等实际工具数据。
- `syncTodoStatusFromMessage`在消息中出现todo_write/TodoWrite工具调用后,提取结果并更新对话的todo状态;merge为false时重置当前列表。
- `handlePlanSessionUpdate`在收到ACP plan事件时同步计划条目。
另一路不能遗漏:`contexts-DgzzFjnf.js`(SHA-256 `8d0c375f141cf724c7f77233ee1d54dd21c9cc86286b79d119711f34a6236746`)的`createTaskPlanCard` / `projectTaskTimelineMessages`可根据已存在的权威taskList合成todo_write显示卡。它是展示投影,不证明本轮模型真实调用过TodoWrite,更不证明列表由前端自动拆出。
这些是**事件到达之后的展示/状态同步**,不证明renderer会识别用户任务复杂度并主动要求拆解。现有证据没有统一的“超过几步/多少字/多少文件就拆”阈值,也没有证明每次发消息、回复结束或任务完成时都会创建计划。
对话出现计划卡片或TodoWrite结果,不能直接当作项目数据库里的待办已创建;项目事项的持久化必须另有项目创建命令或已证交接链路。
### 8.2 项目计划页还有尚未采到的远程业务
`plan-host-CQg0zimX.js:ProjectPlanFederationHost`(SHA-256 `501ea6feabfa9458df2585f636b3b765e70701546e3ebd71a60f032778b37a16`)挂载远程project-plan模块,并向它提供`chat.addTodosToChat`、`quoteCommentToChat`等接口。这里可确认选择事项后引用到对话,不能从host反推远程计划模块的“AI拆解/批量创建”逻辑。
计划页新建待办的完整点击处理、AI拆解的入口/条件、后台批量创建和模型系统提示词均未完整取得。因此“复杂任务自动生成项目待办”的规则仍待证,不用通用AI习惯补成原版结论。
### 8.3 已证实的交接触发:创建事项并上传关联资料
`task-transfer-popover-CuSX2nzk.js`(SHA-256 `9b701f16edd2645655b85ca9d278f50958e7051e54351faed7ae84e61b4bec71`,同项目详情REA归档):
1. 交接表单提交路径调用`createLocalTaskTodo`→`planCommands.createTodo(projectId, {...source:'handoff'})`,包含标题、摘要、负责人、时间、标签和状态等。
2. 存在表单携带的附件、本地文件或产物时,后台调用`finalizeLocalTaskAttachments`。
3. 该函数读取实际产物、`uploadTodoAttachmentsToProjectNetdisk`上传,再通过`addTodoAttachment`关联到刚创建的事项。
4. **事项创建成功提示先于后台附件上传完成。** 上传可能部分失败,源码有单独错误反馈。因此交接成功不等于资料已全部上传成功。
触发条件是明确的交接动作及其携带的数据,不是普通任务终态自动发生。代码中待办创建与上传关联可串联,尚未完整验收其服务端/权限和远程UI流程。
### 8.4 模板给出了业务阶段提示,不是自动落库定时器
模板依据为REA `ev_89843a8b67f411d3297b5f3e428830393cd0fe8712603816cf8b7bbe442064d9`,由`recover-project-templates.cjs`校验正文hash后静态恢复为`project-templates.json`。
已确认的示例:
- 产品需求模板:帮助拆解研发任务、子任务与依赖;PRD完成后提醒上传项目资料库并创建评审事项;评审结论可沉淀,待办问题拆成事项。
- 调研模板:阶段完成后主动提醒上传资料、分析表和报告;重要洞察创建评审事项。
- 交付模板:拆里程碑、负责人、期限与依赖;验收后上传结论和交付文档,将遗留问题创建后续事项。
- 知识库模板:引导将经验/会议结论/SOP/FAQ整理成结构化文档,提醒沉淀与维护。
关键词是“帮助”“提醒用户”“可以创建/上传”。当前代码将这些文字作为项目instructions提供给模型,没有证据证明客户端解析这些中文句子后自动创建事项或上传文件。它们说明模型应在哪些业务阶段建议拆解/沉淀,不能替代真实工具调用或用户提交的执行证据。
### 8.5 触发矩阵
| 时机/动作 | 拆解/事项 | 资料沉淀 | 证据层级 |
| --- | --- | --- | --- |
| 用户仅发送一条需求 | 可能引导模型规划,是否调用计划工具未证 | 无已证整段聊天自动入库 | agent决策规则待证 |
| agent发出todo/plan调用、plan事件或取得已有权威taskList | 同步/投影对话计划与状态,卡片可能为合成展示 | 不因该事件自动入库 | adapter及task timeline静态已证 |
| 成功写/编辑/展示产物 | 不自动等同创建项目待办 | 自动归集本地产物,不等同云库上传 | artifact规则静态已证 |
| 产物工具栏保存/上传 | 不必创建待办 | 按个人/项目目标执行上传 | 保存分支静态已证 |
| agent调用LibraryUpload | 不必拆任务 | 执行一次工具入库,目标和实际成功另验 | 工具展示/转换已证,后端决策待证 |
| 用户确认任务交接且携带产物/附件 | 创建项目handoff待办 | 后台上传并关联附件,可能部分失败 | 交接客户端静态已证 |
| 达到模板描述的阶段 | 提示模型帮助拆解/提醒创建 | 提示模型提醒上传/沉淀 | 提示词已证,实际决策待证 |
| 会话/所有待办完成 | 未证自动新建事项或再拆解 | 未证统一自动上传hook | 不标已实现或原版规则 |
### 8.6 YCode开发约束
YCode当前`executeConversationTool(todo_write/create_plan)`根据工具参数构造PlanContent作为工具结果;生产链路主要保存tool_call/tool_result,由renderer从工具参数/结果生成计划卡,没有独立项目待办服务。ChatEvent虽支持plan part,当前未确认生产plan事件发射器;TaskContent也不能视为已有项目任务创建能力。资料库入库与项目交接仍未实现。开发时区分会话计划、项目事项和产物/资料三种对象,并保存可追溯关联。
不能自行加入“复杂就拆”“回复结束就上传”“全部完成就入库”等固定策略再称1:1。已证自动部分可先实现事件投影与状态同步;模型何时调用工具依赖完整工具/系统指令,远程计划业务需REA另取。交接动作应分别跟踪事项创建、上传中、关联完成、部分失败和恢复。