description: "Workspace-authorized model-facing session history tools for agent developers and maintainers choosing, configuring, or debugging prior-session search, tracing, and event reads."
English | 中文
dsh-tool-session-query gives the model five read-only tools over session history: session_search, session_event_search, session_trace, session_event_trace, and session_event_read. The tools are workspace-authorized — a model can only reach sessions whose cwd exactly matches its own caller session — and results are cursor-free plain text, so the model can search prior work and follow a useful hit into its lineage or exact event data. The package is opt-in and not mounted by shipped host compositions: mounting it adds one concise guidance section and the five schemas to every request. Configuration and usage come first; the implementation internals live in a collapsible developer section below.
Mount this package when the agent should be able to search its own prior sessions and inspect their relationships and events. The common path is explicit: mount the plugin over ctx.sessionQuery (backed by dsh-session-query-sqlite), then let the model call the tools.
Choose it when a deployment wants model-driven retrieval of prior work — for example a coding agent that searches what it did in earlier sessions before starting a task. Avoid it when only programmatic retrieval is needed: ctx.sessionQuery itself serves code callers without the model-facing schema, prompt, and authorization layer.
| Field | Default | Meaning |
|---|---|---|
maxSearchResults |
100 |
Maximum authorized hits returned by one search call |
searchTimeoutMs |
30000 |
Cooperative deadline attached to both full-text search tools |
The generated configuration catalog is the exhaustive source for every accepted field and its JSDoc.
| Tool | What the model gets |
|---|---|
session_search |
Sessions matching a literal query, ranked, with title and best-match excerpt; always omits the caller session |
session_event_search |
Events matching a literal query inside one authorized session; for the current session it stops before the step that invoked it |
session_trace |
The authorized ancestor chain and descendant tree of one session; unauthorized boundaries appear as markers without hidden ids |
session_event_trace |
One event's positional replacements and cited source-event relationships |
session_event_read |
One full unabridged event as JSON, plus optional neighboring event summaries |
Workspace authority is conservative: cross-session access requires exact cwd equality between target and caller session, and a caller without cwd can inspect only itself. Requested parent ids are deduplicated and authority-checked before search; missing and cross-workspace guesses behave identically. Search results are cursor-free: a capped result asks the model to narrow its query, and never exposes provider cursors, offsets, page sizes, or a model-controlled limit. Timestamps at the tool boundary are timezone-qualified ISO 8601 and become inclusive epoch-millisecond filters.
Every trusted query-service call crosses one error sanitizer: caller cancellation is preserved exactly, corpus and provider diagnostics go to the internal log, and unsafe or unprintable failures fall back to the fixed SESSION_QUERY_TOOL_FAILED code and message. Local argument-validation and authorization errors keep their precise tool-owned messages (SESSION_QUERY_TOOL_UNAUTHORIZED for a target outside the caller workspace). The package performs no byte or character truncation and does not import a spill backend; deployments that need bounded inline output mount @deepseek-ai/dsh-spill-policy, which can replace oversized rendered text while retaining the complete result.
Read these pages when the package-level contract is not enough. They move from the tool surface to the underlying service, the schema catalog, and the design evidence.
The model receives one fixed prior-history guidance section.
Use session_search to find relevant work from prior sessions, or session_event_search to search earlier events in one session. Search results are cursor-free and workspace-scoped. Follow a useful hit with session_trace, session_event_trace, or session_event_read when you need lineage, relationships, or exact data.
One fixed concise section is present on each request while the plugin is mounted.
Prefix-stable while the plugin and guidance text are unchanged.
The model sees the generated session_search, session_event_search, session_trace, session_event_trace, and session_event_read schemas. Search filters add fixed schema tokens, while cursors, workspace paths, output pagination, and model-controlled result limits remain absent.
Five fixed read-only schemas are sent on each request while visible.
Prefix-stable while tool visibility and definitions are unchanged.
Each successful call emits one plain-text block. Search results include titles and best-match excerpts; traces include all authorized relationships; event reads include unabridged target JSON. The generic spill policy may replace oversized inline text with its preview, opaque locator, and retrieval hint.
Results are data-dependent and remain in logged tool history until compaction; maxSearchResults bounds search-hit count.
Append-only result text follows the reusable request prefix and does not invalidate earlier cache entries.
These limits define when this package is a poor fit or needs special operational care. They are current package constraints, not a task backlog.
cwd equality, so symlink-equivalent paths do not share authority.Runtime invariant: No companion is published. This read-only model adapter owns no event or mutable data relationship beyond the registries that already validate registration.