dsh-docx-redline 0.1.0-alpha.7 → 0.1.0-alpha.8

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 ADDED
@@ -0,0 +1,24 @@
1
+ # Changelog
2
+
3
+ All notable changes to `dsh-docx-redline` are documented here. The format follows Keep a Changelog; this project uses alpha versions.
4
+
5
+ ## [0.1.0-alpha.8] — 2026-11-01
6
+
7
+ ### Added
8
+
9
+ - Five-language READMEs: English, 简体中文, Español, Português, हिन्दी.
10
+ - Local workflow SVG at `docs/assets/dsh-docx-redline-flow.svg`.
11
+ - Family cross-links (domain index, checker family, `dsh-kit`), compatibility, permissions, and related-work sections.
12
+ - Standard repository files: `SECURITY.md`, `PRIVACY.md`, `CODE_OF_CONDUCT.md`, `CONTRIBUTING.md`, and `icon.svg`.
13
+
14
+ ### Changed
15
+
16
+ - README aligned with the PerryLink DSH checker/plugin family style; package remains public/synthetic, alpha, not GA.
17
+
18
+ ### Maintenance
19
+
20
+ - Frozen on 2026-10-31: no new features; only genuine breakage fixes.
21
+
22
+ ## [Earlier]
23
+
24
+ Earlier alpha builds are available from npm and GitHub Releases; this file starts at the family-standard documentation wave.
@@ -0,0 +1,31 @@
1
+ # Code of Conduct
2
+
3
+ ## Our pledge
4
+
5
+ We as members, contributors, and maintainers pledge to make participation in this project a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
6
+
7
+ ## Our standards
8
+
9
+ Examples of behavior that contributes to a positive environment:
10
+
11
+ - Demonstrating empathy and kindness toward other people.
12
+ - Being respectful of differing opinions, viewpoints, and experiences.
13
+ - Giving and gracefully accepting constructive feedback.
14
+ - Accepting responsibility and apologizing to those affected by our mistakes.
15
+ - Focusing on what is best for the community and the project.
16
+
17
+ Examples of unacceptable behavior:
18
+
19
+ - Sexualized language or imagery, and sexual attention or advances.
20
+ - Trolling, insulting or derogatory comments, and personal or political attacks.
21
+ - Public or private harassment.
22
+ - Publishing others' private information without explicit permission.
23
+ - Other conduct which could reasonably be considered inappropriate in a professional setting.
24
+
25
+ ## Enforcement
26
+
27
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to **novelnexusai@outlook.com**. All complaints will be reviewed and investigated promptly and fairly. Maintainers will respect the privacy and security of the reporter.
28
+
29
+ ## Attribution
30
+
31
+ This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), version 2.1, available at <https://www.contributor-covenant.org/version/2/1/code_of_conduct.html>.
@@ -0,0 +1,35 @@
1
+ # Contributing
2
+
3
+ Thanks for taking a look at `dsh-docx-redline`.
4
+
5
+ ## Before you start
6
+
7
+ - This is a **public/synthetic alpha** project, not a production product. Do not send customer data, customer documents, credentials, or private evidence.
8
+ - The project is **frozen** (2026-10-31). Only genuine breakage fixes are considered; do not open feature PRs.
9
+ - One pull request should do one thing. Keep generated evidence and unrelated formatting out of the diff.
10
+
11
+ ## Local checks
12
+
13
+ ```sh
14
+ pnpm install --frozen-lockfile
15
+ pnpm build && pnpm lint && pnpm typecheck && pnpm test
16
+ ```
17
+
18
+ For the suite repositories, also run:
19
+
20
+ ```sh
21
+ node scripts/check.mjs
22
+ npm pack --dry-run
23
+ ```
24
+
25
+ ## Pull requests
26
+
27
+ - Describe the user-visible problem and the failure before the fix.
28
+ - Include a regression test or a fixture-backed reproduction.
29
+ - Update `CHANGELOG.md` for user-visible changes.
30
+ - Do not add a network call, model call, telemetry, or a customer-data path without an explicit design discussion.
31
+ - By contributing, you agree your contribution is licensed under Apache-2.0.
32
+
33
+ ## Security
34
+
35
+ Do not open a public issue for a vulnerability; see `SECURITY.md`.
package/PRIVACY.md ADDED
@@ -0,0 +1,11 @@
1
+ # Privacy
2
+
3
+ `dsh-docx-redline` is a local, public/synthetic alpha project.
4
+
5
+ - It does **not** collect telemetry, analytics, or usage data.
6
+ - It does **not** upload files, call a model, or call a network service unless a tool in the README explicitly says so.
7
+ - Its fixtures are public/synthetic; no customer data is included.
8
+ - The package writes only to the local paths documented in its README and `DSH_*` environment variables.
9
+ - npm/GitHub/Gitee/GitCode process download and repository metadata under their own privacy policies; that is outside this package.
10
+
11
+ Questions: **novelnexusai@outlook.com**.
package/README-es.md CHANGED
@@ -54,6 +54,16 @@ Desinstalar:
54
54
  dsh plugin --profile <profile> remove dsh-docx-redline
55
55
  ```
56
56
 
57
+
58
+ ### Canales de instalación
59
+
60
+ npm es el canal recomendado; los demás sirven para fijar versión u offline.
61
+
62
+ - **npm (recomendado):** `dsh plugin --profile <profile> add dsh-docx-redline`
63
+ - **canal git:** `dsh plugin --profile <profile> add github:PerryLink/dsh-docx-redline`
64
+ - **tarball:** `pnpm pack` then `dsh plugin --profile <profile> add ./dsh-docx-redline-<version>.tgz`
65
+ - **tienda 1024:** `npm i -g dsh1024` then `dsh1024 plugin --profile <profile> add dsh-docx-redline`
66
+
57
67
  ## Qué hace
58
68
 
59
69
  Inspección de estructura DOCX, roundtrip byte a byte y reemplazo limitado de texto en un solo run. Se ejecuta localmente en DeepSeek Harness. La tabla siguiente es la superficie exacta de herramientas; los ejemplos usan la interfaz real.
@@ -62,14 +72,14 @@ La entrada y la salida permanecen locales; no se sube nada.
62
72
 
63
73
  ## Herramientas
64
74
 
65
- Los nombres y descripciones de herramientas se mantienen en inglés para coincidir con la salida runtime.
75
+ Los nombres de herramientas son la API estable; las descripciones están localizadas.
66
76
 
67
- | Herramienta | Propósito (en inglés) | Riesgo |
77
+ | Herramienta | Propósito | Riesgo |
68
78
  |---|---|---|
69
- | `doc.inspect` | Read a local `.docx` ZIP/XML, store the original, and report part SHA-256 plus structure counts (paragraphs, tables, headers/footers, footnotes, comments, fields, bookmarks, numbering, sections, styles) | R0 read + local store |
70
- | `doc.roundtrip` | Copy the original byte-for-byte and compare every part hash; return a zero-diff report | R1 local write |
71
- | `doc.replace_text` | Replace one exact `w:t` run; fail closed when the text is not unique or spans runs | R1 local write |
72
- | `redline.diff` | Text-level paragraph diff between two inspected DOCX files; no OOXML writing | R0 |
79
+ | `doc.inspect` | Leer un ZIP/XML `.docx` local, guardar el original e informar el SHA-256 de cada parte y los recuentos de estructura (párrafos, tablas, encabezados/pies, notas al pie, comentarios, campos, marcadores, numeración, secciones, estilos) | R0 read + local store |
80
+ | `doc.roundtrip` | Copiar el original byte a byte y comparar el hash de cada parte; devolver un informe sin diferencias | R1 local write |
81
+ | `doc.replace_text` | Reemplazar un run `w:t` exacto; fallar de forma segura cuando el texto no es único o abarca varios runs | R1 local write |
82
+ | `redline.diff` | Diff de párrafos a nivel de texto entre dos archivos DOCX inspeccionados; sin escritura de OOXML | R0 |
73
83
 
74
84
  ## Inicio rápido
75
85
 
@@ -78,6 +88,22 @@ dsh plugin --profile <profile> add dsh-docx-redline
78
88
  dsh --profile <profile> --dump-config | grep dsh-docx-redline
79
89
  ```
80
90
 
91
+ ## Ejemplos
92
+
93
+ ### Ejemplo respaldado por fixture
94
+
95
+ Entrada: [`fixtures/public/python-docx/blk-containing-table.docx`](fixtures/public/python-docx/blk-containing-table.docx)
96
+
97
+ Comando: `pnpm test`
98
+
99
+ Fila de aceptación:
100
+
101
+ | req_id | metric | threshold | actual | pass | source | counted |
102
+ |---|---|---|---|---|---|---|
103
+ | SKU-01-A01 | 无改动往返通过率(20 合成) | 100% | 1 | true | public/synthetic | false |
104
+
105
+ *Es una fila de aceptación respaldada por fixture, no una ejecución de cliente; no se inventa salida.*
106
+
81
107
  ## Límites
82
108
 
83
109
  - Solo público/sintético; sin datos ni evidencia de clientes.
@@ -87,7 +113,7 @@ dsh --profile <profile> --dump-config | grep dsh-docx-redline
87
113
 
88
114
  ## Muestra pública
89
115
 
90
- Las fixtures públicas/sintéticas están en `test/fixtures/`; `ACCEPTANCE.csv` registra las comprobaciones con `counted=false`.
116
+ Las fixtures públicas/sintéticas están en `fixtures/`; `ACCEPTANCE.csv` registra las comprobaciones con `counted=false`.
91
117
 
92
118
  ## Desarrollo
93
119
 
@@ -147,6 +173,107 @@ Paquetes hermanos e índices de familia: [dsh-ifc-qto](https://github.com/PerryL
147
173
 
148
174
  </details>
149
175
 
176
+
177
+ <details>
178
+ <summary>Familia principal — 92 specs de instalación</summary>
179
+
180
+ | Package | npm |
181
+ |---|---|
182
+ | **[dsh-aqua-input-check](https://github.com/PerryLink/dsh-aqua-input-check)** | [npm](https://www.npmjs.com/package/dsh-aqua-input-check) |
183
+ | **[dsh-archive-check](https://github.com/PerryLink/dsh-archive-check)** | [npm](https://www.npmjs.com/package/dsh-archive-check) |
184
+ | **[dsh-bid-ca-precheck](https://github.com/PerryLink/dsh-bid-ca-precheck)** | [npm](https://www.npmjs.com/package/dsh-bid-ca-precheck) |
185
+ | **[dsh-bid-qual-check](https://github.com/PerryLink/dsh-bid-qual-check)** | [npm](https://www.npmjs.com/package/dsh-bid-qual-check) |
186
+ | **[dsh-contract-stance](https://github.com/PerryLink/dsh-contract-stance)** | [npm](https://www.npmjs.com/package/dsh-contract-stance) |
187
+ | **[dsh-customs-doc-check](https://github.com/PerryLink/dsh-customs-doc-check)** | [npm](https://www.npmjs.com/package/dsh-customs-doc-check) |
188
+ | **[dsh-demurrage-ledger](https://github.com/PerryLink/dsh-demurrage-ledger)** | [npm](https://www.npmjs.com/package/dsh-demurrage-ledger) |
189
+ | **[dsh-drill-script-check](https://github.com/PerryLink/dsh-drill-script-check)** | [npm](https://www.npmjs.com/package/dsh-drill-script-check) |
190
+ | **[dsh-eia-guide-check](https://github.com/PerryLink/dsh-eia-guide-check)** | [npm](https://www.npmjs.com/package/dsh-eia-guide-check) |
191
+ | **[dsh-emergency-plan](https://github.com/PerryLink/dsh-emergency-plan)** | [npm](https://www.npmjs.com/package/dsh-emergency-plan) |
192
+ | **[dsh-essay-rubric-check](https://github.com/PerryLink/dsh-essay-rubric-check)** | [npm](https://www.npmjs.com/package/dsh-essay-rubric-check) |
193
+ | **[dsh-evidence-check](https://github.com/PerryLink/dsh-evidence-check)** | [npm](https://www.npmjs.com/package/dsh-evidence-check) |
194
+ | **[dsh-export-ctl-check](https://github.com/PerryLink/dsh-export-ctl-check)** | [npm](https://www.npmjs.com/package/dsh-export-ctl-check) |
195
+ | **[dsh-fmea-table-check](https://github.com/PerryLink/dsh-fmea-table-check)** | [npm](https://www.npmjs.com/package/dsh-fmea-table-check) |
196
+ | **[dsh-forecast-penalty](https://github.com/PerryLink/dsh-forecast-penalty)** | [npm](https://www.npmjs.com/package/dsh-forecast-penalty) |
197
+ | **[dsh-gongwen-flow-check](https://github.com/PerryLink/dsh-gongwen-flow-check)** | [npm](https://www.npmjs.com/package/dsh-gongwen-flow-check) |
198
+ | **[dsh-gongwen-word-check](https://github.com/PerryLink/dsh-gongwen-word-check)** | [npm](https://www.npmjs.com/package/dsh-gongwen-word-check) |
199
+ | **[dsh-guard-plan-qc](https://github.com/PerryLink/dsh-guard-plan-qc)** | [npm](https://www.npmjs.com/package/dsh-guard-plan-qc) |
200
+ | **[dsh-hazchem-check](https://github.com/PerryLink/dsh-hazchem-check)** | [npm](https://www.npmjs.com/package/dsh-hazchem-check) |
201
+ | **[dsh-hazplan-check](https://github.com/PerryLink/dsh-hazplan-check)** | [npm](https://www.npmjs.com/package/dsh-hazplan-check) |
202
+ | **[dsh-hidden-risk-map](https://github.com/PerryLink/dsh-hidden-risk-map)** | [npm](https://www.npmjs.com/package/dsh-hidden-risk-map) |
203
+ | **[dsh-hs-classify](https://github.com/PerryLink/dsh-hs-classify)** | [npm](https://www.npmjs.com/package/dsh-hs-classify) |
204
+ | **[dsh-icd-rule-check](https://github.com/PerryLink/dsh-icd-rule-check)** | [npm](https://www.npmjs.com/package/dsh-icd-rule-check) |
205
+ | **[dsh-lawcite-adapter](https://github.com/PerryLink/dsh-lawcite-adapter)** | [npm](https://www.npmjs.com/package/dsh-lawcite-adapter) |
206
+ | **[dsh-lc-doc-check](https://github.com/PerryLink/dsh-lc-doc-check)** | [npm](https://www.npmjs.com/package/dsh-lc-doc-check) |
207
+ | **[dsh-learning-gap-check](https://github.com/PerryLink/dsh-learning-gap-check)** | [npm](https://www.npmjs.com/package/dsh-learning-gap-check) |
208
+ | **[dsh-medrec-qc](https://github.com/PerryLink/dsh-medrec-qc)** | [npm](https://www.npmjs.com/package/dsh-medrec-qc) |
209
+ | **[dsh-nsfc-form-check](https://github.com/PerryLink/dsh-nsfc-form-check)** | [npm](https://www.npmjs.com/package/dsh-nsfc-form-check) |
210
+ | **[dsh-nurse-record-check](https://github.com/PerryLink/dsh-nurse-record-check)** | [npm](https://www.npmjs.com/package/dsh-nurse-record-check) |
211
+ | **[dsh-origin-rvc-check](https://github.com/PerryLink/dsh-origin-rvc-check)** | [npm](https://www.npmjs.com/package/dsh-origin-rvc-check) |
212
+ | **[dsh-ota-review-check](https://github.com/PerryLink/dsh-ota-review-check)** | [npm](https://www.npmjs.com/package/dsh-ota-review-check) |
213
+ | **[dsh-paper-doc-adapter](https://github.com/PerryLink/dsh-paper-doc-adapter)** | [npm](https://www.npmjs.com/package/dsh-paper-doc-adapter) |
214
+ | **[dsh-permit-report-check](https://github.com/PerryLink/dsh-permit-report-check)** | [npm](https://www.npmjs.com/package/dsh-permit-report-check) |
215
+ | **[dsh-pipeline-check](https://github.com/PerryLink/dsh-pipeline-check)** | [npm](https://www.npmjs.com/package/dsh-pipeline-check) |
216
+ | **[dsh-pleading-draft](https://github.com/PerryLink/dsh-pleading-draft)** | [npm](https://www.npmjs.com/package/dsh-pleading-draft) |
217
+ | **[dsh-policy-brief-draft](https://github.com/PerryLink/dsh-policy-brief-draft)** | [npm](https://www.npmjs.com/package/dsh-policy-brief-draft) |
218
+ | **[dsh-power-loss-split](https://github.com/PerryLink/dsh-power-loss-split)** | [npm](https://www.npmjs.com/package/dsh-power-loss-split) |
219
+ | **[dsh-power-ticket-check](https://github.com/PerryLink/dsh-power-ticket-check)** | [npm](https://www.npmjs.com/package/dsh-power-ticket-check) |
220
+ | **[dsh-ppap-check](https://github.com/PerryLink/dsh-ppap-check)** | [npm](https://www.npmjs.com/package/dsh-ppap-check) |
221
+ | **[dsh-protest-deadline](https://github.com/PerryLink/dsh-protest-deadline)** | [npm](https://www.npmjs.com/package/dsh-protest-deadline) |
222
+ | **[dsh-railway-window](https://github.com/PerryLink/dsh-railway-window)** | [npm](https://www.npmjs.com/package/dsh-railway-window) |
223
+ | **[dsh-repair-order-qc](https://github.com/PerryLink/dsh-repair-order-qc)** | [npm](https://www.npmjs.com/package/dsh-repair-order-qc) |
224
+ | **[dsh-review-reply-check](https://github.com/PerryLink/dsh-review-reply-check)** | [npm](https://www.npmjs.com/package/dsh-review-reply-check) |
225
+ | **[dsh-rulefile-check](https://github.com/PerryLink/dsh-rulefile-check)** | [npm](https://www.npmjs.com/package/dsh-rulefile-check) |
226
+ | **[dsh-safety-brief-check](https://github.com/PerryLink/dsh-safety-brief-check)** | [npm](https://www.npmjs.com/package/dsh-safety-brief-check) |
227
+ | **[dsh-site-log-check](https://github.com/PerryLink/dsh-site-log-check)** | [npm](https://www.npmjs.com/package/dsh-site-log-check) |
228
+ | **[dsh-soe-decision-check](https://github.com/PerryLink/dsh-soe-decision-check)** | [npm](https://www.npmjs.com/package/dsh-soe-decision-check) |
229
+ | **[dsh-soilwater-check](https://github.com/PerryLink/dsh-soilwater-check)** | [npm](https://www.npmjs.com/package/dsh-soilwater-check) |
230
+ | **[dsh-sop-sync-check](https://github.com/PerryLink/dsh-sop-sync-check)** | [npm](https://www.npmjs.com/package/dsh-sop-sync-check) |
231
+ | **[dsh-spc-gbt-adapter](https://github.com/PerryLink/dsh-spc-gbt-adapter)** | [npm](https://www.npmjs.com/package/dsh-spc-gbt-adapter) |
232
+ | **[dsh-tender-extract](https://github.com/PerryLink/dsh-tender-extract)** | [npm](https://www.npmjs.com/package/dsh-tender-extract) |
233
+ | **[dsh-tender-matrix](https://github.com/PerryLink/dsh-tender-matrix)** | [npm](https://www.npmjs.com/package/dsh-tender-matrix) |
234
+ | **[dsh-warranty-calc](https://github.com/PerryLink/dsh-warranty-calc)** | [npm](https://www.npmjs.com/package/dsh-warranty-calc) |
235
+ | **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | [npm](https://www.npmjs.com/package/dsh-auto-review) |
236
+ | **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | [npm](https://www.npmjs.com/package/dsh-autotier) |
237
+ | **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | [npm](https://www.npmjs.com/package/dsh-budget) |
238
+ | **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | [npm](https://www.npmjs.com/package/dsh-cert-mcp) |
239
+ | **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | [npm](https://www.npmjs.com/package/dsh-checkpoint-rewind) |
240
+ | **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | [npm](https://www.npmjs.com/package/dsh-claude-move) |
241
+ | **[dsh-click](https://github.com/PerryLink/dsh-click)** | [npm](https://www.npmjs.com/package/dsh-click) |
242
+ | **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | [npm](https://www.npmjs.com/package/dsh-composer-history) |
243
+ | **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | [npm](https://www.npmjs.com/package/dsh-data-quality) |
244
+ | **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | [npm](https://www.npmjs.com/package/dsh-defend) |
245
+ | **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | [npm](https://www.npmjs.com/package/dsh-doublecheck) |
246
+ | **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | [npm](https://www.npmjs.com/package/dsh-draw) |
247
+ | **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | [npm](https://www.npmjs.com/package/dsh-fast) |
248
+ | **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | [npm](https://www.npmjs.com/package/dsh-fund-research) |
249
+ | **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | [npm](https://www.npmjs.com/package/dsh-industry-research) |
250
+ | **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | [npm](https://www.npmjs.com/package/dsh-laya) |
251
+ | **[dsh-library](https://github.com/PerryLink/dsh-library)** | [npm](https://www.npmjs.com/package/dsh-library) |
252
+ | **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | [npm](https://www.npmjs.com/package/dsh-local-ai) |
253
+ | **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | [npm](https://www.npmjs.com/package/dsh-lsp-actions) |
254
+ | **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | [npm](https://www.npmjs.com/package/dsh-mask) |
255
+ | **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | [npm](https://www.npmjs.com/package/dsh-mcp-panel) |
256
+ | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | [npm](https://www.npmjs.com/package/dsh-memento) |
257
+ | **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | [npm](https://www.npmjs.com/package/dsh-observe) |
258
+ | **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | [npm](https://www.npmjs.com/package/dsh-output-styles) |
259
+ | **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | [npm](https://www.npmjs.com/package/dsh-permission-rules) |
260
+ | **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | [npm](https://www.npmjs.com/package/dsh-plugin-guide) |
261
+ | **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | [npm](https://www.npmjs.com/package/dsh-plugin-upgrade) |
262
+ | **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | [npm](https://www.npmjs.com/package/dsh-reach) |
263
+ | **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | [npm](https://www.npmjs.com/package/dsh-research-report) |
264
+ | **[dsh-score](https://github.com/PerryLink/dsh-score)** | [npm](https://www.npmjs.com/package/dsh-score) |
265
+ | **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | [npm](https://www.npmjs.com/package/dsh-session-sync) |
266
+ | **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | [npm](https://www.npmjs.com/package/dsh-talk) |
267
+ | **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | [npm](https://www.npmjs.com/package/dsh-test-drive) |
268
+ | **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | [npm](https://www.npmjs.com/package/dsh-translate) |
269
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
270
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
271
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
272
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
273
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
274
+
275
+ </details>
276
+
150
277
  ## Licencia
151
278
 
152
279
  Apache-2.0. See `LICENSE`, `NOTICE`, `THIRD-PARTY-NOTICES`.
package/README-hi.md CHANGED
@@ -54,6 +54,16 @@ dsh --profile <profile> --dump-config | grep dsh-docx-redline
54
54
  dsh plugin --profile <profile> remove dsh-docx-redline
55
55
  ```
56
56
 
57
+
58
+ ### इंस्टॉल चैनल
59
+
60
+ npm अनुशंसित है; बाकी वर्ज़न पिन या ऑफ़लाइन के लिए हैं।
61
+
62
+ - **npm (अनुशंसित):** `dsh plugin --profile <profile> add dsh-docx-redline`
63
+ - **git चैनल:** `dsh plugin --profile <profile> add github:PerryLink/dsh-docx-redline`
64
+ - **tarball:** `pnpm pack` then `dsh plugin --profile <profile> add ./dsh-docx-redline-<version>.tgz`
65
+ - **1024 स्टोर:** `npm i -g dsh1024` then `dsh1024 plugin --profile <profile> add dsh-docx-redline`
66
+
57
67
  ## यह क्या करता है
58
68
 
59
69
  DOCX संरचना निरीक्षण, बाइट-सटीक राउंडट्रिप और सीमित एक-रन टेक्स्ट रिप्लेस। DeepSeek Harness पर स्थानीय रूप से चलता है। नीचे दी गई तालिका ही सटीक टूल सतह है; उदाहरण वास्तविक कमांड का उपयोग करते हैं।
@@ -62,14 +72,14 @@ DOCX संरचना निरीक्षण, बाइट-सटीक र
62
72
 
63
73
  ## टूल्स
64
74
 
65
- टूल नाम और विवरण runtime आउटपुट से मेल खाने के लिए अंग्रेज़ी में रखे गए हैं।
75
+ टूल नाम स्थिर API हैं; विवरण स्थानीयकृत हैं।
66
76
 
67
- | टूल | उद्देश्य (अंग्रेज़ी) | जोखिम |
77
+ | टूल | उद्देश्य | जोखिम |
68
78
  |---|---|---|
69
- | `doc.inspect` | Read a local `.docx` ZIP/XML, store the original, and report part SHA-256 plus structure counts (paragraphs, tables, headers/footers, footnotes, comments, fields, bookmarks, numbering, sections, styles) | R0 read + local store |
70
- | `doc.roundtrip` | Copy the original byte-for-byte and compare every part hash; return a zero-diff report | R1 local write |
71
- | `doc.replace_text` | Replace one exact `w:t` run; fail closed when the text is not unique or spans runs | R1 local write |
72
- | `redline.diff` | Text-level paragraph diff between two inspected DOCX files; no OOXML writing | R0 |
79
+ | `doc.inspect` | स्थानीय `.docx` ZIP/XML पढ़ें, मूल प्रति संग्रहीत करें और भाग SHA-256 तथा संरचना गणनाएँ (पैराग्राफ़, तालिकाएँ, हेडर/फ़ुटर, फ़ुटनोट, टिप्पणियाँ, फ़ील्ड, बुकमार्क, नंबरिंग, सेक्शन, स्टाइल) रिपोर्ट करें | R0 read + local store |
80
+ | `doc.roundtrip` | मूल प्रति को बाइट-दर-बाइट कॉपी करें और प्रत्येक भाग का हैश तुलना करें; शून्य-अंतर रिपोर्ट लौटाएँ | R1 local write |
81
+ | `doc.replace_text` | एक सटीक `w:t` रन बदलें; टेक्स्ट अद्वितीय न हो या कई रन में फैला हो तो fail closed करें | R1 local write |
82
+ | `redline.diff` | दो निरीक्षित DOCX फ़ाइलों के बीच टेक्स्ट-स्तरीय पैराग्राफ़ अंतर; कोई OOXML लेखन नहीं | R0 |
73
83
 
74
84
  ## त्वरित शुरुआत
75
85
 
@@ -78,6 +88,22 @@ dsh plugin --profile <profile> add dsh-docx-redline
78
88
  dsh --profile <profile> --dump-config | grep dsh-docx-redline
79
89
  ```
80
90
 
91
+ ## उदाहरण
92
+
93
+ ### fixture-आधारित उदाहरण
94
+
95
+ इनपुट: [`fixtures/public/python-docx/blk-containing-table.docx`](fixtures/public/python-docx/blk-containing-table.docx)
96
+
97
+ कमांड: `pnpm test`
98
+
99
+ स्वीकृति पंक्ति:
100
+
101
+ | req_id | metric | threshold | actual | pass | source | counted |
102
+ |---|---|---|---|---|---|---|
103
+ | SKU-01-A01 | 无改动往返通过率(20 合成) | 100% | 1 | true | public/synthetic | false |
104
+
105
+ *यह fixture-आधारित स्वीकृति पंक्ति है, ग्राहक रन नहीं; कोई आउटपुट नहीं गढ़ा गया।*
106
+
81
107
  ## सीमाएँ
82
108
 
83
109
  - केवल सार्वजनिक/सिंथेटिक; ग्राहक डेटा या साक्ष्य नहीं।
@@ -87,7 +113,7 @@ dsh --profile <profile> --dump-config | grep dsh-docx-redline
87
113
 
88
114
  ## सार्वजनिक नमूना
89
115
 
90
- सार्वजनिक/सिंथेटिक fixtures `test/fixtures/` में हैं; `ACCEPTANCE.csv` सार्वजनिक जाँचों को `counted=false` के साथ दर्ज करता है।
116
+ सार्वजनिक/सिंथेटिक fixtures `fixtures/` में हैं; `ACCEPTANCE.csv` सार्वजनिक जाँचों को `counted=false` के साथ दर्ज करता है।
91
117
 
92
118
  ## विकास
93
119
 
@@ -147,6 +173,107 @@ pnpm build && pnpm lint && pnpm typecheck && pnpm test
147
173
 
148
174
  </details>
149
175
 
176
+
177
+ <details>
178
+ <summary>मुख्य परिवार — 92 वर्तमान इंस्टॉल spec</summary>
179
+
180
+ | Package | npm |
181
+ |---|---|
182
+ | **[dsh-aqua-input-check](https://github.com/PerryLink/dsh-aqua-input-check)** | [npm](https://www.npmjs.com/package/dsh-aqua-input-check) |
183
+ | **[dsh-archive-check](https://github.com/PerryLink/dsh-archive-check)** | [npm](https://www.npmjs.com/package/dsh-archive-check) |
184
+ | **[dsh-bid-ca-precheck](https://github.com/PerryLink/dsh-bid-ca-precheck)** | [npm](https://www.npmjs.com/package/dsh-bid-ca-precheck) |
185
+ | **[dsh-bid-qual-check](https://github.com/PerryLink/dsh-bid-qual-check)** | [npm](https://www.npmjs.com/package/dsh-bid-qual-check) |
186
+ | **[dsh-contract-stance](https://github.com/PerryLink/dsh-contract-stance)** | [npm](https://www.npmjs.com/package/dsh-contract-stance) |
187
+ | **[dsh-customs-doc-check](https://github.com/PerryLink/dsh-customs-doc-check)** | [npm](https://www.npmjs.com/package/dsh-customs-doc-check) |
188
+ | **[dsh-demurrage-ledger](https://github.com/PerryLink/dsh-demurrage-ledger)** | [npm](https://www.npmjs.com/package/dsh-demurrage-ledger) |
189
+ | **[dsh-drill-script-check](https://github.com/PerryLink/dsh-drill-script-check)** | [npm](https://www.npmjs.com/package/dsh-drill-script-check) |
190
+ | **[dsh-eia-guide-check](https://github.com/PerryLink/dsh-eia-guide-check)** | [npm](https://www.npmjs.com/package/dsh-eia-guide-check) |
191
+ | **[dsh-emergency-plan](https://github.com/PerryLink/dsh-emergency-plan)** | [npm](https://www.npmjs.com/package/dsh-emergency-plan) |
192
+ | **[dsh-essay-rubric-check](https://github.com/PerryLink/dsh-essay-rubric-check)** | [npm](https://www.npmjs.com/package/dsh-essay-rubric-check) |
193
+ | **[dsh-evidence-check](https://github.com/PerryLink/dsh-evidence-check)** | [npm](https://www.npmjs.com/package/dsh-evidence-check) |
194
+ | **[dsh-export-ctl-check](https://github.com/PerryLink/dsh-export-ctl-check)** | [npm](https://www.npmjs.com/package/dsh-export-ctl-check) |
195
+ | **[dsh-fmea-table-check](https://github.com/PerryLink/dsh-fmea-table-check)** | [npm](https://www.npmjs.com/package/dsh-fmea-table-check) |
196
+ | **[dsh-forecast-penalty](https://github.com/PerryLink/dsh-forecast-penalty)** | [npm](https://www.npmjs.com/package/dsh-forecast-penalty) |
197
+ | **[dsh-gongwen-flow-check](https://github.com/PerryLink/dsh-gongwen-flow-check)** | [npm](https://www.npmjs.com/package/dsh-gongwen-flow-check) |
198
+ | **[dsh-gongwen-word-check](https://github.com/PerryLink/dsh-gongwen-word-check)** | [npm](https://www.npmjs.com/package/dsh-gongwen-word-check) |
199
+ | **[dsh-guard-plan-qc](https://github.com/PerryLink/dsh-guard-plan-qc)** | [npm](https://www.npmjs.com/package/dsh-guard-plan-qc) |
200
+ | **[dsh-hazchem-check](https://github.com/PerryLink/dsh-hazchem-check)** | [npm](https://www.npmjs.com/package/dsh-hazchem-check) |
201
+ | **[dsh-hazplan-check](https://github.com/PerryLink/dsh-hazplan-check)** | [npm](https://www.npmjs.com/package/dsh-hazplan-check) |
202
+ | **[dsh-hidden-risk-map](https://github.com/PerryLink/dsh-hidden-risk-map)** | [npm](https://www.npmjs.com/package/dsh-hidden-risk-map) |
203
+ | **[dsh-hs-classify](https://github.com/PerryLink/dsh-hs-classify)** | [npm](https://www.npmjs.com/package/dsh-hs-classify) |
204
+ | **[dsh-icd-rule-check](https://github.com/PerryLink/dsh-icd-rule-check)** | [npm](https://www.npmjs.com/package/dsh-icd-rule-check) |
205
+ | **[dsh-lawcite-adapter](https://github.com/PerryLink/dsh-lawcite-adapter)** | [npm](https://www.npmjs.com/package/dsh-lawcite-adapter) |
206
+ | **[dsh-lc-doc-check](https://github.com/PerryLink/dsh-lc-doc-check)** | [npm](https://www.npmjs.com/package/dsh-lc-doc-check) |
207
+ | **[dsh-learning-gap-check](https://github.com/PerryLink/dsh-learning-gap-check)** | [npm](https://www.npmjs.com/package/dsh-learning-gap-check) |
208
+ | **[dsh-medrec-qc](https://github.com/PerryLink/dsh-medrec-qc)** | [npm](https://www.npmjs.com/package/dsh-medrec-qc) |
209
+ | **[dsh-nsfc-form-check](https://github.com/PerryLink/dsh-nsfc-form-check)** | [npm](https://www.npmjs.com/package/dsh-nsfc-form-check) |
210
+ | **[dsh-nurse-record-check](https://github.com/PerryLink/dsh-nurse-record-check)** | [npm](https://www.npmjs.com/package/dsh-nurse-record-check) |
211
+ | **[dsh-origin-rvc-check](https://github.com/PerryLink/dsh-origin-rvc-check)** | [npm](https://www.npmjs.com/package/dsh-origin-rvc-check) |
212
+ | **[dsh-ota-review-check](https://github.com/PerryLink/dsh-ota-review-check)** | [npm](https://www.npmjs.com/package/dsh-ota-review-check) |
213
+ | **[dsh-paper-doc-adapter](https://github.com/PerryLink/dsh-paper-doc-adapter)** | [npm](https://www.npmjs.com/package/dsh-paper-doc-adapter) |
214
+ | **[dsh-permit-report-check](https://github.com/PerryLink/dsh-permit-report-check)** | [npm](https://www.npmjs.com/package/dsh-permit-report-check) |
215
+ | **[dsh-pipeline-check](https://github.com/PerryLink/dsh-pipeline-check)** | [npm](https://www.npmjs.com/package/dsh-pipeline-check) |
216
+ | **[dsh-pleading-draft](https://github.com/PerryLink/dsh-pleading-draft)** | [npm](https://www.npmjs.com/package/dsh-pleading-draft) |
217
+ | **[dsh-policy-brief-draft](https://github.com/PerryLink/dsh-policy-brief-draft)** | [npm](https://www.npmjs.com/package/dsh-policy-brief-draft) |
218
+ | **[dsh-power-loss-split](https://github.com/PerryLink/dsh-power-loss-split)** | [npm](https://www.npmjs.com/package/dsh-power-loss-split) |
219
+ | **[dsh-power-ticket-check](https://github.com/PerryLink/dsh-power-ticket-check)** | [npm](https://www.npmjs.com/package/dsh-power-ticket-check) |
220
+ | **[dsh-ppap-check](https://github.com/PerryLink/dsh-ppap-check)** | [npm](https://www.npmjs.com/package/dsh-ppap-check) |
221
+ | **[dsh-protest-deadline](https://github.com/PerryLink/dsh-protest-deadline)** | [npm](https://www.npmjs.com/package/dsh-protest-deadline) |
222
+ | **[dsh-railway-window](https://github.com/PerryLink/dsh-railway-window)** | [npm](https://www.npmjs.com/package/dsh-railway-window) |
223
+ | **[dsh-repair-order-qc](https://github.com/PerryLink/dsh-repair-order-qc)** | [npm](https://www.npmjs.com/package/dsh-repair-order-qc) |
224
+ | **[dsh-review-reply-check](https://github.com/PerryLink/dsh-review-reply-check)** | [npm](https://www.npmjs.com/package/dsh-review-reply-check) |
225
+ | **[dsh-rulefile-check](https://github.com/PerryLink/dsh-rulefile-check)** | [npm](https://www.npmjs.com/package/dsh-rulefile-check) |
226
+ | **[dsh-safety-brief-check](https://github.com/PerryLink/dsh-safety-brief-check)** | [npm](https://www.npmjs.com/package/dsh-safety-brief-check) |
227
+ | **[dsh-site-log-check](https://github.com/PerryLink/dsh-site-log-check)** | [npm](https://www.npmjs.com/package/dsh-site-log-check) |
228
+ | **[dsh-soe-decision-check](https://github.com/PerryLink/dsh-soe-decision-check)** | [npm](https://www.npmjs.com/package/dsh-soe-decision-check) |
229
+ | **[dsh-soilwater-check](https://github.com/PerryLink/dsh-soilwater-check)** | [npm](https://www.npmjs.com/package/dsh-soilwater-check) |
230
+ | **[dsh-sop-sync-check](https://github.com/PerryLink/dsh-sop-sync-check)** | [npm](https://www.npmjs.com/package/dsh-sop-sync-check) |
231
+ | **[dsh-spc-gbt-adapter](https://github.com/PerryLink/dsh-spc-gbt-adapter)** | [npm](https://www.npmjs.com/package/dsh-spc-gbt-adapter) |
232
+ | **[dsh-tender-extract](https://github.com/PerryLink/dsh-tender-extract)** | [npm](https://www.npmjs.com/package/dsh-tender-extract) |
233
+ | **[dsh-tender-matrix](https://github.com/PerryLink/dsh-tender-matrix)** | [npm](https://www.npmjs.com/package/dsh-tender-matrix) |
234
+ | **[dsh-warranty-calc](https://github.com/PerryLink/dsh-warranty-calc)** | [npm](https://www.npmjs.com/package/dsh-warranty-calc) |
235
+ | **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | [npm](https://www.npmjs.com/package/dsh-auto-review) |
236
+ | **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | [npm](https://www.npmjs.com/package/dsh-autotier) |
237
+ | **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | [npm](https://www.npmjs.com/package/dsh-budget) |
238
+ | **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | [npm](https://www.npmjs.com/package/dsh-cert-mcp) |
239
+ | **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | [npm](https://www.npmjs.com/package/dsh-checkpoint-rewind) |
240
+ | **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | [npm](https://www.npmjs.com/package/dsh-claude-move) |
241
+ | **[dsh-click](https://github.com/PerryLink/dsh-click)** | [npm](https://www.npmjs.com/package/dsh-click) |
242
+ | **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | [npm](https://www.npmjs.com/package/dsh-composer-history) |
243
+ | **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | [npm](https://www.npmjs.com/package/dsh-data-quality) |
244
+ | **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | [npm](https://www.npmjs.com/package/dsh-defend) |
245
+ | **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | [npm](https://www.npmjs.com/package/dsh-doublecheck) |
246
+ | **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | [npm](https://www.npmjs.com/package/dsh-draw) |
247
+ | **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | [npm](https://www.npmjs.com/package/dsh-fast) |
248
+ | **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | [npm](https://www.npmjs.com/package/dsh-fund-research) |
249
+ | **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | [npm](https://www.npmjs.com/package/dsh-industry-research) |
250
+ | **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | [npm](https://www.npmjs.com/package/dsh-laya) |
251
+ | **[dsh-library](https://github.com/PerryLink/dsh-library)** | [npm](https://www.npmjs.com/package/dsh-library) |
252
+ | **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | [npm](https://www.npmjs.com/package/dsh-local-ai) |
253
+ | **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | [npm](https://www.npmjs.com/package/dsh-lsp-actions) |
254
+ | **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | [npm](https://www.npmjs.com/package/dsh-mask) |
255
+ | **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | [npm](https://www.npmjs.com/package/dsh-mcp-panel) |
256
+ | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | [npm](https://www.npmjs.com/package/dsh-memento) |
257
+ | **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | [npm](https://www.npmjs.com/package/dsh-observe) |
258
+ | **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | [npm](https://www.npmjs.com/package/dsh-output-styles) |
259
+ | **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | [npm](https://www.npmjs.com/package/dsh-permission-rules) |
260
+ | **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | [npm](https://www.npmjs.com/package/dsh-plugin-guide) |
261
+ | **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | [npm](https://www.npmjs.com/package/dsh-plugin-upgrade) |
262
+ | **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | [npm](https://www.npmjs.com/package/dsh-reach) |
263
+ | **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | [npm](https://www.npmjs.com/package/dsh-research-report) |
264
+ | **[dsh-score](https://github.com/PerryLink/dsh-score)** | [npm](https://www.npmjs.com/package/dsh-score) |
265
+ | **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | [npm](https://www.npmjs.com/package/dsh-session-sync) |
266
+ | **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | [npm](https://www.npmjs.com/package/dsh-talk) |
267
+ | **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | [npm](https://www.npmjs.com/package/dsh-test-drive) |
268
+ | **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | [npm](https://www.npmjs.com/package/dsh-translate) |
269
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
270
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
271
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
272
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
273
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
274
+
275
+ </details>
276
+
150
277
  ## लाइसेंस
151
278
 
152
279
  Apache-2.0. See `LICENSE`, `NOTICE`, `THIRD-PARTY-NOTICES`.
package/README-pt.md CHANGED
@@ -54,6 +54,16 @@ Desinstalar:
54
54
  dsh plugin --profile <profile> remove dsh-docx-redline
55
55
  ```
56
56
 
57
+
58
+ ### Canais de instalação
59
+
60
+ npm é o canal recomendado; os demais servem para fixar versão ou offline.
61
+
62
+ - **npm (recomendado):** `dsh plugin --profile <profile> add dsh-docx-redline`
63
+ - **canal git:** `dsh plugin --profile <profile> add github:PerryLink/dsh-docx-redline`
64
+ - **tarball:** `pnpm pack` then `dsh plugin --profile <profile> add ./dsh-docx-redline-<version>.tgz`
65
+ - **loja 1024:** `npm i -g dsh1024` then `dsh1024 plugin --profile <profile> add dsh-docx-redline`
66
+
57
67
  ## O que faz
58
68
 
59
69
  Inspeção de estrutura DOCX, roundtrip byte a byte e substituição limitada de texto em um único run. Executa localmente no DeepSeek Harness. A tabela abaixo é a superfície exata de ferramentas; os exemplos usam a interface real.
@@ -62,14 +72,14 @@ Entrada e saída permanecem locais; nada é enviado.
62
72
 
63
73
  ## Ferramentas
64
74
 
65
- Nomes e descrições de ferramentas ficam em inglês para corresponder à saída runtime.
75
+ Os nomes das ferramentas são a API estável; as descrições estão localizadas.
66
76
 
67
- | Ferramenta | Finalidade (em inglês) | Risco |
77
+ | Ferramenta | Finalidade | Risco |
68
78
  |---|---|---|
69
- | `doc.inspect` | Read a local `.docx` ZIP/XML, store the original, and report part SHA-256 plus structure counts (paragraphs, tables, headers/footers, footnotes, comments, fields, bookmarks, numbering, sections, styles) | R0 read + local store |
70
- | `doc.roundtrip` | Copy the original byte-for-byte and compare every part hash; return a zero-diff report | R1 local write |
71
- | `doc.replace_text` | Replace one exact `w:t` run; fail closed when the text is not unique or spans runs | R1 local write |
72
- | `redline.diff` | Text-level paragraph diff between two inspected DOCX files; no OOXML writing | R0 |
79
+ | `doc.inspect` | Lê um ZIP/XML `.docx` local, armazena o original e relata o SHA-256 das partes mais contagens de estrutura (parágrafos, tabelas, cabeçalhos/rodapés, notas de rodapé, comentários, campos, marcadores, numeração, seções, estilos) | R0 read + local store |
80
+ | `doc.roundtrip` | Copia o original byte a byte e compara o hash de cada parte; retorna um relatório de diferença zero | R1 local write |
81
+ | `doc.replace_text` | Substitui um run `w:t` exato; recusa a operação quando o texto não é único ou abrange vários runs | R1 local write |
82
+ | `redline.diff` | Diff de parágrafos em nível de texto entre dois arquivos DOCX inspecionados; sem gravação de OOXML | R0 |
73
83
 
74
84
  ## Início rápido
75
85
 
@@ -78,6 +88,22 @@ dsh plugin --profile <profile> add dsh-docx-redline
78
88
  dsh --profile <profile> --dump-config | grep dsh-docx-redline
79
89
  ```
80
90
 
91
+ ## Exemplos
92
+
93
+ ### Exemplo com fixture
94
+
95
+ Entrada: [`fixtures/public/python-docx/blk-containing-table.docx`](fixtures/public/python-docx/blk-containing-table.docx)
96
+
97
+ Comando: `pnpm test`
98
+
99
+ Linha de aceitação:
100
+
101
+ | req_id | metric | threshold | actual | pass | source | counted |
102
+ |---|---|---|---|---|---|---|
103
+ | SKU-01-A01 | 无改动往返通过率(20 合成) | 100% | 1 | true | public/synthetic | false |
104
+
105
+ *É uma linha de aceitação com fixture, não uma execução de cliente; nenhuma saída é inventada.*
106
+
81
107
  ## Limites
82
108
 
83
109
  - Apenas público/sintético; sem dados ou evidência de clientes.
@@ -87,7 +113,7 @@ dsh --profile <profile> --dump-config | grep dsh-docx-redline
87
113
 
88
114
  ## Amostra pública
89
115
 
90
- As fixtures públicas/sintéticas ficam em `test/fixtures/`; `ACCEPTANCE.csv` registra as verificações com `counted=false`.
116
+ As fixtures públicas/sintéticas ficam em `fixtures/`; `ACCEPTANCE.csv` registra as verificações com `counted=false`.
91
117
 
92
118
  ## Desenvolvimento
93
119
 
@@ -147,6 +173,107 @@ Pacotes irmãos e índices da família: [dsh-ifc-qto](https://github.com/PerryLi
147
173
 
148
174
  </details>
149
175
 
176
+
177
+ <details>
178
+ <summary>Família principal — 92 specs de instalação</summary>
179
+
180
+ | Package | npm |
181
+ |---|---|
182
+ | **[dsh-aqua-input-check](https://github.com/PerryLink/dsh-aqua-input-check)** | [npm](https://www.npmjs.com/package/dsh-aqua-input-check) |
183
+ | **[dsh-archive-check](https://github.com/PerryLink/dsh-archive-check)** | [npm](https://www.npmjs.com/package/dsh-archive-check) |
184
+ | **[dsh-bid-ca-precheck](https://github.com/PerryLink/dsh-bid-ca-precheck)** | [npm](https://www.npmjs.com/package/dsh-bid-ca-precheck) |
185
+ | **[dsh-bid-qual-check](https://github.com/PerryLink/dsh-bid-qual-check)** | [npm](https://www.npmjs.com/package/dsh-bid-qual-check) |
186
+ | **[dsh-contract-stance](https://github.com/PerryLink/dsh-contract-stance)** | [npm](https://www.npmjs.com/package/dsh-contract-stance) |
187
+ | **[dsh-customs-doc-check](https://github.com/PerryLink/dsh-customs-doc-check)** | [npm](https://www.npmjs.com/package/dsh-customs-doc-check) |
188
+ | **[dsh-demurrage-ledger](https://github.com/PerryLink/dsh-demurrage-ledger)** | [npm](https://www.npmjs.com/package/dsh-demurrage-ledger) |
189
+ | **[dsh-drill-script-check](https://github.com/PerryLink/dsh-drill-script-check)** | [npm](https://www.npmjs.com/package/dsh-drill-script-check) |
190
+ | **[dsh-eia-guide-check](https://github.com/PerryLink/dsh-eia-guide-check)** | [npm](https://www.npmjs.com/package/dsh-eia-guide-check) |
191
+ | **[dsh-emergency-plan](https://github.com/PerryLink/dsh-emergency-plan)** | [npm](https://www.npmjs.com/package/dsh-emergency-plan) |
192
+ | **[dsh-essay-rubric-check](https://github.com/PerryLink/dsh-essay-rubric-check)** | [npm](https://www.npmjs.com/package/dsh-essay-rubric-check) |
193
+ | **[dsh-evidence-check](https://github.com/PerryLink/dsh-evidence-check)** | [npm](https://www.npmjs.com/package/dsh-evidence-check) |
194
+ | **[dsh-export-ctl-check](https://github.com/PerryLink/dsh-export-ctl-check)** | [npm](https://www.npmjs.com/package/dsh-export-ctl-check) |
195
+ | **[dsh-fmea-table-check](https://github.com/PerryLink/dsh-fmea-table-check)** | [npm](https://www.npmjs.com/package/dsh-fmea-table-check) |
196
+ | **[dsh-forecast-penalty](https://github.com/PerryLink/dsh-forecast-penalty)** | [npm](https://www.npmjs.com/package/dsh-forecast-penalty) |
197
+ | **[dsh-gongwen-flow-check](https://github.com/PerryLink/dsh-gongwen-flow-check)** | [npm](https://www.npmjs.com/package/dsh-gongwen-flow-check) |
198
+ | **[dsh-gongwen-word-check](https://github.com/PerryLink/dsh-gongwen-word-check)** | [npm](https://www.npmjs.com/package/dsh-gongwen-word-check) |
199
+ | **[dsh-guard-plan-qc](https://github.com/PerryLink/dsh-guard-plan-qc)** | [npm](https://www.npmjs.com/package/dsh-guard-plan-qc) |
200
+ | **[dsh-hazchem-check](https://github.com/PerryLink/dsh-hazchem-check)** | [npm](https://www.npmjs.com/package/dsh-hazchem-check) |
201
+ | **[dsh-hazplan-check](https://github.com/PerryLink/dsh-hazplan-check)** | [npm](https://www.npmjs.com/package/dsh-hazplan-check) |
202
+ | **[dsh-hidden-risk-map](https://github.com/PerryLink/dsh-hidden-risk-map)** | [npm](https://www.npmjs.com/package/dsh-hidden-risk-map) |
203
+ | **[dsh-hs-classify](https://github.com/PerryLink/dsh-hs-classify)** | [npm](https://www.npmjs.com/package/dsh-hs-classify) |
204
+ | **[dsh-icd-rule-check](https://github.com/PerryLink/dsh-icd-rule-check)** | [npm](https://www.npmjs.com/package/dsh-icd-rule-check) |
205
+ | **[dsh-lawcite-adapter](https://github.com/PerryLink/dsh-lawcite-adapter)** | [npm](https://www.npmjs.com/package/dsh-lawcite-adapter) |
206
+ | **[dsh-lc-doc-check](https://github.com/PerryLink/dsh-lc-doc-check)** | [npm](https://www.npmjs.com/package/dsh-lc-doc-check) |
207
+ | **[dsh-learning-gap-check](https://github.com/PerryLink/dsh-learning-gap-check)** | [npm](https://www.npmjs.com/package/dsh-learning-gap-check) |
208
+ | **[dsh-medrec-qc](https://github.com/PerryLink/dsh-medrec-qc)** | [npm](https://www.npmjs.com/package/dsh-medrec-qc) |
209
+ | **[dsh-nsfc-form-check](https://github.com/PerryLink/dsh-nsfc-form-check)** | [npm](https://www.npmjs.com/package/dsh-nsfc-form-check) |
210
+ | **[dsh-nurse-record-check](https://github.com/PerryLink/dsh-nurse-record-check)** | [npm](https://www.npmjs.com/package/dsh-nurse-record-check) |
211
+ | **[dsh-origin-rvc-check](https://github.com/PerryLink/dsh-origin-rvc-check)** | [npm](https://www.npmjs.com/package/dsh-origin-rvc-check) |
212
+ | **[dsh-ota-review-check](https://github.com/PerryLink/dsh-ota-review-check)** | [npm](https://www.npmjs.com/package/dsh-ota-review-check) |
213
+ | **[dsh-paper-doc-adapter](https://github.com/PerryLink/dsh-paper-doc-adapter)** | [npm](https://www.npmjs.com/package/dsh-paper-doc-adapter) |
214
+ | **[dsh-permit-report-check](https://github.com/PerryLink/dsh-permit-report-check)** | [npm](https://www.npmjs.com/package/dsh-permit-report-check) |
215
+ | **[dsh-pipeline-check](https://github.com/PerryLink/dsh-pipeline-check)** | [npm](https://www.npmjs.com/package/dsh-pipeline-check) |
216
+ | **[dsh-pleading-draft](https://github.com/PerryLink/dsh-pleading-draft)** | [npm](https://www.npmjs.com/package/dsh-pleading-draft) |
217
+ | **[dsh-policy-brief-draft](https://github.com/PerryLink/dsh-policy-brief-draft)** | [npm](https://www.npmjs.com/package/dsh-policy-brief-draft) |
218
+ | **[dsh-power-loss-split](https://github.com/PerryLink/dsh-power-loss-split)** | [npm](https://www.npmjs.com/package/dsh-power-loss-split) |
219
+ | **[dsh-power-ticket-check](https://github.com/PerryLink/dsh-power-ticket-check)** | [npm](https://www.npmjs.com/package/dsh-power-ticket-check) |
220
+ | **[dsh-ppap-check](https://github.com/PerryLink/dsh-ppap-check)** | [npm](https://www.npmjs.com/package/dsh-ppap-check) |
221
+ | **[dsh-protest-deadline](https://github.com/PerryLink/dsh-protest-deadline)** | [npm](https://www.npmjs.com/package/dsh-protest-deadline) |
222
+ | **[dsh-railway-window](https://github.com/PerryLink/dsh-railway-window)** | [npm](https://www.npmjs.com/package/dsh-railway-window) |
223
+ | **[dsh-repair-order-qc](https://github.com/PerryLink/dsh-repair-order-qc)** | [npm](https://www.npmjs.com/package/dsh-repair-order-qc) |
224
+ | **[dsh-review-reply-check](https://github.com/PerryLink/dsh-review-reply-check)** | [npm](https://www.npmjs.com/package/dsh-review-reply-check) |
225
+ | **[dsh-rulefile-check](https://github.com/PerryLink/dsh-rulefile-check)** | [npm](https://www.npmjs.com/package/dsh-rulefile-check) |
226
+ | **[dsh-safety-brief-check](https://github.com/PerryLink/dsh-safety-brief-check)** | [npm](https://www.npmjs.com/package/dsh-safety-brief-check) |
227
+ | **[dsh-site-log-check](https://github.com/PerryLink/dsh-site-log-check)** | [npm](https://www.npmjs.com/package/dsh-site-log-check) |
228
+ | **[dsh-soe-decision-check](https://github.com/PerryLink/dsh-soe-decision-check)** | [npm](https://www.npmjs.com/package/dsh-soe-decision-check) |
229
+ | **[dsh-soilwater-check](https://github.com/PerryLink/dsh-soilwater-check)** | [npm](https://www.npmjs.com/package/dsh-soilwater-check) |
230
+ | **[dsh-sop-sync-check](https://github.com/PerryLink/dsh-sop-sync-check)** | [npm](https://www.npmjs.com/package/dsh-sop-sync-check) |
231
+ | **[dsh-spc-gbt-adapter](https://github.com/PerryLink/dsh-spc-gbt-adapter)** | [npm](https://www.npmjs.com/package/dsh-spc-gbt-adapter) |
232
+ | **[dsh-tender-extract](https://github.com/PerryLink/dsh-tender-extract)** | [npm](https://www.npmjs.com/package/dsh-tender-extract) |
233
+ | **[dsh-tender-matrix](https://github.com/PerryLink/dsh-tender-matrix)** | [npm](https://www.npmjs.com/package/dsh-tender-matrix) |
234
+ | **[dsh-warranty-calc](https://github.com/PerryLink/dsh-warranty-calc)** | [npm](https://www.npmjs.com/package/dsh-warranty-calc) |
235
+ | **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | [npm](https://www.npmjs.com/package/dsh-auto-review) |
236
+ | **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | [npm](https://www.npmjs.com/package/dsh-autotier) |
237
+ | **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | [npm](https://www.npmjs.com/package/dsh-budget) |
238
+ | **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | [npm](https://www.npmjs.com/package/dsh-cert-mcp) |
239
+ | **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | [npm](https://www.npmjs.com/package/dsh-checkpoint-rewind) |
240
+ | **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | [npm](https://www.npmjs.com/package/dsh-claude-move) |
241
+ | **[dsh-click](https://github.com/PerryLink/dsh-click)** | [npm](https://www.npmjs.com/package/dsh-click) |
242
+ | **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | [npm](https://www.npmjs.com/package/dsh-composer-history) |
243
+ | **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | [npm](https://www.npmjs.com/package/dsh-data-quality) |
244
+ | **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | [npm](https://www.npmjs.com/package/dsh-defend) |
245
+ | **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | [npm](https://www.npmjs.com/package/dsh-doublecheck) |
246
+ | **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | [npm](https://www.npmjs.com/package/dsh-draw) |
247
+ | **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | [npm](https://www.npmjs.com/package/dsh-fast) |
248
+ | **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | [npm](https://www.npmjs.com/package/dsh-fund-research) |
249
+ | **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | [npm](https://www.npmjs.com/package/dsh-industry-research) |
250
+ | **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | [npm](https://www.npmjs.com/package/dsh-laya) |
251
+ | **[dsh-library](https://github.com/PerryLink/dsh-library)** | [npm](https://www.npmjs.com/package/dsh-library) |
252
+ | **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | [npm](https://www.npmjs.com/package/dsh-local-ai) |
253
+ | **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | [npm](https://www.npmjs.com/package/dsh-lsp-actions) |
254
+ | **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | [npm](https://www.npmjs.com/package/dsh-mask) |
255
+ | **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | [npm](https://www.npmjs.com/package/dsh-mcp-panel) |
256
+ | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | [npm](https://www.npmjs.com/package/dsh-memento) |
257
+ | **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | [npm](https://www.npmjs.com/package/dsh-observe) |
258
+ | **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | [npm](https://www.npmjs.com/package/dsh-output-styles) |
259
+ | **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | [npm](https://www.npmjs.com/package/dsh-permission-rules) |
260
+ | **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | [npm](https://www.npmjs.com/package/dsh-plugin-guide) |
261
+ | **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | [npm](https://www.npmjs.com/package/dsh-plugin-upgrade) |
262
+ | **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | [npm](https://www.npmjs.com/package/dsh-reach) |
263
+ | **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | [npm](https://www.npmjs.com/package/dsh-research-report) |
264
+ | **[dsh-score](https://github.com/PerryLink/dsh-score)** | [npm](https://www.npmjs.com/package/dsh-score) |
265
+ | **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | [npm](https://www.npmjs.com/package/dsh-session-sync) |
266
+ | **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | [npm](https://www.npmjs.com/package/dsh-talk) |
267
+ | **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | [npm](https://www.npmjs.com/package/dsh-test-drive) |
268
+ | **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | [npm](https://www.npmjs.com/package/dsh-translate) |
269
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
270
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
271
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
272
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
273
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
274
+
275
+ </details>
276
+
150
277
  ## Licença
151
278
 
152
279
  Apache-2.0. See `LICENSE`, `NOTICE`, `THIRD-PARTY-NOTICES`.
package/README-zh.md CHANGED
@@ -54,6 +54,16 @@ dsh --profile <profile> --dump-config | grep dsh-docx-redline
54
54
  dsh plugin --profile <profile> remove dsh-docx-redline
55
55
  ```
56
56
 
57
+
58
+ ### 安装通道
59
+
60
+ 推荐 npm;其他通道用于固定版本或离线。
61
+
62
+ - **npm(推荐):** `dsh plugin --profile <profile> add dsh-docx-redline`
63
+ - **git 通道:** `dsh plugin --profile <profile> add github:PerryLink/dsh-docx-redline`
64
+ - **tarball:** `pnpm pack` then `dsh plugin --profile <profile> add ./dsh-docx-redline-<version>.tgz`
65
+ - **1024 商店:** `npm i -g dsh1024` then `dsh1024 plugin --profile <profile> add dsh-docx-redline`
66
+
57
67
  ## 它做什么
58
68
 
59
69
  DOCX 结构检查、逐字节 roundtrip 与单 run 文本替换。 在 DeepSeek Harness 本地运行;下表就是实际工具面,示例使用真实命令面。
@@ -62,14 +72,14 @@ DOCX 结构检查、逐字节 roundtrip 与单 run 文本替换。 在 DeepSeek
62
72
 
63
73
  ## 工具
64
74
 
65
- 工具名和说明保留英文,以对应运行输出。
75
+ 工具名是稳定 API;说明已本地化。
66
76
 
67
- | 工具 | 用途(英文对应运行输出) | 风险 |
77
+ | 工具 | 用途 | 风险 |
68
78
  |---|---|---|
69
- | `doc.inspect` | Read a local `.docx` ZIP/XML, store the original, and report part SHA-256 plus structure counts (paragraphs, tables, headers/footers, footnotes, comments, fields, bookmarks, numbering, sections, styles) | R0 read + local store |
70
- | `doc.roundtrip` | Copy the original byte-for-byte and compare every part hash; return a zero-diff report | R1 local write |
71
- | `doc.replace_text` | Replace one exact `w:t` run; fail closed when the text is not unique or spans runs | R1 local write |
72
- | `redline.diff` | Text-level paragraph diff between two inspected DOCX files; no OOXML writing | R0 |
79
+ | `doc.inspect` | 读取本地 `.docx` 的 ZIP/XML,保存原始文件,并报告各部件 SHA-256 及结构计数(段落、表格、页眉/页脚、脚注、批注、域、书签、编号、节、样式) | R0 read + local store |
80
+ | `doc.roundtrip` | 逐字节复制原始文件并比对每个部件的哈希;返回零差异报告 | R1 local write |
81
+ | `doc.replace_text` | 替换单个精确匹配的 `w:t` 文本运行;文本不唯一或跨运行时分则失败关闭 | R1 local write |
82
+ | `redline.diff` | 对两个已检查的 DOCX 文件做文本级段落差异比对;不写入 OOXML | R0 |
73
83
 
74
84
  ## 快速开始
75
85
 
@@ -78,6 +88,22 @@ dsh plugin --profile <profile> add dsh-docx-redline
78
88
  dsh --profile <profile> --dump-config | grep dsh-docx-redline
79
89
  ```
80
90
 
91
+ ## 示例
92
+
93
+ ### fixture 支撑的示例
94
+
95
+ 输入: [`fixtures/public/python-docx/blk-containing-table.docx`](fixtures/public/python-docx/blk-containing-table.docx)
96
+
97
+ 命令: `pnpm test`
98
+
99
+ 验收行:
100
+
101
+ | req_id | metric | threshold | actual | pass | source | counted |
102
+ |---|---|---|---|---|---|---|
103
+ | SKU-01-A01 | 无改动往返通过率(20 合成) | 100% | 1 | true | public/synthetic | false |
104
+
105
+ *这是 fixture 支撑的验收行,不是客户运行;没有编造输出。*
106
+
81
107
  ## 边界
82
108
 
83
109
  - 仅公开/合成样例;不含客户数据或客户证据。
@@ -87,7 +113,7 @@ dsh --profile <profile> --dump-config | grep dsh-docx-redline
87
113
 
88
114
  ## 公开样例
89
115
 
90
- 公开/合成 fixture 在 `test/fixtures/`;`ACCEPTANCE.csv` 记录公开检查,全部 `counted=false`。
116
+ 公开/合成 fixture 在 `fixtures/`;`ACCEPTANCE.csv` 记录公开检查,全部 `counted=false`。
91
117
 
92
118
  ## 开发
93
119
 
@@ -147,6 +173,107 @@ pnpm build && pnpm lint && pnpm typecheck && pnpm test
147
173
 
148
174
  </details>
149
175
 
176
+
177
+ <details>
178
+ <summary>主线家族 — 92 个当前安装 spec</summary>
179
+
180
+ | Package | npm |
181
+ |---|---|
182
+ | **[dsh-aqua-input-check](https://github.com/PerryLink/dsh-aqua-input-check)** | [npm](https://www.npmjs.com/package/dsh-aqua-input-check) |
183
+ | **[dsh-archive-check](https://github.com/PerryLink/dsh-archive-check)** | [npm](https://www.npmjs.com/package/dsh-archive-check) |
184
+ | **[dsh-bid-ca-precheck](https://github.com/PerryLink/dsh-bid-ca-precheck)** | [npm](https://www.npmjs.com/package/dsh-bid-ca-precheck) |
185
+ | **[dsh-bid-qual-check](https://github.com/PerryLink/dsh-bid-qual-check)** | [npm](https://www.npmjs.com/package/dsh-bid-qual-check) |
186
+ | **[dsh-contract-stance](https://github.com/PerryLink/dsh-contract-stance)** | [npm](https://www.npmjs.com/package/dsh-contract-stance) |
187
+ | **[dsh-customs-doc-check](https://github.com/PerryLink/dsh-customs-doc-check)** | [npm](https://www.npmjs.com/package/dsh-customs-doc-check) |
188
+ | **[dsh-demurrage-ledger](https://github.com/PerryLink/dsh-demurrage-ledger)** | [npm](https://www.npmjs.com/package/dsh-demurrage-ledger) |
189
+ | **[dsh-drill-script-check](https://github.com/PerryLink/dsh-drill-script-check)** | [npm](https://www.npmjs.com/package/dsh-drill-script-check) |
190
+ | **[dsh-eia-guide-check](https://github.com/PerryLink/dsh-eia-guide-check)** | [npm](https://www.npmjs.com/package/dsh-eia-guide-check) |
191
+ | **[dsh-emergency-plan](https://github.com/PerryLink/dsh-emergency-plan)** | [npm](https://www.npmjs.com/package/dsh-emergency-plan) |
192
+ | **[dsh-essay-rubric-check](https://github.com/PerryLink/dsh-essay-rubric-check)** | [npm](https://www.npmjs.com/package/dsh-essay-rubric-check) |
193
+ | **[dsh-evidence-check](https://github.com/PerryLink/dsh-evidence-check)** | [npm](https://www.npmjs.com/package/dsh-evidence-check) |
194
+ | **[dsh-export-ctl-check](https://github.com/PerryLink/dsh-export-ctl-check)** | [npm](https://www.npmjs.com/package/dsh-export-ctl-check) |
195
+ | **[dsh-fmea-table-check](https://github.com/PerryLink/dsh-fmea-table-check)** | [npm](https://www.npmjs.com/package/dsh-fmea-table-check) |
196
+ | **[dsh-forecast-penalty](https://github.com/PerryLink/dsh-forecast-penalty)** | [npm](https://www.npmjs.com/package/dsh-forecast-penalty) |
197
+ | **[dsh-gongwen-flow-check](https://github.com/PerryLink/dsh-gongwen-flow-check)** | [npm](https://www.npmjs.com/package/dsh-gongwen-flow-check) |
198
+ | **[dsh-gongwen-word-check](https://github.com/PerryLink/dsh-gongwen-word-check)** | [npm](https://www.npmjs.com/package/dsh-gongwen-word-check) |
199
+ | **[dsh-guard-plan-qc](https://github.com/PerryLink/dsh-guard-plan-qc)** | [npm](https://www.npmjs.com/package/dsh-guard-plan-qc) |
200
+ | **[dsh-hazchem-check](https://github.com/PerryLink/dsh-hazchem-check)** | [npm](https://www.npmjs.com/package/dsh-hazchem-check) |
201
+ | **[dsh-hazplan-check](https://github.com/PerryLink/dsh-hazplan-check)** | [npm](https://www.npmjs.com/package/dsh-hazplan-check) |
202
+ | **[dsh-hidden-risk-map](https://github.com/PerryLink/dsh-hidden-risk-map)** | [npm](https://www.npmjs.com/package/dsh-hidden-risk-map) |
203
+ | **[dsh-hs-classify](https://github.com/PerryLink/dsh-hs-classify)** | [npm](https://www.npmjs.com/package/dsh-hs-classify) |
204
+ | **[dsh-icd-rule-check](https://github.com/PerryLink/dsh-icd-rule-check)** | [npm](https://www.npmjs.com/package/dsh-icd-rule-check) |
205
+ | **[dsh-lawcite-adapter](https://github.com/PerryLink/dsh-lawcite-adapter)** | [npm](https://www.npmjs.com/package/dsh-lawcite-adapter) |
206
+ | **[dsh-lc-doc-check](https://github.com/PerryLink/dsh-lc-doc-check)** | [npm](https://www.npmjs.com/package/dsh-lc-doc-check) |
207
+ | **[dsh-learning-gap-check](https://github.com/PerryLink/dsh-learning-gap-check)** | [npm](https://www.npmjs.com/package/dsh-learning-gap-check) |
208
+ | **[dsh-medrec-qc](https://github.com/PerryLink/dsh-medrec-qc)** | [npm](https://www.npmjs.com/package/dsh-medrec-qc) |
209
+ | **[dsh-nsfc-form-check](https://github.com/PerryLink/dsh-nsfc-form-check)** | [npm](https://www.npmjs.com/package/dsh-nsfc-form-check) |
210
+ | **[dsh-nurse-record-check](https://github.com/PerryLink/dsh-nurse-record-check)** | [npm](https://www.npmjs.com/package/dsh-nurse-record-check) |
211
+ | **[dsh-origin-rvc-check](https://github.com/PerryLink/dsh-origin-rvc-check)** | [npm](https://www.npmjs.com/package/dsh-origin-rvc-check) |
212
+ | **[dsh-ota-review-check](https://github.com/PerryLink/dsh-ota-review-check)** | [npm](https://www.npmjs.com/package/dsh-ota-review-check) |
213
+ | **[dsh-paper-doc-adapter](https://github.com/PerryLink/dsh-paper-doc-adapter)** | [npm](https://www.npmjs.com/package/dsh-paper-doc-adapter) |
214
+ | **[dsh-permit-report-check](https://github.com/PerryLink/dsh-permit-report-check)** | [npm](https://www.npmjs.com/package/dsh-permit-report-check) |
215
+ | **[dsh-pipeline-check](https://github.com/PerryLink/dsh-pipeline-check)** | [npm](https://www.npmjs.com/package/dsh-pipeline-check) |
216
+ | **[dsh-pleading-draft](https://github.com/PerryLink/dsh-pleading-draft)** | [npm](https://www.npmjs.com/package/dsh-pleading-draft) |
217
+ | **[dsh-policy-brief-draft](https://github.com/PerryLink/dsh-policy-brief-draft)** | [npm](https://www.npmjs.com/package/dsh-policy-brief-draft) |
218
+ | **[dsh-power-loss-split](https://github.com/PerryLink/dsh-power-loss-split)** | [npm](https://www.npmjs.com/package/dsh-power-loss-split) |
219
+ | **[dsh-power-ticket-check](https://github.com/PerryLink/dsh-power-ticket-check)** | [npm](https://www.npmjs.com/package/dsh-power-ticket-check) |
220
+ | **[dsh-ppap-check](https://github.com/PerryLink/dsh-ppap-check)** | [npm](https://www.npmjs.com/package/dsh-ppap-check) |
221
+ | **[dsh-protest-deadline](https://github.com/PerryLink/dsh-protest-deadline)** | [npm](https://www.npmjs.com/package/dsh-protest-deadline) |
222
+ | **[dsh-railway-window](https://github.com/PerryLink/dsh-railway-window)** | [npm](https://www.npmjs.com/package/dsh-railway-window) |
223
+ | **[dsh-repair-order-qc](https://github.com/PerryLink/dsh-repair-order-qc)** | [npm](https://www.npmjs.com/package/dsh-repair-order-qc) |
224
+ | **[dsh-review-reply-check](https://github.com/PerryLink/dsh-review-reply-check)** | [npm](https://www.npmjs.com/package/dsh-review-reply-check) |
225
+ | **[dsh-rulefile-check](https://github.com/PerryLink/dsh-rulefile-check)** | [npm](https://www.npmjs.com/package/dsh-rulefile-check) |
226
+ | **[dsh-safety-brief-check](https://github.com/PerryLink/dsh-safety-brief-check)** | [npm](https://www.npmjs.com/package/dsh-safety-brief-check) |
227
+ | **[dsh-site-log-check](https://github.com/PerryLink/dsh-site-log-check)** | [npm](https://www.npmjs.com/package/dsh-site-log-check) |
228
+ | **[dsh-soe-decision-check](https://github.com/PerryLink/dsh-soe-decision-check)** | [npm](https://www.npmjs.com/package/dsh-soe-decision-check) |
229
+ | **[dsh-soilwater-check](https://github.com/PerryLink/dsh-soilwater-check)** | [npm](https://www.npmjs.com/package/dsh-soilwater-check) |
230
+ | **[dsh-sop-sync-check](https://github.com/PerryLink/dsh-sop-sync-check)** | [npm](https://www.npmjs.com/package/dsh-sop-sync-check) |
231
+ | **[dsh-spc-gbt-adapter](https://github.com/PerryLink/dsh-spc-gbt-adapter)** | [npm](https://www.npmjs.com/package/dsh-spc-gbt-adapter) |
232
+ | **[dsh-tender-extract](https://github.com/PerryLink/dsh-tender-extract)** | [npm](https://www.npmjs.com/package/dsh-tender-extract) |
233
+ | **[dsh-tender-matrix](https://github.com/PerryLink/dsh-tender-matrix)** | [npm](https://www.npmjs.com/package/dsh-tender-matrix) |
234
+ | **[dsh-warranty-calc](https://github.com/PerryLink/dsh-warranty-calc)** | [npm](https://www.npmjs.com/package/dsh-warranty-calc) |
235
+ | **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | [npm](https://www.npmjs.com/package/dsh-auto-review) |
236
+ | **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | [npm](https://www.npmjs.com/package/dsh-autotier) |
237
+ | **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | [npm](https://www.npmjs.com/package/dsh-budget) |
238
+ | **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | [npm](https://www.npmjs.com/package/dsh-cert-mcp) |
239
+ | **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | [npm](https://www.npmjs.com/package/dsh-checkpoint-rewind) |
240
+ | **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | [npm](https://www.npmjs.com/package/dsh-claude-move) |
241
+ | **[dsh-click](https://github.com/PerryLink/dsh-click)** | [npm](https://www.npmjs.com/package/dsh-click) |
242
+ | **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | [npm](https://www.npmjs.com/package/dsh-composer-history) |
243
+ | **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | [npm](https://www.npmjs.com/package/dsh-data-quality) |
244
+ | **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | [npm](https://www.npmjs.com/package/dsh-defend) |
245
+ | **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | [npm](https://www.npmjs.com/package/dsh-doublecheck) |
246
+ | **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | [npm](https://www.npmjs.com/package/dsh-draw) |
247
+ | **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | [npm](https://www.npmjs.com/package/dsh-fast) |
248
+ | **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | [npm](https://www.npmjs.com/package/dsh-fund-research) |
249
+ | **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | [npm](https://www.npmjs.com/package/dsh-industry-research) |
250
+ | **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | [npm](https://www.npmjs.com/package/dsh-laya) |
251
+ | **[dsh-library](https://github.com/PerryLink/dsh-library)** | [npm](https://www.npmjs.com/package/dsh-library) |
252
+ | **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | [npm](https://www.npmjs.com/package/dsh-local-ai) |
253
+ | **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | [npm](https://www.npmjs.com/package/dsh-lsp-actions) |
254
+ | **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | [npm](https://www.npmjs.com/package/dsh-mask) |
255
+ | **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | [npm](https://www.npmjs.com/package/dsh-mcp-panel) |
256
+ | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | [npm](https://www.npmjs.com/package/dsh-memento) |
257
+ | **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | [npm](https://www.npmjs.com/package/dsh-observe) |
258
+ | **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | [npm](https://www.npmjs.com/package/dsh-output-styles) |
259
+ | **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | [npm](https://www.npmjs.com/package/dsh-permission-rules) |
260
+ | **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | [npm](https://www.npmjs.com/package/dsh-plugin-guide) |
261
+ | **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | [npm](https://www.npmjs.com/package/dsh-plugin-upgrade) |
262
+ | **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | [npm](https://www.npmjs.com/package/dsh-reach) |
263
+ | **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | [npm](https://www.npmjs.com/package/dsh-research-report) |
264
+ | **[dsh-score](https://github.com/PerryLink/dsh-score)** | [npm](https://www.npmjs.com/package/dsh-score) |
265
+ | **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | [npm](https://www.npmjs.com/package/dsh-session-sync) |
266
+ | **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | [npm](https://www.npmjs.com/package/dsh-talk) |
267
+ | **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | [npm](https://www.npmjs.com/package/dsh-test-drive) |
268
+ | **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | [npm](https://www.npmjs.com/package/dsh-translate) |
269
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
270
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
271
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
272
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
273
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
274
+
275
+ </details>
276
+
150
277
  ## 许可证
151
278
 
152
279
  Apache-2.0. See `LICENSE`, `NOTICE`, `THIRD-PARTY-NOTICES`.
package/README.md CHANGED
@@ -54,6 +54,16 @@ Uninstall:
54
54
  dsh plugin --profile <profile> remove dsh-docx-redline
55
55
  ```
56
56
 
57
+
58
+ ### Install channels
59
+
60
+ npm is the recommended channel; the others are for pinning or offline use.
61
+
62
+ - **npm (recommended):** `dsh plugin --profile <profile> add dsh-docx-redline`
63
+ - **git channel:** `dsh plugin --profile <profile> add github:PerryLink/dsh-docx-redline`
64
+ - **tarball:** `pnpm pack` then `dsh plugin --profile <profile> add ./dsh-docx-redline-<version>.tgz`
65
+ - **1024 store:** `npm i -g dsh1024` then `dsh1024 plugin --profile <profile> add dsh-docx-redline`
66
+
57
67
  ## What it does
58
68
 
59
69
  DOCX structure inspection, byte-exact roundtrip and limited exact-run text replace. Runs locally on DeepSeek Harness. The table below is the exact tool surface; the examples use the real command surface.
@@ -78,6 +88,22 @@ dsh plugin --profile <profile> add dsh-docx-redline
78
88
  dsh --profile <profile> --dump-config | grep dsh-docx-redline
79
89
  ```
80
90
 
91
+ ## Examples
92
+
93
+ ### Fixture-backed example
94
+
95
+ Input: [`fixtures/public/python-docx/blk-containing-table.docx`](fixtures/public/python-docx/blk-containing-table.docx)
96
+
97
+ Command: `pnpm test`
98
+
99
+ Acceptance row:
100
+
101
+ | req_id | metric | threshold | actual | pass | source | counted |
102
+ |---|---|---|---|---|---|---|
103
+ | SKU-01-A01 | 无改动往返通过率(20 合成) | 100% | 1 | true | public/synthetic | false |
104
+
105
+ *This is a fixture-backed acceptance row, not a customer run; no output is invented.*
106
+
81
107
  ## Limits
82
108
 
83
109
  - Public/synthetic only; no customer data or customer evidence.
@@ -87,7 +113,7 @@ dsh --profile <profile> --dump-config | grep dsh-docx-redline
87
113
 
88
114
  ## Public sample
89
115
 
90
- Public/synthetic fixtures live in `test/fixtures/`; `ACCEPTANCE.csv` records the public checks with `counted=false`.
116
+ Public/synthetic fixtures live in `fixtures/`; `ACCEPTANCE.csv` records the public checks with `counted=false`.
91
117
 
92
118
  ## Development
93
119
 
@@ -147,6 +173,107 @@ Sibling packages and family indexes: [dsh-ifc-qto](https://github.com/PerryLink/
147
173
 
148
174
  </details>
149
175
 
176
+
177
+ <details>
178
+ <summary>Mainline family — 92 current install specs</summary>
179
+
180
+ | Package | npm |
181
+ |---|---|
182
+ | **[dsh-aqua-input-check](https://github.com/PerryLink/dsh-aqua-input-check)** | [npm](https://www.npmjs.com/package/dsh-aqua-input-check) |
183
+ | **[dsh-archive-check](https://github.com/PerryLink/dsh-archive-check)** | [npm](https://www.npmjs.com/package/dsh-archive-check) |
184
+ | **[dsh-bid-ca-precheck](https://github.com/PerryLink/dsh-bid-ca-precheck)** | [npm](https://www.npmjs.com/package/dsh-bid-ca-precheck) |
185
+ | **[dsh-bid-qual-check](https://github.com/PerryLink/dsh-bid-qual-check)** | [npm](https://www.npmjs.com/package/dsh-bid-qual-check) |
186
+ | **[dsh-contract-stance](https://github.com/PerryLink/dsh-contract-stance)** | [npm](https://www.npmjs.com/package/dsh-contract-stance) |
187
+ | **[dsh-customs-doc-check](https://github.com/PerryLink/dsh-customs-doc-check)** | [npm](https://www.npmjs.com/package/dsh-customs-doc-check) |
188
+ | **[dsh-demurrage-ledger](https://github.com/PerryLink/dsh-demurrage-ledger)** | [npm](https://www.npmjs.com/package/dsh-demurrage-ledger) |
189
+ | **[dsh-drill-script-check](https://github.com/PerryLink/dsh-drill-script-check)** | [npm](https://www.npmjs.com/package/dsh-drill-script-check) |
190
+ | **[dsh-eia-guide-check](https://github.com/PerryLink/dsh-eia-guide-check)** | [npm](https://www.npmjs.com/package/dsh-eia-guide-check) |
191
+ | **[dsh-emergency-plan](https://github.com/PerryLink/dsh-emergency-plan)** | [npm](https://www.npmjs.com/package/dsh-emergency-plan) |
192
+ | **[dsh-essay-rubric-check](https://github.com/PerryLink/dsh-essay-rubric-check)** | [npm](https://www.npmjs.com/package/dsh-essay-rubric-check) |
193
+ | **[dsh-evidence-check](https://github.com/PerryLink/dsh-evidence-check)** | [npm](https://www.npmjs.com/package/dsh-evidence-check) |
194
+ | **[dsh-export-ctl-check](https://github.com/PerryLink/dsh-export-ctl-check)** | [npm](https://www.npmjs.com/package/dsh-export-ctl-check) |
195
+ | **[dsh-fmea-table-check](https://github.com/PerryLink/dsh-fmea-table-check)** | [npm](https://www.npmjs.com/package/dsh-fmea-table-check) |
196
+ | **[dsh-forecast-penalty](https://github.com/PerryLink/dsh-forecast-penalty)** | [npm](https://www.npmjs.com/package/dsh-forecast-penalty) |
197
+ | **[dsh-gongwen-flow-check](https://github.com/PerryLink/dsh-gongwen-flow-check)** | [npm](https://www.npmjs.com/package/dsh-gongwen-flow-check) |
198
+ | **[dsh-gongwen-word-check](https://github.com/PerryLink/dsh-gongwen-word-check)** | [npm](https://www.npmjs.com/package/dsh-gongwen-word-check) |
199
+ | **[dsh-guard-plan-qc](https://github.com/PerryLink/dsh-guard-plan-qc)** | [npm](https://www.npmjs.com/package/dsh-guard-plan-qc) |
200
+ | **[dsh-hazchem-check](https://github.com/PerryLink/dsh-hazchem-check)** | [npm](https://www.npmjs.com/package/dsh-hazchem-check) |
201
+ | **[dsh-hazplan-check](https://github.com/PerryLink/dsh-hazplan-check)** | [npm](https://www.npmjs.com/package/dsh-hazplan-check) |
202
+ | **[dsh-hidden-risk-map](https://github.com/PerryLink/dsh-hidden-risk-map)** | [npm](https://www.npmjs.com/package/dsh-hidden-risk-map) |
203
+ | **[dsh-hs-classify](https://github.com/PerryLink/dsh-hs-classify)** | [npm](https://www.npmjs.com/package/dsh-hs-classify) |
204
+ | **[dsh-icd-rule-check](https://github.com/PerryLink/dsh-icd-rule-check)** | [npm](https://www.npmjs.com/package/dsh-icd-rule-check) |
205
+ | **[dsh-lawcite-adapter](https://github.com/PerryLink/dsh-lawcite-adapter)** | [npm](https://www.npmjs.com/package/dsh-lawcite-adapter) |
206
+ | **[dsh-lc-doc-check](https://github.com/PerryLink/dsh-lc-doc-check)** | [npm](https://www.npmjs.com/package/dsh-lc-doc-check) |
207
+ | **[dsh-learning-gap-check](https://github.com/PerryLink/dsh-learning-gap-check)** | [npm](https://www.npmjs.com/package/dsh-learning-gap-check) |
208
+ | **[dsh-medrec-qc](https://github.com/PerryLink/dsh-medrec-qc)** | [npm](https://www.npmjs.com/package/dsh-medrec-qc) |
209
+ | **[dsh-nsfc-form-check](https://github.com/PerryLink/dsh-nsfc-form-check)** | [npm](https://www.npmjs.com/package/dsh-nsfc-form-check) |
210
+ | **[dsh-nurse-record-check](https://github.com/PerryLink/dsh-nurse-record-check)** | [npm](https://www.npmjs.com/package/dsh-nurse-record-check) |
211
+ | **[dsh-origin-rvc-check](https://github.com/PerryLink/dsh-origin-rvc-check)** | [npm](https://www.npmjs.com/package/dsh-origin-rvc-check) |
212
+ | **[dsh-ota-review-check](https://github.com/PerryLink/dsh-ota-review-check)** | [npm](https://www.npmjs.com/package/dsh-ota-review-check) |
213
+ | **[dsh-paper-doc-adapter](https://github.com/PerryLink/dsh-paper-doc-adapter)** | [npm](https://www.npmjs.com/package/dsh-paper-doc-adapter) |
214
+ | **[dsh-permit-report-check](https://github.com/PerryLink/dsh-permit-report-check)** | [npm](https://www.npmjs.com/package/dsh-permit-report-check) |
215
+ | **[dsh-pipeline-check](https://github.com/PerryLink/dsh-pipeline-check)** | [npm](https://www.npmjs.com/package/dsh-pipeline-check) |
216
+ | **[dsh-pleading-draft](https://github.com/PerryLink/dsh-pleading-draft)** | [npm](https://www.npmjs.com/package/dsh-pleading-draft) |
217
+ | **[dsh-policy-brief-draft](https://github.com/PerryLink/dsh-policy-brief-draft)** | [npm](https://www.npmjs.com/package/dsh-policy-brief-draft) |
218
+ | **[dsh-power-loss-split](https://github.com/PerryLink/dsh-power-loss-split)** | [npm](https://www.npmjs.com/package/dsh-power-loss-split) |
219
+ | **[dsh-power-ticket-check](https://github.com/PerryLink/dsh-power-ticket-check)** | [npm](https://www.npmjs.com/package/dsh-power-ticket-check) |
220
+ | **[dsh-ppap-check](https://github.com/PerryLink/dsh-ppap-check)** | [npm](https://www.npmjs.com/package/dsh-ppap-check) |
221
+ | **[dsh-protest-deadline](https://github.com/PerryLink/dsh-protest-deadline)** | [npm](https://www.npmjs.com/package/dsh-protest-deadline) |
222
+ | **[dsh-railway-window](https://github.com/PerryLink/dsh-railway-window)** | [npm](https://www.npmjs.com/package/dsh-railway-window) |
223
+ | **[dsh-repair-order-qc](https://github.com/PerryLink/dsh-repair-order-qc)** | [npm](https://www.npmjs.com/package/dsh-repair-order-qc) |
224
+ | **[dsh-review-reply-check](https://github.com/PerryLink/dsh-review-reply-check)** | [npm](https://www.npmjs.com/package/dsh-review-reply-check) |
225
+ | **[dsh-rulefile-check](https://github.com/PerryLink/dsh-rulefile-check)** | [npm](https://www.npmjs.com/package/dsh-rulefile-check) |
226
+ | **[dsh-safety-brief-check](https://github.com/PerryLink/dsh-safety-brief-check)** | [npm](https://www.npmjs.com/package/dsh-safety-brief-check) |
227
+ | **[dsh-site-log-check](https://github.com/PerryLink/dsh-site-log-check)** | [npm](https://www.npmjs.com/package/dsh-site-log-check) |
228
+ | **[dsh-soe-decision-check](https://github.com/PerryLink/dsh-soe-decision-check)** | [npm](https://www.npmjs.com/package/dsh-soe-decision-check) |
229
+ | **[dsh-soilwater-check](https://github.com/PerryLink/dsh-soilwater-check)** | [npm](https://www.npmjs.com/package/dsh-soilwater-check) |
230
+ | **[dsh-sop-sync-check](https://github.com/PerryLink/dsh-sop-sync-check)** | [npm](https://www.npmjs.com/package/dsh-sop-sync-check) |
231
+ | **[dsh-spc-gbt-adapter](https://github.com/PerryLink/dsh-spc-gbt-adapter)** | [npm](https://www.npmjs.com/package/dsh-spc-gbt-adapter) |
232
+ | **[dsh-tender-extract](https://github.com/PerryLink/dsh-tender-extract)** | [npm](https://www.npmjs.com/package/dsh-tender-extract) |
233
+ | **[dsh-tender-matrix](https://github.com/PerryLink/dsh-tender-matrix)** | [npm](https://www.npmjs.com/package/dsh-tender-matrix) |
234
+ | **[dsh-warranty-calc](https://github.com/PerryLink/dsh-warranty-calc)** | [npm](https://www.npmjs.com/package/dsh-warranty-calc) |
235
+ | **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | [npm](https://www.npmjs.com/package/dsh-auto-review) |
236
+ | **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | [npm](https://www.npmjs.com/package/dsh-autotier) |
237
+ | **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | [npm](https://www.npmjs.com/package/dsh-budget) |
238
+ | **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | [npm](https://www.npmjs.com/package/dsh-cert-mcp) |
239
+ | **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | [npm](https://www.npmjs.com/package/dsh-checkpoint-rewind) |
240
+ | **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | [npm](https://www.npmjs.com/package/dsh-claude-move) |
241
+ | **[dsh-click](https://github.com/PerryLink/dsh-click)** | [npm](https://www.npmjs.com/package/dsh-click) |
242
+ | **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | [npm](https://www.npmjs.com/package/dsh-composer-history) |
243
+ | **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | [npm](https://www.npmjs.com/package/dsh-data-quality) |
244
+ | **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | [npm](https://www.npmjs.com/package/dsh-defend) |
245
+ | **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | [npm](https://www.npmjs.com/package/dsh-doublecheck) |
246
+ | **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | [npm](https://www.npmjs.com/package/dsh-draw) |
247
+ | **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | [npm](https://www.npmjs.com/package/dsh-fast) |
248
+ | **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | [npm](https://www.npmjs.com/package/dsh-fund-research) |
249
+ | **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | [npm](https://www.npmjs.com/package/dsh-industry-research) |
250
+ | **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | [npm](https://www.npmjs.com/package/dsh-laya) |
251
+ | **[dsh-library](https://github.com/PerryLink/dsh-library)** | [npm](https://www.npmjs.com/package/dsh-library) |
252
+ | **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | [npm](https://www.npmjs.com/package/dsh-local-ai) |
253
+ | **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | [npm](https://www.npmjs.com/package/dsh-lsp-actions) |
254
+ | **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | [npm](https://www.npmjs.com/package/dsh-mask) |
255
+ | **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | [npm](https://www.npmjs.com/package/dsh-mcp-panel) |
256
+ | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | [npm](https://www.npmjs.com/package/dsh-memento) |
257
+ | **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | [npm](https://www.npmjs.com/package/dsh-observe) |
258
+ | **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | [npm](https://www.npmjs.com/package/dsh-output-styles) |
259
+ | **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | [npm](https://www.npmjs.com/package/dsh-permission-rules) |
260
+ | **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | [npm](https://www.npmjs.com/package/dsh-plugin-guide) |
261
+ | **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | [npm](https://www.npmjs.com/package/dsh-plugin-upgrade) |
262
+ | **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | [npm](https://www.npmjs.com/package/dsh-reach) |
263
+ | **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | [npm](https://www.npmjs.com/package/dsh-research-report) |
264
+ | **[dsh-score](https://github.com/PerryLink/dsh-score)** | [npm](https://www.npmjs.com/package/dsh-score) |
265
+ | **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | [npm](https://www.npmjs.com/package/dsh-session-sync) |
266
+ | **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | [npm](https://www.npmjs.com/package/dsh-talk) |
267
+ | **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | [npm](https://www.npmjs.com/package/dsh-test-drive) |
268
+ | **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | [npm](https://www.npmjs.com/package/dsh-translate) |
269
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
270
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
271
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
272
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
273
+ | **[](https://github.com/PerryLink/)** | [npm](https://www.npmjs.com/package/) |
274
+
275
+ </details>
276
+
150
277
  ## License
151
278
 
152
279
  Apache-2.0. See `LICENSE`, `NOTICE`, `THIRD-PARTY-NOTICES`.
package/SECURITY.md ADDED
@@ -0,0 +1,19 @@
1
+ # Security policy
2
+
3
+ ## Supported versions
4
+
5
+ The current `alpha` line of `dsh-docx-redline` is supported for security reports. Older alpha builds are not supported.
6
+
7
+ ## Reporting a vulnerability
8
+
9
+ Please **do not** open a public issue for a vulnerability. Email **novelnexusai@outlook.com** with:
10
+
11
+ - the package and version,
12
+ - a minimal reproduction,
13
+ - the impact you believe it has.
14
+
15
+ This is a public/synthetic alpha project. It has no bug bounty, no SLA, and no customer data. Reports are handled on a best-effort basis; a fix or a written “not affected / won't fix” answer will be recorded in the repository.
16
+
17
+ ## Scope
18
+
19
+ In scope: the published npm package, its Cordis patch, local file handling, and the documented tool surface. Out of scope: findings that require customer data, a modified package, or a service this project does not ship.
package/icon.svg ADDED
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img" aria-label="DOCX">
2
+ <rect width="128" height="128" rx="28" fill="#0b1020"/>
3
+ <rect x="10" y="10" width="108" height="108" rx="22" fill="#141b30" stroke="#6ea8fe" stroke-width="3"/>
4
+ <text x="64" y="76" text-anchor="middle" fill="#e8edf7" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="22" font-weight="700">DOCX</text>
5
+ </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-docx-redline",
3
- "version": "0.1.0-alpha.7",
3
+ "version": "0.1.0-alpha.8",
4
4
  "description": "DOCX structure inspection, byte-exact roundtrip and limited exact-run text replace.",
5
5
  "type": "module",
6
6
  "main": "./lib/plugin/index.js",
@@ -22,7 +22,13 @@
22
22
  "README-es.md",
23
23
  "README-pt.md",
24
24
  "README-hi.md",
25
- "docs/assets"
25
+ "docs/assets",
26
+ "SECURITY.md",
27
+ "PRIVACY.md",
28
+ "CODE_OF_CONDUCT.md",
29
+ "CONTRIBUTING.md",
30
+ "CHANGELOG.md",
31
+ "icon.svg"
26
32
  ],
27
33
  "dsh": {
28
34
  "bundle": {
@@ -91,5 +97,6 @@
91
97
  "homepage": "https://perrylink.github.io/dsh-plugins/packages/dsh-docx-redline.html",
92
98
  "bugs": {
93
99
  "url": "https://github.com/PerryLink/dsh-docx-redline/issues"
94
- }
100
+ },
101
+ "icon": "icon.svg"
95
102
  }