@nghyane/arcane 0.1.12 → 0.1.14

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 (333) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/package.json +21 -70
  3. package/scripts/format-prompts.ts +1 -3
  4. package/src/cli/args.ts +2 -7
  5. package/src/cli/config-cli.ts +1 -1
  6. package/src/cli/plugin-cli.ts +1 -1
  7. package/src/cli/setup-cli.ts +1 -1
  8. package/src/cli/update-cli.ts +1 -1
  9. package/src/cli/web-search-cli.ts +1 -1
  10. package/src/cli.ts +0 -1
  11. package/src/commands/config.ts +1 -1
  12. package/src/commands/grep.ts +1 -1
  13. package/src/commands/jupyter.ts +1 -1
  14. package/src/commands/plugin.ts +1 -1
  15. package/src/commands/setup.ts +1 -1
  16. package/src/commands/shell.ts +1 -1
  17. package/src/commands/ssh.ts +1 -1
  18. package/src/commands/stats.ts +1 -1
  19. package/src/commands/update.ts +1 -1
  20. package/src/config/model-registry.ts +3 -4
  21. package/src/config/model-resolver.ts +36 -9
  22. package/src/config/prompt-templates.ts +1 -9
  23. package/src/config/settings-schema.ts +32 -88
  24. package/src/config/settings.ts +3 -4
  25. package/src/debug/index.ts +1 -1
  26. package/src/debug/log-formatting.ts +1 -1
  27. package/src/debug/log-viewer.ts +2 -2
  28. package/src/discovery/helpers.ts +13 -3
  29. package/src/exa/company.ts +2 -7
  30. package/src/exa/index.ts +1 -35
  31. package/src/exa/linkedin.ts +2 -7
  32. package/src/exa/mcp-client.ts +21 -11
  33. package/src/exa/render.ts +30 -190
  34. package/src/exa/researcher.ts +2 -12
  35. package/src/exa/search.ts +5 -25
  36. package/src/exa/types.ts +3 -3
  37. package/src/exec/bash-executor.ts +2 -1
  38. package/src/exec/non-interactive-env.ts +43 -0
  39. package/src/export/html/index.ts +1 -1
  40. package/src/extensibility/custom-tools/loader.ts +1 -1
  41. package/src/extensibility/custom-tools/types.ts +5 -1
  42. package/src/extensibility/custom-tools/wrapper.ts +1 -1
  43. package/src/extensibility/extensions/runner.ts +1 -1
  44. package/src/extensibility/extensions/types.ts +1 -1
  45. package/src/extensibility/extensions/wrapper.ts +7 -15
  46. package/src/extensibility/hooks/runner.ts +1 -1
  47. package/src/extensibility/hooks/types.ts +1 -1
  48. package/src/extensibility/plugins/doctor.ts +1 -1
  49. package/src/index.ts +13 -13
  50. package/src/lsp/index.ts +77 -24
  51. package/src/lsp/render.ts +34 -583
  52. package/src/lsp/types.ts +3 -3
  53. package/src/lsp/utils.ts +1 -1
  54. package/src/main.ts +1 -1
  55. package/src/mcp/tool-bridge.ts +1 -24
  56. package/src/modes/components/assistant-message.ts +7 -7
  57. package/src/modes/components/bash-execution.ts +48 -113
  58. package/src/modes/components/bordered-loader.ts +1 -1
  59. package/src/modes/components/branch-summary-message.ts +13 -10
  60. package/src/modes/components/compaction-summary-message.ts +14 -13
  61. package/src/modes/components/context-group.ts +106 -0
  62. package/src/modes/components/custom-message.ts +4 -5
  63. package/src/modes/components/diff.ts +2 -2
  64. package/src/modes/components/dynamic-border.ts +1 -1
  65. package/src/modes/components/extensions/extension-dashboard.ts +2 -2
  66. package/src/modes/components/extensions/extension-list.ts +1 -1
  67. package/src/modes/components/extensions/inspector-panel.ts +8 -3
  68. package/src/modes/components/footer.ts +2 -2
  69. package/src/modes/components/history-search.ts +1 -1
  70. package/src/modes/components/hook-editor.ts +1 -1
  71. package/src/modes/components/hook-input.ts +1 -1
  72. package/src/modes/components/hook-message.ts +4 -5
  73. package/src/modes/components/hook-selector.ts +1 -1
  74. package/src/modes/components/index.ts +0 -2
  75. package/src/modes/components/keybinding-hints.ts +1 -1
  76. package/src/modes/components/login-dialog.ts +1 -1
  77. package/src/modes/components/mcp-add-wizard.ts +1 -1
  78. package/src/modes/components/model-selector.ts +1 -1
  79. package/src/modes/components/oauth-selector.ts +1 -1
  80. package/src/modes/components/plugin-settings.ts +1 -1
  81. package/src/modes/components/python-execution.ts +49 -92
  82. package/src/modes/components/queue-mode-selector.ts +1 -1
  83. package/src/modes/components/session-selector.ts +1 -1
  84. package/src/modes/components/settings-defs.ts +5 -10
  85. package/src/modes/components/settings-selector.ts +1 -1
  86. package/src/modes/components/show-images-selector.ts +1 -1
  87. package/src/modes/components/skill-message.ts +4 -4
  88. package/src/modes/components/status-line/segments.ts +2 -2
  89. package/src/modes/components/status-line/separators.ts +1 -1
  90. package/src/modes/components/status-line-segment-editor.ts +1 -1
  91. package/src/modes/components/status-line.ts +1 -1
  92. package/src/modes/components/theme-selector.ts +1 -1
  93. package/src/modes/components/thinking-selector.ts +1 -1
  94. package/src/modes/components/todo-display.ts +2 -4
  95. package/src/modes/components/todo-reminder.ts +4 -4
  96. package/src/modes/components/tool-execution.ts +118 -440
  97. package/src/modes/components/tool-image-display.ts +107 -0
  98. package/src/modes/components/tree-selector.ts +2 -2
  99. package/src/modes/components/ttsr-notification.ts +4 -17
  100. package/src/modes/components/user-message-selector.ts +1 -1
  101. package/src/modes/components/user-message.ts +9 -10
  102. package/src/modes/components/welcome.ts +1 -1
  103. package/src/modes/controllers/command-controller.ts +1 -1
  104. package/src/modes/controllers/event-controller.ts +58 -187
  105. package/src/modes/controllers/extension-ui-controller.ts +1 -1
  106. package/src/modes/controllers/input-controller.ts +3 -1
  107. package/src/modes/controllers/mcp-command-controller.ts +1 -1
  108. package/src/modes/controllers/selector-controller.ts +3 -26
  109. package/src/modes/controllers/ssh-command-controller.ts +1 -1
  110. package/src/modes/interactive-mode.ts +3 -7
  111. package/src/modes/print-mode.ts +5 -5
  112. package/src/modes/rpc/rpc-mode.ts +1 -1
  113. package/src/modes/types.ts +1 -2
  114. package/src/modes/utils/ui-helpers.ts +34 -32
  115. package/src/patch/edit-tool.ts +742 -0
  116. package/src/patch/index.ts +32 -898
  117. package/src/patch/schemas.ts +208 -0
  118. package/src/patch/shared.ts +83 -151
  119. package/src/prompts/agents/explore.md +22 -37
  120. package/src/prompts/agents/frontmatter.md +1 -1
  121. package/src/prompts/agents/init.md +2 -2
  122. package/src/prompts/agents/librarian.md +30 -21
  123. package/src/prompts/agents/oracle.md +9 -2
  124. package/src/prompts/agents/reviewer.md +15 -49
  125. package/src/prompts/agents/task.md +17 -9
  126. package/src/prompts/compaction/branch-summary-context.md +1 -1
  127. package/src/prompts/compaction/branch-summary-preamble.md +1 -1
  128. package/src/prompts/compaction/branch-summary.md +4 -1
  129. package/src/prompts/compaction/compaction-short-summary.md +1 -1
  130. package/src/prompts/compaction/compaction-summary-context.md +1 -1
  131. package/src/prompts/compaction/compaction-summary.md +4 -1
  132. package/src/prompts/compaction/compaction-turn-prefix.md +1 -1
  133. package/src/prompts/compaction/compaction-update-summary.md +1 -1
  134. package/src/prompts/memories/consolidation.md +1 -1
  135. package/src/prompts/memories/read_path.md +1 -1
  136. package/src/prompts/memories/stage_one_input.md +1 -1
  137. package/src/prompts/memories/stage_one_system.md +1 -1
  138. package/src/prompts/review-request.md +1 -1
  139. package/src/prompts/system/agent-creation-architect.md +1 -1
  140. package/src/prompts/system/agent-creation-user.md +1 -1
  141. package/src/prompts/system/custom-system-prompt.md +1 -1
  142. package/src/prompts/system/file-operations.md +1 -1
  143. package/src/prompts/system/subagent-system-prompt.md +2 -2
  144. package/src/prompts/system/summarization-system.md +1 -1
  145. package/src/prompts/system/system-prompt.md +163 -178
  146. package/src/prompts/system/title-system.md +1 -1
  147. package/src/prompts/system/ttsr-interrupt.md +1 -1
  148. package/src/prompts/system/verification-reminder.md +6 -0
  149. package/src/prompts/system/web-search.md +1 -1
  150. package/src/sdk.ts +0 -9
  151. package/src/session/agent-session.ts +244 -1459
  152. package/src/session/auth-storage.ts +5 -0
  153. package/src/session/model-controller.ts +406 -0
  154. package/src/session/retry-utils.ts +71 -0
  155. package/src/session/session-manager.ts +22 -186
  156. package/src/session/session-types.ts +312 -0
  157. package/src/session/stats.ts +387 -0
  158. package/src/session/streaming-edit.ts +258 -0
  159. package/src/session/ttsr.ts +213 -0
  160. package/src/slash-commands/builtin-registry.ts +0 -8
  161. package/src/ssh/connection-manager.ts +1 -0
  162. package/src/stt/recorder.ts +2 -2
  163. package/src/system-prompt.ts +1 -14
  164. package/src/task/agents.ts +7 -33
  165. package/src/task/executor.ts +50 -438
  166. package/src/task/index.ts +104 -71
  167. package/src/task/progress-tracker.ts +390 -0
  168. package/src/task/render.ts +371 -187
  169. package/src/task/subprocess-tool-registry.ts +1 -1
  170. package/src/task/types.ts +14 -47
  171. package/src/tools/ask.ts +31 -42
  172. package/src/tools/bash-interactive.ts +4 -47
  173. package/src/tools/bash-interceptor.ts +2 -2
  174. package/src/tools/bash-normalize.ts +1 -1
  175. package/src/tools/bash-skill-urls.ts +2 -2
  176. package/src/tools/bash.ts +87 -136
  177. package/src/tools/browser.ts +54 -84
  178. package/src/tools/create-tools.ts +186 -0
  179. package/src/tools/default-renderer.ts +104 -0
  180. package/src/tools/explore.ts +11 -10
  181. package/src/tools/fetch.ts +24 -114
  182. package/src/tools/find.ts +48 -132
  183. package/src/tools/gemini-image.ts +5 -15
  184. package/src/tools/github.ts +450 -0
  185. package/src/tools/grep.ts +43 -179
  186. package/src/tools/index.ts +35 -198
  187. package/src/tools/json-tree.ts +3 -3
  188. package/src/tools/librarian.ts +18 -18
  189. package/src/tools/list-limit.ts +2 -2
  190. package/src/tools/notebook.ts +35 -87
  191. package/src/tools/oracle.ts +25 -25
  192. package/src/tools/output-meta.ts +89 -4
  193. package/src/tools/output-utils.ts +2 -2
  194. package/src/tools/python.ts +86 -637
  195. package/src/tools/read.ts +36 -119
  196. package/src/tools/reviewer-tool.ts +19 -21
  197. package/src/tools/search-code.ts +128 -0
  198. package/src/tools/ssh.ts +67 -126
  199. package/src/tools/subagent-tool.ts +197 -123
  200. package/src/tools/todo-write.ts +15 -31
  201. package/src/tools/tool-errors.ts +0 -30
  202. package/src/tools/undo-edit.ts +30 -67
  203. package/src/tools/write.ts +78 -127
  204. package/src/tui/code-cell.ts +4 -4
  205. package/src/tui/file-list.ts +2 -2
  206. package/src/tui/output-block.ts +1 -1
  207. package/src/tui/status-line.ts +1 -1
  208. package/src/tui/tree-list.ts +2 -2
  209. package/src/tui/types.ts +1 -1
  210. package/src/tui/utils.ts +1 -1
  211. package/src/{tools → ui}/render-utils.ts +87 -126
  212. package/src/utils/external-editor.ts +4 -4
  213. package/src/utils/file-mentions.ts +1 -1
  214. package/src/utils/index.ts +30 -0
  215. package/src/utils/tools-manager.ts +9 -19
  216. package/src/web/github-client.ts +290 -0
  217. package/src/web/scrapers/github.ts +11 -62
  218. package/src/web/search/auth.ts +1 -3
  219. package/src/web/search/index.ts +85 -49
  220. package/src/web/search/provider.ts +11 -16
  221. package/src/web/search/providers/grep.ts +160 -0
  222. package/src/web/search/render.ts +48 -235
  223. package/src/web/search/types.ts +1 -1
  224. package/src/commands/commit.ts +0 -36
  225. package/src/commit/agentic/agent.ts +0 -311
  226. package/src/commit/agentic/fallback.ts +0 -96
  227. package/src/commit/agentic/index.ts +0 -359
  228. package/src/commit/agentic/prompts/analyze-file.md +0 -22
  229. package/src/commit/agentic/prompts/session-user.md +0 -25
  230. package/src/commit/agentic/prompts/split-confirm.md +0 -1
  231. package/src/commit/agentic/prompts/system.md +0 -38
  232. package/src/commit/agentic/state.ts +0 -69
  233. package/src/commit/agentic/tools/analyze-file.ts +0 -118
  234. package/src/commit/agentic/tools/git-file-diff.ts +0 -194
  235. package/src/commit/agentic/tools/git-hunk.ts +0 -50
  236. package/src/commit/agentic/tools/git-overview.ts +0 -84
  237. package/src/commit/agentic/tools/index.ts +0 -56
  238. package/src/commit/agentic/tools/propose-changelog.ts +0 -128
  239. package/src/commit/agentic/tools/propose-commit.ts +0 -154
  240. package/src/commit/agentic/tools/recent-commits.ts +0 -81
  241. package/src/commit/agentic/tools/split-commit.ts +0 -280
  242. package/src/commit/agentic/topo-sort.ts +0 -44
  243. package/src/commit/agentic/trivial.ts +0 -51
  244. package/src/commit/agentic/validation.ts +0 -200
  245. package/src/commit/analysis/conventional.ts +0 -165
  246. package/src/commit/analysis/index.ts +0 -4
  247. package/src/commit/analysis/scope.ts +0 -242
  248. package/src/commit/analysis/summary.ts +0 -112
  249. package/src/commit/analysis/validation.ts +0 -66
  250. package/src/commit/changelog/detect.ts +0 -37
  251. package/src/commit/changelog/generate.ts +0 -110
  252. package/src/commit/changelog/index.ts +0 -234
  253. package/src/commit/changelog/parse.ts +0 -44
  254. package/src/commit/cli.ts +0 -93
  255. package/src/commit/git/diff.ts +0 -148
  256. package/src/commit/git/errors.ts +0 -9
  257. package/src/commit/git/index.ts +0 -211
  258. package/src/commit/git/operations.ts +0 -54
  259. package/src/commit/index.ts +0 -5
  260. package/src/commit/map-reduce/index.ts +0 -64
  261. package/src/commit/map-reduce/map-phase.ts +0 -178
  262. package/src/commit/map-reduce/reduce-phase.ts +0 -145
  263. package/src/commit/map-reduce/utils.ts +0 -9
  264. package/src/commit/message.ts +0 -11
  265. package/src/commit/model-selection.ts +0 -69
  266. package/src/commit/pipeline.ts +0 -243
  267. package/src/commit/prompts/analysis-system.md +0 -148
  268. package/src/commit/prompts/analysis-user.md +0 -38
  269. package/src/commit/prompts/changelog-system.md +0 -50
  270. package/src/commit/prompts/changelog-user.md +0 -18
  271. package/src/commit/prompts/file-observer-system.md +0 -24
  272. package/src/commit/prompts/file-observer-user.md +0 -8
  273. package/src/commit/prompts/reduce-system.md +0 -50
  274. package/src/commit/prompts/reduce-user.md +0 -17
  275. package/src/commit/prompts/summary-retry.md +0 -3
  276. package/src/commit/prompts/summary-system.md +0 -38
  277. package/src/commit/prompts/summary-user.md +0 -13
  278. package/src/commit/prompts/types-description.md +0 -2
  279. package/src/commit/types.ts +0 -109
  280. package/src/commit/utils/exclusions.ts +0 -42
  281. package/src/mcp/render.ts +0 -123
  282. package/src/modes/components/agent-dashboard.ts +0 -1130
  283. package/src/modes/components/codemode-group.ts +0 -369
  284. package/src/modes/components/read-tool-group.ts +0 -119
  285. package/src/modes/components/visual-truncate.ts +0 -63
  286. package/src/prompts/system/subagent-user-prompt.md +0 -8
  287. package/src/prompts/tools/ask.md +0 -44
  288. package/src/prompts/tools/bash.md +0 -24
  289. package/src/prompts/tools/browser.md +0 -33
  290. package/src/prompts/tools/calculator.md +0 -12
  291. package/src/prompts/tools/explore.md +0 -29
  292. package/src/prompts/tools/fetch.md +0 -16
  293. package/src/prompts/tools/find.md +0 -18
  294. package/src/prompts/tools/gemini-image.md +0 -23
  295. package/src/prompts/tools/grep.md +0 -28
  296. package/src/prompts/tools/hashline.md +0 -232
  297. package/src/prompts/tools/librarian.md +0 -24
  298. package/src/prompts/tools/lsp.md +0 -28
  299. package/src/prompts/tools/oracle.md +0 -26
  300. package/src/prompts/tools/patch.md +0 -74
  301. package/src/prompts/tools/python.md +0 -66
  302. package/src/prompts/tools/read.md +0 -36
  303. package/src/prompts/tools/replace.md +0 -38
  304. package/src/prompts/tools/reviewer.md +0 -41
  305. package/src/prompts/tools/ssh.md +0 -51
  306. package/src/prompts/tools/task-summary.md +0 -28
  307. package/src/prompts/tools/task.md +0 -146
  308. package/src/prompts/tools/todo-write.md +0 -65
  309. package/src/prompts/tools/undo-edit.md +0 -7
  310. package/src/prompts/tools/web-search.md +0 -19
  311. package/src/prompts/tools/write.md +0 -18
  312. package/src/task/batch.ts +0 -102
  313. package/src/task/discovery.ts +0 -126
  314. package/src/task/parallel.ts +0 -84
  315. package/src/task/template.ts +0 -32
  316. package/src/tools/calculator.ts +0 -537
  317. package/src/tools/jtd-to-typescript.ts +0 -198
  318. package/src/tools/renderers.ts +0 -60
  319. package/src/tools/tool-result.ts +0 -86
  320. /package/src/{modes/theme → theme}/dark.json +0 -0
  321. /package/src/{modes/theme → theme}/defaults/dark-catppuccin.json +0 -0
  322. /package/src/{modes/theme → theme}/defaults/dark-dracula.json +0 -0
  323. /package/src/{modes/theme → theme}/defaults/dark-gruvbox.json +0 -0
  324. /package/src/{modes/theme → theme}/defaults/dark-solarized.json +0 -0
  325. /package/src/{modes/theme → theme}/defaults/dark-tokyo-night.json +0 -0
  326. /package/src/{modes/theme → theme}/defaults/index.ts +0 -0
  327. /package/src/{modes/theme → theme}/defaults/light-catppuccin.json +0 -0
  328. /package/src/{modes/theme → theme}/defaults/light-github.json +0 -0
  329. /package/src/{modes/theme → theme}/defaults/light-solarized.json +0 -0
  330. /package/src/{modes/theme → theme}/light.json +0 -0
  331. /package/src/{modes/theme → theme}/mermaid-cache.ts +0 -0
  332. /package/src/{modes/theme → theme}/theme-schema.json +0 -0
  333. /package/src/{modes/theme → theme}/theme.ts +0 -0
package/src/lsp/index.ts CHANGED
@@ -3,9 +3,7 @@ import path from "node:path";
3
3
  import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@nghyane/arcane-agent";
4
4
  import { logger, once, untilAborted } from "@nghyane/arcane-utils";
5
5
  import type { BunFile } from "bun";
6
- import { renderPromptTemplate } from "../config/prompt-templates";
7
- import { type Theme, theme } from "../modes/theme/theme";
8
- import lspDescription from "../prompts/tools/lsp.md" with { type: "text" };
6
+ import { type Theme, theme } from "../theme/theme";
9
7
  import type { ToolSession } from "../tools";
10
8
  import { resolveToCwd } from "../tools/path-utils";
11
9
  import { ToolAbortError, throwIfAborted } from "../tools/tool-errors";
@@ -112,7 +110,10 @@ export async function warmupLspServers(cwd: string, options?: LspWarmupOptions):
112
110
  });
113
111
  } else {
114
112
  const errorMsg = result.reason?.message ?? String(result.reason);
115
- logger.warn("LSP server failed to start", { server: name, error: errorMsg });
113
+ logger.warn("LSP server failed to start", {
114
+ server: name,
115
+ error: errorMsg,
116
+ });
116
117
  servers.push({
117
118
  name,
118
119
  status: "error",
@@ -286,22 +287,38 @@ interface ProjectType {
286
287
  function detectProjectType(cwd: string): ProjectType {
287
288
  // Check for Rust (Cargo.toml)
288
289
  if (fs.existsSync(path.join(cwd, "Cargo.toml"))) {
289
- return { type: "rust", command: ["cargo", "check", "--message-format=short"], description: "Rust (cargo check)" };
290
+ return {
291
+ type: "rust",
292
+ command: ["cargo", "check", "--message-format=short"],
293
+ description: "Rust (cargo check)",
294
+ };
290
295
  }
291
296
 
292
297
  // Check for TypeScript (tsconfig.json)
293
298
  if (fs.existsSync(path.join(cwd, "tsconfig.json"))) {
294
- return { type: "typescript", command: ["npx", "tsc", "--noEmit"], description: "TypeScript (tsc --noEmit)" };
299
+ return {
300
+ type: "typescript",
301
+ command: ["npx", "tsc", "--noEmit"],
302
+ description: "TypeScript (tsc --noEmit)",
303
+ };
295
304
  }
296
305
 
297
306
  // Check for Go (go.mod)
298
307
  if (fs.existsSync(path.join(cwd, "go.mod"))) {
299
- return { type: "go", command: ["go", "build", "./..."], description: "Go (go build)" };
308
+ return {
309
+ type: "go",
310
+ command: ["go", "build", "./..."],
311
+ description: "Go (go build)",
312
+ };
300
313
  }
301
314
 
302
315
  // Check for Python (pyproject.toml or pyrightconfig.json)
303
316
  if (fs.existsSync(path.join(cwd, "pyproject.toml")) || fs.existsSync(path.join(cwd, "pyrightconfig.json"))) {
304
- return { type: "python", command: ["pyright"], description: "Python (pyright)" };
317
+ return {
318
+ type: "python",
319
+ command: ["pyright"],
320
+ description: "Python (pyright)",
321
+ };
305
322
  }
306
323
 
307
324
  return { type: "unknown", description: "Unknown project type" };
@@ -344,14 +361,20 @@ async function runWorkspaceDiagnostics(
344
361
  // Limit output length
345
362
  const lines = combined.split("\n");
346
363
  if (lines.length > 50) {
347
- return { output: `${lines.slice(0, 50).join("\n")}\n... and ${lines.length - 50} more lines`, projectType };
364
+ return {
365
+ output: `${lines.slice(0, 50).join("\n")}\n... and ${lines.length - 50} more lines`,
366
+ projectType,
367
+ };
348
368
  }
349
369
  return { output: combined, projectType };
350
370
  } catch (e) {
351
371
  if (signal?.aborted) {
352
372
  throw new ToolAbortError();
353
373
  }
354
- return { output: `Failed to run ${projectType.command.join(" ")}: ${e}`, projectType };
374
+ return {
375
+ output: `Failed to run ${projectType.command.join(" ")}: ${e}`,
376
+ projectType,
377
+ };
355
378
  } finally {
356
379
  signal?.removeEventListener("abort", abortHandler);
357
380
  }
@@ -639,7 +662,10 @@ export async function flushLspWritethroughBatch(
639
662
  return flushWritethroughBatch(Array.from(state.entries.values()), cwd, state.options, signal);
640
663
  }
641
664
 
642
- function summarizeDiagnosticMessages(messages: string[]): { summary: string; errored: boolean } {
665
+ function summarizeDiagnosticMessages(messages: string[]): {
666
+ summary: string;
667
+ errored: boolean;
668
+ } {
643
669
  const counts = { error: 0, warning: 0, info: 0, hint: 0 };
644
670
  for (const message of messages) {
645
671
  const match = message.match(/\[(error|warning|info|hint)\]/i);
@@ -864,16 +890,13 @@ export function createLspWritethrough(cwd: string, options?: WritethroughOptions
864
890
  export class LspTool implements AgentTool<typeof lspSchema, LspToolDetails, Theme> {
865
891
  readonly name = "lsp";
866
892
  readonly label = "LSP";
867
- readonly description: string;
893
+ readonly description =
894
+ "Run LSP operations: diagnostics, go-to-definition, references, hover, symbols, rename. Output is shown to the user, so do not repeat or summarize the results.";
868
895
  readonly parameters = lspSchema;
869
896
  readonly renderCall = renderCall;
870
897
  readonly renderResult = renderResult;
871
- readonly mergeCallAndResult = true;
872
- readonly inline = true;
873
898
 
874
- constructor(private readonly session: ToolSession) {
875
- this.description = renderPromptTemplate(lspDescription);
876
- }
899
+ constructor(private readonly session: ToolSession) {}
877
900
 
878
901
  static createIf(session: ToolSession): LspTool | null {
879
902
  return session.enableLsp === false ? null : new LspTool(session);
@@ -988,7 +1011,11 @@ export class LspTool implements AgentTool<typeof lspSchema, LspToolDetails, Them
988
1011
  if (uniqueDiagnostics.length === 0) {
989
1012
  return {
990
1013
  content: [{ type: "text", text: "No diagnostics" }],
991
- details: { action, serverName: Array.from(allServerNames).join(", "), success: true },
1014
+ details: {
1015
+ action,
1016
+ serverName: Array.from(allServerNames).join(", "),
1017
+ success: true,
1018
+ },
992
1019
  };
993
1020
  }
994
1021
 
@@ -997,7 +1024,11 @@ export class LspTool implements AgentTool<typeof lspSchema, LspToolDetails, Them
997
1024
  const output = `${summary}:\n${formatted.map(f => ` ${f}`).join("\n")}`;
998
1025
  return {
999
1026
  content: [{ type: "text", text: output }],
1000
- details: { action, serverName: Array.from(allServerNames).join(", "), success: true },
1027
+ details: {
1028
+ action,
1029
+ serverName: Array.from(allServerNames).join(", "),
1030
+ success: true,
1031
+ },
1001
1032
  };
1002
1033
  }
1003
1034
 
@@ -1014,7 +1045,11 @@ export class LspTool implements AgentTool<typeof lspSchema, LspToolDetails, Them
1014
1045
 
1015
1046
  return {
1016
1047
  content: [{ type: "text", text: results.join("\n") }],
1017
- details: { action, serverName: Array.from(allServerNames).join(", "), success: true },
1048
+ details: {
1049
+ action,
1050
+ serverName: Array.from(allServerNames).join(", "),
1051
+ success: true,
1052
+ },
1018
1053
  };
1019
1054
  }
1020
1055
 
@@ -1022,7 +1057,12 @@ export class LspTool implements AgentTool<typeof lspSchema, LspToolDetails, Them
1022
1057
 
1023
1058
  if (requiresFile) {
1024
1059
  return {
1025
- content: [{ type: "text", text: "Error: file parameter required for this action" }],
1060
+ content: [
1061
+ {
1062
+ type: "text",
1063
+ text: "Error: file parameter required for this action",
1064
+ },
1065
+ ],
1026
1066
  details: { action, success: false },
1027
1067
  };
1028
1068
  }
@@ -1081,7 +1121,12 @@ export class LspTool implements AgentTool<typeof lspSchema, LspToolDetails, Them
1081
1121
  if ("targetUri" in loc) {
1082
1122
  // Use targetSelectionRange (the precise identifier range) with fallback to targetRange
1083
1123
  const link = loc as LocationLink;
1084
- return [{ uri: link.targetUri, range: link.targetSelectionRange ?? link.targetRange }];
1124
+ return [
1125
+ {
1126
+ uri: link.targetUri,
1127
+ range: link.targetSelectionRange ?? link.targetRange,
1128
+ },
1129
+ ];
1085
1130
  }
1086
1131
  return [];
1087
1132
  });
@@ -1143,7 +1188,10 @@ export class LspTool implements AgentTool<typeof lspSchema, LspToolDetails, Them
1143
1188
  if (!query) {
1144
1189
  return {
1145
1190
  content: [
1146
- { type: "text", text: "Error: query parameter required for workspace symbol search" },
1191
+ {
1192
+ type: "text",
1193
+ text: "Error: query parameter required for workspace symbol search",
1194
+ },
1147
1195
  ],
1148
1196
  details: { action, serverName, success: false },
1149
1197
  };
@@ -1191,7 +1239,12 @@ export class LspTool implements AgentTool<typeof lspSchema, LspToolDetails, Them
1191
1239
  case "rename": {
1192
1240
  if (!new_name) {
1193
1241
  return {
1194
- content: [{ type: "text", text: "Error: new_name parameter required for rename" }],
1242
+ content: [
1243
+ {
1244
+ type: "text",
1245
+ text: "Error: new_name parameter required for rename",
1246
+ },
1247
+ ],
1195
1248
  details: { action, serverName, success: false },
1196
1249
  };
1197
1250
  }