Repository navigation
Releases
v0.1.0-beta.5
This release tracks DSH 0.1.2-alpha.5. On that line the previous release exported nothing.
DSH removed the Session.events array in favour of snapshotEvents() / requestContext(). The plugin read session.events while building a session's recorder, before storing it — so the throw repeated on every event rather than once. Each one was contained and logged as greptimedb-otel: dropped a telemetry record. The plugin mounted, satisfied inject: ['sessions'], and wrote nothing: traces, metrics, and logs all empty, with nothing in the failure that named a version mismatch.
The route seed it was scanning the log for now has a first-class accessor. session.requestContext() is the fold DSH already maintains over request/context, so the reverse scan is gone.
todo/write also moved out of the session core into @deepseek-ai/dsh-tool-todo, which declares it by augmenting @deepseek-ai/dsh-session/types. Its projection branch is unchanged; it just needs the declaration in scope now.
Which version to install
| Plugin | npm tag | DSH |
|---|---|---|
0.1.0-beta.5 |
beta |
0.1.2-alpha.5 |
0.1.0-beta.4 and earlier |
latest |
0.1.1-rc.2 |
DSH's own latest is still 0.1.1-rc.2, so npm latest deliberately stays on 0.1.0-beta.4 and a bare dsh plugin add keeps installing the release that works there. Ask for the beta tag to follow the alpha line:
dsh plugin --profile web add @tma1-ai/dsh-plugin-greptimedb@betaThe two cannot be spanned by one release: session.requestContext() does not exist on 0.1.1-rc.2, and a mismatch in either direction produces the silent drop described above rather than a load error.
Also in this release
dsh-llmrenamedCallIdtoToolCallId, anddsh-agent-loopnow injectssessionProjections— both reflected in the test compositions.- cordis moved to
^4.0.2. - The schemastery floor is
^3.18.2, matching whatdsh-settingsrequires. Below it a host install can end up with two copies, and theConfigschema this plugin builds would not be the class the Loader validates against.
No configuration changed, and nothing changed about what gets exported or what content releases.
Verified on 0.1.2-alpha.5 against a live GreptimeDB v1.2.0-beta.2: 96 tests passing with none skipped, including the tier that boots a real Loader, drives a real agent loop, and reads the OTLP bytes off the wire in all three content modes.
Full changelog: v0.1.0-beta.4...v0.1.0-beta.5
v0.1.0-beta.4
A git install of this repo produced a package that resolved but could not load.
lib/ is gitignored, and the build only ran on prepublishOnly — a hook npm and pnpm skip for a git dependency. So installing the repo directly landed a package without its build output.
That path is not hypothetical. The community catalogs list this plugin with a github: install command, and on 0.1.0-beta.3 it left behind:
node_modules/@tma1-ai/dsh-plugin-greptimedb/
cordis.patch.yml LICENSE package.json README.md README.zh.md
$ node -e "import('@tma1-ai/dsh-plugin-greptimedb')"
FAILED: ERR_MODULE_NOT_FOUND — .../lib/index.js
prepare is npm's hook for exactly this. It runs on publish, on local install, and on git install, so it replaces prepublishOnly rather than joining it.
Install paths
| Path | beta.3 | beta.4 |
|---|---|---|
| npm package name (what the README recommends) | loads | loads, unchanged |
github: without onlyBuiltDependencies |
installs, then ERR_MODULE_NOT_FOUND |
install fails outright, dsh prints the fix |
github: with the build allowed |
fails the same way | builds lib/, loads |
pnpm 10 blocks dependency build scripts by default, which is why the middle row is now a loud failure carrying instructions rather than an install that quietly cannot load.
Installing from npm is untouched: a published tarball already carries lib/ and never runs prepare.
Nothing else changed — no configuration, no change to what gets exported.
Full changelog: v0.1.0-beta.3...v0.1.0-beta.4
v0.1.0-beta.3
Two new dashboards, and an install that no longer breaks when DSH cuts a release.
Dashboards
Cost prices the token counts with four rates you set in the dashboard's own variables — uncached input, cache read, cache write, output — and shows what the money bought and why the bill grows. The defaults are DeepSeek's published deepseek-v4-flash peak rates. The Currency picker switches the symbol every panel formats with, not the rates, so retype those when you switch.
Sessions covers how long a conversation ran, how many turns it took, and where it failed.
Agent loop now also shows where a turn's time went, split across model calls and tools. Turn-outcome spend is attributed per model call rather than to the turn as a whole.
That makes seven dashboards, all provisioned by the compose stack. An existing deployment needs the grafana/ directory refreshed to pick up the new ones; nothing in the exported data changed, so they read history that is already in the database.
Installing
The dsh-agent / dsh-llm / dsh-session peers were pinned to 0.1.1-rc.2, so every DSH release broke the install. All three are imported as types only and appear nowhere in the built JavaScript, so the pin protected nothing at runtime. Widening the range would not have helped either: every DSH version is a prerelease, and semver matches no prerelease a range does not name outright, so any range fails on the next -rc. All three are gone. @deepseek-ai/cordis stays.
One consequence — the published .d.ts still imports those DSH types, so type-checking this package outside a DSH install needs skipLibCheck on. Inside a DSH profile nothing changes.
The Grafana stack no longer needs a clone. Provisioning reads the dashboards off disk, so fetch just that directory:
curl -fsSL https://github.com/tma1-ai/dsh-otel/archive/main.tar.gz \
| tar -xz --strip-components=1 dsh-otel-main/grafana
cd grafana && docker compose up -dUpgrading
dsh plugin --profile <name> add @tma1-ai/dsh-plugin-greptimedbNo configuration changes, and no change to what gets exported.
Full changelog: v0.1.0-beta.2...v0.1.0-beta.3
v0.1.0-beta.2
Discoverability and install-path fixes. No runtime change — the plugin code is identical to 0.1.0-beta.1.
- Added the
dsh-pluginnpm keyword. The community plugin catalogs (dsh-plugin,dsh-find-plugin,dsh-plugin-console,@1e0zj/dsh-plugin-mall) all index on it, and without it this package did not appear innpm search dsh-plugin. - README:
dsh pluginforwards to whicheverpnpmis on your PATH, and a dsh profile directory is its own pnpm workspace root. pnpm 9 refuses to install there and silently ignores the linker settings dsh writes, so use pnpm 10 or newer. - README: pointed at GreptimeDB's own console at http://localhost:4000/dashboard/, which is enough to check tables and run ad-hoc SQL before bringing up Grafana.
- CI and the Grafana compose stack now run GreptimeDB v1.2.0-beta.2, matching what the README tells you to start.
dsh plugin --profile headless add @tma1-ai/dsh-plugin-greptimedb@betav0.1.0-beta.1
First published build. A DeepSeek Harness plugin that exports the agent loop to GreptimeDB as OpenTelemetry traces, metrics, and logs. It mounts on any composition that has sessions, adds no extension point, and derives everything from the session event stream.
Traces — one invoke_agent span per turn, with chat and execute_tool spans as siblings correlated by dsh.step, rebuilt from event timestamps rather than a wall clock. GenAI semantic conventions throughout; a failed model call carries error.type and no exception payload.
Metrics — token usage split into billed input, output, and a cache read/write/reasoning breakdown, plus turn, step, and tool-invocation counters and separate duration histograms for agent runs, inference, and tool execution.
Logs — session events projected through an explicit allowlist. Every exported field is named in one module, so an event type added by a later DSH version exports identity only.
content defaults to none — structure and accounting leave the machine, payloads do not. full adds messages, tool arguments, and results; full+prompt also releases the system prompt and tool schemas. The e2e suite boots the packed tarball through the real Loader, drives a real agent loop, and asserts every sentinel against the OTLP bytes a collector receives, in all three modes.
Five Grafana dashboards under grafana/, with 42 panel queries checked by grafana/verify.mjs.
Retention defaults to ttl: 180d, applied when GreptimeDB auto-creates the log and trace tables. Metric tables are not covered — see Known limitations and greptimedb#8951.
Requires DSH 0.1.1-rc.2 and GreptimeDB v1.2.0-beta.2.
dsh plugin --profile <name> add @tma1-ai/dsh-plugin-greptimedb@beta