svn-agent-mcp 1.1.3 → 1.2.0

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.
Files changed (50) hide show
  1. package/CHANGELOG.md +291 -245
  2. package/README.md +8 -3
  3. package/SECURITY.md +22 -20
  4. package/THIRD_PARTY_CHECKSUMS.txt +1 -1
  5. package/dist/envelope.d.ts.map +1 -1
  6. package/dist/envelope.js +3 -0
  7. package/dist/envelope.js.map +1 -1
  8. package/dist/guards.d.ts +1 -0
  9. package/dist/guards.d.ts.map +1 -1
  10. package/dist/guards.js +6 -0
  11. package/dist/guards.js.map +1 -1
  12. package/dist/index.d.ts +8 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +108 -33
  15. package/dist/index.js.map +1 -1
  16. package/dist/parse/blameXml.d.ts +8 -0
  17. package/dist/parse/blameXml.d.ts.map +1 -0
  18. package/dist/parse/blameXml.js +37 -0
  19. package/dist/parse/blameXml.js.map +1 -0
  20. package/dist/parse/diffText.d.ts +1 -1
  21. package/dist/parse/diffText.d.ts.map +1 -1
  22. package/dist/parse/diffText.js +15 -4
  23. package/dist/parse/diffText.js.map +1 -1
  24. package/dist/parse/xmlOptions.d.ts.map +1 -1
  25. package/dist/response.d.ts.map +1 -1
  26. package/dist/response.js +90 -7
  27. package/dist/response.js.map +1 -1
  28. package/dist/runner.d.ts +6 -0
  29. package/dist/runner.d.ts.map +1 -1
  30. package/dist/runner.js +101 -38
  31. package/dist/runner.js.map +1 -1
  32. package/dist/tools/composite.d.ts +6 -0
  33. package/dist/tools/composite.d.ts.map +1 -1
  34. package/dist/tools/composite.js +39 -4
  35. package/dist/tools/composite.js.map +1 -1
  36. package/dist/tools/mutating.d.ts +10 -1
  37. package/dist/tools/mutating.d.ts.map +1 -1
  38. package/dist/tools/mutating.js +103 -18
  39. package/dist/tools/mutating.js.map +1 -1
  40. package/dist/tools/readonly.d.ts +17 -0
  41. package/dist/tools/readonly.d.ts.map +1 -1
  42. package/dist/tools/readonly.js +158 -4
  43. package/dist/tools/readonly.js.map +1 -1
  44. package/dist/tools/selfcheck.d.ts +5 -5
  45. package/dist/tools/selfcheck.js.map +1 -1
  46. package/dist/types.d.ts +1 -0
  47. package/dist/types.d.ts.map +1 -1
  48. package/docs/MCP_API.json +1504 -0
  49. package/docs/SPEC.md +1094 -0
  50. package/package.json +12 -4
package/CHANGELOG.md CHANGED
@@ -1,9 +1,55 @@
1
- # Changelog
2
-
1
+ # Changelog
2
+
3
3
  All notable changes to the SVN MCP are recorded here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [1.2.0] - 2026-07-22
8
+
9
+ ### Added
10
+
11
+ - Added guarded `svn_delete` with dry-run-by-default behavior, explicit paths, root refusal,
12
+ recursive acknowledgement, `riskAck`, and post-delete status verification.
13
+ - Added canonical `svn_resolve` while retaining `svn_resolved` as a deprecated compatibility alias.
14
+ - Added `svn_snapshot`, bounded `svn_cat`, and paginated `svn_blame` for common audit workflows.
15
+ - Added exact/range revision selectors to `svn_log` and `svn_diff`.
16
+ - Added request-cancellation propagation from MCP calls to buffered and streaming SVN processes.
17
+
18
+ ### Changed
19
+
20
+ - Working-copy-root commits now require `allowRoot:true`, and whitespace-only commit messages are
21
+ refused before SVN runs.
22
+ - Agent install instructions now compare the installed version with `npm view` instead of pinning a
23
+ remembered latest version.
24
+ - Builds and typechecks now run on native TypeScript 7 (`tsc` 7.0.2), while the Jest `ts-jest`
25
+ transform keeps the TypeScript 6 compiler through the `@typescript/typescript6` shim (`tsc6`)
26
+ until tooling gains TypeScript 7 API support.
27
+
28
+ ### Fixed
29
+
30
+ - Compact revert receipts now identify the default dry-run behavior even when `dryRun` is omitted.
31
+ - Blocked direct imports of files beneath sensitive `.ssh`, `.git`, and `.svn` directories by
32
+ preserving ancestor path segments during guard evaluation.
33
+ - Refused conflicted, obstructed, external, and unknown working-copy states during precommit and
34
+ commit instead of reporting them as committable.
35
+ - Distinguished colons inside date revisions from revision-range separators.
36
+ - Kept the requested lower revision bound across paginated numeric `svn_log` ranges.
37
+ - Contained NUL-byte process launch failures and unexpected tool exceptions in structured MCP
38
+ error envelopes.
39
+ - Kept arbitrary `svn_propset` values out of displayed process commands by passing them through a
40
+ mode-0600 temporary `-F` file.
41
+ - Bounded retained streamed stdout and diff excerpts independently of line and file-summary caps.
42
+
43
+ ### Security
44
+
45
+ - Updated transitive dependencies and the MCP HTTP adapter override; `npm audit` reports no known
46
+ vulnerabilities at the moderate threshold.
47
+ - Added regressions for sensitive import ancestors and end-to-end conflicted working-copy refusal.
48
+
49
+ ### Packaging
50
+
51
+ - npm artifacts now include `docs/SPEC.md` and a generated `docs/MCP_API.json` tool contract.
52
+
7
53
  ## [1.1.3] - 2026-07-20
8
54
 
9
55
  ### Security
@@ -122,246 +168,246 @@ All notable changes to the SVN MCP are recorded here.
122
168
  - Redacted credential-like URL content in compact log/property values and projected repository URLs.
123
169
 
124
170
  ## [1.0.0] - 2026-07-08
125
-
126
- ### Changed
127
-
128
- - Declared the first public open-source release.
129
- - Bumped the package and MCP server version to `1.0.0`.
130
- - Added the GitHub clone and `npm run prepare:local` setup flow so automation can install the MCP
131
- from the repository and configure `current\dist\index.js`.
132
-
133
- ### Packaging
134
-
135
- - Generated release payloads remain ignored; publish the source tree, root `bin/` runtime payload,
136
- and third-party notices, then let each clone prepare its own local `current` runtime.
137
-
138
- ## [0.1.15] - 2026-07-08
139
-
140
- ### Added
141
-
142
- - Added read-only `svn_propget` for explicit working-copy paths.
143
- - Added guarded `svn_propset` for explicit working-copy paths, with readonly refusal,
144
- never-commit target checks, bounded property names/values, and `riskAck` for high-risk
145
- properties such as `svn:ignore`, `svn:global-ignores`, `svn:externals`, and `svn:auto-props`.
146
-
147
- ### Changed
148
-
149
- - Documented generic SVN property operations so callers do not fall back to raw `svn propget` /
150
- `svn propset` for routine property-only work.
151
-
152
- ## [0.1.14] - 2026-07-07
153
-
154
- ### Added
155
-
156
- - CLI failsafe mode (SPEC §15.7): if the MCP fails mechanically (server down, protocol-level
157
- tool errors, broken bundled runtime), callers fall back to scoped raw `svn` CLI for the rest of
158
- the session under the same policy rules. Guard refusals are explicitly not failsafe triggers
159
- and must never be bypassed via CLI; read-only instances stay read-only.
160
- - `noteFromRun` now reports executable-launch failures (`ENOENT`/`EACCES`/`EPERM`) as
161
- "MCP svn runtime unavailable" with the failsafe hint, and `svn_diagnose` includes the failsafe
162
- suggestion when the bundled SVN toolchain is unavailable.
163
- - Failsafe rules documented in `docs/svnrules.md`.
164
-
165
- ## [0.1.13] - 2026-07-07
166
-
167
- ### Fixed
168
-
169
- - **Critical:** the server never started when launched through the documented `current`
170
- junction path — Node resolves the ESM entry module through junctions, so the
171
- launched-directly check failed and the process exited silently. The check now compares real
172
- paths; both `current\dist\index.js` and `releases\v<version>\dist\index.js` launches work.
173
- - `svn_update` parsing no longer reports SVN informational trailers ("Updated to revision N.",
174
- "At revision N.", "Updating '.':", "Restored ...") as phantom changed paths.
175
- - `eol_check` and `svn_precommit` return a structured `kind:"not-a-file"` result for directory
176
- targets instead of rejecting with a raw filesystem error.
177
- - Streamed stdout/stderr (including the `svn_diff` hot path) now use the same latin1 fallback as
178
- buffered output for non-UTF8 bytes.
179
- - Working-copy containment now verifies physical paths, so a junction or symlink under a working
180
- copy cannot redirect tools to files outside it.
181
- - Repository-local policy globs are additionally capped on total wildcard count to bound regex
182
- backtracking.
183
- - Removed the residual MCP-launch-directory fallback from the read-only working-copy probe.
184
-
185
- ### Verification
186
-
187
- - Deep audit pass over the v0.1.12 baseline: all 27 accepted audit fixes re-verified in
188
- source; typecheck, build, 52 Jest tests, and `npm audit` green. Live MCP smoke test over
189
- stdio (initialize, tools/list, readonly banner) through both junction and real release paths.
190
-
191
- ## [0.1.12] - 2026-07-07
192
-
193
- ### Fixed
194
-
195
- - Fixed all accepted deep-audit items: credential redaction, non-interactive SVN execution,
196
- stable locale, streaming timeout/stderr caps, latin1 fallback, parser correctness, ignored-path
197
- precommit guards, secure message files, split recursive reverts, import/export guards, property
198
- status/conflict parsing, update tree-conflict parsing, policy validation/caching, nullable
199
- working-copy roots, and ambiguous no-context read-only calls.
200
- - `svn_import` now scans source trees for never-commit descendants before invoking SVN.
201
- - `svn_precommit` and `svn_commit` now treat ignored paths as uncommittable instead of reaching
202
- later SVN failures.
203
-
204
- ### Performance
205
-
206
- - Batched `eol_check` property lookup, parallelized independent `svn_diagnose` checks, reduced
207
- repeated `svn_info` process spawns, and replaced synchronous EOL sniffing and recursive
208
- directory scans in hot paths.
209
-
210
- ### Documentation
211
-
212
- - Updated the spec for the v0.1.12 audit fixes.
213
-
214
- ## [0.1.11] - 2026-07-07
215
-
216
- ### Fixed
217
-
218
- - Repository-local never-commit `deny` rules now override broad repository-local `allow`
219
- exceptions.
220
- - Envelope `stdout_summary` and `stderr_summary` now redact URL userinfo and sensitive query
221
- parameters, not only displayed command strings.
222
-
223
- ### Documentation
224
-
225
- - Updated docs for the v0.1.11 baseline and recorded the audit fixes.
226
-
227
- ## [0.1.10] - 2026-07-07
228
-
229
- ### Added
230
-
231
- - Added `svn_diagnose`, a read-only working-copy diagnostic tool for local status, remote status, HEAD info, and latest log reachability.
232
- - Added regression coverage for successful temp-repository diagnosis and structured non-working-copy diagnosis.
233
-
234
- ### Changed
235
-
236
- - Expanded SVN error classification for common authentication, network/repository, working-copy lock, and SQLite working-copy database failures.
237
- - Documented the external SVN MCP comparison: borrow diagnostics and error taxonomy ideas, but keep this MCP's bundled runtime, zero end-user env config, explicit-path commits, readonly mode, no-shell execution, and guarded mutating surface.
238
-
239
- ### Verification
240
-
241
- - Added targeted tests for the borrowed diagnostic/error-classification behavior.
242
-
243
- ## [0.1.9] - 2026-07-07
244
-
245
- ### Added
246
-
247
- - Added repo-local `.svn-mcp-policy.json` support for strict never-commit defaults with explicit per-repository allow/deny exceptions.
248
- - Added streaming diff parsing so `svn_diff` keeps complete per-file counts while capping only `diff_excerpt`.
249
- - Added URL userinfo and sensitive query-parameter redaction for displayed command strings.
250
- - Added `allowLarge` to `eol_fix_verified`; oversized files are refused unless the caller explicitly opts in.
251
-
252
- ### Changed
253
-
254
- - Never-commit generated-folder guards are now segment-aware, blocking nested `bin`, `obj`, `dist`, `node_modules`, `coverage`, `.vs`, and `.cache` folders, including descendants of recursive directory adds.
255
- - `svn_precommit` now treats `svn_diff` failure as a trust-gate verdict: recoverable EOL failures become `EOL_FIX_NEEDED`, other diff failures become `DIFF_FAILED`.
256
- - `eol_fix_verified` now returns structured refusals for missing paths, non-files, binary files, and too-large files.
257
-
258
- ### Verification
259
-
260
- - Added regression coverage for segment-aware guards, policy exceptions, recursive add refusals, redaction, streaming diff counts, precommit diff-failure verdicts, and structured EOL repair refusals.
261
-
262
- ## [0.1.8] - 2026-07-07
263
-
264
- ### Added
265
-
266
- - `svn_info` now returns parsed `svnversion` details: revision range, local modification flag, switched/partial flags, remote HEAD revision, and stale-base status.
267
- - `svn_status` now accepts `hideNoise:true` to filter common local runtime clutter such as `node_modules`, `dist`, `current`, `.cache`, and `coverage`.
268
- - `svn_status` now accepts `includeIgnored:true` for explicit ignored-path audits without making that the daily default.
269
- - Added `svn_self_check` to report package/runtime version, `current` release pointer, bundled payload counts, startup probe, and packaging-script health.
270
- - Added a Node `scripts/clean.mjs` and changed `npm run clean` to avoid PowerShell filesystem deletion.
271
-
272
- ### Changed
273
-
274
- - `npm run release:prepare` now validates release payload counts before repointing `current`.
275
- - Updated docs to separate MCP-solvable SVN pain points from semantic workflow responsibilities.
276
-
277
- ### Verification
278
-
279
- - Added regression coverage for mixed-revision metadata, status noise filtering, and self-check output.
280
-
281
- ## [0.1.7] - 2026-07-07
282
-
283
- ### Added
284
-
285
- - `svn_log` now resolves working-copy paths to repository URLs and queries HEAD when possible, avoiding mixed-revision root log gaps.
286
- - `svn_diff` now returns EOL diagnostics and `recovery_tool: "eol_fix_verified"` when SVN reports inconsistent line endings.
287
- - Added `npm run release:prepare`, a Node release packager that copies `dist/` and `bin/` into `releases/v<version>` and repoints `current` without PowerShell copy/junction commands.
288
-
289
- ### Changed
290
-
291
- - Updated the spec and README for repository-URL log behavior, EOL diff recovery, and the release preparation command.
292
-
293
- ### Verification
294
-
295
- - Added temp-repository regression tests for mixed-revision root log history and inconsistent-EOL diff recovery.
296
-
297
- ## [0.1.6] - 2026-07-07
298
-
299
- ### Changed
300
-
301
- - Expanded never-commit guards to block root generated/dependency/cache artifacts: `dist/**`, `node_modules/**`, `coverage/**`, `.cache/**`, and `*.tsbuildinfo`.
302
- - Tightened `/**` never-commit matching so directory globs do not block unrelated same-prefix files such as `binary.txt`.
303
- - Updated the spec and SVN rules so the executable guard matrix matches the documented generated-output policy.
304
-
305
- ### Verification
306
-
307
- - Added a guard regression test that failed before the change and passed after the guard expansion.
308
-
309
- ## [0.1.5] - 2026-07-07
310
-
311
- ### Added
312
-
313
- - Plug-and-play global client registration: one MCP config can serve multiple SVN working copies.
314
- - Working-copy inference from absolute path inputs when `cwd` is omitted.
315
- - `--readonly` launch argument for read-only clients.
316
- - Regression coverage for absolute-path multi-working-copy use.
317
-
318
- ### Changed
319
-
320
- - End-user configuration no longer requires environment variables or project-specific launch `cwd`.
321
- - `SVN_AGENT_*` variables are documented as development/test escape hatches only.
322
- - README, spec, and ADR docs now describe zero-env setup and multi-working-copy behavior.
323
-
324
- ## [0.1.4] - 2026-07-07
325
-
326
- ### Added
327
-
328
- - Versioned source-tree `bin/` folder containing the full SlikSVN `bin` payload and full dos2unix `bin` payload.
329
- - Release `bin/` payload beside `dist/`, including `svn`, `svnadmin`, `svnversion`, `dos2unix`, `unix2dos`, and required DLLs.
330
- - Bundled executable resolution for SVN and EOL tools, with dev/test overrides.
331
-
332
- ### Changed
333
-
334
- - Runtime startup and EOL repair no longer depend on PATH for normal use.
335
- - Tests use bundled SVN binaries for temp-repository setup.
336
-
337
- ## [0.1.3] - 2026-07-07
338
-
339
- ### Added
340
-
341
- - Guarded `svn_move`, `svn_rename`, and `svn_copy` tools for working-copy paths.
342
- - Parent-directory creation for move/copy destinations.
343
- - Integration coverage for move, rename, copy, readonly refusal, and never-commit destination refusal.
344
-
345
- ## [0.1.2] - 2026-07-07
346
-
347
- ### Changed
348
-
349
- - EOL repair is fully MCP-owned through `unix2dos`/`dos2unix`.
350
- - `svn_diff` uses `svn diff --internal-diff -x --ignore-eol-style` by default.
351
- - PowerShell EOL hook guidance was removed from the workflow.
352
-
353
- ## [0.1.1] - 2026-07-07
354
-
355
- ### Fixed
356
-
357
- - `svn_add` now schedules needed parent directories for explicit nested file paths.
358
- - `svn_commit` includes scheduled-added parent directories needed for explicit nested file commits.
359
-
360
- ## [0.1.0] - 2026-07-07
361
-
362
- ### Added
363
-
364
- - Initial generic SVN MCP implementation.
365
- - Guarded SVN runner, structured envelopes, XML/text parsers, EOL helpers, and guard logic.
366
- - Read-only, composite, and mutating SVN tool families.
367
- - Versioned release layout under `releases/v<version>` with a `current` junction.
171
+
172
+ ### Changed
173
+
174
+ - Declared the first public open-source release.
175
+ - Bumped the package and MCP server version to `1.0.0`.
176
+ - Added the GitHub clone and `npm run prepare:local` setup flow so automation can install the MCP
177
+ from the repository and configure `current\dist\index.js`.
178
+
179
+ ### Packaging
180
+
181
+ - Generated release payloads remain ignored; publish the source tree, root `bin/` runtime payload,
182
+ and third-party notices, then let each clone prepare its own local `current` runtime.
183
+
184
+ ## [0.1.15] - 2026-07-08
185
+
186
+ ### Added
187
+
188
+ - Added read-only `svn_propget` for explicit working-copy paths.
189
+ - Added guarded `svn_propset` for explicit working-copy paths, with readonly refusal,
190
+ never-commit target checks, bounded property names/values, and `riskAck` for high-risk
191
+ properties such as `svn:ignore`, `svn:global-ignores`, `svn:externals`, and `svn:auto-props`.
192
+
193
+ ### Changed
194
+
195
+ - Documented generic SVN property operations so callers do not fall back to raw `svn propget` /
196
+ `svn propset` for routine property-only work.
197
+
198
+ ## [0.1.14] - 2026-07-07
199
+
200
+ ### Added
201
+
202
+ - CLI failsafe mode (SPEC §15.7): if the MCP fails mechanically (server down, protocol-level
203
+ tool errors, broken bundled runtime), callers fall back to scoped raw `svn` CLI for the rest of
204
+ the session under the same policy rules. Guard refusals are explicitly not failsafe triggers
205
+ and must never be bypassed via CLI; read-only instances stay read-only.
206
+ - `noteFromRun` now reports executable-launch failures (`ENOENT`/`EACCES`/`EPERM`) as
207
+ "MCP svn runtime unavailable" with the failsafe hint, and `svn_diagnose` includes the failsafe
208
+ suggestion when the bundled SVN toolchain is unavailable.
209
+ - Failsafe rules documented in `docs/svnrules.md`.
210
+
211
+ ## [0.1.13] - 2026-07-07
212
+
213
+ ### Fixed
214
+
215
+ - **Critical:** the server never started when launched through the documented `current`
216
+ junction path — Node resolves the ESM entry module through junctions, so the
217
+ launched-directly check failed and the process exited silently. The check now compares real
218
+ paths; both `current\dist\index.js` and `releases\v<version>\dist\index.js` launches work.
219
+ - `svn_update` parsing no longer reports SVN informational trailers ("Updated to revision N.",
220
+ "At revision N.", "Updating '.':", "Restored ...") as phantom changed paths.
221
+ - `eol_check` and `svn_precommit` return a structured `kind:"not-a-file"` result for directory
222
+ targets instead of rejecting with a raw filesystem error.
223
+ - Streamed stdout/stderr (including the `svn_diff` hot path) now use the same latin1 fallback as
224
+ buffered output for non-UTF8 bytes.
225
+ - Working-copy containment now verifies physical paths, so a junction or symlink under a working
226
+ copy cannot redirect tools to files outside it.
227
+ - Repository-local policy globs are additionally capped on total wildcard count to bound regex
228
+ backtracking.
229
+ - Removed the residual MCP-launch-directory fallback from the read-only working-copy probe.
230
+
231
+ ### Verification
232
+
233
+ - Deep audit pass over the v0.1.12 baseline: all 27 accepted audit fixes re-verified in
234
+ source; typecheck, build, 52 Jest tests, and `npm audit` green. Live MCP smoke test over
235
+ stdio (initialize, tools/list, readonly banner) through both junction and real release paths.
236
+
237
+ ## [0.1.12] - 2026-07-07
238
+
239
+ ### Fixed
240
+
241
+ - Fixed all accepted deep-audit items: credential redaction, non-interactive SVN execution,
242
+ stable locale, streaming timeout/stderr caps, latin1 fallback, parser correctness, ignored-path
243
+ precommit guards, secure message files, split recursive reverts, import/export guards, property
244
+ status/conflict parsing, update tree-conflict parsing, policy validation/caching, nullable
245
+ working-copy roots, and ambiguous no-context read-only calls.
246
+ - `svn_import` now scans source trees for never-commit descendants before invoking SVN.
247
+ - `svn_precommit` and `svn_commit` now treat ignored paths as uncommittable instead of reaching
248
+ later SVN failures.
249
+
250
+ ### Performance
251
+
252
+ - Batched `eol_check` property lookup, parallelized independent `svn_diagnose` checks, reduced
253
+ repeated `svn_info` process spawns, and replaced synchronous EOL sniffing and recursive
254
+ directory scans in hot paths.
255
+
256
+ ### Documentation
257
+
258
+ - Updated the spec for the v0.1.12 audit fixes.
259
+
260
+ ## [0.1.11] - 2026-07-07
261
+
262
+ ### Fixed
263
+
264
+ - Repository-local never-commit `deny` rules now override broad repository-local `allow`
265
+ exceptions.
266
+ - Envelope `stdout_summary` and `stderr_summary` now redact URL userinfo and sensitive query
267
+ parameters, not only displayed command strings.
268
+
269
+ ### Documentation
270
+
271
+ - Updated docs for the v0.1.11 baseline and recorded the audit fixes.
272
+
273
+ ## [0.1.10] - 2026-07-07
274
+
275
+ ### Added
276
+
277
+ - Added `svn_diagnose`, a read-only working-copy diagnostic tool for local status, remote status, HEAD info, and latest log reachability.
278
+ - Added regression coverage for successful temp-repository diagnosis and structured non-working-copy diagnosis.
279
+
280
+ ### Changed
281
+
282
+ - Expanded SVN error classification for common authentication, network/repository, working-copy lock, and SQLite working-copy database failures.
283
+ - Documented the external SVN MCP comparison: borrow diagnostics and error taxonomy ideas, but keep this MCP's bundled runtime, zero end-user env config, explicit-path commits, readonly mode, no-shell execution, and guarded mutating surface.
284
+
285
+ ### Verification
286
+
287
+ - Added targeted tests for the borrowed diagnostic/error-classification behavior.
288
+
289
+ ## [0.1.9] - 2026-07-07
290
+
291
+ ### Added
292
+
293
+ - Added repo-local `.svn-mcp-policy.json` support for strict never-commit defaults with explicit per-repository allow/deny exceptions.
294
+ - Added streaming diff parsing so `svn_diff` keeps complete per-file counts while capping only `diff_excerpt`.
295
+ - Added URL userinfo and sensitive query-parameter redaction for displayed command strings.
296
+ - Added `allowLarge` to `eol_fix_verified`; oversized files are refused unless the caller explicitly opts in.
297
+
298
+ ### Changed
299
+
300
+ - Never-commit generated-folder guards are now segment-aware, blocking nested `bin`, `obj`, `dist`, `node_modules`, `coverage`, `.vs`, and `.cache` folders, including descendants of recursive directory adds.
301
+ - `svn_precommit` now treats `svn_diff` failure as a trust-gate verdict: recoverable EOL failures become `EOL_FIX_NEEDED`, other diff failures become `DIFF_FAILED`.
302
+ - `eol_fix_verified` now returns structured refusals for missing paths, non-files, binary files, and too-large files.
303
+
304
+ ### Verification
305
+
306
+ - Added regression coverage for segment-aware guards, policy exceptions, recursive add refusals, redaction, streaming diff counts, precommit diff-failure verdicts, and structured EOL repair refusals.
307
+
308
+ ## [0.1.8] - 2026-07-07
309
+
310
+ ### Added
311
+
312
+ - `svn_info` now returns parsed `svnversion` details: revision range, local modification flag, switched/partial flags, remote HEAD revision, and stale-base status.
313
+ - `svn_status` now accepts `hideNoise:true` to filter common local runtime clutter such as `node_modules`, `dist`, `current`, `.cache`, and `coverage`.
314
+ - `svn_status` now accepts `includeIgnored:true` for explicit ignored-path audits without making that the daily default.
315
+ - Added `svn_self_check` to report package/runtime version, `current` release pointer, bundled payload counts, startup probe, and packaging-script health.
316
+ - Added a Node `scripts/clean.mjs` and changed `npm run clean` to avoid PowerShell filesystem deletion.
317
+
318
+ ### Changed
319
+
320
+ - `npm run release:prepare` now validates release payload counts before repointing `current`.
321
+ - Updated docs to separate MCP-solvable SVN pain points from semantic workflow responsibilities.
322
+
323
+ ### Verification
324
+
325
+ - Added regression coverage for mixed-revision metadata, status noise filtering, and self-check output.
326
+
327
+ ## [0.1.7] - 2026-07-07
328
+
329
+ ### Added
330
+
331
+ - `svn_log` now resolves working-copy paths to repository URLs and queries HEAD when possible, avoiding mixed-revision root log gaps.
332
+ - `svn_diff` now returns EOL diagnostics and `recovery_tool: "eol_fix_verified"` when SVN reports inconsistent line endings.
333
+ - Added `npm run release:prepare`, a Node release packager that copies `dist/` and `bin/` into `releases/v<version>` and repoints `current` without PowerShell copy/junction commands.
334
+
335
+ ### Changed
336
+
337
+ - Updated the spec and README for repository-URL log behavior, EOL diff recovery, and the release preparation command.
338
+
339
+ ### Verification
340
+
341
+ - Added temp-repository regression tests for mixed-revision root log history and inconsistent-EOL diff recovery.
342
+
343
+ ## [0.1.6] - 2026-07-07
344
+
345
+ ### Changed
346
+
347
+ - Expanded never-commit guards to block root generated/dependency/cache artifacts: `dist/**`, `node_modules/**`, `coverage/**`, `.cache/**`, and `*.tsbuildinfo`.
348
+ - Tightened `/**` never-commit matching so directory globs do not block unrelated same-prefix files such as `binary.txt`.
349
+ - Updated the spec and SVN rules so the executable guard matrix matches the documented generated-output policy.
350
+
351
+ ### Verification
352
+
353
+ - Added a guard regression test that failed before the change and passed after the guard expansion.
354
+
355
+ ## [0.1.5] - 2026-07-07
356
+
357
+ ### Added
358
+
359
+ - Plug-and-play global client registration: one MCP config can serve multiple SVN working copies.
360
+ - Working-copy inference from absolute path inputs when `cwd` is omitted.
361
+ - `--readonly` launch argument for read-only clients.
362
+ - Regression coverage for absolute-path multi-working-copy use.
363
+
364
+ ### Changed
365
+
366
+ - End-user configuration no longer requires environment variables or project-specific launch `cwd`.
367
+ - `SVN_AGENT_*` variables are documented as development/test escape hatches only.
368
+ - README, spec, and ADR docs now describe zero-env setup and multi-working-copy behavior.
369
+
370
+ ## [0.1.4] - 2026-07-07
371
+
372
+ ### Added
373
+
374
+ - Versioned source-tree `bin/` folder containing the full SlikSVN `bin` payload and full dos2unix `bin` payload.
375
+ - Release `bin/` payload beside `dist/`, including `svn`, `svnadmin`, `svnversion`, `dos2unix`, `unix2dos`, and required DLLs.
376
+ - Bundled executable resolution for SVN and EOL tools, with dev/test overrides.
377
+
378
+ ### Changed
379
+
380
+ - Runtime startup and EOL repair no longer depend on PATH for normal use.
381
+ - Tests use bundled SVN binaries for temp-repository setup.
382
+
383
+ ## [0.1.3] - 2026-07-07
384
+
385
+ ### Added
386
+
387
+ - Guarded `svn_move`, `svn_rename`, and `svn_copy` tools for working-copy paths.
388
+ - Parent-directory creation for move/copy destinations.
389
+ - Integration coverage for move, rename, copy, readonly refusal, and never-commit destination refusal.
390
+
391
+ ## [0.1.2] - 2026-07-07
392
+
393
+ ### Changed
394
+
395
+ - EOL repair is fully MCP-owned through `unix2dos`/`dos2unix`.
396
+ - `svn_diff` uses `svn diff --internal-diff -x --ignore-eol-style` by default.
397
+ - PowerShell EOL hook guidance was removed from the workflow.
398
+
399
+ ## [0.1.1] - 2026-07-07
400
+
401
+ ### Fixed
402
+
403
+ - `svn_add` now schedules needed parent directories for explicit nested file paths.
404
+ - `svn_commit` includes scheduled-added parent directories needed for explicit nested file commits.
405
+
406
+ ## [0.1.0] - 2026-07-07
407
+
408
+ ### Added
409
+
410
+ - Initial generic SVN MCP implementation.
411
+ - Guarded SVN runner, structured envelopes, XML/text parsers, EOL helpers, and guard logic.
412
+ - Read-only, composite, and mutating SVN tool families.
413
+ - Versioned release layout under `releases/v<version>` with a `current` junction.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Strict SVN Model Context Protocol server for agent-safe status, diff, EOL diagnosis, precommit checks, and guarded SVN mutations.
4
4
 
5
- The implementation contract lives in `docs/SPEC.md`. The current source release is `1.1.3`; each source clone can prepare a local runtime under `releases/v1.1.3`, while npm installations run directly from package-root `dist/`.
5
+ The implementation contract lives in `docs/SPEC.md`. The current source release is `1.2.0`; each source clone can prepare a local runtime under `releases/v1.2.0`, while npm installations run directly from package-root `dist/`.
6
6
 
7
7
  Requirements: Node.js 24.18.0 or newer within the Node 24 LTS line, npm 11.16.0 or newer, Git, and access to the public npm registry. Windows uses the
8
8
  bundled VisualSVN Apache Subversion command-line package and dos2unix payload. On macOS and Linux, `svn`, `svnversion`, `svnadmin`,
@@ -29,7 +29,8 @@ Resolve the executable with the platform command lookup: where.exe svn-agent-mcp
29
29
  On macOS/Linux, verify that svn, svnversion, svnadmin, dos2unix, and unix2dos are available on PATH. If any are missing, install Subversion and dos2unix with the host package manager.
30
30
  Ensure the MCP client entry is named "svn" and uses command "svn-agent-mcp", never a source checkout, junction, current pointer, or dist path. Do not add --readonly.
31
31
  Preserve existing SVN_AGENT_* environment overrides without printing sensitive values, then restart the MCP client.
32
- After restarting, run svn_self_check and report the installed version, executable path, runtime layout, and MCP health. The expected latest release is 1.1.3; report the installed version instead of relying on a remembered version.
32
+ Query the registry version with: npm view svn-agent-mcp version
33
+ After restarting, run svn_self_check and compare its installed version with the registry version. Report the installed version, executable path, runtime layout, and MCP health instead of relying on a remembered version.
33
34
  ```
34
35
 
35
36
  ## Agent Setup From GitHub
@@ -145,6 +146,8 @@ mixed-revision checks, and commit verification run unchanged.
145
146
  | `npm run check:runtime` | Verify the supported Node 24 LTS and minimum npm version |
146
147
  | `npm run typecheck` | Check TypeScript without emitting build output |
147
148
  | `npm run build` | Compile `src/` into `dist/` |
149
+ | `npm run generate:api-contract` | Generate `docs/MCP_API.json` from the registered MCP tools |
150
+ | `npm run check:api-contract` | Fail when the generated MCP API contract is stale |
148
151
  | `npm test` | Run the Jest test suite |
149
152
  | `npm run test:package` | Pack, install, and self-check the real npm artifact in isolation |
150
153
  | `npm run benchmark:responses` | Compare compact MCP, full MCP, and equivalent raw SVN output sizes |
@@ -156,6 +159,8 @@ mixed-revision checks, and commit verification run unchanged.
156
159
 
157
160
  Use `svn_self_check` to verify the MCP package, runtime layout, resolved native or bundled tools, and release scripts. Use `svn_diagnose` on a working-copy path when SVN itself is acting strange; it checks local status, remote status, HEAD info, latest log reachability, and returns actionable notes for authentication, network, lock, and working-copy database failures.
158
161
 
162
+ Use `svn_snapshot` for a one-call status and revision summary. `svn_log` and `svn_diff` accept exact or ranged revision selectors, while bounded `svn_cat` and `svn_blame` calls support historical file inspection without raw SVN output. Mutations include dry-run-first `svn_delete` and canonical `svn_resolve`; the older `svn_resolved` name remains as a deprecated compatibility alias.
163
+
159
164
  For SVN property work, use `svn_propget` and guarded `svn_propset` instead of raw `svn propget`/`svn propset`. `svn_propset_eol_style` remains the safer shortcut for `svn:eol-style` normalization.
160
165
 
161
166
  ## Changelog
@@ -174,7 +179,7 @@ Release history is maintained in `CHANGELOG.md`.
174
179
  | `bin/` | Versioned Windows SVN and EOL converter runtime binaries |
175
180
  | `third_party_licenses/` | License and notice texts shipped with the bundled runtime |
176
181
  | `THIRD_PARTY_NOTICES.md` | Notices for bundled binary payloads |
177
- | `docs/` | Spec, local rules, and decisions |
182
+ | `docs/` | Spec, generated MCP API contract, local rules, and decisions |
178
183
  | `releases/` | Generated versioned runtime release payloads, ignored by Git |
179
184
 
180
185
  ## Usage Model
package/SECURITY.md CHANGED
@@ -1,23 +1,23 @@
1
- # Security Policy
2
-
3
- ## Supported Versions
4
-
5
- Security fixes target the latest released version on the default branch. Older releases may receive
6
- fixes when the issue is severe and the patch is low risk.
7
-
8
- ## Reporting A Vulnerability
9
-
10
- Please report suspected vulnerabilities through GitHub private vulnerability reporting or a private
11
- security advisory for this repository. If private reporting is not enabled, open a minimal public
12
- issue asking for a security contact without including exploit details.
13
-
14
- Useful reports include:
15
-
16
- - Affected version or commit
17
- - Impact and attacker capabilities
18
- - Reproduction steps or proof of concept
19
- - Whether the issue affects read-only, mutating, or release-packaging behavior
20
-
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ Security fixes target the latest released version on the default branch. Older releases may receive
6
+ fixes when the issue is severe and the patch is low risk.
7
+
8
+ ## Reporting A Vulnerability
9
+
10
+ Please report suspected vulnerabilities through GitHub private vulnerability reporting or a private
11
+ security advisory for this repository. If private reporting is not enabled, open a minimal public
12
+ issue asking for a security contact without including exploit details.
13
+
14
+ Useful reports include:
15
+
16
+ - Affected version or commit
17
+ - Impact and attacker capabilities
18
+ - Reproduction steps or proof of concept
19
+ - Whether the issue affects read-only, mutating, or release-packaging behavior
20
+
21
21
  Please do not publish exploit details until a fix or mitigation is available.
22
22
 
23
23
  ## Security Boundaries
@@ -34,6 +34,8 @@ Please do not publish exploit details until a fix or mitigation is available.
34
34
  than silently discarded.
35
35
  - Response redaction covers credential-bearing URLs and common secret query parameters, but it is
36
36
  not a substitute for keeping credentials out of versioned file content and commit messages.
37
+ - Commit/import messages and generic property values are passed through mode-0600 temporary files
38
+ outside the working copy and removed in `finally`, rather than embedded in displayed commands.
37
39
  - SVN and conversion processes inherit the host environment so native credential caches, proxy
38
40
  settings, home directories, and configured SSH transports continue to work. Treat MCP process
39
41
  environment variables as trusted operator configuration and do not place secrets in debug logs.