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.
- package/CHANGELOG.md +291 -245
- package/README.md +8 -3
- package/SECURITY.md +22 -20
- package/THIRD_PARTY_CHECKSUMS.txt +1 -1
- package/dist/envelope.d.ts.map +1 -1
- package/dist/envelope.js +3 -0
- package/dist/envelope.js.map +1 -1
- package/dist/guards.d.ts +1 -0
- package/dist/guards.d.ts.map +1 -1
- package/dist/guards.js +6 -0
- package/dist/guards.js.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +108 -33
- package/dist/index.js.map +1 -1
- package/dist/parse/blameXml.d.ts +8 -0
- package/dist/parse/blameXml.d.ts.map +1 -0
- package/dist/parse/blameXml.js +37 -0
- package/dist/parse/blameXml.js.map +1 -0
- package/dist/parse/diffText.d.ts +1 -1
- package/dist/parse/diffText.d.ts.map +1 -1
- package/dist/parse/diffText.js +15 -4
- package/dist/parse/diffText.js.map +1 -1
- package/dist/parse/xmlOptions.d.ts.map +1 -1
- package/dist/response.d.ts.map +1 -1
- package/dist/response.js +90 -7
- package/dist/response.js.map +1 -1
- package/dist/runner.d.ts +6 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +101 -38
- package/dist/runner.js.map +1 -1
- package/dist/tools/composite.d.ts +6 -0
- package/dist/tools/composite.d.ts.map +1 -1
- package/dist/tools/composite.js +39 -4
- package/dist/tools/composite.js.map +1 -1
- package/dist/tools/mutating.d.ts +10 -1
- package/dist/tools/mutating.d.ts.map +1 -1
- package/dist/tools/mutating.js +103 -18
- package/dist/tools/mutating.js.map +1 -1
- package/dist/tools/readonly.d.ts +17 -0
- package/dist/tools/readonly.d.ts.map +1 -1
- package/dist/tools/readonly.js +158 -4
- package/dist/tools/readonly.js.map +1 -1
- package/dist/tools/selfcheck.d.ts +5 -5
- package/dist/tools/selfcheck.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/MCP_API.json +1504 -0
- package/docs/SPEC.md +1094 -0
- 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.
|
|
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
|
-
|
|
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.
|