Commit Graph
13 Commits
Author SHA1 Message Date
bowenliang123 d2d0510ea0 feat(ui): anchor the history chart at the newest bars by default
On first mount (and on session switch, via a sessionId key remount) the
chart scrolls to the right edge so the latest steps are visible
immediately; afterwards it only sticks to the end while the user is near
it, so scrolling back into earlier turns/steps is never fought. The edge
fades follow the scroll position as before. The render test's fake React
now keeps useRef stable across renders (like React), which is what the
effect needs to see the container.
2026-08-14 22:40:23 +08:00
bowenliang123 8f7e77d233 fix(ui): render the full history — earlier turns/steps were unreachable
The chart sliced to the newest 80 requests, so anything older was never
rendered. All requests the host provides (capped at 160) are now rendered
and reachable by horizontal scrolling; the scrollbar is thicker and
higher-contrast, edge fades appear whenever more history sits beyond the
viewport, and the hint mentions the sideways scroll.
2026-08-14 22:36:19 +08:00
bowenliang123 a18e4d1050 feat(ui): history granularity toggle — one bar per step or per turn
A Step/Turn segmented control in the trend card header switches the chart
granularity. Turn mode collapses each turn into a single bar showing its
LAST step's record (the context state when the turn finished); the turn
strip, hover linking, and detail panel all follow the aggregated bars.
2026-08-14 19:55:03 +08:00
bowenliang123 60aa6d43db feat(ui): render the turn strip as color blocks aligned to the steps
Each turn is now a colored block whose width spans exactly its bars'
columns (same grid math), so the partition lines up with the steps above.
Consecutive turns cycle a palette; the T-label sits on the block with a
tooltip fallback for narrow single-bar turns. Hover highlighting
(bidirectional with the bars) is unchanged.
2026-08-14 19:42:10 +08:00
bowenliang123 f13bdddbf3 feat(ui): turn strip under the history chart with hover highlighting
The turn tick row is now an interactive strip: hovering a turn block
highlights that turn's bars in the chart (tinted columns), and hovering a
bar highlights its turn block — both follow one shared hover-only state,
so nothing glows by default. Leaving the strip or the chart clears it.
2026-08-14 19:39:26 +08:00
bowenliang123 ed63b7f0d8 feat(ui): themed hover tooltip on the composition bar segments
The Current composition stacked bar (and the request-detail mini bar)
now shows a theme-native tooltip on hover per segment — category, token
count, and share of the total — positioned at the pointer and clamped
inside the bar. Replaces the native title attribute; the wrapper keeps
the tooltip outside the rounded/clipped stack.
2026-08-14 19:25:06 +08:00
bowenliang123 f8ac2f45cb feat(ui): hover a history bar to preview its breakdown below
Hovering a trend bar links the detail panel to that request immediately
(hover wins over the pinned selection, which takes over again when the
pointer leaves; both fall back to the newest request). The hovered bar
gets a dashed outline, and the chart clears the preview on mouse leave.
2026-08-14 19:24:28 +08:00
bowenliang123 0e81996a41 feat: port both halves to strict TypeScript; bump to 0.4.0
- src/host.ts: typed fold model (Snapshot/RequestRecord/SurfaceNode/
  ContextEventRecord), local drift-free service contracts for
  connection/sessions/sessionQuery via declare module augmentation
- src/client.cts: typed client bundle (React types via @types/react,
  locale/slots/connection contracts, typed component props); CJS-flavored
  so esbuild keeps require/module.exports despite type:module
- tsconfig.json: strict, noEmit, verbatimModuleSyntax (runtime-free of
  imports in the client bundle is enforced by the type system)
- scripts/build.mjs: esbuild transpile for both halves, loader wrap and
  smoke checks unchanged; npm run typecheck added to the test suite
- note: @deepseek-ai/* service type packages publish broken dependency
  chains on npm (dsh-paths 404), so local contracts replace them
2026-08-14 19:03:16 +08:00
bowenliang123 8085308997 feat(ui): fixed-width scrollable history chart with turn-range ticks
- bars use a fixed 14px column width, so sparse histories no longer
  stretch and dense histories scroll horizontally instead of compressing
- the chart sticks to the newest bars unless the user scrolls away
- a turn tick row under the bars groups consecutive requests of the same
  T into one labeled range (T1 spans its bars with a connector line)
- test-client now renders the view tree with a stateful fake React and
  asserts bar count, scroll container, and turn-range geometry
2026-08-14 18:02:29 +08:00
bowenliang123 446c220505 scripts: fix empty-array expansion under bash 3.2 set -u 2026-08-14 17:18:19 +08:00
bowenliang123 975d1f2179 scripts: support NPM_OTP for 2FA accounts in publish 2026-08-14 17:14:42 +08:00
bowenliang123 efb2fff4c2 scripts: keep npm cache in-repo for sandboxed environments 2026-08-14 17:12:51 +08:00
bowenliang123 cd7282ad53 refactor: package dsh-context as an installable dsh bundle
- src/host.js: ESM Cordis plugin; serve snapshots over the generic
  Connection RPC channel /dsh-context (ctx.connection.rpc) instead of the
  dynamic-runner harness.handle seat; lazily resolve sessions/sessionQuery.
- src/client.js: browser half in web-boot bundle shape (require('react'),
  inject connection/slots/locale, plugin-owned style tag, setInterval poll).
- package.json: dsh.bundle (cordis.patch.yml layer) + dsh.client (web UI)
  manifests, ./client export.
- cordis.patch.yml: inserts the dsh-context loader row.
- scripts/build.mjs: zero-dependency build of lib/index.js + lib/client.js
  with smoke checks; scripts/test-host.mjs + scripts/test-client.mjs:
  functional tests for both halves.
- scripts/publish.sh: npm publish driven by NPM_TOKEN, auto version bump.
2026-08-14 17:11:56 +08:00