dsh-lsp-actions 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/LICENSE +201 -0
  3. package/README.es.md +177 -0
  4. package/README.hi.md +177 -0
  5. package/README.md +183 -0
  6. package/README.pt.md +177 -0
  7. package/README.zh-CN.md +181 -0
  8. package/cordis.patch.yml +17 -0
  9. package/lib/abort.d.ts +13 -0
  10. package/lib/abort.d.ts.map +1 -0
  11. package/lib/abort.js +31 -0
  12. package/lib/abort.js.map +1 -0
  13. package/lib/client.d.ts +173 -0
  14. package/lib/client.d.ts.map +1 -0
  15. package/lib/client.js +926 -0
  16. package/lib/client.js.map +1 -0
  17. package/lib/connection.d.ts +103 -0
  18. package/lib/connection.d.ts.map +1 -0
  19. package/lib/connection.js +241 -0
  20. package/lib/connection.js.map +1 -0
  21. package/lib/edits.d.ts +17 -0
  22. package/lib/edits.d.ts.map +1 -0
  23. package/lib/edits.js +76 -0
  24. package/lib/edits.js.map +1 -0
  25. package/lib/extension.d.ts +9 -0
  26. package/lib/extension.d.ts.map +1 -0
  27. package/lib/extension.js +17 -0
  28. package/lib/extension.js.map +1 -0
  29. package/lib/extra-tools.d.ts +45 -0
  30. package/lib/extra-tools.d.ts.map +1 -0
  31. package/lib/extra-tools.js +406 -0
  32. package/lib/extra-tools.js.map +1 -0
  33. package/lib/framing.d.ts +33 -0
  34. package/lib/framing.d.ts.map +1 -0
  35. package/lib/framing.js +80 -0
  36. package/lib/framing.js.map +1 -0
  37. package/lib/host.d.ts +64 -0
  38. package/lib/host.d.ts.map +1 -0
  39. package/lib/host.js +152 -0
  40. package/lib/host.js.map +1 -0
  41. package/lib/index.d.ts +42 -0
  42. package/lib/index.d.ts.map +1 -0
  43. package/lib/index.js +78 -0
  44. package/lib/index.js.map +1 -0
  45. package/lib/render.d.ts +364 -0
  46. package/lib/render.d.ts.map +1 -0
  47. package/lib/render.js +485 -0
  48. package/lib/render.js.map +1 -0
  49. package/lib/runner.d.ts +55 -0
  50. package/lib/runner.d.ts.map +1 -0
  51. package/lib/runner.js +149 -0
  52. package/lib/runner.js.map +1 -0
  53. package/lib/sandbox.d.ts +69 -0
  54. package/lib/sandbox.d.ts.map +1 -0
  55. package/lib/sandbox.js +98 -0
  56. package/lib/sandbox.js.map +1 -0
  57. package/lib/seam.d.ts +67 -0
  58. package/lib/seam.d.ts.map +1 -0
  59. package/lib/seam.js +62 -0
  60. package/lib/seam.js.map +1 -0
  61. package/lib/servers.d.ts +120 -0
  62. package/lib/servers.d.ts.map +1 -0
  63. package/lib/servers.js +216 -0
  64. package/lib/servers.js.map +1 -0
  65. package/lib/session-cwd.d.ts +15 -0
  66. package/lib/session-cwd.d.ts.map +1 -0
  67. package/lib/session-cwd.js +16 -0
  68. package/lib/session-cwd.js.map +1 -0
  69. package/lib/tools.d.ts +150 -0
  70. package/lib/tools.d.ts.map +1 -0
  71. package/lib/tools.js +543 -0
  72. package/lib/tools.js.map +1 -0
  73. package/lib/translate.d.ts +181 -0
  74. package/lib/translate.d.ts.map +1 -0
  75. package/lib/translate.js +715 -0
  76. package/lib/translate.js.map +1 -0
  77. package/lib/vocabulary.d.ts +167 -0
  78. package/lib/vocabulary.d.ts.map +1 -0
  79. package/lib/vocabulary.js +20 -0
  80. package/lib/vocabulary.js.map +1 -0
  81. package/package.json +95 -0
package/lib/tools.js ADDED
@@ -0,0 +1,543 @@
1
+ /**
2
+ * The three model-facing LSP action tools: `lsp_diagnostics` (read-only), `lsp_format` (writes
3
+ * through fs write-intent and sandbox policy), and `lsp_completion` (reference-only hints). All
4
+ * three declare `timeoutMs` for the official timeout policy to enforce and observe `exec.signal`
5
+ * throughout; results are capped and never cached.
6
+ * @module dsh-lsp-actions/tools
7
+ */
8
+ import { defineTool } from '@deepseek-ai/dsh-tools';
9
+ import { FsError } from '@deepseek-ai/dsh-fs';
10
+ import { escalationHintMarker, sandboxDenialMarker } from '@deepseek-ai/dsh-sandbox';
11
+ import { applyEdits } from "./edits.js";
12
+ import { canonicalizeWorkspace, readHostSource, workspaceRelativePath } from "./host.js";
13
+ import { sessionCwd } from "./session-cwd.js";
14
+ import { formatAppliedEdits, formatCompletionList, formatDiagnostics, formatRenameResult, presentLspCompletionCall, presentLspCompletionResult, presentLspDiagnosticsCall, presentLspDiagnosticsResult, presentLspFormatCall, presentLspFormatResult, presentLspRenameCall, presentLspRenameResult, } from "./render.js";
15
+ import { LspActionError } from "./vocabulary.js";
16
+ /** The shared position schema, reused inside ranges and output projections. */
17
+ export const POSITION_SCHEMA = {
18
+ type: 'object',
19
+ additionalProperties: false,
20
+ properties: {
21
+ line: { type: 'integer', required: true },
22
+ character: { type: 'integer', required: true },
23
+ },
24
+ };
25
+ /** The shared output-side range schema. */
26
+ export const OUTPUT_RANGE_SCHEMA = {
27
+ type: 'object',
28
+ additionalProperties: false,
29
+ required: true,
30
+ properties: {
31
+ start: { ...POSITION_SCHEMA, required: true },
32
+ end: { ...POSITION_SCHEMA, required: true },
33
+ },
34
+ };
35
+ /**
36
+ * Register the `lsp_diagnostics` tool: read-only diagnostics for one file, count-capped in the
37
+ * canonical value and character-capped in the rendered text.
38
+ * @param ctx - the plugin context.
39
+ * @param runner - the seam-first action runner.
40
+ * @param config - the resolved plugin configuration.
41
+ */
42
+ export function registerDiagnosticsTool(ctx, runner, config) {
43
+ ctx.tools.register(defineTool({
44
+ name: 'lsp_diagnostics',
45
+ description: 'Request compiler/analyzer diagnostics (errors, warnings, hints) for a file from its language server. Returns severity, zero-based range, message, and source per diagnostic, capped at maxDiagnostics. Read-only.',
46
+ parameters: {
47
+ file_path: { type: 'string', required: true, description: 'The source file to diagnose, relative to the workspace or absolute.' },
48
+ },
49
+ output: {
50
+ schema: {
51
+ type: 'object',
52
+ additionalProperties: false,
53
+ properties: {
54
+ kind: { type: 'string', required: true, const: 'diagnostics' },
55
+ file_path: { type: 'string', required: true },
56
+ diagnostics: {
57
+ type: 'array',
58
+ required: true,
59
+ items: {
60
+ type: 'object',
61
+ additionalProperties: false,
62
+ properties: {
63
+ severity: { type: 'integer', required: true },
64
+ range: OUTPUT_RANGE_SCHEMA,
65
+ message: { type: 'string', required: true },
66
+ source: { type: 'string' },
67
+ code: { oneOf: [{ type: 'string' }, { type: 'number' }] },
68
+ },
69
+ },
70
+ },
71
+ truncated: { type: 'boolean', required: true },
72
+ total: { type: 'integer', required: true },
73
+ },
74
+ },
75
+ render: (_args, value) => [{ type: 'text', text: formatDiagnostics(value.file_path, value.diagnostics, config.maxResultChars) }],
76
+ presentationMeta: (_args, value) => ({
77
+ diagnostics: value.diagnostics.map((diagnostic) => ({
78
+ line: diagnostic.range.start.line + 1,
79
+ character: diagnostic.range.start.character + 1,
80
+ severity: diagnostic.severity,
81
+ message: diagnostic.message,
82
+ ...diagnostic.source === undefined ? {} : { source: diagnostic.source },
83
+ ...diagnostic.code === undefined ? {} : { code: diagnostic.code },
84
+ })),
85
+ }),
86
+ },
87
+ timeoutMs: config.timeoutMs,
88
+ async execute(args, exec) {
89
+ const filePath = parseFilePath(args.file_path);
90
+ const workspaceRoot = requireWorkspace(exec);
91
+ const request = await prepareRequest(ctx, config, filePath, workspaceRoot, exec);
92
+ const result = await runner.diagnostics(request, exec.signal);
93
+ const capped = result.diagnostics.slice(0, config.maxDiagnostics);
94
+ return {
95
+ kind: 'diagnostics',
96
+ file_path: filePath,
97
+ diagnostics: capped.map(projectDiagnostic),
98
+ truncated: result.diagnostics.length > capped.length,
99
+ total: result.diagnostics.length,
100
+ };
101
+ },
102
+ presentCall: presentLspDiagnosticsCall,
103
+ presentResult: presentLspDiagnosticsResult,
104
+ }));
105
+ }
106
+ /**
107
+ * Register the `lsp_format` tool: formatting through a language server, applied through the
108
+ * filesystem write-intent waterfall and the per-call sandbox policy. Read-only sandbox modes fail
109
+ * loud before any server round-trip; a stale on-disk file fails as a structured conflict.
110
+ * @param ctx - the plugin context.
111
+ * @param runner - the seam-first action runner.
112
+ * @param sandbox - the shared escalation controller.
113
+ * @param config - the resolved plugin configuration.
114
+ */
115
+ export function registerFormatTool(ctx, runner, sandbox, config) {
116
+ ctx.tools.register(defineTool({
117
+ name: 'lsp_format',
118
+ description: 'Format a file (or a one-based UTF-16 selection within it) through its language server and write the result, returning the applied diff. Writes go through the filesystem write-intent policy; a file that changed on disk since it was read fails the call as a conflict.',
119
+ parameters: {
120
+ file_path: { type: 'string', required: true, description: 'The source file to format, relative to the workspace or absolute.' },
121
+ range: {
122
+ type: 'object',
123
+ additionalProperties: false,
124
+ description: 'Optional selection to format as one-based UTF-16 line/character (cursor convention); omit for the whole file.',
125
+ properties: {
126
+ start: { type: 'object', additionalProperties: false, required: true, properties: { line: { type: 'integer', required: true }, character: { type: 'integer', required: true } } },
127
+ end: { type: 'object', additionalProperties: false, required: true, properties: { line: { type: 'integer', required: true }, character: { type: 'integer', required: true } } },
128
+ },
129
+ },
130
+ ...sandbox.escalationModes.length > 0 ? sandbox.schemaFields('formatting') : {},
131
+ },
132
+ output: {
133
+ schema: {
134
+ oneOf: [
135
+ {
136
+ type: 'object',
137
+ additionalProperties: false,
138
+ properties: {
139
+ kind: { type: 'string', required: true, const: 'formatted' },
140
+ file_path: { type: 'string', required: true },
141
+ appliedEdits: { type: 'integer', required: true },
142
+ linesChanged: { type: 'integer', required: true },
143
+ before: { type: 'string', required: true },
144
+ after: { type: 'string', required: true },
145
+ },
146
+ },
147
+ {
148
+ type: 'object',
149
+ additionalProperties: false,
150
+ properties: {
151
+ kind: { type: 'string', required: true, const: 'unchanged' },
152
+ file_path: { type: 'string', required: true },
153
+ },
154
+ },
155
+ ],
156
+ },
157
+ render: (_args, value) => {
158
+ switch (value.kind) {
159
+ case 'formatted':
160
+ return [{ type: 'text', text: formatAppliedEdits(value.file_path, value.appliedEdits, value.linesChanged) }];
161
+ case 'unchanged':
162
+ return [{ type: 'text', text: `Formatted ${value.file_path}: the server returned no changes.` }];
163
+ }
164
+ },
165
+ presentationMeta: (args, value) => value.kind === 'formatted'
166
+ ? { diffs: [{ path: args.file_path, oldText: value.before, newText: value.after }] }
167
+ : { diffs: [] },
168
+ },
169
+ timeoutMs: config.timeoutMs,
170
+ async execute(args, exec) {
171
+ const filePath = parseFilePath(args.file_path);
172
+ const workspaceRoot = requireWorkspace(exec);
173
+ // Resolve the per-call sandbox policy (approved mode > session override > backend default)
174
+ // BEFORE anything executes, so a read-only session never pays for a server round-trip.
175
+ const sandboxPolicy = await sandbox.resolvePolicy('lsp_format', args, exec);
176
+ if (sandboxPolicy !== undefined && sandboxPolicy.mode === 'read-only') {
177
+ throw new LspActionError(`${sandboxDenialMarker(sandboxPolicy.mode)}\n${escalationHintMarker('operation')}`, 'LSP_ACTION_READ_ONLY');
178
+ }
179
+ const request = await prepareRequest(ctx, config, filePath, workspaceRoot, exec);
180
+ // Record the present observation so the write-intent policy can guard against staleness.
181
+ if (request.source.version !== undefined) {
182
+ ctx.emit('fs/observed', request.source.target, { kind: 'present', version: request.source.version }, exec);
183
+ }
184
+ const range = parseOptionalRange(args.range);
185
+ const result = await runner.formatDocument({ ...request, range }, exec.signal);
186
+ if (result.edits.length === 0) {
187
+ return { kind: 'unchanged', file_path: filePath };
188
+ }
189
+ const newText = applyEdits(request.source.text, result.edits);
190
+ const intent = await ctx.waterfall('fs/write-intent', request.source.target, exec, () => undefined);
191
+ let outcome;
192
+ try {
193
+ outcome = await ctx.fs.writeText(request.source.target, newText, intent, exec.signal, sandboxPolicy);
194
+ }
195
+ catch (error) {
196
+ throw mapWriteFailure(sandbox.mapError(error, sandboxPolicy), 'lsp_format');
197
+ }
198
+ ctx.emit('fs/observed', request.source.target, { kind: 'present', version: outcome.version }, exec);
199
+ return {
200
+ kind: 'formatted',
201
+ file_path: filePath,
202
+ appliedEdits: result.edits.length,
203
+ linesChanged: linesChangedByEdits(result.edits),
204
+ before: outcome.before ?? request.source.text,
205
+ after: outcome.after,
206
+ };
207
+ },
208
+ presentCall: presentLspFormatCall,
209
+ presentResult: presentLspFormatResult,
210
+ }));
211
+ }
212
+ /**
213
+ * Register the `lsp_completion` tool: reference-only completion hints at a cursor position. The
214
+ * description and the rendered header both state that nothing is executed — applying a suggestion
215
+ * is the model's own write/edit decision.
216
+ * @param ctx - the plugin context.
217
+ * @param runner - the seam-first action runner.
218
+ * @param config - the resolved plugin configuration.
219
+ */
220
+ export function registerCompletionTool(ctx, runner, config) {
221
+ ctx.tools.register(defineTool({
222
+ name: 'lsp_completion',
223
+ description: 'Request code-completion suggestions at a one-based UTF-16 cursor position from the file\'s language server. Reference-only hints: nothing is executed or written — apply a suggestion yourself with write/edit.',
224
+ parameters: {
225
+ file_path: { type: 'string', required: true, description: 'The source file to complete in, relative to the workspace or absolute.' },
226
+ line: { type: 'integer', required: true, description: 'One-based line of the cursor.' },
227
+ character: { type: 'integer', required: true, description: 'One-based UTF-16 column of the cursor.' },
228
+ },
229
+ output: {
230
+ schema: {
231
+ type: 'object',
232
+ additionalProperties: false,
233
+ properties: {
234
+ kind: { type: 'string', required: true, const: 'completion' },
235
+ file_path: { type: 'string', required: true },
236
+ items: {
237
+ type: 'array',
238
+ required: true,
239
+ items: {
240
+ type: 'object',
241
+ additionalProperties: false,
242
+ properties: {
243
+ label: { type: 'string', required: true },
244
+ kind: { type: 'integer' },
245
+ detail: { type: 'string' },
246
+ insertText: { type: 'string' },
247
+ sortText: { type: 'string' },
248
+ textEdit: {
249
+ type: 'object',
250
+ additionalProperties: false,
251
+ properties: {
252
+ range: OUTPUT_RANGE_SCHEMA,
253
+ newText: { type: 'string', required: true },
254
+ },
255
+ },
256
+ },
257
+ },
258
+ },
259
+ truncated: { type: 'boolean', required: true },
260
+ total: { type: 'integer', required: true },
261
+ },
262
+ },
263
+ render: (args, value) => [{ type: 'text', text: formatCompletionList(value.file_path, args.line, args.character, value.items, config.maxResultChars) }],
264
+ presentationMeta: (_args, value) => ({
265
+ items: value.items.map((item) => {
266
+ const insertText = item.textEdit?.newText ?? item.insertText;
267
+ return {
268
+ label: item.label,
269
+ ...item.detail === undefined ? {} : { detail: item.detail },
270
+ ...insertText === undefined ? {} : { insertText },
271
+ };
272
+ }),
273
+ }),
274
+ },
275
+ timeoutMs: config.timeoutMs,
276
+ async execute(args, exec) {
277
+ const filePath = parseFilePath(args.file_path);
278
+ const position = parseCursor(args.line, args.character);
279
+ const workspaceRoot = requireWorkspace(exec);
280
+ const request = await prepareRequest(ctx, config, filePath, workspaceRoot, exec);
281
+ const result = await runner.completion({ ...request, position }, exec.signal);
282
+ const capped = result.items.slice(0, config.maxCompletionItems);
283
+ return {
284
+ kind: 'completion',
285
+ file_path: filePath,
286
+ items: capped.map(projectCompletionItem),
287
+ truncated: result.items.length > capped.length,
288
+ total: result.items.length,
289
+ };
290
+ },
291
+ presentCall: presentLspCompletionCall,
292
+ presentResult: presentLspCompletionResult,
293
+ }));
294
+ }
295
+ /**
296
+ * Register the `lsp_rename` tool: a server-verified symbol rename applied through the filesystem
297
+ * write-intent waterfall and the per-call sandbox policy, exactly like `lsp_format` but across
298
+ * every document the server edits. Read-only sandbox modes fail loud before any server
299
+ * round-trip; a stale on-disk file fails as a structured conflict.
300
+ * @param ctx - the plugin context.
301
+ * @param runner - the seam-first action runner.
302
+ * @param sandbox - the shared escalation controller.
303
+ * @param config - the resolved plugin configuration.
304
+ */
305
+ export function registerRenameTool(ctx, runner, sandbox, config) {
306
+ ctx.tools.register(defineTool({
307
+ name: 'lsp_rename',
308
+ description: 'Rename the symbol at a one-based UTF-16 cursor position through its language server and apply the workspace-wide edits, returning the applied diffs. Writes go through the filesystem write-intent policy; a file that changed on disk since it was read fails the call as a conflict.',
309
+ parameters: {
310
+ file_path: { type: 'string', required: true, description: 'The source file containing the symbol, relative to the workspace or absolute.' },
311
+ line: { type: 'integer', required: true, description: 'One-based line of the symbol.' },
312
+ character: { type: 'integer', required: true, description: 'One-based UTF-16 column of the symbol.' },
313
+ new_name: { type: 'string', required: true, description: 'The new symbol name.' },
314
+ ...sandbox.escalationModes.length > 0 ? sandbox.schemaFields('rename') : {},
315
+ },
316
+ output: {
317
+ schema: {
318
+ oneOf: [
319
+ {
320
+ type: 'object',
321
+ additionalProperties: false,
322
+ properties: {
323
+ kind: { type: 'string', required: true, const: 'renamed' },
324
+ file_path: { type: 'string', required: true },
325
+ new_name: { type: 'string', required: true },
326
+ filesChanged: { type: 'integer', required: true },
327
+ appliedEdits: { type: 'integer', required: true },
328
+ diffs: {
329
+ type: 'array',
330
+ required: true,
331
+ items: {
332
+ type: 'object',
333
+ additionalProperties: false,
334
+ properties: {
335
+ file_path: { type: 'string', required: true },
336
+ before: { type: 'string', required: true },
337
+ after: { type: 'string', required: true },
338
+ },
339
+ },
340
+ },
341
+ },
342
+ },
343
+ {
344
+ type: 'object',
345
+ additionalProperties: false,
346
+ properties: {
347
+ kind: { type: 'string', required: true, const: 'unchanged' },
348
+ file_path: { type: 'string', required: true },
349
+ new_name: { type: 'string', required: true },
350
+ },
351
+ },
352
+ ],
353
+ },
354
+ render: (args, value) => value.kind === 'renamed'
355
+ ? [{ type: 'text', text: formatRenameResult(value.file_path, args.line, args.character, value.new_name, value.appliedEdits, value.filesChanged) }]
356
+ : [{ type: 'text', text: `Renamed the symbol at ${value.file_path}:${args.line}:${args.character} to "${value.new_name}": the server returned no changes.` }],
357
+ presentationMeta: (_args, value) => value.kind === 'renamed'
358
+ ? { diffs: value.diffs.map((diff) => ({ path: diff.file_path, oldText: diff.before, newText: diff.after })) }
359
+ : { diffs: [] },
360
+ },
361
+ timeoutMs: config.timeoutMs,
362
+ async execute(args, exec) {
363
+ const filePath = parseFilePath(args.file_path);
364
+ const newName = parseNewName(args.new_name);
365
+ const position = parseCursor(args.line, args.character);
366
+ const workspaceRoot = requireWorkspace(exec);
367
+ // The per-call sandbox policy resolves BEFORE anything executes, so a read-only session
368
+ // never pays for a server round-trip — the same fail-fast contract as lsp_format.
369
+ const sandboxPolicy = await sandbox.resolvePolicy('lsp_rename', args, exec);
370
+ if (sandboxPolicy !== undefined && sandboxPolicy.mode === 'read-only') {
371
+ throw new LspActionError(`${sandboxDenialMarker(sandboxPolicy.mode)}\n${escalationHintMarker('operation')}`, 'LSP_ACTION_READ_ONLY');
372
+ }
373
+ const request = await prepareRequest(ctx, config, filePath, workspaceRoot, exec);
374
+ const result = await runner.rename({ ...request, position }, newName, exec.signal);
375
+ const targets = Object.entries(result.edits);
376
+ if (targets.length === 0) {
377
+ return { kind: 'unchanged', file_path: filePath, new_name: newName };
378
+ }
379
+ // Pre-flight: read, contain, observe, and apply every target BEFORE the first write, so an
380
+ // out-of-workspace edit or an overlapping/out-of-bounds edit fails before any byte is
381
+ // written. No-op files (the edit applies to nothing) are dropped.
382
+ const planned = [];
383
+ for (const [uri, edits] of targets) {
384
+ const relative = workspaceRelativePath(request.workspace, uri);
385
+ if (relative === undefined) {
386
+ throw new LspActionError(`the language server's rename edits a file outside the workspace (${uri}); refusing to apply it`, 'LSP_ACTION_CONFLICT');
387
+ }
388
+ const source = await readHostSource(ctx.fs, relative, request.workspace, config.maxDocumentBytes, exec.signal);
389
+ if (source.version !== undefined) {
390
+ ctx.emit('fs/observed', source.target, { kind: 'present', version: source.version }, exec);
391
+ }
392
+ const after = applyEdits(source.text, edits);
393
+ if (after !== source.text) {
394
+ planned.push({ filePath: relative, target: source.target, before: source.text, after, edits: edits.length });
395
+ }
396
+ }
397
+ if (planned.length === 0) {
398
+ return { kind: 'unchanged', file_path: filePath, new_name: newName };
399
+ }
400
+ let appliedEdits = 0;
401
+ let written = 0;
402
+ const diffs = [];
403
+ for (const file of planned) {
404
+ const intent = await ctx.waterfall('fs/write-intent', file.target, exec, () => undefined);
405
+ try {
406
+ const outcome = await ctx.fs.writeText(file.target, file.after, intent, exec.signal, sandboxPolicy);
407
+ ctx.emit('fs/observed', file.target, { kind: 'present', version: outcome.version }, exec);
408
+ appliedEdits += file.edits;
409
+ written += 1;
410
+ diffs.push({ file_path: file.filePath, before: outcome.before ?? file.before, after: outcome.after });
411
+ }
412
+ catch (error) {
413
+ const mapped = mapWriteFailure(sandbox.mapError(error, sandboxPolicy), 'lsp_rename');
414
+ if (mapped instanceof LspActionError && mapped.code === 'LSP_ACTION_CONFLICT' && written > 0) {
415
+ throw new LspActionError(`${mapped.message} (${written} of ${planned.length} file${planned.length === 1 ? '' : 's'} were already updated)`, 'LSP_ACTION_CONFLICT', { cause: error });
416
+ }
417
+ throw mapped;
418
+ }
419
+ }
420
+ return {
421
+ kind: 'renamed',
422
+ file_path: filePath,
423
+ new_name: newName,
424
+ filesChanged: planned.length,
425
+ appliedEdits,
426
+ diffs,
427
+ };
428
+ },
429
+ presentCall: presentLspRenameCall,
430
+ presentResult: presentLspRenameResult,
431
+ }));
432
+ }
433
+ /**
434
+ * Validate a new symbol name: non-empty after trimming, no embedded newlines.
435
+ * @param newName - the caller-supplied name.
436
+ * @returns the trimmed name.
437
+ */
438
+ export function parseNewName(newName) {
439
+ const name = newName.trim();
440
+ if (name.length === 0)
441
+ throw new Error('new_name must be a non-empty string');
442
+ if (/[\r\n]/.test(newName))
443
+ throw new Error('new_name must be a single-line identifier');
444
+ return name;
445
+ }
446
+ /** The shared preparation every tool runs: workspace + contained, byte-capped source read. */
447
+ export async function prepareRequest(ctx, config, filePath, workspaceRoot, exec) {
448
+ const workspace = await canonicalizeWorkspace(ctx.fs, workspaceRoot, exec.signal);
449
+ const source = await readHostSource(ctx.fs, filePath, workspace, config.maxDocumentBytes, exec.signal);
450
+ return { filePath, workspaceRoot, source, workspace };
451
+ }
452
+ /** Validate a non-blank file path. */
453
+ export function parseFilePath(filePath) {
454
+ if (filePath.trim().length === 0)
455
+ throw new Error('file_path must be a non-empty string');
456
+ return filePath;
457
+ }
458
+ /** Validate one-based cursor coordinates and convert them to the zero-based wire position. */
459
+ export function parseCursor(line, character) {
460
+ if (!Number.isInteger(line) || line < 1)
461
+ throw new Error('line must be a positive integer (one-based)');
462
+ if (!Number.isInteger(character) || character < 1)
463
+ throw new Error('character must be a positive integer (one-based)');
464
+ return { line: line - 1, character: character - 1 };
465
+ }
466
+ /** Validate an optional one-based range and convert it to the zero-based wire range. */
467
+ export function parseOptionalRange(range) {
468
+ if (range === undefined)
469
+ return undefined;
470
+ const start = parseCursor(range.start.line, range.start.character);
471
+ const end = parseCursor(range.end.line, range.end.character);
472
+ if (end.line < start.line || (end.line === start.line && end.character < start.character)) {
473
+ throw new Error('range end must not precede range start');
474
+ }
475
+ return { start, end };
476
+ }
477
+ /** The session workspace root, or a structured failure — a server needs a real workspace. */
478
+ export function requireWorkspace(exec) {
479
+ const workspaceRoot = sessionCwd(exec);
480
+ if (workspaceRoot === undefined) {
481
+ throw new LspActionError('this LSP action tool requires a session workspace cwd', 'LSP_ACTION_WORKSPACE_REQUIRED');
482
+ }
483
+ return workspaceRoot;
484
+ }
485
+ /** Project one normalized diagnostic into the canonical output shape (plain JSON values only). */
486
+ function projectDiagnostic(diagnostic) {
487
+ return {
488
+ severity: diagnostic.severity,
489
+ range: {
490
+ start: { line: diagnostic.range.start.line, character: diagnostic.range.start.character },
491
+ end: { line: diagnostic.range.end.line, character: diagnostic.range.end.character },
492
+ },
493
+ message: diagnostic.message,
494
+ ...diagnostic.source === undefined ? {} : { source: diagnostic.source },
495
+ ...diagnostic.code === undefined ? {} : { code: diagnostic.code },
496
+ };
497
+ }
498
+ /** Project one normalized completion item into the canonical output shape. */
499
+ function projectCompletionItem(item) {
500
+ return {
501
+ label: item.label,
502
+ ...item.kind === undefined ? {} : { kind: item.kind },
503
+ ...item.detail === undefined ? {} : { detail: item.detail },
504
+ ...item.insertText === undefined ? {} : { insertText: item.insertText },
505
+ ...item.sortText === undefined ? {} : { sortText: item.sortText },
506
+ ...item.textEdit === undefined ? {} : {
507
+ textEdit: {
508
+ range: {
509
+ start: { line: item.textEdit.range.start.line, character: item.textEdit.range.start.character },
510
+ end: { line: item.textEdit.range.end.line, character: item.textEdit.range.end.character },
511
+ },
512
+ newText: item.textEdit.newText,
513
+ },
514
+ },
515
+ };
516
+ }
517
+ /**
518
+ * Map a mutation write failure for the model: sandbox denials become the shared `[sandbox: …]`
519
+ * marker (via the controller), while stale/not-observed failures become the structured conflict
520
+ * that asks the model to choose between re-running and applying the changes manually.
521
+ * @param error - the already sandbox-mapped error.
522
+ * @param action - the tool name, named in the recovery advice.
523
+ * @returns the error to throw.
524
+ */
525
+ function mapWriteFailure(error, action) {
526
+ if (error instanceof FsError && (error.code === 'FS_STALE_VERSION' || error.code === 'FS_NOT_OBSERVED')) {
527
+ return new LspActionError(`the file changed on disk after it was read, and the write policy refused to overwrite it — re-read the file, then either re-run ${action} or apply the changes manually with edit/write`, 'LSP_ACTION_CONFLICT', { cause: error });
528
+ }
529
+ return error;
530
+ }
531
+ /** The one-based line span the applied edits touch (0 for an empty edit list). */
532
+ function linesChangedByEdits(edits) {
533
+ if (edits.length === 0)
534
+ return 0;
535
+ let min = Number.POSITIVE_INFINITY;
536
+ let max = Number.NEGATIVE_INFINITY;
537
+ for (const edit of edits) {
538
+ min = Math.min(min, edit.range.start.line, edit.range.end.line);
539
+ max = Math.max(max, edit.range.start.line, edit.range.end.line);
540
+ }
541
+ return max - min + 1;
542
+ }
543
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}