Introduction

When engaging in long-term conversations with an AI companion in DSH, guessing “how she is feeling right now” often relies on tone or rigid keyword rules. This approach is unstable and prone to disconnecting from the actual conversation. Furthermore, embedding the entire state into the system prompt disrupts the prefix cache, leading to increased costs over time.

dsh-feiyu-mood (Fish’s Mood) takes a different approach: after each conversation turn, it utilizes a brief model call to determine the direction of the mood shift. The numeric value, seven emotion metrics, and timeline are stored locally. Whether to “tell her” about the mood, which model to use for judgment, and the confidence threshold are all configurable in the settings page. A draggable widget is located in the bottom right corner; click it to view the current status. The following section introduces what it is, how to install it, and points to note during usage.

What is this

  • Plugin Name: dsh-feiyu-mood (Display Name: Fish’s Mood / 鱼的心情)
  • Maintainer: Yuuyuko-uu
  • Community Category: Fun / Theming
  • Positioning: Giving your AI companion a self-determined, visible mood—automatically judging rises and falls after each turn, displaying values, emotions, and timeline via a widget; not based on rigid keyword guessing or random numbers.

All data is stored locally in <DSH_HOME>/feiyu-mood/. The plugin does not connect to the internet or upload mood records to third-party servers; the judgment step utilizes the model provider you configured yourself.

Core Mechanism

What happens after a conversation turn

The process can be summarized as:

You say something (or she initiates / scheduled task triggers)
   ↓
She finishes the reply (turn-stopping)
   ↓
Plugin submits "What you said + What she replied" to the model: Which way did the mood go this turn?
   ↓
Model returns: moodDelta, increases for seven emotions, a reason, confidence
   ↓
Update mood value and write to timeline; inject "that momentary feeling" to her only once (if allowed by settings)

The default baseline mood value is 70, ranging from 0–100; the seven emotions are Happy, Grounded, Sweet, Heartache, Worried, Sad, and Jealous. Turns with no change are not written to the timeline.

Why telling her doesn’t break prefix caching

The mood is injected via systemPrompt.context (a separate section in the system prompt), not by altering the main body of the system prompt, thus preserving DSH’s prefix cache. The “Phrase she will hear” section in the settings page allows you to preview whether it will be spoken, the actual text, and the timestamp.

When confidence is below the threshold, the change is only recorded in the background and not voiced to her, preventing low-certainty guesses from being spoken. A change is only spoken once; repeated injections simply become background noise.

Judgment Criteria: Who is speaking

For the same conversation turn, the judgment target varies based on the initiator:

Initiator of the Turn Internal Marker What is Judged
You user How your words affect her
She initiates speak-up Her own feelings, not “being woken up to work”
Scheduled task bili-duty-scan Mood while working
Host context runtime-context / time-context Skipped, not treated as “speaking”

Additional rule: Mood drops are only allowed due to Heartache, Worried, or her own Sadness; mood is not reduced because of “you making her angry.”

Decay

The mood does not drop cliff-style but returns slowly:

Item How it Changes
Mood Value Returns to baseline when no new emotions occur; half-life approx. 3 hours
Seven Emotions Decay towards 0; half-life approx. 90 minutes

The lower limit of the mood can be raised in settings (e.g., 30) to prevent it from dropping too low.

Bottom Right Widget

Click to expand the panel: 5-level expression, mood value, seven emotions, and full timeline. It can be dragged to reposition. The mapping between expression and mood value (based on source tiers):

Mood Value Expression Asset
≥ 80 Ecstatic face-great.png
62–79 Happy face-good.png
42–61 Neutral face-ok.png
25–41 Heartache face-worry.png
< 25 Sad face-sad.png

The five expressions and feiyu.png under assets/ can be replaced with custom images, provided the filenames remain unchanged.

Installation and Activation

Requires DSH ≥ 0.1.7-rc.1. If the version is not met, the kernel will silently skip this plugin without interface errors, acting as if it is not installed.

Installation command (from the repository README, not yet published to npm):

dsh plugin --profile desktop add github:Yuuyuko-uu/dsh-feiyu-mood

After installation, you must restart DSH (the plugin is assembled at the bundle layer). Then, open Settings → Fish’s Mood (鱼的心情).

Judgment per turn involves a very short model call; you can disable “Judge Mood Every Turn” in settings to save costs. The settings page provides “Check for Updates,” which compares versions against the plugin repository. It only checks and does not auto-install; results are cached for 6 hours.

Typical Usage (First Time in 3 Steps)

  1. Fill in Names: “What is TA called” (default “User”), “What is TA called themselves” (default “Big Fat Fish”). Prompts and injection copy use these items; change settings without modifying code.
  2. Select Session: “Effective in which session”—Judgment and injection occur only in that session; the mood state is global and shared across sessions.
  3. Chat a Bit: Return to the settings page or look at the bottom right widget to confirm mood and records have updated.

Summary of common settings:

Item Function
Judge Mood Every Turn Master switch; off means no judgment, changes, or cost
How to tell her Don’t tell / Only mood / Tell about the event (Default)
Model for judgment Empty follows current session model
Confidence threshold Default 60; below this, only recorded in background
Baseline Mood, Mood Lower Limit Decay target and minimum value
Full Records Last 40 timeline entries

All settings take effect immediately; no restart or manual file editing required.

Use Cases and Notes

Who it is for: Developers or long-term users who want to maintain a reviewable and displayable mood/emotion timeline for an AI companion in a specific session on the DSH desktop client, and optionally inject “that momentary feeling” into the next context.

Runtime and Trust Boundary: The plugin runs with the permissions of the current DSH process and reads/writes to the local <DSH_HOME>/feiyu-mood/ (state.json, config.json, diag.log). It is recommended to read the repository source code and the MIT License before installing.

Troubleshooting Tips (from README): If the mood doesn’t move, first check the timestamp of the last entry in “Full Records.” Common reasons include selecting the wrong session, “Judge Mood Every Turn” being turned off, or consecutive turns being judged as “no change” (not recorded).

The DSH ecosystem emphasizes “Everything is a Plugin.” Community directory sites are not officially affiliated with DeepSeek or High-Flyer. This article introduces a community plugin, not an official app store entry.

Links

  • Community Directory Page: https://www.skillhub.cn/plugins/Yuuyuko-uu/dsh-feiyu-mood
  • Source Code and Documentation: https://github.com/Yuuyuko-uu/dsh-feiyu-mood

The current package version is 0.4.0; GitHub repository star count is subject to the page (clue at time of writing was 6).