# Changelog ## 0.3 development — 2026-09-22 - The migration now targets Harness **0.1.6-alpha.2** and intentionally drops old session-data compatibility. Export character cards or novels in the old environment before migration. Downloads and production remain on 0.2.5; current main is unfinished development source. - Retired community file-upload/read_document and better-sidebar from the next-generation plan. Official upload, attachments and sidebar replace them. The [owned anydoc fork](https://github.com/a86582751/dsh-plugin-anydoc/commit/379872b6fc69814d5e974351b3f848a7522521ad) now reads through native filesystem capabilities, supports explicit document windows and full-file conversion, and has bounded version-aware caching. Full native upload integration remains pending. - Replaced the owned session-projection candidate with the validated official implementation. Removed the abandoned private market candidate; an existing upstream market is reused, and a missing market will be installed only for skins. - Rebased the [minimal pi-ai fork](https://github.com/a86582751/pi/commit/0b1dd4fe31baf343f4a592551056215ca6a12629) on the host's pinned **0.85.1**, retaining four terminal-protocol changes. The alpha.6 adapter owns cancellation, consumer-stop and idle-timeout cleanup. Gemini relay addresses and Bearer headers use configuration. SDK protocol cases and the four-protocol host cleanup matrix passed locally; complete product installation is not yet validated. - Native multi-provider tests expose an HMR removal limitation: reported success need not mean every original provider recovered. Product controls refuse that hot path before saving changes; cold changes require a restart. The final management workflow, remaining core/UI migrations and clean-install/full Harness acceptance are unfinished. Earlier dated entries describe their historical snapshots and are superseded by this migration direction. No new tag, Release, npm package or production deployment accompanies this source update. ## 0.3 development — 2026-09-21 - Added `development/llm-pi-ai/`, an unpublished adapter candidate for the existing `0.1.2-alpha.3` host. Ordinary, roleplay and headless requests use one maintained pi-ai SDK, while request snapshots, credentials, settings-conflict recovery and native DeepSeek routes retain their boundaries. The candidate removes the previous session-mode transport split. It is not yet connected to the product; dependency assembly, formal-fork synchronization and complete lifecycle acceptance remain open. - Added the unpublished owned projection candidate under `development/session-projection/`. It preserves inherited-prefix metadata and avoids historical scans on caught-up reads with either public history API. Package-only strict checks cover current and newer host declarations; ten focused maintenance telemetry cases are covered. The newer-host investigation is reference only: no host upgrade is planned or required by the current task. Implementation remains on `0.1.2-alpha.3`. This candidate is not wired into the product. - Added fixed-package preparation and a bundled-runtime bootstrap candidate. Independently named private dependencies are verified before loading, share host peers and prepare versioned file references without running pnpm inside the loading host. Ten preparation cases, the existing transaction regression and a real npm/pnpm bootstrap lifecycle case passed locally. The latter covers later skin installation, root upgrade, relinking and retained inactive libraries on root removal. Alpha.3 CLI lacks the cooperative profile lock, so automatic startup wiring and complete target-host acceptance remain pending; this is not a complete one-command product installer. - Added an explicit offline npm/pnpm packaging test with three synthetic-package cases: tarball-relative `file:` fails as a portable dependency; bundled children survive unrelated installs, forced relinking and explicit downgrade; existing external fixed-package references retain their hashes, shared peer and lock resolution. These are packaging mechanism checks, not full DSH installation or failed-upgrade rollback acceptance. The test requires existing npm/pnpm JavaScript CLI paths and does not install Harness. - Added the independently named, unpublished [dsh-nexttavern-anydoc candidate](https://github.com/a86582751/dsh-plugin-anydoc/commit/547bd617407abcf60fa50404b6a27978bc31abce) in `development/anydoc/`, with original attribution and maintained TypeScript instead of replaying edits onto installed files. Two focused maintenance checks cover real CSV conversion, normalized output, exclusive file-write scheduling, a single roleplay tool schema and cleanup preserving a simulated user tool. It is not yet connected to the product entry or preset. File-upload and pi-ai fork identity work remains open. The market now has a smaller role: reuse an existing upstream installation, or install it only when absent, to open skins. A custom market fork is no longer planned as a required dependency; product controls belong to NextTavern itself. Compatibility package protection must also survive later unrelated skin installations and plugin upgrades. - Public repository updates resume alongside maintenance development. Repository commits are development snapshots; the latest downloadable release remains 0.2.5. No 0.3 tag, release assets or npm publication accompanies this code sync. - The source-layout, module-cohesion and scoped validation work below is ready for contributor review. The next milestone is one complete NextTavern plugin entry with reliable install, enable/disable, upgrade and uninstall behavior. - Controller, usage/projection and pi-ai compatibility implementations have focused maintenance tests, but are not yet wired into this public package. UI migration, roleplay-only third-party ownership, remaining fork synchronization, dependency protection and full fresh-install/migration testing remain open. The single-command installation goal is not yet a supported 0.3 installation path. - Six pi-ai protocol source files are now committed in the [attributed compatibility fork](https://github.com/a86582751/pi/commit/a6d1032396fb2baf64edc6db9b871a79ae18996c), preserving upstream history and MIT attribution. Their committed bytes match the locally tested candidate; the fork records exact source hashes. This source update does not publish a package or change the 0.2.5 downloads. Historical byte patches must not be reapplied to builds from these updated fork sources. - Published DSH `0.1.6-alpha.2` profile APIs are being assessed for unified plugin lifecycle support. Five library checks cover configuration layers and reloads; two manager checks show that rejected activation can leave its selection on disk. The [market compatibility fork](https://github.com/a86582751/dsh-market/commit/00d53a9e1169f24f741bc40bc5a0a10db3ecffb7) connects product controls and now builds with an owned package/browser identity. Complete host/client types, package preflight and two artifact/HTTP checks passed, including refusal to uninstall a preexisting upstream market as itself. The locally packed candidate is unpublished. This custom-market experiment is now historical and is not a required product dependency; immutable release assembly, host-page acceptance, install/upgrade/uninstall and full-host compatibility remain open. Supported versions, runtime locks and the 0.2.5 downloads are unchanged. - `provenance.json` describes the last built package snapshot; later repository commits may update source or documentation. Release provenance and installation assets will be regenerated together for the completed release. ## 0.3.0-rc.1 - unpublished layout candidate - Separate maintained TS/MTS in `src/` from generated JS/MJS in `lib/`, including the Auth and skin packages. Ship the complete strict-build source closure and a generated `tools/build-map.json`; see [Contributing](CONTRIBUTING.md). - Keep the package name, root and `./client` exports, host injection, and the three `tools/install.mjs`, `tools/patch-harness.mjs`, `tools/public-access.mjs` commands. These commands forward to one implementation in `lib/operations`; retirement requires a separately announced breaking CLI version. - Internal deep paths change: `src/**/*.js` moves to the corresponding `lib/` tree; preset core and memory modules move to `preset/lib/core` and `preset/lib/memory`; Auth `index.js` moves to `lib/index.js`; the embedding dependency template moves from `src/memory/embedding-runtime` to `memory/embedding-runtime`. Consumers that bypass package exports must update their paths. Controlled Cordis paths are updated without changing plugin IDs or configuration semantics. - Preserve persistent schemas, append-only provenance and failure recovery. Upgrades remove obsolete receipt-owned files, reject edited managed files and preserve user-owned material. Cohesion and readability improvements separate record, presentation and lifecycle responsibilities without changing those behavior contracts. - This candidate's source is shared for development; its installation archives are not released. Existing installer links still describe the published 0.2.5 assets; candidate installers are bound to their own payload digest. Building Windows ARM64 and Linux artifacts does not establish real-device installation coverage. ## 0.2.5 Preview - 2026-09-16 - Rebuild long-form memory around four pillars: a frozen settings prefix that is never compacted and is always injected; a hard-cut context window that keeps the most recent complete prose and preserves the tail when it advances; background director notes written by a separate background task, each carrying a source hash and a same-worldline anchor so provenance stays machine-checkable; and on-demand history recall in keyword (default), semantic and hybrid modes over player input plus valid story text, including archived and evicted prose. Status, tool output, CSS, decision cards and reasoning stay out of the corpus. - Evict old director notes and state snapshots from the request instead of carrying them, and replace them only after a valid new anchor has been prepared; unchanged references keep exact backing, rollback re-serves the full text and raw events stay append-only. A ten-turn test found and fixed two real defects: a compacted maintenance suffix that made old tasks uncollectable, and unbounded accumulation of old director notes and state snapshots. - Recycle a long research tool result into its matching checkpoint, but only when owner, source hash, generation and packetIds all match; partial saves, wrong sources, failed writes and post-confirmation re-reads are never recycled. - Add an Embedding management page between Models and Usage. Online: DashScope, OpenAI-compatible and OpenAI official, with model refresh, manual model IDs, server-side-only key storage and a connect test. Local: verified BGE small zh, Qwen3-Embedding 0.6B, Jina Nano, Jina Small INT8 and Nomic q8 on ONNX Runtime 1.29.0 in a separate encoding process, with real byte progress, speed, ETA, pause/cancel/resume and a queued → downloading → verifying → preparing-runtime → self-testing → installed state machine. Local serving needs no API key and no network. - Fingerprint vector recipes on model, revision, dimensions, task role, pooling, quantization and runtime; a mismatch marks the index stale and stops it serving until rebuilt. Vectors stay filtered to the current worldline at query time, so switching worldlines does not force a rebuild. Chunking is configurable with a 480-character default (192/480/960, 128-2048 range, 80 overlap) and a 512-token local budget; clear, rebuild and fill stay scoped to the current visible conversation and all its worldlines and keep prose, provenance and the ledger. - Add a Presets page before Resources with create, edit, save-as-copy, select and delete; built-ins are read-only and 200 custom slots are available. Scope covers current conversation, designated conversation or global, all worldlines in one conversation share the override, and storage is versioned with a single lock and whole-config revision CAS. - Ship 16 built-in styles — the default, a blank preset and 14 new ones including 日式轻小说, 乙女风格, 三体文风, 日式游戏, 电影感文风, 春秋文风, 极简文风, 细腻文风, 奇幻网文风, 恐怖文风, 鲁迅文风, 抒情文风, 日常搞笑风 and 古文文风 — each with a complete seven-section guide and original examples. Three explicit style modes (foreground system aesthetic, blend with card style, card style only) resolve conflicts by a stated rule, and card import, edit, export and persistence keep all three card style fields intact. - Add 长文本转角色卡 as a new management tab with two reading modes chosen before research: intensive segmented full reading with source-checked notes, or coarse multi-round relation-frontier retrieval followed by longitudinal protagonist tracking. Coarse mode requires a usable novel model and a complete current index, otherwise a dialog guides configuration and the round ends without a silent downgrade. - Freeze workspace TXT originals up to 64 MB with strict UTF-8 → GB18030 → BOM-aware UTF-16 decoding, recording raw-byte hash, decoded-text hash and size without mutating the upload; segment deterministically and bound batches below the native clipper. Gate research notes on a batch that was actually read and a quote that actually appears in it, and keep an independent semantic index for the novel, separate from story memory. - Add per-character model overrides to the character agent cluster; the override belongs to the current visible conversation and is shared across its worldlines while inputs and results stay isolated per actual worldline. Fix background subagents listed as selectable conversations, save-time draft loss, stale resource and export replies and duplicate job actions. - Move action suggestions into the standalone decision card only, so they are no longer duplicated into the status bar or prose tail, and hide legacy action areas without touching the original card. The decision card gains an independent collapse/restore toggle, a separate 稍后处理 close action, drag-to-move with double-click/Home reset and a clamped visible height. Validate and preserve authored status HTML/CSS across import, generation and legacy restore. - Replace four third-party full-page reskins with the first self-owned skin, dsh-nexttavern-amber: a whole-interface redraw from the same design tokens with day and night themes, different sidebar art per theme, a headline typewriter that only takes over the title span and a tavern reader mode on aged parchment that leaves the author's ink colours untouched. The skin now ships as a real profile bundle — a `file:` link into the payload's `skins/` directory whose loader entry carries `disabled: true`, so it is installed and visible but off by default — and the bundled third-party market dshmarket 1.39.0 (MIT) provides the hot enable/disable toggle under 设置 → 插件市场 → 已安装, writing to the profile's `cordis.patch.yml` in about a second without a restart and keeping the choice across restarts. The same pass deleted an 82.6 MB single-bundle theme, removed the skin centre and reduced 18 packages to 4 kept-but-disabled; a third-party balance widget was disabled. - Complete the TypeScript migration: TypeScript is now the only maintained source, with hand-written .ts/.mts modules and .js/.mjs build products generated by TypeScript 5.9.3 from a shared build manifest. At this release: 637 artifacts, 24 schemas and 158 TypeScript modules, covering core, UI, memory, auth, card reading, tasks, telemetry, branch and worldline routes and the release and install toolchain. - Stop deep-copying the native conversation list when projecting it: 341 sessions / 9.35 MB at 48-88 ms per copy became shared read-only nested values that replace summaries only when aggregated fields differ. Regression measurement: 8,208 deep copies / 991 ms reduced to 0 copies / 9 ms. - Cut idle request volume: 649 requests in 263 s over a slow link was the real cause of slow conversation opening, so activity polling went from 3 s to 30 s when idle, rebuild confirmations from 2 s to 30 s, the memory panel from 2 s to 20 s, and catalog reads are coalesced to one per 10 s with a trailing read. The single largest requester, a third-party balance widget, was disabled. Cadence is selected by state and never gated inside a timer callback. - Add one-click installers. Windows ships NextTavern-Setup.exe (x64) and NextTavern-Setup-arm64.exe as a self-contained Go GUI with a native window, portable PowerShell 7.6.6 and Node.js 24.16.0, automatically provisioned Microsoft Visual C++ runtime, mirror-first sources with SHA-256 verification and per-file caching, shortcuts, start/stop menu entries and, new in this release, in-place upgrade from an older installation. Linux is new in 0.2.5: NextTavern-Setup.sh is a single self-contained shell script with no starting dependency beyond a POSIX shell, curl or wget, tar and a SHA-256 tool; it downloads and verifies a portable Node.js runtime itself, supports x86_64 and aarch64 (glibc) and needs no root and no system packages. Both listeners bind 127.0.0.1 only and auto-select a port in 3510-3599. - Ship CLI 1.4.0 with native API/RPC, workspace directory upload verified against a real novel with checksums, settings, model, edit, log, resource and character-cluster operations, plus doctor. - Strengthen interactive authoring with questions-driven creation, a twelve-item completeness check, two reference cards and status-asset preservation across import, generation and legacy restore. - Sandbox author card JavaScript: author beauty.js runs against restricted document and window faces, registrations land on the reader root and are unconditionally reaped. - Migrate the public-access plugin to @isund/dsh-auth-webserver 0.1.0-alpha.3.2 under strict TypeScript; the Cloudflare Access public-access guide is unchanged. - Relicense project-owned code from MIT to GPL-3.0-only, using the verbatim official text (the SPDX identifier is not upgradeable to a later version). Bundled third-party material keeps its own terms — DeepSeek and pi MIT, the upload and anydoc forks MIT, office Apache-2.0 and the upstream-derived ask-user file MIT — and copies already distributed under MIT keep those terms. Self-owned package manifests, installer npm metadata, the public contract, README, NOTICE and the rights register were updated in the same pass. - Tested target: Harness 0.1.2-alpha.3 and pi-ai 0.84.4. The window, notes, provenance and eviction mechanics add no runtime model request of their own: the program assembles settings, window and notes deterministically, and the main agent queries history and worldbooks on demand instead of being forced through a recall step before every turn. No new production deployment, paid story generation, supplier latency or cache benchmark was performed for this release. The Windows installers are not code-signed and were not validated on a clean Win11 VM or a real ARM64 device; the Linux installer is new in this release and the listed distributions and architectures are the tested envelope. Synthetic embedding evaluation is not a human-labelled or long-term quality guarantee, and coarse-mode novel coverage does not guarantee understanding of every detail. The v0.2.5 release was rebuilt twice after its first cut. That first build shipped the skin as package files only, with no profile dependency and no loader entry, so players could neither see nor enable it; the second cut fixed the packaging and the third relicensed the code. Only this final cut is published, and the two earlier builds have been taken down. ## 0.1.2 Preview - 2026-09-12 - Ship the optional `@isund/dsh-auth-webserver` source, installable archive, license, contract tests and sanitized environment template for Cloudflare Access public access. - Add explicit, fingerprint-checked and reversible compatibility for remote settings, continuous reconnect and JWT-authenticated uploads. Default local installation does not enable public access. - Add the beginner-oriented phone/computer public-access guide, including AI-assisted deployment, obtaining scoped Cloudflare tokens and SSH keys, historical connection tuning, verification and rollback. - Add a community-support section thanking @ljs1997sh for dsh-nexttavern-qq-mobile. - This release is based on public 0.1.1. Concurrent internal debugging and TypeScript migration are outside this release. ## 0.1.1 Preview - 2026-09-12 - Protect author status templates at the native prompt boundary while preserving the original card source. - Accept filled dynamic status values without losing the author's HTML/CSS/JS structure. - Surface structured task-validation failures, failed timestamps and actionable retry diagnostics. - Synchronize the verified official UI chat/workspace fixes included in the maintenance release. ## 2026-09-11: Documentation Updates - Add four-step onboarding, illustrated feature descriptions and a public architecture guide with source references. - Document existing SillyTavern / TauriTavern PNG (`chara`/`ccv3` Base64 `tEXt`) and JSON v1/v2/v3 imports, embedded worldbooks and extension boundaries. - Add repository topics `dsh`, `character-card` and `tavern`, alongside `dsh-plugin`, `deepseek-harness` and `roleplay`. - These updates affect repository documentation; the original v0.1.0 tag and downloadable assets retain their published hashes. ## 0.1.0 Preview - 2026-09-11 - Public packaging of the existing roleplay workspace: cards, worldbooks, narrative/style rules, worldlines, isolated memory, status, decisions, usage, pricing, exports and optional character agents. - Existing SillyTavern / TauriTavern PNG and JSON character-card import, original-source preservation and embedded character books. - Portable preset installer and audit-first six-unit compatibility patcher with transaction backups, rollback, update and uninstall. - Browser source and prebuilt UI, locked builder, authorized complete reference cards, authoring/diagnosis skills, included and standalone dsh-debug CLI. - Attributed compatibility forks for file upload/read_document, anydoc and pi-ai; optional DOCX/PDF integrations retained. - Tested target: Harness 0.1.2-alpha.3 and pi-ai 0.84.4. No new production deployment, paid story generation, supplier latency or cache benchmark was performed for this release. Offline native fixtures suppress model dispatch and do not prove every provider workflow.