Update every doc referencing base.cordis.yml/web.cordis.yml, --config, -p, or $DSH_HOME/config.yaml to the profile vocabulary with bilingual counterparts re-recorded; regenerate the catalogs and graphs; add the profile-plugin-bundles Agent Note recording the design and its rejected alternatives.
3.0 KiB
Agent Note: Session search tools are not a shipped default
Status: implemented
English | 中文
Problem
The shipped-roster decision made tool-session-query a default row of the shared cordis.patch.yml, so the shipped TUI and Web surfaces put the five session-search tools (session_search, session_event_search, session_trace, session_event_trace, session_event_read) in front of the model. That contradicted the model-facing session-query-tools decision, whose opt-in stance the package README recorded as "shipped host compositions do not mount it by default". The default also shipped a prompt section teaching a prior-work search workflow that no user had asked for.
Decision
The shipped TUI, Web, and headless surfaces no longer mount @deepseek-ai/dsh-tool-session-query: the row is removed from the shared cordis.patch.yml, the now-dangling disabled patch in the opt-in core-web.cordis.yml profile goes with it, and the workspace dependency drops from apps/cli/package.json. The consumer stays opt-in exactly as the model-facing-session-query-tools note describes: the ACP example's session-query.cordis.yml and its snapshot counterpart remain the mounted reference, and a custom composition can mount the package with the timeout and spill policies.
The ctx.sessionQuery service itself stays mounted. session-query-sqlite remains a base row — the TUI's session-reference consumes it for /resume — and the Web overlay keeps patching it to an in-memory index for the browser content search. Only the model-facing consumer is removed.
Alternatives considered
- Remove the
session-query-sqliteindex too — rejected because/resumeand the Web content-search box consumectx.sessionQuerydirectly; those are host features, not model tools, and dropping the provider would break them. - Keep the row but disable it in each overlay — rejected because a disabled base row still ships the dependency and invites a one-line re-enable; the recorded opt-in stance wants the consumer absent from shipped surfaces, with the ACP example as the mount reference.
- Mount it on the TUI only — rejected because the shared base is one row set for every surface; a surface-specific mount would reintroduce the roster split the shipped-roster decision removed.
Consequences
Both surfaces return to the same twenty unconditional tools (plus glob/grep under ripgrep), and the five session-search schemas and their prompt section leave the default request. The shipped-composition tests on both surfaces pin the smaller catalog, so re-adding session search as a default touches the same tests. Users who want session search mount the consumer from a personal overlay or the ACP example, adding the dependency where they do.