From f800ea46e5f2524ab12891d4a5f72b11e0c50d44 Mon Sep 17 00:00:00 2001 From: creatixchu Date: Mon, 14 Sep 2026 13:33:54 +0800 Subject: [PATCH] refactor(deliverables): group tool-present and workspace-changes under packages/deliverables Both Host packages hand the turn's deliverables to the user and neither is a filesystem capability, so they leave packages/fs for a new packages/deliverables group. The Client package stays at packages/client/ui-deliverables. Paths in tsconfig references and aliases, gates, generated catalogs, READMEs, and the implemented notes follow the move; archived notes and released schema records stay as written. --- ...8-present-workspace-source-files.i18n.yaml | 4 +- ...26-09-08-present-workspace-source-files.md | 2 +- ...09-08-present-workspace-source-files.zh.md | 2 +- ...26-09-11-turn-changed-files-card.i18n.yaml | 4 +- .../2026-09-11-turn-changed-files-card.md | 2 +- .../2026-09-11-turn-changed-files-card.zh.md | 2 +- AGENTS.md | 1 + docs/config-catalog.i18n.yaml | 4 +- docs/config-catalog.md | 4 +- docs/config-catalog.zh.md | 4 +- docs/event-producer-consumer.i18n.yaml | 4 +- docs/event-producer-consumer.md | 10 +- docs/event-producer-consumer.zh.md | 10 +- docs/module-graph.i18n.yaml | 4 +- docs/module-graph.md | 32 ++-- docs/module-graph.zh.md | 32 ++-- docs/persistence-catalog.i18n.yaml | 4 +- docs/persistence-catalog.md | 102 +++++----- docs/persistence-catalog.zh.md | 102 +++++----- ...26-09-14-workspace-changes-event.i18n.yaml | 4 +- .../2026-09-14-workspace-changes-event.md | 2 +- .../2026-09-14-workspace-changes-event.zh.md | 2 +- docs/persistence-schema.json | 16 +- docs/tool-catalog.i18n.yaml | 4 +- docs/tool-catalog.md | 2 +- docs/tool-catalog.zh.md | 2 +- packages/README.i18n.yaml | 4 +- packages/README.md | 1 + packages/README.zh.md | 1 + .../client/ui-deliverables/README.i18n.yaml | 4 +- packages/client/ui-deliverables/README.md | 8 +- packages/client/ui-deliverables/README.zh.md | 8 +- .../ui-deliverables/tsconfig.client.json | 4 +- .../client/ui-deliverables/tsconfig.host.json | 4 +- packages/deliverables/README.i18n.yaml | 6 + packages/deliverables/README.md | 49 +++++ packages/deliverables/README.zh.md | 49 +++++ .../tool-present/README.i18n.yaml | 2 +- .../tool-present/README.md | 0 .../tool-present/README.zh.md | 0 .../tool-present/package.json | 2 +- .../tool-present/src/index.ts | 0 .../tool-present/src/types.ts | 0 .../tool-present/tests/built-errors.e2e.ts | 2 +- .../tool-present/tests/present.spec.ts | 0 .../tool-present/tsconfig.json | 2 +- .../workspace-changes/README.i18n.yaml | 2 +- .../workspace-changes/README.md | 0 .../workspace-changes/README.zh.md | 0 .../workspace-changes/package.json | 2 +- .../workspace-changes/src/git.ts | 0 .../workspace-changes/src/index.ts | 0 .../workspace-changes/src/numstat.ts | 0 .../workspace-changes/src/paths.ts | 0 .../workspace-changes/src/recorder.ts | 0 .../workspace-changes/src/types.ts | 0 .../workspace-changes/tests/git.spec.ts | 0 .../tests/loader-composition.spec.ts | 0 .../workspace-changes/tests/numstat.spec.ts | 0 .../workspace-changes/tests/paths.spec.ts | 0 .../workspace-changes/tests/plugin.spec.ts | 0 .../workspace-changes/tests/support.ts | 0 .../workspace-changes/tsconfig.json | 0 packages/fs/README.i18n.yaml | 4 +- packages/fs/README.md | 4 +- packages/fs/README.zh.md | 4 +- pnpm-lock.yaml | 180 +++++++++--------- scripts/gen-tool-catalog.ts | 2 +- scripts/run-gates.ts | 2 +- .../verify-package-readme-model-experience.ts | 2 +- tsconfig.base.json | 8 +- tsconfig.host.json | 4 +- 72 files changed, 414 insertions(+), 307 deletions(-) create mode 100644 packages/deliverables/README.i18n.yaml create mode 100644 packages/deliverables/README.md create mode 100644 packages/deliverables/README.zh.md rename packages/{fs => deliverables}/tool-present/README.i18n.yaml (79%) rename packages/{fs => deliverables}/tool-present/README.md (100%) rename packages/{fs => deliverables}/tool-present/README.zh.md (100%) rename packages/{fs => deliverables}/tool-present/package.json (97%) rename packages/{fs => deliverables}/tool-present/src/index.ts (100%) rename packages/{fs => deliverables}/tool-present/src/types.ts (100%) rename packages/{fs => deliverables}/tool-present/tests/built-errors.e2e.ts (97%) rename packages/{fs => deliverables}/tool-present/tests/present.spec.ts (100%) rename packages/{fs => deliverables}/tool-present/tsconfig.json (95%) rename packages/{fs => deliverables}/workspace-changes/README.i18n.yaml (78%) rename packages/{fs => deliverables}/workspace-changes/README.md (100%) rename packages/{fs => deliverables}/workspace-changes/README.zh.md (100%) rename packages/{fs => deliverables}/workspace-changes/package.json (96%) rename packages/{fs => deliverables}/workspace-changes/src/git.ts (100%) rename packages/{fs => deliverables}/workspace-changes/src/index.ts (100%) rename packages/{fs => deliverables}/workspace-changes/src/numstat.ts (100%) rename packages/{fs => deliverables}/workspace-changes/src/paths.ts (100%) rename packages/{fs => deliverables}/workspace-changes/src/recorder.ts (100%) rename packages/{fs => deliverables}/workspace-changes/src/types.ts (100%) rename packages/{fs => deliverables}/workspace-changes/tests/git.spec.ts (100%) rename packages/{fs => deliverables}/workspace-changes/tests/loader-composition.spec.ts (100%) rename packages/{fs => deliverables}/workspace-changes/tests/numstat.spec.ts (100%) rename packages/{fs => deliverables}/workspace-changes/tests/paths.spec.ts (100%) rename packages/{fs => deliverables}/workspace-changes/tests/plugin.spec.ts (100%) rename packages/{fs => deliverables}/workspace-changes/tests/support.ts (100%) rename packages/{fs => deliverables}/workspace-changes/tsconfig.json (100%) diff --git a/.agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.i18n.yaml b/.agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.i18n.yaml index 604b890247..0458b32e17 100644 --- a/.agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write .agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.md -2026-09-08-present-workspace-source-files.md: 40a5656eee1d90be09c10660706584e6b61848e9 -2026-09-08-present-workspace-source-files.zh.md: 647728ec7befd4d7ecefba29af7d89de2469aac2 +2026-09-08-present-workspace-source-files.md: e1bc2bbc56d423741ca53550af2879fed3f01ecf +2026-09-08-present-workspace-source-files.zh.md: e4f21172b36a5fef50e44a79adca71011ee90a3b diff --git a/.agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.md b/.agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.md index 40a5656eee..e1bc2bbc56 100644 --- a/.agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.md +++ b/.agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.md @@ -10,7 +10,7 @@ Users need to open and edit the files produced in their workspace, including she ## Decision -The [present tool](../../../../packages/fs/tool-present/README.md) declares existing regular source files under the [Session filesystem access policy](2026-09-09-present-filesystem-access.md). It records paths and optional descriptions without reading or copying contents. The [deliverables plugin](../../../../packages/client/ui-deliverables/README.md) opens current workspace sources in the Host's default application. Edits are visible on the next open; deletion or movement makes the declaration unavailable. File-content preservation and copy-on-write storage are deferred until a persistence design owns them. +The [present tool](../../../../packages/deliverables/tool-present/README.md) declares existing regular source files under the [Session filesystem access policy](2026-09-09-present-filesystem-access.md). It records paths and optional descriptions without reading or copying contents. The [deliverables plugin](../../../../packages/client/ui-deliverables/README.md) opens current workspace sources in the Host's default application. Edits are visible on the next open; deletion or movement makes the declaration unavailable. File-content preservation and copy-on-write storage are deferred until a persistence design owns them. The tool description requires `present` after writing a file the user asked to receive and before the final response, including files created through Bash or code execution. A prose path reference does not replace the call. The recorded [SVG delivery scenario](../../../../snapshots/web/present-svg/snapshot.yml) uses a user request that does not name `present`, and checks the resulting file, delivery event, and card. Its UI snapshot covers the expanded Chat transcript; navigation and composer controls belong to their own scenarios, so unrelated chrome changes cannot invalidate file-delivery expectations. diff --git a/.agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.zh.md b/.agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.zh.md index 647728ec7b..e4f21172b3 100644 --- a/.agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.zh.md +++ b/.agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.zh.md @@ -10,7 +10,7 @@ Status: implemented ## 决策 -[present 工具](../../../../packages/fs/tool-present/README.zh.md)声明交付[Session 文件系统访问策略](2026-09-09-present-filesystem-access.zh.md)允许的已有普通源文件。它记录路径和可选说明,不读取或复制内容。[交付插件](../../../../packages/client/ui-deliverables/README.zh.md)使用 Host 默认应用打开当前工作区源文件。下次打开会看到编辑后的内容;删除或移动文件会使声明不可用。文件内容保留与写时复制存储延期到有持久化设计负责时实现。 +[present 工具](../../../../packages/deliverables/tool-present/README.zh.md)声明交付[Session 文件系统访问策略](2026-09-09-present-filesystem-access.zh.md)允许的已有普通源文件。它记录路径和可选说明,不读取或复制内容。[交付插件](../../../../packages/client/ui-deliverables/README.zh.md)使用 Host 默认应用打开当前工作区源文件。下次打开会看到编辑后的内容;删除或移动文件会使声明不可用。文件内容保留与写时复制存储延期到有持久化设计负责时实现。 工具说明要求在写好用户要求接收的文件后、最终回复前调用 `present`,包括通过 Bash 或代码执行创建的文件。正文中的路径引用不能替代调用。录制的 [SVG 交付场景](../../../../snapshots/web/present-svg/snapshot.yml)使用未提及 `present` 的用户请求,检查生成文件、交付事件和卡片。其 UI 快照覆盖展开后的 Chat 对话内容;导航和输入框控件由各自场景负责,避免无关界面改动使文件交付预期失效。 diff --git a/.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.i18n.yaml b/.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.i18n.yaml index 47c3810eeb..261a6d6a40 100644 --- a/.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write .agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.md -2026-09-11-turn-changed-files-card.md: e15273cf1685381295fd3d2e2ac40d5380ffe85b -2026-09-11-turn-changed-files-card.zh.md: da79843a48256d40472fcdec4b03f77cd0c2acfe +2026-09-11-turn-changed-files-card.md: aca452b356715fc2c5e1e1b7360c71d020c221b2 +2026-09-11-turn-changed-files-card.zh.md: 721819a608a75aff1e9aac03f20138f6dddaf055 diff --git a/.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.md b/.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.md index e15273cf16..aca452b356 100644 --- a/.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.md +++ b/.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.md @@ -10,7 +10,7 @@ After a turn, users want to see which files the model changed and by how much. T ## Decision -The Host [workspace-changes](../../../../packages/fs/workspace-changes/README.md) plugin records each top-level turn's changed files as a `workspace/changes` Session event, and the [deliverables plugin](../../../../packages/client/ui-deliverables/README.md) renders that event as the changed-files card in place of the mutation-call row. The event is log-only and never model-visible. +The Host [workspace-changes](../../../../packages/deliverables/workspace-changes/README.md) plugin records each top-level turn's changed files as a `workspace/changes` Session event, and the [deliverables plugin](../../../../packages/client/ui-deliverables/README.md) renders that event as the changed-files card in place of the mutation-call row. The event is log-only and never model-visible. The recorder snapshots the working tree with git at turn start and turn end: `add --all` into a private index seeded from the repository's index, then `write-tree`. Both write into a private object store under the Harness home while the repository's object store is attached as a read-only alternate, so the user's repository gains no objects and the Harness owns retention; this placement follows the workspace change journal POC (#2973), which keeps every captured byte outside the workspace, and costs nothing measurable because the stat cache lives in the index. The two tree ids are diffed with `diff-tree -r -M --numstat`, so the summary contains exactly the turn's changes — the user's earlier uncommitted work, staged or not, is part of the baseline — and commits the model makes mid-turn cannot hide changes. The repository's own index, objects, work tree, and refs are never modified. On a 10k-file repository one snapshot costs about 60 ms and the diff about 10 ms; the baseline runs concurrently with the first model request, and tool execution waits for it. diff --git a/.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.zh.md b/.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.zh.md index da79843a48..721819a608 100644 --- a/.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.zh.md +++ b/.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.zh.md @@ -10,7 +10,7 @@ Status: implemented ## Decision -Host 侧的 [workspace-changes](../../../../packages/fs/workspace-changes/README.zh.md) 插件把每个顶层轮次改动的文件记录为 `workspace/changes` Session 事件,[产出物插件](../../../../packages/client/ui-deliverables/README.zh.md)把该事件渲染为改动文件卡片,取代修改调用行。该事件仅写日志,模型永远看不到。 +Host 侧的 [workspace-changes](../../../../packages/deliverables/workspace-changes/README.zh.md) 插件把每个顶层轮次改动的文件记录为 `workspace/changes` Session 事件,[产出物插件](../../../../packages/client/ui-deliverables/README.zh.md)把该事件渲染为改动文件卡片,取代修改调用行。该事件仅写日志,模型永远看不到。 记录器在轮次开始和结束时用 git 对工作树做快照:以仓库 index 为种子在私有 index 上执行 `add --all`,再执行 `write-tree`。两者都写入 Harness home 下的私有对象库,仓库自己的对象库以只读 alternate 挂接,因此用户仓库不会多出任何对象,保留策略由 Harness 掌握;这个放置方式学自工作区变更日志 POC(#2973)把捕获的每个字节都放在工作区外的做法,而且因为 stat 缓存在 index 里,它对耗时没有可测量的影响。两个 tree id 用 `diff-tree -r -M --numstat` 比较,因此摘要恰好只包含本轮的改动——用户此前未提交的工作,无论是否暂存,都属于基线——模型在轮中做的提交也藏不住改动。仓库自己的 index、对象、工作树和 ref 从不被修改。在一万个文件的仓库上,一次快照约 60 ms,比较约 10 ms;基线与首次模型请求并行,工具执行会等待它。 diff --git a/AGENTS.md b/AGENTS.md index 71d7556e9e..fd650b6b25 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -25,6 +25,7 @@ packages/ @deepseek-ai/dsh- workspaces at packages/// terminal/ persistent terminals ptc-runtime/ PTC execution sandbox/ process confinement + deliverables/ turn deliverables fs/ filesystem access lsp/ language servers skill/ skill loading diff --git a/docs/config-catalog.i18n.yaml b/docs/config-catalog.i18n.yaml index 63b029d7f0..a1c43f27da 100644 --- a/docs/config-catalog.i18n.yaml +++ b/docs/config-catalog.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write docs/config-catalog.md -config-catalog.md: 4b37d2b34f34acb8a09245e45af0f89f91e8232c -config-catalog.zh.md: bfb839f073b3bb3140142bb7b27bd4b9ccab9905 +config-catalog.md: c07e7e424b996256fa99c268d07c58d9fbf5afed +config-catalog.zh.md: baf131582578adcf06e012791c4c281251f1d278 diff --git a/docs/config-catalog.md b/docs/config-catalog.md index 4b37d2b34f..c07e7e424b 100644 --- a/docs/config-catalog.md +++ b/docs/config-catalog.md @@ -2925,7 +2925,7 @@ export interface Config { } ``` -Source: [`packages/fs/tool-present/src/index.ts:15`](../packages/fs/tool-present/src/index.ts) +Source: [`packages/deliverables/tool-present/src/index.ts:15`](../packages/deliverables/tool-present/src/index.ts) @@ -3494,7 +3494,7 @@ export interface Config { } ``` -Source: [`packages/fs/workspace-changes/src/index.ts:28`](../packages/fs/workspace-changes/src/index.ts) +Source: [`packages/deliverables/workspace-changes/src/index.ts:28`](../packages/deliverables/workspace-changes/src/index.ts) ## Loadable plugins with no config diff --git a/docs/config-catalog.zh.md b/docs/config-catalog.zh.md index bfb839f073..baf1315825 100644 --- a/docs/config-catalog.zh.md +++ b/docs/config-catalog.zh.md @@ -2927,7 +2927,7 @@ export interface Config { } ``` -来源:[`packages/fs/tool-present/src/index.ts:15`](../packages/fs/tool-present/src/index.ts) +来源:[`packages/deliverables/tool-present/src/index.ts:15`](../packages/deliverables/tool-present/src/index.ts) @@ -3496,7 +3496,7 @@ export interface Config { } ``` -来源: [`packages/fs/workspace-changes/src/index.ts:28`](../packages/fs/workspace-changes/src/index.ts) +来源: [`packages/deliverables/workspace-changes/src/index.ts:28`](../packages/deliverables/workspace-changes/src/index.ts) ## 无配置的可加载插件 diff --git a/docs/event-producer-consumer.i18n.yaml b/docs/event-producer-consumer.i18n.yaml index 6715b81da8..a258bcd725 100644 --- a/docs/event-producer-consumer.i18n.yaml +++ b/docs/event-producer-consumer.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write docs/event-producer-consumer.md -event-producer-consumer.md: 468f4a34c69d4b08bb3204e7d695c2c402baaa84 -event-producer-consumer.zh.md: 0081d217a1ee4c8b3986e3bd3b8075e040f37307 +event-producer-consumer.md: 4d81c97dedfa5e3d8ebfe1bb8697f4be46a14e89 +event-producer-consumer.zh.md: 6c667f4c991f4d8245c9ebcf5a59b522014f9079 diff --git a/docs/event-producer-consumer.md b/docs/event-producer-consumer.md index 468f4a34c6..4d81c97ded 100644 --- a/docs/event-producer-consumer.md +++ b/docs/event-producer-consumer.md @@ -21,7 +21,7 @@ This matrix shows which packages dispatch each harness-owned event and which pac | `agent/request-error` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:363`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`compaction-basic`](../packages/compaction/compaction-basic), [`compaction-image-offload`](../packages/compaction/compaction-image-offload), [`llm-retry`](../packages/llm/llm-retry) | | `agent/session-start` | `emit` | [`packages/core/agent/src/runtime-types.ts:316`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emitAgentEvent`) | `agent-team`, [`goal`](../packages/goal/goal), [`goal-round-driver`](../packages/goal/goal-round-driver), [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex) | | `agent/status` | `emit` | [`packages/core/agent/src/runtime-types.ts:277`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`agent`](../packages/core/agent), `agent-team`, [`compaction-basic`](../packages/compaction/compaction-basic), [`goal-round-driver`](../packages/goal/goal-round-driver), [`schedule`](../packages/schedule/schedule), `server`, `session-controller` | -| `agent/turn-stopping` | `serial` | [`packages/core/agent/src/runtime-types.ts:391`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`serial`) | [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`workspace-changes`](../packages/fs/workspace-changes) | +| `agent/turn-stopping` | `serial` | [`packages/core/agent/src/runtime-types.ts:391`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`serial`) | [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`workspace-changes`](../packages/deliverables/workspace-changes) | | `api-session/activity` | `emit` | [`packages/api/session-controller/src/types.ts:601`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | | `api-session/added` | `emit` | [`packages/api/session-controller/src/types.ts:581`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | | `api-session/error` | `emit` | [`packages/api/session-controller/src/types.ts:608`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | @@ -51,8 +51,8 @@ This matrix shows which packages dispatch each harness-owned event and which pac | `permission-presets/catalog-changed` | `emit` | [`packages/interaction/permission-presets/src/types.ts:44`](../packages/interaction/permission-presets/src/types.ts) | [`permission-presets`](../packages/interaction/permission-presets) (`events.dispatch`) | `remotes` | | `session-telemetry/record` | `waterfall` | [`packages/session/session-telemetry/src/index.ts:43`](../packages/session/session-telemetry/src/index.ts) | [`session-telemetry`](../packages/session/session-telemetry) (`waterfall`) | - | | `session/created` | `emit` | [`packages/core/session/src/index.ts:50`](../packages/core/session/src/index.ts) | [`session`](../packages/core/session) (`events.dispatch`) | [`compaction`](../packages/compaction/compaction), [`goal`](../packages/goal/goal), [`hook-protocol`](../packages/hooks/hook-protocol), [`llm-retry`](../packages/llm/llm-retry), [`permission-presets`](../packages/interaction/permission-presets), [`plan-mode`](../packages/plan/plan-mode), [`schedule`](../packages/schedule/schedule), `server`, [`session`](../packages/core/session), `session-controller`, [`session-log-deepseek`](../packages/session/session-log-deepseek), [`session-projection`](../packages/session/session-projection), [`session-projection-cache`](../packages/session/session-projection-cache), [`session-telemetry`](../packages/session/session-telemetry), [`session-title`](../packages/session/session-title), [`time-context`](../packages/context/time-context), [`tool-todo`](../packages/todo/tool-todo), [`tool-workflow`](../packages/workflow/tool-workflow), [`tools`](../packages/core/tools), [`user-approval`](../packages/interaction/user-approval) | -| `session/disposed` | `emit` | [`packages/core/session/src/index.ts:60`](../packages/core/session/src/index.ts) | [`session`](../packages/core/session) (`events.dispatch`) | [`agent-loop`](../packages/core/agent-loop), `agent-team`, `file-upload`, `session-controller`, [`session-persistence-jsonl`](../packages/session/session-persistence-jsonl), [`session-projection-cache`](../packages/session/session-projection-cache), [`session-telemetry`](../packages/session/session-telemetry), [`session-title`](../packages/session/session-title), [`workspace-changes`](../packages/fs/workspace-changes) | -| `session/event` | `emit` | [`packages/core/session/src/index.ts:72`](../packages/core/session/src/index.ts) | [`session`](../packages/core/session) (`events.dispatch`) | [`acp`](../packages/acp/acp), [`agent-instructions`](../packages/context/agent-instructions), [`agent-loop`](../packages/core/agent-loop), [`agent-presets`](../packages/preset/agent-presets), `agent-team`, [`compaction`](../packages/compaction/compaction), [`compaction-basic`](../packages/compaction/compaction-basic), [`file-reference-local`](../packages/context/file-reference-local), `file-upload`, [`goal`](../packages/goal/goal), [`goal-round-driver`](../packages/goal/goal-round-driver), [`headless`](../packages/bundle/headless), [`hook-protocol`](../packages/hooks/hook-protocol), [`loader-smoke`](../packages/test-support/loader-smoke), `server`, [`session`](../packages/core/session), `session-controller`, [`session-persistence-jsonl`](../packages/session/session-persistence-jsonl), [`session-projection`](../packages/session/session-projection), [`session-projection-cache`](../packages/session/session-projection-cache), [`session-telemetry`](../packages/session/session-telemetry), [`session-telemetry-otel`](../packages/session/session-telemetry-otel), [`session-title`](../packages/session/session-title), [`token-meter`](../packages/llm/token-meter), [`tool-todo`](../packages/todo/tool-todo), [`tool-workflow`](../packages/workflow/tool-workflow), [`tools`](../packages/core/tools), [`user-approval`](../packages/interaction/user-approval), [`workspace-changes`](../packages/fs/workspace-changes) | +| `session/disposed` | `emit` | [`packages/core/session/src/index.ts:60`](../packages/core/session/src/index.ts) | [`session`](../packages/core/session) (`events.dispatch`) | [`agent-loop`](../packages/core/agent-loop), `agent-team`, `file-upload`, `session-controller`, [`session-persistence-jsonl`](../packages/session/session-persistence-jsonl), [`session-projection-cache`](../packages/session/session-projection-cache), [`session-telemetry`](../packages/session/session-telemetry), [`session-title`](../packages/session/session-title), [`workspace-changes`](../packages/deliverables/workspace-changes) | +| `session/event` | `emit` | [`packages/core/session/src/index.ts:72`](../packages/core/session/src/index.ts) | [`session`](../packages/core/session) (`events.dispatch`) | [`acp`](../packages/acp/acp), [`agent-instructions`](../packages/context/agent-instructions), [`agent-loop`](../packages/core/agent-loop), [`agent-presets`](../packages/preset/agent-presets), `agent-team`, [`compaction`](../packages/compaction/compaction), [`compaction-basic`](../packages/compaction/compaction-basic), [`file-reference-local`](../packages/context/file-reference-local), `file-upload`, [`goal`](../packages/goal/goal), [`goal-round-driver`](../packages/goal/goal-round-driver), [`headless`](../packages/bundle/headless), [`hook-protocol`](../packages/hooks/hook-protocol), [`loader-smoke`](../packages/test-support/loader-smoke), `server`, [`session`](../packages/core/session), `session-controller`, [`session-persistence-jsonl`](../packages/session/session-persistence-jsonl), [`session-projection`](../packages/session/session-projection), [`session-projection-cache`](../packages/session/session-projection-cache), [`session-telemetry`](../packages/session/session-telemetry), [`session-telemetry-otel`](../packages/session/session-telemetry-otel), [`session-title`](../packages/session/session-title), [`token-meter`](../packages/llm/token-meter), [`tool-todo`](../packages/todo/tool-todo), [`tool-workflow`](../packages/workflow/tool-workflow), [`tools`](../packages/core/tools), [`user-approval`](../packages/interaction/user-approval), [`workspace-changes`](../packages/deliverables/workspace-changes) | | `session/flush` | `parallel` | [`packages/core/session/src/index.ts:81`](../packages/core/session/src/index.ts) | [`session`](../packages/core/session) (`events.dispatch`) | [`session-persistence-jsonl`](../packages/session/session-persistence-jsonl), [`session-telemetry`](../packages/session/session-telemetry) | | `settings/document-updated` | `emit` | [`packages/settings/settings/src/types.ts:105`](../packages/settings/settings/src/types.ts) | [`settings`](../packages/settings/settings) (`events.dispatch`) | `remotes` | | `settings/updated` | `emit` | [`packages/settings/settings/src/types.ts:92`](../packages/settings/settings/src/types.ts) | [`settings`](../packages/settings/settings) (`events.dispatch`) | [`settings`](../packages/settings/settings) | @@ -66,9 +66,9 @@ This matrix shows which packages dispatch each harness-owned event and which pac | `tools/change` | `emit` | [`packages/core/tools/src/index.ts:201`](../packages/core/tools/src/index.ts) | [`agent-presets`](../packages/preset/agent-presets) (`emit`), [`tools`](../packages/core/tools) (`emit`) | [`tool-subagent`](../packages/subagent/tool-subagent) | | `tools/execute` | `waterfall` | [`packages/core/tools/src/index.ts:157`](../packages/core/tools/src/index.ts) | [`tools`](../packages/core/tools) (`waterfall`) | `computer-use-cua-driver-native`, [`session-checkpoint-policy`](../packages/session/session-checkpoint-policy), `timeout-policy` | | `tools/post-execute` | `waterfall` | [`packages/core/tools/src/index.ts:169`](../packages/core/tools/src/index.ts) | [`tools`](../packages/core/tools) (`waterfall`) | [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`repeat-tool-reminder`](../packages/guard/repeat-tool-reminder), [`spill-policy`](../packages/spill/spill-policy), [`tool-fs-search`](../packages/fs/tool-fs-search) | -| `tools/pre-execute` | `waterfall` | [`packages/core/tools/src/index.ts:146`](../packages/core/tools/src/index.ts) | [`tools`](../packages/core/tools) (`waterfall`) | `auto-review`, [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`tool-jobs`](../packages/jobs/tool-jobs), [`workspace-changes`](../packages/fs/workspace-changes) | +| `tools/pre-execute` | `waterfall` | [`packages/core/tools/src/index.ts:146`](../packages/core/tools/src/index.ts) | [`tools`](../packages/core/tools) (`waterfall`) | `auto-review`, [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`tool-jobs`](../packages/jobs/tool-jobs), [`workspace-changes`](../packages/deliverables/workspace-changes) | | `tools/ptc-dispatch-log` | `waterfall` | [`packages/core/tools/src/index.ts:183`](../packages/core/tools/src/index.ts) | [`tools`](../packages/core/tools) (`waterfall`) | [`spill-policy`](../packages/spill/spill-policy) | -| `tools/result` | `emit` | [`packages/core/tools/src/index.ts:191`](../packages/core/tools/src/index.ts) | [`tools`](../packages/core/tools) (`events.dispatch`) | [`agent-instructions`](../packages/context/agent-instructions), [`subagent-in-process-driver`](../packages/subagent/subagent-in-process-driver), [`tool-present`](../packages/fs/tool-present) | +| `tools/result` | `emit` | [`packages/core/tools/src/index.ts:191`](../packages/core/tools/src/index.ts) | [`tools`](../packages/core/tools) (`events.dispatch`) | [`agent-instructions`](../packages/context/agent-instructions), [`subagent-in-process-driver`](../packages/subagent/subagent-in-process-driver), [`tool-present`](../packages/deliverables/tool-present) | | `user-questions/request` | `waterfall` | [`packages/interaction/user-questions/src/types.ts:85`](../packages/interaction/user-questions/src/types.ts) | [`user-questions`](../packages/interaction/user-questions) (`waterfall`) | `remotes` | | `webserver/index-inject` | `emit` | [`packages/host/webserver/src/index.ts:34`](../packages/host/webserver/src/index.ts) | `webserver` (`emit`) | `connection`, `inspector`, `modules` | | `workflow/agent-end` | `emit` | [`packages/workflow/workflow/src/index.ts:79`](../packages/workflow/workflow/src/index.ts) | [`workflow`](../packages/workflow/workflow) (`events.dispatch`) | [`tool-workflow`](../packages/workflow/tool-workflow), [`workflow`](../packages/workflow/workflow) | diff --git a/docs/event-producer-consumer.zh.md b/docs/event-producer-consumer.zh.md index 0081d217a1..6c667f4c99 100644 --- a/docs/event-producer-consumer.zh.md +++ b/docs/event-producer-consumer.zh.md @@ -23,7 +23,7 @@ | `agent/request-error` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:363`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`compaction-basic`](../packages/compaction/compaction-basic), [`compaction-image-offload`](../packages/compaction/compaction-image-offload), [`llm-retry`](../packages/llm/llm-retry) | | `agent/session-start` | `emit` | [`packages/core/agent/src/runtime-types.ts:316`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emitAgentEvent`) | `agent-team`, [`goal`](../packages/goal/goal), [`goal-round-driver`](../packages/goal/goal-round-driver), [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex) | | `agent/status` | `emit` | [`packages/core/agent/src/runtime-types.ts:277`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`agent`](../packages/core/agent), `agent-team`, [`compaction-basic`](../packages/compaction/compaction-basic), [`goal-round-driver`](../packages/goal/goal-round-driver), [`schedule`](../packages/schedule/schedule), `server`, `session-controller` | -| `agent/turn-stopping` | `serial` | [`packages/core/agent/src/runtime-types.ts:391`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`serial`) | [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`workspace-changes`](../packages/fs/workspace-changes) | +| `agent/turn-stopping` | `serial` | [`packages/core/agent/src/runtime-types.ts:391`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`serial`) | [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`workspace-changes`](../packages/deliverables/workspace-changes) | | `api-session/activity` | `emit` | [`packages/api/session-controller/src/types.ts:601`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | | `api-session/added` | `emit` | [`packages/api/session-controller/src/types.ts:581`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | | `api-session/error` | `emit` | [`packages/api/session-controller/src/types.ts:608`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | @@ -53,8 +53,8 @@ | `permission-presets/catalog-changed` | `emit` | [`packages/interaction/permission-presets/src/types.ts:44`](../packages/interaction/permission-presets/src/types.ts) | [`permission-presets`](../packages/interaction/permission-presets) (`events.dispatch`) | `remotes` | | `session-telemetry/record` | `waterfall` | [`packages/session/session-telemetry/src/index.ts:43`](../packages/session/session-telemetry/src/index.ts) | [`session-telemetry`](../packages/session/session-telemetry) (`waterfall`) | - | | `session/created` | `emit` | [`packages/core/session/src/index.ts:50`](../packages/core/session/src/index.ts) | [`session`](../packages/core/session) (`events.dispatch`) | [`compaction`](../packages/compaction/compaction), [`goal`](../packages/goal/goal), [`hook-protocol`](../packages/hooks/hook-protocol), [`llm-retry`](../packages/llm/llm-retry), [`permission-presets`](../packages/interaction/permission-presets), [`plan-mode`](../packages/plan/plan-mode), [`schedule`](../packages/schedule/schedule), `server`, [`session`](../packages/core/session), `session-controller`, [`session-log-deepseek`](../packages/session/session-log-deepseek), [`session-projection`](../packages/session/session-projection), [`session-projection-cache`](../packages/session/session-projection-cache), [`session-telemetry`](../packages/session/session-telemetry), [`session-title`](../packages/session/session-title), [`time-context`](../packages/context/time-context), [`tool-todo`](../packages/todo/tool-todo), [`tool-workflow`](../packages/workflow/tool-workflow), [`tools`](../packages/core/tools), [`user-approval`](../packages/interaction/user-approval) | -| `session/disposed` | `emit` | [`packages/core/session/src/index.ts:60`](../packages/core/session/src/index.ts) | [`session`](../packages/core/session) (`events.dispatch`) | [`agent-loop`](../packages/core/agent-loop), `agent-team`, `file-upload`, `session-controller`, [`session-persistence-jsonl`](../packages/session/session-persistence-jsonl), [`session-projection-cache`](../packages/session/session-projection-cache), [`session-telemetry`](../packages/session/session-telemetry), [`session-title`](../packages/session/session-title), [`workspace-changes`](../packages/fs/workspace-changes) | -| `session/event` | `emit` | [`packages/core/session/src/index.ts:72`](../packages/core/session/src/index.ts) | [`session`](../packages/core/session) (`events.dispatch`) | [`acp`](../packages/acp/acp), [`agent-instructions`](../packages/context/agent-instructions), [`agent-loop`](../packages/core/agent-loop), [`agent-presets`](../packages/preset/agent-presets), `agent-team`, [`compaction`](../packages/compaction/compaction), [`compaction-basic`](../packages/compaction/compaction-basic), [`file-reference-local`](../packages/context/file-reference-local), `file-upload`, [`goal`](../packages/goal/goal), [`goal-round-driver`](../packages/goal/goal-round-driver), [`headless`](../packages/bundle/headless), [`hook-protocol`](../packages/hooks/hook-protocol), [`loader-smoke`](../packages/test-support/loader-smoke), `server`, [`session`](../packages/core/session), `session-controller`, [`session-persistence-jsonl`](../packages/session/session-persistence-jsonl), [`session-projection`](../packages/session/session-projection), [`session-projection-cache`](../packages/session/session-projection-cache), [`session-telemetry`](../packages/session/session-telemetry), [`session-telemetry-otel`](../packages/session/session-telemetry-otel), [`session-title`](../packages/session/session-title), [`token-meter`](../packages/llm/token-meter), [`tool-todo`](../packages/todo/tool-todo), [`tool-workflow`](../packages/workflow/tool-workflow), [`tools`](../packages/core/tools), [`user-approval`](../packages/interaction/user-approval), [`workspace-changes`](../packages/fs/workspace-changes) | +| `session/disposed` | `emit` | [`packages/core/session/src/index.ts:60`](../packages/core/session/src/index.ts) | [`session`](../packages/core/session) (`events.dispatch`) | [`agent-loop`](../packages/core/agent-loop), `agent-team`, `file-upload`, `session-controller`, [`session-persistence-jsonl`](../packages/session/session-persistence-jsonl), [`session-projection-cache`](../packages/session/session-projection-cache), [`session-telemetry`](../packages/session/session-telemetry), [`session-title`](../packages/session/session-title), [`workspace-changes`](../packages/deliverables/workspace-changes) | +| `session/event` | `emit` | [`packages/core/session/src/index.ts:72`](../packages/core/session/src/index.ts) | [`session`](../packages/core/session) (`events.dispatch`) | [`acp`](../packages/acp/acp), [`agent-instructions`](../packages/context/agent-instructions), [`agent-loop`](../packages/core/agent-loop), [`agent-presets`](../packages/preset/agent-presets), `agent-team`, [`compaction`](../packages/compaction/compaction), [`compaction-basic`](../packages/compaction/compaction-basic), [`file-reference-local`](../packages/context/file-reference-local), `file-upload`, [`goal`](../packages/goal/goal), [`goal-round-driver`](../packages/goal/goal-round-driver), [`headless`](../packages/bundle/headless), [`hook-protocol`](../packages/hooks/hook-protocol), [`loader-smoke`](../packages/test-support/loader-smoke), `server`, [`session`](../packages/core/session), `session-controller`, [`session-persistence-jsonl`](../packages/session/session-persistence-jsonl), [`session-projection`](../packages/session/session-projection), [`session-projection-cache`](../packages/session/session-projection-cache), [`session-telemetry`](../packages/session/session-telemetry), [`session-telemetry-otel`](../packages/session/session-telemetry-otel), [`session-title`](../packages/session/session-title), [`token-meter`](../packages/llm/token-meter), [`tool-todo`](../packages/todo/tool-todo), [`tool-workflow`](../packages/workflow/tool-workflow), [`tools`](../packages/core/tools), [`user-approval`](../packages/interaction/user-approval), [`workspace-changes`](../packages/deliverables/workspace-changes) | | `session/flush` | `parallel` | [`packages/core/session/src/index.ts:81`](../packages/core/session/src/index.ts) | [`session`](../packages/core/session) (`events.dispatch`) | [`session-persistence-jsonl`](../packages/session/session-persistence-jsonl), [`session-telemetry`](../packages/session/session-telemetry) | | `settings/document-updated` | `emit` | [`packages/settings/settings/src/types.ts:105`](../packages/settings/settings/src/types.ts) | [`settings`](../packages/settings/settings) (`events.dispatch`) | `remotes` | | `settings/updated` | `emit` | [`packages/settings/settings/src/types.ts:92`](../packages/settings/settings/src/types.ts) | [`settings`](../packages/settings/settings) (`events.dispatch`) | [`settings`](../packages/settings/settings) | @@ -68,9 +68,9 @@ | `tools/change` | `emit` | [`packages/core/tools/src/index.ts:201`](../packages/core/tools/src/index.ts) | [`agent-presets`](../packages/preset/agent-presets) (`emit`), [`tools`](../packages/core/tools) (`emit`) | [`tool-subagent`](../packages/subagent/tool-subagent) | | `tools/execute` | `waterfall` | [`packages/core/tools/src/index.ts:157`](../packages/core/tools/src/index.ts) | [`tools`](../packages/core/tools) (`waterfall`) | `computer-use-cua-driver-native`, [`session-checkpoint-policy`](../packages/session/session-checkpoint-policy), `timeout-policy` | | `tools/post-execute` | `waterfall` | [`packages/core/tools/src/index.ts:169`](../packages/core/tools/src/index.ts) | [`tools`](../packages/core/tools) (`waterfall`) | [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`repeat-tool-reminder`](../packages/guard/repeat-tool-reminder), [`spill-policy`](../packages/spill/spill-policy), [`tool-fs-search`](../packages/fs/tool-fs-search) | -| `tools/pre-execute` | `waterfall` | [`packages/core/tools/src/index.ts:146`](../packages/core/tools/src/index.ts) | [`tools`](../packages/core/tools) (`waterfall`) | `auto-review`, [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`tool-jobs`](../packages/jobs/tool-jobs), [`workspace-changes`](../packages/fs/workspace-changes) | +| `tools/pre-execute` | `waterfall` | [`packages/core/tools/src/index.ts:146`](../packages/core/tools/src/index.ts) | [`tools`](../packages/core/tools) (`waterfall`) | `auto-review`, [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`tool-jobs`](../packages/jobs/tool-jobs), [`workspace-changes`](../packages/deliverables/workspace-changes) | | `tools/ptc-dispatch-log` | `waterfall` | [`packages/core/tools/src/index.ts:183`](../packages/core/tools/src/index.ts) | [`tools`](../packages/core/tools) (`waterfall`) | [`spill-policy`](../packages/spill/spill-policy) | -| `tools/result` | `emit` | [`packages/core/tools/src/index.ts:191`](../packages/core/tools/src/index.ts) | [`tools`](../packages/core/tools) (`events.dispatch`) | [`agent-instructions`](../packages/context/agent-instructions), [`subagent-in-process-driver`](../packages/subagent/subagent-in-process-driver), [`tool-present`](../packages/fs/tool-present) | +| `tools/result` | `emit` | [`packages/core/tools/src/index.ts:191`](../packages/core/tools/src/index.ts) | [`tools`](../packages/core/tools) (`events.dispatch`) | [`agent-instructions`](../packages/context/agent-instructions), [`subagent-in-process-driver`](../packages/subagent/subagent-in-process-driver), [`tool-present`](../packages/deliverables/tool-present) | | `user-questions/request` | `waterfall` | [`packages/interaction/user-questions/src/types.ts:85`](../packages/interaction/user-questions/src/types.ts) | [`user-questions`](../packages/interaction/user-questions) (`waterfall`) | `remotes` | | `webserver/index-inject` | `emit` | [`packages/host/webserver/src/index.ts:34`](../packages/host/webserver/src/index.ts) | `webserver` (`emit`) | `connection`, `inspector`, `modules` | | `workflow/agent-end` | `emit` | [`packages/workflow/workflow/src/index.ts:79`](../packages/workflow/workflow/src/index.ts) | [`workflow`](../packages/workflow/workflow) (`events.dispatch`) | [`tool-workflow`](../packages/workflow/tool-workflow), [`workflow`](../packages/workflow/workflow) | diff --git a/docs/module-graph.i18n.yaml b/docs/module-graph.i18n.yaml index ded1d103c7..eeed49362f 100644 --- a/docs/module-graph.i18n.yaml +++ b/docs/module-graph.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write docs/module-graph.md -module-graph.md: fb176ccc7a62462b666f9d223a981da88423628c -module-graph.zh.md: d183ecf40c68e397e44c8eb39cc52392b976e769 +module-graph.md: b8f6ecef1389a8b4393e78d1429a5ab823db8d6d +module-graph.zh.md: 471277027416588b9fd5794a71ddb40cd49f4799 diff --git a/docs/module-graph.md b/docs/module-graph.md index fb176ccc7a..b8f6ecef13 100644 --- a/docs/module-graph.md +++ b/docs/module-graph.md @@ -56,9 +56,7 @@ flowchart TD pkg_fs_sandbox["fs-sandbox"] pkg_tool_fs["tool-fs"] pkg_tool_fs_search["tool-fs-search"] - pkg_tool_present["tool-present"] pkg_tool_str_replace_editor["tool-str-replace-editor"] - pkg_workspace_changes["workspace-changes"] end subgraph group_skill["packages/skill"] pkg_skill["skill"] @@ -212,6 +210,10 @@ flowchart TD pkg_credentials["credentials"] pkg_credentials_local["credentials-local"] end + subgraph group_deliverables["packages/deliverables"] + pkg_tool_present["tool-present"] + pkg_workspace_changes["workspace-changes"] + end subgraph group_experimental["packages/experimental"] pkg_experimental_agent_team["experimental-agent-team"] pkg_experimental_agent_team_profile["experimental-agent-team-profile"] @@ -744,21 +746,10 @@ flowchart TD pkg_tool_fs_search --> pkg_system_prompt pkg_tool_fs_search --> pkg_timeout pkg_tool_fs_search --> pkg_tools - pkg_tool_present --> pkg_agent - pkg_tool_present --> pkg_fs - pkg_tool_present --> pkg_llm - pkg_tool_present --> pkg_session - pkg_tool_present --> pkg_session_projection - pkg_tool_present --> pkg_tools pkg_tool_str_replace_editor --> pkg_fs pkg_tool_str_replace_editor --> pkg_sandbox pkg_tool_str_replace_editor --> pkg_sandbox_policy pkg_tool_str_replace_editor --> pkg_tools - pkg_workspace_changes --> pkg_agent - pkg_workspace_changes --> pkg_home_paths - pkg_workspace_changes --> pkg_session - pkg_workspace_changes --> pkg_subprocess - pkg_workspace_changes --> pkg_tools pkg_tool_skill --> pkg_agent pkg_tool_skill --> pkg_llm pkg_tool_skill --> pkg_skill @@ -809,6 +800,17 @@ flowchart TD pkg_file_reference_local --> pkg_file_reference pkg_file_reference_local --> pkg_system_prompt pkg_file_reference_local --> pkg_tools + pkg_tool_present --> pkg_agent + pkg_tool_present --> pkg_fs + pkg_tool_present --> pkg_llm + pkg_tool_present --> pkg_session + pkg_tool_present --> pkg_session_projection + pkg_tool_present --> pkg_tools + pkg_workspace_changes --> pkg_agent + pkg_workspace_changes --> pkg_home_paths + pkg_workspace_changes --> pkg_session + pkg_workspace_changes --> pkg_subprocess + pkg_workspace_changes --> pkg_tools pkg_experimental_computer_use_cua_driver_native --> pkg_computer_use pkg_experimental_computer_use_cua_driver_native --> pkg_system_prompt pkg_experimental_computer_use_cua_driver_native --> pkg_tools @@ -1449,9 +1451,7 @@ flowchart TD | [`tool-goal`](../packages/goal/tool-goal) | `goal` | [`agent`](../packages/core/agent), [`goal`](../packages/goal/goal), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools) | | [`tool-fs`](../packages/fs/tool-fs) | `fs` | [`attachment`](../packages/attachment/attachment), [`fs`](../packages/fs/fs), [`llm`](../packages/llm/llm), [`sandbox`](../packages/sandbox/sandbox), [`sandbox-policy`](../packages/sandbox/sandbox-policy), [`session`](../packages/core/session), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools), [`user-approval`](../packages/interaction/user-approval) | | [`tool-fs-search`](../packages/fs/tool-fs-search) | `fs` | [`llm`](../packages/llm/llm), [`output-retention`](../packages/util/output-retention), [`session`](../packages/core/session), [`spill`](../packages/spill/spill), [`subprocess`](../packages/subprocess/subprocess), [`system-prompt`](../packages/core/system-prompt), [`timeout`](../packages/util/timeout), [`tools`](../packages/core/tools) | -| [`tool-present`](../packages/fs/tool-present) | `fs` | [`agent`](../packages/core/agent), [`fs`](../packages/fs/fs), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`tools`](../packages/core/tools) | | [`tool-str-replace-editor`](../packages/fs/tool-str-replace-editor) | `fs` | [`fs`](../packages/fs/fs), [`sandbox`](../packages/sandbox/sandbox), [`sandbox-policy`](../packages/sandbox/sandbox-policy), [`tools`](../packages/core/tools) | -| [`workspace-changes`](../packages/fs/workspace-changes) | `fs` | [`agent`](../packages/core/agent), [`home-paths`](../packages/util/home-paths), [`session`](../packages/core/session), [`subprocess`](../packages/subprocess/subprocess), [`tools`](../packages/core/tools) | | [`tool-skill`](../packages/skill/tool-skill) | `skill` | [`agent`](../packages/core/agent), [`llm`](../packages/llm/llm), [`skill`](../packages/skill/skill), [`tools`](../packages/core/tools) | | [`tool-web`](../packages/web/tool-web) | `web` | [`llm`](../packages/llm/llm), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools), [`web`](../packages/web/web) | | [`spill-policy`](../packages/spill/spill-policy) | `spill` | [`llm`](../packages/llm/llm), [`output-retention`](../packages/util/output-retention), [`session`](../packages/core/session), [`spill`](../packages/spill/spill), [`tools`](../packages/core/tools) | @@ -1462,6 +1462,8 @@ flowchart TD | [`compaction-image-offload`](../packages/compaction/compaction-image-offload) | `compaction` | [`agent`](../packages/core/agent), [`compaction`](../packages/compaction/compaction), [`llm`](../packages/llm/llm), [`session`](../packages/core/session) | | [`agent-instructions`](../packages/context/agent-instructions) | `context` | [`agent`](../packages/core/agent), [`fs`](../packages/fs/fs), [`home-paths`](../packages/util/home-paths), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`tools`](../packages/core/tools) | | [`file-reference-local`](../packages/context/file-reference-local) | `context` | [`agent`](../packages/core/agent), [`file-reference`](../packages/context/file-reference), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools) | +| [`tool-present`](../packages/deliverables/tool-present) | `deliverables` | [`agent`](../packages/core/agent), [`fs`](../packages/fs/fs), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`tools`](../packages/core/tools) | +| [`workspace-changes`](../packages/deliverables/workspace-changes) | `deliverables` | [`agent`](../packages/core/agent), [`home-paths`](../packages/util/home-paths), [`session`](../packages/core/session), [`subprocess`](../packages/subprocess/subprocess), [`tools`](../packages/core/tools) | | [`experimental-computer-use-cua-driver-native`](../packages/experimental/computer-use-cua-driver-native) | `experimental` | [`computer-use`](../packages/computer-use/computer-use), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools) | | [`cordis-host-runner`](../packages/extensions/cordis-host-runner) | `extensions` | [`agent`](../packages/core/agent), [`brand`](../packages/util/brand), [`llm`](../packages/llm/llm), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`tools`](../packages/core/tools), [`typert-protocol`](../packages/typert/protocol) | | [`message-feedback`](../packages/feedback/message-feedback) | `feedback` | [`brand`](../packages/util/brand), [`command-feedback`](../packages/feedback/command-feedback), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-persistence`](../packages/session/session-persistence), [`typert-protocol`](../packages/typert/protocol) | diff --git a/docs/module-graph.zh.md b/docs/module-graph.zh.md index d183ecf40c..4712770274 100644 --- a/docs/module-graph.zh.md +++ b/docs/module-graph.zh.md @@ -58,9 +58,7 @@ flowchart TD pkg_fs_sandbox["fs-sandbox"] pkg_tool_fs["tool-fs"] pkg_tool_fs_search["tool-fs-search"] - pkg_tool_present["tool-present"] pkg_tool_str_replace_editor["tool-str-replace-editor"] - pkg_workspace_changes["workspace-changes"] end subgraph group_skill["packages/skill"] pkg_skill["skill"] @@ -214,6 +212,10 @@ flowchart TD pkg_credentials["credentials"] pkg_credentials_local["credentials-local"] end + subgraph group_deliverables["packages/deliverables"] + pkg_tool_present["tool-present"] + pkg_workspace_changes["workspace-changes"] + end subgraph group_experimental["packages/experimental"] pkg_experimental_agent_team["experimental-agent-team"] pkg_experimental_agent_team_profile["experimental-agent-team-profile"] @@ -746,21 +748,10 @@ flowchart TD pkg_tool_fs_search --> pkg_system_prompt pkg_tool_fs_search --> pkg_timeout pkg_tool_fs_search --> pkg_tools - pkg_tool_present --> pkg_agent - pkg_tool_present --> pkg_fs - pkg_tool_present --> pkg_llm - pkg_tool_present --> pkg_session - pkg_tool_present --> pkg_session_projection - pkg_tool_present --> pkg_tools pkg_tool_str_replace_editor --> pkg_fs pkg_tool_str_replace_editor --> pkg_sandbox pkg_tool_str_replace_editor --> pkg_sandbox_policy pkg_tool_str_replace_editor --> pkg_tools - pkg_workspace_changes --> pkg_agent - pkg_workspace_changes --> pkg_home_paths - pkg_workspace_changes --> pkg_session - pkg_workspace_changes --> pkg_subprocess - pkg_workspace_changes --> pkg_tools pkg_tool_skill --> pkg_agent pkg_tool_skill --> pkg_llm pkg_tool_skill --> pkg_skill @@ -811,6 +802,17 @@ flowchart TD pkg_file_reference_local --> pkg_file_reference pkg_file_reference_local --> pkg_system_prompt pkg_file_reference_local --> pkg_tools + pkg_tool_present --> pkg_agent + pkg_tool_present --> pkg_fs + pkg_tool_present --> pkg_llm + pkg_tool_present --> pkg_session + pkg_tool_present --> pkg_session_projection + pkg_tool_present --> pkg_tools + pkg_workspace_changes --> pkg_agent + pkg_workspace_changes --> pkg_home_paths + pkg_workspace_changes --> pkg_session + pkg_workspace_changes --> pkg_subprocess + pkg_workspace_changes --> pkg_tools pkg_experimental_computer_use_cua_driver_native --> pkg_computer_use pkg_experimental_computer_use_cua_driver_native --> pkg_system_prompt pkg_experimental_computer_use_cua_driver_native --> pkg_tools @@ -1451,9 +1453,7 @@ flowchart TD | [`tool-goal`](../packages/goal/tool-goal) | `goal` | [`agent`](../packages/core/agent), [`goal`](../packages/goal/goal), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools) | | [`tool-fs`](../packages/fs/tool-fs) | `fs` | [`attachment`](../packages/attachment/attachment), [`fs`](../packages/fs/fs), [`llm`](../packages/llm/llm), [`sandbox`](../packages/sandbox/sandbox), [`sandbox-policy`](../packages/sandbox/sandbox-policy), [`session`](../packages/core/session), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools), [`user-approval`](../packages/interaction/user-approval) | | [`tool-fs-search`](../packages/fs/tool-fs-search) | `fs` | [`llm`](../packages/llm/llm), [`output-retention`](../packages/util/output-retention), [`session`](../packages/core/session), [`spill`](../packages/spill/spill), [`subprocess`](../packages/subprocess/subprocess), [`system-prompt`](../packages/core/system-prompt), [`timeout`](../packages/util/timeout), [`tools`](../packages/core/tools) | -| [`tool-present`](../packages/fs/tool-present) | `fs` | [`agent`](../packages/core/agent), [`fs`](../packages/fs/fs), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`tools`](../packages/core/tools) | | [`tool-str-replace-editor`](../packages/fs/tool-str-replace-editor) | `fs` | [`fs`](../packages/fs/fs), [`sandbox`](../packages/sandbox/sandbox), [`sandbox-policy`](../packages/sandbox/sandbox-policy), [`tools`](../packages/core/tools) | -| [`workspace-changes`](../packages/fs/workspace-changes) | `fs` | [`agent`](../packages/core/agent), [`home-paths`](../packages/util/home-paths), [`session`](../packages/core/session), [`subprocess`](../packages/subprocess/subprocess), [`tools`](../packages/core/tools) | | [`tool-skill`](../packages/skill/tool-skill) | `skill` | [`agent`](../packages/core/agent), [`llm`](../packages/llm/llm), [`skill`](../packages/skill/skill), [`tools`](../packages/core/tools) | | [`tool-web`](../packages/web/tool-web) | `web` | [`llm`](../packages/llm/llm), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools), [`web`](../packages/web/web) | | [`spill-policy`](../packages/spill/spill-policy) | `spill` | [`llm`](../packages/llm/llm), [`output-retention`](../packages/util/output-retention), [`session`](../packages/core/session), [`spill`](../packages/spill/spill), [`tools`](../packages/core/tools) | @@ -1464,6 +1464,8 @@ flowchart TD | [`compaction-image-offload`](../packages/compaction/compaction-image-offload) | `compaction` | [`agent`](../packages/core/agent), [`compaction`](../packages/compaction/compaction), [`llm`](../packages/llm/llm), [`session`](../packages/core/session) | | [`agent-instructions`](../packages/context/agent-instructions) | `context` | [`agent`](../packages/core/agent), [`fs`](../packages/fs/fs), [`home-paths`](../packages/util/home-paths), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`tools`](../packages/core/tools) | | [`file-reference-local`](../packages/context/file-reference-local) | `context` | [`agent`](../packages/core/agent), [`file-reference`](../packages/context/file-reference), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools) | +| [`tool-present`](../packages/deliverables/tool-present) | `deliverables` | [`agent`](../packages/core/agent), [`fs`](../packages/fs/fs), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`tools`](../packages/core/tools) | +| [`workspace-changes`](../packages/deliverables/workspace-changes) | `deliverables` | [`agent`](../packages/core/agent), [`home-paths`](../packages/util/home-paths), [`session`](../packages/core/session), [`subprocess`](../packages/subprocess/subprocess), [`tools`](../packages/core/tools) | | [`experimental-computer-use-cua-driver-native`](../packages/experimental/computer-use-cua-driver-native) | `experimental` | [`computer-use`](../packages/computer-use/computer-use), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools) | | [`cordis-host-runner`](../packages/extensions/cordis-host-runner) | `extensions` | [`agent`](../packages/core/agent), [`brand`](../packages/util/brand), [`llm`](../packages/llm/llm), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`tools`](../packages/core/tools), [`typert-protocol`](../packages/typert/protocol) | | [`message-feedback`](../packages/feedback/message-feedback) | `feedback` | [`brand`](../packages/util/brand), [`command-feedback`](../packages/feedback/command-feedback), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-persistence`](../packages/session/session-persistence), [`typert-protocol`](../packages/typert/protocol) | diff --git a/docs/persistence-catalog.i18n.yaml b/docs/persistence-catalog.i18n.yaml index a18b205184..9a3accc299 100644 --- a/docs/persistence-catalog.i18n.yaml +++ b/docs/persistence-catalog.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write docs/persistence-catalog.md -persistence-catalog.md: 1b4cc8e20ae5e3e383b9f4984ee597f401d12c7e -persistence-catalog.zh.md: a593177cbaba0f5e8a0317ed5757e8511ddb25a8 +persistence-catalog.md: ee210f58bdf633dad75894131e649eff45158453 +persistence-catalog.zh.md: 10fd5874529228a87baed64f4bfd5ac8743f5e62 diff --git a/docs/persistence-catalog.md b/docs/persistence-catalog.md index 1b4cc8e20a..ee210f58bd 100644 --- a/docs/persistence-catalog.md +++ b/docs/persistence-catalog.md @@ -479,7 +479,7 @@ Source: [`packages/compaction/compaction/src/types.ts:34`](../packages/compactio Types: [ToolCallId](subsystems/core.md) -Source: [`packages/fs/tool-present/src/types.ts:15`](../packages/fs/tool-present/src/types.ts) +Source: [`packages/deliverables/tool-present/src/types.ts:15`](../packages/deliverables/tool-present/src/types.ts) ### `feedback/*` @@ -1252,7 +1252,7 @@ Source: [`packages/web/web-search-deepseek/src/provider.ts:82`](../packages/web/ 'workspace/changes': WorkspaceChangesData ``` -Source: [`packages/fs/workspace-changes/src/types.ts:36`](../packages/fs/workspace-changes/src/types.ts) +Source: [`packages/deliverables/workspace-changes/src/types.ts:36`](../packages/deliverables/workspace-changes/src/types.ts) ## Resolved persistence types @@ -2641,7 +2641,7 @@ SHA-256: `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176` SHA-256: `1528539c63db8b23506f0209a99ce77d8ad138adfbfcee3d4769b7382d93756c` -Sources: [`packages/fs/tool-present/src/types.ts:15`](../packages/fs/tool-present/src/types.ts) +Sources: [`packages/deliverables/tool-present/src/types.ts:15`](../packages/deliverables/tool-present/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -2655,7 +2655,7 @@ Sources: [`packages/fs/tool-present/src/types.ts:15`](../packages/fs/tool-presen SHA-256: `1d9cb3caa96100b18b1911fa3ff8c751ef6992971a03c5f4d9aefc1a0004a345` -Array of [`packages/fs/tool-present/src/types.ts#PresentedFile`](#persistence-type-packagesfstool-presentsrctypestspresentedfile). +Array of [`packages/deliverables/tool-present/src/types.ts#PresentedFile`](#persistence-type-packagesdeliverablestool-presentsrctypestspresentedfile). @@ -4045,7 +4045,7 @@ SHA-256: `0a176529351301e438fc4d94ea0c80f0f105e33fd85a256d76178b0a6dda3061` | Property | Presence | Type | |---|---|---| -| `data` | required | [`packages/fs/workspace-changes/src/types.ts#WorkspaceChangesData`](#persistence-type-packagesfsworkspace-changessrctypestsworkspacechangesdata) | +| `data` | required | [`packages/deliverables/workspace-changes/src/types.ts#WorkspaceChangesData`](#persistence-type-packagesdeliverablesworkspace-changessrctypestsworkspacechangesdata) | | `ignorable` | optional | `true` | | `seq` | required | `number` | | `time` | required | `number` | @@ -4057,7 +4057,7 @@ SHA-256: `0a176529351301e438fc4d94ea0c80f0f105e33fd85a256d76178b0a6dda3061` SHA-256: `39c5a9c9f4688d412c567d287ae6577a3f38a73c3f8ba4deffc563d9ec93b927` -Array of [`packages/fs/workspace-changes/src/types.ts#WorkspaceChangedFile`](#persistence-type-packagesfsworkspace-changessrctypestsworkspacechangedfile). +Array of [`packages/deliverables/workspace-changes/src/types.ts#WorkspaceChangedFile`](#persistence-type-packagesdeliverablesworkspace-changessrctypestsworkspacechangedfile). @@ -4065,7 +4065,7 @@ Array of [`packages/fs/workspace-changes/src/types.ts#WorkspaceChangedFile`](#pe SHA-256: `f53ef94c56c9b1b890a1eba459ca22023d91f5f50bc829289181961ee052e4f7` -Sources: [`packages/fs/workspace-changes/src/types.ts:30`](../packages/fs/workspace-changes/src/types.ts) +Sources: [`packages/deliverables/workspace-changes/src/types.ts:30`](../packages/deliverables/workspace-changes/src/types.ts) | Property | Presence | Type | |---|---|---| @@ -4719,6 +4719,50 @@ Sources: [`packages/core/tools/src/types.ts:11`](../packages/core/tools/src/type | `rootCallId` | required | `string` | | `subCallId` | required | `string` | + + +### `packages/deliverables/tool-present/src/types.ts#PresentedFile` + +SHA-256: `b8fc636a2121df9d8423c242e03c9d23b7ab7c6fdce00e45746932c60b730f97` + +Sources: [`packages/deliverables/tool-present/src/types.ts:5`](../packages/deliverables/tool-present/src/types.ts) + +| Property | Presence | Type | +|---|---|---| +| `description` | optional | `string` | +| `path` | required | `string` | + + + +### `packages/deliverables/workspace-changes/src/types.ts#WorkspaceChangedFile` + +SHA-256: `14b37f44c06d8820b6601845f2ad7c995522044c58a6e87da04e29718f4835a1` + +Sources: [`packages/deliverables/workspace-changes/src/types.ts:4`](../packages/deliverables/workspace-changes/src/types.ts) + +| Property | Presence | Type | +|---|---|---| +| `added` | required | `number` | +| `binary` | optional | `true` | +| `deleted` | required | `number` | +| `display` | required | `string` | +| `path` | required | `string` | + + + +### `packages/deliverables/workspace-changes/src/types.ts#WorkspaceChangesData` + +SHA-256: `69ef2dbc5ed9134fd8199bf6da90da4bd78de61e9336ef008d1770101aa40ae2` + +Sources: [`packages/deliverables/workspace-changes/src/types.ts:22`](../packages/deliverables/workspace-changes/src/types.ts) + +| Property | Presence | Type | +|---|---|---| +| `files` | required | [`event:workspace/changes.data.files`](#persistence-type-eventworkspacechangesdatafiles) | +| `snapshot` | required | [`event:workspace/changes.data.snapshot`](#persistence-type-eventworkspacechangesdatasnapshot) | +| `total` | required | `number` | +| `turn` | required | `number` | + ### `packages/experimental/agent-team/src/types.ts#TeamMemberPhase` @@ -4887,50 +4931,6 @@ One of: - `"negative"` - `"positive"` - - -### `packages/fs/tool-present/src/types.ts#PresentedFile` - -SHA-256: `b8fc636a2121df9d8423c242e03c9d23b7ab7c6fdce00e45746932c60b730f97` - -Sources: [`packages/fs/tool-present/src/types.ts:5`](../packages/fs/tool-present/src/types.ts) - -| Property | Presence | Type | -|---|---|---| -| `description` | optional | `string` | -| `path` | required | `string` | - - - -### `packages/fs/workspace-changes/src/types.ts#WorkspaceChangedFile` - -SHA-256: `14b37f44c06d8820b6601845f2ad7c995522044c58a6e87da04e29718f4835a1` - -Sources: [`packages/fs/workspace-changes/src/types.ts:4`](../packages/fs/workspace-changes/src/types.ts) - -| Property | Presence | Type | -|---|---|---| -| `added` | required | `number` | -| `binary` | optional | `true` | -| `deleted` | required | `number` | -| `display` | required | `string` | -| `path` | required | `string` | - - - -### `packages/fs/workspace-changes/src/types.ts#WorkspaceChangesData` - -SHA-256: `69ef2dbc5ed9134fd8199bf6da90da4bd78de61e9336ef008d1770101aa40ae2` - -Sources: [`packages/fs/workspace-changes/src/types.ts:22`](../packages/fs/workspace-changes/src/types.ts) - -| Property | Presence | Type | -|---|---|---| -| `files` | required | [`event:workspace/changes.data.files`](#persistence-type-eventworkspacechangesdatafiles) | -| `snapshot` | required | [`event:workspace/changes.data.snapshot`](#persistence-type-eventworkspacechangesdatasnapshot) | -| `total` | required | `number` | -| `turn` | required | `number` | - ### `packages/goal/goal/src/domain.ts#GoalChangeMeta` diff --git a/docs/persistence-catalog.zh.md b/docs/persistence-catalog.zh.md index a593177cba..10fd587452 100644 --- a/docs/persistence-catalog.zh.md +++ b/docs/persistence-catalog.zh.md @@ -481,7 +481,7 @@ export type SessionEvent = { 类型:[ToolCallId](subsystems/core.zh.md) -来源:[`packages/fs/tool-present/src/types.ts:15`](../packages/fs/tool-present/src/types.ts) +来源:[`packages/deliverables/tool-present/src/types.ts:15`](../packages/deliverables/tool-present/src/types.ts) ### `feedback/*` @@ -1254,7 +1254,7 @@ export type SessionEvent = { 'workspace/changes': WorkspaceChangesData ``` -来源:[`packages/fs/workspace-changes/src/types.ts:36`](../packages/fs/workspace-changes/src/types.ts) +来源:[`packages/deliverables/workspace-changes/src/types.ts:36`](../packages/deliverables/workspace-changes/src/types.ts) ## 已解析的持久化类型 @@ -2643,7 +2643,7 @@ SHA-256: `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176` SHA-256: `1528539c63db8b23506f0209a99ce77d8ad138adfbfcee3d4769b7382d93756c` -来源:[`packages/fs/tool-present/src/types.ts:15`](../packages/fs/tool-present/src/types.ts) +来源:[`packages/deliverables/tool-present/src/types.ts:15`](../packages/deliverables/tool-present/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -2657,7 +2657,7 @@ SHA-256: `1528539c63db8b23506f0209a99ce77d8ad138adfbfcee3d4769b7382d93756c` SHA-256: `1d9cb3caa96100b18b1911fa3ff8c751ef6992971a03c5f4d9aefc1a0004a345` -[`packages/fs/tool-present/src/types.ts#PresentedFile`](#persistence-type-packagesfstool-presentsrctypestspresentedfile) 的数组。 +[`packages/deliverables/tool-present/src/types.ts#PresentedFile`](#persistence-type-packagesdeliverablestool-presentsrctypestspresentedfile) 的数组。 @@ -4047,7 +4047,7 @@ SHA-256: `0a176529351301e438fc4d94ea0c80f0f105e33fd85a256d76178b0a6dda3061` | 属性 | 存在性 | 类型 | |---|---|---| -| `data` | 必需 | [`packages/fs/workspace-changes/src/types.ts#WorkspaceChangesData`](#persistence-type-packagesfsworkspace-changessrctypestsworkspacechangesdata) | +| `data` | 必需 | [`packages/deliverables/workspace-changes/src/types.ts#WorkspaceChangesData`](#persistence-type-packagesdeliverablesworkspace-changessrctypestsworkspacechangesdata) | | `ignorable` | 可选 | `true` | | `seq` | 必需 | `number` | | `time` | 必需 | `number` | @@ -4059,7 +4059,7 @@ SHA-256: `0a176529351301e438fc4d94ea0c80f0f105e33fd85a256d76178b0a6dda3061` SHA-256: `39c5a9c9f4688d412c567d287ae6577a3f38a73c3f8ba4deffc563d9ec93b927` -[`packages/fs/workspace-changes/src/types.ts#WorkspaceChangedFile`](#persistence-type-packagesfsworkspace-changessrctypestsworkspacechangedfile) 的数组。 +[`packages/deliverables/workspace-changes/src/types.ts#WorkspaceChangedFile`](#persistence-type-packagesdeliverablesworkspace-changessrctypestsworkspacechangedfile) 的数组。 @@ -4067,7 +4067,7 @@ SHA-256: `39c5a9c9f4688d412c567d287ae6577a3f38a73c3f8ba4deffc563d9ec93b927` SHA-256: `f53ef94c56c9b1b890a1eba459ca22023d91f5f50bc829289181961ee052e4f7` -来源:[`packages/fs/workspace-changes/src/types.ts:30`](../packages/fs/workspace-changes/src/types.ts) +来源:[`packages/deliverables/workspace-changes/src/types.ts:30`](../packages/deliverables/workspace-changes/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| @@ -4721,6 +4721,50 @@ SHA-256: `2fe5026daf14bd4ff2b7bfb7cf9791c302d9cbba06802178b6dfec00b892698f` | `rootCallId` | 必需 | `string` | | `subCallId` | 必需 | `string` | + + +### `packages/deliverables/tool-present/src/types.ts#PresentedFile` + +SHA-256: `b8fc636a2121df9d8423c242e03c9d23b7ab7c6fdce00e45746932c60b730f97` + +来源:[`packages/deliverables/tool-present/src/types.ts:5`](../packages/deliverables/tool-present/src/types.ts) + +| 属性 | 存在性 | 类型 | +|---|---|---| +| `description` | 可选 | `string` | +| `path` | 必需 | `string` | + + + +### `packages/deliverables/workspace-changes/src/types.ts#WorkspaceChangedFile` + +SHA-256: `14b37f44c06d8820b6601845f2ad7c995522044c58a6e87da04e29718f4835a1` + +来源:[`packages/deliverables/workspace-changes/src/types.ts:4`](../packages/deliverables/workspace-changes/src/types.ts) + +| 属性 | 存在性 | 类型 | +|---|---|---| +| `added` | 必需 | `number` | +| `binary` | 可选 | `true` | +| `deleted` | 必需 | `number` | +| `display` | 必需 | `string` | +| `path` | 必需 | `string` | + + + +### `packages/deliverables/workspace-changes/src/types.ts#WorkspaceChangesData` + +SHA-256: `69ef2dbc5ed9134fd8199bf6da90da4bd78de61e9336ef008d1770101aa40ae2` + +来源:[`packages/deliverables/workspace-changes/src/types.ts:22`](../packages/deliverables/workspace-changes/src/types.ts) + +| 属性 | 存在性 | 类型 | +|---|---|---| +| `files` | 必需 | [`event:workspace/changes.data.files`](#persistence-type-eventworkspacechangesdatafiles) | +| `snapshot` | 必需 | [`event:workspace/changes.data.snapshot`](#persistence-type-eventworkspacechangesdatasnapshot) | +| `total` | 必需 | `number` | +| `turn` | 必需 | `number` | + ### `packages/experimental/agent-team/src/types.ts#TeamMemberPhase` @@ -4889,50 +4933,6 @@ SHA-256: `390eed1028aba02774f14408647acec10ec5516e97d4f15ecde2b9989d5a69f2` - `"negative"` - `"positive"` - - -### `packages/fs/tool-present/src/types.ts#PresentedFile` - -SHA-256: `b8fc636a2121df9d8423c242e03c9d23b7ab7c6fdce00e45746932c60b730f97` - -来源:[`packages/fs/tool-present/src/types.ts:5`](../packages/fs/tool-present/src/types.ts) - -| 属性 | 存在性 | 类型 | -|---|---|---| -| `description` | 可选 | `string` | -| `path` | 必需 | `string` | - - - -### `packages/fs/workspace-changes/src/types.ts#WorkspaceChangedFile` - -SHA-256: `14b37f44c06d8820b6601845f2ad7c995522044c58a6e87da04e29718f4835a1` - -来源:[`packages/fs/workspace-changes/src/types.ts:4`](../packages/fs/workspace-changes/src/types.ts) - -| 属性 | 存在性 | 类型 | -|---|---|---| -| `added` | 必需 | `number` | -| `binary` | 可选 | `true` | -| `deleted` | 必需 | `number` | -| `display` | 必需 | `string` | -| `path` | 必需 | `string` | - - - -### `packages/fs/workspace-changes/src/types.ts#WorkspaceChangesData` - -SHA-256: `69ef2dbc5ed9134fd8199bf6da90da4bd78de61e9336ef008d1770101aa40ae2` - -来源:[`packages/fs/workspace-changes/src/types.ts:22`](../packages/fs/workspace-changes/src/types.ts) - -| 属性 | 存在性 | 类型 | -|---|---|---| -| `files` | 必需 | [`event:workspace/changes.data.files`](#persistence-type-eventworkspacechangesdatafiles) | -| `snapshot` | 必需 | [`event:workspace/changes.data.snapshot`](#persistence-type-eventworkspacechangesdatasnapshot) | -| `total` | 必需 | `number` | -| `turn` | 必需 | `number` | - ### `packages/goal/goal/src/domain.ts#GoalChangeMeta` diff --git a/docs/persistence-changes/2026-09-14-workspace-changes-event.i18n.yaml b/docs/persistence-changes/2026-09-14-workspace-changes-event.i18n.yaml index afcf54b2c7..7d00679c75 100644 --- a/docs/persistence-changes/2026-09-14-workspace-changes-event.i18n.yaml +++ b/docs/persistence-changes/2026-09-14-workspace-changes-event.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write docs/persistence-changes/2026-09-14-workspace-changes-event.md -2026-09-14-workspace-changes-event.md: 43f3db2e613976c3217733bd2433434eaa08f54d -2026-09-14-workspace-changes-event.zh.md: ca9cb8a17bbecd3a324b5488e68c85919e9d79fe +2026-09-14-workspace-changes-event.md: e204be8e8b3dbad37bee2b9aa428b8cfa1664d74 +2026-09-14-workspace-changes-event.zh.md: 7f7b92a2e0e91e27944f0b858edfc5e8a3a2314e diff --git a/docs/persistence-changes/2026-09-14-workspace-changes-event.md b/docs/persistence-changes/2026-09-14-workspace-changes-event.md index 43f3db2e61..e204be8e8b 100644 --- a/docs/persistence-changes/2026-09-14-workspace-changes-event.md +++ b/docs/persistence-changes/2026-09-14-workspace-changes-event.md @@ -40,7 +40,7 @@ A new root in the same Session format version. Existing logs contain no such eve ## Verification -pnpm exec vitest run packages/fs/workspace-changes packages/client/ui-deliverables: 165 tests passed; snapshots/web/changed-files-turn replays the recorded event through the Web profile. +pnpm exec vitest run packages/deliverables/workspace-changes packages/client/ui-deliverables: 165 tests passed; snapshots/web/changed-files-turn replays the recorded event through the Web profile. ## Dev Note diff --git a/docs/persistence-changes/2026-09-14-workspace-changes-event.zh.md b/docs/persistence-changes/2026-09-14-workspace-changes-event.zh.md index ca9cb8a17b..7f7b92a2e0 100644 --- a/docs/persistence-changes/2026-09-14-workspace-changes-event.zh.md +++ b/docs/persistence-changes/2026-09-14-workspace-changes-event.zh.md @@ -40,7 +40,7 @@ changes: ## 验证 -pnpm exec vitest run packages/fs/workspace-changes packages/client/ui-deliverables:165 个测试通过;snapshots/web/changed-files-turn 通过 Web profile 回放了记录的事件。 +pnpm exec vitest run packages/deliverables/workspace-changes packages/client/ui-deliverables:165 个测试通过;snapshots/web/changed-files-turn 通过 Web profile 回放了记录的事件。 ## 开发备注 diff --git a/docs/persistence-schema.json b/docs/persistence-schema.json index 909109f9a4..3c7d3e4bb4 100644 --- a/docs/persistence-schema.json +++ b/docs/persistence-schema.json @@ -18096,10 +18096,10 @@ ] }, "names": [ - "packages/fs/workspace-changes/src/types.ts#WorkspaceChangedFile" + "packages/deliverables/workspace-changes/src/types.ts#WorkspaceChangedFile" ], "sources": [ - "packages/fs/workspace-changes/src/types.ts:4" + "packages/deliverables/workspace-changes/src/types.ts:4" ] }, { @@ -18262,7 +18262,7 @@ "event:deliverables/presented.data" ], "sources": [ - "packages/fs/tool-present/src/types.ts:15" + "packages/deliverables/tool-present/src/types.ts:15" ] }, { @@ -38426,10 +38426,10 @@ ] }, "names": [ - "packages/fs/workspace-changes/src/types.ts#WorkspaceChangesData" + "packages/deliverables/workspace-changes/src/types.ts#WorkspaceChangesData" ], "sources": [ - "packages/fs/workspace-changes/src/types.ts:22" + "packages/deliverables/workspace-changes/src/types.ts:22" ] }, { @@ -51497,10 +51497,10 @@ ] }, "names": [ - "packages/fs/tool-present/src/types.ts#PresentedFile" + "packages/deliverables/tool-present/src/types.ts#PresentedFile" ], "sources": [ - "packages/fs/tool-present/src/types.ts:5" + "packages/deliverables/tool-present/src/types.ts:5" ] }, { @@ -60348,7 +60348,7 @@ "event:workspace/changes.data.snapshot" ], "sources": [ - "packages/fs/workspace-changes/src/types.ts:30" + "packages/deliverables/workspace-changes/src/types.ts:30" ] }, { diff --git a/docs/tool-catalog.i18n.yaml b/docs/tool-catalog.i18n.yaml index 8a5391dc12..1707a5809e 100644 --- a/docs/tool-catalog.i18n.yaml +++ b/docs/tool-catalog.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write docs/tool-catalog.md -tool-catalog.md: 59d699fd27c47d0e518be3d1d4333507e7ed26aa -tool-catalog.zh.md: 110122024227841eda7d7969004cae8b6796251f +tool-catalog.md: acd0e6cc35be25e7d75f02cd4b895f905ff3beb2 +tool-catalog.zh.md: 8f8198c5306954cd17c3677dc76e771f92f2887f diff --git a/docs/tool-catalog.md b/docs/tool-catalog.md index 59d699fd27..acd0e6cc35 100644 --- a/docs/tool-catalog.md +++ b/docs/tool-catalog.md @@ -355,7 +355,7 @@ Declare existing files accessible through the Session filesystem as final delive } ``` -Source: [`packages/fs/tool-present/src/index.ts`](../packages/fs/tool-present/src/index.ts) +Source: [`packages/deliverables/tool-present/src/index.ts`](../packages/deliverables/tool-present/src/index.ts) Deliveries belong to the calling Session; Web ui-deliverables supplies source-file opening and cards. diff --git a/docs/tool-catalog.zh.md b/docs/tool-catalog.zh.md index 1101220242..8f8198c530 100644 --- a/docs/tool-catalog.zh.md +++ b/docs/tool-catalog.zh.md @@ -359,7 +359,7 @@ bash 工具是 bash 执行器 seam 面向模型的消费方。使用 `run_in_bac } ``` -来源: [`packages/fs/tool-present/src/index.ts`](../packages/fs/tool-present/src/index.ts) +来源: [`packages/deliverables/tool-present/src/index.ts`](../packages/deliverables/tool-present/src/index.ts) 交付归调用方 Session 所有;Web ui-deliverables 提供源文件打开与卡片。 diff --git a/packages/README.i18n.yaml b/packages/README.i18n.yaml index 571f183852..6a7900b41e 100644 --- a/packages/README.i18n.yaml +++ b/packages/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write packages/README.md -README.md: 433911f1dceaa9acccd99d0082acde20f73b15c9 -README.zh.md: 96d37732b1e658b07955a60ab470bd6596b3079e +README.md: 82fe5f2085cf5475a11b225f3d5ec437b3cd1089 +README.zh.md: 82729f08f92947609e6923b97a24175b567de414 diff --git a/packages/README.md b/packages/README.md index 433911f1dc..82fe5f2085 100644 --- a/packages/README.md +++ b/packages/README.md @@ -43,6 +43,7 @@ Every package lives in exactly one group; new packages join existing groups, and | [`ptc-runtime/`](ptc-runtime/README.md) | PTC execution capability family: Service Definition + sandboxed Node provider + PTC mode Consumer | | [`computer-use/`](computer-use/README.md) | Exclusive named desktop-provider registration | | [`sandbox/`](sandbox/README.md) | Process-confinement seam; bwrap/Landlock/Seatbelt backends | +| [`deliverables/`](deliverables/README.md) | Turn deliverables: explicit file delivery and recorded workspace changes | | [`fs/`](fs/README.md) | Filesystem capability family: seam, local impl, model-facing file tools, discovery tools | | [`lsp/`](lsp/README.md) | LSP capability family: seam, generic stdio provider, and the `lsp` tool | | [`skill/`](skill/README.md) | Skill capability family: provider registry, local provider, model-facing catalog/loader | diff --git a/packages/README.zh.md b/packages/README.zh.md index 96d37732b1..82729f08f9 100644 --- a/packages/README.zh.md +++ b/packages/README.zh.md @@ -43,6 +43,7 @@ harness 由 `packages/` 下的 npm 包组装而成,按能力系列分组:会 | [`ptc-runtime/`](ptc-runtime/README.zh.md) | PTC 执行能力族:Service Definition + 沙箱 Node 提供方 + PTC mode Consumer | | [`computer-use/`](computer-use/README.zh.md) | 按名称独占注册桌面提供方 | | [`sandbox/`](sandbox/README.zh.md) | 进程限制 seam;bwrap、Landlock、Seatbelt 后端 | +| [`deliverables/`](deliverables/README.zh.md) | 轮次交付物:显式文件交付与记录的工作区改动 | | [`fs/`](fs/README.zh.md) | 文件系统能力系列:seam、本地实现、面向模型的文件工具、发现工具 | | [`lsp/`](lsp/README.zh.md) | LSP 能力系列:seam、通用 stdio 提供方和 `lsp` 工具 | | [`skill/`](skill/README.zh.md) | skill(技能)能力系列:提供方注册表、本地提供方、面向模型的目录/loader | diff --git a/packages/client/ui-deliverables/README.i18n.yaml b/packages/client/ui-deliverables/README.i18n.yaml index 7452c4aa99..1c244b570d 100644 --- a/packages/client/ui-deliverables/README.i18n.yaml +++ b/packages/client/ui-deliverables/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write packages/client/ui-deliverables/README.md -README.md: c0442288a3041847583053ebcff875ec7c0ec904 -README.zh.md: 70ad1dfffa48d6850e0e17bf10d83929d1e59c4f +README.md: 89f9e683d18928b449b6336fabf1909284f7e371 +README.zh.md: cbfc98a428e4037ec1c65523c6574b1e42af94da diff --git a/packages/client/ui-deliverables/README.md b/packages/client/ui-deliverables/README.md index c0442288a3..89f9e683d1 100644 --- a/packages/client/ui-deliverables/README.md +++ b/packages/client/ui-deliverables/README.md @@ -25,12 +25,12 @@ This package renders the changed-files card a finished turn ends with — the fi ## Use this package -Mount this plugin alongside `ui-conversation` and the Host [workspace-changes](../../fs/workspace-changes/README.md) plugin; a finished turn then ends with the changed-files card between the closing message's body and its action footer. Without a recorded summary — a workspace outside any git repository, no git on the Host, or the plugin composed out — the card is absent and only deliveries and prose links remain. +Mount this plugin alongside `ui-conversation` and the Host [workspace-changes](../../deliverables/workspace-changes/README.md) plugin; a finished turn then ends with the changed-files card between the closing message's body and its action footer. Without a recorded summary — a workspace outside any git repository, no git on the Host, or the plugin composed out — the card is absent and only deliveries and prose links remain. ### Explicit deliveries -The Web `standard`, `ptc`, and `cordis` presets expose `present` for final files accessible through the Session filesystem, including files created through Bash. Call it with `files: [{ path, description? }]` after creating the files. The [present tool](../../fs/tool-present/README.md) owns file-count limits and Session declarations. The closing turn shows one delivery as a full-width card and multiple deliveries in a two-column grid with 10px gaps. A list longer than four files starts collapsed and provides a control that reveals or hides the complete list. Each 60px-high card uses 8px vertical and 10px horizontal inset spacing, a 20px shared `FileTypeIcon` in a 40px frame, 13px filename text, 10px secondary text, and a 12px Open action. It shows the basename and description, or the file type when no description exists; a trailing parenthesized suffix in the description is omitted, and hovering the card replaces that line with the Sidebar-preview action. Clicking the card or the left side of its split Open control previews the file in the right Sidebar. The chevron opens the standard menu for the Host default application plus Show in Finder on macOS, Show in File Explorer on Windows and WSL, or Open containing folder through the default Linux file manager. Matching inline-code references preview the same source files in the right Sidebar; native opening requires an explicit card-menu action. Repeated declaration of a path selects its latest description before the closing reply. +The Web `standard`, `ptc`, and `cordis` presets expose `present` for final files accessible through the Session filesystem, including files created through Bash. Call it with `files: [{ path, description? }]` after creating the files. The [present tool](../../deliverables/tool-present/README.md) owns file-count limits and Session declarations. The closing turn shows one delivery as a full-width card and multiple deliveries in a two-column grid with 10px gaps. A list longer than four files starts collapsed and provides a control that reveals or hides the complete list. Each 60px-high card uses 8px vertical and 10px horizontal inset spacing, a 20px shared `FileTypeIcon` in a 40px frame, 13px filename text, 10px secondary text, and a 12px Open action. It shows the basename and description, or the file type when no description exists; a trailing parenthesized suffix in the description is omitted, and hovering the card replaces that line with the Sidebar-preview action. Clicking the card or the left side of its split Open control previews the file in the right Sidebar. The chevron opens the standard menu for the Host default application plus Show in Finder on macOS, Show in File Explorer on Windows and WSL, or Open containing folder through the default Linux file manager. Matching inline-code references preview the same source files in the right Sidebar; native opening requires an explicit card-menu action. Repeated declaration of a path selects its latest description before the closing reply. The `present` tool row shows running, delivered, failed, or interrupted status; expanding a settled row reveals its recorded result. The collapsible card grid retains every delivered file. Both menu actions share pending state and show progress, acknowledgement, or an action-specific retryable error. Desktop information is read when delivery cards appear and invalidated on connection replacement; responses from a replaced connection cannot publish metadata. Selecting a native menu action returns keyboard focus to the available Sidebar Open button. Pending actions close the menu until another explicit gesture. A missing desktop disables the Open menu; a failed desktop-information read offers Retry. It requires a desktop and a suitable default application on the serving Host; a remote browser does not open applications on its own device. @@ -63,7 +63,7 @@ Native opening uses an authenticated POST addressed by the viewed Session, event Read these pages when the deliverables surface is not enough. They move from the card to the Host recorder, the turn-tail hole, and the decisions behind the vocabulary. -- [workspace-changes](../../fs/workspace-changes/README.md) — the Host plugin that records the summary the card renders. +- [workspace-changes](../../deliverables/workspace-changes/README.md) — the Host plugin that records the summary the card renders. - [ui-conversation](../ui-conversation/README.md) — declares the `conversation.chat.turnTail` hole and renders the closing prose. - [Turn changed-files card](../../../.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.md) — the decision behind git-recorded summaries replacing the mutation-call row. - [Workspace file links](../../../.agents/notes/implemented/feature/2026-07-31-web-workspace-file-links.md) — the decision behind the earlier produced-files row; its Host open path is superseded by the [right Sidebar](../../../.agents/notes/implemented/feature/2026-09-04-right-sidebar-docking-infrastructure.md). @@ -83,7 +83,7 @@ One fixed paragraph instructs the model to name primary files from successful cr #### Token effect -One fixed prompt paragraph whenever this package is loaded. The [present tool](../../fs/tool-present/README.md#model-experience) owns the delivery schema and result text. +One fixed prompt paragraph whenever this package is loaded. The [present tool](../../deliverables/tool-present/README.md#model-experience) owns the delivery schema and result text. #### KV Cache effect diff --git a/packages/client/ui-deliverables/README.zh.md b/packages/client/ui-deliverables/README.zh.md index 70ad1dfffa..cbfc98a428 100644 --- a/packages/client/ui-deliverables/README.zh.md +++ b/packages/client/ui-deliverables/README.zh.md @@ -25,12 +25,12 @@ kind: "package-reference" ## 使用本包 -与 `ui-conversation` 和 Host 侧的 [workspace-changes](../../fs/workspace-changes/README.zh.md) 插件一起挂载本插件;已完成轮次随即以改动文件卡片收尾,位于收尾消息正文与其动作页脚之间。没有记录的摘要时——工作区不在任何 git 仓库内、Host 上没有 git,或该插件被组合出去——卡片不出现,只保留交付卡片与正文链接。 +与 `ui-conversation` 和 Host 侧的 [workspace-changes](../../deliverables/workspace-changes/README.zh.md) 插件一起挂载本插件;已完成轮次随即以改动文件卡片收尾,位于收尾消息正文与其动作页脚之间。没有记录的摘要时——工作区不在任何 git 仓库内、Host 上没有 git,或该插件被组合出去——卡片不出现,只保留交付卡片与正文链接。 ### 显式交付 -Web 的 `standard`、`ptc` 与 `cordis` preset 提供 `present` 用于声明交付会话文件系统可访问的最终文件,包括通过 Bash 创建的文件。创建文件后,以 `files: [{ path, description? }]` 调用。[present 工具](../../fs/tool-present/README.zh.md)拥有文件数量限制和会话声明。收尾轮次把单个交付显示为横向占满内容区的卡片,把多个交付显示为间距 10px 的双列网格。文件超过四个时,列表默认收起,并提供显示或隐藏完整列表的控件。每张卡片高 60px,上下内边距为 8px、左右为 10px;40px 图标框内使用 20px 的共享 `FileTypeIcon`,文件名为 13px、次要文本为 10px,“打开”操作为 12px。卡片显示 basename 与说明;没有说明时显示文件类型,说明末尾的括号后缀会被省略,悬停卡片时该行切换为侧栏预览提示。点击卡片或分段“打开”控件的左侧会在右侧 Sidebar 中预览文件;右侧箭头打开标准菜单,其中提供 Host 默认应用,以及 macOS 上的“在 Finder 中显示”、Windows 和 WSL 上的“在文件资源管理器中显示”或 Linux 默认文件管理器的“打开所在文件夹”。匹配的行内代码引用在右侧 Sidebar 中预览相同源文件;原生打开需要显式选择卡片菜单中的操作。同一路径重复声明时,选择收尾回复之前最近一次的说明。 +Web 的 `standard`、`ptc` 与 `cordis` preset 提供 `present` 用于声明交付会话文件系统可访问的最终文件,包括通过 Bash 创建的文件。创建文件后,以 `files: [{ path, description? }]` 调用。[present 工具](../../deliverables/tool-present/README.zh.md)拥有文件数量限制和会话声明。收尾轮次把单个交付显示为横向占满内容区的卡片,把多个交付显示为间距 10px 的双列网格。文件超过四个时,列表默认收起,并提供显示或隐藏完整列表的控件。每张卡片高 60px,上下内边距为 8px、左右为 10px;40px 图标框内使用 20px 的共享 `FileTypeIcon`,文件名为 13px、次要文本为 10px,“打开”操作为 12px。卡片显示 basename 与说明;没有说明时显示文件类型,说明末尾的括号后缀会被省略,悬停卡片时该行切换为侧栏预览提示。点击卡片或分段“打开”控件的左侧会在右侧 Sidebar 中预览文件;右侧箭头打开标准菜单,其中提供 Host 默认应用,以及 macOS 上的“在 Finder 中显示”、Windows 和 WSL 上的“在文件资源管理器中显示”或 Linux 默认文件管理器的“打开所在文件夹”。匹配的行内代码引用在右侧 Sidebar 中预览相同源文件;原生打开需要显式选择卡片菜单中的操作。同一路径重复声明时,选择收尾回复之前最近一次的说明。 `present` 工具行显示正在交付、已交付、失败或中断状态;展开已结束的调用可查看其记录的结果。可折叠卡片网格保留全部交付文件。菜单中的两个操作共享等待状态,并显示进度、成功确认或各自可重试的错误。交付卡片出现时读取桌面信息,连接更换时清除缓存,旧连接的响应不能更新元数据。选择原生菜单操作后,键盘焦点回到仍可用的侧边栏“打开”按钮。等待操作完成时关闭菜单,用户再次点击才会打开。Host 没有桌面时禁用“打开”菜单;桌面信息读取失败时提供“重试”。服务 Host 必须具备桌面和合适的默认应用;远程浏览器不会打开其所在设备上的应用。 @@ -63,7 +63,7 @@ Node 半部注册静态 `ui:deliverable-file-references` 系统提示词段, 当产出物面不够用时阅读以下页面。它们从卡片进入 Host 记录器、turn-tail 洞与词表背后的决策。 -- [workspace-changes](../../fs/workspace-changes/README.zh.md)——记录卡片所渲染摘要的 Host 插件。 +- [workspace-changes](../../deliverables/workspace-changes/README.zh.md)——记录卡片所渲染摘要的 Host 插件。 - [ui-conversation](../ui-conversation/README.zh.md)——声明 `conversation.chat.turnTail` 洞并渲染收尾正文。 - [本轮改动文件卡片](../../../.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.zh.md)——用 git 记录的摘要取代修改调用行背后的决策。 - [工作区文件链接](../../../.agents/notes/implemented/feature/2026-07-31-web-workspace-file-links.zh.md)——早先产出文件行背后的决策;其 Host 打开路径已被[右侧 Sidebar](../../../.agents/notes/implemented/feature/2026-09-04-right-sidebar-docking-infrastructure.zh.md)取代。 @@ -83,7 +83,7 @@ Node 半部注册静态 `ui:deliverable-file-references` 系统提示词段, #### Token 影响 -加载本包时增加一段固定提示词。[present 工具](../../fs/tool-present/README.zh.md#model-experience)拥有交付 schema 和结果文本。 +加载本包时增加一段固定提示词。[present 工具](../../deliverables/tool-present/README.zh.md#model-experience)拥有交付 schema 和结果文本。 #### KV Cache 影响 diff --git a/packages/client/ui-deliverables/tsconfig.client.json b/packages/client/ui-deliverables/tsconfig.client.json index 6949891efb..c349a604c1 100644 --- a/packages/client/ui-deliverables/tsconfig.client.json +++ b/packages/client/ui-deliverables/tsconfig.client.json @@ -52,10 +52,10 @@ "path": "../ui-tool" }, { - "path": "../../fs/tool-present" + "path": "../../deliverables/tool-present" }, { - "path": "../../fs/workspace-changes" + "path": "../../deliverables/workspace-changes" }, { "path": "../../util/workspace-path" diff --git a/packages/client/ui-deliverables/tsconfig.host.json b/packages/client/ui-deliverables/tsconfig.host.json index f1fd3518a4..9fa6a420e8 100644 --- a/packages/client/ui-deliverables/tsconfig.host.json +++ b/packages/client/ui-deliverables/tsconfig.host.json @@ -31,10 +31,10 @@ "path": "../../llm/llm" }, { - "path": "../../fs/tool-present" + "path": "../../deliverables/tool-present" }, { - "path": "../../fs/workspace-changes" + "path": "../../deliverables/workspace-changes" }, { "path": "../../api/session-controller/tsconfig.host.json" diff --git a/packages/deliverables/README.i18n.yaml b/packages/deliverables/README.i18n.yaml new file mode 100644 index 0000000000..a0fbfda878 --- /dev/null +++ b/packages/deliverables/README.i18n.yaml @@ -0,0 +1,6 @@ +# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each +# side as of the last confirmed-consistent state. Both languages carry equal authority; +# after editing either side, bring the other along and re-record with: +# pnpm run verify-translation-pairing --write packages/deliverables/README.md +README.md: 4295e15981c2e01465de301edf1f1182aa21b88a +README.zh.md: 37eab8dc0d16a188aeb85be03b4572a70a28cb49 diff --git a/packages/deliverables/README.md b/packages/deliverables/README.md new file mode 100644 index 0000000000..4295e15981 --- /dev/null +++ b/packages/deliverables/README.md @@ -0,0 +1,49 @@ +--- +description: "The deliverables group map: the Host plugins that record what a turn hands to the user, explicit file deliveries and observed workspace changes, for users and maintainers navigating the group." +kind: "package-group" +--- + +# packages/deliverables + +English | [中文](README.zh.md) + +## Summary + +The deliverables family records what a turn hands to the user as durable Session events that only clients read: the `present` tool declares final files the model delivered, and the workspace-changes recorder captures the files a turn changed with their line counts from git snapshots. The Web [deliverables plugin](../client/ui-deliverables/README.md) renders both at the end of a turn. Choose this family for a product that shows delivered files and per-turn changes; `present` needs `ctx.tools` and `ctx.fs`, the recorder needs `ctx.subprocess` and a git executable. + +## Table of Contents + +- [Packages](#packages) +- [Related documentation](#related-documentation) +- [Dev Note](#dev-note) + +----- + + +## Packages + +| Package | Role | ctx key | +|---|---|---| +| [`tool-present`](tool-present/README.md) | Declares existing files as final deliverables through the `present` tool | registers on `ctx.tools` | +| [`workspace-changes`](workspace-changes/README.md) | Records each top-level turn's changed files from git working-tree snapshots | listens to `session/event`, appends `workspace/changes` | + +----- + + +## Related documentation + +- [Web deliverables](../client/ui-deliverables/README.md) — the turn-tail cards and file mentions that render these events. +- [Present declares workspace source files](../../.agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.md) — the delivery decision. +- [Turn changed-files card](../../.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.md) — the snapshot design and coverage rules. + +----- + + +## Dev Note + +
+Working context for maintainers — click to expand + +None. + +
diff --git a/packages/deliverables/README.zh.md b/packages/deliverables/README.zh.md new file mode 100644 index 0000000000..37eab8dc0d --- /dev/null +++ b/packages/deliverables/README.zh.md @@ -0,0 +1,49 @@ +--- +description: "deliverables 组导览:记录轮次交给用户的内容的 Host 插件,即显式文件交付与观察到的工作区改动,供浏览本组的用户与维护者阅读。" +kind: "package-group" +--- + +# packages/deliverables + +[English](README.md) | 中文 + +## 概述 + +deliverables 系列把一轮交给用户的内容记录为只有客户端读取的持久 Session 事件:`present` 工具声明模型交付的最终文件,workspace-changes 记录器用 git 快照捕获一轮改动的文件及其行数。Web 的[交付插件](../client/ui-deliverables/README.zh.md)在轮次末尾渲染两者。需要展示交付文件和每轮改动的产品选择本系列;`present` 需要 `ctx.tools` 与 `ctx.fs`,记录器需要 `ctx.subprocess` 和 git 可执行文件。 + +## 目录 + +- [包](#packages) +- [相关文档](#related-documentation) +- [开发备注](#dev-note) + +----- + + +## 包 + +| 包 | 角色 | ctx key | +|---|---|---| +| [`tool-present`](tool-present/README.zh.md) | 通过 `present` 工具把已有文件声明为最终交付物 | 注册到 `ctx.tools` | +| [`workspace-changes`](workspace-changes/README.zh.md) | 用 git 工作树快照记录每个顶层轮次改动的文件 | 监听 `session/event`,追加 `workspace/changes` | + +----- + + +## 相关文档 + +- [Web 产出物](../client/ui-deliverables/README.zh.md)——渲染这些事件的轮尾卡片与文件提及。 +- [present 声明工作区源文件](../../.agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.zh.md)——交付决策。 +- [本轮改动文件卡片](../../.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.zh.md)——快照设计与覆盖规则。 + +----- + + +## 开发备注 + +
+维护者的工作上下文——点击展开 + +无。 + +
diff --git a/packages/fs/tool-present/README.i18n.yaml b/packages/deliverables/tool-present/README.i18n.yaml similarity index 79% rename from packages/fs/tool-present/README.i18n.yaml rename to packages/deliverables/tool-present/README.i18n.yaml index b5913cf8d0..a40c948a43 100644 --- a/packages/fs/tool-present/README.i18n.yaml +++ b/packages/deliverables/tool-present/README.i18n.yaml @@ -1,6 +1,6 @@ # Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: -# pnpm run verify-translation-pairing --write packages/fs/tool-present/README.md +# pnpm run verify-translation-pairing --write packages/deliverables/tool-present/README.md README.md: 93003711545f678336a02c9bf8589176f844af65 README.zh.md: 161efcc3931fbf57175064ccf1179b195320d4b9 diff --git a/packages/fs/tool-present/README.md b/packages/deliverables/tool-present/README.md similarity index 100% rename from packages/fs/tool-present/README.md rename to packages/deliverables/tool-present/README.md diff --git a/packages/fs/tool-present/README.zh.md b/packages/deliverables/tool-present/README.zh.md similarity index 100% rename from packages/fs/tool-present/README.zh.md rename to packages/deliverables/tool-present/README.zh.md diff --git a/packages/fs/tool-present/package.json b/packages/deliverables/tool-present/package.json similarity index 97% rename from packages/fs/tool-present/package.json rename to packages/deliverables/tool-present/package.json index 18e5bb3d4a..29beec6c83 100644 --- a/packages/fs/tool-present/package.json +++ b/packages/deliverables/tool-present/package.json @@ -8,7 +8,7 @@ "repository": { "type": "git", "url": "git+https://github.com/deepseek-ai/deepseek-harness.git", - "directory": "packages/fs/tool-present" + "directory": "packages/deliverables/tool-present" }, "type": "module", "main": "lib/index.js", diff --git a/packages/fs/tool-present/src/index.ts b/packages/deliverables/tool-present/src/index.ts similarity index 100% rename from packages/fs/tool-present/src/index.ts rename to packages/deliverables/tool-present/src/index.ts diff --git a/packages/fs/tool-present/src/types.ts b/packages/deliverables/tool-present/src/types.ts similarity index 100% rename from packages/fs/tool-present/src/types.ts rename to packages/deliverables/tool-present/src/types.ts diff --git a/packages/fs/tool-present/tests/built-errors.e2e.ts b/packages/deliverables/tool-present/tests/built-errors.e2e.ts similarity index 97% rename from packages/fs/tool-present/tests/built-errors.e2e.ts rename to packages/deliverables/tool-present/tests/built-errors.e2e.ts index 466145038e..0b89b1ea18 100644 --- a/packages/fs/tool-present/tests/built-errors.e2e.ts +++ b/packages/deliverables/tool-present/tests/built-errors.e2e.ts @@ -16,7 +16,7 @@ import LocalFileSystem from './packages/fs/fs-local/lib/index.js' import SystemPrompt from './packages/core/system-prompt/lib/index.js' import ToolRuntime from './packages/core/tools/lib/index.js' import { Session, SESSION_FORMAT_VERSION } from './packages/core/session/lib/index.js' -import * as Present from './packages/fs/tool-present/lib/index.js' +import * as Present from './packages/deliverables/tool-present/lib/index.js' import { mkdtemp, rm } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' diff --git a/packages/fs/tool-present/tests/present.spec.ts b/packages/deliverables/tool-present/tests/present.spec.ts similarity index 100% rename from packages/fs/tool-present/tests/present.spec.ts rename to packages/deliverables/tool-present/tests/present.spec.ts diff --git a/packages/fs/tool-present/tsconfig.json b/packages/deliverables/tool-present/tsconfig.json similarity index 95% rename from packages/fs/tool-present/tsconfig.json rename to packages/deliverables/tool-present/tsconfig.json index aae51cd968..9222a0be0c 100644 --- a/packages/fs/tool-present/tsconfig.json +++ b/packages/deliverables/tool-present/tsconfig.json @@ -18,7 +18,7 @@ "path": "../../core/agent" }, { - "path": "../fs" + "path": "../../fs/fs" }, { "path": "../../llm/llm" diff --git a/packages/fs/workspace-changes/README.i18n.yaml b/packages/deliverables/workspace-changes/README.i18n.yaml similarity index 78% rename from packages/fs/workspace-changes/README.i18n.yaml rename to packages/deliverables/workspace-changes/README.i18n.yaml index db46f3a0a0..84870f65eb 100644 --- a/packages/fs/workspace-changes/README.i18n.yaml +++ b/packages/deliverables/workspace-changes/README.i18n.yaml @@ -1,6 +1,6 @@ # Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: -# pnpm run verify-translation-pairing --write packages/fs/workspace-changes/README.md +# pnpm run verify-translation-pairing --write packages/deliverables/workspace-changes/README.md README.md: eadde42f30d3909bdce75641f0c73c7f4ec1fa2c README.zh.md: a5a49ea5214e01325e4fcfcd01713048c1fada90 diff --git a/packages/fs/workspace-changes/README.md b/packages/deliverables/workspace-changes/README.md similarity index 100% rename from packages/fs/workspace-changes/README.md rename to packages/deliverables/workspace-changes/README.md diff --git a/packages/fs/workspace-changes/README.zh.md b/packages/deliverables/workspace-changes/README.zh.md similarity index 100% rename from packages/fs/workspace-changes/README.zh.md rename to packages/deliverables/workspace-changes/README.zh.md diff --git a/packages/fs/workspace-changes/package.json b/packages/deliverables/workspace-changes/package.json similarity index 96% rename from packages/fs/workspace-changes/package.json rename to packages/deliverables/workspace-changes/package.json index 5c93a3bfe2..6c3d899880 100644 --- a/packages/fs/workspace-changes/package.json +++ b/packages/deliverables/workspace-changes/package.json @@ -8,7 +8,7 @@ "repository": { "type": "git", "url": "git+https://github.com/deepseek-ai/deepseek-harness.git", - "directory": "packages/fs/workspace-changes" + "directory": "packages/deliverables/workspace-changes" }, "type": "module", "main": "lib/index.js", diff --git a/packages/fs/workspace-changes/src/git.ts b/packages/deliverables/workspace-changes/src/git.ts similarity index 100% rename from packages/fs/workspace-changes/src/git.ts rename to packages/deliverables/workspace-changes/src/git.ts diff --git a/packages/fs/workspace-changes/src/index.ts b/packages/deliverables/workspace-changes/src/index.ts similarity index 100% rename from packages/fs/workspace-changes/src/index.ts rename to packages/deliverables/workspace-changes/src/index.ts diff --git a/packages/fs/workspace-changes/src/numstat.ts b/packages/deliverables/workspace-changes/src/numstat.ts similarity index 100% rename from packages/fs/workspace-changes/src/numstat.ts rename to packages/deliverables/workspace-changes/src/numstat.ts diff --git a/packages/fs/workspace-changes/src/paths.ts b/packages/deliverables/workspace-changes/src/paths.ts similarity index 100% rename from packages/fs/workspace-changes/src/paths.ts rename to packages/deliverables/workspace-changes/src/paths.ts diff --git a/packages/fs/workspace-changes/src/recorder.ts b/packages/deliverables/workspace-changes/src/recorder.ts similarity index 100% rename from packages/fs/workspace-changes/src/recorder.ts rename to packages/deliverables/workspace-changes/src/recorder.ts diff --git a/packages/fs/workspace-changes/src/types.ts b/packages/deliverables/workspace-changes/src/types.ts similarity index 100% rename from packages/fs/workspace-changes/src/types.ts rename to packages/deliverables/workspace-changes/src/types.ts diff --git a/packages/fs/workspace-changes/tests/git.spec.ts b/packages/deliverables/workspace-changes/tests/git.spec.ts similarity index 100% rename from packages/fs/workspace-changes/tests/git.spec.ts rename to packages/deliverables/workspace-changes/tests/git.spec.ts diff --git a/packages/fs/workspace-changes/tests/loader-composition.spec.ts b/packages/deliverables/workspace-changes/tests/loader-composition.spec.ts similarity index 100% rename from packages/fs/workspace-changes/tests/loader-composition.spec.ts rename to packages/deliverables/workspace-changes/tests/loader-composition.spec.ts diff --git a/packages/fs/workspace-changes/tests/numstat.spec.ts b/packages/deliverables/workspace-changes/tests/numstat.spec.ts similarity index 100% rename from packages/fs/workspace-changes/tests/numstat.spec.ts rename to packages/deliverables/workspace-changes/tests/numstat.spec.ts diff --git a/packages/fs/workspace-changes/tests/paths.spec.ts b/packages/deliverables/workspace-changes/tests/paths.spec.ts similarity index 100% rename from packages/fs/workspace-changes/tests/paths.spec.ts rename to packages/deliverables/workspace-changes/tests/paths.spec.ts diff --git a/packages/fs/workspace-changes/tests/plugin.spec.ts b/packages/deliverables/workspace-changes/tests/plugin.spec.ts similarity index 100% rename from packages/fs/workspace-changes/tests/plugin.spec.ts rename to packages/deliverables/workspace-changes/tests/plugin.spec.ts diff --git a/packages/fs/workspace-changes/tests/support.ts b/packages/deliverables/workspace-changes/tests/support.ts similarity index 100% rename from packages/fs/workspace-changes/tests/support.ts rename to packages/deliverables/workspace-changes/tests/support.ts diff --git a/packages/fs/workspace-changes/tsconfig.json b/packages/deliverables/workspace-changes/tsconfig.json similarity index 100% rename from packages/fs/workspace-changes/tsconfig.json rename to packages/deliverables/workspace-changes/tsconfig.json diff --git a/packages/fs/README.i18n.yaml b/packages/fs/README.i18n.yaml index 11c9873577..5765348ffd 100644 --- a/packages/fs/README.i18n.yaml +++ b/packages/fs/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write packages/fs/README.md -README.md: 079dc476d5f0dbd9faa918bf7411f1be98b095c0 -README.zh.md: 99fe136f21050ae5073ee12b0e648fc1661f93c1 +README.md: 1fbba1f93490000088de4d7fa1e94e8b9dfed90a +README.zh.md: c02bf70ce62ae35ddae04ea8989b58e785836d4b diff --git a/packages/fs/README.md b/packages/fs/README.md index 079dc476d5..1fbba1f934 100644 --- a/packages/fs/README.md +++ b/packages/fs/README.md @@ -22,7 +22,7 @@ The `fs/` group gives agents durable, policy-governed access to files: the `ctx. ## Packages -Nine packages play the filesystem roles; the subsystem reference owns the exhaustive contracts and the error taxonomy. +Seven packages play the filesystem roles; the subsystem reference owns the exhaustive contracts and the error taxonomy. | Package | Role | ctx key | |---|---|---| @@ -33,8 +33,6 @@ Nine packages play the filesystem roles; the subsystem reference owns the exhaus | [`tool-fs/`](tool-fs/README.md) | Model-facing `read`, `read_image`, `write`, and `edit` tools plus their executor | registers on `ctx.tools` | | [`tool-fs-search/`](tool-fs-search/README.md) | Model-facing `glob` and `grep` discovery tools backed by the packaged ripgrep binary | registers on `ctx.tools` | | [`tool-str-replace-editor/`](tool-str-replace-editor/README.md) | Standalone `str_replace_editor` tool: `view`, `create`, `str_replace`, and `insert` over `ctx.fs` | registers on `ctx.tools` | -| [`tool-present/`](tool-present/README.md) | Explicit immutable snapshots of delivered files | registers on `ctx.tools` | -| [`workspace-changes/`](workspace-changes/README.md) | Per-turn changed-file summaries recorded from git working-tree snapshots | listens to `session/event`, appends `workspace/changes` | The policy is a plugin, not a service the tools inject: removing it leaves the bare provider's unconditional mutation behavior instead of breaking the tools. The mode fence in `fs-sandbox` and the read-before-edit gate compose. `tool-fs-search` deliberately does not extend the provider contract — search is a process-backed ripgrep workflow, so filesystem backends stay free of a universal search API. diff --git a/packages/fs/README.zh.md b/packages/fs/README.zh.md index 99fe136f21..c02bf70ce6 100644 --- a/packages/fs/README.zh.md +++ b/packages/fs/README.zh.md @@ -22,7 +22,7 @@ kind: "package-group" ## 包 -九个包承担文件系统角色;子系统参考文档完整收录各项约定与错误分类体系。 +七个包承担文件系统角色;子系统参考文档完整收录各项约定与错误分类体系。 | 包 | 职责 | ctx 键 | |---|---|---| @@ -33,8 +33,6 @@ kind: "package-group" | [`tool-fs/`](tool-fs/README.zh.md) | 面向模型的 `read`、`read_image`、`write` 与 `edit` 工具及其执行器 | 注册到 `ctx.tools` | | [`tool-fs-search/`](tool-fs-search/README.zh.md) | 由打包 ripgrep 二进制支持的面向模型 `glob` 与 `grep` 发现工具 | 注册到 `ctx.tools` | | [`tool-str-replace-editor/`](tool-str-replace-editor/README.zh.md) | 独立的 `str_replace_editor` 工具:基于 `ctx.fs` 的 `view`、`create`、`str_replace` 与 `insert` | 注册到 `ctx.tools` | -| [`tool-present/`](tool-present/README.zh.md) | 显式保存交付文件的不可变快照 | 注册到 `ctx.tools` | -| [`workspace-changes/`](workspace-changes/README.zh.md) | 由 git 工作树快照记录的每轮改动文件摘要 | 监听 `session/event`,追加 `workspace/changes` | 策略是插件,不是工具注入的服务:移除它会留下裸提供方的无条件变更行为,而不会破坏工具。`fs-sandbox` 的模式围栏与编辑前读取门禁可以组合。`tool-fs-search` 有意不扩展提供方约定——搜索是由进程支持的 ripgrep 工作流,因此文件系统后端无需承担通用搜索 API。 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f2306ad370..0ea054fa33 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -307,7 +307,7 @@ importers: version: link:../../packages/jobs/tool-jobs '@deepseek-ai/dsh-tool-present': specifier: workspace:^ - version: link:../../packages/fs/tool-present + version: link:../../packages/deliverables/tool-present '@deepseek-ai/dsh-tool-pwsh': specifier: workspace:^ version: link:../../packages/shell/tool-pwsh @@ -642,7 +642,7 @@ importers: version: link:../../packages/test-support/remote-mock '@deepseek-ai/dsh-workspace-changes': specifier: workspace:^ - version: link:../../packages/fs/workspace-changes + version: link:../../packages/deliverables/workspace-changes '@types/node': specifier: ^22.0.0 version: 22.20.0 @@ -1581,7 +1581,7 @@ importers: version: link:../../jobs/tool-jobs '@deepseek-ai/dsh-tool-present': specifier: workspace:^ - version: link:../../fs/tool-present + version: link:../../deliverables/tool-present '@deepseek-ai/dsh-tool-pwsh': specifier: workspace:^ version: link:../../shell/tool-pwsh @@ -2035,7 +2035,7 @@ importers: version: link:../../workspace/workspace '@deepseek-ai/dsh-workspace-changes': specifier: workspace:^ - version: link:../../fs/workspace-changes + version: link:../../deliverables/workspace-changes '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery @@ -2796,13 +2796,13 @@ importers: version: link:../../core/system-prompt '@deepseek-ai/dsh-tool-present': specifier: workspace:^ - version: link:../../fs/tool-present + version: link:../../deliverables/tool-present '@deepseek-ai/dsh-util-workspace-path': specifier: workspace:^ version: link:../../util/workspace-path '@deepseek-ai/dsh-workspace-changes': specifier: workspace:^ - version: link:../../fs/workspace-changes + version: link:../../deliverables/workspace-changes '@types/react': specifier: ~18.3.1 version: 18.3.31 @@ -5426,6 +5426,89 @@ importers: specifier: workspace:^ version: link:../../util/launch-environment + packages/deliverables/tool-present: + dependencies: + '@deepseek-ai/schemastery': + specifier: link:../../../vendor/schemastery + version: link:../../../vendor/schemastery + devDependencies: + '@deepseek-ai/cordis': + specifier: workspace:^ + version: link:../../../vendor/cordis + '@deepseek-ai/dsh-agent': + specifier: workspace:^ + version: link:../../core/agent + '@deepseek-ai/dsh-agent-loop': + specifier: workspace:^ + version: link:../../core/agent-loop + '@deepseek-ai/dsh-agent-loop-testkit': + specifier: workspace:^ + version: link:../../test-support/agent-loop-testkit + '@deepseek-ai/dsh-fs': + specifier: workspace:^ + version: link:../../fs/fs + '@deepseek-ai/dsh-fs-local': + specifier: workspace:^ + version: link:../../fs/fs-local + '@deepseek-ai/dsh-llm': + specifier: workspace:^ + version: link:../../llm/llm + '@deepseek-ai/dsh-scope': + specifier: workspace:^ + version: link:../../core/scope + '@deepseek-ai/dsh-session': + specifier: workspace:^ + version: link:../../core/session + '@deepseek-ai/dsh-session-projection': + specifier: workspace:^ + version: link:../../session/session-projection + '@deepseek-ai/dsh-system-prompt': + specifier: workspace:^ + version: link:../../core/system-prompt + '@deepseek-ai/dsh-tools': + specifier: workspace:^ + version: link:../../core/tools + + packages/deliverables/workspace-changes: + dependencies: + '@deepseek-ai/schemastery': + specifier: link:../../../vendor/schemastery + version: link:../../../vendor/schemastery + diff: + specifier: ^9.0.0 + version: 9.0.0 + devDependencies: + '@deepseek-ai/cordis': + specifier: workspace:^ + version: link:../../../vendor/cordis + '@deepseek-ai/cordis-plugin-include': + specifier: workspace:^ + version: link:../../../vendor/include + '@deepseek-ai/cordis-plugin-loader': + specifier: workspace:^ + version: link:../../../vendor/loader + '@deepseek-ai/dsh-agent': + specifier: workspace:^ + version: link:../../core/agent + '@deepseek-ai/dsh-home-paths': + specifier: workspace:^ + version: link:../../util/home-paths + '@deepseek-ai/dsh-llm': + specifier: workspace:^ + version: link:../../llm/llm + '@deepseek-ai/dsh-session': + specifier: workspace:^ + version: link:../../core/session + '@deepseek-ai/dsh-subprocess': + specifier: workspace:^ + version: link:../../subprocess/subprocess + '@deepseek-ai/dsh-subprocess-local': + specifier: workspace:^ + version: link:../../subprocess/subprocess-local + '@deepseek-ai/dsh-tools': + specifier: workspace:^ + version: link:../../core/tools + packages/experimental/agent-team: dependencies: '@deepseek-ai/dsh-brand': @@ -6407,49 +6490,6 @@ importers: specifier: workspace:^ version: link:../../core/tools - packages/fs/tool-present: - dependencies: - '@deepseek-ai/schemastery': - specifier: link:../../../vendor/schemastery - version: link:../../../vendor/schemastery - devDependencies: - '@deepseek-ai/cordis': - specifier: workspace:^ - version: link:../../../vendor/cordis - '@deepseek-ai/dsh-agent': - specifier: workspace:^ - version: link:../../core/agent - '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ - version: link:../../core/agent-loop - '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ - version: link:../../test-support/agent-loop-testkit - '@deepseek-ai/dsh-fs': - specifier: workspace:^ - version: link:../fs - '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ - version: link:../fs-local - '@deepseek-ai/dsh-llm': - specifier: workspace:^ - version: link:../../llm/llm - '@deepseek-ai/dsh-scope': - specifier: workspace:^ - version: link:../../core/scope - '@deepseek-ai/dsh-session': - specifier: workspace:^ - version: link:../../core/session - '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ - version: link:../../session/session-projection - '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ - version: link:../../core/system-prompt - '@deepseek-ai/dsh-tools': - specifier: workspace:^ - version: link:../../core/tools - packages/fs/tool-str-replace-editor: dependencies: '@deepseek-ai/schemastery': @@ -6499,46 +6539,6 @@ importers: specifier: workspace:^ version: link:../../core/tools - packages/fs/workspace-changes: - dependencies: - '@deepseek-ai/schemastery': - specifier: link:../../../vendor/schemastery - version: link:../../../vendor/schemastery - diff: - specifier: ^9.0.0 - version: 9.0.0 - devDependencies: - '@deepseek-ai/cordis': - specifier: workspace:^ - version: link:../../../vendor/cordis - '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ - version: link:../../../vendor/include - '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ - version: link:../../../vendor/loader - '@deepseek-ai/dsh-agent': - specifier: workspace:^ - version: link:../../core/agent - '@deepseek-ai/dsh-home-paths': - specifier: workspace:^ - version: link:../../util/home-paths - '@deepseek-ai/dsh-llm': - specifier: workspace:^ - version: link:../../llm/llm - '@deepseek-ai/dsh-session': - specifier: workspace:^ - version: link:../../core/session - '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ - version: link:../../subprocess/subprocess - '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ - version: link:../../subprocess/subprocess-local - '@deepseek-ai/dsh-tools': - specifier: workspace:^ - version: link:../../core/tools - packages/goal/command-goal: devDependencies: '@deepseek-ai/cordis': @@ -11821,7 +11821,7 @@ importers: version: link:../../packages/jobs/tool-jobs '@deepseek-ai/dsh-tool-present': specifier: workspace:^ - version: link:../../packages/fs/tool-present + version: link:../../packages/deliverables/tool-present '@deepseek-ai/dsh-tool-pwsh': specifier: workspace:^ version: link:../../packages/shell/tool-pwsh diff --git a/scripts/gen-tool-catalog.ts b/scripts/gen-tool-catalog.ts index e0f487c2be..965e794556 100644 --- a/scripts/gen-tool-catalog.ts +++ b/scripts/gen-tool-catalog.ts @@ -267,7 +267,7 @@ const TOOL_PACKAGES: ToolPackage[] = [ { pkg: '@deepseek-ai/dsh-tool-present', dir: 'tool-present', - source: 'packages/fs/tool-present/src/index.ts', + source: 'packages/deliverables/tool-present/src/index.ts', requires: ['ctx.tools', 'ctx.fs', 'ctx.sessionProjections'], writes: ['tool/call', 'deliverables/presented after a successful final result', 'tool/result'], async mount(ctx) { diff --git a/scripts/run-gates.ts b/scripts/run-gates.ts index a8c0b4e027..f8d6901409 100644 --- a/scripts/run-gates.ts +++ b/scripts/run-gates.ts @@ -795,7 +795,7 @@ function builtBinSmokeGate(needs: string[] = ['build']): Gate { 'apps/cli/tests/built-bin.e2e.ts', 'packages/host/directory-picker-native/tests/built-worker.e2e.ts', 'packages/sdk/server/tests/built-scope-carrier.e2e.ts', - 'packages/fs/tool-present/tests/built-errors.e2e.ts', + 'packages/deliverables/tool-present/tests/built-errors.e2e.ts', 'packages/subprocess/subprocess-local/tests/spawn-runner-built.e2e.ts', 'packages/subagent/subagent-codex/tests/loader-composition.e2e.ts', 'packages/subagent/subagent-claude-code/tests/loader-composition.e2e.ts', diff --git a/scripts/verify-package-readme-model-experience.ts b/scripts/verify-package-readme-model-experience.ts index 41f8fc1b04..6a1a48d57a 100644 --- a/scripts/verify-package-readme-model-experience.ts +++ b/scripts/verify-package-readme-model-experience.ts @@ -62,7 +62,7 @@ const SENTENCE_MODEL_EXPERIENCE: Readonly> = { 'packages/client/ui-agent-preset': { kind: 'indirect', reason: 'Browser-side settings row; the preset it selects owns every model-facing effect.' }, 'packages/util/crypto': { kind: 'indirect', reason: 'Pure identifier minting; the ids consumers mint with it never enter prompts as semantic content.' }, 'packages/util/deque': { kind: 'none', reason: 'In-process collection primitive; registers nothing model-facing.' }, - 'packages/fs/workspace-changes': { kind: 'none', reason: 'The recorder appends a log-only Session event that only clients read; it registers nothing model-facing.' }, + 'packages/deliverables/workspace-changes': { kind: 'none', reason: 'The recorder appends a log-only Session event that only clients read; it registers nothing model-facing.' }, 'packages/util/chunked-list': { kind: 'none', reason: 'Immutable collection primitive; registers nothing model-facing.' }, 'packages/util/package-manifest': { kind: 'none', reason: 'Type declarations only; registers nothing model-facing.' }, 'packages/util/time': { kind: 'indirect', reason: 'Pure zone validation; the consumer that records a canonical zone owns the model-visible line derived from it.' }, diff --git a/tsconfig.base.json b/tsconfig.base.json index 1b03da88d5..602b98ed09 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -204,8 +204,8 @@ "@deepseek-ai/dsh-client-ui-conversation": ["./packages/client/ui-conversation/src"], "@deepseek-ai/dsh-client-ui-conversation/client": ["./packages/client/ui-conversation/src/client/index.ts"], "@deepseek-ai/dsh-client-ui-tool": ["./packages/client/ui-tool/src"], - "@deepseek-ai/dsh-tool-present/types": ["./packages/fs/tool-present/src/types.ts"], - "@deepseek-ai/dsh-workspace-changes/types": ["./packages/fs/workspace-changes/src/types.ts"], + "@deepseek-ai/dsh-tool-present/types": ["./packages/deliverables/tool-present/src/types.ts"], + "@deepseek-ai/dsh-workspace-changes/types": ["./packages/deliverables/workspace-changes/src/types.ts"], "@deepseek-ai/dsh-client-ui-deliverables": ["./packages/client/ui-deliverables/src"], "@deepseek-ai/dsh-client-ui-workflow-run": ["./packages/client/ui-workflow-run/src"], "@deepseek-ai/dsh-client-ui-input-trigger": ["./packages/client/ui-input-trigger/src"], @@ -439,7 +439,7 @@ "@deepseek-ai/dsh-tool-goal": ["./packages/goal/tool-goal/src"], "@deepseek-ai/dsh-tool-jobs": ["./packages/jobs/tool-jobs/src"], "@deepseek-ai/dsh-tool-lsp": ["./packages/lsp/tool-lsp/src"], - "@deepseek-ai/dsh-tool-present": ["./packages/fs/tool-present/src"], + "@deepseek-ai/dsh-tool-present": ["./packages/deliverables/tool-present/src"], "@deepseek-ai/dsh-tool-pwsh-persistent": ["./packages/shell/tool-pwsh-persistent/src"], "@deepseek-ai/dsh-tool-ralph": ["./packages/workflow/tool-ralph/src"], "@deepseek-ai/dsh-tool-session-query": ["./packages/session-query/tool-session-query/src"], @@ -474,7 +474,7 @@ "@deepseek-ai/dsh-workflow-ptc": ["./packages/workflow/workflow-ptc/src"], "@deepseek-ai/dsh-workspace": ["./packages/workspace/workspace/src"], "@deepseek-ai/dsh-workspace/invariant": ["./packages/workspace/workspace/src/invariant.ts"], - "@deepseek-ai/dsh-workspace-changes": ["./packages/fs/workspace-changes/src"] + "@deepseek-ai/dsh-workspace-changes": ["./packages/deliverables/workspace-changes/src"] // END generated package aliases } } diff --git a/tsconfig.host.json b/tsconfig.host.json index 73b8e636a2..953ac48e5f 100644 --- a/tsconfig.host.json +++ b/tsconfig.host.json @@ -282,13 +282,13 @@ { "path": "./packages/sandbox/sandbox-windows-acl" }, { "path": "./packages/shell/bash-sandbox" }, { "path": "./packages/shell/tool-bash" }, + { "path": "./packages/deliverables/tool-present" }, + { "path": "./packages/deliverables/workspace-changes" }, { "path": "./packages/fs/fs" }, { "path": "./packages/fs/fs-local" }, { "path": "./packages/fs/fs-observation-policy" }, { "path": "./packages/fs/fs-sandbox" }, { "path": "./packages/fs/tool-fs" }, - { "path": "./packages/fs/tool-present" }, - { "path": "./packages/fs/workspace-changes" }, { "path": "./packages/fs/tool-fs-search" }, { "path": "./packages/fs/tool-str-replace-editor" }, { "path": "./packages/compaction/compaction" },