keman-ai/dsh-skin-pack--packages-dsh-whale-girl5

dsh-whale-girl

Whale Girl Lounge — a light skin for DeepSeek Harness: three levels of pale blue, pearl white and deep-sea navy, with a full-bleed whale girl cover on the new-session page

包名
dsh-whale-girl
版本
0.1.1
许可证
MIT
最近更新
2026年8月27日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:keman-ai/dsh-skin-pack#83e92004f8c3b52b9bf66d75aa96ddbc709bde13&path:packages/dsh-whale-girl

dsh-whale-girl · Whale Girl Lounge

A light skin for DeepSeek Harness (dsh): three levels of pale blue, pearl white and deep-sea navy, with a full-bleed whale girl cover on the new-session page.

New session page

What it changes

SurfaceContent
PaletteA full set of --dsw-alias-* / --dsw-specific-* semantic tokens on the light base. The primary action is DeepSeek Blue, green is reserved for online and success, and amber for actions needing confirmation
New sessionA full whale girl cover with the composer at its lower edge. The hero appears on the empty screen only — it collapses on entering a conversation or the trajectory, returning to real working state
Brand slotsThe sidebar and new-session marks become a whale silhouette, with the subtitle Whale Girl Lounge
Status dockAlways present on the conversation page: a reduced cover plus three cards — session state, usage and plan — collapsible (the choice is remembered)
Component languageAn 8–12px radius, 1px low-contrast borders, almost no shadow

What the status dock shows

CardFieldsSource
Waiting on youTools awaiting approval, questions awaiting an answerConversationSnapshot.pending (approval / question). Appears only when something is genuinely waiting, on an amber card
Current SessionState (ready / busy)ConversationSnapshot.running
How long this turn and the current tool have runThe startTime of the unfinished turn in turnTimings and runningCalls[].time, ticking every second
Inbox (queued and steering message counts)queue's placement
ModelThe latest assistant message's provenance.model (a Trajectory view node)
ContextOccupancy % with a bar, and token loadcontextPressure's projectedTokens / contextWindow
The composition bar: System / tool schema / conversationThe contextBreakdown projection
PermissionThe active permission and sandbox mode, with a descriptionThe permissions projection (folded from permission/preset, sandbox/mode and approval/policy)
UsageInput / output / cache hits / LLM and tool time / turns and stepsThe tokenUsage and sessionStats projections
PlanTodos completed and the current oneThe todos projection (the card is absent when there is no list)

⚠️ Composition is not a total: the three contextBreakdown figures use fixed-density estimates (systematically low for Chinese and JSON schema) and do not add up to the token load above, which is anchored to the provider's reported value. The UI says so too; do not sum them.

The figures share a source and an accounting with the official line below the composer (context uses projectedTokens and drops immediately after compaction; input sums three disjoint billing buckets; time is llmMs + toolMs, not wall clock).

What is not done: the five "Assistant Systems online" rows in the prototype's right column are pure decoration with no matching heartbeat projection, so nothing is fabricated. The dock also does not take over the harness's own details rail — that one holds "click a tool call to see its Input / Output", the only lead there is when debugging. This skin opens its own, and both coexist.

The dock collapses automatically on the new-session page (hero) and while a session replays (settling): there is no state to show then, and the cover should not be chopped up. It also collapses below 1180px.

Install

Skin market (recommended): search for "Whale Girl" in dsh's skin market and install, then restart dsh.

Manual install (during development):

npm install && npm run build
DST=~/.dsh/profiles/web/node_modules/dsh-whale-girl
mkdir -p "$DST" && cp -R lib cordis.patch.yml skin.json package.json README.md "$DST/"
# then add dsh-whale-girl to ~/.dsh/profiles/web/package.json's dependencies and dsh.profile.bundles

After changing it you must restart dsh: the profile tree has to be recomposed, and without a restart the UI stays as it was.

🔴 The side effect of autoApply

Installing switches to this skin by default (autoApply, default true), because the harness does not persist third-party theme ids: ui-theme's setTheme writes only built-in preferences to settings.yaml, and a third-party id lives only in the current process.

Also worth knowing: the built-in Settings → Appearance has only three cells, light / dark / follow system, and third-party themes are not among them. Switching manually requires the skin market's own panel (Settings → Skin Market), so with autoApply off you have to reselect there on every start.

The costs are:

  • It reapplies on every refresh. Switching away lasts only for that session; a refresh returns to Whale Girl.
  • To change permanently: set autoApply to false in the config, or uninstall the plugin.

It is implemented as an 8-second window after startup, during which every theme change is pressed back to this skin (long enough to outlast the Host preference snapshot's override). After the window the plugin lets go and stops competing.

Version requirements

Requires dsh 0.1.1-rc.2 or newer. The brand-slot takeover relies on slot priority shadowing (only equal priorities count as a conflict; different priorities shadow, and the lower number renders). On older versions these three registrations throw and are swallowed, merely falling back to the official brand mark, while the palette and cover keep working.

Uninstall

Installed from the market, uninstall from the market. A manual install has three places to clear (deleting node_modules alone is not an uninstall):

rm -rf ~/.dsh/profiles/web/node_modules/dsh-whale-girl
# remove the package from the profile package.json's dependencies and dsh.profile.bundles
# remove the matching insert row from the profile's cordis.patch.yml (this is where a market install lives)

Then restart dsh: the UI returns to a built-in theme and the official brand mark comes back on its own.

ui-theme.preference in settings.yaml is your own built-in theme preference, not something this plugin wrote (third-party ids never reach disk), so leave it alone.

Assets

The cover is a 1672×941 illustration compressed to webp (q92, 427 KB) and inlined into the bundle rather than linked from an image host — from an image host — it has to work offline and on an intranet. How it is generated and its resolution ceiling are documented at the top of src/client/cover.generated.ts.

Development

npm run check   # tsc --noEmit
npm run build   # produces lib/index.js (host half) and lib/client.js (browser half)

lib/ must be committed: skins install via github:owner/repo, which installs the build output from the repository; if the source moves and the output does not, people install the old version (and the market uninstalls the package outright over the missing entry file).

License

MIT © Science Roam Limited