A conversation-view tab for DeepSeek Harness Web showing solar/lunar dates, ganzhi year/month/day, Chinese zodiac, 24 solar terms, festivals, China public holidays including make-up workdays, and multi-city weather from free sources without an API key.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-panda-calendar
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:runcat-tommy/dsh-panda-calendar
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
A token-free calendar & weather plugin for DeepSeek Harness Web. Adds a "Panda Calendar (熊猫日历)" tab to the session header (next to 对话/Chat, Trajectory and 诗词/Poetry, right after Poetry), giving you solar/lunar dates, ganzhi, Chinese zodiac, solar terms, festivals, China public holidays (incl. make-up workdays) and multi-city weather in one place.
- Lunar engine: built-in offline data tables for 1900–2100, generated from and validated day-by-day against lunar-javascript (6tail, MIT) — works offline, no API key
- Public holidays: free public feed holiday-cn (MIT, based on State Council announcements) with built-in 2025/2026 snapshots plus rule-based fallback
- Weather / geolocation: Open-Meteo (current + 3-day), BigDataCloud reverse geocoding, ip-api.com fallback — all free, no sign-up, no API key
- Pure front-end (no backend); state stays local
- Requires a
dsh webbuild that supports client plugins (same mechanism as dsh-chinese-poetry)
Features
- Today card: local solar date/weekday → lunar (labelled Beijing time) · ganzhi year/month/day · zodiac → solar terms → festival chips (Chinese primary, English in tooltip) → 🇨🇳 statutory status (off / make-up workday, incl. "holiday day N/M") → ✍ Send to chat (writes the day summary into the input box; press Enter to hand it to the AI)
- Month grid: 6×7 calendar with solar day + lunar/term/festival subtitle per cell; red 休 / grey 班 statutory badges; today outlined; click any day to inspect it in the today card (cross-month clicks jump months)
- City weather: locate chain (browser geolocation → ip-api.com → default cities) + manual city search (Open-Meteo Geocoding with
language=zh, country disambiguation), switch/remove cities, current + 3-day, refresh — the city list and active city persist to localStorage, surviving plugin updates and reinstalls - Public holidays: red = off day, grey = make-up workday; unpublished/offline years fall back to snapshots and rule tables, with the data source noted
- Bilingual UI: zh/en follows the dsh UI language
Install
Option 1: npm package (once published)
dsh plugin --profile web add dsh-panda-calendar
Option 2: from source (development)
cd dsh-panda-calendar
dsh plugin --profile web add .
For live development use a linked install (source changes take effect after a Web UI restart):
dsh plugin --profile web add link:.
Restart dsh web after installing, open any session — the Panda Calendar tab appears in the header bar.
If you don't have pnpm yet:
npm i -g pnpm(dsh plugindepends on pnpm).
Usage
- Open a session and click the Panda Calendar tab.
- The today card shows today's lunar date, ganzhi, zodiac, terms, festivals and statutory status.
- Click ✍ Send to chat to drop that day's summary into the input box (it is not sent automatically); switch back to Chat and press Enter to have the AI elaborate.
- Flip months, use Today, or click any day for details; add/switch cities from the weather card.
Data sources & credits
| Data | Source | License |
|---|---|---|
| Lunar / ganzhi / zodiac / terms (built-in 1900–2100 tables) | 6tail/lunar-javascript | MIT |
| China public holidays (yearly JSON, State Council basis) | imldres/holiday-cn | MIT |
| Weather (current + 3-day daily) | Open-Meteo | CC-BY 4.0 (data), free API |
| Reverse geocoding (lat/lon → city) | BigDataCloud reverse-geocode-client | Free, no key |
| IP geolocation fallback | ip-api.com | Free, no key (non-commercial) |
Updating public-holiday data (for users / maintainers)
The plugin ships with published statutory holiday data built in (休/班 markers show offline too). Each time the government publishes the next year's holiday schedule, run this command to refresh the built-in data:
node tools/gen-holiday-snapshot.mjs
It fetches the latest schedule, writes it into the bundle and regenerates the test fixtures; afterwards restart dsh web (Ctrl+C → run dsh web again) to apply it.
💡 The plugin page shows the same plain-language hint (with a "copy command" button) whenever the built-in data does not yet cover next year — copy, run in a terminal, restart. No need to memorise the command.
Development
npm test # node --test (evals the client bundle with stubbed react/fetch — zero network, deterministic)
The suite covers: calendar engine (911 day-by-day fixtures + leap months / Spring-Festival year boundary / term rules / round-trip / out-of-range), festival rules (incl. Easter and lunar-year boundary), statutory normalization & badges, weather parsing & city search, view models (month grid / today card / send text) and a registration smoke test.
Layout:
dsh-panda-calendar/
├── package.json # dsh.bundle.patch + dsh.client declaration
├── cordis.patch.yml # profile bundle patch
├── LICENSE # MIT
├── lib/
│ ├── index.js # node half (no-op host)
│ └── client.js # browser half: ModuleLoader bundle (single file, no build)
├── tools/ # reproducible table/snapshot generators
├── test/ # node --test suite
└── docs/ # feasibility / Q&A / design (implementation memo)
Roadmap
- M0: skeleton + "Panda Calendar" tab registration (order 30, after Poetry)
- M1: CalendarCore (lunar/ganzhi/zodiac/terms, 1900–2100 day-validated) + festival rules
- M2: statutory layer (holiday-cn primary + 2025/2026 snapshots + rule fallback); weather layer (Open-Meteo + city management)
- M3: view — today card + month grid (休/班 badges, terms, festivals) + city weather; click-to-inspect days
- M4: locate chain (browser → ip-api → defaults) + weather auto-refresh per city list
- M5: send-to-chat (setDraft + switch to Chat view), bilingual README, CHANGELOG, npm publish prep
Changelog
See CHANGELOG.md.
Links
More in this category
zhu1090093659/dsh-web#packages/dsh-task-board★ 6885
Task board for the dsh web GUI: a sidebar multi-column kanban whose cards run in real DSH agent sessions and can also be scheduled with cron expressions, executed host-side even with the browser closed.
zhu1090093659/dsh-web#packages/dsh-web-all★ 6885
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
omdsh-dev/DSH-better-sidebar★ 3338
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
ccch1mneyyy/dsh-TUI★ 2837
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 1726
A fixed-corner whale widget showing DeepSeek balance, today usage, per-turn cost and random talk lines, with sound effects and a menu.
Devin-AXIS/deepseek-design#deepseek-idesign★ 722
Visual design studio for websites, app prototypes, posters, cards, reports, and magazines, with templates, direct element editing, selection-aware AI draft handoff, and export.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.