dsh-output-styles 0.6.15 → 0.6.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +48 -0
- package/{README.es.md → README-es.md} +82 -66
- package/{README.hi.md → README-hi.md} +82 -66
- package/{README.pt.md → README-pt.md} +82 -66
- package/{README.zh.md → README-zh.md} +82 -66
- package/README.md +57 -35
- package/cordis.patch.yml +1 -1
- package/docs/COEXISTENCE.md +2 -2
- package/docs/VERIFICATION.zh.md +2 -2
- package/docs/renderer-protocol.md +3 -3
- package/docs/renderer-protocol.zh.md +3 -3
- package/lib/client.js +3 -1
- package/lib/index.js +151 -73
- package/lib/{invariant-ExQ574yb.js → invariant--N6fzwyV.js} +12 -4
- package/lib/invariant.js +1 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/coexist.d.ts +1 -1
- package/lib/types/config.d.ts +154 -16
- package/lib/types/config.d.ts.map +1 -1
- package/lib/types/export.d.ts +3 -2
- package/lib/types/export.d.ts.map +1 -1
- package/lib/types/index.d.ts +3 -2
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/renderers.d.ts +2 -2
- package/lib/types/renderers.d.ts.map +1 -1
- package/lib/types/runtime.d.ts +4 -4
- package/lib/types/runtime.d.ts.map +1 -1
- package/lib/types/types.d.ts +23 -3
- package/lib/types/types.d.ts.map +1 -1
- package/package.json +69 -47
- package/src/client/index.ts +6 -1
- package/src/coexist.ts +1 -1
- package/src/config.ts +144 -36
- package/src/export.ts +51 -3
- package/src/index.ts +3 -1
- package/src/offload.d.ts +29 -0
- package/src/renderers.ts +2 -2
- package/src/runtime.ts +93 -79
- package/src/types.ts +25 -3
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,54 @@ project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.6.18] - 2026-09-22
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- Rename the session-export command from `/export` to `/transcript`. The `export` name collided with the official `session-log-export` command — on hosts that ship it, the duplicate registration failed with `already registered` and the plugin half-mounted. The command now registers as `/transcript` (usage: `/transcript [markdown|html] [--renderer=<id>] [--save <path>]`); every user-facing reference (five READMEs, docs, error strings) follows the new name. There is no transitional dual registration — `/export` is gone as soon as this version loads. The internal `src/export.ts` module keeps its name; only the registered command changed.
|
|
14
|
+
|
|
15
|
+
- **Adapt to DeepSeek Harness `dsh-v0.1.7-alpha.1`.** The host deleted the settings API this plugin was built on (`@deepseek-ai/dsh-settings-file` is gone; `@deepseek-ai/dsh-settings` is now `SettingsForms`, and `SettingsProvider` / `SettingsSection` / `settings.register(ns, schema, { base, validate })` / `settings/updated` / `SettingsNamespace` / `SettingsScope` no longer exist anywhere in the host). Both of this plugin's own settings sections are therefore gone, and the two user-configurable values moved onto the plugin's own `Config` schema:
|
|
16
|
+
|
|
17
|
+
| Before (settings section) | After (Config field) |
|
|
18
|
+
|---|---|
|
|
19
|
+
| `output-style.style` | `defaultStyle` |
|
|
20
|
+
| `output-style-rules.rules` | `rules` |
|
|
21
|
+
|
|
22
|
+
Both fields are declared `volatile()` and are **now editable from the Web Plugins page** — this is a user-visible change: the plugin opts out of the auto-generated settings card (`settings.configure({ auto: false })`) exactly as first-party plugins do, and a committed value is adopted through `loader/volatile-update` without a remount. Every other `Config` field stays composition-only. A committed `defaultStyle` that names no style in the live library is refused (logged and ignored) instead of resolving to a dangling directive. If you had values in either removed section, move them into the matching `Config` field in your profile patch (`cordis.yml`). Per-session `/style` choices are unaffected — they live in the `output_style` storage domain.
|
|
23
|
+
|
|
24
|
+
- The durable provenance marker is now `{ kind: 'dsh-output-styles' }`. The host removed the shared catch-all `kind: 'plugin'` message source (`MessageSourceMap` is now `user | model | tool | 'system-prompt'`), and the session-format admission gate refuses `kind: 'plugin'` outright. The package declares its own producer-owned source through a `MessageSourceMap` merge instead. The domain record's legacy `plugin` field is still accepted on read (`source.plugin` is optional now) so records written by earlier versions keep validating.
|
|
25
|
+
|
|
26
|
+
- The check that a rule names a valid kebab-case renderer id / tool is unchanged in effect but no longer runs at settings-write time (there is no settings write path any more). It runs in `resolveConfig`, which the plugin calls at load and on every volatile commit, so an invalid value still fails loudly. The cookbook's suggested `Schema.check()` is **not** usable: it does not exist in any published `@deepseek-ai/schemastery` (verified against 3.18.2 and 3.18.3), and a `transform` cannot express the check either because the transform callback receives the schema's *input* (plain values) while `Config` is its *output* (`Volatile` references).
|
|
27
|
+
|
|
28
|
+
- `@deepseek-ai/schemastery` moves to `^3.18.3` and `@deepseek-ai/cordis` to `^4.0.3`. `volatile()` and the `Volatile<T>` type this adapter depends on were added in exactly those releases: schemastery 3.18.2 has neither, and cordis 4.0.2 does not export `Volatile`. The cordis *peer* range is widened (`^4.0.2 || ^4.0.3`), not narrowed, and `@deepseek-ai/cosmokit` (`^1.8.4`) is added as a peer because the emitted `.d.ts` references its `Volatile` type. No supported host line is dropped.
|
|
29
|
+
|
|
30
|
+
- The `@deepseek-ai/dsh-*` dev/test pins move from `0.1.5-rc.2` to `0.1.7-alpha.1`, matching the host this adapter targets. The `0.1.5-rc.3` line was considered and rejected: it still ships the *old* settings contract and the old `kind: 'plugin'` message source, so every adaptation here would fail to typecheck against it. This is a deliberate deviation from the family's `0.1.5-rc.3` dev pin, recorded here for that reason.
|
|
31
|
+
|
|
32
|
+
- `@deepseek-ai/cordis-plugin-loader` moves to `^1.0.4`. Its `loader/volatile-update` event declaration (the hook the live settings commit rides) was added in 1.0.4; 1.0.3 has no such event type.
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
|
|
36
|
+
- The session-export surface fold resolves the `image/offload` message projection from the location the 0.1.7 generation actually publishes it, `@deepseek-ai/dsh-compaction-image-offload/projection`. The package root stopped exporting `imageOffloadProjection` (it now exports only `name`/`inject`/`apply`), so the previous root-only dynamic import silently resolved to an empty projection list and an offload-bearing transcript threw `requires a message projection`. The root specifier is kept as a fallback for older generations. `tests/export-surface.spec.ts` carries a structurally valid offload fixture so the counter-lock assertion is load-bearing.
|
|
37
|
+
|
|
38
|
+
- `scripts/loader-runner.mjs` now recovers the reason a Loader row failed and rethrows it. Under `cordis-plugin-loader` 1.0.4 an invalid config no longer rejects `loader.await()`: the row's `_init()` reports through `ctx.logger.error` and returns, so the row silently never mounts. The runner attaches no log exporter, so that message went nowhere and the negative regression reported only the downstream symptom (`/style command is missing`) — the `/expected boolean/` assertion in `tests/composition.spec.ts` was vacuous. The runner now walks the entry tree (including Include subtrees) for a `FiberState.FAILED` row and throws its `_error`, restoring the real reason: `Loader composition: entry failed to load: … $.watchStyles expected boolean but got yes (at watchStyles)`. Verified in both directions — the invalid config now exits 1 with that text, and a valid config still exits 0 with `DSH_LOADER_RESULT`.
|
|
39
|
+
|
|
40
|
+
- The session-export surface fold now supplies the message projection for plugin-owned surface events (`image/offload`, owned by `@deepseek-ai/dsh-compaction-image-offload`, added as an optional peer). The projection is loaded through a conditional dynamic import with a failure-tolerant fallback, so a host that predates the projection contract keeps working, while a new-generation host folds offload-bearing logs instead of throwing. A counter-lock test asserts that a bare fold without projections fails loudly on projection-requiring logs whenever the host fold implements the contract.
|
|
41
|
+
|
|
42
|
+
- The three `@deepseek-ai/dsh-storage*` packages moved from `dependencies` to optional peer dependencies. The plugin previously carried its own pinned `0.1.5-rc.2` copies in `node_modules`, which shadowed the host's newer storage generation — the plugin silently ran against the old storage stack. With the move, `require.resolve` lands on the host's copy, and a missing storage stack fails at composition time instead of silently degrading.
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
|
|
46
|
+
- `dsh.manifestVersion: 1` and the canonical three-clause `engines.dsh` range, matching the 0.1.6 family contract.
|
|
47
|
+
|
|
48
|
+
## [0.6.16] - 2026-09-12
|
|
49
|
+
|
|
50
|
+
### Changed
|
|
51
|
+
|
|
52
|
+
- Rename the four translated READMEs to `README-<lang>.md`. npm selects the package-page readme as the first markdown file matching its `{README,README.*}` glob (`@npmcli/package-json`, publish path), and that glob order puts `README.<lang>.md` ahead of `README.md` — so npm was serving the Simplified-Chinese file for this package too (measured on 15/15 sampled packages of the family). The new names sit outside the glob, so the English source is served again. No content changed apart from the language-switcher link each translation holds to its siblings, and the repo readme gate still passes. Takes effect with the next release; an already-published version cannot gain a corrected readme retroactively.
|
|
53
|
+
|
|
54
|
+
- The release workflow now creates the GitHub Release itself, with the body taken from this version's CHANGELOG section. Until now a `v*` tag published to npm and stopped there, so every Release page had to be created by hand afterwards.
|
|
55
|
+
- Pin the `@deepseek-ai/dsh-*` dev/test dependencies to the published `0.1.5-rc.2` line and record `0.1.5-rc.2` in `dshWorkshop.compatibility.dshVersions`; the monthly Compat workflow now runs against `0.1.5-rc.2`. The peer range `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0` is unchanged, so no supported host line is dropped.
|
|
56
|
+
|
|
9
57
|
## [0.6.15] - 2026-09-10
|
|
10
58
|
|
|
11
59
|
### Changed
|
|
@@ -8,15 +8,17 @@
|
|
|
8
8
|
*`/style concise` — y a partir de ahora toda respuesta es concisa. `/style off` — de vuelta al valor por defecto del proyecto.*
|
|
9
9
|
|
|
10
10
|
[](LICENSE)
|
|
11
|
+
[](https://gitee.com/perrylink/dsh-output-styles)
|
|
11
12
|
[](https://github.com/topics/dsh-plugin)
|
|
12
13
|
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
|
|
14
|
+
[](https://dsh.market/)
|
|
13
15
|
[](#)
|
|
14
16
|
[](https://github.com/PerryLink/dsh-output-styles/actions)
|
|
15
17
|
[](https://github.com/PerryLink/dsh-output-styles/releases)
|
|
16
18
|
[](https://www.npmjs.com/package/dsh-output-styles)
|
|
17
19
|
[](https://www.npmjs.com/package/dsh-output-styles)
|
|
18
20
|
|
|
19
|
-
[English](README.md) · [简体中文](README
|
|
21
|
+
[English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
|
|
20
22
|
|
|
21
23
|
</div>
|
|
22
24
|
|
|
@@ -26,7 +28,7 @@
|
|
|
26
28
|
|
|
27
29
|
| Surface | Status |
|
|
28
30
|
|---|---|
|
|
29
|
-
| Harness | DeepSeek Harness `dsh-v0.1.
|
|
31
|
+
| Harness | DeepSeek Harness `dsh-v0.1.7-alpha.1` (adaptado el 2026-09-09): el sobre de sesión conserva su campo ignorable solo para compatibilidad de lectura de logs almacenados - Session.append aún no puede estamparlo, por lo que el comportamiento de la puerta no cambia. Verificado el 2026-09-11 contra el checkout master dsh-v0.1.7-alpha.1 (cadena de puertas completa + smoke de instalación del perfil). |
|
|
30
32
|
| Node | `^22.19.0 || >=24.0.0` |
|
|
31
33
|
| Platforms | Todas (host + cliente web) |
|
|
32
34
|
| Model | Cualquiera (inyección en el prompt del sistema) |
|
|
@@ -39,10 +41,10 @@
|
|
|
39
41
|
- **Comando `/style`** — sin argumento lista los estilos (con descripciones) más la selección actual; `/style <name>` cambia; `/style off` restaura el valor por defecto del proyecto.
|
|
40
42
|
- **Persistencia por sesión** — la elección vive en el dominio de almacenamiento `output_style`, indexada por sessionId, y sobrevive a los reinicios.
|
|
41
43
|
- **Inyección en el prompt del sistema** — una contribución `systemPrompt.section()` (orden `sectionOrder`) inyecta el cuerpo del estilo actual en cada ensamblado, truncado a un presupuesto configurable.
|
|
42
|
-
- **Paridad Claude Code** — `keep-coding-instructions`, `force-for-plugin` (alias `force`), compatibilidad JSON `outputStyles`, directorios `stylesDir` por capas, recarga en caliente y fallback del proyecto
|
|
44
|
+
- **Paridad Claude Code** — `keep-coding-instructions`, `force-for-plugin` (alias `force`), compatibilidad JSON `outputStyles`, directorios `stylesDir` por capas, recarga en caliente y un fallback del proyecto editable en vivo desde la página **Plugins** de la Web.
|
|
43
45
|
- **Registro de renderers (`output.render.*`)** — `ctx.outputRenderers` permite a cualquier plugin registrar un presenter puro, aplicado a través de la cascada `output.render/before`; renderers integrados `concise` y `step-by-step`.
|
|
44
|
-
- **Reglas por sesión/por herramienta** — `rules: [{ match: { tool: 'bash' }, style: 'concise' }]` nombran el renderer para solicitudes coincidentes; editables
|
|
45
|
-
- **`/
|
|
46
|
+
- **Reglas por sesión/por herramienta** — `rules: [{ match: { tool: 'bash' }, style: 'concise' }]` nombran el renderer para solicitudes coincidentes; editables en vivo desde la página **Plugins** de la Web.
|
|
47
|
+
- **`/transcript`** — renderiza la sesión actual a Markdown o HTML saneado a través de la tubería de render; `--save <path>` escribe el documento saneado en esa ruta de workspace tras la aprobación del usuario. Cada render conserva el texto original junto al renderizado.
|
|
46
48
|
|
|
47
49
|
## Quick start
|
|
48
50
|
|
|
@@ -89,7 +91,7 @@ flowchart LR
|
|
|
89
91
|
M -->|full system prompt| H[system/message logged]
|
|
90
92
|
```
|
|
91
93
|
|
|
92
|
-
Todo lo que el modelo ve es reconstruible desde el registro de sesión — sin un nuevo tipo de evento de sesión, sin cambios en el agent-loop. El nombre del estilo viene de `command/run`, el texto exacto inyectado de `system/message`, y el marcador de procedencia `{ kind: '
|
|
94
|
+
Todo lo que el modelo ve es reconstruible desde el registro de sesión — sin un nuevo tipo de evento de sesión, sin cambios en el agent-loop. El nombre del estilo viene de `command/run`, el texto exacto inyectado de `system/message`, y el marcador de procedencia `{ kind: 'dsh-output-styles' }` viaja en el registro del dominio. Los estilos se aplican solo a la conversación principal; las sesiones de subagente conservan sus propios prompts (igual que Claude Code).
|
|
93
95
|
|
|
94
96
|
## Install & uninstall
|
|
95
97
|
|
|
@@ -102,26 +104,30 @@ Todo lo que el modelo ve es reconstruible desde el registro de sesión — sin u
|
|
|
102
104
|
|
|
103
105
|
Todos los parámetros son campos Schemastery `Config` (modificables desde cordis.yml). Los valores inválidos fallan la carga.
|
|
104
106
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
|
108
|
-
|
|
109
|
-
| `
|
|
110
|
-
| `
|
|
111
|
-
| `
|
|
112
|
-
| `
|
|
113
|
-
| `
|
|
114
|
-
| `
|
|
115
|
-
| `
|
|
116
|
-
| `
|
|
117
|
-
| `
|
|
107
|
+
`defaultStyle` y `rules` están declarados `volatile()`, así que en un host que compone la costura de formularios de settings son **campos vivos, editables en la Web**: edítalos en **Plugins → dsh-output-styles** de la interfaz Web y el plugin en ejecución adopta el nuevo valor sin remontarse. Todos los demás campos siguen siendo solo de composición y requieren una recarga. Un valor confirmado se valida antes de aplicarse — si es inválido se rechaza y los valores en ejecución no cambian.
|
|
108
|
+
|
|
109
|
+
| Key | Default | Editable en Web | Meaning |
|
|
110
|
+
|---|---|---|---|
|
|
111
|
+
| `stylesDir` | `[]` | No | Directorios de la librería, resueltos contra cwd; las entradas posteriores sobrescriben las anteriores. `[]` = solo los `styles/` integrados |
|
|
112
|
+
| `maxStyleChars` | `4000` | No | Presupuesto del cuerpo del estilo (≥ 1); los cuerpos más largos se truncan con un marcador |
|
|
113
|
+
| `defaultStyle` | `''` | **Sí** | Estilo para sesiones que nunca eligieron uno; `''` = sin estilo. Un nombre que no está en la librería viva se rechaza en lugar de inyectarse |
|
|
114
|
+
| `compatJson` | `true` | No | Cargar entradas JSON `outputStyles` de Claude Code (objetos sueltos o arrays) |
|
|
115
|
+
| `sectionOrder` | `90` | No | Orden de la sección inyectada (0 = persona, 100–199 = guía de herramientas) |
|
|
116
|
+
| `truncationMarker` | `"\n\n[style truncated]"` | No | Marcador añadido en el punto de truncado |
|
|
117
|
+
| `includeBuiltins` | `true` | No | Incluir los `styles/` del paquete como capa de menor prioridad |
|
|
118
|
+
| `watchStyles` | `true` | No | Recargar la librería cuando un archivo de estilo cambia en disco |
|
|
119
|
+
| `rules` | `[]` | **Sí** | Reglas de render por sesión/herramienta: `[{ match: { tool?, contentType?, session? }, style, priority? }]` |
|
|
120
|
+
| `enableExport` | `true` | No | Registrar el comando `/transcript` (exportación de sesión Markdown/HTML, consciente del renderer; `--save` escribe con aprobación) |
|
|
121
|
+
| `respectCoreOutputStyles` | `true` | No | Al detectar un servicio core `outputStyles`, omitir la inyección de prompt de este plugin (mantener hot-switch / rules / export) |
|
|
122
|
+
|
|
123
|
+
**Migración desde 0.1.6 o anterior.** Esas versiones mantenían dos secciones de settings propias del plugin, `output-style` (`style`) y `output-style-rules` (`rules`). El host 0.1.7 eliminó la API sobre la que se construyeron, así que ambas secciones ya no existen. Mueve cualquier valor que tuvieras ahí al campo `Config` correspondiente — `output-style.style` → `defaultStyle`, `output-style-rules.rules` → `rules` — en el patch de tu perfil (`cordis.yml`), o defínelo en la página Plugins. Las elecciones por sesión hechas con `/style` no se ven afectadas: viven en el dominio de almacenamiento `output_style`.
|
|
118
124
|
|
|
119
125
|
## Tools & surfaces
|
|
120
126
|
|
|
121
127
|
| Surface | Kind | Notes |
|
|
122
128
|
|---|---|---|
|
|
123
129
|
| `/style` | command | Lista estilos, cambia o restaura el valor por defecto del proyecto |
|
|
124
|
-
| `/
|
|
130
|
+
| `/transcript` | command | Renderiza la sesión actual a Markdown o HTML saneado; `--save` escribe con aprobación |
|
|
125
131
|
| `output_style` | storage domain | Elección de estilo por sesión, indexada por sessionId |
|
|
126
132
|
| `systemPrompt.section()` | contribution | Inyecta el cuerpo del estilo actual en cada ensamblado |
|
|
127
133
|
| `output.render.*` | renderer registry | `ctx.outputRenderers` + la cascada `output.render/before` |
|
|
@@ -137,11 +143,11 @@ Todos los parámetros son campos Schemastery `Config` (modificables desde cordis
|
|
|
137
143
|
| `/style Diagrams first` | Los nombres de varias palabras son el resto completo |
|
|
138
144
|
| `/style off` | Restaura el valor por defecto del proyecto (default de settings, luego `defaultStyle`) |
|
|
139
145
|
| `/style nope` | `error: unknown output style "nope" (available: …)` |
|
|
140
|
-
| `/
|
|
141
|
-
| `/
|
|
142
|
-
| `/
|
|
143
|
-
| `/
|
|
144
|
-
| `/
|
|
146
|
+
| `/transcript` | Renderiza la sesión actual a Markdown a través de la pipeline de render |
|
|
147
|
+
| `/transcript md` | Renderiza a Markdown (`md` es la forma abreviada de `markdown`) |
|
|
148
|
+
| `/transcript html` | Renderiza a HTML saneado |
|
|
149
|
+
| `/transcript --renderer=concise` | Renderiza forzando un renderer (reglas omitidas) |
|
|
150
|
+
| `/transcript md --save report.md` | Renderiza y luego escribe el documento saneado en `report.md` tras la aprobación |
|
|
145
151
|
|
|
146
152
|
## Style library
|
|
147
153
|
|
|
@@ -179,7 +185,7 @@ La entrada `dsh.client` decora la invocación desnuda del comando `/style` con u
|
|
|
179
185
|
| JSON heredado | array `outputStyles` en `settings.json` | Cargado textualmente (`compatJson: true`) |
|
|
180
186
|
| Cuándo entra en vigor | Después de `/clear` o una sesión nueva | Inmediatamente — el prompt del sistema se reensambla por solicitud |
|
|
181
187
|
| Subagentes | Los estilos no se aplican | Igual — las sesiones de subagente conservan sus propios prompts |
|
|
182
|
-
| Cambio | menú `/config` o ajuste `outputStyle` (el comando `/output-style` se eliminó en v2.1.91) | comando `/style` + Web picker +
|
|
188
|
+
| Cambio | menú `/config` o ajuste `outputStyle` (el comando `/output-style` se eliminó en v2.1.91) | comando `/style` + Web picker + campo `defaultStyle` en la página Plugins de la Web |
|
|
183
189
|
|
|
184
190
|
## Conflict check
|
|
185
191
|
|
|
@@ -189,14 +195,14 @@ Filtrado contra el ecosistema DSH antes del desarrollo (instantánea 2026-08): n
|
|
|
189
195
|
|
|
190
196
|
- **Permissions**: el manifiesto de workshop declara `fs:read`, `fs:write`, `fs:watch`, `storage:read`, `storage:write` y `settings:read`.
|
|
191
197
|
- **Data**: la elección de estilo vive en el dominio de almacenamiento `output_style` (indexada por sessionId); no se persiste otro estado, sin solicitudes de red.
|
|
192
|
-
- **Session log**: el nombre del estilo viene de `command/run`, el texto exacto inyectado de `system/message`; el marcador de procedencia `{ kind: '
|
|
198
|
+
- **Session log**: el nombre del estilo viene de `command/run`, el texto exacto inyectado de `system/message`; el marcador de procedencia `{ kind: 'dsh-output-styles' }` viaja en el registro del dominio.
|
|
193
199
|
|
|
194
200
|
## Security boundaries
|
|
195
201
|
|
|
196
202
|
- **Solo servicios públicos.** Contribuye `systemPrompt`, comandos, almacenamiento y settings; sin cambios en engine / agent-loop / apiproxy / UI oficial.
|
|
197
203
|
- **Visible para el modelo ⟺ registrado.** Todo lo que el modelo ve es reconstruible desde el registro de sesión — sin un nuevo tipo de evento de sesión, sin cambios en el agent-loop.
|
|
198
|
-
- **Original siempre conservado.** Cada render (y `/
|
|
199
|
-
- **Escrituras en disco controladas.** `/
|
|
204
|
+
- **Original siempre conservado.** Cada render (y `/transcript`) conserva el texto original junto al renderizado; para la exportación HTML se usa HTML saneado.
|
|
205
|
+
- **Escrituras en disco controladas.** `/transcript --save` escribe solo después de que el servicio de aprobación lo conceda, y el contenido escrito pasa primero por la función pura `sanitizeText`; sin un servicio de aprobación o fs no escribe nada (fail-closed).
|
|
200
206
|
|
|
201
207
|
## Known limitations
|
|
202
208
|
|
|
@@ -227,46 +233,56 @@ Lanzamientos: empujar una etiqueta `v*` cuyo sufijo coincide con la versión de
|
|
|
227
233
|
|
|
228
234
|
## PerryLink DSH Plugin Family
|
|
229
235
|
|
|
230
|
-
|
|
236
|
+
This project is one of the **45 DeepSeek Harness plugins** maintained by [PerryLink](https://github.com/PerryLink). If this one helps you, the others likely will too:
|
|
231
237
|
|
|
232
238
|
| Plugin | One-liner |
|
|
233
239
|
|---|---|
|
|
234
|
-
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** |
|
|
235
|
-
| **[dsh-
|
|
236
|
-
| **[dsh-
|
|
237
|
-
| **[dsh-
|
|
238
|
-
| **[dsh-
|
|
239
|
-
| **[dsh-
|
|
240
|
-
| **[dsh-
|
|
241
|
-
| **[dsh-
|
|
242
|
-
| **[dsh-
|
|
243
|
-
| **[dsh-
|
|
244
|
-
| **[dsh-
|
|
245
|
-
| **[dsh-
|
|
246
|
-
| **[dsh-
|
|
247
|
-
| **[dsh-
|
|
248
|
-
| **[dsh-
|
|
249
|
-
| **[dsh-
|
|
250
|
-
| **[dsh-
|
|
251
|
-
| **[dsh-
|
|
252
|
-
| **[dsh-
|
|
253
|
-
| **[dsh-
|
|
254
|
-
| **[dsh-
|
|
255
|
-
| **[dsh-
|
|
256
|
-
| **[dsh-
|
|
257
|
-
| **[dsh-
|
|
258
|
-
| **[dsh-
|
|
259
|
-
| **[dsh-
|
|
260
|
-
| **[dsh-
|
|
261
|
-
| **[dsh-
|
|
262
|
-
| **[dsh-
|
|
263
|
-
| **[dsh-
|
|
264
|
-
| **[dsh-
|
|
265
|
-
| **[dsh-
|
|
266
|
-
| **[dsh-
|
|
267
|
-
| **[dsh-
|
|
268
|
-
| **[dsh-
|
|
269
|
-
| **[dsh-
|
|
240
|
+
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | |
|
|
241
|
+
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
|
|
242
|
+
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | |
|
|
243
|
+
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | |
|
|
244
|
+
| **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
|
|
245
|
+
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
|
|
246
|
+
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore | |
|
|
247
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH | |
|
|
248
|
+
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
|
|
249
|
+
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | |
|
|
250
|
+
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) | |
|
|
251
|
+
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | |
|
|
252
|
+
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | |
|
|
253
|
+
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | |
|
|
254
|
+
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics for DeepSeek Harness. | |
|
|
255
|
+
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Deterministic research reports for Chinese public mutual funds | |
|
|
256
|
+
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issues integration for DSH, every write gated by approval | |
|
|
257
|
+
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Industry research orchestration that seals its deliverables through this plugin's `ctx.researchReport.assemble` | |
|
|
258
|
+
| **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | Laya typed decisions (`noul`/`choice`/`score`) as a first-class Cordis service and model-visible tools | |
|
|
259
|
+
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | Local document knowledge base for DeepSeek Harness. | |
|
|
260
|
+
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Local-model (Ollama) integration for DeepSeek Harness. | |
|
|
261
|
+
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
|
|
262
|
+
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
|
|
263
|
+
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
|
|
264
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
265
|
+
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
|
|
266
|
+
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
|
|
267
|
+
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
|
|
268
|
+
| **[dsh-plugin-certification](https://github.com/PerryLink/dsh-plugin-certification)** | Community certification registry with repro-checkable grades and badges | |
|
|
269
|
+
| **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | Zero-dependency static + sandbox smoke detector for DSH plugins | |
|
|
270
|
+
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-development knowledge base as an on-demand agent skill | |
|
|
271
|
+
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
|
|
272
|
+
| **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | One-package, one-corridor-index plugin upgrade skill: routes a repository to the matching closed corridor card | |
|
|
273
|
+
| **[dsh-plugin-upgrade-015](https://github.com/PerryLink/dsh-plugin-upgrade-015)** | Merged `0.1.3-alpha.1` → `0.1.5-rc.1` upgrade corridor card plus a zero-dependency seam scanner | |
|
|
274
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | |
|
|
275
|
+
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research-report engine: content-addressed evidence ledger and sealed versions | |
|
|
276
|
+
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional quality scoring for DeepSeek Harness plugins. | |
|
|
277
|
+
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions in the Web sidebar with durable ordering | |
|
|
278
|
+
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | Cross-device session sync for DeepSeek Harness — a dedicated git mirror of your session store. | |
|
|
279
|
+
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | Security-audit skill pack: secret scan, dependency and supply-chain review | |
|
|
280
|
+
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. | |
|
|
281
|
+
| **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | Cross-session team rooms: shared message bus, task board and timeline | |
|
|
282
|
+
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | Isolated install-and-smoke test drives for DeepSeek Harness plugins. | |
|
|
283
|
+
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 task bridge: session-header panel + 11 tools | |
|
|
284
|
+
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. | |
|
|
285
|
+
|
|
270
286
|
|
|
271
287
|
## License
|
|
272
288
|
|