# gal-view · GAL View [中文](README.md) | English A **galgame-style conversation view + scene-element visual editor** for the DSH Web GUI session page (official bundle plugin format). Adds a **GAL View** tab between Chat (「对话」) and Trajectory (「轨迹」) in the session tab bar. Open it and the conversation area becomes a 16:9 galgame stage: placeholder portraits, a large dialogue box, typewriter lines, and player input; the built-in **Edit Mode** lets you drag, resize and re-layer scene elements like a scene editor, with edits applied to game mode in real time. ![image.png](image.png) ## Default preset [`gal-scene.json`](gal-scene.json) at the repo root is the **default preset scene** shipped with the plugin (editor export format, with referenced images/fonts embedded): it loads automatically on first launch when no local scene is saved, and Editor Mode's Reset returns to it. To update the preset: edit the scene → export with `Ctrl+S` → replace the repo-root `gal-scene.json` with the exported file → `npm run build:client` and commit. ## Installation The plugin ships in the official bundle format. Install it into the `web` profile with a single `dsh plugin` command, then **restart web** to take effect. ### Prerequisites - DeepSeek Harness is installed and the `dsh` command works in your terminal - If you run Harness from a source checkout (your everyday command is `pnpm dsh`): `cd` into the Harness repo root first and replace `dsh` with `pnpm dsh` in the commands below ### Install from GitHub (one line) ```sh dsh plugin --profile web add github:Ayase34/gal-view#main ``` `#main` means the repository's main branch. To pin a specific version, use a commit hash instead, e.g. `#ae73dca`. ### Finish the install **Restart web** afterwards (the bundle layer is composed at startup, so a restart is required for the plugin to load). Open a conversation in the Web GUI — a **GAL View** tab should appear in the tab bar, between Chat and Trajectory. > Optional check: run `dsh --profile web --dump-config`; you should see a `# == gal-view` layer, which means the plugin layer is part of the composition. ### Update to a new version ```sh dsh plugin --profile web update gal-view # restart web afterwards as well ``` ### Uninstall ```sh dsh plugin --profile web remove gal-view # restart web afterwards as well ``` > Note: the scene layout, imported images, fonts and reading progress live in your **browser** (localStorage / IndexedDB). Reinstalling or uninstalling the plugin does not lose them; clearing the browser's site data resets them. ## Development ```sh pnpm install # install esbuild devDependency npm test # pure-logic unit tests (node:test, in-process) npm run build:client # generate .dsh-plugin/client.js (generated file - do not hand-edit) npm run check:client # verify client.js freshness npm run smoke # Playwright smoke (requires DSH_CHECKOUT pointing at a dsh checkout) ``` ## Structure ``` .dsh-plugin/index.mjs Node half (minimal, no host behavior) .dsh-plugin/client/ client sources: scene model/typewriter/transcript mapping/components/styles .dsh-plugin/client.js build artifact (generated by scripts/build-client.mjs) scripts/build-client.mjs esbuild builder (--check freshness gate) tests/ pure-logic unit tests (node:test) ```