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,558 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { createEnvelope, envelopeFromRun, failEnvelope, noteFromRun } from "../envelope.js";
5
+ import { assertExistingTargets, messageFormatWarning, neverCommitHit, neverCommitNote, readonlyMode, repoRelativePath, requireExplicitPaths, resolveCwd, resolveTargetsInsideWc, riskySignals, validatePropertyName } from "../guards.js";
6
+ import { parseCommittedRevision } from "../parse/commitText.js";
7
+ import { parseUpdateText } from "../parse/updateText.js";
8
+ import { runSvn, runSvnVersion } from "../runner.js";
9
+ import { getWcContext, scopedStatusMap, svnDiff, svnStatus } from "./readonly.js";
10
+ const DESCENDANT_SCAN_LIMIT = 20000;
11
+ const DESCENDANT_SCAN_DEPTH_LIMIT = 256;
12
+ export async function svnAdd(input) {
13
+ const guard = await mutatingPathGuard("svn add", input.cwd, input.paths, { requireExisting: true });
14
+ if (!guard.ok) {
15
+ return guard.envelope;
16
+ }
17
+ const targetStats = new Map();
18
+ for (const target of guard.paths) {
19
+ const hit = neverCommitHit(target, guard.wcRoot);
20
+ if (hit) {
21
+ return failEnvelope("svn add", guard.cwd, neverCommitNote(hit, target, guard.wcRoot));
22
+ }
23
+ const stat = statTargetForMutation("svn add", guard.cwd, target);
24
+ if (!stat.ok) {
25
+ return stat.envelope;
26
+ }
27
+ targetStats.set(target, stat.stat);
28
+ if (stat.stat.isDirectory()) {
29
+ if (!input.allowRecursive) {
30
+ return failEnvelope("svn add", guard.cwd, `directory add requires allowRecursive:true: ${target}`);
31
+ }
32
+ const descendantHit = await firstNeverCommitDescendant(target, guard.wcRoot);
33
+ if (descendantHit?.error) {
34
+ return failEnvelope("svn add", guard.cwd, descendantHit.error);
35
+ }
36
+ if (descendantHit?.hit) {
37
+ return failEnvelope("svn add", guard.cwd, descendantHit.hit.glob.startsWith("policy-error:")
38
+ ? descendantHit.hit.glob
39
+ : `never-commit path matches ${descendantHit.hit.glob}: ${descendantHit.hit.path}`);
40
+ }
41
+ }
42
+ }
43
+ const hasDirectory = [...targetStats.values()].some((stat) => stat.isDirectory());
44
+ const args = ["add", "--parents", "--depth", hasDirectory ? "infinity" : "empty", ...guard.paths];
45
+ const run = await runSvn(args, guard.cwd);
46
+ return envelopeFromRun({ run, ok: run.exitCode === 0, note: run.exitCode === 0 ? "" : noteFromRun(run) });
47
+ }
48
+ export async function svnCommit(input) {
49
+ const guard = await mutatingPathGuard("svn commit", input.cwd, input.paths, { requireExisting: false });
50
+ if (!guard.ok) {
51
+ return guard.envelope;
52
+ }
53
+ for (const target of guard.paths) {
54
+ const hit = neverCommitHit(target, guard.wcRoot);
55
+ if (hit) {
56
+ return failEnvelope("svn commit", guard.cwd, neverCommitNote(hit, target, guard.wcRoot));
57
+ }
58
+ }
59
+ const status = await scopedStatusMap(guard.cwd, guard.wcRoot, statusPathsForCommit(guard.paths, guard.wcRoot));
60
+ if (!status.envelope.ok) {
61
+ return status.envelope;
62
+ }
63
+ for (const target of guard.paths) {
64
+ const code = status.map.get(target.toLowerCase());
65
+ if (!code || code === "?" || code === "!" || code === "I") {
66
+ return failEnvelope("svn commit", guard.cwd, `target not changed or not scheduled: ${repoRelativePath(target, guard.wcRoot)}`);
67
+ }
68
+ }
69
+ const riskSignals = riskySignals(guard.paths, guard.wcRoot, status.map);
70
+ if (riskSignals.length > 0 && !input.riskAck) {
71
+ return {
72
+ ...failEnvelope("svn commit", guard.cwd, `riskAck required: ${riskSignals.join(", ")}`),
73
+ risk_signals: riskSignals
74
+ };
75
+ }
76
+ const commitPaths = commitPathsWithAddedParents(guard.paths, guard.wcRoot, status.map);
77
+ const warnings = [];
78
+ const messageWarning = messageFormatWarning(input.message);
79
+ if (messageWarning) {
80
+ warnings.push(messageWarning);
81
+ }
82
+ const version = await runSvnVersion(guard.cwd, guard.cwd);
83
+ if (version.exitCode === 0 && version.stdout.includes(":")) {
84
+ warnings.push("mixed revision working copy");
85
+ }
86
+ const messageTemp = writeMessageTemp("svn-agent-commit-", input.message);
87
+ try {
88
+ const run = await runSvn(["commit", "-F", messageTemp.file, "--depth", "empty", ...commitPaths], guard.cwd);
89
+ const revision = parseCommittedRevision(`${run.stdout}\n${run.stderr}`);
90
+ const postStatus = run.exitCode === 0 ? await svnStatus({ cwd: guard.cwd, paths: input.paths }) : null;
91
+ const postStatusClean = postStatus ? postStatus.changed_paths.length === 0 : false;
92
+ const noteParts = [
93
+ run.exitCode === 0 ? "" : noteFromRun(run),
94
+ ...warnings,
95
+ run.exitCode === 0 && !postStatusClean ? "post-status has residue" : ""
96
+ ].filter(Boolean);
97
+ return {
98
+ ...envelopeFromRun({
99
+ run,
100
+ ok: run.exitCode === 0,
101
+ revision,
102
+ changed_paths: postStatus?.changed_paths ?? [],
103
+ conflicts: postStatus?.conflicts ?? [],
104
+ note: noteParts.join("; ")
105
+ }),
106
+ revision,
107
+ post_status_clean: postStatusClean,
108
+ risk_signals: riskSignals
109
+ };
110
+ }
111
+ finally {
112
+ fs.rmSync(messageTemp.dir, { recursive: true, force: true });
113
+ }
114
+ }
115
+ export async function svnMove(input) {
116
+ return svnMoveOrCopy("svn move", "move", input);
117
+ }
118
+ export async function svnRename(input) {
119
+ return svnMoveOrCopy("svn rename", "move", input);
120
+ }
121
+ export async function svnCopy(input) {
122
+ return svnMoveOrCopy("svn copy", "copy", input);
123
+ }
124
+ export async function svnUpdate(input) {
125
+ const cwd = resolveCwd(input.cwd);
126
+ if (readonlyMode()) {
127
+ return failEnvelope("svn update", cwd, "READONLY instance");
128
+ }
129
+ if ((!input.paths || input.paths.length === 0) && !input.updateAll) {
130
+ return failEnvelope("svn update", cwd, "explicit paths required or updateAll:true");
131
+ }
132
+ const context = await getWcContext(input.cwd, input.paths ?? []);
133
+ if (!context.ok) {
134
+ return context.envelope;
135
+ }
136
+ let targets = [];
137
+ if (input.paths && input.paths.length > 0) {
138
+ const resolved = resolveTargetsInsideWc(context.cwd, context.wcRoot, input.paths);
139
+ if (!resolved.ok) {
140
+ return failEnvelope("svn update", context.cwd, resolved.note);
141
+ }
142
+ targets = resolved.paths;
143
+ }
144
+ const run = await runSvn(["update", "--accept", "postpone", ...targets], context.cwd);
145
+ const parsed = parseUpdateText(`${run.stdout}\n${run.stderr}`);
146
+ return envelopeFromRun({
147
+ run,
148
+ ok: run.exitCode === 0,
149
+ changed_paths: parsed.changed_paths,
150
+ conflicts: parsed.conflicts,
151
+ note: parsed.conflicts.length > 0 ? "conflicts present" : run.exitCode === 0 ? "" : noteFromRun(run)
152
+ });
153
+ }
154
+ export async function svnRevert(input) {
155
+ const dryRun = input.dryRun ?? true;
156
+ if (!dryRun && readonlyMode()) {
157
+ return failEnvelope("svn revert", resolveCwd(input.cwd), "READONLY instance");
158
+ }
159
+ const guard = await mutatingPathGuard("svn revert", input.cwd, input.paths, { requireExisting: false, allowReadonlyForDryRun: dryRun });
160
+ if (!guard.ok) {
161
+ return guard.envelope;
162
+ }
163
+ if (guard.paths.some((target) => path.resolve(target).toLowerCase() === guard.wcRoot.toLowerCase())) {
164
+ return failEnvelope("svn revert", guard.cwd, "refusing to revert working-copy root");
165
+ }
166
+ const directoryTargets = [];
167
+ for (const target of guard.paths) {
168
+ if (!fs.existsSync(target)) {
169
+ continue;
170
+ }
171
+ const stat = statTargetForMutation("svn revert", guard.cwd, target);
172
+ if (!stat.ok) {
173
+ return stat.envelope;
174
+ }
175
+ if (stat.stat.isDirectory()) {
176
+ directoryTargets.push(target);
177
+ }
178
+ }
179
+ if (directoryTargets.length > 0 && !input.allowRecursive) {
180
+ return failEnvelope("svn revert", guard.cwd, "directory revert requires allowRecursive:true");
181
+ }
182
+ if (dryRun) {
183
+ const status = await svnStatus({ cwd: guard.cwd, paths: input.paths });
184
+ const diff = await svnDiff({ cwd: guard.cwd, paths: input.paths, ignoreEol: true });
185
+ return {
186
+ ...createEnvelope({
187
+ ok: true,
188
+ command: "svn revert --dry-run",
189
+ cwd: guard.cwd,
190
+ changed_paths: status.changed_paths,
191
+ conflicts: status.conflicts,
192
+ note: "dry run; no files changed",
193
+ truncated: diff.truncated
194
+ }),
195
+ per_file: diff.per_file,
196
+ diff_excerpt: diff.diff_excerpt
197
+ };
198
+ }
199
+ const fileTargets = guard.paths.filter((target) => !directoryTargets.includes(target));
200
+ const runs = [];
201
+ if (fileTargets.length > 0) {
202
+ runs.push(await runSvn(["revert", ...fileTargets], guard.cwd));
203
+ }
204
+ if (directoryTargets.length > 0) {
205
+ runs.push(await runSvn(["revert", "--depth", "infinity", ...directoryTargets], guard.cwd));
206
+ }
207
+ const failed = runs.find((run) => run.exitCode !== 0);
208
+ const combined = combineRuns(runs, guard.cwd);
209
+ return envelopeFromRun({
210
+ run: failed ?? combined,
211
+ ok: failed === undefined,
212
+ note: failed ? noteFromRun(failed) : ""
213
+ });
214
+ }
215
+ export async function svnResolved(input) {
216
+ const guard = await mutatingPathGuard("svn resolve", input.cwd, [input.path], { requireExisting: true });
217
+ if (!guard.ok) {
218
+ return guard.envelope;
219
+ }
220
+ const run = await runSvn(["resolve", "--accept", input.accept, guard.paths[0]], guard.cwd);
221
+ return envelopeFromRun({ run, ok: run.exitCode === 0, note: run.exitCode === 0 ? "" : noteFromRun(run) });
222
+ }
223
+ export async function svnCleanup(input) {
224
+ const cwd = resolveCwd(input.cwd);
225
+ if (readonlyMode()) {
226
+ return failEnvelope("svn cleanup", cwd, "READONLY instance");
227
+ }
228
+ const context = await getWcContext(input.cwd, input.path ? [input.path] : []);
229
+ if (!context.ok) {
230
+ return context.envelope;
231
+ }
232
+ const targets = input.path ? [input.path] : [];
233
+ const resolved = targets.length > 0 ? resolveTargetsInsideWc(context.cwd, context.wcRoot, targets) : { ok: true, paths: [] };
234
+ if (!resolved.ok) {
235
+ return failEnvelope("svn cleanup", context.cwd, resolved.note);
236
+ }
237
+ const run = await runSvn(["cleanup", ...resolved.paths], context.cwd);
238
+ return envelopeFromRun({ run, ok: run.exitCode === 0, note: run.exitCode === 0 ? "" : noteFromRun(run) });
239
+ }
240
+ export async function svnPropsetEolStyle(input) {
241
+ const guard = await mutatingPathGuard("svn propset", input.cwd, input.paths, { requireExisting: true });
242
+ if (!guard.ok) {
243
+ return guard.envelope;
244
+ }
245
+ const style = input.style ?? "native";
246
+ for (const target of guard.paths) {
247
+ const prop = await runSvn(["propget", "svn:eol-style", target], guard.cwd);
248
+ if (prop.exitCode === 0 && prop.stdout.trim() === style) {
249
+ return failEnvelope("svn propset", guard.cwd, `svn:eol-style already ${style}: ${repoRelativePath(target, guard.wcRoot)}`);
250
+ }
251
+ }
252
+ const run = await runSvn(["propset", "svn:eol-style", style, ...guard.paths], guard.cwd);
253
+ return envelopeFromRun({ run, ok: run.exitCode === 0, note: run.exitCode === 0 ? "" : noteFromRun(run) });
254
+ }
255
+ export async function svnPropset(input) {
256
+ const guard = await mutatingPathGuard("svn propset", input.cwd, input.paths, { requireExisting: true });
257
+ if (!guard.ok) {
258
+ return guard.envelope;
259
+ }
260
+ const propertyError = validatePropertyName(input.name);
261
+ if (propertyError) {
262
+ return failEnvelope("svn propset", guard.cwd, propertyError);
263
+ }
264
+ if (input.value.includes("\0")) {
265
+ return failEnvelope("svn propset", guard.cwd, "invalid property value");
266
+ }
267
+ if (input.value.length > 16000) {
268
+ return failEnvelope("svn propset", guard.cwd, "property value too large");
269
+ }
270
+ for (const target of guard.paths) {
271
+ const hit = neverCommitHit(target, guard.wcRoot);
272
+ if (hit) {
273
+ return failEnvelope("svn propset", guard.cwd, neverCommitNote(hit, target, guard.wcRoot));
274
+ }
275
+ }
276
+ const riskSignals = propertyRiskSignals(input.name);
277
+ if (riskSignals.length > 0 && !input.riskAck) {
278
+ return {
279
+ ...failEnvelope("svn propset", guard.cwd, `riskAck required: ${riskSignals.join(", ")}`),
280
+ risk_signals: riskSignals
281
+ };
282
+ }
283
+ const run = await runSvn(["propset", input.name, input.value, ...guard.paths], guard.cwd);
284
+ const status = run.exitCode === 0 ? await svnStatus({ cwd: guard.cwd, paths: input.paths }) : null;
285
+ return {
286
+ ...envelopeFromRun({
287
+ run,
288
+ ok: run.exitCode === 0,
289
+ changed_paths: status?.changed_paths ?? [],
290
+ conflicts: status?.conflicts ?? [],
291
+ note: run.exitCode === 0 ? "" : noteFromRun(run)
292
+ }),
293
+ risk_signals: riskSignals
294
+ };
295
+ }
296
+ export async function svnExport(input) {
297
+ const cwd = resolveCwd(input.cwd);
298
+ if (readonlyMode()) {
299
+ return failEnvelope("svn export", cwd, "READONLY instance");
300
+ }
301
+ const args = ["export"];
302
+ if (input.revision) {
303
+ if (!isValidRevision(input.revision)) {
304
+ return failEnvelope("svn export", cwd, `invalid revision: ${input.revision}`);
305
+ }
306
+ args.push("-r", input.revision);
307
+ }
308
+ args.push(input.src, input.dest);
309
+ const run = await runSvn(args, cwd);
310
+ return envelopeFromRun({ run, ok: run.exitCode === 0, note: run.exitCode === 0 ? "" : noteFromRun(run) });
311
+ }
312
+ export async function svnImport(input) {
313
+ const cwd = resolveCwd(input.cwd);
314
+ if (readonlyMode()) {
315
+ return failEnvelope("svn import", cwd, "READONLY instance");
316
+ }
317
+ const existsError = assertExistingTargets([path.resolve(cwd, input.src)]);
318
+ if (existsError) {
319
+ return failEnvelope("svn import", cwd, existsError);
320
+ }
321
+ const importSource = path.resolve(cwd, input.src);
322
+ const importGuardRoot = path.dirname(importSource);
323
+ const sourceHit = neverCommitHit(importSource, importGuardRoot);
324
+ if (sourceHit) {
325
+ return failEnvelope("svn import", cwd, neverCommitNote(sourceHit, importSource, importGuardRoot));
326
+ }
327
+ const sourceStat = statTargetForMutation("svn import", cwd, importSource);
328
+ if (!sourceStat.ok) {
329
+ return sourceStat.envelope;
330
+ }
331
+ if (sourceStat.stat.isDirectory()) {
332
+ const descendantHit = await firstNeverCommitDescendant(importSource, importSource);
333
+ if (descendantHit?.error) {
334
+ return failEnvelope("svn import", cwd, descendantHit.error);
335
+ }
336
+ if (descendantHit?.hit) {
337
+ return failEnvelope("svn import", cwd, descendantHit.hit.glob.startsWith("policy-error:")
338
+ ? descendantHit.hit.glob
339
+ : `never-commit path matches ${descendantHit.hit.glob}: ${descendantHit.hit.path}`);
340
+ }
341
+ }
342
+ const messageTemp = writeMessageTemp("svn-agent-import-", input.message);
343
+ try {
344
+ const run = await runSvn(["import", "-F", messageTemp.file, importSource, input.url], cwd);
345
+ return envelopeFromRun({
346
+ run,
347
+ ok: run.exitCode === 0,
348
+ revision: parseCommittedRevision(`${run.stdout}\n${run.stderr}`),
349
+ note: run.exitCode === 0 ? "" : noteFromRun(run)
350
+ });
351
+ }
352
+ finally {
353
+ fs.rmSync(messageTemp.dir, { recursive: true, force: true });
354
+ }
355
+ }
356
+ async function mutatingPathGuard(command, cwdInput, paths, options) {
357
+ const cwd = resolveCwd(cwdInput);
358
+ if (readonlyMode() && !options.allowReadonlyForDryRun) {
359
+ return { ok: false, envelope: failEnvelope(command, cwd, "READONLY instance") };
360
+ }
361
+ const explicitError = requireExplicitPaths(paths);
362
+ if (explicitError) {
363
+ return { ok: false, envelope: failEnvelope(command, cwd, explicitError) };
364
+ }
365
+ const context = await getWcContext(cwdInput, paths ?? []);
366
+ if (!context.ok) {
367
+ return { ok: false, envelope: context.envelope };
368
+ }
369
+ const resolved = resolveTargetsInsideWc(context.cwd, context.wcRoot, paths ?? []);
370
+ if (!resolved.ok) {
371
+ return { ok: false, envelope: failEnvelope(command, context.cwd, resolved.note) };
372
+ }
373
+ if (options.requireExisting) {
374
+ const existsError = assertExistingTargets(resolved.paths);
375
+ if (existsError) {
376
+ return { ok: false, envelope: failEnvelope(command, context.cwd, existsError) };
377
+ }
378
+ }
379
+ return {
380
+ ok: true,
381
+ cwd: context.cwd,
382
+ wcRoot: context.wcRoot,
383
+ paths: resolved.paths
384
+ };
385
+ }
386
+ function statusPathsForCommit(paths, wcRoot) {
387
+ const expanded = [];
388
+ for (const target of paths) {
389
+ for (const ancestor of ancestorDirectories(target, wcRoot)) {
390
+ pushUniquePath(expanded, ancestor);
391
+ }
392
+ pushUniquePath(expanded, target);
393
+ }
394
+ return expanded;
395
+ }
396
+ function commitPathsWithAddedParents(paths, wcRoot, statusByPath) {
397
+ const expanded = [];
398
+ for (const target of paths) {
399
+ for (const ancestor of ancestorDirectories(target, wcRoot)) {
400
+ if (statusByPath.get(ancestor.toLowerCase()) === "A") {
401
+ pushUniquePath(expanded, ancestor);
402
+ }
403
+ }
404
+ pushUniquePath(expanded, target);
405
+ }
406
+ return expanded;
407
+ }
408
+ function ancestorDirectories(absPath, wcRoot) {
409
+ const root = path.resolve(wcRoot);
410
+ const normalizedRoot = root.toLowerCase();
411
+ const ancestors = [];
412
+ let current = path.dirname(path.resolve(absPath));
413
+ while (current.toLowerCase() !== normalizedRoot && current.toLowerCase().startsWith(`${normalizedRoot}${path.sep}`)) {
414
+ ancestors.push(current);
415
+ current = path.dirname(current);
416
+ }
417
+ return ancestors.reverse();
418
+ }
419
+ function pushUniquePath(paths, value) {
420
+ const normalized = path.resolve(value).toLowerCase();
421
+ if (!paths.some((existing) => path.resolve(existing).toLowerCase() === normalized)) {
422
+ paths.push(value);
423
+ }
424
+ }
425
+ async function firstNeverCommitDescendant(directory, wcRoot) {
426
+ const queue = [{ directory, depth: 0 }];
427
+ let scanned = 0;
428
+ while (queue.length > 0) {
429
+ const current = queue.shift();
430
+ if (current.depth > DESCENDANT_SCAN_DEPTH_LIMIT) {
431
+ return { error: `recursive scan depth limit exceeded (${DESCENDANT_SCAN_DEPTH_LIMIT})` };
432
+ }
433
+ const entries = await fs.promises.readdir(current.directory, { withFileTypes: true });
434
+ for (const entry of entries) {
435
+ scanned += 1;
436
+ if (scanned > DESCENDANT_SCAN_LIMIT) {
437
+ return { error: `recursive scan entry limit exceeded (${DESCENDANT_SCAN_LIMIT})` };
438
+ }
439
+ const child = path.join(current.directory, entry.name);
440
+ const hit = neverCommitHit(child, wcRoot);
441
+ if (hit) {
442
+ return { hit: { glob: hit, path: repoRelativePath(child, wcRoot) } };
443
+ }
444
+ if (entry.isDirectory()) {
445
+ queue.push({ directory: child, depth: current.depth + 1 });
446
+ }
447
+ }
448
+ }
449
+ return null;
450
+ }
451
+ async function svnMoveOrCopy(commandName, svnVerb, input) {
452
+ const cwd = resolveCwd(input.cwd);
453
+ if (readonlyMode()) {
454
+ return failEnvelope(commandName, cwd, "READONLY instance");
455
+ }
456
+ if (!input.src.trim() || !input.dest.trim()) {
457
+ return failEnvelope(commandName, cwd, "explicit src and dest required");
458
+ }
459
+ if (isSvnUrl(input.src) || isSvnUrl(input.dest)) {
460
+ return failEnvelope(commandName, cwd, "working-copy paths required; repository URL copy/move is not supported");
461
+ }
462
+ const context = await getWcContext(input.cwd, [input.src, input.dest]);
463
+ if (!context.ok) {
464
+ return context.envelope;
465
+ }
466
+ const resolved = resolveTargetsInsideWc(context.cwd, context.wcRoot, [input.src, input.dest]);
467
+ if (!resolved.ok) {
468
+ return failEnvelope(commandName, context.cwd, resolved.note);
469
+ }
470
+ const [src, dest] = resolved.paths;
471
+ if (!src || !dest) {
472
+ return failEnvelope(commandName, context.cwd, "explicit src and dest required");
473
+ }
474
+ const existsError = assertExistingTargets([src]);
475
+ if (existsError) {
476
+ return failEnvelope(commandName, context.cwd, existsError);
477
+ }
478
+ if (path.resolve(src).toLowerCase() === context.wcRoot.toLowerCase()) {
479
+ return failEnvelope(commandName, context.cwd, "refusing to copy or move working-copy root");
480
+ }
481
+ for (const target of [src, dest]) {
482
+ const hit = neverCommitHit(target, context.wcRoot);
483
+ if (hit) {
484
+ return failEnvelope(commandName, context.cwd, neverCommitNote(hit, target, context.wcRoot));
485
+ }
486
+ }
487
+ const run = await runSvn([svnVerb, "--parents", src, dest], context.cwd);
488
+ const status = run.exitCode === 0 ? await svnStatus({ cwd: context.cwd, paths: [src, dest] }) : null;
489
+ return {
490
+ ...envelopeFromRun({
491
+ run,
492
+ ok: run.exitCode === 0,
493
+ changed_paths: status?.changed_paths ?? [],
494
+ conflicts: status?.conflicts ?? [],
495
+ note: run.exitCode === 0 ? "" : noteFromRun(run)
496
+ }),
497
+ operation: svnVerb,
498
+ src,
499
+ dest
500
+ };
501
+ }
502
+ function isSvnUrl(value) {
503
+ return /^[a-z][a-z0-9+.-]*:\/\//i.test(value);
504
+ }
505
+ export function statTargetForMutation(commandName, cwd, target) {
506
+ try {
507
+ return { ok: true, stat: fs.statSync(target) };
508
+ }
509
+ catch {
510
+ return {
511
+ ok: false,
512
+ envelope: failEnvelope(commandName, cwd, `path stat failed before svn command: ${target}`)
513
+ };
514
+ }
515
+ }
516
+ function writeMessageTemp(prefix, message) {
517
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), prefix));
518
+ const file = path.join(dir, "message.txt");
519
+ fs.writeFileSync(file, normalizeMessageFile(message), { encoding: "utf8", mode: 0o600 });
520
+ return { dir, file };
521
+ }
522
+ function normalizeMessageFile(value) {
523
+ return stripLeadingBom(value).replace(/\r\n?/g, "\n");
524
+ }
525
+ function stripLeadingBom(value) {
526
+ return value.replace(/^\uFEFF/, "");
527
+ }
528
+ function combineRuns(runs, cwd) {
529
+ return {
530
+ command: runs.map((run) => run.command).join(" && "),
531
+ cwd,
532
+ executable: runs[0]?.executable ?? "svn",
533
+ args: runs.flatMap((run) => run.args),
534
+ exitCode: 0,
535
+ signal: null,
536
+ stdout: runs.map((run) => run.stdout).filter(Boolean).join("\n"),
537
+ stderr: runs.map((run) => run.stderr).filter(Boolean).join("\n"),
538
+ timedOut: runs.some((run) => run.timedOut),
539
+ truncated: runs.some((run) => run.truncated)
540
+ };
541
+ }
542
+ function isValidRevision(value) {
543
+ return /^(?:\d+|HEAD|BASE|COMMITTED|PREV|\{[^}\r\n]+\})$/i.test(value.trim());
544
+ }
545
+ function propertyRiskSignals(name) {
546
+ const normalized = name.toLowerCase();
547
+ if (normalized === "svn:ignore" || normalized === "svn:global-ignores") {
548
+ return ["ignore property touched"];
549
+ }
550
+ if (normalized === "svn:externals") {
551
+ return ["externals property touched"];
552
+ }
553
+ if (normalized === "svn:auto-props") {
554
+ return ["auto-props property touched"];
555
+ }
556
+ return [];
557
+ }
558
+ //# sourceMappingURL=mutating.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutating.js","sourceRoot":"","sources":["../../src/tools/mutating.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { DiffSummary, Envelope, ToolEnvelope, WcInfo } from "../types.js";
2
+ export interface ToolInputWithCwd {
3
+ cwd?: string;
4
+ }
5
+ export declare function getWcContext(cwdInput?: string, pathHints?: string[]): Promise<{
6
+ ok: true;
7
+ cwd: string;
8
+ info: WcInfo;
9
+ wcRoot: string;
10
+ } | {
11
+ ok: false;
12
+ envelope: Envelope;
13
+ }>;
14
+ export declare function svnStatus(input: {
15
+ cwd?: string;
16
+ paths?: string[];
17
+ includeIgnored?: boolean;
18
+ hideNoise?: boolean;
19
+ }): Promise<ToolEnvelope>;
20
+ export declare function svnInfo(input: {
21
+ cwd?: string;
22
+ paths?: string[];
23
+ }): Promise<ToolEnvelope>;
24
+ export declare function svnDiff(input: {
25
+ cwd?: string;
26
+ paths: string[];
27
+ ignoreEol?: boolean;
28
+ lineLimit?: number;
29
+ }): Promise<ToolEnvelope & DiffSummary>;
30
+ export declare function svnLog(input: {
31
+ cwd?: string;
32
+ paths?: string[];
33
+ limit?: number;
34
+ verbose?: boolean;
35
+ }): Promise<ToolEnvelope>;
36
+ export declare function eolCheck(input: {
37
+ cwd?: string;
38
+ paths: string[];
39
+ }): Promise<ToolEnvelope>;
40
+ export declare function svnPropget(input: {
41
+ cwd?: string;
42
+ paths: string[];
43
+ name: string;
44
+ }): Promise<ToolEnvelope>;
45
+ export declare function scopedStatusMap(cwd: string, wcRoot: string, paths: string[]): Promise<{
46
+ envelope: ToolEnvelope;
47
+ map: Map<string, string>;
48
+ }>;
49
+ export declare function dryRiskSignals(absPaths: string[], wcRoot: string, statusByPath?: Map<string, string>): string[];
50
+ export declare function defaultDiffLineLimit(): number;
51
+ export declare function normalizeStatusLookup(statuses: Map<string, string>, target: string): string | undefined;
52
+ //# sourceMappingURL=readonly.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readonly.d.ts","sourceRoot":"","sources":["../../src/tools/readonly.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,WAAW,EAAkB,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE/F,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAQD,wBAAsB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,CAmDpL;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CA6B/I;AAED,wBAAsB,OAAO,CAAC,KAAK,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAwE9F;AAED,wBAAsB,OAAO,CAAC,KAAK,EAAE;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,YAAY,GAAG,WAAW,CAAC,CA4DtC;AAED,wBAAsB,MAAM,CAAC,KAAK,EAAE;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,OAAO,CAAC,YAAY,CAAC,CA+BxB;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAiD9F;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CA0E9G;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3F,QAAQ,EAAE,YAAY,CAAC;IACvB,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1B,CAAC,CAMD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAE/G;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEvG"}