Skip to content

Releases: proDreams/dsh-tidewatch

v2.1.1

Choose a tag to compare

@github-actions github-actions released this 26 Oct 10:27
  • Chinese statutory holidays now bill as off-peak:
    • The official pricing footnote defines peak as Beijing Mon–Fri 09:00–12:00 and 14:00–18:00 excluding Chinese
      statutory holidays
      , with weekends and those holidays off-peak all day. The plugin only carried the weekend rule,
      so every weekday holiday inside the windows billed at double the correct rate.
    • A built-in table now carries the 2026 arrangement — 33 days from the State Council notice of 2025-11-04 — in both
      lib/pricing.js and the client bundle, and the parity check keeps the two copies identical. It drives
      isPeakHour and peakPhaseAt on the host side plus isPeakHourUTC, nextPhase and buildLocalSlots in the card,
      so the tier, the countdown and the window table agree: a holiday collapses to one off-peak row and the panel notes
      the rule.
    • Make-up workdays on borrowed weekends stay off-peak, because the same footnote bills every weekend as off-peak.
    • The table is maintained by hand: extend both copies every November, when the next year's notice is published
      (docs/PORTING.md carries the runbook step). 2026 is the only year the peak era can bill.
  • Fixed the countdown before each Monday's first peak:
    • peakPhaseAt and nextPhase collected switch points from two days back, so Monday 00:00–01:00 UTC (08:00–09:00
      Beijing) had no previous switch (Friday) and returned null; the card fell back to "off-peak / 00:00" with no
      countdown every Monday morning.
    • The collection window is now ±16 days, which also covers the long holiday breaks (Spring Festival ≈ 11 days,
      National Day ≈ 8 days).
  • Tests: twelve holiday and countdown checks (90 passed).

v2.1.0

Choose a tag to compare

@github-actions github-actions released this 26 Oct 10:13
  • Session cost now includes subagent sessions:
    • DSH runs every subagent in its own session, so one task is billed across several sessions while the costUsage
      projection — and therefore the card — only saw the main one. The card now walks the sessions list from the current
      session (byId[id].parentId) and adds the descendants' costUsage buckets, so the total, the token breakdown and
      the per-model list describe the whole task.
    • The subagent share is shown under the total (incl. subagents N · $X). N counts the descendants that actually
      contributed, so the count and the amount always agree.
    • A child projection that has not loaded yet is skipped silently and picked up on the next snapshot tick, a malformed
      parentId chain cannot loop, and the rollup stays off when the shell cannot name the current session.
    • Shell-synthesized external subagents never enter the list, so their cost is not rolled up.
  • Fixed the bridge-owner lookup:
    • sessionListCurrentId read row.sessionId, but shell rows are identified by row.id; the lookup therefore always
      returned undefined, and only the tolerant fallback kept the cost visible. It now reads the real field (id, with
      sessionId as a compatibility fallback), so the ownership check does its job and the rollup has an id to walk.
  • Documented the reporting scope: the card covers session model calls (now including subagents) and excludes
    experimental Auto review, title generation, compaction, web-search wrappers and other chats — those never enter a
    session event stream and belong to the account-level usage.
  • Tests: five rollup checks plus the real row shape for the ownership lookup (78 passed).

v2.0.1

Choose a tag to compare

@github-actions github-actions released this 11 Oct 11:31
  • Fixed the session cost on dsh 0.2.0-rc.2:
    • The card keyed its bridge ownership on sessions.current, a field the sessions-list snapshot no longer publishes
      (it is now { ids, byId, phase, projectionsBySession }). The owner never matched the probe's session id, so usage
      stayed null and the cost was pinned to 0.0000, while the phase and the countdown — which never read usage —
      kept rendering correctly.
    • The owner is now resolved from the row the main view retains (retainedBy.mainView), and the check stays tolerant:
      when the list cannot tell, the card trusts the probe, which clears the bridge on mount so a session switch still
      cannot surface a stale amount.
    • Reported and fixed by @sh-222 in
      #1.
  • Tests: three regression checks in node test/verify.mjs (73 passed).

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 16 Sep 10:27
  • Real i18n instead of hard-coded Chinese:
    • The card now reads all copy through the DeepSeek Harness locale service: it registers its own tidewatch
      namespace and declares it on the badge slot, so the framework injects the t seat and re-renders the card on every
      language switch.
    • Ships zh, en and ru dictionaries with an identical key set; the test suite fails if they drift apart.
    • Offers Russian to the shared language catalog, so «Русский» appears in Settings → Language. Other plugins resolve
      it through the English fallback.
    • On a shell without the locale service the card falls back to the browser language instead of one hard-coded
      language, and it never declares a locale seat it cannot serve.
    • Every string is a {placeholder} template: copy is never assembled from translated fragments.
  • Local-time window table:
    • The official UTC windows are mapped onto the viewer's own calendar day and rendered with Intl; the tier itself is
      still decided in UTC (the official definition).
    • Intl formatting for money, compact token counts and zero-padded countdowns — Russian gets a decimal comma and its
      own compact suffixes, Chinese its own compact units.
    • The default currency now follows the interface language: Chinese → CNY, otherwise USD. An explicit choice is
      remembered.
  • Redesigned card (tide gauge):
    • Elevated glass panel instead of the flat bg-overlay slab, micro-caps labels and mono figures with tabular
      numerals; the phase accent (amber or green) is the only saturated colour.
    • A "tide line" shows how much of the current phase has elapsed, the active row gets a NOW marker with an accent
      bar, and every row carries a phase pill.
    • Segmented currency control and an SVG disclosure chevron.
    • Theme tokens keep scheme-aware fallbacks, so the card is correct in light and dark themes and on hosts without a
      theme layer.
  • Accessibility:
    • The badge and the disclosure rows are real buttons with focus rings and aria-expanded / aria-pressed states;
      the tide line exposes a progressbar role.
  • Fixed:
    • Phantom scrollbar on hover over the session-cost row: the official Tooltip renders a position:fixed bubble as a
      sibling, and the panel is both a scroll container and — because of backdrop-filter — a containing block for fixed
      descendants, so the bubble inflated the panel's scrollable overflow. The row now uses a native title.
    • On phones the expanded panel could exceed the space above the badge: its height budget is now measured from the
      badge's real top edge, and scrollbar-gutter: stable keeps a real scrollbar from shifting the layout.
  • Docs:
    • README rewritten as English (default) and Russian (README-RU.md), with screenshots rendered from the real bundle.
    • All Chinese copy removed from the code, metadata and docs — only the zh dictionary keeps Chinese, and the test
      suite now guards the READMEs as well.
    • docs/PORTING.md rescoped to the portable core, the DSH wiring, the host-interface mapping and the maintenance
      runbook.
  • Detached from the original fork:
    • repository, homepage and bugs now point at proDreams/dsh-tidewatch.
    • LICENSE keeps the original copyright notice and adds the fork author's; README.en.md was dropped in favour of
      the English default README.md.
  • Releases:
    • A version tag now produces a GitHub Release with the CHANGELOG.md section as its body and an installable
      dsh-tidewatch-<version>.tgz attached, so installs can be pinned without a registry.
    • No npm publish: the npm name dsh-tidewatch belongs to the original author, and DeepSeek Harness installs git tags
      and tarballs natively.
  • Tests: node test/verify.mjs grew from 39 to 70 checks. It now materializes the real client bundle against a stub
    React and a fake plugin context, covering the dictionaries, the fallback chain, Intl formatting, the time-zone window
    table and the panel height budget.