dsh-plugin-outlast: Integrating the "Outlast: Trial by Fire" guide into DeepSeek Harness

Preface

People building agents often have this experience: the model talks a big game, but starts hallucinating as soon as you ask about the current version content in a game. Rather than letting the model rely on memory to fabricate level guides, it’s better to turn the knowledge base and real-time data sources into tools and let it query them directly. This article introduces a DSH native plugin (Cordis bundle) for The Outlast Trials, maintained by NormalAorii, which belongs to the networking tools in the community directory.

It does something very straightforward: it wraps the community-organized game database (levels, enemies, items, mechanics) and Steam real-time announcements into 9 tools callable by the model. When combined with the already connected official QQ bot (@tencent-connect/dsh-qqbot), it allows for direct Q&A in QQ group chats or private messages, without needing to write any query logic yourself.

What is This

A one-sentence positioning: A native Cordis plugin for DeepSeek Harness, pure ESM, with no build steps and no runtime dependencies. The repository is NormalAorii/dsh-plugin-outlast, has 1 GitHub star, an MIT license, current version 1.0.0, and requires Node >=20. The plugin code is MIT, while the game name, setting, and trademarks belong to Red Barrels; the author declares this is just a fan-oriented query tool.

A few boundaries need to be clarified first: it does not connect to QQ directly; sending images and files depends on another plugin that has already been connected, @tencent-connect/dsh-qqbot. The database content is organized by the community, not a repost of the official wiki; there may be discrepancies after version updates.

Database Scale

The database is organized by files, with the following scale:

  • 41 Trials (11 Main Story Trials + 30 MK Challenges)
  • 14 Programs
  • 21 Enemies
  • 65 Items/Upgrades/Currency/Mechanics
  • 31 Core Mechanics
  • 10 News Snapshots

Mapped to four files under data/: trials.json holds level and Program structures, enemies.json holds the enemy bestiary, items.json holds consumables, Rig, prescriptions/upgrades, currency, and operation mechanics, and news.json holds Steam news source test results and offline snapshots. All entries have sources and confidence fields; entries where confidence is not “high” will be explicitly labeled as “Community Organized” in the response.

How the Nine Tools Divide Their Responsibilities

The plugin entry index.js registers 9 outlast_* tools and attaches a 4-line system prompt (order 900). Tool definitions are in lib/tools.js, and data loading and Chinese/English fuzzy search are in lib/store.js:

Tool Function Typical Questions
outlast_help Function menu and command instructions Help / Menu / What can you do
outlast_search Full library Chinese/English fuzzy search “Prison”, “Mother Goose”, “Syringe”
outlast_trials Level list / Progress structure What levels are there / MK challenges / Level order
outlast_guide Single level guide (goals/steps/tips) How to beat the Police Station / Orphanage guide
outlast_enemies Enemy bestiary and countermeasures What enemies are there / How to dodge Mother Goose
outlast_items Consumables / Rig / Prescriptions / Currency What items are there / How to choose Rig
outlast_mechanics Core mechanics and survival tips How to hide / Noise mechanics / How to get started for beginners
outlast_news Steam official announcement real-time fetch What updates are there recently
outlast_card Generate 1080 wide image-text guide card PNG Give me an image / Image-text guide

The fetching for outlast_news uses a three-level fallback: it prioritizes real-time fetching from Steam’s ISteamNews (appid=1304930), falls back to RSS on failure, and falls back to a local snapshot if that fails as well, explaining the reason in the response. outlast_card is only responsible for rendering the PNG and returning the local path; the action of sending the image is completed by qqbot_send_file, which the model will call immediately after. The banner at the top of the card is fetched from the official header image on the Steam CDN (cdn.cloudflare.steamstatic.com) at runtime; it is only cached locally and is not distributed with the plugin.

Installation and Activation

The official installation method given in the README is “Clone to local, then have DSH install it as a profile bundle,” a two-step process:

# 1) Put the repository into the DSH workspace (or any local directory)
git clone https://github.com/NormalAorii/dsh-plugin-outlast.git

# 2) Have DSH install that directory as a profile bundle (requires approval)
#    plugin_manager install_bundle → target = absolute path of that directory
#    Example: C:\Users\<you>\Documents\deepseek-harness\default-workspace\dsh-plugin-outlast

Note that this is not a one-line installation in the form of dsh plugin add github:.... After installation, DSH will hang the plugin into the profile’s bundle (the insert entry in cordis.patch.yml), so there is no need to manually modify the profile’s package.json or cordis.patch.yml, nor is pnpm install required. After restarting (or reloading) DSH, 9 new outlast_* tools will appear on the model side.

Post-Installation Verification

Run directly in the repository root directory; the DSH host is not required:

node scripts/verify.js      # 46 assertions: data integrity, 9 tools, real-time news, PNG card
node scripts/smoke.mjs      # Only runs the card + news two segments, produces images faster

The author declares that this plugin has been installed and tested in real execution in their own DSH desktop profile, and node scripts/verify.js passed 46/46. The significance of this step is to verify things yourself after installation rather than going straight to production.

Typical Usage

The plugin itself does not bind to QQ. The integration method is: the official QQ bot plugin @tencent-connect/dsh-qqbot on the QQ side is responsible for sending and receiving messages and files, while this plugin is responsible for providing query tools. When a user asks in a group “How do I dodge Mother Goose?”, the model calls outlast_enemies to check for countermeasures; when asking “What updates are there recently?”, the model calls outlast_news to perform a Steam real-time fetch; when replying “Give me an image,” the model calls outlast_card to generate a PNG and then uses qqbot_send_file to send the image back to the group.

Questions that can be reproduced:

  • 帮助 / 菜单 —— Triggers outlast_help, to understand what capabilities are available
  • 监狱、鹅妈妈、注射器 —— Goes through outlast_search’s Chinese/English fuzzy search
  • 有哪些关卡 / MK 挑战 / 关卡顺序 —— Goes through outlast_trials
  • 警局怎么打 / 孤儿院攻略 —— Goes through outlast_guide
  • Rig 怎么选 —— Goes through outlast_items
  • 噪音机制 / 新手怎么上手 —— Goes through outlast_mechanics
  • 最近有什么更新 —— Goes through outlast_news

Applicable Scenarios and Notes

Suitable for two types of people: first, developers who deploy QQ bots themselves and want to create an Q&A assistant for The Outlast Trials players, saving themselves the work of writing a guide database and maintaining Steam news fetching; second, people who want to learn the DSH Cordis bundle plugin structure. This repository is not large, and the division of labor between index.js / lib/tools.js / lib/store.js / lib/news.js / lib/cards.js is quite clear, showing everything from tool registration and bundle patching to fallback fetching and local rendering.

A few points to note:

  1. The plugin runs with the permissions of the current DSH process. Read the source code once before installation to confirm that the directory path, scraping targets, and calling behavior meet expectations.
  2. Image-text cards depend on Windows PowerShell + System.Drawing; fonts automatically fallback to Microsoft YaHei UI → Microsoft YaHei → SimHei → Arial; non-Windows environments will explicitly error out and switch to text responses. This means the “Generate card → Send image in QQ” chain is only complete on Windows.
  3. News and network interfaces may be blocked by firewalls or rate-limited; when they fail, the plugin will truthfully report the issue and will not fabricate announcements.
  4. Single responses are controlled within 3400 characters to fit the QQ markdown message length limit; lib/render.js is responsible for automatically finishing the response within this limit.
  5. Guides are community-organized data; there may be discrepancies after version updates. The source is carried by the sources / confidence fields in the plugin, and the disclaimer is in the README.

Conclusion

The value of this plugin lies in turning high-frequency but error-prone needs like “game guide queries” into a standard toolset: the model no longer relies on memory to hard-answer, but instead queries the database, queries real-time sources, and generates an image when necessary, while also providing the source and confidence. The barrier to entry is not high, and the star count is only 1; it is a small project just starting out, and the README clearly describes the functional boundaries and known limitations.

  • Community Directory Page: https://www.skillhub.cn/plugins/NormalAorii/dsh-plugin-outlast
  • Repository Address: https://github.com/NormalAorii/dsh-plugin-outlast
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye