svn-agent-mcp 1.0.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 (165) hide show
  1. package/.editorconfig +12 -0
  2. package/.gitattributes +7 -0
  3. package/.github/workflows/ci.yml +39 -0
  4. package/.svn-mcp-policy.json +9 -0
  5. package/CHANGELOG.md +248 -0
  6. package/CONTRIBUTING.md +49 -0
  7. package/LICENSE +201 -0
  8. package/README.md +143 -0
  9. package/SECURITY.md +21 -0
  10. package/THIRD_PARTY_CHECKSUMS.txt +52 -0
  11. package/THIRD_PARTY_NOTICES.md +46 -0
  12. package/bin/SlikSvn-DB44-20-x64.dll +0 -0
  13. package/bin/SlikSvn-libapr-1.dll +0 -0
  14. package/bin/SlikSvn-libaprutil-1.dll +0 -0
  15. package/bin/SlikSvn-libcrypto-3-x64.dll +0 -0
  16. package/bin/SlikSvn-libintl.dll +0 -0
  17. package/bin/SlikSvn-libsasl21.dll +0 -0
  18. package/bin/SlikSvn-libssl-3-x64.dll +0 -0
  19. package/bin/SlikSvn-libsvn_client-1.dll +0 -0
  20. package/bin/SlikSvn-libsvn_delta-1.dll +0 -0
  21. package/bin/SlikSvn-libsvn_diff-1.dll +0 -0
  22. package/bin/SlikSvn-libsvn_fs-1.dll +0 -0
  23. package/bin/SlikSvn-libsvn_fs_base-1.dll +0 -0
  24. package/bin/SlikSvn-libsvn_fs_fs-1.dll +0 -0
  25. package/bin/SlikSvn-libsvn_fs_util-1.dll +0 -0
  26. package/bin/SlikSvn-libsvn_fs_x-1.dll +0 -0
  27. package/bin/SlikSvn-libsvn_ra-1.dll +0 -0
  28. package/bin/SlikSvn-libsvn_repos-1.dll +0 -0
  29. package/bin/SlikSvn-libsvn_subr-1.dll +0 -0
  30. package/bin/SlikSvn-libsvn_wc-1.dll +0 -0
  31. package/bin/System64/concrt140.dll +0 -0
  32. package/bin/System64/msvcp140.dll +0 -0
  33. package/bin/System64/msvcp140_1.dll +0 -0
  34. package/bin/System64/msvcp140_2.dll +0 -0
  35. package/bin/System64/msvcp140_atomic_wait.dll +0 -0
  36. package/bin/System64/msvcp140_codecvt_ids.dll +0 -0
  37. package/bin/System64/vccorlib140.dll +0 -0
  38. package/bin/System64/vcruntime140.dll +0 -0
  39. package/bin/System64/vcruntime140_1.dll +0 -0
  40. package/bin/dos2unix.exe +0 -0
  41. package/bin/engines/capi.dll +0 -0
  42. package/bin/libsvnjavahl-1.dll +0 -0
  43. package/bin/mac2unix.exe +0 -0
  44. package/bin/svn-populate-node-origins-index.exe +0 -0
  45. package/bin/svn.exe +0 -0
  46. package/bin/svnadmin.exe +0 -0
  47. package/bin/svnauthz-validate.exe +0 -0
  48. package/bin/svnauthz.exe +0 -0
  49. package/bin/svnbench.exe +0 -0
  50. package/bin/svndumpfilter.exe +0 -0
  51. package/bin/svnfsfs.exe +0 -0
  52. package/bin/svnlook.exe +0 -0
  53. package/bin/svnmucc.exe +0 -0
  54. package/bin/svnrdump.exe +0 -0
  55. package/bin/svnserve.exe +0 -0
  56. package/bin/svnsync.exe +0 -0
  57. package/bin/svnversion.exe +0 -0
  58. package/bin/unix2dos.exe +0 -0
  59. package/bin/unix2mac.exe +0 -0
  60. package/dist/envelope.d.ts +39 -0
  61. package/dist/envelope.d.ts.map +1 -0
  62. package/dist/envelope.js +137 -0
  63. package/dist/envelope.js.map +1 -0
  64. package/dist/eol.d.ts +15 -0
  65. package/dist/eol.d.ts.map +1 -0
  66. package/dist/eol.js +119 -0
  67. package/dist/eol.js.map +1 -0
  68. package/dist/guards.d.ts +26 -0
  69. package/dist/guards.d.ts.map +1 -0
  70. package/dist/guards.js +306 -0
  71. package/dist/guards.js.map +1 -0
  72. package/dist/index.d.ts +8 -0
  73. package/dist/index.d.ts.map +1 -0
  74. package/dist/index.js +221 -0
  75. package/dist/index.js.map +1 -0
  76. package/dist/parse/commitText.d.ts +2 -0
  77. package/dist/parse/commitText.d.ts.map +1 -0
  78. package/dist/parse/commitText.js +9 -0
  79. package/dist/parse/commitText.js.map +1 -0
  80. package/dist/parse/diffText.d.ts +7 -0
  81. package/dist/parse/diffText.d.ts.map +1 -0
  82. package/dist/parse/diffText.js +55 -0
  83. package/dist/parse/diffText.js.map +1 -0
  84. package/dist/parse/infoXml.d.ts +3 -0
  85. package/dist/parse/infoXml.d.ts.map +1 -0
  86. package/dist/parse/infoXml.js +35 -0
  87. package/dist/parse/infoXml.js.map +1 -0
  88. package/dist/parse/logXml.d.ts +10 -0
  89. package/dist/parse/logXml.d.ts.map +1 -0
  90. package/dist/parse/logXml.js +39 -0
  91. package/dist/parse/logXml.js.map +1 -0
  92. package/dist/parse/statusXml.d.ts +6 -0
  93. package/dist/parse/statusXml.d.ts.map +1 -0
  94. package/dist/parse/statusXml.js +64 -0
  95. package/dist/parse/statusXml.js.map +1 -0
  96. package/dist/parse/updateText.d.ts +6 -0
  97. package/dist/parse/updateText.d.ts.map +1 -0
  98. package/dist/parse/updateText.js +67 -0
  99. package/dist/parse/updateText.js.map +1 -0
  100. package/dist/runner.d.ts +41 -0
  101. package/dist/runner.d.ts.map +1 -0
  102. package/dist/runner.js +270 -0
  103. package/dist/runner.js.map +1 -0
  104. package/dist/tools/composite.d.ts +15 -0
  105. package/dist/tools/composite.d.ts.map +1 -0
  106. package/dist/tools/composite.js +238 -0
  107. package/dist/tools/composite.js.map +1 -0
  108. package/dist/tools/diagnose.d.ts +6 -0
  109. package/dist/tools/diagnose.d.ts.map +1 -0
  110. package/dist/tools/diagnose.js +131 -0
  111. package/dist/tools/diagnose.js.map +1 -0
  112. package/dist/tools/mutating.d.ts +80 -0
  113. package/dist/tools/mutating.d.ts.map +1 -0
  114. package/dist/tools/mutating.js +558 -0
  115. package/dist/tools/mutating.js.map +1 -0
  116. package/dist/tools/readonly.d.ts +52 -0
  117. package/dist/tools/readonly.d.ts.map +1 -0
  118. package/dist/tools/readonly.js +638 -0
  119. package/dist/tools/readonly.js.map +1 -0
  120. package/dist/tools/selfcheck.d.ts +5 -0
  121. package/dist/tools/selfcheck.d.ts.map +1 -0
  122. package/dist/tools/selfcheck.js +91 -0
  123. package/dist/tools/selfcheck.js.map +1 -0
  124. package/dist/types.d.ts +66 -0
  125. package/dist/types.d.ts.map +1 -0
  126. package/dist/types.js +2 -0
  127. package/dist/types.js.map +1 -0
  128. package/docs/README.md +11 -0
  129. package/docs/SPEC.md +964 -0
  130. package/docs/decisions/ADR-001-use-spec-v1-architecture.md +25 -0
  131. package/docs/decisions/ADR-002-use-capability-based-generic-svn-policy.md +31 -0
  132. package/docs/decisions/ADR-003-use-plug-and-play-global-registration.md +39 -0
  133. package/docs/decisions/ADR-004-borrow-diagnostics-not-external-mcp-surface.md +39 -0
  134. package/docs/svnrules.md +84 -0
  135. package/docs/toolrules.md +34 -0
  136. package/jest.config.cjs +14 -0
  137. package/package.json +51 -0
  138. package/scripts/clean.mjs +27 -0
  139. package/scripts/prepare-release.mjs +84 -0
  140. package/src/envelope.ts +182 -0
  141. package/src/eol.ts +137 -0
  142. package/src/guards.ts +362 -0
  143. package/src/index.ts +364 -0
  144. package/src/parse/commitText.ts +9 -0
  145. package/src/parse/diffText.ts +66 -0
  146. package/src/parse/infoXml.ts +51 -0
  147. package/src/parse/logXml.ts +64 -0
  148. package/src/parse/statusXml.ts +87 -0
  149. package/src/parse/updateText.ts +76 -0
  150. package/src/runner.ts +344 -0
  151. package/src/tools/composite.ts +289 -0
  152. package/src/tools/diagnose.ts +150 -0
  153. package/src/tools/mutating.ts +694 -0
  154. package/src/tools/readonly.ts +786 -0
  155. package/src/tools/selfcheck.ts +97 -0
  156. package/src/types.ts +76 -0
  157. package/tests/README.md +9 -0
  158. package/tests/diff-redaction.test.ts +146 -0
  159. package/tests/entrypoint.test.ts +49 -0
  160. package/tests/guards-eol.test.ts +170 -0
  161. package/tests/integration-svn.test.ts +709 -0
  162. package/tests/parsers.test.ts +119 -0
  163. package/tests/runner.test.ts +159 -0
  164. package/tests/selfcheck.test.ts +22 -0
  165. package/tsconfig.json +30 -0
@@ -0,0 +1,638 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { XMLParser } from "fast-xml-parser";
4
+ import { createEnvelope, envelopeFromRun, failEnvelope, noteFromRun, redactText } from "../envelope.js";
5
+ import { makeEolCheck } from "../eol.js";
6
+ import { assertExistingTargets, isInsideOrEqual, realPathOfNearestExisting, repoRelativePath, requireExplicitPaths, resolveCwd, resolveTargetsInsideWc, riskySignals, statusMap, validatePropertyName, wcRootFromInfo } from "../guards.js";
7
+ import { createDiffAccumulator } from "../parse/diffText.js";
8
+ import { parseInfoXml } from "../parse/infoXml.js";
9
+ import { parseLogXml } from "../parse/logXml.js";
10
+ import { parseStatusXml } from "../parse/statusXml.js";
11
+ import { runSvn, runSvnStreamingLines, runSvnVersion } from "../runner.js";
12
+ const propgetParser = new XMLParser({
13
+ ignoreAttributes: false,
14
+ attributeNamePrefix: "",
15
+ textNodeName: "text"
16
+ });
17
+ export async function getWcContext(cwdInput, pathHints = []) {
18
+ if (!cwdInput && !pathHints.some((hint) => path.isAbsolute(hint))) {
19
+ return {
20
+ ok: false,
21
+ envelope: failEnvelope("svn info --xml", process.cwd(), "cwd or absolute path required")
22
+ };
23
+ }
24
+ let lastRun = null;
25
+ for (const probe of wcProbeCandidates(cwdInput, pathHints)) {
26
+ const run = await runSvn(["info", "--xml", probe.target], probe.execCwd);
27
+ if (run.exitCode !== 0) {
28
+ lastRun = run;
29
+ continue;
30
+ }
31
+ const entries = parseInfoXml(run.stdout);
32
+ const rawWcRoot = wcRootFromInfo(entries);
33
+ if (!rawWcRoot) {
34
+ return {
35
+ ok: false,
36
+ envelope: failEnvelope(run.command, probe.execCwd, "path is not inside a working copy")
37
+ };
38
+ }
39
+ const wcRoot = realPathOfNearestExisting(rawWcRoot);
40
+ return {
41
+ ok: true,
42
+ cwd: probe.cwd ? realPathOfNearestExisting(probe.cwd) : wcRoot,
43
+ info: entries[0] ?? { url: null, repo_root: null, wc_root: wcRoot, revision: null },
44
+ wcRoot
45
+ };
46
+ }
47
+ if (lastRun) {
48
+ return {
49
+ ok: false,
50
+ envelope: envelopeFromRun({
51
+ run: lastRun,
52
+ ok: false,
53
+ note: noteFromRun(lastRun)
54
+ })
55
+ };
56
+ }
57
+ const cwd = resolveCwd(cwdInput);
58
+ return {
59
+ ok: false,
60
+ envelope: failEnvelope("svn info --xml", cwd, "path is not inside a working copy")
61
+ };
62
+ }
63
+ export async function svnStatus(input) {
64
+ const context = await getWcContext(input.cwd, input.paths ?? []);
65
+ if (!context.ok) {
66
+ return context.envelope;
67
+ }
68
+ const targets = input.paths && input.paths.length > 0 ? input.paths : [];
69
+ const resolved = resolveTargetsInsideWc(context.cwd, context.wcRoot, targets.length > 0 ? targets : [context.cwd]);
70
+ if (!resolved.ok) {
71
+ return failEnvelope("svn status --xml", context.cwd, resolved.note);
72
+ }
73
+ const args = ["status", "--xml", ...(input.includeIgnored ? ["--no-ignore"] : []), ...(targets.length > 0 ? resolved.paths : [])];
74
+ const run = await runSvn(args, context.cwd);
75
+ const parsed = run.exitCode === 0 ? parseStatusXml(run.stdout) : { changed_paths: [], conflicts: [] };
76
+ const filtered = input.hideNoise ? filterNoisePaths(parsed.changed_paths, context.cwd, context.wcRoot) : {
77
+ changed_paths: parsed.changed_paths,
78
+ filtered_paths: []
79
+ };
80
+ return {
81
+ ...envelopeFromRun({
82
+ run,
83
+ ok: run.exitCode === 0,
84
+ changed_paths: filtered.changed_paths,
85
+ conflicts: parsed.conflicts,
86
+ note: run.exitCode === 0 ? "" : noteFromRun(run)
87
+ }),
88
+ filtered_paths: filtered.filtered_paths
89
+ };
90
+ }
91
+ export async function svnInfo(input) {
92
+ const context = await getWcContext(input.cwd, input.paths ?? []);
93
+ if (!context.ok) {
94
+ return context.envelope;
95
+ }
96
+ const targets = input.paths && input.paths.length > 0 ? input.paths : [context.cwd];
97
+ const resolved = resolveTargetsInsideWc(context.cwd, context.wcRoot, targets);
98
+ if (!resolved.ok) {
99
+ return failEnvelope("svn info --xml", context.cwd, resolved.note);
100
+ }
101
+ const run = await runSvn(["info", "--xml", ...resolved.paths], context.cwd);
102
+ const entries = run.exitCode === 0 ? parseInfoXml(run.stdout) : [];
103
+ const versionNotes = [];
104
+ let mixedRevision = false;
105
+ let modified = false;
106
+ let switched = false;
107
+ let partial = false;
108
+ let revisionRange = null;
109
+ let svnVersion = "";
110
+ const version = await runSvnVersion(context.wcRoot, context.cwd);
111
+ if (version.exitCode === 0) {
112
+ const value = version.stdout.trim();
113
+ svnVersion = value;
114
+ const parsed = parseSvnVersion(value);
115
+ mixedRevision = mixedRevision || parsed.mixed;
116
+ modified = modified || parsed.modified;
117
+ switched = switched || parsed.switched;
118
+ partial = partial || parsed.partial;
119
+ revisionRange = mergeRevisionRange(revisionRange, parsed.range);
120
+ }
121
+ if (mixedRevision) {
122
+ versionNotes.push("mixed revision working copy");
123
+ }
124
+ if (modified) {
125
+ versionNotes.push("local modifications present");
126
+ }
127
+ if (switched) {
128
+ versionNotes.push("switched path present");
129
+ }
130
+ if (partial) {
131
+ versionNotes.push("partial working copy");
132
+ }
133
+ const first = entries[0] ?? context.info;
134
+ const remoteHeadRevision = await remoteHeadForTargets(context.cwd, resolved.paths);
135
+ if (remoteHeadRevision !== null && revisionRange && remoteHeadRevision > revisionRange.max) {
136
+ versionNotes.push(`remote HEAD newer than working copy (${remoteHeadRevision} > ${revisionRange.max})`);
137
+ }
138
+ return {
139
+ ...envelopeFromRun({
140
+ run,
141
+ ok: run.exitCode === 0,
142
+ revision: first.revision,
143
+ note: run.exitCode === 0 ? versionNotes.join("; ") : noteFromRun(run)
144
+ }),
145
+ url: first.url,
146
+ repo_root: first.repo_root,
147
+ wc_root: first.wc_root,
148
+ entries,
149
+ mixed_revision: mixedRevision,
150
+ svnversion: svnVersion,
151
+ revision_range: revisionRange,
152
+ local_modifications: modified,
153
+ switched,
154
+ partial,
155
+ remote_head_revision: remoteHeadRevision,
156
+ stale_base: remoteHeadRevision !== null && revisionRange !== null ? remoteHeadRevision > revisionRange.max : false
157
+ };
158
+ }
159
+ export async function svnDiff(input) {
160
+ const explicitError = requireExplicitPaths(input.paths);
161
+ const cwd = resolveCwd(input.cwd);
162
+ if (explicitError) {
163
+ return {
164
+ ...failEnvelope("svn diff", cwd, explicitError),
165
+ per_file: [],
166
+ diff_excerpt: "",
167
+ truncated: false
168
+ };
169
+ }
170
+ const context = await getWcContext(input.cwd, input.paths);
171
+ if (!context.ok) {
172
+ return {
173
+ ...context.envelope,
174
+ per_file: [],
175
+ diff_excerpt: "",
176
+ truncated: context.envelope.truncated
177
+ };
178
+ }
179
+ const resolved = resolveTargetsInsideWc(context.cwd, context.wcRoot, input.paths);
180
+ if (!resolved.ok) {
181
+ return {
182
+ ...failEnvelope("svn diff", context.cwd, resolved.note),
183
+ per_file: [],
184
+ diff_excerpt: "",
185
+ truncated: false
186
+ };
187
+ }
188
+ const lineLimit = input.lineLimit ?? defaultDiffLineLimit();
189
+ const ignoreEol = input.ignoreEol ?? true;
190
+ const args = ignoreEol
191
+ ? ["diff", "--internal-diff", "-x", "--ignore-eol-style", ...resolved.paths]
192
+ : ["diff", "--internal-diff", ...resolved.paths];
193
+ const diffAccumulator = createDiffAccumulator(lineLimit);
194
+ const run = await runSvnStreamingLines(args, context.cwd, diffAccumulator.pushLine, { stdoutLineLimit: lineLimit });
195
+ const rawDiff = run.exitCode === 0 ? diffAccumulator.summary() : { per_file: [], diff_excerpt: "", truncated: false };
196
+ const diff = { ...rawDiff, diff_excerpt: redactText(rawDiff.diff_excerpt) };
197
+ const eolDiagnostic = run.exitCode !== 0 && isInconsistentEolRun(run)
198
+ ? await eolCheck({ cwd: context.cwd, paths: resolved.paths })
199
+ : null;
200
+ return {
201
+ ...envelopeFromRun({
202
+ run,
203
+ ok: run.exitCode === 0,
204
+ note: run.exitCode === 0 ? "" : noteFromRun(run),
205
+ truncated: diff.truncated
206
+ }),
207
+ ...diff,
208
+ ignore_eol: ignoreEol,
209
+ ...(eolDiagnostic
210
+ ? {
211
+ recovery_tool: "eol_fix_verified",
212
+ eol_files: eolDiagnostic.files ?? []
213
+ }
214
+ : {})
215
+ };
216
+ }
217
+ export async function svnLog(input) {
218
+ const context = await getWcContext(input.cwd, input.paths ?? []);
219
+ if (!context.ok) {
220
+ return context.envelope;
221
+ }
222
+ const targets = input.paths && input.paths.length > 0 ? input.paths : [context.cwd];
223
+ const resolved = resolveTargetsInsideWc(context.cwd, context.wcRoot, targets);
224
+ if (!resolved.ok) {
225
+ return failEnvelope("svn log", context.cwd, resolved.note);
226
+ }
227
+ const logTargets = await repositoryLogTargets(context.cwd, resolved.paths);
228
+ const args = ["log", "--xml", "-l", String(input.limit ?? 10)];
229
+ if (input.verbose ?? true) {
230
+ args.push("-v");
231
+ }
232
+ args.push(...logTargets.targets);
233
+ const run = await runSvn(args, context.cwd);
234
+ const entries = run.exitCode === 0 ? parseLogXml(run.stdout) : [];
235
+ return {
236
+ ...envelopeFromRun({
237
+ run,
238
+ ok: run.exitCode === 0,
239
+ revision: entries[0]?.rev ?? null,
240
+ note: run.exitCode === 0 ? logTargets.note : noteFromRun(run)
241
+ }),
242
+ entries,
243
+ target_mode: logTargets.mode
244
+ };
245
+ }
246
+ export async function eolCheck(input) {
247
+ const explicitError = requireExplicitPaths(input.paths);
248
+ const cwd = resolveCwd(input.cwd);
249
+ if (explicitError) {
250
+ return {
251
+ ...failEnvelope("eol_check", cwd, explicitError),
252
+ files: []
253
+ };
254
+ }
255
+ const context = await getWcContext(input.cwd, input.paths);
256
+ if (!context.ok) {
257
+ return {
258
+ ...context.envelope,
259
+ files: []
260
+ };
261
+ }
262
+ const resolved = resolveTargetsInsideWc(context.cwd, context.wcRoot, input.paths);
263
+ if (!resolved.ok) {
264
+ return {
265
+ ...failEnvelope("eol_check", context.cwd, resolved.note),
266
+ files: []
267
+ };
268
+ }
269
+ const existsError = assertExistingTargets(resolved.paths);
270
+ if (existsError) {
271
+ return {
272
+ ...failEnvelope("eol_check", context.cwd, existsError),
273
+ files: []
274
+ };
275
+ }
276
+ const files = [];
277
+ const eolStyles = await eolStylesForTargets(context.cwd, resolved.paths);
278
+ for (const target of resolved.paths) {
279
+ files.push(await makeEolCheck(target, eolStyles.get(path.resolve(target).toLowerCase()) ?? null));
280
+ }
281
+ return {
282
+ ...createEnvelope({
283
+ ok: true,
284
+ command: "eol_check",
285
+ cwd: context.cwd,
286
+ note: files.some((file) => file.mismatch) ? "EOL mismatch detected" : ""
287
+ }),
288
+ files
289
+ };
290
+ }
291
+ export async function svnPropget(input) {
292
+ const explicitError = requireExplicitPaths(input.paths);
293
+ const cwd = resolveCwd(input.cwd);
294
+ if (explicitError) {
295
+ return {
296
+ ...failEnvelope("svn propget", cwd, explicitError),
297
+ properties: [],
298
+ missing_paths: []
299
+ };
300
+ }
301
+ const propertyError = validatePropertyName(input.name);
302
+ if (propertyError) {
303
+ return {
304
+ ...failEnvelope("svn propget", cwd, propertyError),
305
+ properties: [],
306
+ missing_paths: []
307
+ };
308
+ }
309
+ const context = await getWcContext(input.cwd, input.paths);
310
+ if (!context.ok) {
311
+ return {
312
+ ...context.envelope,
313
+ properties: [],
314
+ missing_paths: []
315
+ };
316
+ }
317
+ const resolved = resolveTargetsInsideWc(context.cwd, context.wcRoot, input.paths);
318
+ if (!resolved.ok) {
319
+ return {
320
+ ...failEnvelope("svn propget", context.cwd, resolved.note),
321
+ properties: [],
322
+ missing_paths: []
323
+ };
324
+ }
325
+ const existsError = assertExistingTargets(resolved.paths);
326
+ if (existsError) {
327
+ return {
328
+ ...failEnvelope("svn propget", context.cwd, existsError),
329
+ properties: [],
330
+ missing_paths: []
331
+ };
332
+ }
333
+ const run = await runSvn(["propget", input.name, "--xml", ...resolved.paths], context.cwd);
334
+ const properties = parsePropgetProperties(run.stdout, context.cwd, context.wcRoot);
335
+ const missingPaths = propertyMissingPaths(properties, resolved.paths, context.wcRoot);
336
+ if (run.exitCode !== 0 && isMissingPropertyRun(run)) {
337
+ return {
338
+ ...createEnvelope({
339
+ ok: true,
340
+ command: run.command,
341
+ cwd: context.cwd,
342
+ stdout: run.stdout,
343
+ stderr: run.stderr,
344
+ note: properties.length > 0 ? "property not set on some paths" : "property not set"
345
+ }),
346
+ properties,
347
+ missing_paths: missingPaths
348
+ };
349
+ }
350
+ return {
351
+ ...envelopeFromRun({
352
+ run,
353
+ ok: run.exitCode === 0,
354
+ note: run.exitCode === 0 ? "" : noteFromRun(run)
355
+ }),
356
+ properties,
357
+ missing_paths: missingPaths
358
+ };
359
+ }
360
+ export async function scopedStatusMap(cwd, wcRoot, paths) {
361
+ const status = await svnStatus({ cwd, paths });
362
+ return {
363
+ envelope: status,
364
+ map: statusMap(status.changed_paths, cwd)
365
+ };
366
+ }
367
+ export function dryRiskSignals(absPaths, wcRoot, statusByPath) {
368
+ return riskySignals(absPaths, wcRoot, statusByPath);
369
+ }
370
+ export function defaultDiffLineLimit() {
371
+ const parsed = Number.parseInt(process.env.SVN_AGENT_MAX_DIFF_LINES ?? "", 10);
372
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : 800;
373
+ }
374
+ export function normalizeStatusLookup(statuses, target) {
375
+ return statuses.get(path.resolve(target).toLowerCase());
376
+ }
377
+ function filterNoisePaths(changedPaths, cwd, wcRoot) {
378
+ const kept = [];
379
+ const filtered = [];
380
+ for (const entry of changedPaths) {
381
+ const absPath = path.resolve(cwd, entry.path);
382
+ const relative = repoRelativePath(absPath, wcRoot);
383
+ if ((entry.status === "?" || entry.status === "I") && isNoisePath(relative)) {
384
+ filtered.push(relative);
385
+ continue;
386
+ }
387
+ kept.push(entry);
388
+ }
389
+ return { changed_paths: kept, filtered_paths: filtered };
390
+ }
391
+ function isNoisePath(relativePath) {
392
+ const normalized = relativePath.replace(/\\/g, "/").toLowerCase();
393
+ return [
394
+ "node_modules",
395
+ "dist",
396
+ "current",
397
+ ".cache",
398
+ "coverage"
399
+ ].some((value) => normalized === value || normalized.startsWith(`${value}/`));
400
+ }
401
+ function parseSvnVersion(value) {
402
+ const trimmed = value.trim();
403
+ const match = trimmed.match(/^(\d+)(?::(\d+))?/);
404
+ const min = match?.[1] ? Number.parseInt(match[1], 10) : null;
405
+ const max = match?.[2] ? Number.parseInt(match[2], 10) : min;
406
+ const flagString = trimmed.replace(/^\d+(?::\d+)?/, "");
407
+ return {
408
+ range: min !== null && max !== null ? { min, max } : null,
409
+ mixed: trimmed.includes(":"),
410
+ modified: flagString.includes("M"),
411
+ switched: flagString.includes("S"),
412
+ partial: flagString.includes("P")
413
+ };
414
+ }
415
+ function mergeRevisionRange(left, right) {
416
+ if (!left) {
417
+ return right;
418
+ }
419
+ if (!right) {
420
+ return left;
421
+ }
422
+ return {
423
+ min: Math.min(left.min, right.min),
424
+ max: Math.max(left.max, right.max)
425
+ };
426
+ }
427
+ async function remoteHeadForTargets(cwd, targets) {
428
+ let head = null;
429
+ const run = await runSvn(["info", "--xml", "-r", "HEAD", ...targets], cwd);
430
+ if (run.exitCode !== 0) {
431
+ return null;
432
+ }
433
+ for (const entry of parseInfoXml(run.stdout)) {
434
+ if (entry.revision === null) {
435
+ continue;
436
+ }
437
+ head = head === null ? entry.revision : Math.max(head, entry.revision);
438
+ }
439
+ return head;
440
+ }
441
+ async function eolStylesForTargets(cwd, targets) {
442
+ const batched = await runSvn(["propget", "svn:eol-style", "--xml", ...targets], cwd);
443
+ if (batched.exitCode === 0) {
444
+ return parsePropgetEolStyles(batched.stdout, cwd);
445
+ }
446
+ const styles = new Map();
447
+ for (const target of targets) {
448
+ const prop = await runSvn(["propget", "svn:eol-style", target], cwd);
449
+ if (prop.exitCode === 0 && prop.stdout.trim()) {
450
+ styles.set(path.resolve(target).toLowerCase(), prop.stdout.trim());
451
+ }
452
+ }
453
+ return styles;
454
+ }
455
+ function parsePropgetEolStyles(xml, cwd) {
456
+ const styles = new Map();
457
+ if (!xml.trim()) {
458
+ return styles;
459
+ }
460
+ const parsed = propgetParser.parse(xml);
461
+ for (const target of asArray(parsed.properties?.target)) {
462
+ const targetObj = target;
463
+ const targetPath = targetObj.path ? path.resolve(cwd, targetObj.path).toLowerCase() : null;
464
+ if (!targetPath) {
465
+ continue;
466
+ }
467
+ for (const property of asArray(targetObj.property)) {
468
+ const propertyObj = property;
469
+ if (propertyObj.name === "svn:eol-style" && propertyObj.text) {
470
+ styles.set(targetPath, propertyObj.text.trim());
471
+ }
472
+ }
473
+ }
474
+ return styles;
475
+ }
476
+ function parsePropgetProperties(xml, cwd, wcRoot) {
477
+ const properties = [];
478
+ if (!xml.trim()) {
479
+ return properties;
480
+ }
481
+ const parsed = propgetParser.parse(xml);
482
+ for (const target of asArray(parsed.properties?.target)) {
483
+ const targetObj = target;
484
+ if (!targetObj.path) {
485
+ continue;
486
+ }
487
+ const targetPath = displayPropertyPath(targetObj.path, cwd, wcRoot);
488
+ for (const property of asArray(targetObj.property)) {
489
+ const propertyObj = property;
490
+ if (propertyObj.name) {
491
+ properties.push({
492
+ path: targetPath,
493
+ name: propertyObj.name,
494
+ value: propertyObj.text === undefined ? "" : String(propertyObj.text)
495
+ });
496
+ }
497
+ }
498
+ }
499
+ return properties;
500
+ }
501
+ function displayPropertyPath(value, cwd, wcRoot) {
502
+ const absolute = path.isAbsolute(value) ? path.resolve(value) : path.resolve(cwd, value);
503
+ return isInsideOrEqual(absolute, wcRoot)
504
+ ? repoRelativePath(absolute, wcRoot)
505
+ : value;
506
+ }
507
+ function isMissingPropertyRun(run) {
508
+ return /W200017|Property '.+' not found/i.test(`${run.stderr}\n${run.stdout}`);
509
+ }
510
+ function propertyMissingPaths(properties, resolvedPaths, wcRoot) {
511
+ const pathsWithProperty = new Set(properties.map((property) => property.path.toLowerCase()));
512
+ return resolvedPaths
513
+ .map((target) => repoRelativePath(target, wcRoot))
514
+ .filter((target) => !pathsWithProperty.has(target.toLowerCase()));
515
+ }
516
+ function asArray(value) {
517
+ if (value === undefined) {
518
+ return [];
519
+ }
520
+ return Array.isArray(value) ? value : [value];
521
+ }
522
+ function isInconsistentEolRun(run) {
523
+ return /E135000|inconsistent newlines|inconsistent line ending style/i.test(`${run.stderr}\n${run.stdout}`);
524
+ }
525
+ async function repositoryLogTargets(cwd, paths) {
526
+ const info = await runSvn(["info", "--xml", ...paths], cwd);
527
+ if (info.exitCode !== 0) {
528
+ return { targets: paths, mode: "working-copy-path", note: "" };
529
+ }
530
+ const entries = parseInfoXml(info.stdout);
531
+ const urls = entries.map((entry) => entry.url).filter((url) => Boolean(url));
532
+ if (urls.length !== paths.length) {
533
+ return { targets: paths, mode: "working-copy-path", note: "" };
534
+ }
535
+ return {
536
+ targets: urls,
537
+ mode: "repository-url",
538
+ note: "queried repository URL at HEAD to avoid working-copy peg revision log gaps"
539
+ };
540
+ }
541
+ function wcProbeCandidates(cwdInput, pathHints) {
542
+ if (cwdInput) {
543
+ const cwd = resolveCwd(cwdInput);
544
+ return [{ target: cwd, execCwd: executableCwdForTarget(cwd), cwd }];
545
+ }
546
+ const probes = [];
547
+ for (const hint of pathHints) {
548
+ if (!path.isAbsolute(hint)) {
549
+ continue;
550
+ }
551
+ for (const target of probeTargetsForAbsolutePath(hint)) {
552
+ probes.push({ target, execCwd: executableCwdForTarget(target), cwd: null });
553
+ }
554
+ }
555
+ // No launch-directory fallback: in global plug-and-play registration the MCP
556
+ // process cwd is arbitrary and must never silently become the working copy.
557
+ return uniqueProbes(probes);
558
+ }
559
+ function probeTargetsForAbsolutePath(value) {
560
+ const targets = [];
561
+ let current = path.resolve(value);
562
+ const startDirectory = existingDirectoryForPath(current);
563
+ const wcMarkerRoot = startDirectory ? nearestSvnMarkerAncestor(startDirectory) : null;
564
+ if (wcMarkerRoot) {
565
+ return [realPathOfNearestExisting(wcMarkerRoot)];
566
+ }
567
+ if (fs.existsSync(current)) {
568
+ targets.push(current);
569
+ if (!fs.statSync(current).isDirectory()) {
570
+ current = path.dirname(current);
571
+ }
572
+ }
573
+ else {
574
+ current = path.dirname(current);
575
+ }
576
+ while (true) {
577
+ if (fs.existsSync(current)) {
578
+ targets.push(current);
579
+ }
580
+ const parent = path.dirname(current);
581
+ if (parent === current) {
582
+ break;
583
+ }
584
+ current = parent;
585
+ }
586
+ return Array.from(new Set(targets.map((target) => realPathOfNearestExisting(target))));
587
+ }
588
+ function existingDirectoryForPath(value) {
589
+ let current = path.resolve(value);
590
+ if (fs.existsSync(current) && !fs.statSync(current).isDirectory()) {
591
+ current = path.dirname(current);
592
+ }
593
+ while (!fs.existsSync(current)) {
594
+ const parent = path.dirname(current);
595
+ if (parent === current) {
596
+ return null;
597
+ }
598
+ current = parent;
599
+ }
600
+ return fs.statSync(current).isDirectory() ? realPathOfNearestExisting(current) : realPathOfNearestExisting(path.dirname(current));
601
+ }
602
+ function nearestSvnMarkerAncestor(startDirectory) {
603
+ let current = path.resolve(startDirectory);
604
+ while (true) {
605
+ if (fs.existsSync(path.join(current, ".svn"))) {
606
+ return current;
607
+ }
608
+ const parent = path.dirname(current);
609
+ if (parent === current) {
610
+ return null;
611
+ }
612
+ current = parent;
613
+ }
614
+ }
615
+ function executableCwdForTarget(target) {
616
+ let current = path.resolve(target);
617
+ while (!fs.existsSync(current)) {
618
+ const parent = path.dirname(current);
619
+ if (parent === current) {
620
+ return process.cwd();
621
+ }
622
+ current = parent;
623
+ }
624
+ return fs.statSync(current).isDirectory() ? current : path.dirname(current);
625
+ }
626
+ function uniqueProbes(probes) {
627
+ const seen = new Set();
628
+ const unique = [];
629
+ for (const probe of probes) {
630
+ const key = path.resolve(probe.target).toLowerCase();
631
+ if (!seen.has(key)) {
632
+ seen.add(key);
633
+ unique.push(probe);
634
+ }
635
+ }
636
+ return unique;
637
+ }
638
+ //# sourceMappingURL=readonly.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readonly.js","sourceRoot":"","sources":["../../src/tools/readonly.ts"],"names":[],"mappings":"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"}