@chances-ai/engine 24.0.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 (389) hide show
  1. package/dist/agents/discover.d.ts +30 -0
  2. package/dist/agents/discover.d.ts.map +1 -0
  3. package/dist/agents/discover.js +183 -0
  4. package/dist/agents/discover.js.map +1 -0
  5. package/dist/agents/index.d.ts +20 -0
  6. package/dist/agents/index.d.ts.map +1 -0
  7. package/dist/agents/index.js +52 -0
  8. package/dist/agents/index.js.map +1 -0
  9. package/dist/agents/parse.d.ts +61 -0
  10. package/dist/agents/parse.d.ts.map +1 -0
  11. package/dist/agents/parse.js +527 -0
  12. package/dist/agents/parse.js.map +1 -0
  13. package/dist/agents/types.d.ts +52 -0
  14. package/dist/agents/types.d.ts.map +1 -0
  15. package/dist/agents/types.js +8 -0
  16. package/dist/agents/types.js.map +1 -0
  17. package/dist/ai/adapters/ai-sdk-stream.d.ts +19 -0
  18. package/dist/ai/adapters/ai-sdk-stream.d.ts.map +1 -0
  19. package/dist/ai/adapters/ai-sdk-stream.js +125 -0
  20. package/dist/ai/adapters/ai-sdk-stream.js.map +1 -0
  21. package/dist/ai/adapters/ai-sdk.d.ts +56 -0
  22. package/dist/ai/adapters/ai-sdk.d.ts.map +1 -0
  23. package/dist/ai/adapters/ai-sdk.js +112 -0
  24. package/dist/ai/adapters/ai-sdk.js.map +1 -0
  25. package/dist/ai/adapters/mock.d.ts +13 -0
  26. package/dist/ai/adapters/mock.d.ts.map +1 -0
  27. package/dist/ai/adapters/mock.js +54 -0
  28. package/dist/ai/adapters/mock.js.map +1 -0
  29. package/dist/ai/adapters/openai-compatible.d.ts +23 -0
  30. package/dist/ai/adapters/openai-compatible.d.ts.map +1 -0
  31. package/dist/ai/adapters/openai-compatible.js +45 -0
  32. package/dist/ai/adapters/openai-compatible.js.map +1 -0
  33. package/dist/ai/cost.d.ts +3 -0
  34. package/dist/ai/cost.d.ts.map +1 -0
  35. package/dist/ai/cost.js +5 -0
  36. package/dist/ai/cost.js.map +1 -0
  37. package/dist/ai/index.d.ts +12 -0
  38. package/dist/ai/index.d.ts.map +1 -0
  39. package/dist/ai/index.js +11 -0
  40. package/dist/ai/index.js.map +1 -0
  41. package/dist/ai/known-models.d.ts +20 -0
  42. package/dist/ai/known-models.d.ts.map +1 -0
  43. package/dist/ai/known-models.js +129 -0
  44. package/dist/ai/known-models.js.map +1 -0
  45. package/dist/ai/registry.d.ts +12 -0
  46. package/dist/ai/registry.d.ts.map +1 -0
  47. package/dist/ai/registry.js +24 -0
  48. package/dist/ai/registry.js.map +1 -0
  49. package/dist/ai/retry.d.ts +11 -0
  50. package/dist/ai/retry.d.ts.map +1 -0
  51. package/dist/ai/retry.js +14 -0
  52. package/dist/ai/retry.js.map +1 -0
  53. package/dist/ai/router.d.ts +25 -0
  54. package/dist/ai/router.d.ts.map +1 -0
  55. package/dist/ai/router.js +36 -0
  56. package/dist/ai/router.js.map +1 -0
  57. package/dist/ai/setup.d.ts +23 -0
  58. package/dist/ai/setup.d.ts.map +1 -0
  59. package/dist/ai/setup.js +47 -0
  60. package/dist/ai/setup.js.map +1 -0
  61. package/dist/ai/summarizer.d.ts +24 -0
  62. package/dist/ai/summarizer.d.ts.map +1 -0
  63. package/dist/ai/summarizer.js +56 -0
  64. package/dist/ai/summarizer.js.map +1 -0
  65. package/dist/ai/types.d.ts +83 -0
  66. package/dist/ai/types.d.ts.map +1 -0
  67. package/dist/ai/types.js +2 -0
  68. package/dist/ai/types.js.map +1 -0
  69. package/dist/core/compaction/circuit-breaker.d.ts +32 -0
  70. package/dist/core/compaction/circuit-breaker.d.ts.map +1 -0
  71. package/dist/core/compaction/circuit-breaker.js +42 -0
  72. package/dist/core/compaction/circuit-breaker.js.map +1 -0
  73. package/dist/core/compaction/compactor.d.ts +75 -0
  74. package/dist/core/compaction/compactor.d.ts.map +1 -0
  75. package/dist/core/compaction/compactor.js +261 -0
  76. package/dist/core/compaction/compactor.js.map +1 -0
  77. package/dist/core/compaction/estimate.d.ts +39 -0
  78. package/dist/core/compaction/estimate.d.ts.map +1 -0
  79. package/dist/core/compaction/estimate.js +74 -0
  80. package/dist/core/compaction/estimate.js.map +1 -0
  81. package/dist/core/compaction/index.d.ts +5 -0
  82. package/dist/core/compaction/index.d.ts.map +1 -0
  83. package/dist/core/compaction/index.js +5 -0
  84. package/dist/core/compaction/index.js.map +1 -0
  85. package/dist/core/compaction/prune.d.ts +43 -0
  86. package/dist/core/compaction/prune.d.ts.map +1 -0
  87. package/dist/core/compaction/prune.js +51 -0
  88. package/dist/core/compaction/prune.js.map +1 -0
  89. package/dist/core/engine.d.ts +268 -0
  90. package/dist/core/engine.d.ts.map +1 -0
  91. package/dist/core/engine.js +767 -0
  92. package/dist/core/engine.js.map +1 -0
  93. package/dist/core/index.d.ts +6 -0
  94. package/dist/core/index.d.ts.map +1 -0
  95. package/dist/core/index.js +6 -0
  96. package/dist/core/index.js.map +1 -0
  97. package/dist/core/task-tool.d.ts +175 -0
  98. package/dist/core/task-tool.d.ts.map +1 -0
  99. package/dist/core/task-tool.js +901 -0
  100. package/dist/core/task-tool.js.map +1 -0
  101. package/dist/core/workspace-query.d.ts +83 -0
  102. package/dist/core/workspace-query.d.ts.map +1 -0
  103. package/dist/core/workspace-query.js +217 -0
  104. package/dist/core/workspace-query.js.map +1 -0
  105. package/dist/core/worktree/active-marker.d.ts +31 -0
  106. package/dist/core/worktree/active-marker.d.ts.map +1 -0
  107. package/dist/core/worktree/active-marker.js +109 -0
  108. package/dist/core/worktree/active-marker.js.map +1 -0
  109. package/dist/core/worktree/create.d.ts +40 -0
  110. package/dist/core/worktree/create.d.ts.map +1 -0
  111. package/dist/core/worktree/create.js +121 -0
  112. package/dist/core/worktree/create.js.map +1 -0
  113. package/dist/core/worktree/errors.d.ts +7 -0
  114. package/dist/core/worktree/errors.d.ts.map +1 -0
  115. package/dist/core/worktree/errors.js +11 -0
  116. package/dist/core/worktree/errors.js.map +1 -0
  117. package/dist/core/worktree/gc.d.ts +39 -0
  118. package/dist/core/worktree/gc.d.ts.map +1 -0
  119. package/dist/core/worktree/gc.js +146 -0
  120. package/dist/core/worktree/gc.js.map +1 -0
  121. package/dist/core/worktree/git.d.ts +53 -0
  122. package/dist/core/worktree/git.d.ts.map +1 -0
  123. package/dist/core/worktree/git.js +166 -0
  124. package/dist/core/worktree/git.js.map +1 -0
  125. package/dist/core/worktree/index.d.ts +8 -0
  126. package/dist/core/worktree/index.d.ts.map +1 -0
  127. package/dist/core/worktree/index.js +8 -0
  128. package/dist/core/worktree/index.js.map +1 -0
  129. package/dist/core/worktree/paths.d.ts +26 -0
  130. package/dist/core/worktree/paths.d.ts.map +1 -0
  131. package/dist/core/worktree/paths.js +57 -0
  132. package/dist/core/worktree/paths.js.map +1 -0
  133. package/dist/core/worktree/slug.d.ts +6 -0
  134. package/dist/core/worktree/slug.d.ts.map +1 -0
  135. package/dist/core/worktree/slug.js +21 -0
  136. package/dist/core/worktree/slug.js.map +1 -0
  137. package/dist/local-vault/file-store.d.ts +64 -0
  138. package/dist/local-vault/file-store.d.ts.map +1 -0
  139. package/dist/local-vault/file-store.js +225 -0
  140. package/dist/local-vault/file-store.js.map +1 -0
  141. package/dist/local-vault/index.d.ts +57 -0
  142. package/dist/local-vault/index.d.ts.map +1 -0
  143. package/dist/local-vault/index.js +68 -0
  144. package/dist/local-vault/index.js.map +1 -0
  145. package/dist/local-vault/keychain.d.ts +58 -0
  146. package/dist/local-vault/keychain.d.ts.map +1 -0
  147. package/dist/local-vault/keychain.js +200 -0
  148. package/dist/local-vault/keychain.js.map +1 -0
  149. package/dist/local-vault/mutex.d.ts +20 -0
  150. package/dist/local-vault/mutex.d.ts.map +1 -0
  151. package/dist/local-vault/mutex.js +44 -0
  152. package/dist/local-vault/mutex.js.map +1 -0
  153. package/dist/local-vault/passphrase.d.ts +30 -0
  154. package/dist/local-vault/passphrase.d.ts.map +1 -0
  155. package/dist/local-vault/passphrase.js +72 -0
  156. package/dist/local-vault/passphrase.js.map +1 -0
  157. package/dist/lsp/config.d.ts +34 -0
  158. package/dist/lsp/config.d.ts.map +1 -0
  159. package/dist/lsp/config.js +68 -0
  160. package/dist/lsp/config.js.map +1 -0
  161. package/dist/lsp/detect.d.ts +7 -0
  162. package/dist/lsp/detect.d.ts.map +1 -0
  163. package/dist/lsp/detect.js +78 -0
  164. package/dist/lsp/detect.js.map +1 -0
  165. package/dist/lsp/errors.d.ts +11 -0
  166. package/dist/lsp/errors.d.ts.map +1 -0
  167. package/dist/lsp/errors.js +11 -0
  168. package/dist/lsp/errors.js.map +1 -0
  169. package/dist/lsp/formatters.d.ts +147 -0
  170. package/dist/lsp/formatters.d.ts.map +1 -0
  171. package/dist/lsp/formatters.js +259 -0
  172. package/dist/lsp/formatters.js.map +1 -0
  173. package/dist/lsp/index.d.ts +31 -0
  174. package/dist/lsp/index.d.ts.map +1 -0
  175. package/dist/lsp/index.js +31 -0
  176. package/dist/lsp/index.js.map +1 -0
  177. package/dist/lsp/instance.d.ts +72 -0
  178. package/dist/lsp/instance.d.ts.map +1 -0
  179. package/dist/lsp/instance.js +489 -0
  180. package/dist/lsp/instance.js.map +1 -0
  181. package/dist/lsp/lazy-load.d.ts +27 -0
  182. package/dist/lsp/lazy-load.d.ts.map +1 -0
  183. package/dist/lsp/lazy-load.js +57 -0
  184. package/dist/lsp/lazy-load.js.map +1 -0
  185. package/dist/lsp/manager.d.ts +59 -0
  186. package/dist/lsp/manager.d.ts.map +1 -0
  187. package/dist/lsp/manager.js +242 -0
  188. package/dist/lsp/manager.js.map +1 -0
  189. package/dist/lsp/ops.d.ts +13 -0
  190. package/dist/lsp/ops.d.ts.map +1 -0
  191. package/dist/lsp/ops.js +225 -0
  192. package/dist/lsp/ops.js.map +1 -0
  193. package/dist/lsp/rpc.d.ts +47 -0
  194. package/dist/lsp/rpc.d.ts.map +1 -0
  195. package/dist/lsp/rpc.js +134 -0
  196. package/dist/lsp/rpc.js.map +1 -0
  197. package/dist/lsp/safe-uri.d.ts +18 -0
  198. package/dist/lsp/safe-uri.d.ts.map +1 -0
  199. package/dist/lsp/safe-uri.js +96 -0
  200. package/dist/lsp/safe-uri.js.map +1 -0
  201. package/dist/lsp/types.d.ts +70 -0
  202. package/dist/lsp/types.d.ts.map +1 -0
  203. package/dist/lsp/types.js +16 -0
  204. package/dist/lsp/types.js.map +1 -0
  205. package/dist/mcp/bridge.d.ts +57 -0
  206. package/dist/mcp/bridge.d.ts.map +1 -0
  207. package/dist/mcp/bridge.js +98 -0
  208. package/dist/mcp/bridge.js.map +1 -0
  209. package/dist/mcp/category.d.ts +22 -0
  210. package/dist/mcp/category.d.ts.map +1 -0
  211. package/dist/mcp/category.js +11 -0
  212. package/dist/mcp/category.js.map +1 -0
  213. package/dist/mcp/client.d.ts +228 -0
  214. package/dist/mcp/client.d.ts.map +1 -0
  215. package/dist/mcp/client.js +352 -0
  216. package/dist/mcp/client.js.map +1 -0
  217. package/dist/mcp/content.d.ts +86 -0
  218. package/dist/mcp/content.d.ts.map +1 -0
  219. package/dist/mcp/content.js +147 -0
  220. package/dist/mcp/content.js.map +1 -0
  221. package/dist/mcp/env.d.ts +19 -0
  222. package/dist/mcp/env.d.ts.map +1 -0
  223. package/dist/mcp/env.js +50 -0
  224. package/dist/mcp/env.js.map +1 -0
  225. package/dist/mcp/host.d.ts +199 -0
  226. package/dist/mcp/host.d.ts.map +1 -0
  227. package/dist/mcp/host.js +530 -0
  228. package/dist/mcp/host.js.map +1 -0
  229. package/dist/mcp/index.d.ts +18 -0
  230. package/dist/mcp/index.d.ts.map +1 -0
  231. package/dist/mcp/index.js +17 -0
  232. package/dist/mcp/index.js.map +1 -0
  233. package/dist/mcp/load-mcp-host.d.ts +32 -0
  234. package/dist/mcp/load-mcp-host.d.ts.map +1 -0
  235. package/dist/mcp/load-mcp-host.js +49 -0
  236. package/dist/mcp/load-mcp-host.js.map +1 -0
  237. package/dist/mcp/oauth/callback-server.d.ts +73 -0
  238. package/dist/mcp/oauth/callback-server.d.ts.map +1 -0
  239. package/dist/mcp/oauth/callback-server.js +280 -0
  240. package/dist/mcp/oauth/callback-server.js.map +1 -0
  241. package/dist/mcp/oauth/config-hash.d.ts +24 -0
  242. package/dist/mcp/oauth/config-hash.d.ts.map +1 -0
  243. package/dist/mcp/oauth/config-hash.js +55 -0
  244. package/dist/mcp/oauth/config-hash.js.map +1 -0
  245. package/dist/mcp/oauth/error-normalize.d.ts +39 -0
  246. package/dist/mcp/oauth/error-normalize.d.ts.map +1 -0
  247. package/dist/mcp/oauth/error-normalize.js +91 -0
  248. package/dist/mcp/oauth/error-normalize.js.map +1 -0
  249. package/dist/mcp/oauth/provider.d.ts +190 -0
  250. package/dist/mcp/oauth/provider.d.ts.map +1 -0
  251. package/dist/mcp/oauth/provider.js +305 -0
  252. package/dist/mcp/oauth/provider.js.map +1 -0
  253. package/dist/mcp/oauth/refresh-coalescer.d.ts +46 -0
  254. package/dist/mcp/oauth/refresh-coalescer.d.ts.map +1 -0
  255. package/dist/mcp/oauth/refresh-coalescer.js +77 -0
  256. package/dist/mcp/oauth/refresh-coalescer.js.map +1 -0
  257. package/dist/mcp/oauth/sdk-shapes.d.ts +77 -0
  258. package/dist/mcp/oauth/sdk-shapes.d.ts.map +1 -0
  259. package/dist/mcp/oauth/sdk-shapes.js +21 -0
  260. package/dist/mcp/oauth/sdk-shapes.js.map +1 -0
  261. package/dist/mcp/parse.d.ts +28 -0
  262. package/dist/mcp/parse.d.ts.map +1 -0
  263. package/dist/mcp/parse.js +209 -0
  264. package/dist/mcp/parse.js.map +1 -0
  265. package/dist/mcp/prompts.d.ts +31 -0
  266. package/dist/mcp/prompts.d.ts.map +1 -0
  267. package/dist/mcp/prompts.js +71 -0
  268. package/dist/mcp/prompts.js.map +1 -0
  269. package/dist/mcp/redact.d.ts +62 -0
  270. package/dist/mcp/redact.d.ts.map +1 -0
  271. package/dist/mcp/redact.js +87 -0
  272. package/dist/mcp/redact.js.map +1 -0
  273. package/dist/mcp/resources.d.ts +70 -0
  274. package/dist/mcp/resources.d.ts.map +1 -0
  275. package/dist/mcp/resources.js +170 -0
  276. package/dist/mcp/resources.js.map +1 -0
  277. package/dist/mcp/types.d.ts +123 -0
  278. package/dist/mcp/types.d.ts.map +1 -0
  279. package/dist/mcp/types.js +2 -0
  280. package/dist/mcp/types.js.map +1 -0
  281. package/dist/memory/frontmatter.d.ts +18 -0
  282. package/dist/memory/frontmatter.d.ts.map +1 -0
  283. package/dist/memory/frontmatter.js +81 -0
  284. package/dist/memory/frontmatter.js.map +1 -0
  285. package/dist/memory/index.d.ts +5 -0
  286. package/dist/memory/index.d.ts.map +1 -0
  287. package/dist/memory/index.js +5 -0
  288. package/dist/memory/index.js.map +1 -0
  289. package/dist/memory/store.d.ts +44 -0
  290. package/dist/memory/store.d.ts.map +1 -0
  291. package/dist/memory/store.js +237 -0
  292. package/dist/memory/store.js.map +1 -0
  293. package/dist/memory/tools.d.ts +11 -0
  294. package/dist/memory/tools.d.ts.map +1 -0
  295. package/dist/memory/tools.js +159 -0
  296. package/dist/memory/tools.js.map +1 -0
  297. package/dist/memory/types.d.ts +32 -0
  298. package/dist/memory/types.d.ts.map +1 -0
  299. package/dist/memory/types.js +20 -0
  300. package/dist/memory/types.js.map +1 -0
  301. package/dist/plugin-api/index.d.ts +167 -0
  302. package/dist/plugin-api/index.d.ts.map +1 -0
  303. package/dist/plugin-api/index.js +151 -0
  304. package/dist/plugin-api/index.js.map +1 -0
  305. package/dist/plugin-logger/index.d.ts +21 -0
  306. package/dist/plugin-logger/index.d.ts.map +1 -0
  307. package/dist/plugin-logger/index.js +59 -0
  308. package/dist/plugin-logger/index.js.map +1 -0
  309. package/dist/session/index.d.ts +125 -0
  310. package/dist/session/index.d.ts.map +1 -0
  311. package/dist/session/index.js +202 -0
  312. package/dist/session/index.js.map +1 -0
  313. package/dist/tools/approval.d.ts +33 -0
  314. package/dist/tools/approval.d.ts.map +1 -0
  315. package/dist/tools/approval.js +53 -0
  316. package/dist/tools/approval.js.map +1 -0
  317. package/dist/tools/builtins/_shared.d.ts +94 -0
  318. package/dist/tools/builtins/_shared.d.ts.map +1 -0
  319. package/dist/tools/builtins/_shared.js +246 -0
  320. package/dist/tools/builtins/_shared.js.map +1 -0
  321. package/dist/tools/builtins/ask-user-question.d.ts +27 -0
  322. package/dist/tools/builtins/ask-user-question.d.ts.map +1 -0
  323. package/dist/tools/builtins/ask-user-question.js +191 -0
  324. package/dist/tools/builtins/ask-user-question.js.map +1 -0
  325. package/dist/tools/builtins/bash.d.ts +3 -0
  326. package/dist/tools/builtins/bash.d.ts.map +1 -0
  327. package/dist/tools/builtins/bash.js +158 -0
  328. package/dist/tools/builtins/bash.js.map +1 -0
  329. package/dist/tools/builtins/diff.d.ts +3 -0
  330. package/dist/tools/builtins/diff.d.ts.map +1 -0
  331. package/dist/tools/builtins/diff.js +83 -0
  332. package/dist/tools/builtins/diff.js.map +1 -0
  333. package/dist/tools/builtins/edit.d.ts +3 -0
  334. package/dist/tools/builtins/edit.d.ts.map +1 -0
  335. package/dist/tools/builtins/edit.js +40 -0
  336. package/dist/tools/builtins/edit.js.map +1 -0
  337. package/dist/tools/builtins/glob.d.ts +3 -0
  338. package/dist/tools/builtins/glob.d.ts.map +1 -0
  339. package/dist/tools/builtins/glob.js +37 -0
  340. package/dist/tools/builtins/glob.js.map +1 -0
  341. package/dist/tools/builtins/grep.d.ts +3 -0
  342. package/dist/tools/builtins/grep.d.ts.map +1 -0
  343. package/dist/tools/builtins/grep.js +81 -0
  344. package/dist/tools/builtins/grep.js.map +1 -0
  345. package/dist/tools/builtins/lsp.d.ts +3 -0
  346. package/dist/tools/builtins/lsp.d.ts.map +1 -0
  347. package/dist/tools/builtins/lsp.js +102 -0
  348. package/dist/tools/builtins/lsp.js.map +1 -0
  349. package/dist/tools/builtins/pty.d.ts +64 -0
  350. package/dist/tools/builtins/pty.d.ts.map +1 -0
  351. package/dist/tools/builtins/pty.js +536 -0
  352. package/dist/tools/builtins/pty.js.map +1 -0
  353. package/dist/tools/builtins/read.d.ts +3 -0
  354. package/dist/tools/builtins/read.d.ts.map +1 -0
  355. package/dist/tools/builtins/read.js +18 -0
  356. package/dist/tools/builtins/read.js.map +1 -0
  357. package/dist/tools/builtins/web-fetch.d.ts +4 -0
  358. package/dist/tools/builtins/web-fetch.d.ts.map +1 -0
  359. package/dist/tools/builtins/web-fetch.js +353 -0
  360. package/dist/tools/builtins/web-fetch.js.map +1 -0
  361. package/dist/tools/builtins/write.d.ts +3 -0
  362. package/dist/tools/builtins/write.d.ts.map +1 -0
  363. package/dist/tools/builtins/write.js +48 -0
  364. package/dist/tools/builtins/write.js.map +1 -0
  365. package/dist/tools/builtins.d.ts +9 -0
  366. package/dist/tools/builtins.d.ts.map +1 -0
  367. package/dist/tools/builtins.js +29 -0
  368. package/dist/tools/builtins.js.map +1 -0
  369. package/dist/tools/diff.d.ts +18 -0
  370. package/dist/tools/diff.d.ts.map +1 -0
  371. package/dist/tools/diff.js +57 -0
  372. package/dist/tools/diff.js.map +1 -0
  373. package/dist/tools/index.d.ts +10 -0
  374. package/dist/tools/index.d.ts.map +1 -0
  375. package/dist/tools/index.js +9 -0
  376. package/dist/tools/index.js.map +1 -0
  377. package/dist/tools/permission.d.ts +120 -0
  378. package/dist/tools/permission.d.ts.map +1 -0
  379. package/dist/tools/permission.js +208 -0
  380. package/dist/tools/permission.js.map +1 -0
  381. package/dist/tools/registry.d.ts +12 -0
  382. package/dist/tools/registry.d.ts.map +1 -0
  383. package/dist/tools/registry.js +19 -0
  384. package/dist/tools/registry.js.map +1 -0
  385. package/dist/tools/types.d.ts +244 -0
  386. package/dist/tools/types.d.ts.map +1 -0
  387. package/dist/tools/types.js +15 -0
  388. package/dist/tools/types.js.map +1 -0
  389. package/package.json +109 -0
@@ -0,0 +1,489 @@
1
+ /**
2
+ * (4.2) LspServerInstance — one process + connection + open-doc LRU
3
+ * per `(command, cwd)` cache slot.
4
+ *
5
+ * State machine: 'stopped' → 'starting' → 'running' → ('stopping' |
6
+ * 'error' → 'starting' (up to maxRestarts) → 'failed').
7
+ *
8
+ * Folded codex Round-1 findings:
9
+ * - MUST-FIX #5: PendingRegistry; crash settles all pending before
10
+ * any restart; cancellation throws AppError(Cancelled).
11
+ * - SHOULD-FIX #1: -32801 content-modified → 3 retries 500/1000/
12
+ * 2000 ms exp backoff; signal-aware between sleeps.
13
+ * - SHOULD-FIX #2: bounded open-doc LRU per instance; didClose on
14
+ * evict and on dispose.
15
+ * - NICE #2: capabilities.workspace.workspaceFolders = false; still
16
+ * pass workspaceFolders array in initialize params.
17
+ */
18
+ import { spawn } from "node:child_process";
19
+ import { readFileSync, realpathSync } from "node:fs";
20
+ import { basename } from "node:path";
21
+ import { pathToFileURL } from "node:url";
22
+ import { AppError, ErrorCode } from "@chances-ai/runtime";
23
+ import { LspError } from "./errors.js";
24
+ import { PendingRegistry } from "./rpc.js";
25
+ import { loadVscodeJsonRpc } from "./lazy-load.js";
26
+ const DEFAULT_STARTUP_TIMEOUT_MS = 15_000;
27
+ const DEFAULT_REQUEST_TIMEOUT_MS = 30_000;
28
+ const DEFAULT_MAX_RESTARTS = 3;
29
+ const DEFAULT_MAX_OPEN_DOCS = 64;
30
+ const TRANSIENT_BACKOFF_MS = [500, 1000, 2000];
31
+ const SHUTDOWN_DEADLINE_MS = 2_000;
32
+ const SIGKILL_DEADLINE_MS = 100;
33
+ /** LSP-defined error code for "content was modified between request
34
+ * and response". rust-analyzer sends this during indexing; matches
35
+ * claude-code's retry list. */
36
+ const CONTENT_MODIFIED_CODE = -32801;
37
+ export class LspServerInstance {
38
+ opts;
39
+ state = "stopped";
40
+ restartCount = 0;
41
+ lastActivityAt = Date.now();
42
+ child;
43
+ conn;
44
+ startPromise;
45
+ pending = new PendingRegistry();
46
+ openDocs = new Map(); // path → openedAt
47
+ disposed = false;
48
+ constructor(opts) {
49
+ this.opts = opts;
50
+ }
51
+ get activeRequests() {
52
+ return this.pending.activeRequests;
53
+ }
54
+ isIdle() {
55
+ return this.activeRequests === 0 && this.state === "running";
56
+ }
57
+ /** Ensures the server is `running`. Idempotent — concurrent callers
58
+ * share the in-flight startup promise. */
59
+ async ensureStarted(signal) {
60
+ if (this.disposed)
61
+ throw new LspError("SERVER_STICKY_FAILED", `${this.opts.name}: instance disposed`);
62
+ if (this.state === "running")
63
+ return;
64
+ if (this.state === "failed") {
65
+ throw new LspError("SERVER_STICKY_FAILED", `${this.opts.name}: failed after ${this.restartCount} restarts; run /mcp restart or fix the binary and reload`);
66
+ }
67
+ if (this.startPromise)
68
+ return this.startPromise;
69
+ this.startPromise = this.start(signal).finally(() => {
70
+ this.startPromise = undefined;
71
+ });
72
+ return this.startPromise;
73
+ }
74
+ async start(signal) {
75
+ this.state = "starting";
76
+ const startupTimeoutMs = this.opts.config.startupTimeoutMs ?? DEFAULT_STARTUP_TIMEOUT_MS;
77
+ // Real connection: require vscode-jsonrpc. If absent, fail before spawn.
78
+ let buildConn = this.opts.connectionFactory;
79
+ if (!buildConn) {
80
+ const mod = await loadVscodeJsonRpc();
81
+ if (!mod) {
82
+ this.state = "failed";
83
+ throw new LspError("SERVER_STICKY_FAILED", "vscode-jsonrpc peer dep not installed");
84
+ }
85
+ buildConn = async (child) => {
86
+ const reader = new mod.StreamMessageReader(child.stdout);
87
+ const writer = new mod.StreamMessageWriter(child.stdin);
88
+ const conn = mod.createMessageConnection(reader, writer);
89
+ conn.listen();
90
+ return conn;
91
+ };
92
+ // (codex Round-2 MUST-FIX #2) Wire vscode-jsonrpc's native
93
+ // CancellationTokenSource so `pending.send` cancels through the
94
+ // library — which knows the wire-level id and emits the correct
95
+ // `$/cancelRequest`. We snake this through the dynamic import
96
+ // because vscode-jsonrpc owns the type and the lazy-load module
97
+ // only re-exports the three transport pieces.
98
+ try {
99
+ const ctsCtor = await loadCancellationTokenSource();
100
+ if (ctsCtor)
101
+ this.pending.setCancellationFactory(() => new ctsCtor());
102
+ }
103
+ catch {
104
+ /* fall back to abort-only; the synthetic-id bug is what we cared about */
105
+ }
106
+ }
107
+ const spawnImpl = this.opts.spawnFn ?? spawn;
108
+ let child;
109
+ try {
110
+ child = spawnImpl(this.opts.command, [...this.opts.args], {
111
+ cwd: this.opts.cwd,
112
+ stdio: ["pipe", "pipe", "pipe"],
113
+ env: { ...process.env, ...(this.opts.config.env ?? {}) },
114
+ });
115
+ }
116
+ catch (e) {
117
+ this.state = "error";
118
+ throw new LspError("BINARY_MISSING", `spawn failed for ${this.opts.command}`, e);
119
+ }
120
+ // ENOENT from the spawn itself only surfaces via the 'error'
121
+ // event; we await either 'spawn' (success) or 'error' (fail).
122
+ await new Promise((resolve, reject) => {
123
+ const onSpawn = () => {
124
+ child.off("error", onErr);
125
+ resolve();
126
+ };
127
+ const onErr = (err) => {
128
+ child.off("spawn", onSpawn);
129
+ if (err.code === "ENOENT") {
130
+ reject(new LspError("BINARY_MISSING", `${this.opts.command} not found on PATH`, err));
131
+ }
132
+ else {
133
+ reject(new LspError("BINARY_MISSING", `spawn failed for ${this.opts.command}: ${err.message}`, err));
134
+ }
135
+ };
136
+ child.once("spawn", onSpawn);
137
+ child.once("error", onErr);
138
+ }).catch((e) => {
139
+ this.state = "error";
140
+ throw e;
141
+ });
142
+ this.child = child;
143
+ child.stderr?.setEncoding("utf8");
144
+ child.stderr?.on("data", (chunk) => {
145
+ this.opts.logger.debug(`[lsp ${this.opts.name}] ${chunk.trim()}`);
146
+ });
147
+ child.on("close", (code, sigName) => this.onChildClose(code, sigName));
148
+ // Build the JSON-RPC connection over the child's pipes.
149
+ let conn;
150
+ try {
151
+ conn = await buildConn(child);
152
+ }
153
+ catch (e) {
154
+ this.state = "error";
155
+ try {
156
+ child.kill("SIGTERM");
157
+ }
158
+ catch { /* ignore */ }
159
+ throw new LspError("BINARY_MISSING", "vscode-jsonrpc connection setup failed", e);
160
+ }
161
+ this.conn = conn;
162
+ // Initialize handshake — bounded by startupTimeoutMs.
163
+ const initSignal = AbortSignal.timeout(startupTimeoutMs);
164
+ if (signal) {
165
+ // Propagate caller's cancellation too.
166
+ const composite = new AbortController();
167
+ const onTimeout = () => composite.abort(new LspError("START_TIMEOUT", "initialize timed out"));
168
+ const onSignal = () => composite.abort(new AppError(ErrorCode.Cancelled, "initialize cancelled"));
169
+ initSignal.addEventListener("abort", onTimeout, { once: true });
170
+ signal.addEventListener("abort", onSignal, { once: true });
171
+ try {
172
+ await this.initialize(conn, composite.signal);
173
+ }
174
+ catch (e) {
175
+ this.state = "error";
176
+ try {
177
+ child.kill("SIGTERM");
178
+ }
179
+ catch { /* ignore */ }
180
+ if (e instanceof AppError)
181
+ throw e;
182
+ if (e instanceof LspError)
183
+ throw e;
184
+ throw new LspError("START_TIMEOUT", `initialize failed: ${e.message}`, e);
185
+ }
186
+ }
187
+ else {
188
+ try {
189
+ await this.initialize(conn, initSignal);
190
+ }
191
+ catch (e) {
192
+ this.state = "error";
193
+ try {
194
+ child.kill("SIGTERM");
195
+ }
196
+ catch { /* ignore */ }
197
+ if (e instanceof LspError)
198
+ throw e;
199
+ throw new LspError("START_TIMEOUT", `initialize failed: ${e.message}`, e);
200
+ }
201
+ }
202
+ this.state = "running";
203
+ }
204
+ async initialize(conn, signal) {
205
+ const realCwd = (() => {
206
+ try {
207
+ return realpathSync(this.opts.cwd);
208
+ }
209
+ catch {
210
+ return this.opts.cwd;
211
+ }
212
+ })();
213
+ const rootUri = pathToFileURL(realCwd).toString();
214
+ const initParams = {
215
+ processId: process.pid,
216
+ workspaceFolders: [{ uri: rootUri, name: basename(realCwd) }],
217
+ rootUri,
218
+ rootPath: realCwd,
219
+ initializationOptions: this.opts.config.initializationOptions ?? {},
220
+ capabilities: {
221
+ general: { positionEncodings: ["utf-16"] },
222
+ workspace: {
223
+ // codex Round-1 NICE #2 — false because v1 does NOT implement
224
+ // didChangeWorkspaceFolders or related dynamics.
225
+ workspaceFolders: false,
226
+ configuration: false,
227
+ },
228
+ textDocument: {
229
+ synchronization: { didSave: true },
230
+ definition: { linkSupport: true },
231
+ references: { dynamicRegistration: false },
232
+ hover: { contentFormat: ["markdown", "plaintext"] },
233
+ documentSymbol: { hierarchicalDocumentSymbolSupport: true },
234
+ callHierarchy: { dynamicRegistration: false },
235
+ implementation: { linkSupport: true },
236
+ },
237
+ },
238
+ };
239
+ await this.pending.send({
240
+ connection: conn,
241
+ method: "initialize",
242
+ params: initParams,
243
+ signal,
244
+ requestTimeoutMs: this.opts.config.startupTimeoutMs ?? DEFAULT_STARTUP_TIMEOUT_MS,
245
+ });
246
+ conn.sendNotification("initialized", {});
247
+ }
248
+ onChildClose(code, signalName) {
249
+ if (this.state === "stopping") {
250
+ this.state = "stopped";
251
+ return;
252
+ }
253
+ if (this.state === "failed" || this.state === "stopped")
254
+ return;
255
+ // Crash path. Reject every pending request BEFORE we touch state
256
+ // so a concurrent caller can't trigger a restart that resurrects
257
+ // a stale id (codex Round-1 MUST-FIX #5).
258
+ const cause = new LspError("SERVER_CRASHED", `${this.opts.name} exited (code=${code ?? "null"}, signal=${signalName ?? "null"})`);
259
+ this.pending.rejectAll(cause);
260
+ this.openDocs.clear(); // server forgets every doc on restart
261
+ this.conn = undefined;
262
+ this.child = undefined;
263
+ this.restartCount++;
264
+ const maxRestarts = this.opts.config.maxRestarts ?? DEFAULT_MAX_RESTARTS;
265
+ if (this.restartCount > maxRestarts) {
266
+ this.state = "failed";
267
+ this.opts.logger.warn(`[lsp ${this.opts.name}] sticky-failed after ${this.restartCount} restarts`);
268
+ return;
269
+ }
270
+ this.state = "error";
271
+ this.opts.logger.warn(`[lsp ${this.opts.name}] crashed; will retry on next call (${this.restartCount}/${maxRestarts})`);
272
+ }
273
+ /** Sends a request. Handles the `-32801 content modified` retry
274
+ * loop with exponential backoff (codex Round-1 SHOULD-FIX #1).
275
+ * The total wallclock is bounded by the request-timeout budget
276
+ * (codex Round-2 SHOULD-FIX #1 — without the bound, three retries
277
+ * with fresh 30 s each can spend ~93 s on one request). */
278
+ async request(method, params, signal) {
279
+ await this.ensureStarted(signal);
280
+ if (!this.conn)
281
+ throw new LspError("SERVER_CRASHED", `${this.opts.name}: no live connection`);
282
+ const deadline = Date.now() + DEFAULT_REQUEST_TIMEOUT_MS;
283
+ this.lastActivityAt = Date.now();
284
+ for (let attempt = 0;; attempt++) {
285
+ const remaining = deadline - Date.now();
286
+ if (remaining <= 0) {
287
+ throw new LspError("REQUEST_TIMEOUT", `lsp ${method} timed out (retry budget exhausted)`);
288
+ }
289
+ try {
290
+ return await this.pending.send({
291
+ connection: this.conn,
292
+ method,
293
+ params,
294
+ signal,
295
+ requestTimeoutMs: remaining,
296
+ });
297
+ }
298
+ catch (e) {
299
+ if (signal.aborted)
300
+ throw e;
301
+ if (isContentModified(e) && attempt < TRANSIENT_BACKOFF_MS.length) {
302
+ const delay = TRANSIENT_BACKOFF_MS[attempt];
303
+ if (Date.now() + delay >= deadline) {
304
+ // Backoff would itself overrun the deadline — give up now.
305
+ throw new LspError("REQUEST_TIMEOUT", `lsp ${method} timed out (next retry would overrun)`);
306
+ }
307
+ this.opts.logger.debug(`[lsp ${this.opts.name}] -32801 retry ${attempt + 1} in ${delay}ms`);
308
+ await sleepUnlessAborted(delay, signal);
309
+ continue;
310
+ }
311
+ throw e;
312
+ }
313
+ finally {
314
+ this.lastActivityAt = Date.now();
315
+ }
316
+ }
317
+ }
318
+ /** Opens `path` on the server if not already open. Evicts the oldest
319
+ * open doc when the LRU is full (codex Round-1 SHOULD-FIX #2;
320
+ * Round-2 SHOULD-FIX #2 — Map#set on an existing key keeps the
321
+ * ORIGINAL insertion position, so we must `delete`-then-`set` to
322
+ * bring the hit to the end of the access order). */
323
+ async ensureDocOpen(absPath, signal) {
324
+ if (this.openDocs.has(absPath)) {
325
+ this.openDocs.delete(absPath);
326
+ this.openDocs.set(absPath, Date.now());
327
+ return;
328
+ }
329
+ const maxOpen = this.opts.config.maxOpenDocs ?? DEFAULT_MAX_OPEN_DOCS;
330
+ if (this.openDocs.size >= maxOpen) {
331
+ // Evict oldest. Map's insertion order is access order because we
332
+ // delete-and-reinsert on refresh.
333
+ const oldest = this.openDocs.keys().next().value;
334
+ if (oldest && this.conn) {
335
+ try {
336
+ this.conn.sendNotification("textDocument/didClose", {
337
+ textDocument: { uri: pathToFileURL(oldest).toString() },
338
+ });
339
+ }
340
+ catch {
341
+ /* server may be dying; harmless */
342
+ }
343
+ this.openDocs.delete(oldest);
344
+ }
345
+ }
346
+ await this.ensureStarted(signal);
347
+ if (!this.conn)
348
+ throw new LspError("SERVER_CRASHED", `${this.opts.name}: no live connection`);
349
+ let content;
350
+ try {
351
+ content = readFileSync(absPath, "utf8");
352
+ }
353
+ catch (e) {
354
+ throw new LspError("REQUEST_FAILED", `could not read ${absPath}`, e);
355
+ }
356
+ const languageId = guessLanguageId(absPath);
357
+ this.conn.sendNotification("textDocument/didOpen", {
358
+ textDocument: {
359
+ uri: pathToFileURL(absPath).toString(),
360
+ languageId,
361
+ version: 1,
362
+ text: content,
363
+ },
364
+ });
365
+ this.openDocs.set(absPath, Date.now());
366
+ }
367
+ /** Graceful shutdown: `shutdown` request, `exit` notification, 2 s
368
+ * deadline, SIGTERM, 100 ms, SIGKILL. Idempotent. */
369
+ async dispose() {
370
+ if (this.disposed)
371
+ return;
372
+ this.disposed = true;
373
+ if (this.state === "running" || this.state === "starting") {
374
+ this.state = "stopping";
375
+ // Close every open doc — best effort.
376
+ if (this.conn) {
377
+ for (const p of this.openDocs.keys()) {
378
+ try {
379
+ this.conn.sendNotification("textDocument/didClose", {
380
+ textDocument: { uri: pathToFileURL(p).toString() },
381
+ });
382
+ }
383
+ catch { /* ignore */ }
384
+ }
385
+ this.openDocs.clear();
386
+ try {
387
+ const ac = new AbortController();
388
+ const t = setTimeout(() => ac.abort(), SHUTDOWN_DEADLINE_MS);
389
+ await this.pending.send({
390
+ connection: this.conn,
391
+ method: "shutdown",
392
+ params: null,
393
+ signal: ac.signal,
394
+ requestTimeoutMs: SHUTDOWN_DEADLINE_MS,
395
+ }).catch(() => undefined);
396
+ clearTimeout(t);
397
+ try {
398
+ this.conn.sendNotification("exit", null);
399
+ }
400
+ catch { /* ignore */ }
401
+ }
402
+ catch { /* ignore */ }
403
+ }
404
+ }
405
+ this.pending.rejectAll(new LspError("SERVER_CRASHED", `${this.opts.name}: disposed`));
406
+ const child = this.child;
407
+ if (child && child.exitCode === null) {
408
+ try {
409
+ child.kill("SIGTERM");
410
+ }
411
+ catch { /* ignore */ }
412
+ await new Promise((resolve) => {
413
+ const t = setTimeout(() => {
414
+ try {
415
+ child.kill("SIGKILL");
416
+ }
417
+ catch { /* ignore */ }
418
+ resolve();
419
+ }, SIGKILL_DEADLINE_MS);
420
+ child.once("close", () => {
421
+ clearTimeout(t);
422
+ resolve();
423
+ });
424
+ });
425
+ }
426
+ try {
427
+ this.conn?.dispose();
428
+ }
429
+ catch { /* ignore */ }
430
+ this.conn = undefined;
431
+ this.child = undefined;
432
+ this.state = "stopped";
433
+ }
434
+ }
435
+ /** Dynamic load of vscode-jsonrpc's `CancellationTokenSource`. Lives
436
+ * alongside `loadVscodeJsonRpc` but pulls a different export. */
437
+ async function loadCancellationTokenSource() {
438
+ try {
439
+ const specifier = ["vscode-jsonrpc", "node.js"].join("/");
440
+ const mod = (await import(specifier));
441
+ return mod.CancellationTokenSource ?? null;
442
+ }
443
+ catch {
444
+ return null;
445
+ }
446
+ }
447
+ function isContentModified(e) {
448
+ if (!e || typeof e !== "object")
449
+ return false;
450
+ const code = e.code;
451
+ return code === CONTENT_MODIFIED_CODE;
452
+ }
453
+ async function sleepUnlessAborted(ms, signal) {
454
+ if (signal.aborted)
455
+ throw new AppError(ErrorCode.Cancelled, "lsp retry cancelled");
456
+ await new Promise((resolve, reject) => {
457
+ const t = setTimeout(() => {
458
+ signal.removeEventListener("abort", onAbort);
459
+ resolve();
460
+ }, ms);
461
+ const onAbort = () => {
462
+ clearTimeout(t);
463
+ reject(new AppError(ErrorCode.Cancelled, "lsp retry cancelled"));
464
+ };
465
+ signal.addEventListener("abort", onAbort, { once: true });
466
+ });
467
+ }
468
+ /** Best-effort languageId mapping. LSP servers tolerate "plaintext"
469
+ * for unknown extensions; we use the well-known names for the four
470
+ * built-in defaults so the server picks the right grammar. */
471
+ function guessLanguageId(path) {
472
+ const lower = path.toLowerCase();
473
+ if (lower.endsWith(".ts") || lower.endsWith(".cts") || lower.endsWith(".mts"))
474
+ return "typescript";
475
+ if (lower.endsWith(".tsx"))
476
+ return "typescriptreact";
477
+ if (lower.endsWith(".js") || lower.endsWith(".cjs") || lower.endsWith(".mjs"))
478
+ return "javascript";
479
+ if (lower.endsWith(".jsx"))
480
+ return "javascriptreact";
481
+ if (lower.endsWith(".rs"))
482
+ return "rust";
483
+ if (lower.endsWith(".py") || lower.endsWith(".pyi"))
484
+ return "python";
485
+ if (lower.endsWith(".go"))
486
+ return "go";
487
+ return "plaintext";
488
+ }
489
+ //# sourceMappingURL=instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance.js","sourceRoot":"","sources":["../../src/lsp/instance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * (4.2) Lazy load `vscode-jsonrpc/node` via a COMPUTED specifier so
3
+ * `bun build --compile` doesn't try to statically resolve the optional
4
+ * peer dep (codex Round-1 SHOULD-FIX #4 — verified on 3.6/4.0 the
5
+ * hard way).
6
+ *
7
+ * Two seams:
8
+ * - `loadVscodeJsonRpc()` — production path; cached after first call
9
+ * - `__setLoaderForTest()` — replaces the loader for unit tests
10
+ */
11
+ import type { createMessageConnection as createMessageConnectionType, StreamMessageReader as StreamMessageReaderType, StreamMessageWriter as StreamMessageWriterType } from "vscode-jsonrpc/node.js";
12
+ export interface VscodeJsonRpcModule {
13
+ createMessageConnection: typeof createMessageConnectionType;
14
+ StreamMessageReader: typeof StreamMessageReaderType;
15
+ StreamMessageWriter: typeof StreamMessageWriterType;
16
+ }
17
+ /** Returns the loaded module on success, or `null` when the peer is
18
+ * absent / broken. Result is memoised; pass `force: true` to re-probe
19
+ * (used by `host.restart`). Always swallows loader errors so a thrown
20
+ * `ERR_MODULE_NOT_FOUND` is indistinguishable from a returned-null
21
+ * (callers only need to know "available or not"). */
22
+ export declare function loadVscodeJsonRpc(force?: boolean): Promise<VscodeJsonRpcModule | null>;
23
+ /** Test seam — swap the loader and reset the cache. */
24
+ export declare function __setLoaderForTest(fn: () => Promise<VscodeJsonRpcModule | null>): void;
25
+ /** Test seam — restore default loader. */
26
+ export declare function __resetLoaderForTest(): void;
27
+ //# sourceMappingURL=lazy-load.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazy-load.d.ts","sourceRoot":"","sources":["../../src/lsp/lazy-load.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,uBAAuB,IAAI,2BAA2B,EACtD,mBAAmB,IAAI,uBAAuB,EAC9C,mBAAmB,IAAI,uBAAuB,EAC/C,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,mBAAmB;IAClC,uBAAuB,EAAE,OAAO,2BAA2B,CAAC;IAC5D,mBAAmB,EAAE,OAAO,uBAAuB,CAAC;IACpD,mBAAmB,EAAE,OAAO,uBAAuB,CAAC;CACrD;AAyBD;;;;sDAIsD;AACtD,wBAAsB,iBAAiB,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAQ1F;AAED,uDAAuD;AACvD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,IAAI,CAGtF;AAED,0CAA0C;AAC1C,wBAAgB,oBAAoB,IAAI,IAAI,CAG3C"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * (4.2) Lazy load `vscode-jsonrpc/node` via a COMPUTED specifier so
3
+ * `bun build --compile` doesn't try to statically resolve the optional
4
+ * peer dep (codex Round-1 SHOULD-FIX #4 — verified on 3.6/4.0 the
5
+ * hard way).
6
+ *
7
+ * Two seams:
8
+ * - `loadVscodeJsonRpc()` — production path; cached after first call
9
+ * - `__setLoaderForTest()` — replaces the loader for unit tests
10
+ */
11
+ let cached = undefined;
12
+ let loader = defaultLoader;
13
+ async function defaultLoader() {
14
+ // Computed specifier — string concatenated at runtime so the bundler
15
+ // can't see the literal import path. Matches the 3.6 OTel and 3.7
16
+ // OAuth patterns.
17
+ const specifier = ["vscode-jsonrpc", "node.js"].join("/");
18
+ try {
19
+ const mod = (await import(specifier));
20
+ if (typeof mod?.createMessageConnection !== "function" ||
21
+ typeof mod?.StreamMessageReader !== "function" ||
22
+ typeof mod?.StreamMessageWriter !== "function") {
23
+ return null;
24
+ }
25
+ return mod;
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ /** Returns the loaded module on success, or `null` when the peer is
32
+ * absent / broken. Result is memoised; pass `force: true` to re-probe
33
+ * (used by `host.restart`). Always swallows loader errors so a thrown
34
+ * `ERR_MODULE_NOT_FOUND` is indistinguishable from a returned-null
35
+ * (callers only need to know "available or not"). */
36
+ export async function loadVscodeJsonRpc(force = false) {
37
+ if (cached !== undefined && !force)
38
+ return cached;
39
+ try {
40
+ cached = await loader();
41
+ }
42
+ catch {
43
+ cached = null;
44
+ }
45
+ return cached;
46
+ }
47
+ /** Test seam — swap the loader and reset the cache. */
48
+ export function __setLoaderForTest(fn) {
49
+ loader = fn;
50
+ cached = undefined;
51
+ }
52
+ /** Test seam — restore default loader. */
53
+ export function __resetLoaderForTest() {
54
+ loader = defaultLoader;
55
+ cached = undefined;
56
+ }
57
+ //# sourceMappingURL=lazy-load.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazy-load.js","sourceRoot":"","sources":["../../src/lsp/lazy-load.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAcH,IAAI,MAAM,GAA2C,SAAS,CAAC;AAC/D,IAAI,MAAM,GAA8C,aAAa,CAAC;AAEtE,KAAK,UAAU,aAAa;IAC1B,qEAAqE;IACrE,kEAAkE;IAClE,kBAAkB;IAClB,MAAM,SAAS,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAwB,CAAC;QAC7D,IACE,OAAO,GAAG,EAAE,uBAAuB,KAAK,UAAU;YAClD,OAAO,GAAG,EAAE,mBAAmB,KAAK,UAAU;YAC9C,OAAO,GAAG,EAAE,mBAAmB,KAAK,UAAU,EAC9C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;sDAIsD;AACtD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAK,GAAG,KAAK;IACnD,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,MAAM,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,kBAAkB,CAAC,EAA6C;IAC9E,MAAM,GAAG,EAAE,CAAC;IACZ,MAAM,GAAG,SAAS,CAAC;AACrB,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,oBAAoB;IAClC,MAAM,GAAG,aAAa,CAAC;IACvB,MAAM,GAAG,SAAS,CAAC;AACrB,CAAC"}