Skip to main content

dsh-session-stats/packages/session/session-statsOfficial

175.3kStars19.0kForks0Issues752Watchers

Whole-log conversation counts and wall times projection (sessionStats) for the DeepSeek Harness

Evidence3/5methodologySourceInstallMaintenanceDSH versionSecurity scan
Machine-auditedInstall commandRepo verifieddsh-plugin topicLicenseREADMEAI wiki

ⓘ This plugin is a sub-package of the deepseek-ai/deepseek-harness monorepo — stars and activity count the whole repository.

Language
TypeScript
License
MIT
Branch
master
ai-agentscordisdshdsh-plugin

Install

cmdweb profile
$ dsh plugin --profile web add npm:@deepseek-ai/dsh-session-stats

Run the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial

Install via your agent

Install the DeepSeek Harness plugin deepseek-ai/deepseek-harness/packages/session/session-stats for me: review the repository at https://github.com/deepseek-ai/deepseek-harness first, then run the install command and verify the plugin loads successfully.

Paste this instruction to the DSH Web GUI assistant — it will install and verify for you.

English | 中文

Function plugin registering the sessionStats projection unit: whole-log conversation figures — turn/step counts and the LLM, tool, first-token, and decode wall times — folded from step boundaries, stream chunks, tool pairs, and assembled assistant messages, and served through the session-projection seam (registry snapshot, change feed, and every projection carrier: history tail page, session/projection push frames, session list rows). Clients render full-session figures that paging and compaction cannot change; the reference consumer is the web chat stats strip, whose window fold mirrors these field names as its no-unit fallback.

Fold semantics

  • steps counts step/end events. The agent loop appends exactly one per entered step, in a finally, so completed, failed, cancelled, and max-tokens steps all count. Counting assembled assistant messages instead would overcount max-tokens usage-host messages (empty content, excluded from the surface) and undercount cancelled steps (aborted before the message assembles).
  • turns counts distinct turns carrying at least one closed step; rejected or empty turns (closed with no step) are uncounted. Turn numbers are host-assigned and monotonic per session, so the fold keeps only the last counted turn.
  • llmMs sums step/start → assistant/message per step that assembled a message (retry waits inside the step are model time, as in the window fold).
  • ttftMs/ttftSteps sum and count step/start → first non-empty delta chunk; the first attempt's boundary survives an in-step llm/retry (window resetForRetry parity).
  • decodeMs/decodeTokens sum first token → assembled message and the provider-reported output tokens, only over steps carrying both.
  • toolMs sums tool/call → tool/result pairs matched by callId; unresolved calls are dropped at turn/end (results land within their turn).
  • Every field is 0 until its first contributing event. A composed registry always serves the key, so clients read the value, never key presence.

Composition

- id: session-stats
  name: '@deepseek-ai/dsh-session-stats'

Injects sessionProjections — the plugin's whole purpose; in assemblies without the registry the fiber stays pending and nothing registers.

Model Experience

None, as the plugin only computes a client-facing read model of already-logged session events and touches no prompt, message, schema, stream, or tool result.

KV Cache effect

None; the plugin never assembles or sends provider requests.

Known Limitations and Deferred Work

  • Steps count work attempted, not visible output — a step that failed before producing any visible content still closed with step/end and counts; a step interrupted by a crash counts after the session reloads, when crash recovery appends its synthetic step/end (interruptedTurnClosers in dsh-session).
  • A cancelled step is counted but untimed — no assistant message assembles, so its partial stream time enters no wall-time figure, matching the window fold's untimed interrupted node; a max-tokens usage-host message conversely contributes model time the surface does not show.
  • Counts are log-scoped, not surface-scoped — steps whose messages were later compacted away stay counted; the figures describe the whole session, not the current model-visible surface.
  • Mounted only in the web-app bundle — other assemblies serve no sessionStats key, and their consumers fall back to window-scoped counting (the web stats strip's fallback path).

Read the usage guide →

Install steps, key points, FAQ and compatibility for this plugin — auto-derived from indexed fields.

Listing badge

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/deepseek-ai/deepseek-harness/packages/session/session-stats)

Paste this markdown into your GitHub README to link back to this listing. The badge only states the listing — not a security endorsement.

← Back to plugin directory