feat: complete WorkBuddy parity and Windows release workflow
This commit is contained in:
1 parent
143516b3a8
commit
d5512df549
434 files changed
+54977
-1854
No files matched your search
@@ -0,0 +1,177 @@
|
||||
# 对话资料沉淀与任务引用:源码核对(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另取。交接动作应分别跟踪事项创建、上传中、关联完成、部分失败和恢复。
|
||||
Reference in new issue
Block a user