@oh-my-pi/pi-coding-agent 1.337.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 (224) hide show
  1. package/CHANGELOG.md +1228 -0
  2. package/README.md +1041 -0
  3. package/docs/compaction.md +403 -0
  4. package/docs/custom-tools.md +541 -0
  5. package/docs/extension-loading.md +1004 -0
  6. package/docs/hooks.md +867 -0
  7. package/docs/rpc.md +1040 -0
  8. package/docs/sdk.md +994 -0
  9. package/docs/session-tree-plan.md +441 -0
  10. package/docs/session.md +240 -0
  11. package/docs/skills.md +290 -0
  12. package/docs/theme.md +637 -0
  13. package/docs/tree.md +197 -0
  14. package/docs/tui.md +341 -0
  15. package/examples/README.md +21 -0
  16. package/examples/custom-tools/README.md +124 -0
  17. package/examples/custom-tools/hello/index.ts +20 -0
  18. package/examples/custom-tools/question/index.ts +84 -0
  19. package/examples/custom-tools/subagent/README.md +172 -0
  20. package/examples/custom-tools/subagent/agents/planner.md +37 -0
  21. package/examples/custom-tools/subagent/agents/reviewer.md +35 -0
  22. package/examples/custom-tools/subagent/agents/scout.md +50 -0
  23. package/examples/custom-tools/subagent/agents/worker.md +24 -0
  24. package/examples/custom-tools/subagent/agents.ts +156 -0
  25. package/examples/custom-tools/subagent/commands/implement-and-review.md +10 -0
  26. package/examples/custom-tools/subagent/commands/implement.md +10 -0
  27. package/examples/custom-tools/subagent/commands/scout-and-plan.md +9 -0
  28. package/examples/custom-tools/subagent/index.ts +1002 -0
  29. package/examples/custom-tools/todo/index.ts +212 -0
  30. package/examples/hooks/README.md +56 -0
  31. package/examples/hooks/auto-commit-on-exit.ts +49 -0
  32. package/examples/hooks/confirm-destructive.ts +59 -0
  33. package/examples/hooks/custom-compaction.ts +116 -0
  34. package/examples/hooks/dirty-repo-guard.ts +52 -0
  35. package/examples/hooks/file-trigger.ts +41 -0
  36. package/examples/hooks/git-checkpoint.ts +53 -0
  37. package/examples/hooks/handoff.ts +150 -0
  38. package/examples/hooks/permission-gate.ts +34 -0
  39. package/examples/hooks/protected-paths.ts +30 -0
  40. package/examples/hooks/qna.ts +119 -0
  41. package/examples/hooks/snake.ts +343 -0
  42. package/examples/hooks/status-line.ts +40 -0
  43. package/examples/sdk/01-minimal.ts +22 -0
  44. package/examples/sdk/02-custom-model.ts +49 -0
  45. package/examples/sdk/03-custom-prompt.ts +44 -0
  46. package/examples/sdk/04-skills.ts +44 -0
  47. package/examples/sdk/05-tools.ts +90 -0
  48. package/examples/sdk/06-hooks.ts +61 -0
  49. package/examples/sdk/07-context-files.ts +36 -0
  50. package/examples/sdk/08-slash-commands.ts +42 -0
  51. package/examples/sdk/09-api-keys-and-oauth.ts +55 -0
  52. package/examples/sdk/10-settings.ts +38 -0
  53. package/examples/sdk/11-sessions.ts +48 -0
  54. package/examples/sdk/12-full-control.ts +95 -0
  55. package/examples/sdk/README.md +154 -0
  56. package/package.json +81 -0
  57. package/src/cli/args.ts +246 -0
  58. package/src/cli/file-processor.ts +72 -0
  59. package/src/cli/list-models.ts +104 -0
  60. package/src/cli/plugin-cli.ts +650 -0
  61. package/src/cli/session-picker.ts +41 -0
  62. package/src/cli.ts +10 -0
  63. package/src/commands/init.md +20 -0
  64. package/src/config.ts +159 -0
  65. package/src/core/agent-session.ts +1900 -0
  66. package/src/core/auth-storage.ts +236 -0
  67. package/src/core/bash-executor.ts +196 -0
  68. package/src/core/compaction/branch-summarization.ts +343 -0
  69. package/src/core/compaction/compaction.ts +742 -0
  70. package/src/core/compaction/index.ts +7 -0
  71. package/src/core/compaction/utils.ts +154 -0
  72. package/src/core/custom-tools/index.ts +21 -0
  73. package/src/core/custom-tools/loader.ts +248 -0
  74. package/src/core/custom-tools/types.ts +169 -0
  75. package/src/core/custom-tools/wrapper.ts +28 -0
  76. package/src/core/exec.ts +129 -0
  77. package/src/core/export-html/index.ts +211 -0
  78. package/src/core/export-html/template.css +781 -0
  79. package/src/core/export-html/template.html +54 -0
  80. package/src/core/export-html/template.js +1185 -0
  81. package/src/core/export-html/vendor/highlight.min.js +1213 -0
  82. package/src/core/export-html/vendor/marked.min.js +6 -0
  83. package/src/core/hooks/index.ts +16 -0
  84. package/src/core/hooks/loader.ts +312 -0
  85. package/src/core/hooks/runner.ts +434 -0
  86. package/src/core/hooks/tool-wrapper.ts +99 -0
  87. package/src/core/hooks/types.ts +773 -0
  88. package/src/core/index.ts +52 -0
  89. package/src/core/mcp/client.ts +158 -0
  90. package/src/core/mcp/config.ts +154 -0
  91. package/src/core/mcp/index.ts +45 -0
  92. package/src/core/mcp/loader.ts +68 -0
  93. package/src/core/mcp/manager.ts +181 -0
  94. package/src/core/mcp/tool-bridge.ts +148 -0
  95. package/src/core/mcp/transports/http.ts +316 -0
  96. package/src/core/mcp/transports/index.ts +6 -0
  97. package/src/core/mcp/transports/stdio.ts +252 -0
  98. package/src/core/mcp/types.ts +220 -0
  99. package/src/core/messages.ts +189 -0
  100. package/src/core/model-registry.ts +317 -0
  101. package/src/core/model-resolver.ts +393 -0
  102. package/src/core/plugins/doctor.ts +59 -0
  103. package/src/core/plugins/index.ts +38 -0
  104. package/src/core/plugins/installer.ts +189 -0
  105. package/src/core/plugins/loader.ts +338 -0
  106. package/src/core/plugins/manager.ts +672 -0
  107. package/src/core/plugins/parser.ts +105 -0
  108. package/src/core/plugins/paths.ts +32 -0
  109. package/src/core/plugins/types.ts +190 -0
  110. package/src/core/sdk.ts +760 -0
  111. package/src/core/session-manager.ts +1128 -0
  112. package/src/core/settings-manager.ts +443 -0
  113. package/src/core/skills.ts +437 -0
  114. package/src/core/slash-commands.ts +248 -0
  115. package/src/core/system-prompt.ts +439 -0
  116. package/src/core/timings.ts +25 -0
  117. package/src/core/tools/ask.ts +211 -0
  118. package/src/core/tools/bash-interceptor.ts +120 -0
  119. package/src/core/tools/bash.ts +250 -0
  120. package/src/core/tools/context.ts +32 -0
  121. package/src/core/tools/edit-diff.ts +475 -0
  122. package/src/core/tools/edit.ts +208 -0
  123. package/src/core/tools/exa/company.ts +59 -0
  124. package/src/core/tools/exa/index.ts +64 -0
  125. package/src/core/tools/exa/linkedin.ts +59 -0
  126. package/src/core/tools/exa/logger.ts +56 -0
  127. package/src/core/tools/exa/mcp-client.ts +368 -0
  128. package/src/core/tools/exa/render.ts +196 -0
  129. package/src/core/tools/exa/researcher.ts +90 -0
  130. package/src/core/tools/exa/search.ts +337 -0
  131. package/src/core/tools/exa/types.ts +168 -0
  132. package/src/core/tools/exa/websets.ts +248 -0
  133. package/src/core/tools/find.ts +261 -0
  134. package/src/core/tools/grep.ts +555 -0
  135. package/src/core/tools/index.ts +202 -0
  136. package/src/core/tools/ls.ts +140 -0
  137. package/src/core/tools/lsp/client.ts +605 -0
  138. package/src/core/tools/lsp/config.ts +147 -0
  139. package/src/core/tools/lsp/edits.ts +101 -0
  140. package/src/core/tools/lsp/index.ts +804 -0
  141. package/src/core/tools/lsp/render.ts +447 -0
  142. package/src/core/tools/lsp/rust-analyzer.ts +145 -0
  143. package/src/core/tools/lsp/types.ts +463 -0
  144. package/src/core/tools/lsp/utils.ts +486 -0
  145. package/src/core/tools/notebook.ts +229 -0
  146. package/src/core/tools/path-utils.ts +61 -0
  147. package/src/core/tools/read.ts +240 -0
  148. package/src/core/tools/renderers.ts +540 -0
  149. package/src/core/tools/task/agents.ts +153 -0
  150. package/src/core/tools/task/artifacts.ts +114 -0
  151. package/src/core/tools/task/bundled-agents/browser.md +71 -0
  152. package/src/core/tools/task/bundled-agents/explore.md +82 -0
  153. package/src/core/tools/task/bundled-agents/plan.md +54 -0
  154. package/src/core/tools/task/bundled-agents/reviewer.md +59 -0
  155. package/src/core/tools/task/bundled-agents/task.md +53 -0
  156. package/src/core/tools/task/bundled-commands/architect-plan.md +10 -0
  157. package/src/core/tools/task/bundled-commands/implement-with-critic.md +11 -0
  158. package/src/core/tools/task/bundled-commands/implement.md +11 -0
  159. package/src/core/tools/task/commands.ts +213 -0
  160. package/src/core/tools/task/discovery.ts +208 -0
  161. package/src/core/tools/task/executor.ts +367 -0
  162. package/src/core/tools/task/index.ts +388 -0
  163. package/src/core/tools/task/model-resolver.ts +115 -0
  164. package/src/core/tools/task/parallel.ts +38 -0
  165. package/src/core/tools/task/render.ts +232 -0
  166. package/src/core/tools/task/types.ts +99 -0
  167. package/src/core/tools/truncate.ts +265 -0
  168. package/src/core/tools/web-fetch.ts +2370 -0
  169. package/src/core/tools/web-search/auth.ts +193 -0
  170. package/src/core/tools/web-search/index.ts +537 -0
  171. package/src/core/tools/web-search/providers/anthropic.ts +198 -0
  172. package/src/core/tools/web-search/providers/exa.ts +302 -0
  173. package/src/core/tools/web-search/providers/perplexity.ts +195 -0
  174. package/src/core/tools/web-search/render.ts +182 -0
  175. package/src/core/tools/web-search/types.ts +180 -0
  176. package/src/core/tools/write.ts +99 -0
  177. package/src/index.ts +176 -0
  178. package/src/main.ts +464 -0
  179. package/src/migrations.ts +135 -0
  180. package/src/modes/index.ts +43 -0
  181. package/src/modes/interactive/components/armin.ts +382 -0
  182. package/src/modes/interactive/components/assistant-message.ts +86 -0
  183. package/src/modes/interactive/components/bash-execution.ts +196 -0
  184. package/src/modes/interactive/components/bordered-loader.ts +41 -0
  185. package/src/modes/interactive/components/branch-summary-message.ts +42 -0
  186. package/src/modes/interactive/components/compaction-summary-message.ts +45 -0
  187. package/src/modes/interactive/components/custom-editor.ts +122 -0
  188. package/src/modes/interactive/components/diff.ts +147 -0
  189. package/src/modes/interactive/components/dynamic-border.ts +25 -0
  190. package/src/modes/interactive/components/footer.ts +381 -0
  191. package/src/modes/interactive/components/hook-editor.ts +117 -0
  192. package/src/modes/interactive/components/hook-input.ts +64 -0
  193. package/src/modes/interactive/components/hook-message.ts +96 -0
  194. package/src/modes/interactive/components/hook-selector.ts +91 -0
  195. package/src/modes/interactive/components/model-selector.ts +247 -0
  196. package/src/modes/interactive/components/oauth-selector.ts +120 -0
  197. package/src/modes/interactive/components/plugin-settings.ts +479 -0
  198. package/src/modes/interactive/components/queue-mode-selector.ts +56 -0
  199. package/src/modes/interactive/components/session-selector.ts +204 -0
  200. package/src/modes/interactive/components/settings-selector.ts +453 -0
  201. package/src/modes/interactive/components/show-images-selector.ts +45 -0
  202. package/src/modes/interactive/components/theme-selector.ts +62 -0
  203. package/src/modes/interactive/components/thinking-selector.ts +64 -0
  204. package/src/modes/interactive/components/tool-execution.ts +675 -0
  205. package/src/modes/interactive/components/tree-selector.ts +866 -0
  206. package/src/modes/interactive/components/user-message-selector.ts +159 -0
  207. package/src/modes/interactive/components/user-message.ts +18 -0
  208. package/src/modes/interactive/components/visual-truncate.ts +50 -0
  209. package/src/modes/interactive/components/welcome.ts +183 -0
  210. package/src/modes/interactive/interactive-mode.ts +2516 -0
  211. package/src/modes/interactive/theme/dark.json +101 -0
  212. package/src/modes/interactive/theme/light.json +98 -0
  213. package/src/modes/interactive/theme/theme-schema.json +308 -0
  214. package/src/modes/interactive/theme/theme.ts +998 -0
  215. package/src/modes/print-mode.ts +128 -0
  216. package/src/modes/rpc/rpc-client.ts +527 -0
  217. package/src/modes/rpc/rpc-mode.ts +483 -0
  218. package/src/modes/rpc/rpc-types.ts +203 -0
  219. package/src/utils/changelog.ts +99 -0
  220. package/src/utils/clipboard.ts +265 -0
  221. package/src/utils/fuzzy.ts +108 -0
  222. package/src/utils/mime.ts +30 -0
  223. package/src/utils/shell.ts +276 -0
  224. package/src/utils/tools-manager.ts +274 -0
@@ -0,0 +1,463 @@
1
+ import { type Static, Type } from "@sinclair/typebox";
2
+ import type { Subprocess } from "bun";
3
+
4
+ // =============================================================================
5
+ // Tool Schema
6
+ // =============================================================================
7
+
8
+ export const lspSchema = Type.Object({
9
+ action: Type.Union(
10
+ [
11
+ // Standard LSP operations
12
+ Type.Literal("diagnostics"),
13
+ Type.Literal("references"),
14
+ Type.Literal("definition"),
15
+ Type.Literal("hover"),
16
+ Type.Literal("symbols"),
17
+ Type.Literal("workspace_symbols"),
18
+ Type.Literal("rename"),
19
+ Type.Literal("actions"),
20
+ Type.Literal("incoming_calls"),
21
+ Type.Literal("outgoing_calls"),
22
+ Type.Literal("status"),
23
+ // Rust-analyzer specific operations
24
+ Type.Literal("flycheck"),
25
+ Type.Literal("expand_macro"),
26
+ Type.Literal("ssr"),
27
+ Type.Literal("runnables"),
28
+ Type.Literal("related_tests"),
29
+ Type.Literal("reload_workspace"),
30
+ ],
31
+ { description: "LSP action to perform" },
32
+ ),
33
+ files: Type.Optional(Type.Array(Type.String({ description: "File paths for diagnostics" }))),
34
+ file: Type.Optional(Type.String({ description: "File path for file-specific actions" })),
35
+ line: Type.Optional(Type.Number({ description: "1-based line number" })),
36
+ column: Type.Optional(Type.Number({ description: "1-based column number" })),
37
+ end_line: Type.Optional(Type.Number({ description: "1-based end line number for ranges" })),
38
+ end_character: Type.Optional(Type.Number({ description: "1-based end column number for ranges" })),
39
+ query: Type.Optional(Type.String({ description: "Search query for symbols/SSR pattern" })),
40
+ new_name: Type.Optional(Type.String({ description: "New name for rename action" })),
41
+ replacement: Type.Optional(Type.String({ description: "Replacement for SSR action" })),
42
+ kind: Type.Optional(Type.String({ description: "Code action kind filter (quickfix, refactor, source)" })),
43
+ apply: Type.Optional(Type.Boolean({ description: "Apply edits instead of preview (default: true)" })),
44
+ action_index: Type.Optional(Type.Number({ description: "Index of code action to apply" })),
45
+ include_declaration: Type.Optional(
46
+ Type.Boolean({ description: "Include declaration in references (default: true)" }),
47
+ ),
48
+ });
49
+
50
+ export type LspParams = Static<typeof lspSchema>;
51
+
52
+ export interface LspToolDetails {
53
+ serverName?: string;
54
+ action: string;
55
+ success: boolean;
56
+ }
57
+
58
+ // =============================================================================
59
+ // Core LSP Protocol Types
60
+ // =============================================================================
61
+
62
+ export interface Position {
63
+ line: number;
64
+ character: number;
65
+ }
66
+
67
+ export interface Range {
68
+ start: Position;
69
+ end: Position;
70
+ }
71
+
72
+ export interface Location {
73
+ uri: string;
74
+ range: Range;
75
+ }
76
+
77
+ export interface LocationLink {
78
+ originSelectionRange?: Range;
79
+ targetUri: string;
80
+ targetRange: Range;
81
+ targetSelectionRange: Range;
82
+ }
83
+
84
+ // =============================================================================
85
+ // Diagnostics
86
+ // =============================================================================
87
+
88
+ export type DiagnosticSeverity = 1 | 2 | 3 | 4; // error, warning, info, hint
89
+
90
+ export interface DiagnosticRelatedInformation {
91
+ location: Location;
92
+ message: string;
93
+ }
94
+
95
+ export interface Diagnostic {
96
+ range: Range;
97
+ severity?: DiagnosticSeverity;
98
+ code?: string | number;
99
+ codeDescription?: { href: string };
100
+ source?: string;
101
+ message: string;
102
+ tags?: number[];
103
+ relatedInformation?: DiagnosticRelatedInformation[];
104
+ data?: unknown;
105
+ }
106
+
107
+ // =============================================================================
108
+ // Text Edits
109
+ // =============================================================================
110
+
111
+ export interface TextEdit {
112
+ range: Range;
113
+ newText: string;
114
+ }
115
+
116
+ export interface AnnotatedTextEdit extends TextEdit {
117
+ annotationId?: string;
118
+ }
119
+
120
+ export interface TextDocumentIdentifier {
121
+ uri: string;
122
+ }
123
+
124
+ export interface VersionedTextDocumentIdentifier extends TextDocumentIdentifier {
125
+ version: number | null;
126
+ }
127
+
128
+ export interface OptionalVersionedTextDocumentIdentifier extends TextDocumentIdentifier {
129
+ version?: number | null;
130
+ }
131
+
132
+ export interface TextDocumentEdit {
133
+ textDocument: OptionalVersionedTextDocumentIdentifier;
134
+ edits: (TextEdit | AnnotatedTextEdit)[];
135
+ }
136
+
137
+ // =============================================================================
138
+ // Resource Operations
139
+ // =============================================================================
140
+
141
+ export interface CreateFileOptions {
142
+ overwrite?: boolean;
143
+ ignoreIfExists?: boolean;
144
+ }
145
+
146
+ export interface CreateFile {
147
+ kind: "create";
148
+ uri: string;
149
+ options?: CreateFileOptions;
150
+ }
151
+
152
+ export interface RenameFileOptions {
153
+ overwrite?: boolean;
154
+ ignoreIfExists?: boolean;
155
+ }
156
+
157
+ export interface RenameFile {
158
+ kind: "rename";
159
+ oldUri: string;
160
+ newUri: string;
161
+ options?: RenameFileOptions;
162
+ }
163
+
164
+ export interface DeleteFileOptions {
165
+ recursive?: boolean;
166
+ ignoreIfNotExists?: boolean;
167
+ }
168
+
169
+ export interface DeleteFile {
170
+ kind: "delete";
171
+ uri: string;
172
+ options?: DeleteFileOptions;
173
+ }
174
+
175
+ export type DocumentChange = TextDocumentEdit | CreateFile | RenameFile | DeleteFile;
176
+
177
+ export interface WorkspaceEdit {
178
+ changes?: Record<string, TextEdit[]>;
179
+ documentChanges?: DocumentChange[];
180
+ changeAnnotations?: Record<string, { label: string; needsConfirmation?: boolean; description?: string }>;
181
+ }
182
+
183
+ // =============================================================================
184
+ // Code Actions
185
+ // =============================================================================
186
+
187
+ export type CodeActionKind =
188
+ | "quickfix"
189
+ | "refactor"
190
+ | "refactor.extract"
191
+ | "refactor.inline"
192
+ | "refactor.rewrite"
193
+ | "source"
194
+ | "source.organizeImports"
195
+ | "source.fixAll"
196
+ | string;
197
+
198
+ export interface Command {
199
+ title: string;
200
+ command: string;
201
+ arguments?: unknown[];
202
+ }
203
+
204
+ export interface CodeAction {
205
+ title: string;
206
+ kind?: CodeActionKind;
207
+ diagnostics?: Diagnostic[];
208
+ isPreferred?: boolean;
209
+ disabled?: { reason: string };
210
+ edit?: WorkspaceEdit;
211
+ command?: Command;
212
+ data?: unknown;
213
+ }
214
+
215
+ export interface CodeActionContext {
216
+ diagnostics: Diagnostic[];
217
+ only?: CodeActionKind[];
218
+ triggerKind?: 1 | 2; // Invoked = 1, Automatic = 2
219
+ }
220
+
221
+ // =============================================================================
222
+ // Symbols
223
+ // =============================================================================
224
+
225
+ export type SymbolKind =
226
+ | 1 // File
227
+ | 2 // Module
228
+ | 3 // Namespace
229
+ | 4 // Package
230
+ | 5 // Class
231
+ | 6 // Method
232
+ | 7 // Property
233
+ | 8 // Field
234
+ | 9 // Constructor
235
+ | 10 // Enum
236
+ | 11 // Interface
237
+ | 12 // Function
238
+ | 13 // Variable
239
+ | 14 // Constant
240
+ | 15 // String
241
+ | 16 // Number
242
+ | 17 // Boolean
243
+ | 18 // Array
244
+ | 19 // Object
245
+ | 20 // Key
246
+ | 21 // Null
247
+ | 22 // EnumMember
248
+ | 23 // Struct
249
+ | 24 // Event
250
+ | 25 // Operator
251
+ | 26; // TypeParameter
252
+
253
+ export const SYMBOL_KIND_NAMES: Record<SymbolKind, string> = {
254
+ 1: "File",
255
+ 2: "Module",
256
+ 3: "Namespace",
257
+ 4: "Package",
258
+ 5: "Class",
259
+ 6: "Method",
260
+ 7: "Property",
261
+ 8: "Field",
262
+ 9: "Constructor",
263
+ 10: "Enum",
264
+ 11: "Interface",
265
+ 12: "Function",
266
+ 13: "Variable",
267
+ 14: "Constant",
268
+ 15: "String",
269
+ 16: "Number",
270
+ 17: "Boolean",
271
+ 18: "Array",
272
+ 19: "Object",
273
+ 20: "Key",
274
+ 21: "Null",
275
+ 22: "EnumMember",
276
+ 23: "Struct",
277
+ 24: "Event",
278
+ 25: "Operator",
279
+ 26: "TypeParameter",
280
+ };
281
+
282
+ export interface DocumentSymbol {
283
+ name: string;
284
+ detail?: string;
285
+ kind: SymbolKind;
286
+ tags?: number[];
287
+ deprecated?: boolean;
288
+ range: Range;
289
+ selectionRange: Range;
290
+ children?: DocumentSymbol[];
291
+ }
292
+
293
+ export interface SymbolInformation {
294
+ name: string;
295
+ kind: SymbolKind;
296
+ tags?: number[];
297
+ deprecated?: boolean;
298
+ location: Location;
299
+ containerName?: string;
300
+ }
301
+
302
+ // =============================================================================
303
+ // Hover
304
+ // =============================================================================
305
+
306
+ export interface MarkupContent {
307
+ kind: "plaintext" | "markdown";
308
+ value: string;
309
+ }
310
+
311
+ export type MarkedString = string | { language: string; value: string };
312
+
313
+ export interface Hover {
314
+ contents: MarkupContent | MarkedString | MarkedString[];
315
+ range?: Range;
316
+ }
317
+
318
+ // =============================================================================
319
+ // Server Configuration
320
+ // =============================================================================
321
+
322
+ export interface ServerCapabilities {
323
+ flycheck?: boolean;
324
+ ssr?: boolean;
325
+ expandMacro?: boolean;
326
+ runnables?: boolean;
327
+ relatedTests?: boolean;
328
+ }
329
+
330
+ export interface ServerConfig {
331
+ command: string;
332
+ args?: string[];
333
+ fileTypes: string[];
334
+ rootMarkers: string[];
335
+ initOptions?: Record<string, unknown>;
336
+ settings?: Record<string, unknown>;
337
+ disabled?: boolean;
338
+ capabilities?: ServerCapabilities;
339
+ }
340
+
341
+ // =============================================================================
342
+ // Client State
343
+ // =============================================================================
344
+
345
+ export interface OpenFile {
346
+ version: number;
347
+ languageId: string;
348
+ }
349
+
350
+ export interface PendingRequest {
351
+ resolve: (result: unknown) => void;
352
+ reject: (error: Error) => void;
353
+ method: string;
354
+ }
355
+
356
+ export interface LspServerCapabilities {
357
+ renameProvider?: boolean | { prepareProvider?: boolean };
358
+ codeActionProvider?: boolean | { resolveProvider?: boolean };
359
+ hoverProvider?: boolean;
360
+ definitionProvider?: boolean;
361
+ referencesProvider?: boolean;
362
+ documentSymbolProvider?: boolean;
363
+ workspaceSymbolProvider?: boolean;
364
+ [key: string]: unknown;
365
+ }
366
+
367
+ export interface LspClient {
368
+ name: string;
369
+ cwd: string;
370
+ config: ServerConfig;
371
+ process: Subprocess;
372
+ requestId: number;
373
+ diagnostics: Map<string, Diagnostic[]>;
374
+ openFiles: Map<string, OpenFile>;
375
+ pendingRequests: Map<number, PendingRequest>;
376
+ messageBuffer: Uint8Array;
377
+ isReading: boolean;
378
+ serverCapabilities?: LspServerCapabilities;
379
+ lastActivity: number;
380
+ }
381
+
382
+ // =============================================================================
383
+ // Call Hierarchy Types
384
+ // =============================================================================
385
+
386
+ export interface CallHierarchyItem {
387
+ name: string;
388
+ kind: SymbolKind;
389
+ tags?: number[];
390
+ detail?: string;
391
+ uri: string;
392
+ range: Range;
393
+ selectionRange: Range;
394
+ data?: unknown;
395
+ }
396
+
397
+ export interface CallHierarchyIncomingCall {
398
+ from: CallHierarchyItem;
399
+ fromRanges: Range[];
400
+ }
401
+
402
+ export interface CallHierarchyOutgoingCall {
403
+ to: CallHierarchyItem;
404
+ fromRanges: Range[];
405
+ }
406
+
407
+ // =============================================================================
408
+ // Rust-analyzer Specific Types
409
+ // =============================================================================
410
+
411
+ export interface ExpandMacroResult {
412
+ name: string;
413
+ expansion: string;
414
+ }
415
+
416
+ export interface Runnable {
417
+ label: string;
418
+ kind: string;
419
+ args?: {
420
+ workspaceRoot?: string;
421
+ cargoArgs?: string[];
422
+ cargoExtraArgs?: string[];
423
+ executableArgs?: string[];
424
+ };
425
+ location?: {
426
+ targetUri: string;
427
+ targetRange?: Range;
428
+ targetSelectionRange?: Range;
429
+ };
430
+ }
431
+
432
+ export interface RelatedTest {
433
+ runnable?: {
434
+ label: string;
435
+ kind: string;
436
+ args?: Runnable["args"];
437
+ location?: Runnable["location"];
438
+ };
439
+ }
440
+
441
+ // =============================================================================
442
+ // JSON-RPC Protocol Types
443
+ // =============================================================================
444
+
445
+ export interface LspJsonRpcRequest {
446
+ jsonrpc: "2.0";
447
+ id: number;
448
+ method: string;
449
+ params: unknown;
450
+ }
451
+
452
+ export interface LspJsonRpcResponse {
453
+ jsonrpc: "2.0";
454
+ id?: number;
455
+ result?: unknown;
456
+ error?: { code: number; message: string; data?: unknown };
457
+ }
458
+
459
+ export interface LspJsonRpcNotification {
460
+ jsonrpc: "2.0";
461
+ method: string;
462
+ params?: unknown;
463
+ }