wave-agent-sdk 0.0.7 → 0.0.10

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 (240) hide show
  1. package/dist/agent.d.ts +105 -24
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +438 -53
  4. package/dist/index.d.ts +4 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +4 -0
  7. package/dist/managers/aiManager.d.ts +18 -7
  8. package/dist/managers/aiManager.d.ts.map +1 -1
  9. package/dist/managers/aiManager.js +254 -142
  10. package/dist/managers/backgroundBashManager.d.ts.map +1 -1
  11. package/dist/managers/backgroundBashManager.js +11 -9
  12. package/dist/managers/hookManager.d.ts +6 -6
  13. package/dist/managers/hookManager.d.ts.map +1 -1
  14. package/dist/managers/hookManager.js +81 -39
  15. package/dist/managers/liveConfigManager.d.ts +95 -0
  16. package/dist/managers/liveConfigManager.d.ts.map +1 -0
  17. package/dist/managers/liveConfigManager.js +442 -0
  18. package/dist/managers/lspManager.d.ts +43 -0
  19. package/dist/managers/lspManager.d.ts.map +1 -0
  20. package/dist/managers/lspManager.js +326 -0
  21. package/dist/managers/messageManager.d.ts +41 -24
  22. package/dist/managers/messageManager.d.ts.map +1 -1
  23. package/dist/managers/messageManager.js +184 -73
  24. package/dist/managers/permissionManager.d.ts +66 -0
  25. package/dist/managers/permissionManager.d.ts.map +1 -0
  26. package/dist/managers/permissionManager.js +208 -0
  27. package/dist/managers/skillManager.d.ts +1 -0
  28. package/dist/managers/skillManager.d.ts.map +1 -1
  29. package/dist/managers/skillManager.js +2 -1
  30. package/dist/managers/slashCommandManager.d.ts.map +1 -1
  31. package/dist/managers/slashCommandManager.js +4 -2
  32. package/dist/managers/subagentManager.d.ts +42 -6
  33. package/dist/managers/subagentManager.d.ts.map +1 -1
  34. package/dist/managers/subagentManager.js +213 -62
  35. package/dist/managers/toolManager.d.ts +38 -1
  36. package/dist/managers/toolManager.d.ts.map +1 -1
  37. package/dist/managers/toolManager.js +66 -2
  38. package/dist/services/aiService.d.ts +15 -5
  39. package/dist/services/aiService.d.ts.map +1 -1
  40. package/dist/services/aiService.js +446 -77
  41. package/dist/services/configurationService.d.ts +116 -0
  42. package/dist/services/configurationService.d.ts.map +1 -0
  43. package/dist/services/configurationService.js +585 -0
  44. package/dist/services/fileWatcher.d.ts +69 -0
  45. package/dist/services/fileWatcher.d.ts.map +1 -0
  46. package/dist/services/fileWatcher.js +212 -0
  47. package/dist/services/hook.d.ts +5 -40
  48. package/dist/services/hook.d.ts.map +1 -1
  49. package/dist/services/hook.js +47 -109
  50. package/dist/services/jsonlHandler.d.ts +71 -0
  51. package/dist/services/jsonlHandler.d.ts.map +1 -0
  52. package/dist/services/jsonlHandler.js +236 -0
  53. package/dist/services/memory.d.ts.map +1 -1
  54. package/dist/services/memory.js +33 -11
  55. package/dist/services/session.d.ts +116 -52
  56. package/dist/services/session.d.ts.map +1 -1
  57. package/dist/services/session.js +415 -143
  58. package/dist/tools/bashTool.d.ts.map +1 -1
  59. package/dist/tools/bashTool.js +77 -17
  60. package/dist/tools/deleteFileTool.d.ts.map +1 -1
  61. package/dist/tools/deleteFileTool.js +27 -1
  62. package/dist/tools/editTool.d.ts.map +1 -1
  63. package/dist/tools/editTool.js +33 -8
  64. package/dist/tools/lspTool.d.ts +6 -0
  65. package/dist/tools/lspTool.d.ts.map +1 -0
  66. package/dist/tools/lspTool.js +589 -0
  67. package/dist/tools/multiEditTool.d.ts.map +1 -1
  68. package/dist/tools/multiEditTool.js +30 -10
  69. package/dist/tools/readTool.d.ts.map +1 -1
  70. package/dist/tools/readTool.js +113 -3
  71. package/dist/tools/skillTool.js +2 -2
  72. package/dist/tools/todoWriteTool.d.ts.map +1 -1
  73. package/dist/tools/todoWriteTool.js +23 -0
  74. package/dist/tools/types.d.ts +11 -8
  75. package/dist/tools/types.d.ts.map +1 -1
  76. package/dist/tools/writeTool.d.ts.map +1 -1
  77. package/dist/tools/writeTool.js +30 -15
  78. package/dist/types/commands.d.ts +4 -1
  79. package/dist/types/commands.d.ts.map +1 -1
  80. package/dist/types/config.d.ts +4 -0
  81. package/dist/types/config.d.ts.map +1 -1
  82. package/dist/types/configuration.d.ts +69 -0
  83. package/dist/types/configuration.d.ts.map +1 -0
  84. package/dist/types/configuration.js +8 -0
  85. package/dist/types/core.d.ts +45 -0
  86. package/dist/types/core.d.ts.map +1 -1
  87. package/dist/types/environment.d.ts +83 -0
  88. package/dist/types/environment.d.ts.map +1 -0
  89. package/dist/types/environment.js +21 -0
  90. package/dist/types/fileSearch.d.ts +5 -0
  91. package/dist/types/fileSearch.d.ts.map +1 -0
  92. package/dist/types/fileSearch.js +1 -0
  93. package/dist/types/hooks.d.ts +18 -3
  94. package/dist/types/hooks.d.ts.map +1 -1
  95. package/dist/types/hooks.js +8 -8
  96. package/dist/types/index.d.ts +7 -0
  97. package/dist/types/index.d.ts.map +1 -1
  98. package/dist/types/index.js +7 -0
  99. package/dist/types/lsp.d.ts +90 -0
  100. package/dist/types/lsp.d.ts.map +1 -0
  101. package/dist/types/lsp.js +4 -0
  102. package/dist/types/messaging.d.ts +19 -12
  103. package/dist/types/messaging.d.ts.map +1 -1
  104. package/dist/types/permissions.d.ts +35 -0
  105. package/dist/types/permissions.d.ts.map +1 -0
  106. package/dist/types/permissions.js +12 -0
  107. package/dist/types/session.d.ts +15 -0
  108. package/dist/types/session.d.ts.map +1 -0
  109. package/dist/types/session.js +7 -0
  110. package/dist/types/skills.d.ts +1 -0
  111. package/dist/types/skills.d.ts.map +1 -1
  112. package/dist/types/tools.d.ts +35 -0
  113. package/dist/types/tools.d.ts.map +1 -0
  114. package/dist/types/tools.js +4 -0
  115. package/dist/utils/abortUtils.d.ts +34 -0
  116. package/dist/utils/abortUtils.d.ts.map +1 -0
  117. package/dist/utils/abortUtils.js +92 -0
  118. package/dist/utils/bashHistory.d.ts +4 -0
  119. package/dist/utils/bashHistory.d.ts.map +1 -1
  120. package/dist/utils/bashHistory.js +48 -30
  121. package/dist/utils/builtinSubagents.d.ts +7 -0
  122. package/dist/utils/builtinSubagents.d.ts.map +1 -0
  123. package/dist/utils/builtinSubagents.js +65 -0
  124. package/dist/utils/cacheControlUtils.d.ts +96 -0
  125. package/dist/utils/cacheControlUtils.d.ts.map +1 -0
  126. package/dist/utils/cacheControlUtils.js +324 -0
  127. package/dist/utils/commandPathResolver.d.ts +52 -0
  128. package/dist/utils/commandPathResolver.d.ts.map +1 -0
  129. package/dist/utils/commandPathResolver.js +145 -0
  130. package/dist/utils/configPaths.d.ts +85 -0
  131. package/dist/utils/configPaths.d.ts.map +1 -0
  132. package/dist/utils/configPaths.js +121 -0
  133. package/dist/utils/constants.d.ts +1 -13
  134. package/dist/utils/constants.d.ts.map +1 -1
  135. package/dist/utils/constants.js +2 -14
  136. package/dist/utils/convertMessagesForAPI.d.ts +2 -1
  137. package/dist/utils/convertMessagesForAPI.d.ts.map +1 -1
  138. package/dist/utils/convertMessagesForAPI.js +39 -18
  139. package/dist/utils/customCommands.d.ts.map +1 -1
  140. package/dist/utils/customCommands.js +66 -21
  141. package/dist/utils/fileSearch.d.ts +14 -0
  142. package/dist/utils/fileSearch.d.ts.map +1 -0
  143. package/dist/utils/fileSearch.js +88 -0
  144. package/dist/utils/fileUtils.d.ts +27 -0
  145. package/dist/utils/fileUtils.d.ts.map +1 -0
  146. package/dist/utils/fileUtils.js +145 -0
  147. package/dist/utils/globalLogger.d.ts +88 -0
  148. package/dist/utils/globalLogger.d.ts.map +1 -0
  149. package/dist/utils/globalLogger.js +120 -0
  150. package/dist/utils/largeOutputHandler.d.ts +15 -0
  151. package/dist/utils/largeOutputHandler.d.ts.map +1 -0
  152. package/dist/utils/largeOutputHandler.js +40 -0
  153. package/dist/utils/markdownParser.d.ts.map +1 -1
  154. package/dist/utils/markdownParser.js +1 -17
  155. package/dist/utils/mcpUtils.d.ts.map +1 -1
  156. package/dist/utils/mcpUtils.js +25 -3
  157. package/dist/utils/messageOperations.d.ts +20 -18
  158. package/dist/utils/messageOperations.d.ts.map +1 -1
  159. package/dist/utils/messageOperations.js +30 -38
  160. package/dist/utils/pathEncoder.d.ts +108 -0
  161. package/dist/utils/pathEncoder.d.ts.map +1 -0
  162. package/dist/utils/pathEncoder.js +279 -0
  163. package/dist/utils/subagentParser.d.ts +2 -2
  164. package/dist/utils/subagentParser.d.ts.map +1 -1
  165. package/dist/utils/subagentParser.js +12 -8
  166. package/dist/utils/tokenCalculation.d.ts +26 -0
  167. package/dist/utils/tokenCalculation.d.ts.map +1 -0
  168. package/dist/utils/tokenCalculation.js +36 -0
  169. package/dist/utils/tokenEstimator.d.ts +39 -0
  170. package/dist/utils/tokenEstimator.d.ts.map +1 -0
  171. package/dist/utils/tokenEstimator.js +55 -0
  172. package/package.json +6 -6
  173. package/src/agent.ts +586 -78
  174. package/src/index.ts +4 -0
  175. package/src/managers/aiManager.ts +341 -192
  176. package/src/managers/backgroundBashManager.ts +11 -9
  177. package/src/managers/hookManager.ts +102 -54
  178. package/src/managers/liveConfigManager.ts +634 -0
  179. package/src/managers/lspManager.ts +434 -0
  180. package/src/managers/messageManager.ts +258 -121
  181. package/src/managers/permissionManager.ts +276 -0
  182. package/src/managers/skillManager.ts +3 -1
  183. package/src/managers/slashCommandManager.ts +5 -3
  184. package/src/managers/subagentManager.ts +295 -76
  185. package/src/managers/toolManager.ts +95 -3
  186. package/src/services/aiService.ts +656 -84
  187. package/src/services/configurationService.ts +762 -0
  188. package/src/services/fileWatcher.ts +300 -0
  189. package/src/services/hook.ts +54 -144
  190. package/src/services/jsonlHandler.ts +303 -0
  191. package/src/services/memory.ts +34 -11
  192. package/src/services/session.ts +522 -173
  193. package/src/tools/bashTool.ts +94 -20
  194. package/src/tools/deleteFileTool.ts +38 -1
  195. package/src/tools/editTool.ts +44 -9
  196. package/src/tools/lspTool.ts +760 -0
  197. package/src/tools/multiEditTool.ts +41 -11
  198. package/src/tools/readTool.ts +127 -3
  199. package/src/tools/skillTool.ts +2 -2
  200. package/src/tools/todoWriteTool.ts +33 -1
  201. package/src/tools/types.ts +15 -9
  202. package/src/tools/writeTool.ts +43 -16
  203. package/src/types/commands.ts +6 -1
  204. package/src/types/config.ts +5 -0
  205. package/src/types/configuration.ts +73 -0
  206. package/src/types/core.ts +55 -0
  207. package/src/types/environment.ts +104 -0
  208. package/src/types/fileSearch.ts +4 -0
  209. package/src/types/hooks.ts +32 -16
  210. package/src/types/index.ts +7 -0
  211. package/src/types/lsp.ts +96 -0
  212. package/src/types/messaging.ts +21 -14
  213. package/src/types/permissions.ts +48 -0
  214. package/src/types/session.ts +20 -0
  215. package/src/types/skills.ts +1 -0
  216. package/src/types/tools.ts +38 -0
  217. package/src/utils/abortUtils.ts +118 -0
  218. package/src/utils/bashHistory.ts +55 -31
  219. package/src/utils/builtinSubagents.ts +71 -0
  220. package/src/utils/cacheControlUtils.ts +475 -0
  221. package/src/utils/commandPathResolver.ts +189 -0
  222. package/src/utils/configPaths.ts +163 -0
  223. package/src/utils/constants.ts +2 -17
  224. package/src/utils/convertMessagesForAPI.ts +44 -18
  225. package/src/utils/customCommands.ts +90 -22
  226. package/src/utils/fileSearch.ts +107 -0
  227. package/src/utils/fileUtils.ts +160 -0
  228. package/src/utils/globalLogger.ts +128 -0
  229. package/src/utils/largeOutputHandler.ts +55 -0
  230. package/src/utils/markdownParser.ts +1 -19
  231. package/src/utils/mcpUtils.ts +34 -3
  232. package/src/utils/messageOperations.ts +47 -53
  233. package/src/utils/pathEncoder.ts +394 -0
  234. package/src/utils/subagentParser.ts +13 -9
  235. package/src/utils/tokenCalculation.ts +43 -0
  236. package/src/utils/tokenEstimator.ts +68 -0
  237. package/dist/utils/configResolver.d.ts +0 -38
  238. package/dist/utils/configResolver.d.ts.map +0 -1
  239. package/dist/utils/configResolver.js +0 -106
  240. package/src/utils/configResolver.ts +0 -142
@@ -0,0 +1,326 @@
1
+ import { spawn } from "child_process";
2
+ import { join, isAbsolute, extname } from "path";
3
+ import { promises as fs } from "fs";
4
+ export class LspManager {
5
+ constructor(options = {}) {
6
+ this.processes = new Map();
7
+ this.workdir = "";
8
+ this.config = {};
9
+ this.logger = options.logger;
10
+ }
11
+ async initialize(workdir) {
12
+ this.workdir = workdir;
13
+ await this.loadConfig();
14
+ }
15
+ registerServer(language, config) {
16
+ this.config[language] = config;
17
+ this.logger?.debug(`Registered LSP server for ${language}`);
18
+ }
19
+ async loadConfig() {
20
+ const lspJsonPath = join(this.workdir, ".lsp.json");
21
+ try {
22
+ const content = await fs.readFile(lspJsonPath, "utf-8");
23
+ const newConfig = JSON.parse(content);
24
+ this.config = { ...this.config, ...newConfig };
25
+ this.logger?.debug(`Loaded LSP config from ${lspJsonPath}`);
26
+ }
27
+ catch (error) {
28
+ if (error.code !== "ENOENT") {
29
+ this.logger?.error(`Failed to load .lsp.json: ${error}`);
30
+ }
31
+ }
32
+ }
33
+ async getProcessForFile(filePath) {
34
+ const extension = extname(filePath);
35
+ let language = null;
36
+ for (const [lang, cfg] of Object.entries(this.config)) {
37
+ if (cfg.extensionToLanguage[extension]) {
38
+ language = lang;
39
+ break;
40
+ }
41
+ }
42
+ if (!language)
43
+ return null;
44
+ let lspProc = this.processes.get(language);
45
+ if (!lspProc) {
46
+ const serverConfig = this.config[language];
47
+ const startedProc = await this.startServer(language, serverConfig);
48
+ if (startedProc) {
49
+ this.processes.set(language, startedProc);
50
+ lspProc = startedProc;
51
+ }
52
+ }
53
+ return lspProc || null;
54
+ }
55
+ async startServer(language, config) {
56
+ this.logger?.info(`Starting LSP server for ${language}: ${config.command} ${config.args?.join(" ") || ""}`);
57
+ try {
58
+ const proc = spawn(config.command, config.args || [], {
59
+ cwd: config.workspaceFolder || this.workdir,
60
+ env: { ...process.env, ...config.env },
61
+ stdio: ["pipe", "pipe", "pipe"],
62
+ });
63
+ const lspProc = {
64
+ process: proc,
65
+ config,
66
+ language,
67
+ initialized: false,
68
+ requestId: 0,
69
+ pendingRequests: new Map(),
70
+ openedFiles: new Set(),
71
+ };
72
+ let buffer = Buffer.alloc(0);
73
+ let contentLength = -1;
74
+ proc.stdout.on("data", (data) => {
75
+ buffer = Buffer.concat([buffer, data]);
76
+ while (true) {
77
+ const str = buffer.toString("utf-8");
78
+ if (contentLength === -1) {
79
+ const headerEnd = str.indexOf("\r\n\r\n");
80
+ if (headerEnd === -1)
81
+ break;
82
+ const headers = str.substring(0, headerEnd).split("\r\n");
83
+ const contentLengthHeader = headers.find((h) => h.startsWith("Content-Length: "));
84
+ if (contentLengthHeader) {
85
+ contentLength = parseInt(contentLengthHeader.substring(16), 10);
86
+ }
87
+ buffer = buffer.subarray(headerEnd + 4);
88
+ continue;
89
+ }
90
+ if (buffer.length >= contentLength) {
91
+ const content = buffer.subarray(0, contentLength).toString("utf-8");
92
+ buffer = buffer.subarray(contentLength);
93
+ contentLength = -1;
94
+ try {
95
+ const message = JSON.parse(content);
96
+ this.handleMessage(lspProc, message);
97
+ }
98
+ catch (e) {
99
+ this.logger?.error(`Failed to parse LSP message: ${e}`);
100
+ }
101
+ }
102
+ else {
103
+ break;
104
+ }
105
+ }
106
+ });
107
+ proc.stderr.on("data", (data) => {
108
+ this.logger?.debug(`LSP [${language}] stderr: ${data}`);
109
+ });
110
+ proc.on("close", (code) => {
111
+ this.logger?.info(`LSP server for ${language} exited with code ${code}`);
112
+ this.processes.delete(language);
113
+ });
114
+ // Initialize
115
+ await this.sendRequest(lspProc, "initialize", {
116
+ processId: process.pid,
117
+ rootUri: `file://${this.workdir}`,
118
+ capabilities: {},
119
+ initializationOptions: config.initializationOptions,
120
+ }, config.startupTimeout);
121
+ await this.sendNotification(lspProc, "initialized", {});
122
+ lspProc.initialized = true;
123
+ return lspProc;
124
+ }
125
+ catch (error) {
126
+ this.logger?.error(`Failed to start LSP server for ${language}: ${error}`);
127
+ return null;
128
+ }
129
+ }
130
+ handleMessage(lspProc, message) {
131
+ if (message.id !== undefined) {
132
+ const pending = lspProc.pendingRequests.get(message.id);
133
+ if (pending) {
134
+ lspProc.pendingRequests.delete(message.id);
135
+ if (message.error) {
136
+ pending.reject(message.error);
137
+ }
138
+ else {
139
+ pending.resolve(message.result);
140
+ }
141
+ }
142
+ }
143
+ }
144
+ async sendRequest(lspProc, method, params, timeout) {
145
+ const id = lspProc.requestId++;
146
+ const message = {
147
+ jsonrpc: "2.0",
148
+ id,
149
+ method,
150
+ params,
151
+ };
152
+ const json = JSON.stringify(message);
153
+ const header = `Content-Length: ${Buffer.byteLength(json, "utf-8")}\r\n\r\n`;
154
+ return new Promise((resolve, reject) => {
155
+ let timer;
156
+ if (timeout) {
157
+ timer = setTimeout(() => {
158
+ lspProc.pendingRequests.delete(id);
159
+ reject(new Error(`LSP request ${method} timed out after ${timeout}ms`));
160
+ }, timeout);
161
+ }
162
+ lspProc.pendingRequests.set(id, {
163
+ resolve: (value) => {
164
+ if (timer)
165
+ clearTimeout(timer);
166
+ resolve(value);
167
+ },
168
+ reject: (reason) => {
169
+ if (timer)
170
+ clearTimeout(timer);
171
+ reject(reason);
172
+ },
173
+ });
174
+ lspProc.process.stdin.write(header + json);
175
+ });
176
+ }
177
+ async sendNotification(lspProc, method, params) {
178
+ const message = {
179
+ jsonrpc: "2.0",
180
+ method,
181
+ params,
182
+ };
183
+ const json = JSON.stringify(message);
184
+ const header = `Content-Length: ${Buffer.byteLength(json, "utf-8")}\r\n\r\n`;
185
+ lspProc.process.stdin.write(header + json);
186
+ }
187
+ async execute(args) {
188
+ const { operation, filePath, line, character } = args;
189
+ const absolutePath = isAbsolute(filePath)
190
+ ? filePath
191
+ : join(this.workdir, filePath);
192
+ const lspProc = await this.getProcessForFile(absolutePath);
193
+ if (!lspProc) {
194
+ return {
195
+ success: false,
196
+ content: `No LSP server configured for file: ${filePath}`,
197
+ };
198
+ }
199
+ const uri = `file://${absolutePath}`;
200
+ const position = { line: line - 1, character: character - 1 };
201
+ if (!lspProc.openedFiles.has(absolutePath)) {
202
+ try {
203
+ const content = await fs.readFile(absolutePath, "utf-8");
204
+ await this.sendNotification(lspProc, "textDocument/didOpen", {
205
+ textDocument: {
206
+ uri,
207
+ languageId: lspProc.language,
208
+ version: 1,
209
+ text: content,
210
+ },
211
+ });
212
+ lspProc.openedFiles.add(absolutePath);
213
+ }
214
+ catch (error) {
215
+ this.logger?.error(`Failed to read file for LSP didOpen: ${error}`);
216
+ }
217
+ }
218
+ try {
219
+ let result;
220
+ switch (operation) {
221
+ case "goToDefinition":
222
+ result = await this.sendRequest(lspProc, "textDocument/definition", {
223
+ textDocument: { uri },
224
+ position,
225
+ });
226
+ break;
227
+ case "hover":
228
+ result = await this.sendRequest(lspProc, "textDocument/hover", {
229
+ textDocument: { uri },
230
+ position,
231
+ });
232
+ break;
233
+ case "findReferences":
234
+ result = await this.sendRequest(lspProc, "textDocument/references", {
235
+ textDocument: { uri },
236
+ position,
237
+ context: { includeDeclaration: true },
238
+ });
239
+ break;
240
+ case "documentSymbol":
241
+ result = await this.sendRequest(lspProc, "textDocument/documentSymbol", {
242
+ textDocument: { uri },
243
+ });
244
+ break;
245
+ case "workspaceSymbol":
246
+ result = await this.sendRequest(lspProc, "workspace/symbol", {
247
+ query: "", // For now, use empty query to get all symbols or let server decide
248
+ });
249
+ break;
250
+ case "goToImplementation":
251
+ result = await this.sendRequest(lspProc, "textDocument/implementation", {
252
+ textDocument: { uri },
253
+ position,
254
+ });
255
+ break;
256
+ case "prepareCallHierarchy":
257
+ result = await this.sendRequest(lspProc, "textDocument/prepareCallHierarchy", {
258
+ textDocument: { uri },
259
+ position,
260
+ });
261
+ break;
262
+ case "incomingCalls": {
263
+ const items = (await this.sendRequest(lspProc, "textDocument/prepareCallHierarchy", {
264
+ textDocument: { uri },
265
+ position,
266
+ }));
267
+ if (items && items.length > 0) {
268
+ result = await this.sendRequest(lspProc, "callHierarchy/incomingCalls", {
269
+ item: items[0],
270
+ });
271
+ }
272
+ else {
273
+ result = [];
274
+ }
275
+ break;
276
+ }
277
+ case "outgoingCalls": {
278
+ const items = (await this.sendRequest(lspProc, "textDocument/prepareCallHierarchy", {
279
+ textDocument: { uri },
280
+ position,
281
+ }));
282
+ if (items && items.length > 0) {
283
+ result = await this.sendRequest(lspProc, "callHierarchy/outgoingCalls", {
284
+ item: items[0],
285
+ });
286
+ }
287
+ else {
288
+ result = [];
289
+ }
290
+ break;
291
+ }
292
+ // Add more operations as needed
293
+ default:
294
+ return {
295
+ success: false,
296
+ content: `Unsupported LSP operation: ${operation}`,
297
+ };
298
+ }
299
+ return { success: true, content: JSON.stringify(result) };
300
+ }
301
+ catch (error) {
302
+ return { success: false, content: `LSP error: ${JSON.stringify(error)}` };
303
+ }
304
+ }
305
+ async cleanup() {
306
+ for (const [language, lspProc] of this.processes.entries()) {
307
+ try {
308
+ // Try graceful shutdown
309
+ const timeout = lspProc.config.shutdownTimeout || 2000;
310
+ await this.sendRequest(lspProc, "shutdown", {}, timeout);
311
+ await this.sendNotification(lspProc, "exit", {});
312
+ // Give it a moment to exit
313
+ await new Promise((resolve) => setTimeout(resolve, 100));
314
+ }
315
+ catch (error) {
316
+ this.logger?.debug(`Failed to gracefully shutdown LSP for ${language}: ${error}`);
317
+ }
318
+ finally {
319
+ if (!lspProc.process.killed) {
320
+ lspProc.process.kill();
321
+ }
322
+ }
323
+ }
324
+ this.processes.clear();
325
+ }
326
+ }
@@ -1,5 +1,7 @@
1
1
  import { UserMessageParams, type AgentToolBlockUpdateParams } from "../utils/messageOperations.js";
2
+ import type { SubagentConfiguration } from "../utils/subagentParser.js";
2
3
  import type { Logger, Message, Usage } from "../types/index.js";
4
+ import { SessionData } from "../services/session.js";
3
5
  import { ChatCompletionMessageFunctionToolCall } from "openai/resources.js";
4
6
  export interface MessageManagerCallbacks {
5
7
  onMessagesChange?: (messages: Message[]) => void;
@@ -8,9 +10,10 @@ export interface MessageManagerCallbacks {
8
10
  onUserInputHistoryChange?: (history: string[]) => void;
9
11
  onUsagesChange?: (usages: Usage[]) => void;
10
12
  onUserMessageAdded?: (params: UserMessageParams) => void;
11
- onAssistantMessageAdded?: (content?: string, toolCalls?: ChatCompletionMessageFunctionToolCall[]) => void;
13
+ onAssistantMessageAdded?: () => void;
14
+ onAssistantContentUpdated?: (chunk: string, accumulated: string) => void;
15
+ onAssistantReasoningUpdated?: (chunk: string, accumulated: string) => void;
12
16
  onToolBlockUpdated?: (params: AgentToolBlockUpdateParams) => void;
13
- onDiffBlockAdded?: (filePath: string, diffResult: string) => void;
14
17
  onErrorBlockAdded?: (error: string) => void;
15
18
  onCompressBlockAdded?: (insertIndex: number, content: string) => void;
16
19
  onCompressionStateChange?: (isCompressing: boolean) => void;
@@ -23,83 +26,97 @@ export interface MessageManagerCallbacks {
23
26
  prompt: string;
24
27
  subagent_type: string;
25
28
  }) => void;
26
- onSubAgentBlockUpdated?: (subagentId: string, messages: Message[], status: "active" | "completed" | "error" | "aborted") => void;
29
+ onSubAgentBlockUpdated?: (subagentId: string, status: "active" | "completed" | "error" | "aborted") => void;
27
30
  }
28
31
  export interface MessageManagerOptions {
29
32
  callbacks: MessageManagerCallbacks;
30
33
  workdir: string;
31
34
  logger?: Logger;
32
- /**
33
- * Custom session directory path
34
- * @default join(homedir(), ".wave", "sessions")
35
- */
36
- sessionDir?: string;
35
+ sessionType?: "main" | "subagent";
36
+ subagentType?: string;
37
37
  }
38
38
  export declare class MessageManager {
39
39
  private sessionId;
40
40
  private messages;
41
41
  private latestTotalTokens;
42
42
  private userInputHistory;
43
- private sessionStartTime;
44
43
  private workdir;
44
+ private encodedWorkdir;
45
45
  private logger?;
46
46
  private callbacks;
47
- private sessionDir?;
47
+ private transcriptPath;
48
+ private savedMessageCount;
49
+ private sessionType;
50
+ private subagentType?;
48
51
  constructor(options: MessageManagerOptions);
49
52
  getSessionId(): string;
50
53
  getMessages(): Message[];
51
54
  getlatestTotalTokens(): number;
52
55
  getUserInputHistory(): string[];
56
+ getWorkdir(): string;
57
+ getSessionDir(): string;
53
58
  getTranscriptPath(): string;
59
+ /**
60
+ * Compute the transcript path using cached encoded workdir
61
+ * Called during construction and when sessionId changes
62
+ */
63
+ private computeTranscriptPath;
54
64
  setSessionId(sessionId: string): void;
65
+ /**
66
+ * Create session if needed (async helper)
67
+ */
68
+ private createSessionIfNeeded;
55
69
  setMessages(messages: Message[]): void;
56
70
  /**
57
71
  * Save current session
58
72
  */
59
73
  saveSession(): Promise<void>;
60
- /**
61
- * Handle session restoration logic
62
- */
63
- handleSessionRestoration(restoreSessionId?: string, continueLastSession?: boolean): Promise<void>;
64
74
  setlatestTotalTokens(latestTotalTokens: number): void;
65
75
  setUserInputHistory(userInputHistory: string[]): void;
66
76
  /**
67
77
  * Clear messages and input history
68
78
  */
69
79
  clearMessages(): void;
70
- initializeFromSession(sessionId: string, messages: Message[], latestTotalTokens: number): void;
80
+ initializeFromSession(sessionData: SessionData): void;
71
81
  addToInputHistory(input: string): void;
72
82
  clearInputHistory(): void;
73
83
  addUserMessage(params: UserMessageParams): void;
74
- addAssistantMessage(content?: string, toolCalls?: ChatCompletionMessageFunctionToolCall[], usage?: Usage): void;
84
+ addAssistantMessage(content?: string, toolCalls?: ChatCompletionMessageFunctionToolCall[], usage?: Usage, additionalFields?: Record<string, unknown>): void;
85
+ mergeAssistantAdditionalFields(additionalFields: Record<string, unknown>): void;
75
86
  updateToolBlock(params: AgentToolBlockUpdateParams): void;
76
- addDiffBlock(filePath: string, diffResult: Array<{
77
- value: string;
78
- added?: boolean;
79
- removed?: boolean;
80
- }>): void;
81
87
  addErrorBlock(error: string): void;
82
88
  /**
83
89
  * Compress messages and update session, delete compressed messages, only keep compressed messages and subsequent messages
84
90
  */
85
- compressMessagesAndUpdateSession(insertIndex: number, compressedContent: string): void;
91
+ compressMessagesAndUpdateSession(insertIndex: number, compressedContent: string, usage?: Usage): void;
86
92
  addMemoryBlock(content: string, success: boolean, type: "project" | "user", storagePath: string): void;
87
93
  addCommandOutputMessage(command: string): void;
88
94
  updateCommandOutputMessage(command: string, output: string): void;
89
95
  completeCommandMessage(command: string, exitCode: number): void;
90
- addSubagentBlock(subagentId: string, subagentName: string, status: "active" | "completed" | "error" | undefined, subagentMessages: Message[] | undefined, parameters: {
96
+ addSubagentBlock(subagentId: string, subagentName: string, sessionId: string, configuration: SubagentConfiguration, status: "active" | "completed" | "error" | undefined, parameters: {
91
97
  description: string;
92
98
  prompt: string;
93
99
  subagent_type: string;
94
100
  }): void;
95
101
  updateSubagentBlock(subagentId: string, updates: Partial<{
96
102
  status: "active" | "completed" | "error" | "aborted";
97
- messages: Message[];
103
+ sessionId: string;
98
104
  }>): void;
99
105
  /**
100
106
  * Trigger usage change callback with all usage data from assistant messages
101
107
  */
102
108
  triggerUsageChange(): void;
109
+ /**
110
+ * Update the current assistant message content during streaming
111
+ * This method updates the last assistant message's content without creating a new message
112
+ * FR-001: Tracks and provides both chunk (new content) and accumulated (total content)
113
+ */
114
+ updateCurrentMessageContent(newAccumulatedContent: string): void;
115
+ /**
116
+ * Update the current assistant message reasoning during streaming
117
+ * This method updates the last assistant message's reasoning content without creating a new message
118
+ */
119
+ updateCurrentMessageReasoning(newAccumulatedReasoning: string): void;
103
120
  /**
104
121
  * Remove the last user message from the conversation
105
122
  * Used for hook error handling when the user prompt needs to be erased
@@ -1 +1 @@
1
- {"version":3,"file":"messageManager.d.ts","sourceRoot":"","sources":["../../src/managers/messageManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messageManager.d.ts","sourceRoot":"","sources":["../../src/managers/messageManager.ts"],"names":[],"mappings":"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"}