@oni.bot/core 0.8.0 → 1.0.1

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 (237) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +59 -373
  3. package/dist/checkpointers/sqlite.d.ts.map +1 -1
  4. package/dist/checkpointers/sqlite.js +23 -8
  5. package/dist/checkpointers/sqlite.js.map +1 -1
  6. package/dist/cli/build.d.ts +11 -0
  7. package/dist/cli/build.d.ts.map +1 -0
  8. package/dist/cli/build.js +61 -0
  9. package/dist/cli/build.js.map +1 -0
  10. package/dist/cli/dev.d.ts +5 -0
  11. package/dist/cli/dev.d.ts.map +1 -0
  12. package/dist/cli/dev.js +54 -0
  13. package/dist/cli/dev.js.map +1 -0
  14. package/dist/cli/index.js +16 -27
  15. package/dist/cli/index.js.map +1 -1
  16. package/dist/cli/init.d.ts +2 -0
  17. package/dist/cli/init.d.ts.map +1 -1
  18. package/dist/cli/init.js +18 -1
  19. package/dist/cli/init.js.map +1 -1
  20. package/dist/cli/inspect.d.ts +5 -0
  21. package/dist/cli/inspect.d.ts.map +1 -0
  22. package/dist/cli/inspect.js +85 -0
  23. package/dist/cli/inspect.js.map +1 -0
  24. package/dist/cli/router.d.ts +14 -0
  25. package/dist/cli/router.d.ts.map +1 -0
  26. package/dist/cli/router.js +107 -0
  27. package/dist/cli/router.js.map +1 -0
  28. package/dist/cli/run.d.ts +5 -0
  29. package/dist/cli/run.d.ts.map +1 -0
  30. package/dist/cli/run.js +53 -0
  31. package/dist/cli/run.js.map +1 -0
  32. package/dist/cli/templates.d.ts +1 -0
  33. package/dist/cli/templates.d.ts.map +1 -1
  34. package/dist/cli/templates.js +106 -66
  35. package/dist/cli/templates.js.map +1 -1
  36. package/dist/cli/test.d.ts +3 -0
  37. package/dist/cli/test.d.ts.map +1 -0
  38. package/dist/cli/test.js +29 -0
  39. package/dist/cli/test.js.map +1 -0
  40. package/dist/config/index.d.ts +3 -0
  41. package/dist/config/index.d.ts.map +1 -0
  42. package/dist/config/index.js +3 -0
  43. package/dist/config/index.js.map +1 -0
  44. package/dist/config/loader.d.ts +37 -0
  45. package/dist/config/loader.d.ts.map +1 -0
  46. package/dist/config/loader.js +180 -0
  47. package/dist/config/loader.js.map +1 -0
  48. package/dist/config/types.d.ts +74 -0
  49. package/dist/config/types.d.ts.map +1 -0
  50. package/dist/config/types.js +5 -0
  51. package/dist/config/types.js.map +1 -0
  52. package/dist/coordination/pubsub.d.ts +4 -0
  53. package/dist/coordination/pubsub.d.ts.map +1 -1
  54. package/dist/coordination/pubsub.js +8 -0
  55. package/dist/coordination/pubsub.js.map +1 -1
  56. package/dist/coordination/request-reply.d.ts +3 -1
  57. package/dist/coordination/request-reply.d.ts.map +1 -1
  58. package/dist/coordination/request-reply.js +11 -2
  59. package/dist/coordination/request-reply.js.map +1 -1
  60. package/dist/errors.d.ts +7 -1
  61. package/dist/errors.d.ts.map +1 -1
  62. package/dist/errors.js +18 -3
  63. package/dist/errors.js.map +1 -1
  64. package/dist/events/bridge.d.ts +17 -0
  65. package/dist/events/bridge.d.ts.map +1 -0
  66. package/dist/events/bridge.js +67 -0
  67. package/dist/events/bridge.js.map +1 -0
  68. package/dist/events/bus.d.ts +9 -0
  69. package/dist/events/bus.d.ts.map +1 -1
  70. package/dist/events/bus.js +39 -4
  71. package/dist/events/bus.js.map +1 -1
  72. package/dist/events/index.d.ts +2 -1
  73. package/dist/events/index.d.ts.map +1 -1
  74. package/dist/events/index.js +2 -0
  75. package/dist/events/index.js.map +1 -1
  76. package/dist/events/types.d.ts +123 -1
  77. package/dist/events/types.d.ts.map +1 -1
  78. package/dist/graph.d.ts.map +1 -1
  79. package/dist/graph.js +16 -8
  80. package/dist/graph.js.map +1 -1
  81. package/dist/guardrails/types.d.ts +1 -1
  82. package/dist/guardrails/types.d.ts.map +1 -1
  83. package/dist/harness/agent-loop.d.ts.map +1 -1
  84. package/dist/harness/agent-loop.js +226 -29
  85. package/dist/harness/agent-loop.js.map +1 -1
  86. package/dist/harness/context-compactor.d.ts +21 -2
  87. package/dist/harness/context-compactor.d.ts.map +1 -1
  88. package/dist/harness/context-compactor.js +45 -6
  89. package/dist/harness/context-compactor.js.map +1 -1
  90. package/dist/harness/hooks-engine.d.ts +7 -1
  91. package/dist/harness/hooks-engine.d.ts.map +1 -1
  92. package/dist/harness/hooks-engine.js.map +1 -1
  93. package/dist/harness/index.d.ts +3 -2
  94. package/dist/harness/index.d.ts.map +1 -1
  95. package/dist/harness/index.js +2 -0
  96. package/dist/harness/index.js.map +1 -1
  97. package/dist/harness/skill-loader.d.ts +14 -1
  98. package/dist/harness/skill-loader.d.ts.map +1 -1
  99. package/dist/harness/skill-loader.js +33 -3
  100. package/dist/harness/skill-loader.js.map +1 -1
  101. package/dist/harness/types.d.ts +24 -2
  102. package/dist/harness/types.d.ts.map +1 -1
  103. package/dist/harness/types.js.map +1 -1
  104. package/dist/harness/validate-args.d.ts +16 -0
  105. package/dist/harness/validate-args.d.ts.map +1 -0
  106. package/dist/harness/validate-args.js +132 -0
  107. package/dist/harness/validate-args.js.map +1 -0
  108. package/dist/index.d.ts +3 -3
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +12 -12
  111. package/dist/index.js.map +1 -1
  112. package/dist/internal/timeout.d.ts +2 -0
  113. package/dist/internal/timeout.d.ts.map +1 -0
  114. package/dist/internal/timeout.js +16 -0
  115. package/dist/internal/timeout.js.map +1 -0
  116. package/dist/lsp/client.d.ts +70 -0
  117. package/dist/lsp/client.d.ts.map +1 -0
  118. package/dist/lsp/client.js +421 -0
  119. package/dist/lsp/client.js.map +1 -0
  120. package/dist/lsp/index.d.ts +77 -0
  121. package/dist/lsp/index.d.ts.map +1 -0
  122. package/dist/lsp/index.js +183 -0
  123. package/dist/lsp/index.js.map +1 -0
  124. package/dist/lsp/servers.d.ts +48 -0
  125. package/dist/lsp/servers.d.ts.map +1 -0
  126. package/dist/lsp/servers.js +108 -0
  127. package/dist/lsp/servers.js.map +1 -0
  128. package/dist/lsp/types.d.ts +142 -0
  129. package/dist/lsp/types.d.ts.map +1 -0
  130. package/dist/lsp/types.js +16 -0
  131. package/dist/lsp/types.js.map +1 -0
  132. package/dist/mcp/client.d.ts +56 -0
  133. package/dist/mcp/client.d.ts.map +1 -0
  134. package/dist/mcp/client.js +170 -0
  135. package/dist/mcp/client.js.map +1 -0
  136. package/dist/mcp/convert.d.ts +26 -0
  137. package/dist/mcp/convert.d.ts.map +1 -0
  138. package/dist/mcp/convert.js +56 -0
  139. package/dist/mcp/convert.js.map +1 -0
  140. package/dist/mcp/index.d.ts +21 -0
  141. package/dist/mcp/index.d.ts.map +1 -0
  142. package/dist/mcp/index.js +19 -0
  143. package/dist/mcp/index.js.map +1 -0
  144. package/dist/mcp/transport.d.ts +56 -0
  145. package/dist/mcp/transport.d.ts.map +1 -0
  146. package/dist/mcp/transport.js +204 -0
  147. package/dist/mcp/transport.js.map +1 -0
  148. package/dist/mcp/types.d.ts +96 -0
  149. package/dist/mcp/types.d.ts.map +1 -0
  150. package/dist/mcp/types.js +11 -0
  151. package/dist/mcp/types.js.map +1 -0
  152. package/dist/models/anthropic.d.ts.map +1 -1
  153. package/dist/models/anthropic.js +78 -41
  154. package/dist/models/anthropic.js.map +1 -1
  155. package/dist/models/google.d.ts.map +1 -1
  156. package/dist/models/google.js +47 -46
  157. package/dist/models/google.js.map +1 -1
  158. package/dist/models/http-error.d.ts +16 -0
  159. package/dist/models/http-error.d.ts.map +1 -0
  160. package/dist/models/http-error.js +67 -0
  161. package/dist/models/http-error.js.map +1 -0
  162. package/dist/models/index.d.ts +3 -0
  163. package/dist/models/index.d.ts.map +1 -1
  164. package/dist/models/index.js +2 -0
  165. package/dist/models/index.js.map +1 -1
  166. package/dist/models/ollama.d.ts.map +1 -1
  167. package/dist/models/ollama.js +4 -3
  168. package/dist/models/ollama.js.map +1 -1
  169. package/dist/models/openai.d.ts.map +1 -1
  170. package/dist/models/openai.js +36 -44
  171. package/dist/models/openai.js.map +1 -1
  172. package/dist/models/openrouter.d.ts +13 -0
  173. package/dist/models/openrouter.d.ts.map +1 -1
  174. package/dist/models/openrouter.js +86 -47
  175. package/dist/models/openrouter.js.map +1 -1
  176. package/dist/models/sse.d.ts +9 -0
  177. package/dist/models/sse.d.ts.map +1 -0
  178. package/dist/models/sse.js +45 -0
  179. package/dist/models/sse.js.map +1 -0
  180. package/dist/models/types.d.ts +10 -0
  181. package/dist/models/types.d.ts.map +1 -1
  182. package/dist/pregel.d.ts +4 -0
  183. package/dist/pregel.d.ts.map +1 -1
  184. package/dist/pregel.js +121 -54
  185. package/dist/pregel.js.map +1 -1
  186. package/dist/retry.d.ts.map +1 -1
  187. package/dist/retry.js +10 -3
  188. package/dist/retry.js.map +1 -1
  189. package/dist/store/index.d.ts +3 -0
  190. package/dist/store/index.d.ts.map +1 -1
  191. package/dist/store/index.js +17 -0
  192. package/dist/store/index.js.map +1 -1
  193. package/dist/streaming.d.ts +4 -1
  194. package/dist/streaming.d.ts.map +1 -1
  195. package/dist/streaming.js +21 -7
  196. package/dist/streaming.js.map +1 -1
  197. package/dist/swarm/graph.d.ts +81 -2
  198. package/dist/swarm/graph.d.ts.map +1 -1
  199. package/dist/swarm/graph.js +517 -32
  200. package/dist/swarm/graph.js.map +1 -1
  201. package/dist/swarm/index.d.ts +10 -2
  202. package/dist/swarm/index.d.ts.map +1 -1
  203. package/dist/swarm/index.js +6 -1
  204. package/dist/swarm/index.js.map +1 -1
  205. package/dist/swarm/mermaid.d.ts +10 -0
  206. package/dist/swarm/mermaid.d.ts.map +1 -0
  207. package/dist/swarm/mermaid.js +64 -0
  208. package/dist/swarm/mermaid.js.map +1 -0
  209. package/dist/swarm/pool.d.ts +9 -1
  210. package/dist/swarm/pool.d.ts.map +1 -1
  211. package/dist/swarm/pool.js +58 -10
  212. package/dist/swarm/pool.js.map +1 -1
  213. package/dist/swarm/registry.d.ts +11 -1
  214. package/dist/swarm/registry.d.ts.map +1 -1
  215. package/dist/swarm/registry.js +17 -3
  216. package/dist/swarm/registry.js.map +1 -1
  217. package/dist/swarm/scaling.d.ts +95 -0
  218. package/dist/swarm/scaling.d.ts.map +1 -0
  219. package/dist/swarm/scaling.js +214 -0
  220. package/dist/swarm/scaling.js.map +1 -0
  221. package/dist/swarm/snapshot.d.ts +51 -0
  222. package/dist/swarm/snapshot.d.ts.map +1 -0
  223. package/dist/swarm/snapshot.js +115 -0
  224. package/dist/swarm/snapshot.js.map +1 -0
  225. package/dist/swarm/supervisor.d.ts.map +1 -1
  226. package/dist/swarm/supervisor.js +82 -0
  227. package/dist/swarm/supervisor.js.map +1 -1
  228. package/dist/swarm/tracer.d.ts +57 -0
  229. package/dist/swarm/tracer.d.ts.map +1 -0
  230. package/dist/swarm/tracer.js +138 -0
  231. package/dist/swarm/tracer.js.map +1 -0
  232. package/dist/swarm/types.d.ts +23 -1
  233. package/dist/swarm/types.d.ts.map +1 -1
  234. package/dist/swarm/types.js.map +1 -1
  235. package/dist/tools/types.d.ts +2 -0
  236. package/dist/tools/types.d.ts.map +1 -1
  237. package/package.json +160 -141
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runWithTimeout<T>(operation: () => Promise<T>, timeoutMs: number | undefined, createTimeoutError: () => Error): Promise<T>;
2
+ //# sourceMappingURL=timeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../src/internal/timeout.ts"],"names":[],"mappings":"AAAA,wBAAsB,cAAc,CAAC,CAAC,EACpC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,kBAAkB,EAAE,MAAM,KAAK,GAC9B,OAAO,CAAC,CAAC,CAAC,CAgBZ"}
@@ -0,0 +1,16 @@
1
+ export async function runWithTimeout(operation, timeoutMs, createTimeoutError) {
2
+ if (timeoutMs == null || timeoutMs <= 0) {
3
+ return operation();
4
+ }
5
+ return await new Promise((resolve, reject) => {
6
+ const timer = setTimeout(() => reject(createTimeoutError()), timeoutMs);
7
+ if (typeof timer === "object" && timer !== null && "unref" in timer && typeof timer.unref === "function") {
8
+ timer.unref();
9
+ }
10
+ Promise.resolve()
11
+ .then(operation)
12
+ .then(resolve, reject)
13
+ .finally(() => clearTimeout(timer));
14
+ });
15
+ }
16
+ //# sourceMappingURL=timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../src/internal/timeout.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,SAA2B,EAC3B,SAA6B,EAC7B,kBAA+B;IAE/B,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACxC,OAAO,SAAS,EAAE,CAAC;IACrB,CAAC;IAED,OAAO,MAAM,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QACxE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACzG,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QAED,OAAO,CAAC,OAAO,EAAE;aACd,IAAI,CAAC,SAAS,CAAC;aACf,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;aACrB,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * LSP Client — Language Server Protocol client over stdio.
3
+ *
4
+ * Manages a single language server connection:
5
+ * - Spawn process with Content-Length framed JSON-RPC
6
+ * - Initialize handshake (capabilities, rootUri)
7
+ * - Track open files with version numbers
8
+ * - Receive and cache diagnostics per file
9
+ * - touchFile() → open/change → await diagnostics
10
+ *
11
+ * Swarm-aware: A single LSPClient instance is shared across all agents.
12
+ * Concurrent touchFile() calls are safe — file versions are tracked atomically.
13
+ *
14
+ * Zero-dependency: uses only node:child_process and node:path.
15
+ */
16
+ import type { LSPServerConfig, LSPClientState, LSPClientInfo, LSPDiagnostic } from "./types.js";
17
+ export declare class LSPClient {
18
+ private readonly config;
19
+ private readonly rootDir;
20
+ private process;
21
+ private state;
22
+ private serverInfo?;
23
+ private nextId;
24
+ private pending;
25
+ private buffer;
26
+ private fileVersions;
27
+ private diagnosticsCache;
28
+ private diagnosticsWaiters;
29
+ constructor(config: LSPServerConfig, rootDir: string);
30
+ /**
31
+ * Start the language server and complete the initialize handshake.
32
+ */
33
+ start(): Promise<void>;
34
+ /**
35
+ * Stop the language server.
36
+ */
37
+ stop(): void;
38
+ /**
39
+ * Notify the server about a file change and optionally wait for diagnostics.
40
+ *
41
+ * If the file hasn't been opened yet, sends didOpen. Otherwise sends didChange.
42
+ * Reads the file content from disk.
43
+ */
44
+ touchFile(filePath: string, waitForDiagnostics?: boolean): Promise<void>;
45
+ /**
46
+ * Get cached diagnostics for a file.
47
+ */
48
+ getDiagnostics(filePath: string): LSPDiagnostic[];
49
+ /**
50
+ * Get all cached diagnostics keyed by file path.
51
+ */
52
+ getAllDiagnostics(): Map<string, LSPDiagnostic[]>;
53
+ getState(): LSPClientState;
54
+ getInfo(): LSPClientInfo;
55
+ getServerId(): string;
56
+ private waitForDiagnostics;
57
+ private notifyDiagnosticsWaiters;
58
+ private removeWaiter;
59
+ private clearAllWaiters;
60
+ private sendRequest;
61
+ private sendNotification;
62
+ private writeMessage;
63
+ private processBuffer;
64
+ private handleMessage;
65
+ private handleNotification;
66
+ private uriToPath;
67
+ private handleProcessExit;
68
+ private rejectAllPending;
69
+ }
70
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/lsp/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,aAAa,EAMd,MAAM,YAAY,CAAC;AA2BpB,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,UAAU,CAAC,CAAqC;IAGxD,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,MAAM,CAAM;IAGpB,OAAO,CAAC,YAAY,CAA6B;IAGjD,OAAO,CAAC,gBAAgB,CAAsC;IAC9D,OAAO,CAAC,kBAAkB,CAA0C;gBAExD,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM;IAOpD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4E5B;;OAEG;IACH,IAAI,IAAI,IAAI;IAoBZ;;;;;OAKG;IACG,SAAS,CACb,QAAQ,EAAE,MAAM,EAChB,kBAAkB,UAAQ,GACzB,OAAO,CAAC,IAAI,CAAC;IA6ChB;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAIjD;;OAEG;IACH,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;IAMjD,QAAQ,IAAI,cAAc;IAI1B,OAAO,IAAI,aAAa;IASxB,WAAW,IAAI,MAAM;IAMrB,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,wBAAwB;IAahC,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,WAAW;IA6BnB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,aAAa;IAiCrB,OAAO,CAAC,aAAa;IA6CrB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,SAAS;IAmBjB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,gBAAgB;CAOzB"}
@@ -0,0 +1,421 @@
1
+ /**
2
+ * LSP Client — Language Server Protocol client over stdio.
3
+ *
4
+ * Manages a single language server connection:
5
+ * - Spawn process with Content-Length framed JSON-RPC
6
+ * - Initialize handshake (capabilities, rootUri)
7
+ * - Track open files with version numbers
8
+ * - Receive and cache diagnostics per file
9
+ * - touchFile() → open/change → await diagnostics
10
+ *
11
+ * Swarm-aware: A single LSPClient instance is shared across all agents.
12
+ * Concurrent touchFile() calls are safe — file versions are tracked atomically.
13
+ *
14
+ * Zero-dependency: uses only node:child_process and node:path.
15
+ */
16
+ import { spawn } from "node:child_process";
17
+ import { pathToFileURL } from "node:url";
18
+ import { readFileSync } from "node:fs";
19
+ // ── Constants ────────────────────────────────────────────────
20
+ const INITIALIZE_TIMEOUT_MS = 30_000;
21
+ const REQUEST_TIMEOUT_MS = 10_000;
22
+ const DIAGNOSTICS_DEBOUNCE_MS = 150;
23
+ const DIAGNOSTICS_TIMEOUT_MS = 3_000;
24
+ // ── LSPClient ────────────────────────────────────────────────
25
+ export class LSPClient {
26
+ config;
27
+ rootDir;
28
+ process = null;
29
+ state = "disconnected";
30
+ serverInfo;
31
+ // JSON-RPC
32
+ nextId = 1;
33
+ pending = new Map();
34
+ buffer = "";
35
+ // File tracking
36
+ fileVersions = new Map();
37
+ // Diagnostics
38
+ diagnosticsCache = new Map();
39
+ diagnosticsWaiters = new Map();
40
+ constructor(config, rootDir) {
41
+ this.config = config;
42
+ this.rootDir = rootDir;
43
+ }
44
+ // ── Lifecycle ────────────────────────────────────────────
45
+ /**
46
+ * Start the language server and complete the initialize handshake.
47
+ */
48
+ async start() {
49
+ if (this.state === "ready")
50
+ return;
51
+ if (this.state === "broken") {
52
+ throw new Error(`LSP server "${this.config.id}" is marked as broken`);
53
+ }
54
+ this.state = "connecting";
55
+ try {
56
+ this.process = spawn(this.config.command, this.config.args ?? [], {
57
+ cwd: this.rootDir,
58
+ stdio: ["pipe", "pipe", "pipe"],
59
+ env: { ...process.env },
60
+ });
61
+ // Wire up stdout for JSON-RPC responses
62
+ this.process.stdout?.on("data", (chunk) => {
63
+ this.processBuffer(chunk.toString());
64
+ });
65
+ // Ignore stderr (server logs)
66
+ this.process.stderr?.on("data", () => { });
67
+ // Handle process exit
68
+ this.process.on("exit", () => {
69
+ this.handleProcessExit();
70
+ });
71
+ this.process.on("error", () => {
72
+ this.state = "broken";
73
+ this.rejectAllPending("LSP server process error");
74
+ });
75
+ // Send initialize request
76
+ const rootUri = pathToFileURL(this.rootDir).toString();
77
+ const result = await this.sendRequest("initialize", {
78
+ processId: this.process.pid ?? null,
79
+ rootUri,
80
+ capabilities: {
81
+ textDocument: {
82
+ synchronization: {
83
+ didOpen: true,
84
+ didChange: true,
85
+ },
86
+ publishDiagnostics: {
87
+ versionSupport: true,
88
+ },
89
+ },
90
+ window: {
91
+ workDoneProgress: true,
92
+ },
93
+ },
94
+ workspaceFolders: [
95
+ { uri: rootUri, name: this.rootDir.split("/").pop() ?? "workspace" },
96
+ ],
97
+ initializationOptions: this.config.initializationOptions,
98
+ }, INITIALIZE_TIMEOUT_MS);
99
+ if (result.error) {
100
+ throw new Error(`Initialize failed: ${result.error.message}`);
101
+ }
102
+ const initResult = result.result;
103
+ this.serverInfo = initResult.serverInfo;
104
+ // Send initialized notification
105
+ this.sendNotification("initialized", {});
106
+ this.state = "ready";
107
+ }
108
+ catch (err) {
109
+ this.stop();
110
+ this.state = "broken"; // Set AFTER stop() so it isn't overwritten
111
+ throw err;
112
+ }
113
+ }
114
+ /**
115
+ * Stop the language server.
116
+ */
117
+ stop() {
118
+ this.rejectAllPending("LSP client stopping");
119
+ this.clearAllWaiters();
120
+ if (this.process) {
121
+ try {
122
+ this.process.kill();
123
+ }
124
+ catch {
125
+ // Already dead
126
+ }
127
+ this.process = null;
128
+ }
129
+ this.state = "disconnected";
130
+ this.fileVersions.clear();
131
+ this.diagnosticsCache.clear();
132
+ }
133
+ // ── File Operations ──────────────────────────────────────
134
+ /**
135
+ * Notify the server about a file change and optionally wait for diagnostics.
136
+ *
137
+ * If the file hasn't been opened yet, sends didOpen. Otherwise sends didChange.
138
+ * Reads the file content from disk.
139
+ */
140
+ async touchFile(filePath, waitForDiagnostics = false) {
141
+ if (this.state !== "ready")
142
+ return;
143
+ let content;
144
+ try {
145
+ content = readFileSync(filePath, "utf-8");
146
+ }
147
+ catch {
148
+ return; // File doesn't exist or unreadable
149
+ }
150
+ const uri = pathToFileURL(filePath).toString();
151
+ const version = this.fileVersions.get(filePath);
152
+ // Set up diagnostics waiter before sending notification
153
+ const waiterPromise = waitForDiagnostics
154
+ ? this.waitForDiagnostics(filePath)
155
+ : undefined;
156
+ if (version === undefined) {
157
+ // First time — didOpen
158
+ this.fileVersions.set(filePath, 0);
159
+ this.sendNotification("textDocument/didOpen", {
160
+ textDocument: {
161
+ uri,
162
+ languageId: this.config.languageId,
163
+ version: 0,
164
+ text: content,
165
+ },
166
+ });
167
+ }
168
+ else {
169
+ // Subsequent — didChange
170
+ const nextVersion = version + 1;
171
+ this.fileVersions.set(filePath, nextVersion);
172
+ this.sendNotification("textDocument/didChange", {
173
+ textDocument: { uri, version: nextVersion },
174
+ contentChanges: [{ text: content }],
175
+ });
176
+ }
177
+ // Optionally wait for diagnostics
178
+ if (waiterPromise) {
179
+ await waiterPromise;
180
+ }
181
+ }
182
+ /**
183
+ * Get cached diagnostics for a file.
184
+ */
185
+ getDiagnostics(filePath) {
186
+ return this.diagnosticsCache.get(filePath) ?? [];
187
+ }
188
+ /**
189
+ * Get all cached diagnostics keyed by file path.
190
+ */
191
+ getAllDiagnostics() {
192
+ return new Map(this.diagnosticsCache);
193
+ }
194
+ // ── State Queries ────────────────────────────────────────
195
+ getState() {
196
+ return this.state;
197
+ }
198
+ getInfo() {
199
+ return {
200
+ serverId: this.config.id,
201
+ state: this.state,
202
+ rootDir: this.rootDir,
203
+ serverInfo: this.serverInfo,
204
+ };
205
+ }
206
+ getServerId() {
207
+ return this.config.id;
208
+ }
209
+ // ── Diagnostics Waiter ───────────────────────────────────
210
+ waitForDiagnostics(filePath) {
211
+ return new Promise((resolve) => {
212
+ const overallTimer = setTimeout(() => {
213
+ this.removeWaiter(filePath, waiter);
214
+ resolve(); // Swallow timeout — diagnostics are best-effort
215
+ }, DIAGNOSTICS_TIMEOUT_MS);
216
+ const waiter = {
217
+ resolve: () => {
218
+ clearTimeout(overallTimer);
219
+ if (waiter.debounceTimer)
220
+ clearTimeout(waiter.debounceTimer);
221
+ this.removeWaiter(filePath, waiter);
222
+ resolve();
223
+ },
224
+ overallTimer,
225
+ };
226
+ const existing = this.diagnosticsWaiters.get(filePath) ?? [];
227
+ existing.push(waiter);
228
+ this.diagnosticsWaiters.set(filePath, existing);
229
+ });
230
+ }
231
+ notifyDiagnosticsWaiters(filePath) {
232
+ const waiters = this.diagnosticsWaiters.get(filePath);
233
+ if (!waiters || waiters.length === 0)
234
+ return;
235
+ for (const waiter of waiters) {
236
+ // Debounce: wait 150ms for follow-up diagnostics
237
+ if (waiter.debounceTimer)
238
+ clearTimeout(waiter.debounceTimer);
239
+ waiter.debounceTimer = setTimeout(() => {
240
+ waiter.resolve();
241
+ }, DIAGNOSTICS_DEBOUNCE_MS);
242
+ }
243
+ }
244
+ removeWaiter(filePath, waiter) {
245
+ const waiters = this.diagnosticsWaiters.get(filePath);
246
+ if (!waiters)
247
+ return;
248
+ const idx = waiters.indexOf(waiter);
249
+ if (idx >= 0)
250
+ waiters.splice(idx, 1);
251
+ if (waiters.length === 0)
252
+ this.diagnosticsWaiters.delete(filePath);
253
+ }
254
+ clearAllWaiters() {
255
+ for (const [, waiters] of this.diagnosticsWaiters) {
256
+ for (const w of waiters) {
257
+ clearTimeout(w.overallTimer);
258
+ if (w.debounceTimer)
259
+ clearTimeout(w.debounceTimer);
260
+ }
261
+ }
262
+ this.diagnosticsWaiters.clear();
263
+ }
264
+ // ── JSON-RPC Transport ───────────────────────────────────
265
+ sendRequest(method, params, timeoutMs = REQUEST_TIMEOUT_MS) {
266
+ return new Promise((resolve, reject) => {
267
+ if (!this.process?.stdin?.writable) {
268
+ reject(new Error("LSP process not connected"));
269
+ return;
270
+ }
271
+ const id = this.nextId++;
272
+ const request = {
273
+ jsonrpc: "2.0",
274
+ id,
275
+ method,
276
+ params,
277
+ };
278
+ const timer = setTimeout(() => {
279
+ this.pending.delete(id);
280
+ reject(new Error(`LSP request "${method}" timed out after ${timeoutMs}ms`));
281
+ }, timeoutMs);
282
+ this.pending.set(id, { resolve, reject, timer });
283
+ this.writeMessage(request);
284
+ });
285
+ }
286
+ sendNotification(method, params) {
287
+ if (!this.process?.stdin?.writable)
288
+ return;
289
+ const notification = {
290
+ jsonrpc: "2.0",
291
+ method,
292
+ params,
293
+ };
294
+ this.writeMessage(notification);
295
+ }
296
+ writeMessage(message) {
297
+ const json = JSON.stringify(message);
298
+ const header = `Content-Length: ${Buffer.byteLength(json)}\r\n\r\n`;
299
+ try {
300
+ this.process?.stdin?.write(header + json);
301
+ }
302
+ catch {
303
+ // Process may have died
304
+ }
305
+ }
306
+ processBuffer(data) {
307
+ this.buffer += data;
308
+ while (true) {
309
+ const headerEnd = this.buffer.indexOf("\r\n\r\n");
310
+ if (headerEnd === -1)
311
+ break;
312
+ const header = this.buffer.slice(0, headerEnd);
313
+ const match = header.match(/Content-Length:\s*(\d+)/i);
314
+ if (!match) {
315
+ // Malformed header — skip to next potential header
316
+ this.buffer = this.buffer.slice(headerEnd + 4);
317
+ continue;
318
+ }
319
+ const contentLength = parseInt(match[1], 10);
320
+ const bodyStart = headerEnd + 4;
321
+ const bodyEnd = bodyStart + contentLength;
322
+ if (this.buffer.length < bodyEnd)
323
+ break; // Incomplete body
324
+ const body = this.buffer.slice(bodyStart, bodyEnd);
325
+ this.buffer = this.buffer.slice(bodyEnd);
326
+ try {
327
+ const message = JSON.parse(body);
328
+ this.handleMessage(message);
329
+ }
330
+ catch {
331
+ // Malformed JSON — skip
332
+ }
333
+ }
334
+ }
335
+ handleMessage(message) {
336
+ // Response (has id)
337
+ if ("id" in message && message.id !== null) {
338
+ const id = message.id;
339
+ const pending = this.pending.get(id);
340
+ if (pending) {
341
+ clearTimeout(pending.timer);
342
+ this.pending.delete(id);
343
+ pending.resolve(message);
344
+ }
345
+ return;
346
+ }
347
+ // Server → client request (has id + method, needs response)
348
+ if ("id" in message && "method" in message) {
349
+ const method = message.method;
350
+ // Handle common server requests with empty responses
351
+ if (method === "window/workDoneProgress/create" ||
352
+ method === "client/registerCapability" ||
353
+ method === "client/unregisterCapability") {
354
+ this.writeMessage({
355
+ jsonrpc: "2.0",
356
+ id: message.id,
357
+ result: null,
358
+ });
359
+ }
360
+ else if (method === "workspace/configuration") {
361
+ // Return initialization options for each requested item
362
+ const items = message.params?.items ?? [];
363
+ this.writeMessage({
364
+ jsonrpc: "2.0",
365
+ id: message.id,
366
+ result: items.map(() => this.config.initializationOptions ?? {}),
367
+ });
368
+ }
369
+ return;
370
+ }
371
+ // Notification (no id)
372
+ if ("method" in message) {
373
+ this.handleNotification(message);
374
+ }
375
+ }
376
+ handleNotification(notification) {
377
+ if (notification.method === "textDocument/publishDiagnostics") {
378
+ const params = notification.params;
379
+ const filePath = this.uriToPath(params.uri);
380
+ this.diagnosticsCache.set(filePath, params.diagnostics);
381
+ this.notifyDiagnosticsWaiters(filePath);
382
+ }
383
+ // Other notifications silently ignored
384
+ }
385
+ // ── Helpers ──────────────────────────────────────────────
386
+ uriToPath(uri) {
387
+ // file:///C:/foo/bar.ts → C:/foo/bar.ts (Windows)
388
+ // file:///home/user/bar.ts → /home/user/bar.ts (Unix)
389
+ try {
390
+ const url = new URL(uri);
391
+ if (url.protocol === "file:") {
392
+ // On Windows, pathname starts with / before drive letter
393
+ let p = decodeURIComponent(url.pathname);
394
+ if (process.platform === "win32" && p.startsWith("/") && /^\/[A-Za-z]:/.test(p)) {
395
+ p = p.slice(1);
396
+ }
397
+ return p;
398
+ }
399
+ }
400
+ catch {
401
+ // Not a valid URL
402
+ }
403
+ return uri;
404
+ }
405
+ handleProcessExit() {
406
+ if (this.state === "ready" || this.state === "connecting") {
407
+ this.state = "broken";
408
+ }
409
+ this.rejectAllPending("LSP server exited");
410
+ this.clearAllWaiters();
411
+ this.process = null;
412
+ }
413
+ rejectAllPending(reason) {
414
+ for (const [id, req] of this.pending) {
415
+ clearTimeout(req.timer);
416
+ req.reject(new Error(reason));
417
+ }
418
+ this.pending.clear();
419
+ }
420
+ }
421
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lsp/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * LSP Module — Language Server Protocol integration.
3
+ *
4
+ * High-level facade for managing LSP clients:
5
+ * - Auto-spawns appropriate language server for each file type
6
+ * - Caches broken servers to avoid repeated spawn attempts
7
+ * - Provides touchFile() → diagnostics() flow for edit tools
8
+ * - Single instance shared across all swarm agents (concurrent-safe)
9
+ *
10
+ * Usage:
11
+ * const lsp = new LSPManager(rootDir);
12
+ * await lsp.touchFile("src/index.ts", true); // true = wait for diagnostics
13
+ * const diags = lsp.getDiagnostics("src/index.ts");
14
+ *
15
+ * Swarm-aware: Multiple agents can call touchFile() concurrently.
16
+ * File versions are tracked per-file, not per-agent.
17
+ */
18
+ import type { LSPServerConfig, LSPDiagnostic, LSPClientInfo } from "./types.js";
19
+ export { LSPClient } from "./client.js";
20
+ export { BUILTIN_SERVERS, TYPESCRIPT_SERVER, PYRIGHT_SERVER, GOPLS_SERVER, RUST_ANALYZER_SERVER, findServersForExtension, getLanguageId, LANGUAGE_MAP, } from "./servers.js";
21
+ export type { LSPServerConfig, LSPDiagnostic, LSPClientState, LSPClientInfo, LSPPosition, LSPRange, DiagnosticSeverity, InitializeResult, ServerCapabilities, PublishDiagnosticsParams, } from "./types.js";
22
+ export { DiagnosticSeverity as DiagSeverity } from "./types.js";
23
+ export declare class LSPManager {
24
+ private readonly rootDir;
25
+ private readonly clients;
26
+ private readonly broken;
27
+ private readonly spawning;
28
+ private customServers;
29
+ private disabled;
30
+ constructor(rootDir: string);
31
+ /**
32
+ * Add custom server configurations (from config file).
33
+ */
34
+ addServers(servers: LSPServerConfig[]): void;
35
+ /**
36
+ * Disable LSP entirely (e.g., from config: `lsp: false`).
37
+ */
38
+ disable(): void;
39
+ /**
40
+ * Touch a file — notify appropriate LSP servers and optionally
41
+ * wait for diagnostics.
42
+ *
43
+ * Lazily spawns servers on first call for each file type.
44
+ * Skips broken servers silently.
45
+ */
46
+ touchFile(filePath: string, waitForDiagnostics?: boolean): Promise<void>;
47
+ /**
48
+ * Get diagnostics for a specific file across all active servers.
49
+ */
50
+ getDiagnostics(filePath: string): LSPDiagnostic[];
51
+ /**
52
+ * Get error-level diagnostics for a file, formatted for tool output.
53
+ *
54
+ * Returns a string suitable for appending to edit_file results,
55
+ * or empty string if no errors.
56
+ */
57
+ getErrorDiagnosticsText(filePath: string): string;
58
+ /**
59
+ * Get info about all active clients.
60
+ */
61
+ getClientInfos(): LSPClientInfo[];
62
+ /**
63
+ * Check if a server is marked as broken.
64
+ */
65
+ isBroken(serverId: string): boolean;
66
+ /**
67
+ * Dispose all clients and clear state.
68
+ */
69
+ disposeAll(): void;
70
+ private getClientsForFile;
71
+ private spawnClient;
72
+ }
73
+ /**
74
+ * Format a diagnostic for human-readable output.
75
+ */
76
+ export declare function formatDiagnostic(d: LSPDiagnostic): string;
77
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lsp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AAEpG,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,uBAAuB,EACvB,aAAa,EACb,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,eAAe,EACf,aAAa,EACb,cAAc,EACd,aAAa,EACb,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAQhE,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgD;IACzE,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,MAAM;IAM3B;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI;IAI5C;;OAEG;IACH,OAAO,IAAI,IAAI;IAOf;;;;;;OAMG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,kBAAkB,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAe5E;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAQjD;;;;;OAKG;IACH,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAcjD;;OAEG;IACH,cAAc,IAAI,aAAa,EAAE;IAIjC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAMnC;;OAEG;IACH,UAAU,IAAI,IAAI;YAWJ,iBAAiB;YA+CjB,WAAW;CAgB1B;AAID;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAMzD"}