Commit Graph
62 Commits
Author SHA1 Message Date
bowenliang123 d72b6f8d12 feat: support dsh 0.1.7-rc.1 as the supported V4 line
Every runtime seam the plugin rides is source-identical from
0.1.7-alpha.2, so no code changes; the supported V4 baseline moves
from 0.1.7-alpha.2 to 0.1.7-rc.1 (the alphas leave the matrix). rc.1
adds the harness-side plugin peer-compatibility admission gate
(evaluatePluginCompatibility); the plugin's >=0.1.2-rc.1 dsh peers
satisfy it under the gate's includePrerelease check, so the bundle
composes with no exemption. The release workflow fetches the rc.1 tag
for the compat matrix and points the plugin checker at the npm next
dist-tag (0.1.7-rc.1).
2026-09-24 11:05:05 +08:00
bowenliang123 091a8b3521 chore: release v0.55.0 2026-09-23 17:20:56 +08:00
bowenliang123 a2874ebeb8 docs: describe the shipped V4 preferences surface
The User preferences delta moves from deferred to shipped: one schemastery
entry schema serves both generations, the browser seat and transport per
line, the deliberate strict-key relaxation, and the settings.yaml legacy
import that carries persisted values into the profile entry. The README's
Settings section names where the card lives on each release.
2026-09-23 15:59:15 +08:00
bowenliang123 6064731c9f chore(compat): advance the V4 baseline to dsh 0.1.7-alpha.2
dsh 0.1.7-alpha.2 introduces no breaking change for the plugin: the
vendored cordis 4.0.3 -> 4.0.4 bump is version-metadata only, the
durable log stays at V4 with an unchanged event vocabulary, and every
seam the plugin rides (session-projection registry, right-Sidebar tab
and navigation faces, connection RPC, settings namespace, agent-loop
pre-step, ui-primitives icons and markdown labels, the plugins.bundle
config slot) is source-identical or additively extended. The remaining
deltas are internal to the harness: an optional turnWindow on history
page requests, client-module batch-failure recovery, and host-side
tool-result retention (the already-documented deferred image-offload
area).

Per the one-representative-per-generation convention, replace the
alpha.1 baseline with alpha.2 across the declared releases, the seam
matrix, the release workflow's tag fetch, and the compatibility page.
The compat matrix now boots the real alpha.2 sources on cordis 4.0.4.
2026-09-23 00:11:24 +08:00
bowenliang123 390399ff24 feat(compat): support dsh 0.1.7-alpha.1
Add the V4 baseline (session format 4, cordis 4.0.3): the fold's switched
event families are unchanged, so its entry rides the V3 seam face with a
per-generation settings surface — the `register` face and the retired
`settings.plugin.item` slot are asserted BOTH ways (present through V3,
absent on V4+), and the modal dock probe now pins the sidebar-leading
grid track the measure actually reads instead of one generation's exact
template. New ICON_SEAMS probe: every icon the client renders must exist
in at least one spelling per tag, so a platform rename fails the matrix
instead of the browser. Declare the release in the manifest, fetch its
tag in the release workflow, and document the V4 generation with its
known deltas (deferred: the preferences card's Plugins-page migration,
image-offload accounting).
2026-09-22 16:28:46 +08:00
bowenliang123 95f187d308 feat: show the DeepSeek platform balance in the Context Dashboard
The dashboard header gains a capsule with the DeepSeek open-platform
balance (issue #80). The host mounts a /api/dsh-context/balance route
through the same Connection exact-route registry as the detail and
backfill routes, resolves the connection facts per request the way
llm-deepseek serves its own requests (its llm-deepseek settings section
for the credential ref and endpoint override, the credentials service
for the key), and reads /user/balance behind a short TTL cache — the
key never leaves the host process.

Every face is optional and runtime-proved: a deployment without the
DeepSeek provider, without a resolvable credential, without the route
registry, or whose platform read fails (network, non-2xx, malformed
payload, hostile entries dropped whole) answers a typed null, and the
capsule renders nothing — no pill, no spinner, no error state. The
entry follows the display locale (zh → CNY) with the account's first
currency as fallback, and the tooltip carries the granted/topped-up
breakdown.
2026-09-20 11:16:39 +08:00
Bowen Liang bf0bba886f docs: document the on-demand projection warm-up in the compatibility page
The warm-up paragraphs (the lastUser stateVersion bump and the
contextActivity dashboard key) now describe the trigger route, the
one-pass-per-process arm, the migration-refusal skip accounting, and the
deployment shapes that never arm the pass.
2026-09-17 22:46:53 +08:00
bowenliang123 80a8abd038 fix(host): refold version-stale timeline rows in the startup warm-up 2026-09-16 18:18:05 +08:00
bowenliang123 872c24c0ce feat(client): show the last user message on session cards 2026-09-16 18:05:14 +08:00
Bowen Liang dc6decc25a docs: document the Context Dashboard and its activity backfill
README gains the dashboard feature entry, a Use-it row, and a section with
the panel screenshot; compatibility.md records the additive contextActivity
key (stateVersion 1, no row invalidation) and the startup warm-up that
cold-reads sessions missing their projection rows.
2026-09-16 08:56:47 +08:00
Bowen Liang e33deda752 feat(host): add the contextActivity daily-ledger projection with a cold-read backfill
The Context Dashboard's heatmap and session cards read the session list's
projection column, which only serves durable cache rows. The new
contextActivity unit folds each assistant settlement into a per-day ledger
(billed tokens + completed requests, keyed by local day, 400-day retention)
alongside the existing contextTimeline/contextHeaders units.

A session folded before a unit existed — or one that predates the plugin
entirely — has no row until it next goes live, so a one-pass warm-up
(backfill.ts) cold-reads every such session's durable log through the
projection cache's own cold-read ladder (coldSnapshot): each unit seeds
from its cached rows, folds the remainder, and the refreshed checkpoint is
written back. Live sessions are skipped (a throwing liveness probe skips
conservatively too), unreadable logs are logged and skipped per session,
and the whole pass rides a deferred inject across the
sessionQuery/sessionProjectionCache/sessionPersistence/sessions services.
2026-09-16 08:55:49 +08:00
Bowen Liang 3708012037 docs(readme): update context-trend.png 2026-09-15 22:53:49 +08:00
Bowen Liang b211f951c7 docs(readme): update history-delta.png 2026-09-15 22:45:10 +08:00
Bowen Liang dae94c225a fix(client): backfill cold relatives' composition in the Agent network
The session-list block serves projection values only from the host's
projection cache, so a relative that never attached since the timeline unit
last changed lists pressure-only (occupancy without composition) and its
ring degraded to the single fallback arc — every subagent ring looked green
until its session was opened. The card now fetches those nodes' slim heads
from the /api detail route (one read per session per page, failures sticky)
and re-folds the forest with the row's missing contextTimeline injected; a
row's own value always wins, and any fetch failure degrades back to the
pressure-only ring.
2026-09-15 08:33:23 +08:00
bowenliang123 92bfcbd110 docs: update README with screenshots and new context stats and improved section titles 2026-09-14 15:16:22 +08:00
bowenliang123 59f9cae7ec docs: update README with screenshots and new context stats and improved section titles 2026-09-14 14:49:03 +08:00
Bowen Liang afd9af63f0 feat: surface skill occupancy through a dedicated skill-injection category
The fold buckets all three skill-content shapes the harness injects — the
<available_skills> catalog digest, a user-explicit /name invocation's
instructions message, and the content a skill-tool load returns — into a
new 'skill' composition category instead of burying them in inject/tool
(closes #66). Skill-tool loads keep their tool identity stamped, so the
call tallies, hit counts, and failure marking are unchanged.

stateVersion 18 → 19: the per-category sums change shape, so cached rows
refold from the durable log on upgrade (docs/compatibility.md).

The trend chart, overview, Token donut, stats, and the Context browser all
gain the seventh bucket (orange-500); the browser's skill section pins its
rows like injects, so long sessions keep listing what the sums count.
2026-09-14 01:11:37 +08:00
Bowen Liang 2379dd92db docs: describe the models.dev-priced cost estimate and the stateVersion 18 upgrade
The Context Stats card row now names the models.dev source (DeepSeek
peak/off-peak aware), and the compatibility page's upgrade section
drops the stale 'stateVersion stays unchanged' claim: the cost rework
bumps it 16 -> 18, so cached rows refold and idle sessions re-fold on
their next live event.
2026-09-13 00:35:26 +08:00
Bowen Liang fb50c1ab8e docs(readme): update context-overview.png 2026-09-12 00:44:57 +08:00
bowenliang123 97ae8ff2ee feat(client): preview File Activity files in the right Sidebar
Clicking a file name in the File Activity card now opens the file's preview
tab in the right Sidebar — the shipped document-preview viewer, reached the
same way the built-in Files sidebar reaches it — on harnesses that serve that
column (dsh 0.1.5-rc.1+). The address is built with the harness's own
browser-safe `fileAddressFor`, inlined by the client bundle exactly as the
Sidebar's file types inline it, so a path under the workspace collapses to the
session-relative spelling and every route to one file settles on one tab.

The capability is OPTIONAL by contract, like the tab registration itself: the
opener reads `ctx.sidebarRight.openResource` through the runtime boundary and
re-proves it per call, and reports whether the column took the address. An
absent column, a face that refuses the address, or an unencodable log path
falls through to the pre-existing system-open behavior, so an older line is
fully functional and nothing becomes an inert click. Pattern rows and
directory targets are never previewable.

Adds the `@deepseek-ai/dsh-util-workspace-path` dev dependency (itself
browser-safe), allows it in the client bundle purity gate, pins the
resource-navigation seam in the compat matrix, and covers the address builder,
the card's preview-then-fallback click, and the optional opener per baseline.
2026-09-11 18:45:28 +08:00
bowenliang123 3f22d9745e docs: make compatibility.md the single source for the compatibility rules
AGENTS.md carried the full compatibility matrix — per-generation event
vocabulary, the moving V3 client seams, and the runtime gate's internals —
duplicating what docs/compatibility.md exists to document. Restate only the
requirements there and point at that page, keeping the agent-facing anchors
that have no user-facing home: the single shape-driven fold path
(`logShapes.ts`'s `firstTokenTimeOfStream` / `replaceRangeOf` / `isTokenChunk`,
`applyTimeline`), the upstream implementation mirrors (`dsh-token-meter`'s
`estimateSystemMessage`, `dsh-llm`'s `assistantStreamFirstTokenTime`), the
gated-inject rule for newer-only seams, and the baseline verification
mechanism.

docs/compatibility.md gains the previously undocumented baseline gate
(including the running-tree-first probe and fail-open behavior) and names the
V2 stream paths in full.
2026-09-11 16:20:10 +08:00
bowenliang123 4c909e6aad docs: refresh the context overview screenshot
Captured on the v0.49.1 build, showing the colourful document emblem
on the right-Sidebar Context tab.
2026-09-10 18:09:28 +08:00
bowenliang123 86fb240ce3 compat: move the V3 baseline to dsh 0.1.5-rc.1
The supported V3 line follows the newest release: the baseline becomes
v0.1.5-rc.1 (tag, vendored session package) and the declared release map
names 0.1.5-rc.1. The release workflow fetches the new tag, and the
disposable-profile install/uninstall was verified for real against the
published 0.1.5-rc.1 CLI (install OK -> 1 composed row -> uninstall OK ->
0 rows).

At 0.1.5-rc.1 `SidebarRightGuideEntry` regained its optional `description`
line, so the guideEntry probe pins order/title/description/icon and the
now-pointless "absent" assertion plumbing is dropped.

Every support/capability label states the 0.1.5-rc.1+ floor;
`0.1.5-alpha.x+` remains only as the V3 LOG-generation label (the format
first appeared at 0.1.5-alpha.1). The docs record the verified matrix and
the seam movement across alpha.1/alpha.2/rc.1.
2026-09-10 11:37:04 +08:00
Bowen Liang a4bd0d40f9 compat: move the V3 baseline to dsh 0.1.5-alpha.2
The supported V3 line follows the newest release: the baseline becomes
v0.1.5-alpha.2 (tag, vendored session package) and the declared release
map names 0.1.5-alpha.2. The release workflow fetches the new tag.

The alpha.2 client seams are pinned in the matrix: the conversation
surface moved under the keyed `main` panel (`main.conversation`) while
the plugin's `conversation.view` seat keeps its name, and
`SidebarRightGuideEntry` dropped its description line. tests/baselines.ts
therefore gains a guideEntry probe (the fields present plus the dropped
copy field asserted absent).

Every support/capability label states the 0.1.5-alpha.2+ floor;
`0.1.5-alpha.x+` remains only as the V3 LOG-generation label. The docs
record the verified matrix, the two moved seams, and the install row
that still waits on the CLI's npm publication (the `alpha` dist-tag
lags the release).
2026-09-09 23:03:10 +08:00
Bowen Liang b93b0e24f9 feat(client): add the Context tab to the right Sidebar 2026-09-09 02:43:04 +08:00
Bowen Liang 952f985e69 docs: declare the 0.1.3-alpha.2 and 0.1.5-alpha.1 releases as compatible
Record the three session-log generations the plugin folds, how the seam matrix and the statistics differential verify them, and the one caveat of keeping the projection stateVersion stable (a session folded by an older build keeps its cached figures until its log moves; delete its cache row to force a refold).
2026-09-09 02:10:00 +08:00
Bowen Liang c7604d0fad release: v0.42.0
Bump the version for release.
2026-09-05 02:27:27 +08:00
bowenliang123 33068ee1c9 compat: narrow the support matrix to dsh 0.1.2-rc.1+
The install/runtime compatibility floor moves from 0.1.1-rc2+ and
0.1.2-alpha2+ to 0.1.2-rc.1+. The 0.1.1 line and the 0.1.2-alpha previews
leave the support matrix, so every pre-0.1.2 fallback they existed for is
removed outright:

- client history: drop the legacy `connection.api.sessions.history` face,
  the `result`-nested envelope, and the `events` rows field — the gateway
  `remote.session.page` face and its ClientResult envelope are the only
  served shapes.
- client image loader: drop the pre-0.1.2 `conversation.resolveImage` face;
  `uiConversation.imageUrl` only.
- client node join: drop the pre-0.1.2 `useSession.nodes` seat;
  `useChat`'s ChatSnapshot `legacy.nodes` only (UseSessionLike removed).
- tests/baselines.ts: single baseline `v0.1.2-rc.1`; HostSeam dropped (the
  registry generation hard-codes header-passing init and seq-0 eager
  seeding, now mirrored with the exact `init(header, inheritedEventCount)`
  arity); ClientSeam slimmed to the consumed probes.
- deps: devDeps re-pinned to the 0.1.2-rc.1 generation (types compile
  against the real rc.1 surfaces); cordis ^4.0.2 and schemastery ^3.18.2
  per the rc.1 peer requirements; dsh-scope/dsh-invariants declared as dev
  deps; peer floors >=0.1.2-rc.1; dshReleases table trimmed.
- release workflow fetches only the dsh-v0.1.2-rc.1 tag; docs updated
  (AGENTS.md, README, docs/compatibility.md).
- verified against the rc.1 sources: the tool-attribution map (names and
  packages, incl. the documented `subagent_fork` alias), MCP naming, the
  page/imageUrl/legacy.nodes faces, and the registry contract.
2026-09-04 17:23:08 +08:00
Bowen Liang 48806646d8 test(compat): extend the seam matrix to the alpha.5 and rc.1 baselines
Add the two heads of the declared 0.1.2 lines as matrix baselines: the
preview window's head (dsh-v0.1.2-alpha.5, where the DSH STORE
latest-three compatibility window currently ends) and the next-channel
release candidate (dsh-v0.1.2-rc.1). Their seam faces verified identical
to alpha.2, so the generation's client faces collapse into one shared
CLIENT_0_1_2 constant.

The new baselines surfaced a real staging drift: since 0.1.2-alpha.3 the
session-projection sources import SessionLogOffset/SessionSeq from
@deepseek-ai/dsh-session as runtime values, so the compat driver now
installs each baseline's own vendored dsh-session release next to cordis
(Baseline.session).

The release workflow fetches the two new baseline tags before testing.

docs/compatibility.md records the per-release verification evidence,
including the 2026-09-03 disposable-profile install/uninstall matrix
across 0.1.1-rc.2, 0.1.2-alpha.3/4/5 and 0.1.2-rc.1 (ref
AI-Scarlett/DSH-Store#439).
2026-09-03 23:12:19 +08:00
bowenliang123 4f89f9ebc0 docs: optimize sceenshots 2026-08-29 13:09:40 +08:00
bowenliang123 7a232454fb doc: restore agent-nework screenshot 2026-08-29 13:09:02 +08:00
bowenliang123 c136e6e0db docs(screenshots): refresh README screenshots from live sessions
- Re-capture all dashboard cards at a larger viewport: overview, current
  context, trend, delta mode, events (with a compaction), file activity,
  agent network (with subagents), browser tools/filter/result, image
  payload, /context entry + modal, and the settings card.
- Drop superseded shots: context-browser.png, context-browser-search.png,
  history-detail.png.
2026-08-29 12:19:54 +08:00
bowenliang123 3862a48e47 docs: showcase the browser row filters and tool source chips
Two live screenshots: the tool-schema category with per-plugin source
chips and its filter/sort toolbar, and tool results narrowed by a
text filter — embedded next to the attribution and filter bullets.
2026-08-28 10:17:04 +08:00
Bowen Liang 1a31b33191 feat: Agent Network card — live multi-agent context map in the Context tab (#21)
A new Agent Network card at the foot of the Context tab: the whole agent family (current agent, ancestors, subagents at any depth) as a live, fully responsive node map — fused context rings per session, family-colored lineage, halo status language, hover inspector, and click-to-jump into any agent's session. 693 tests, 100% coverage.
2026-08-26 23:09:19 +08:00
bowenliang123 6ee52bf3ed docs: keep docs end-user faced — drop the internal design/research notes and record the rule 2026-08-26 13:41:57 +08:00
bowenliang123 66a5f0361d docs(readme): add the File Activity screenshot and describe its sort modes and row details 2026-08-26 13:37:12 +08:00
Bowen Liang 5aca062963 chore: switch npm run to pnpm run in scripts and comments 2026-08-25 19:55:15 +08:00
bowenliang123 ebd2c78673 docs(readme): rewrite the Context Trend section around the step brief
New hero screenshot (context-trend.png) showing the User/In/Response
rows; the section is now bulleted with the step brief first. Drop the
stale history-step-hover.png (unreferenced, predates the tooltip's
reply preview).
2026-08-25 15:04:24 +08:00
Bowen Liang 8574ba51c1 docs(readme): document delta trend mode, vs-previous-turn diff, and tool result rendering 2026-08-24 22:42:13 +08:00
bowenliang123 d0b8f0daa0 chore(config): trim comments in build config, scripts and docs tooling
Compress the CSS-channel note in tsdown.config.ts, the vitest lane
explainer and the release workflow header; fix the install-hooks header
(git only consults .git/hooks when core.hooksPath is unset); slim the
social-preview generator and bundle-patch comments.
2026-08-24 17:16:40 +08:00
bowenliang123 57ff90dfc3 chore: unify the repo on TypeScript — tests, vitest config, and the social-preview generator move from .mjs to .ts
vitest (esbuild) and Node 24 type stripping run the .ts files directly;
helper imports go extensionless like src. Typecheck stays scoped to src/
as before.
2026-08-23 05:11:27 +08:00
bowenliang123 61d3e16477 docs: update context-browser-images.png 2026-08-22 19:57:21 +08:00
bowenliang123 7df335114a docs(research): dsh monorepo and plugin practices investigation 2026-08-22 02:09:21 +08:00
bowenliang123 af14769c0f feat(client): card-style message detail with image attachment rendering
Adapt to DeepSeek Harness 0.1.1's multimodal pipeline (and the vision
capability of DeepSeek-V4-Flash-Vision-Exp): a user message carrying
durable image refs expands into a card layout — prose in the text card,
image attachments as thumbnail cards (name, normalized + original
dimensions, stored size), and unrecognized blocks as raw JSON. Image
blocks in assistant messages and tool results (e.g. read_image output)
now render too, instead of being dropped or dumped as JSON.

Thumbnails load through the harness conversation service's resolveImage
(the same session-authorized loader the chat history uses); when the
service is absent the cards degrade to metadata only. The text card
uses an un-padded RichCard variant so all cards align at one indent.
2026-08-22 01:43:37 +08:00
bowenliang123 dab80c6232 build: switch to tsup and declare harness runtime deps as peers
Replace the hand-rolled esbuild script (scripts/build.mjs) with a single
tsup config that already existed but never ran: tsup re-bundles the config
into a temp .mjs, so import.meta.url pointed at the temp dir and the
package.json read failed, silently leaving no entries. Read the manifest
from process.cwd() instead. The host half now keeps @deepseek-ai/dsh-session
external (resolving to the harness's single runtime instance) instead of
inlining it; the client half keeps the __ModuleLoader__.load wrap.

Align deps with the official dsh convention: runtime harness packages
(cordis, dsh-session, client-ui-primitives, react) move to peerDependencies
with dev mirrors (client-only ones optional); zod stays a dependency;
exact rc pins become caret ranges (^0.1.0-rc.8) so rc9/0.2 releases don't
break installs. Drop the esbuild devDependency (tsup brings its own) and
add tsup itself.
2026-08-20 16:09:16 +08:00
Bowen Liang b6668cdf5b docs: add the /context entry screenshot and refresh the command image 2026-08-20 04:59:25 +08:00
bowenliang123 15a822d237 doc: refresh social preview with updated context-overview screenshot
Add docs/social-preview/ template + Node.js generator (playwright-core,
2x render + high-quality downsample) and register npm run social-preview.
2026-08-19 17:37:29 +08:00
bowenliang123 686151c74c doc: update context-overview screenshot for context browser 2026-08-19 17:03:32 +08:00
Bowen Liang 46195d58bd docs: illustrate the Context browser with a screenshot and its new capabilities
Add docs/context-browser.png to the browser section, plus the two
behaviors that shipped with it: trend-chart hover linkage and honest
coverage (archive reconstruction notes, auto-loading older history,
always-listed live injections). The History section mentions the hover
linkage too.
2026-08-18 04:25:51 +08:00
bowenliang123 ada2a4f1ef docs: update screenshots and github social preview image 2026-08-17 16:47:57 +08:00