Commit Graph
440 Commits
Author SHA1 Message Date
Bowen Liang 32ae8efe48 docs(agents): update compatibility note for dsh version 0.1.2-alpha2 2026-08-31 00:29:44 +08:00
Bowen Liang 4bf1ffb6e4 release: v0.38.4 2026-08-31 00:27:57 +08:00
Bowen Liang 1c9802792d fix(host): carry zod as a real dependency, not an auto-installed peer
DSH profiles install out-of-tree plugins with `nodeLinker: hoisted` and
`autoInstallPeers: false` (packages/boot/app-boot/src/profile.ts), so a
peer-only zod was never materialized for the plugin: the host half's
`import { z } from "zod"` silently resolved to whichever zod the
profile's other packages happened to hoist. A profile whose hoisted zod
predates the Standard Schema `~standard` protocol (zod < 3.24) leaves
`Config["~standard"]` undefined and cordis's config validation throws a
bare TypeError, failing the whole plugin tree (#35).

Declare zod ^4.4.3 under dependencies so every install materializes a
standard-schema-capable copy (deduped with the host's own when
compatible), and under devDependencies so this workspace stops leaning
on a transitive devDep for it. The tsdown host build keeps every
production-section dependency external, so the bundle is unchanged.
2026-08-31 00:25:34 +08:00
Bowen Liang 09aabe01d3 test(host): inline the lossless-JSON probe dropped from dsh-session
`snapshotJsonValue` left @deepseek-ai/dsh-session in 0.1.2-alpha.2 (moved
to dsh-util-values). Inline the same validate-and-detach semantics in the
fold driver helper so the specs compile and run against every supported
dsh face.
2026-08-31 00:13:37 +08:00
Bowen Liang 648b601f57 fix(client): pass the markdown chrome the 0.1.2-alpha primitives require
MarkdownText on the 0.1.2-alpha line serves fence copy buttons and the
footnote heading through a required `labels` prop (renamed from the
optional `codeLabels`); rendering fenced code or footnotes without it
broke the browser's markdown sections. Pass a localized, reference-stable
chrome — pre-0.1.2 faces ignore the extra prop and render as before.
2026-08-31 00:13:36 +08:00
Bowen Liang 0a9dc869fb fix(host): register the settings namespace without the removed brand helper
dsh 0.1.2-alpha.2 removed the `settingsNamespace()` export from
@deepseek-ai/dsh-settings, so the named import failed at plugin load time
on that host. Register the raw literal (valid under every version's
namespace pattern) and keep a branded cast for the pre-0.1.2 type face,
mirroring the migration dsh applied to its own packages.
2026-08-31 00:13:27 +08:00
bowenliang123 951f088f61 release: v0.38.3 2026-08-30 18:18:14 +08:00
bowenliang123 7f89d7bdf3 fix(client): float the chart hover tip above the plot
The tip anchored to the chart's top INSIDE the plot — exactly where the tall
bars live — so it covered the hovered bar and its neighbours. It now
bottom-anchors 4px above the chart top (over the card header, clear of the
bars and the ✂ markers) while syncTip keeps gluing it horizontally to the
bar's visible slice. Pure CSS re-anchoring: no JS geometry change.
2026-08-30 18:17:54 +08:00
bowenliang123 eba64c99a6 fix(client): keep trend strip labels whole and hold the chart hover tip inside the card
Turn-strip labels render at natural width, overflowing narrow blocks instead
of ellipsizing to "…" on two-digit turns; updateTurnLabels now also thins
colliding labels (one reaching the previously kept label's box drops to
visibility:hidden), so consecutive 14px turn bars stay readable while
scrolling.

The hover tip caps at the chart wrapper's width and wraps instead of hanging
past the card into neighbouring panes or off-screen, and is restructured into
two rows: the bar's identity and its anchor total — the SAME actual value the
bar height and the axis graduation scale against (provider-reported prompt
when available, heuristic total otherwise); delta mode keeps the signed net
row. Identity phrasing follows the granularity: a single-step turn aggregate
reads "第 1 轮 · 共 1 步 / Turn 1 · 1 step" (new tip.turn1 key) instead of the
last step's index, and a record missing stepCount/turn degrades defensively.

The tip no longer shows the request time or the reply preview: the replyTips
prop, brief.replyTipsOf, the contextView wiring, and the tip.actual i18n keys
are removed.

Closes #34
2026-08-30 17:54:18 +08:00
bowenliang123 d765f0a31b feat(client): graduate the trend chart axis with quartile ticks, guides, and a zero baseline
Both total and delta modes now read off a full 0 / ¼ / ½ / ¾ / 1 graduation:
the axis gains the missing ¾/¼ labels (delta marks carry the value at each
fixed height on the uniform px-per-token scale), dashed guides align the bars
with every mark (darkened to --dsw-alias-border-l2), and a solid zero baseline
anchors the '0' label in both modes. A delta quarter mark whose label box would
overlap the zero label yields entirely — label and guide together.
2026-08-30 12:32:59 +08:00
bowenliang123 10acac3e4a release: v0.38.2 2026-08-29 22:41:25 +08:00
bowenliang123 d0a935e634 i18n(client): capitalize the timing card's center label, fix the en call-count form
'en' only: the donut center sub reads 'Active Time', and the per-row call
count moves the multiplication mark before the figure with a space
('Model calls × 5' over 'Model calls 5×'). The zh forms (总活跃时长,
'71次') are unchanged.
2026-08-29 22:38:34 +08:00
bowenliang123 f14de3bfd2 fix(client): contain the remaining Context-tab overflow paths
A DOM overflow probe over the tab's body cards at 280-620px column widths
flagged two real leaks beyond the head cards already fixed:

- The trend card's turn strip drew its full content width (bars x 16px) as
  a sibling of the chart scroller with no clipping, so zebra blocks painted
  past the card edge into the neighboring column on long sessions. The
  strip now clips at the chart wrap; the visible-slice label sync is
  untouched.
- A browser Section head with a long mono call name (MCP tool names have no
  break points) pushed the status/meta group out of the section card. The
  name now ellipsizes and the Section label carries a title tooltip; the
  file card's op-log tool chip gets the same max-width + ellipsis + title.

Probe is clean at 493/373/280/620px columns after the fixes.
2026-08-29 22:10:06 +08:00
bowenliang123 f453289a84 fix(client): reflow the head stats cards at narrow pane widths
1080p with the host sidebar open, or OS display scaling at 125%, squeezes
each head card below ~320px of content width — the donut legends' figure
columns collapsed to ellipses and the share column spilled past the card
edge. The head row keeps its equal-fourths single band, but each card now
is an inline-size container: below the 320px threshold the donut cards
stack the ring over the full-width legend, the context card's 2x4 grid
folds to 2 columns, and the legend clips inside the card instead of
overflowing it. Cards at or above the threshold render exactly as before,
and engines without container queries keep the wide layout.

The plugin-info rows and the slice rows' figure column also carry title
tooltips so an ellipsized value stays recoverable at any width.

Verified at 1040/1244/700/1660px pane widths with a DOM overflow probe:
no element crosses its card boundary in any case.
2026-08-29 21:14:45 +08:00
bowenliang123 a8cd10199e test(host): pin the plain-JSON fold-state invariant on the contextHeaders unit
The headers fold helper now asserts every folded state is lossless JSON via
the framework's own snapshotJsonValue, matching the timeline specs; a new
hostile case covers the wrong-shaped plain JSON a committed log can hold and
pins verbatim survival of empty-object tool schemas. A comment on the
verbatim schema entry documents its session.append purification dependency.
2026-08-29 18:57:54 +08:00
bowenliang123 2e54440297 refactor(client): dedupe tooltip chrome into .lc-tip; adopt DSH tokens
The four styled DOM bubbles (stat cost tip, brief tag tip, file-card
delta tip, chart hover tip) each carried the same hand-rolled chrome
(layer-2 fill, hairline frame, 6px radius, float shadow, hover reveal).
A shared .lc-tip rule in base.css now owns that chrome — tips pair it
with their own class and keep only local positioning, width caps and
whitespace. The chart tip keeps z-index 5 and nowrap locally.

Token audit against dsh's ui-theme catalog:
- modal backdrop: hardcoded rgba(0,0,0,0.45) now rides
  --dsw-alias-bg-mask-1 (the harness Modal and our own lightbox mask),
  fallback keeps the old value on older dsh builds.
- monospace stacks (error message, call name/state, param type, arg
  value) now ride --ds-font-family-code so code text matches the
  harness code font; the fallback stack stays for older builds.
- tip shadows ride --dsw-shadow-lv3, the floating-layer shadow the
  harness primitives use, fallback keeps the old tight shadow.

Kept as-is: the neutral translucent grays (128,128,128/x) for tracks
and zero lines and the violet category accents (#a855f7/#8b5cf6) —
the catalog has no tokens with those semantics.
2026-08-29 14:11:32 +08:00
bowenliang123 ef2cae84c3 refactor(client): split styles.css into per-component sheets
The single 576-line global sheet grew with every card (trend chart,
browser, file activity, agent graph...), so every component change
opened the same shared file. Cut it mechanically into 14 cohesive
sheets under src/client/styles/ — one per component surface plus a
base sheet (root/card chrome, the lc-gran toggle, list anatomy,
error states, the composer-hiding rule).

Rules are byte-identical to the previous single sheet; index.ts
imports them in the original section order so the cascade is
unchanged (base first — later sheets re-tint the shared gran chrome
at equal specificity). bundle-smoke.mjs now asserts one style tag
per sheet instead of the single dsh-context/styles.css tag.
2026-08-29 14:06:52 +08:00
bowenliang123 040b56d926 feat(client): hide zero-value buckets on the Token Stats card
Zero buckets stay hidden once any usage is reported — the always-zero
cache write no longer shows on DeepSeek sessions — while the empty
state keeps the four-row fallback. Billing and cache-hit accounting
are unchanged; writes still render when providers report them.
2026-08-29 13:52:51 +08:00
bowenliang123 166a7ac21e docs(agents): update usage examples for code exploration with codegraph 2026-08-29 13:50:52 +08:00
bowenliang123 d8e90a1a7e docs(agents): add mandatory usage guidelines for code exploration with codegraph 2026-08-29 13:42:59 +08:00
bowenliang123 b7e06ad42c docs(agents): add mandatory usage guidelines for code exploration with codegraph 2026-08-29 13:41:39 +08:00
bowenliang123 59cd1be501 feat(client): expand the plugin settings card on the Open-in-Settings jump
The settings shell keeps its open/section state in private component
state and offers no plugin-facing open face, but the card registered on
settings.plugin.item is ours. After the jump's settings-trigger click
survives, it raises a short-lived in-bundle expand request; the card
consumes it on mount and lands open, scrolled into view. Degraded jumps
raise no request, and the request expires in 5s, so no stale signal
surfaces on a later manual visit.
2026-08-29 13:32:09 +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 5f2fc9a265 release: v0.38.1 2026-08-29 12:23:41 +08:00
bowenliang123 368d2c9d9b docs(readme): rewrite usage guide with a concise card-by-card structure
- Lead with a three-entry table (Context tab, /context command, settings)
  and a card-to-question table for the dashboard.
- One section per card with a fresh screenshot and short bullets; keep
  the interesting bits (step brief, compaction marks, Delta mode, tool
  source chips, image payloads, vs-previous-turn diff, agent network).
- Trim wording by ~40% and add a short 'Good to know' block.
2026-08-29 12:20:04 +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 a53bace57c fix(scripts): count the assistant-actions slot in the bundle smoke 2026-08-29 10:46:48 +08:00
bowenliang123 bd24a7b474 docs(AGENTS): update README.md guidelines for embedding images 2026-08-29 10:43:25 +08:00
bowenliang123 1c45bc2bab release: v0.38.0 2026-08-29 10:35:10 +08:00
bowenliang123 8aec839816 feat(context): draw card and control edges with the border-l2 token
Also: settings entry copy polish (reworded descriptions, unbolded row
value) and AGENTS.md adds style tokens to the harness reuse guidance.
2026-08-29 10:32:43 +08:00
bowenliang123 b3746a5340 docs(AGENTS): update testing instructions to require combined linting, testing, and building command 2026-08-29 09:55:26 +08:00
bowenliang123 0090fa3a57 feat(plugin-info): add a settings entry below the GitHub row
The harness settings panel keeps its open state inside the shell
component and exposes no plugin-facing open face, so the entry drives
the real chrome best-effort: click the sidebar's dialog trigger, then
the Plugins section nav row (matched by its shipped en/zh labels).
Every step is individually guarded - a shell without a matching
trigger or section degrades the whole jump to a silent no-op, and no
path can throw into the render.
2026-08-29 09:54:24 +08:00
bowenliang123 bc6f2f160a docs(AGENTS): remove mandatory pre-step section from code exploration protocol 2026-08-29 09:48:53 +08:00
bowenliang123 520e3445d9 docs(readme): describe the four-card stats head row 2026-08-29 09:22:10 +08:00
bowenliang123 5f9bc0d2dc feat(context): split the stats board into context/timing/token cards
The host fold derives whole-session timing totals from the durable
step/tool lifecycle (step/start -> assistant/message -> step/end;
tool/call -> tool/result by callId): step wall time, the model-call
slice, and per-call tool durations with a bounded per-name tally
(stateVersion 11; cached rows refold from the log).

The head row becomes four equal cards: an eight-cell context grid
(shape stats, event tally, cost estimate with its rate tooltip), a
token ring around the cache-hit share, and a timing ring splitting
model calls vs tool runs. Legend rows pair each donut slice with
its label, quantity, and share - no bars; the ring center type
scales with the ring so it never touches the stroke. Wire guards,
i18n, styles, and hostile-input test fixtures included.
2026-08-29 09:22:09 +08:00
bowenliang123 e9b6d70330 docs(AGENTS): clarify mandatory pre-step for code analysis and exploration 2026-08-29 02:19:35 +08:00
bowenliang123 15e35028d7 docs(AGENTS): emphasize the importance of updating the coding agent's to-do list during all phases of work 2026-08-29 02:18:08 +08:00
bowenliang123 5b6d27047f docs(AGENTS): update 2026-08-29 02:13:06 +08:00
bowenliang123 6654954236 feat(browser): open the lone row with a single-item category
Every one-item category (not just system) now auto-expands its only row
when the category opens, so one click lands on the content directly:
the lone tool schema and the lone surface node join the system prompt.
Multi-item categories keep opening collapsed.
2026-08-29 02:12:27 +08:00
bowenliang123 55b9e786f2 docs(AGENTS): update code exploration instructions for clarity and mandatory steps 2026-08-29 02:04:36 +08:00
bowenliang123 e9f54420ce docs(AGENTS): update code exploration instructions for clarity and mandatory steps 2026-08-29 02:00:53 +08:00
bowenliang123 fb40ec9d99 docs(AGENTS): update code graph exploration commands in documentation 2026-08-29 01:55:20 +08:00
bowenliang123 1686022ce2 docs(AGENTS): update code graph exploration commands in documentation 2026-08-29 01:53:28 +08:00
bowenliang123 0c8312763e feat(client): jump from a chat reply to its turn in the Context tab
Add an icon to each finalized reply's assistant-actions row that opens
the Context tab pinned to that reply's turn: the click resolves the
reply's request seq off the served node seat, records it in a per-session
relay, and activates the tab; the view consumes the relay once its
projection data is in, flips the trend chart to turn bars, pins and
centers the turn's aggregate, and resets the shared scroller. Every hop
degrades quietly (unknown seat, unresolvable seq, missing tab, hostile
nodes, aged-out turn).
2026-08-29 01:44:51 +08:00
bowenliang123 84d4f57a6f docs(AGENTS): add instructions for exploring and syncing the code graph 2026-08-29 01:42:12 +08:00
bowenliang123 4a9a95e4f7 feat: add .gitignore to exclude CodeGraph data files 2026-08-29 01:33:23 +08:00
bowenliang123 86333a80d5 feat(client): link the trend card highlights to the shared category hover
Hovering a category in the Context browser (or the overview legend/bar)
now lights that category across the trend card: the matching segment in
EVERY chart bar (total and delta modes), the detail panel's composition
bar, and its per-category rows.

The chart highlight rides a plain container attribute (`data-catdim`) +
static per-segment `data-cat` keys, so the dim/brighten pairing is pure
CSS and the memoized bars never re-render on a cross-card hover. The
detail bar mirrors the key one-way with its tooltip off (a cross-card
hover must not float a second tip), and the detail rows reuse the
legend-chip idiom: tinted background, bold label, ring on the color dot.
The overview's 'free' key stays filtered, as in the browser's live link.
2026-08-29 00:53:48 +08:00
bowenliang123 de4d6f327a build: kill previous watch instance when starting pnpm watch
Track the tsdown watcher pid in .tmp/watch.pid; a new watch kills the
previous instance first and the pid file is cleaned up on exit.
2026-08-29 00:46:32 +08:00
bowenliang123 48e5efa7b3 docs(AGENTS): add instructions for updating dependencies after git pull 2026-08-28 23:18:15 +08:00