svn-agent-mcp 1.1.1 → 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 (180) hide show
  1. package/CHANGELOG.md +354 -245
  2. package/README.md +19 -8
  3. package/SECURITY.md +44 -21
  4. package/THIRD_PARTY_CHECKSUMS.txt +74 -45
  5. package/THIRD_PARTY_NOTICES.md +39 -46
  6. package/bin/api-ms-win-core-console-l1-1-0.dll +0 -0
  7. package/bin/api-ms-win-core-console-l1-2-0.dll +0 -0
  8. package/bin/api-ms-win-core-datetime-l1-1-0.dll +0 -0
  9. package/bin/api-ms-win-core-debug-l1-1-0.dll +0 -0
  10. package/bin/api-ms-win-core-errorhandling-l1-1-0.dll +0 -0
  11. package/bin/api-ms-win-core-file-l1-1-0.dll +0 -0
  12. package/bin/api-ms-win-core-file-l1-2-0.dll +0 -0
  13. package/bin/api-ms-win-core-file-l2-1-0.dll +0 -0
  14. package/bin/api-ms-win-core-handle-l1-1-0.dll +0 -0
  15. package/bin/api-ms-win-core-heap-l1-1-0.dll +0 -0
  16. package/bin/api-ms-win-core-interlocked-l1-1-0.dll +0 -0
  17. package/bin/api-ms-win-core-libraryloader-l1-1-0.dll +0 -0
  18. package/bin/api-ms-win-core-localization-l1-2-0.dll +0 -0
  19. package/bin/api-ms-win-core-memory-l1-1-0.dll +0 -0
  20. package/bin/api-ms-win-core-namedpipe-l1-1-0.dll +0 -0
  21. package/bin/api-ms-win-core-processenvironment-l1-1-0.dll +0 -0
  22. package/bin/api-ms-win-core-processthreads-l1-1-0.dll +0 -0
  23. package/bin/api-ms-win-core-processthreads-l1-1-1.dll +0 -0
  24. package/bin/api-ms-win-core-profile-l1-1-0.dll +0 -0
  25. package/bin/api-ms-win-core-rtlsupport-l1-1-0.dll +0 -0
  26. package/bin/api-ms-win-core-string-l1-1-0.dll +0 -0
  27. package/bin/api-ms-win-core-synch-l1-1-0.dll +0 -0
  28. package/bin/api-ms-win-core-synch-l1-2-0.dll +0 -0
  29. package/bin/api-ms-win-core-sysinfo-l1-1-0.dll +0 -0
  30. package/bin/api-ms-win-core-timezone-l1-1-0.dll +0 -0
  31. package/bin/api-ms-win-core-util-l1-1-0.dll +0 -0
  32. package/bin/api-ms-win-core-xstate-l2-1-0.dll +0 -0
  33. package/bin/api-ms-win-crt-conio-l1-1-0.dll +0 -0
  34. package/bin/api-ms-win-crt-convert-l1-1-0.dll +0 -0
  35. package/bin/api-ms-win-crt-environment-l1-1-0.dll +0 -0
  36. package/bin/api-ms-win-crt-filesystem-l1-1-0.dll +0 -0
  37. package/bin/api-ms-win-crt-heap-l1-1-0.dll +0 -0
  38. package/bin/api-ms-win-crt-locale-l1-1-0.dll +0 -0
  39. package/bin/api-ms-win-crt-math-l1-1-0.dll +0 -0
  40. package/bin/api-ms-win-crt-multibyte-l1-1-0.dll +0 -0
  41. package/bin/api-ms-win-crt-private-l1-1-0.dll +0 -0
  42. package/bin/api-ms-win-crt-process-l1-1-0.dll +0 -0
  43. package/bin/api-ms-win-crt-runtime-l1-1-0.dll +0 -0
  44. package/bin/api-ms-win-crt-stdio-l1-1-0.dll +0 -0
  45. package/bin/api-ms-win-crt-string-l1-1-0.dll +0 -0
  46. package/bin/api-ms-win-crt-time-l1-1-0.dll +0 -0
  47. package/bin/api-ms-win-crt-utility-l1-1-0.dll +0 -0
  48. package/bin/concrt140.dll +0 -0
  49. package/bin/libapr-1.dll +0 -0
  50. package/bin/libaprutil-1.dll +0 -0
  51. package/bin/libsvn_client-1.dll +0 -0
  52. package/bin/libsvn_delta-1.dll +0 -0
  53. package/bin/libsvn_diff-1.dll +0 -0
  54. package/bin/libsvn_fs-1.dll +0 -0
  55. package/bin/libsvn_fs_fs-1.dll +0 -0
  56. package/bin/libsvn_fs_util-1.dll +0 -0
  57. package/bin/libsvn_fs_x-1.dll +0 -0
  58. package/bin/libsvn_ra-1.dll +0 -0
  59. package/bin/libsvn_repos-1.dll +0 -0
  60. package/bin/libsvn_subr-1.dll +0 -0
  61. package/bin/libsvn_wc-1.dll +0 -0
  62. package/bin/msvcp140.dll +0 -0
  63. package/bin/msvcp140_1.dll +0 -0
  64. package/bin/msvcp140_2.dll +0 -0
  65. package/bin/msvcp140_codecvt_ids.dll +0 -0
  66. package/bin/svn.exe +0 -0
  67. package/bin/svnadmin.exe +0 -0
  68. package/bin/svnbench.exe +0 -0
  69. package/bin/svndumpfilter.exe +0 -0
  70. package/bin/svnfsfs.exe +0 -0
  71. package/bin/svnlook.exe +0 -0
  72. package/bin/svnmucc.exe +0 -0
  73. package/bin/svnrdump.exe +0 -0
  74. package/bin/svnserve.exe +0 -0
  75. package/bin/svnsync.exe +0 -0
  76. package/bin/svnversion.exe +0 -0
  77. package/bin/ucrtbase.dll +0 -0
  78. package/bin/vcruntime140.dll +0 -0
  79. package/dist/envelope.d.ts.map +1 -1
  80. package/dist/envelope.js +8 -2
  81. package/dist/envelope.js.map +1 -1
  82. package/dist/guards.d.ts +2 -0
  83. package/dist/guards.d.ts.map +1 -1
  84. package/dist/guards.js +58 -12
  85. package/dist/guards.js.map +1 -1
  86. package/dist/index.d.ts +9 -1
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +128 -48
  89. package/dist/index.js.map +1 -1
  90. package/dist/parse/blameXml.d.ts +8 -0
  91. package/dist/parse/blameXml.d.ts.map +1 -0
  92. package/dist/parse/blameXml.js +37 -0
  93. package/dist/parse/blameXml.js.map +1 -0
  94. package/dist/parse/diffText.d.ts +1 -1
  95. package/dist/parse/diffText.d.ts.map +1 -1
  96. package/dist/parse/diffText.js +35 -19
  97. package/dist/parse/diffText.js.map +1 -1
  98. package/dist/parse/infoXml.d.ts.map +1 -1
  99. package/dist/parse/infoXml.js +3 -1
  100. package/dist/parse/infoXml.js.map +1 -1
  101. package/dist/parse/logXml.d.ts.map +1 -1
  102. package/dist/parse/logXml.js +3 -1
  103. package/dist/parse/logXml.js.map +1 -1
  104. package/dist/parse/statusXml.d.ts.map +1 -1
  105. package/dist/parse/statusXml.js +4 -2
  106. package/dist/parse/statusXml.js.map +1 -1
  107. package/dist/parse/xmlOptions.d.ts +9 -0
  108. package/dist/parse/xmlOptions.d.ts.map +1 -0
  109. package/dist/parse/xmlOptions.js +9 -0
  110. package/dist/parse/xmlOptions.js.map +1 -0
  111. package/dist/response.d.ts.map +1 -1
  112. package/dist/response.js +117 -15
  113. package/dist/response.js.map +1 -1
  114. package/dist/runner.d.ts +9 -0
  115. package/dist/runner.d.ts.map +1 -1
  116. package/dist/runner.js +156 -55
  117. package/dist/runner.js.map +1 -1
  118. package/dist/tools/composite.d.ts +6 -0
  119. package/dist/tools/composite.d.ts.map +1 -1
  120. package/dist/tools/composite.js +48 -10
  121. package/dist/tools/composite.js.map +1 -1
  122. package/dist/tools/diagnose.js +5 -5
  123. package/dist/tools/diagnose.js.map +1 -1
  124. package/dist/tools/mutating.d.ts +12 -1
  125. package/dist/tools/mutating.d.ts.map +1 -1
  126. package/dist/tools/mutating.js +166 -34
  127. package/dist/tools/mutating.js.map +1 -1
  128. package/dist/tools/readonly.d.ts +17 -0
  129. package/dist/tools/readonly.d.ts.map +1 -1
  130. package/dist/tools/readonly.js +202 -30
  131. package/dist/tools/readonly.js.map +1 -1
  132. package/dist/tools/selfcheck.d.ts +6 -5
  133. package/dist/tools/selfcheck.d.ts.map +1 -1
  134. package/dist/tools/selfcheck.js +13 -10
  135. package/dist/tools/selfcheck.js.map +1 -1
  136. package/dist/types.d.ts +3 -0
  137. package/dist/types.d.ts.map +1 -1
  138. package/docs/MCP_API.json +1504 -0
  139. package/docs/SPEC.md +1094 -0
  140. package/package.json +23 -13
  141. package/third_party_licenses/apache-subversion-windows/APR License.txt +297 -0
  142. package/third_party_licenses/apache-subversion-windows/APR Util License.txt +404 -0
  143. package/third_party_licenses/apache-subversion-windows/OpenSSL License.txt +177 -0
  144. package/third_party_licenses/apache-subversion-windows/Subversion License.txt +262 -0
  145. package/third_party_licenses/apache-subversion-windows/Subversion NOTICE.txt +34 -0
  146. package/third_party_licenses/apache-subversion-windows/ZLib License.txt +33 -0
  147. package/third_party_licenses/dos2unix/COPYING.txt +26 -0
  148. package/bin/SlikSvn-DB44-20-x64.dll +0 -0
  149. package/bin/SlikSvn-libapr-1.dll +0 -0
  150. package/bin/SlikSvn-libaprutil-1.dll +0 -0
  151. package/bin/SlikSvn-libcrypto-3-x64.dll +0 -0
  152. package/bin/SlikSvn-libintl.dll +0 -0
  153. package/bin/SlikSvn-libsasl21.dll +0 -0
  154. package/bin/SlikSvn-libssl-3-x64.dll +0 -0
  155. package/bin/SlikSvn-libsvn_client-1.dll +0 -0
  156. package/bin/SlikSvn-libsvn_delta-1.dll +0 -0
  157. package/bin/SlikSvn-libsvn_diff-1.dll +0 -0
  158. package/bin/SlikSvn-libsvn_fs-1.dll +0 -0
  159. package/bin/SlikSvn-libsvn_fs_base-1.dll +0 -0
  160. package/bin/SlikSvn-libsvn_fs_fs-1.dll +0 -0
  161. package/bin/SlikSvn-libsvn_fs_util-1.dll +0 -0
  162. package/bin/SlikSvn-libsvn_fs_x-1.dll +0 -0
  163. package/bin/SlikSvn-libsvn_ra-1.dll +0 -0
  164. package/bin/SlikSvn-libsvn_repos-1.dll +0 -0
  165. package/bin/SlikSvn-libsvn_subr-1.dll +0 -0
  166. package/bin/SlikSvn-libsvn_wc-1.dll +0 -0
  167. package/bin/System64/concrt140.dll +0 -0
  168. package/bin/System64/msvcp140.dll +0 -0
  169. package/bin/System64/msvcp140_1.dll +0 -0
  170. package/bin/System64/msvcp140_2.dll +0 -0
  171. package/bin/System64/msvcp140_atomic_wait.dll +0 -0
  172. package/bin/System64/msvcp140_codecvt_ids.dll +0 -0
  173. package/bin/System64/vccorlib140.dll +0 -0
  174. package/bin/System64/vcruntime140.dll +0 -0
  175. package/bin/System64/vcruntime140_1.dll +0 -0
  176. package/bin/engines/capi.dll +0 -0
  177. package/bin/libsvnjavahl-1.dll +0 -0
  178. package/bin/svn-populate-node-origins-index.exe +0 -0
  179. package/bin/svnauthz-validate.exe +0 -0
  180. package/bin/svnauthz.exe +0 -0
package/CHANGELOG.md CHANGED
@@ -1,7 +1,116 @@
1
- # Changelog
2
-
1
+ # Changelog
2
+
3
3
  All notable changes to the SVN MCP are recorded here.
4
4
 
5
+ ## [Unreleased]
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
+
53
+ ## [1.1.3] - 2026-07-20
54
+
55
+ ### Security
56
+
57
+ - Replaced the SlikSVN payload and its outdated OpenSSL 3.0.16 DLLs with the July 2026
58
+ redistributable VisualSVN Apache Subversion 1.14.5 command-line package.
59
+ - Added complete upstream license and Subversion notice files for the bundled Windows runtime.
60
+ - Redacted secret-like URL values from parsed fields in standard and full MCP responses.
61
+ - Rejected repository policy files larger than 64 KiB and non-regular policy paths before reading
62
+ or parsing them.
63
+ - Made `.git`, `.hg`, `.svn`, and `.ssh` directory contents immutable never-commit paths.
64
+ - Bounded XML entity expansion in all SVN XML parsers and continued to reject external entities.
65
+ - Pinned GitHub Actions to immutable commit hashes.
66
+
67
+ ### Fixed
68
+
69
+ - Treated literal `@` characters safely according to each SVN subcommand's operand semantics,
70
+ including VisualSVN's distinct move and copy destination parsing.
71
+ - Refused symbolic links and Windows directory junctions in recursive import/add scans so SVN
72
+ cannot follow them into unscanned external content.
73
+ - Made batched EOL property writes skip already-correct paths while updating the remaining paths.
74
+ - Allowed `eol_fix_verified` dry runs in read-only mode because they do not modify the working copy.
75
+ - Redacted identity-like URL query values including usernames, email addresses, and client IDs.
76
+ - Reported unknown future SVN status values explicitly instead of synthesizing a potentially
77
+ misleading known status code.
78
+ - Required self-check package-root discovery to match the `svn-agent-mcp` package name.
79
+ - Replaced inline benchmark commit messages with temporary `-F` message files.
80
+ - Derived the MCP server version from `package.json` so release version bumps cannot leave the
81
+ running server on stale metadata.
82
+ - Prevented compact self-check from reporting an incomplete runtime layout as available.
83
+ - Removed the per-file fallback process fan-out when a batched EOL property query returns partial
84
+ XML alongside SVN's expected missing-property exit code.
85
+ - Failed EOL checks on genuine property-query errors or malformed XML rather than treating them as
86
+ paths without an EOL property.
87
+ - Built `dist/` automatically before npm packing and made the packed-install smoke test launch the
88
+ installed `svn-agent-mcp` command shim.
89
+
90
+ ### Performance
91
+
92
+ - Ran independent startup tool probes concurrently.
93
+
94
+ ## [1.1.2] - 2026-07-20
95
+
96
+ ### Fixed
97
+
98
+ - Prevented repository policy allow rules from overriding private-key, `.env*`, and `.npmrc`
99
+ never-commit guards.
100
+ - Bounded individual streamed diff lines and per-file summaries, with explicit truncation signals.
101
+ - Mapped buffered SVN output overflow to a scoped diagnostic instead of a generic failure.
102
+ - Added consistent `--` operand separators to SVN commands as defense in depth.
103
+ - Added finite public limits for path arrays, path strings, repository locations, messages, and cursors.
104
+ - Accepted npm 12 and newer without an engine warning while keeping npm 11.16.0 as the minimum.
105
+ - Required `externalDestAck:true` before exporting outside a working copy.
106
+ - Checked mixed revisions at the working-copy root during precommit and commit flows.
107
+ - Based EOL repair proof on complete per-file summaries and applied never-commit guards to EOL props.
108
+ - Skipped `.svn` administrative directories during recursive add/import guard scans.
109
+
110
+ ### Documentation
111
+
112
+ - Documented import/export filesystem reach, immutable credential guards, and output-size limits.
113
+
5
114
  ## [1.1.1] - 2026-07-20
6
115
 
7
116
  ### Added
@@ -59,246 +168,246 @@ All notable changes to the SVN MCP are recorded here.
59
168
  - Redacted credential-like URL content in compact log/property values and projected repository URLs.
60
169
 
61
170
  ## [1.0.0] - 2026-07-08
62
-
63
- ### Changed
64
-
65
- - Declared the first public open-source release.
66
- - Bumped the package and MCP server version to `1.0.0`.
67
- - Added the GitHub clone and `npm run prepare:local` setup flow so automation can install the MCP
68
- from the repository and configure `current\dist\index.js`.
69
-
70
- ### Packaging
71
-
72
- - Generated release payloads remain ignored; publish the source tree, root `bin/` runtime payload,
73
- and third-party notices, then let each clone prepare its own local `current` runtime.
74
-
75
- ## [0.1.15] - 2026-07-08
76
-
77
- ### Added
78
-
79
- - Added read-only `svn_propget` for explicit working-copy paths.
80
- - Added guarded `svn_propset` for explicit working-copy paths, with readonly refusal,
81
- never-commit target checks, bounded property names/values, and `riskAck` for high-risk
82
- properties such as `svn:ignore`, `svn:global-ignores`, `svn:externals`, and `svn:auto-props`.
83
-
84
- ### Changed
85
-
86
- - Documented generic SVN property operations so callers do not fall back to raw `svn propget` /
87
- `svn propset` for routine property-only work.
88
-
89
- ## [0.1.14] - 2026-07-07
90
-
91
- ### Added
92
-
93
- - CLI failsafe mode (SPEC §15.7): if the MCP fails mechanically (server down, protocol-level
94
- tool errors, broken bundled runtime), callers fall back to scoped raw `svn` CLI for the rest of
95
- the session under the same policy rules. Guard refusals are explicitly not failsafe triggers
96
- and must never be bypassed via CLI; read-only instances stay read-only.
97
- - `noteFromRun` now reports executable-launch failures (`ENOENT`/`EACCES`/`EPERM`) as
98
- "MCP svn runtime unavailable" with the failsafe hint, and `svn_diagnose` includes the failsafe
99
- suggestion when the bundled SVN toolchain is unavailable.
100
- - Failsafe rules documented in `docs/svnrules.md`.
101
-
102
- ## [0.1.13] - 2026-07-07
103
-
104
- ### Fixed
105
-
106
- - **Critical:** the server never started when launched through the documented `current`
107
- junction path — Node resolves the ESM entry module through junctions, so the
108
- launched-directly check failed and the process exited silently. The check now compares real
109
- paths; both `current\dist\index.js` and `releases\v<version>\dist\index.js` launches work.
110
- - `svn_update` parsing no longer reports SVN informational trailers ("Updated to revision N.",
111
- "At revision N.", "Updating '.':", "Restored ...") as phantom changed paths.
112
- - `eol_check` and `svn_precommit` return a structured `kind:"not-a-file"` result for directory
113
- targets instead of rejecting with a raw filesystem error.
114
- - Streamed stdout/stderr (including the `svn_diff` hot path) now use the same latin1 fallback as
115
- buffered output for non-UTF8 bytes.
116
- - Working-copy containment now verifies physical paths, so a junction or symlink under a working
117
- copy cannot redirect tools to files outside it.
118
- - Repository-local policy globs are additionally capped on total wildcard count to bound regex
119
- backtracking.
120
- - Removed the residual MCP-launch-directory fallback from the read-only working-copy probe.
121
-
122
- ### Verification
123
-
124
- - Deep audit pass over the v0.1.12 baseline: all 27 accepted audit fixes re-verified in
125
- source; typecheck, build, 52 Jest tests, and `npm audit` green. Live MCP smoke test over
126
- stdio (initialize, tools/list, readonly banner) through both junction and real release paths.
127
-
128
- ## [0.1.12] - 2026-07-07
129
-
130
- ### Fixed
131
-
132
- - Fixed all accepted deep-audit items: credential redaction, non-interactive SVN execution,
133
- stable locale, streaming timeout/stderr caps, latin1 fallback, parser correctness, ignored-path
134
- precommit guards, secure message files, split recursive reverts, import/export guards, property
135
- status/conflict parsing, update tree-conflict parsing, policy validation/caching, nullable
136
- working-copy roots, and ambiguous no-context read-only calls.
137
- - `svn_import` now scans source trees for never-commit descendants before invoking SVN.
138
- - `svn_precommit` and `svn_commit` now treat ignored paths as uncommittable instead of reaching
139
- later SVN failures.
140
-
141
- ### Performance
142
-
143
- - Batched `eol_check` property lookup, parallelized independent `svn_diagnose` checks, reduced
144
- repeated `svn_info` process spawns, and replaced synchronous EOL sniffing and recursive
145
- directory scans in hot paths.
146
-
147
- ### Documentation
148
-
149
- - Updated the spec for the v0.1.12 audit fixes.
150
-
151
- ## [0.1.11] - 2026-07-07
152
-
153
- ### Fixed
154
-
155
- - Repository-local never-commit `deny` rules now override broad repository-local `allow`
156
- exceptions.
157
- - Envelope `stdout_summary` and `stderr_summary` now redact URL userinfo and sensitive query
158
- parameters, not only displayed command strings.
159
-
160
- ### Documentation
161
-
162
- - Updated docs for the v0.1.11 baseline and recorded the audit fixes.
163
-
164
- ## [0.1.10] - 2026-07-07
165
-
166
- ### Added
167
-
168
- - Added `svn_diagnose`, a read-only working-copy diagnostic tool for local status, remote status, HEAD info, and latest log reachability.
169
- - Added regression coverage for successful temp-repository diagnosis and structured non-working-copy diagnosis.
170
-
171
- ### Changed
172
-
173
- - Expanded SVN error classification for common authentication, network/repository, working-copy lock, and SQLite working-copy database failures.
174
- - 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.
175
-
176
- ### Verification
177
-
178
- - Added targeted tests for the borrowed diagnostic/error-classification behavior.
179
-
180
- ## [0.1.9] - 2026-07-07
181
-
182
- ### Added
183
-
184
- - Added repo-local `.svn-mcp-policy.json` support for strict never-commit defaults with explicit per-repository allow/deny exceptions.
185
- - Added streaming diff parsing so `svn_diff` keeps complete per-file counts while capping only `diff_excerpt`.
186
- - Added URL userinfo and sensitive query-parameter redaction for displayed command strings.
187
- - Added `allowLarge` to `eol_fix_verified`; oversized files are refused unless the caller explicitly opts in.
188
-
189
- ### Changed
190
-
191
- - 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.
192
- - `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`.
193
- - `eol_fix_verified` now returns structured refusals for missing paths, non-files, binary files, and too-large files.
194
-
195
- ### Verification
196
-
197
- - 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.
198
-
199
- ## [0.1.8] - 2026-07-07
200
-
201
- ### Added
202
-
203
- - `svn_info` now returns parsed `svnversion` details: revision range, local modification flag, switched/partial flags, remote HEAD revision, and stale-base status.
204
- - `svn_status` now accepts `hideNoise:true` to filter common local runtime clutter such as `node_modules`, `dist`, `current`, `.cache`, and `coverage`.
205
- - `svn_status` now accepts `includeIgnored:true` for explicit ignored-path audits without making that the daily default.
206
- - Added `svn_self_check` to report package/runtime version, `current` release pointer, bundled payload counts, startup probe, and packaging-script health.
207
- - Added a Node `scripts/clean.mjs` and changed `npm run clean` to avoid PowerShell filesystem deletion.
208
-
209
- ### Changed
210
-
211
- - `npm run release:prepare` now validates release payload counts before repointing `current`.
212
- - Updated docs to separate MCP-solvable SVN pain points from semantic workflow responsibilities.
213
-
214
- ### Verification
215
-
216
- - Added regression coverage for mixed-revision metadata, status noise filtering, and self-check output.
217
-
218
- ## [0.1.7] - 2026-07-07
219
-
220
- ### Added
221
-
222
- - `svn_log` now resolves working-copy paths to repository URLs and queries HEAD when possible, avoiding mixed-revision root log gaps.
223
- - `svn_diff` now returns EOL diagnostics and `recovery_tool: "eol_fix_verified"` when SVN reports inconsistent line endings.
224
- - 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.
225
-
226
- ### Changed
227
-
228
- - Updated the spec and README for repository-URL log behavior, EOL diff recovery, and the release preparation command.
229
-
230
- ### Verification
231
-
232
- - Added temp-repository regression tests for mixed-revision root log history and inconsistent-EOL diff recovery.
233
-
234
- ## [0.1.6] - 2026-07-07
235
-
236
- ### Changed
237
-
238
- - Expanded never-commit guards to block root generated/dependency/cache artifacts: `dist/**`, `node_modules/**`, `coverage/**`, `.cache/**`, and `*.tsbuildinfo`.
239
- - Tightened `/**` never-commit matching so directory globs do not block unrelated same-prefix files such as `binary.txt`.
240
- - Updated the spec and SVN rules so the executable guard matrix matches the documented generated-output policy.
241
-
242
- ### Verification
243
-
244
- - Added a guard regression test that failed before the change and passed after the guard expansion.
245
-
246
- ## [0.1.5] - 2026-07-07
247
-
248
- ### Added
249
-
250
- - Plug-and-play global client registration: one MCP config can serve multiple SVN working copies.
251
- - Working-copy inference from absolute path inputs when `cwd` is omitted.
252
- - `--readonly` launch argument for read-only clients.
253
- - Regression coverage for absolute-path multi-working-copy use.
254
-
255
- ### Changed
256
-
257
- - End-user configuration no longer requires environment variables or project-specific launch `cwd`.
258
- - `SVN_AGENT_*` variables are documented as development/test escape hatches only.
259
- - README, spec, and ADR docs now describe zero-env setup and multi-working-copy behavior.
260
-
261
- ## [0.1.4] - 2026-07-07
262
-
263
- ### Added
264
-
265
- - Versioned source-tree `bin/` folder containing the full SlikSVN `bin` payload and full dos2unix `bin` payload.
266
- - Release `bin/` payload beside `dist/`, including `svn`, `svnadmin`, `svnversion`, `dos2unix`, `unix2dos`, and required DLLs.
267
- - Bundled executable resolution for SVN and EOL tools, with dev/test overrides.
268
-
269
- ### Changed
270
-
271
- - Runtime startup and EOL repair no longer depend on PATH for normal use.
272
- - Tests use bundled SVN binaries for temp-repository setup.
273
-
274
- ## [0.1.3] - 2026-07-07
275
-
276
- ### Added
277
-
278
- - Guarded `svn_move`, `svn_rename`, and `svn_copy` tools for working-copy paths.
279
- - Parent-directory creation for move/copy destinations.
280
- - Integration coverage for move, rename, copy, readonly refusal, and never-commit destination refusal.
281
-
282
- ## [0.1.2] - 2026-07-07
283
-
284
- ### Changed
285
-
286
- - EOL repair is fully MCP-owned through `unix2dos`/`dos2unix`.
287
- - `svn_diff` uses `svn diff --internal-diff -x --ignore-eol-style` by default.
288
- - PowerShell EOL hook guidance was removed from the workflow.
289
-
290
- ## [0.1.1] - 2026-07-07
291
-
292
- ### Fixed
293
-
294
- - `svn_add` now schedules needed parent directories for explicit nested file paths.
295
- - `svn_commit` includes scheduled-added parent directories needed for explicit nested file commits.
296
-
297
- ## [0.1.0] - 2026-07-07
298
-
299
- ### Added
300
-
301
- - Initial generic SVN MCP implementation.
302
- - Guarded SVN runner, structured envelopes, XML/text parsers, EOL helpers, and guard logic.
303
- - Read-only, composite, and mutating SVN tool families.
304
- - 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.