From 9f7bc6043b2884e8adcd76d7a5eaebb52b4088ed Mon Sep 17 00:00:00 2001 From: hy Date: Thu, 3 Sep 2026 12:29:57 +0800 Subject: [PATCH] refactor: update documentation and improve clarity across multiple files; streamline code structure and remove unused exports --- AGENTS.md | 3 ++- doc/ai-harness/human-harness.md | 11 +++++---- doc/ai-tool-prompt-audit.md | 2 +- doc/architecture.md | 2 +- doc/database.md | 3 +-- doc/prd/workbench.md | 24 +++++++++---------- doc/test-plan/settings-test.md | 6 ++--- doc/test-plan/workbench-test.md | 2 +- package.json | 1 + .../services/ai/human/graph/humanGraph.ts | 4 ---- .../services/ai/human/memory/thoughtMemory.ts | 2 -- .../ai/human/node/utils/stateTransitions.ts | 2 -- .../ai/human/shared/runtimeRenderers.ts | 1 - .../ai/human/shared/toolResultPersistence.ts | 6 ----- src/main/services/ai/human/skills.ts | 3 --- .../ai/human/tools/imageGeneration/index.ts | 2 -- .../workspace-add-selection-flow.e2e.test.ts | 2 +- 17 files changed, 29 insertions(+), 47 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index f85e1ce6..d455ae4a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -27,7 +27,7 @@ - `doc/prd/workbench.md`:涉及 Workbench 产品需求、发送前置条件、消息流/过程层交互或 composer 偏好验收标准时阅读。 - `doc/prd/scheduled-task.md`:涉及定时任务入口、配置、启用开关或到点触发验收标准时阅读。 - `doc/prd/settings.md`:涉及 Settings 产品需求、工作区目录绑定提示、具名工作空间资料/索引交互或验收标准时阅读。 -- `doc/ai-tool-prompt-audit.md`:Skill / Tool 契约活例子(可由 `scripts/doc/generate-ai-tool-prompt-audit.mts` 生成);改工具契约时对照,不替代 `tool-design.md`。 +- `doc/ai-tool-prompt-audit.md`:Skill / Tool 契约活例子(`pnpm doc:ai-tool-prompt-audit` / `scripts/doc/generate-ai-tool-prompt-audit.mts` 生成);改工具契约时对照并重生,不替代 `tool-design.md`。 ## 2. 项目目录结构 @@ -80,6 +80,7 @@ │ └── web_crawler_sidecar/ # 网页抓取 sidecar 资源 ├── scripts/ # 工程脚本 │ ├── postinstall.mjs # 安装后的唯一根级入口 +│ ├── doc/ # 文档生成(如 ai-tool-prompt-audit) │ ├── build/ # 构建、运行时追踪、原生模块和打包审计 │ │ ├── native/ # Node/Electron 原生模块准备 │ │ ├── package/ # staging、main 混淆和安装包审计 diff --git a/doc/ai-harness/human-harness.md b/doc/ai-harness/human-harness.md index 7e22f7d3..c45c0861 100644 --- a/doc/ai-harness/human-harness.md +++ b/doc/ai-harness/human-harness.md @@ -36,10 +36,11 @@ flowchart TD | `context_compaction` | 是(压缩模型) | `compaction_checkpoint` | **整段替换** messages(第 5 节) | | `brain` | 是(主模型) | `thinking_*` + `assistant`;交付经 `finalizeDelivery` | append assistant;**不** refresh build user | | `dispatch` | 否 | 否 | 消费 `tool_calls` 队列,路由下一 stage | -| `learning` | 否 | `learning_*` + `tool` + **`skill_state_updated`**(目标态) | 加载 skill 工具;**不**改 build user | +| `learning` | 否 | `learning_*` + `tool` + **`skill_state_updated`** | 加载 skill 工具;**不**改 build user | | `plan` | 否 | `tool` + `plan_updated` | 更新 state.plan;**不**改 build user | | `hand` | 否 | `tool`(+ 可选 `images[]`) | append ToolMessage;`read_image` 后 append 多模态 HumanMessage | -| `finalizeDelivery` | 否 | `finalizing_started` + 交付 `assistant` | 完成 run;docx/ppt 落盘 side effect | + +交付收尾由 brain 内的 `finalizeDelivery` 完成(**不是**独立图节点):写 `finalizing_started` + 交付 `assistant`,并处理 docx/ppt 落盘 side effect。 ### 1.3 dispatch 路由 @@ -56,10 +57,10 @@ flowchart TD ### 1.4 启动与 cache 初始化 -新 run 启动时(目标态): +新 run 启动时: 1. 读全 session `chat_session_message_log` → `projectMessageLogRecords` 得 tail + plan + checkpoint。 -2. 拼 runtime messages:`[System] + projectBrainMessages(...)`(第 6 节:多条 build user + interleaved tail)。 +2. 拼 runtime messages:`[System] + projectBrainMessagesFromLog(...)`(第 6 节:多条 build user + interleaved tail)。 3. `graph.invoke` 从 `context_budget` 进入循环。 ### 1.5 runtime cache 要点 @@ -676,7 +677,7 @@ brain 返回 learn_skill → 加载 skill 工具定义到 cache → tool 反馈(loaded / duplicate / unknown / 超限) → learning_completed(annotation) - → skill_state_updated(annotation,完整 learnedSkillIds 快照) ← 目标态 + → skill_state_updated(annotation,完整 learnedSkillIds 快照) → context_budget → brain (bindTools 用最新 learnedSkillIds;不改 build user) ``` diff --git a/doc/ai-tool-prompt-audit.md b/doc/ai-tool-prompt-audit.md index 01e0a0c7..31b034ac 100644 --- a/doc/ai-tool-prompt-audit.md +++ b/doc/ai-tool-prompt-audit.md @@ -1,6 +1,6 @@ # Skill / Tool 契约审计 -> `pnpm dlx tsx scripts/doc/generate-ai-tool-prompt-audit.mts` · 2026-09-02T04:33:12.499Z +> `pnpm doc:ai-tool-prompt-audit`(`scripts/doc/generate-ai-tool-prompt-audit.mts`)· 2026-09-02T04:33:12.499Z # Skill: terminal > 在用户工作区根目录执行和读取命令,并返回终端状态、增量输出、退出状态和用户工作区域文件产物。 diff --git a/doc/architecture.md b/doc/architecture.md index cd4240dd..0fffb430 100644 --- a/doc/architecture.md +++ b/doc/architecture.md @@ -129,7 +129,7 @@ flowchart LR | DOCX | 文档聚合模型 + story 内容树;root、可编辑子节点和 visual 共用一个 `nodesById`,visual 只使用 `nodeId`;读写拆成两个 skill;Source / Working 双态 + 净 Diff 审核 | | PDF | `pdf_outline` 元数据与书签;页级读取与检索;Worker 隔离解析;读取页面同时返回 pageImagePath | | PPT | 结构化页规格创建与整页替换,按 slideId / elementId 锚点编辑;`ppt_read_slides` 支持 `detail=full` 或 `detail=images` | -| Excel | 工作表地图 + A1 范围;`excel_read` 四种 type(workbook / range / style / search);`excel_edit` 一次一个 type;写回成功 `{}`(当前无系统生成锚点) | +| Excel | 工作表地图 + A1 范围;`excel_read` 四种 type(workbook / range / style / search);`excel_edit` 一次一个 type;写回成功时结构化 `data` 多为 `{}`,模型侧另有 prose 确认(当前无系统生成锚点) | | KB | 混合召回检索工作区已索引文档 | | Text / Terminal / Web | 普通文本读写搜索、命令执行、网页抓取与内置浏览器操作 | diff --git a/doc/database.md b/doc/database.md index 70ec2ed7..a2b3b195 100644 --- a/doc/database.md +++ b/doc/database.md @@ -21,9 +21,8 @@ SQLite 使用 `better-sqlite3`。启动时 `SqliteCore` 负责: SQLite 保存以下业务数据: -- 会话、消息,以及用于中断恢复和压缩投影的 append-only 会话消息日志;不保存独立恢复快照。 +- 会话与用于中断恢复、压缩投影的 append-only 会话消息日志(`chat_session_message_log`);不保存独立恢复快照,也不再使用已删除的 `chat_message` / `chat_session_skill_state` 表。 - AI run、审批和文件修改记录。 -- 会话级 append-only 的消息转录(`chat_session_message_log`),作为模型上下文的唯一真相源。 - 搜索模式对话轮次(`chat_search_turn`),与 AI log 解耦;Workbench 打开会话时合并投影。 - 消息中的图片只保存运行时路径或 HTTP(S) 地址,以及 MIME、字节数和尺寸;SQLite 不保存 Base64,也不为临时图片建立独立文件表。运行时文件被清理后允许恢复为不可用占位。 - 工作区、文件索引任务、文档元数据和网页源。 diff --git a/doc/prd/workbench.md b/doc/prd/workbench.md index 3d05ed08..5262bcaf 100644 --- a/doc/prd/workbench.md +++ b/doc/prd/workbench.md @@ -195,15 +195,15 @@ #### WB-SESSION-007 同一会话内恢复被中断任务 -- 系统行为:智能模式任务因用户主动停止、网络错误、请求超时、应用进程中断、输出截断、达到运行上限或未知异常而没有正常完成时,历史消息日志保持不变。用户之后在同一会话发送消息时,系统从日志投影“最新压缩摘要 + checkpoint 后历史”,补齐悬空工具结果,再把新 user 消息追加一次继续推进。每条历史 user 保留当轮工作区、参考资料和附件配置;新 user 只使用 Composer 当前配置。计划从 `plan_updated` 日志恢复,技能从会话技能状态恢复,不存在独立恢复快照。重启只标记中断,不自动重新调用模型。 +- 系统行为:智能模式任务因用户主动停止、网络错误、请求超时、应用进程中断、输出截断、达到运行上限或未知异常而没有正常完成时,历史消息日志保持不变。用户之后在同一会话发送消息时,系统从日志投影“最新压缩摘要 + checkpoint 后历史”,补齐悬空工具结果,再把新 user 消息追加一次继续推进。每条历史 user 保留当轮工作区、参考资料和附件配置;新 user 只使用 Composer 当前配置。计划与已学习技能均从消息日志恢复,不存在独立恢复快照。重启只标记中断,不自动重新调用模型。 - 验收: - - `WB-SESSION-007-AC1` 用户停止、网络错误、请求超时、进程中断、输出截断、达到运行上限和未知异常后,下一条消息可只靠消息日志与会话技能状态继续。 + - `WB-SESSION-007-AC1` 用户停止、网络错误、请求超时、进程中断、输出截断、达到运行上限和未知异常后,下一条消息可只靠消息日志继续(含计划与已学习技能)。 - `WB-SESSION-007-AC2` 恢复后的消息数组只包含一次压缩摘要与 checkpoint 后历史,并把用户新语句作为尾部 user 消息追加一次;新语句不会改写历史任务或历史配置。 - `WB-SESSION-007-AC3` 同一会话连续多次中断和恢复后仍保留完整任务主线,原始任务始终保留在记录首条 user,不把历史任务递归嵌套为新的原始任务。 - `WB-SESSION-007-AC4` 切换会话或重启应用后,原会话日志仍可投影;其他会话不能读取该日志。 - `WB-SESSION-007-AC5` 编辑并重新发送最后一条用户消息时,只删除该消息、关联 assistant、run 与该 run 的日志记录,其他历史不变。 - `WB-SESSION-007-AC6` 正常完成清空计划展示但不删除历史日志;删除会话级联删除其日志。 - - `WB-SESSION-007-AC7` 达到 Graph 运行上限时显示“已达到运行上限,可继续对话推进”,并允许在同一会话继续恢复。 + - `WB-SESSION-007-AC7` 达到运行上限时显示“已达到运行上限,可继续对话推进”,并允许在同一会话继续恢复。 #### WB-SESSION-008 会话界面状态独立持久化 @@ -242,7 +242,7 @@ - `WB-COMPOSER-003-AC2` AI 运行成功启动后,assistant 过程流通过事件逐步追加更新,而不是一次性静态替换。 - `WB-COMPOSER-003-AC3` assistant 占位回复在最终输出前展示“让俺想想”并带有流动视觉反馈;当后端 thinking 过程事件到达时,本地占位被替换为该 run 的 thinking 过程组,不重复展示;当出现“正在重试”过程组时,必须隐藏“让俺想想”占位,避免两个等待状态同时出现。 - `WB-COMPOSER-003-AC4` assistant turn 中 brain 最终输出始终位于过程流下方,并按 markdown 渲染;等待 AI 返回最终输出时先展示总结层“基本完成了,让俺收尾下吧”,首个 markdown token 或完成事件到达后隐藏该等待层;证据引用链接与普通链接视觉区分,内部文件链接打开右侧文件预览,内部网页链接使用系统浏览器打开。 - - `WB-COMPOSER-003-AC5` 决策层文本来自 `assistant_process_thought` 中经过 schema 约束的 `thought.next`,不得展示模型原始 chain-of-thought;决策层出现时,当前思考层必须立即隐藏,即使下一步执行正等待审批。 + - `WB-COMPOSER-003-AC5` 决策层只展示面向用户的短摘要,不得展示模型原始长篇推理;决策层出现时,当前思考层必须立即隐藏,即使下一步执行正等待审批。 - `WB-COMPOSER-003-AC6` 过程流使用用户可理解的分层文案,不直接暴露内部 tool 名或底层事件名;同一轮执行中的多个工具调用合并为一个执行层 header,展开后每个工具按其入参生成一句自然语言说明。 - `WB-COMPOSER-003-AC7` AI 输出中切到 Settings 或触发 renderer 重新挂载后,回到 Workbench 能通过会话消息记录投影恢复过程流、partial answer、最终回答或等待审批状态。 - `WB-COMPOSER-003-AC8` brain 负责在最终交付 markdown 中生成证据引用(名称、地址、资源类型);最终交付生成后、回传 renderer 前,Main 对引用地址并行去重检查并写入证据专用的 `accessStatus`。可访问引用保留文件或网页链接交互;不可访问引用不得删除,必须使用与可访问引用相同的强调色降低透明度,并显示为无资源图标、无悬浮反馈、普通鼠标且不可点击的文本。缺少 `accessStatus` 的证据按不可访问处理,普通资源链接不使用该字段;renderer 渲染和用户点击时均不再次检查可访问性。 @@ -299,13 +299,13 @@ #### WB-COMPOSER-014 流式回答、Thought 与计划进度 -- 系统行为:Brain 内容分片到达后立即在最终回答位置按 Markdown 渲染;一旦收到工具调用分片,同一草稿转为紧凑 Markdown Thought。自动重试前清空上一尝试草稿。正常关闭且无工具调用时原位成为最终回答;工具调用继续沿用现有聚合、展开详情和红色失败 UI,`tool_call_result` 不直接显示在聊天区域。Composer 正中上方展示当前计划的环形进度,hover、focus 或点击显示 Todo 浮层。 +- 系统行为:回答内容分片到达后立即在最终回答位置按 Markdown 渲染;一旦进入工具执行,同一草稿转为紧凑 Thought。自动重试前清空上一尝试草稿。正常结束且无工具调用时原位成为最终回答;有工具调用时继续沿用现有聚合、展开详情和红色失败 UI,聊天区不直接展示工具原始结果。Composer 正中上方展示当前计划的环形进度,hover、focus 或点击显示 Todo 浮层。 - 验收: - - `WB-COMPOSER-014-AC1` 多段内容在 run 完成前逐段 Markdown 渲染,切换会话再回来可从 `ai_run` 恢复当前草稿。 - - `WB-COMPOSER-014-AC2` 有工具调用的内容成为 Thought;无工具且正常关闭的内容成为最终回答。Provider 未提供结束原因时不会在流关闭前提前完成。 - - `WB-COMPOSER-014-AC3` 自动重试不会重复拼接上一尝试;`max_tokens` 显示可继续错误,服务端确认的半截回答进入日志,网络中断草稿不进入模型历史。 - - `WB-COMPOSER-014-AC4` 有计划时显示 `done / total` 环形进度;Todo 浮层支持鼠标和键盘,正常完成后短动画隐藏,中断后保留。 - - `WB-COMPOSER-014-AC5` 工具调用聚合、展开详情和红色失败效果不变,聊天区不直接渲染 `tool_call_result`。 + - `WB-COMPOSER-014-AC1` 多段内容在任务完成前逐段 Markdown 渲染,切换会话再回来可恢复当前草稿。 + - `WB-COMPOSER-014-AC2` 有工具调用的内容成为 Thought;无工具且正常结束的内容成为最终回答。未确认结束前不会提前收尾。 + - `WB-COMPOSER-014-AC3` 自动重试不会重复拼接上一尝试;输出被截断时显示可继续错误,已确认的半截回答进入日志,网络中断草稿不进入后续对话上下文。 + - `WB-COMPOSER-014-AC4` 有计划时显示环形进度;Todo 浮层支持鼠标和键盘,正常完成后短动画隐藏,中断后保留。 + - `WB-COMPOSER-014-AC5` 工具调用聚合、展开详情和红色失败效果不变,聊天区不直接展示工具原始结果。 #### WB-COMPOSER-011 使用帮助入口 @@ -513,7 +513,7 @@ #### WB-APPLY-002 AI 修改完成后直接写回 -- 系统行为:受支持 `docx`、`pptx`、`xlsx`、图片生成和普通文本写任务完成后直接写回源文件或创建目标文件,并生成修改记录。普通文本支持 `create`、`rewrite`、唯一非重叠 `edit` 和精确 `replaceAll`;任一校验失败时不产生部分写入。各格式工具的锚点、operation 与结果信封见 `doc/ai-harness/tool-design.md`,由 AI tool / live 回归覆盖。 +- 系统行为:受支持 `docx`、`pptx`、`xlsx`、图片生成和普通文本写任务完成后直接写回源文件或创建目标文件,并生成修改记录。普通文本支持创建、整篇改写、唯一片段编辑和全文精确替换;任一校验失败时不产生部分写入。各格式写入细节由 AI tool / live 回归覆盖(见 `doc/ai-harness/tool-design.md`)。 - 验收: - `WB-APPLY-002-AC1` 修改现有 `docx` 后,源文件立即变为 AI 最终净稿,assistant turn 展示本轮「修改的文件」入口。 - `WB-APPLY-002-AC2` 新建 `docx` 后,目标文件立即存在,assistant turn 展示本轮「修改的文件」入口。 @@ -567,7 +567,7 @@ #### WB-PPT-001 AI 创建和编辑 PPT -- 系统行为:AI 可通过 PPT 读写能力创建和编辑 pptx;写回成功后正式文件立即可读,同一 Run 对同一路径聚合为一条修改记录。页面元素规格、operation 与返回锚点由 AI tool 回归覆盖。 +- 系统行为:AI 可通过 PPT 读写能力创建和编辑 pptx;写回成功后正式文件立即可读,同一次任务对同一路径聚合为一条修改记录。页面与元素级写入细节由 AI tool 回归覆盖。 - 验收: - `WB-PPT-001-AC1` AI 可自行新建 pptx,不依赖用户点击新建入口。 - `WB-PPT-001-AC2` 新建演示文稿或插入页面时,单次调用只允许一张页面的元素规格,不接受页面数组或 HTML。 diff --git a/doc/test-plan/settings-test.md b/doc/test-plan/settings-test.md index daba1b93..0fadf7f5 100644 --- a/doc/test-plan/settings-test.md +++ b/doc/test-plan/settings-test.md @@ -119,11 +119,11 @@ Settings 顶层 suite 对齐 PRD 模块: - Why:后台任务若在进程退出后永久保持 running,会残留执行中状态并给用户错误进度。 - How:通过 Settings UI 对 25,000 个真实文件启动检查;再对延迟响应的本地真实网页分别启动检查和更新索引;每次在进度可见时关闭并复用同一用户目录重启应用。 - Oracle:文件检查退出执行中状态、按钮恢复且 job 为失败,对齐 `SET-WORKSPACE-003-AC4`;网页检查 job 为失败,对齐 `SET-WEB-003-AC4`;网页索引 job 与执行中的网页均收敛为失败,对齐 `SET-WEB-004-AC6`。 -- Not:只读 SQLite 查询用于确认已触发任务的最终状态,不写数据库、不伪造 running job;文件更新索引的底层记录收敛继续由 unit 覆盖。 +- Not:只读 SQLite 查询用于确认已触发任务的最终状态,不写数据库、不伪造 running job;文件「更新索引」进程中断后 job 与文件收敛为失败(`SET-WORKSPACE-004-AC5`)由 unit `workspace-interrupted-job-recovery-contract` / `workspace-index-job-store-contract` 覆盖,本 E2E 不跑文件更新索引中断。 ### 3.3 `workspace / files` -本回归范围新增目录刷新生命周期约束:索引 job 运行期间目录树 IPC 必须为 0;任务成功或失败终态后,当前选中工作空间目录树只允许刷新一次。测试同时确认旧目录节点不因刷新被清空或折叠,扫描无可计算总数时显示活动状态而不是静态 0%。 +本回归范围新增目录刷新生命周期约束:索引 job 运行期间目录树 IPC 必须为 0;任务成功或失败终态后,当前选中工作空间目录树只允许刷新一次。测试同时确认旧目录节点不因刷新被清空或折叠,扫描无可计算总数时显示活动状态而不是静态 0%。向量模型未安装时「更新索引」禁用与说明(`SET-WORKSPACE-004-AC6`)标为手动 / 暂缓,不进日常自动化。 #### `workspace-scan-progress-refresh` @@ -197,7 +197,7 @@ Settings 顶层 suite 对齐 PRD 模块: - Why:网页索引是“爬取 + 建索引”两阶段链路,失败类型必须可区分。 - How:预置一条成功网页和一条带失败标记的网页,先执行“检查更新”,再执行“更新索引”。 - Oracle:网页列表、摘要、失败数量和操作区初始化对齐 `SET-WEB-001-AC1`、`SET-WEB-001-AC2`;检查进度和完成状态对齐 `SET-WEB-003-AC1`、`SET-WEB-003-AC2`;更新时网页进入抓取/索引状态,对齐 `SET-WEB-004-AC1`;成功与失败分别收敛,对齐 `SET-WEB-004-AC2`、`SET-WEB-004-AC3`;分阶段进度对齐 `SET-WEB-004-AC4`。 -- Not:不验证真实网页正文切块、embedding 写入质量和索引失败以外的网络细节;向量模型未安装时“更新索引”禁用与提示由 `SET-WEB-004-AC7` 定义,本 case 运行于共享模型就绪环境,不触发该分支。 +- Not:不验证真实网页正文切块、embedding 写入质量和索引失败以外的网络细节;向量模型未安装时「更新索引」禁用与说明(`SET-WEB-004-AC7`,文件侧姊妹 `SET-WORKSPACE-004-AC6`)标为手动 / 暂缓,不进日常自动化回归。 #### `web-prepare-progress-restore` diff --git a/doc/test-plan/workbench-test.md b/doc/test-plan/workbench-test.md index c8ebf86a..a9b46be3 100644 --- a/doc/test-plan/workbench-test.md +++ b/doc/test-plan/workbench-test.md @@ -582,7 +582,7 @@ tests/case/workbench/ - Why:配置是定时任务可执行的前提,字段校验与开关语义决定任务是否按预期触发。 - How:通过真实 UI 打开视图新增任务并填写名称、提示词、执行时间(TimePicker)、工作空间、主模型(复用模型选择器)、偏好与执行权限,保存后确认出现在列表;编辑并保存;切换启用开关;删除并二次确认。 - Oracle:新增与编辑预填对齐 `ST-FORM-001-AC1`;必填缺失拦截对齐 `ST-FORM-001-AC2`;每周必选星期对齐 `ST-FORM-001-AC3`;默认关闭对齐 `ST-SWITCH-001-AC1`;删除二次确认对齐 `ST-DELETE-001-AC1/AC2`;列表展示对齐 `ST-LIST-001-AC2`。 -- Not:不验证到点后的真实 AI 执行,只验证配置与开关生命周期。 +- Not:不验证到点后的真实 AI 执行,只验证配置与开关生命周期。`ST-FORM-001-AC4`(遮罩点击不关弹窗)、`ST-SWITCH-001-AC2`(关闭后到点不触发)标为不测。 #### `scheduled-task-trigger-and-session-refresh` diff --git a/package.json b/package.json index 6ba48314..e30b2219 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "format": "prettier --write .", "lint": "eslint --cache .", "knip": "knip", + "doc:ai-tool-prompt-audit": "pnpm dlx tsx scripts/doc/generate-ai-tool-prompt-audit.mts", "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false", "typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false", "typecheck": "tsc --noEmit -p tsconfig.node.json --composite false && tsc --noEmit -p tsconfig.web.json --composite false", diff --git a/src/main/services/ai/human/graph/humanGraph.ts b/src/main/services/ai/human/graph/humanGraph.ts index 82febb6b..e189f021 100644 --- a/src/main/services/ai/human/graph/humanGraph.ts +++ b/src/main/services/ai/human/graph/humanGraph.ts @@ -25,10 +25,6 @@ import { } from '../../utils/runFailure' import { isLlmInputTooLongError, isLlmOutputTruncatedError } from '../../errors' -export const HUMAN_GRAPH_INVOKE_CONFIG = { - recursionLimit: HUMAN_GRAPH_RECURSION_LIMIT -} as const - export const createHumanGraphRunner = (input: { ctx: AiRunContext }) => { const { ctx } = input const State = createHumanRunStateSchema() diff --git a/src/main/services/ai/human/memory/thoughtMemory.ts b/src/main/services/ai/human/memory/thoughtMemory.ts index b12393ca..2059dfb1 100644 --- a/src/main/services/ai/human/memory/thoughtMemory.ts +++ b/src/main/services/ai/human/memory/thoughtMemory.ts @@ -1,8 +1,6 @@ import type { HumanPlanItem, HumanRoundThought } from '../types' import { normalizeThoughtText } from '../../../../../shared/thoughtText' -export { normalizeThoughtText } - export const normalizePlanItems = (items: HumanPlanItem[]): HumanPlanItem[] => items .map((item) => ({ diff --git a/src/main/services/ai/human/node/utils/stateTransitions.ts b/src/main/services/ai/human/node/utils/stateTransitions.ts index 2a7470b7..cb72a8e2 100644 --- a/src/main/services/ai/human/node/utils/stateTransitions.ts +++ b/src/main/services/ai/human/node/utils/stateTransitions.ts @@ -23,8 +23,6 @@ import { peekDispatchGroup } from '../dispatch' export type { HumanTraceItemInput } from './stateTransitionState' -export { appendHumanTraceStep } from './stateTransitionState' - export const returnToBrain = ( state: HumanState, overrides: HumanStateOverrides = {} diff --git a/src/main/services/ai/human/shared/runtimeRenderers.ts b/src/main/services/ai/human/shared/runtimeRenderers.ts index 8b7009bd..753d0be4 100644 --- a/src/main/services/ai/human/shared/runtimeRenderers.ts +++ b/src/main/services/ai/human/shared/runtimeRenderers.ts @@ -44,4 +44,3 @@ export const renderHumanFileChangeLines = ( } ) -export const renderHumanArtifactLines = renderHumanFileChangeLines diff --git a/src/main/services/ai/human/shared/toolResultPersistence.ts b/src/main/services/ai/human/shared/toolResultPersistence.ts index 4d654cb8..7512d7dc 100644 --- a/src/main/services/ai/human/shared/toolResultPersistence.ts +++ b/src/main/services/ai/human/shared/toolResultPersistence.ts @@ -65,9 +65,3 @@ export const persistToolResult = async (input: { await fs.writeFile(filePath, input.content, 'utf8') return { filePath, totalChars: countUnicodeCharacters(input.content) } } - -export const cleanupToolResultDir = async (ctx: AiRunContext): Promise => { - const directoryPath = resolvePersistedDir(ctx) - if (!directoryPath) return - await fs.rm(directoryPath, { recursive: true, force: true }).catch(() => undefined) -} diff --git a/src/main/services/ai/human/skills.ts b/src/main/services/ai/human/skills.ts index 1e610fd1..00546f3b 100644 --- a/src/main/services/ai/human/skills.ts +++ b/src/main/services/ai/human/skills.ts @@ -172,9 +172,6 @@ export const getSkillDefinition = (skillId: RuntimeSkillId): SkillDefinition => } } -export const listSkillDefinitions = (): SkillDefinition[] => - RUNTIME_SKILL_IDS.map((skillId) => getSkillDefinition(skillId)) - export const listBuiltinSkillDefinitions = (): SkillDefinition[] => BUILTIN_RUNTIME_SKILL_IDS.map((skillId) => getSkillDefinition(skillId)) diff --git a/src/main/services/ai/human/tools/imageGeneration/index.ts b/src/main/services/ai/human/tools/imageGeneration/index.ts index 054229e7..0eef441f 100644 --- a/src/main/services/ai/human/tools/imageGeneration/index.ts +++ b/src/main/services/ai/human/tools/imageGeneration/index.ts @@ -72,5 +72,3 @@ export const imageGenerationToolFamily = createWorkspaceBoundToolFamily({ familyId: 'image-generation', buildWorkspaceTools: (input) => buildImageGenerationCapabilityTools(input).tools }) - -export { IMAGE_GENERATE_TOOL_SPEC } from './toolSpecs' diff --git a/tests/case/settings/workspace/core/workspace-add-selection-flow.e2e.test.ts b/tests/case/settings/workspace/core/workspace-add-selection-flow.e2e.test.ts index dd791df6..483d68ec 100644 --- a/tests/case/settings/workspace/core/workspace-add-selection-flow.e2e.test.ts +++ b/tests/case/settings/workspace/core/workspace-add-selection-flow.e2e.test.ts @@ -147,7 +147,7 @@ describe('settings workspace e2e', () => { { name: 'created-workspace-is-selected-immediately', message: - '创建成功后,新工作空间应立刻进入列表并成为当前选中项,同时作为空容器显示未绑定文件目录,对齐 SET-WORKSPACE-002-AC2。', + '创建成功后,新工作空间应立刻进入列表并成为当前选中项,同时作为空容器显示未绑定文件目录与「设置后才能在 Workbench 发送」轻提示,对齐 SET-WORKSPACE-002-AC2、SET-WORKSPACE-006-AC3。', data: result } )