@vinaes/succ 1.3.31 → 1.5.37

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 (759) hide show
  1. package/README.md +65 -11
  2. package/agents/succ-code-reviewer.md +1 -1
  3. package/agents/succ-diff-reviewer.md +1 -1
  4. package/agents/succ-general.md +1 -1
  5. package/dist/cli.js +84 -2
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/agents-md.d.ts.map +1 -1
  8. package/dist/commands/agents-md.js +3 -2
  9. package/dist/commands/agents-md.js.map +1 -1
  10. package/dist/commands/analyze-agents.d.ts.map +1 -1
  11. package/dist/commands/analyze-agents.js +10 -11
  12. package/dist/commands/analyze-agents.js.map +1 -1
  13. package/dist/commands/analyze-profile.d.ts.map +1 -1
  14. package/dist/commands/analyze-profile.js +32 -8
  15. package/dist/commands/analyze-profile.js.map +1 -1
  16. package/dist/commands/analyze-recursive.d.ts.map +1 -1
  17. package/dist/commands/analyze-recursive.js +8 -3
  18. package/dist/commands/analyze-recursive.js.map +1 -1
  19. package/dist/commands/analyze-utils.d.ts.map +1 -1
  20. package/dist/commands/analyze-utils.js +17 -4
  21. package/dist/commands/analyze-utils.js.map +1 -1
  22. package/dist/commands/benchmark-quality.d.ts.map +1 -1
  23. package/dist/commands/benchmark-quality.js +11 -4
  24. package/dist/commands/benchmark-quality.js.map +1 -1
  25. package/dist/commands/benchmark-sqlite-vec.d.ts.map +1 -1
  26. package/dist/commands/benchmark-sqlite-vec.js +4 -0
  27. package/dist/commands/benchmark-sqlite-vec.js.map +1 -1
  28. package/dist/commands/benchmark.d.ts.map +1 -1
  29. package/dist/commands/benchmark.js +5 -1
  30. package/dist/commands/benchmark.js.map +1 -1
  31. package/dist/commands/codex-chat.d.ts +8 -0
  32. package/dist/commands/codex-chat.d.ts.map +1 -0
  33. package/dist/commands/codex-chat.js +161 -0
  34. package/dist/commands/codex-chat.js.map +1 -0
  35. package/dist/commands/config.d.ts.map +1 -1
  36. package/dist/commands/config.js +32 -4
  37. package/dist/commands/config.js.map +1 -1
  38. package/dist/commands/daemon.d.ts.map +1 -1
  39. package/dist/commands/daemon.js +13 -4
  40. package/dist/commands/daemon.js.map +1 -1
  41. package/dist/commands/index-code.d.ts +4 -0
  42. package/dist/commands/index-code.d.ts.map +1 -1
  43. package/dist/commands/index-code.js +1 -1
  44. package/dist/commands/index-code.js.map +1 -1
  45. package/dist/commands/init-templates.js +2 -2
  46. package/dist/commands/init.d.ts.map +1 -1
  47. package/dist/commands/init.js +305 -203
  48. package/dist/commands/init.js.map +1 -1
  49. package/dist/commands/memories.d.ts.map +1 -1
  50. package/dist/commands/memories.js +25 -14
  51. package/dist/commands/memories.js.map +1 -1
  52. package/dist/commands/progress.d.ts.map +1 -1
  53. package/dist/commands/progress.js +3 -2
  54. package/dist/commands/progress.js.map +1 -1
  55. package/dist/commands/reindex.d.ts.map +1 -1
  56. package/dist/commands/reindex.js +54 -36
  57. package/dist/commands/reindex.js.map +1 -1
  58. package/dist/commands/retention.d.ts.map +1 -1
  59. package/dist/commands/retention.js +7 -5
  60. package/dist/commands/retention.js.map +1 -1
  61. package/dist/commands/scan-code.d.ts +76 -0
  62. package/dist/commands/scan-code.d.ts.map +1 -0
  63. package/dist/commands/scan-code.js +385 -0
  64. package/dist/commands/scan-code.js.map +1 -0
  65. package/dist/commands/score.d.ts.map +1 -1
  66. package/dist/commands/score.js +3 -2
  67. package/dist/commands/score.js.map +1 -1
  68. package/dist/commands/session.d.ts +33 -0
  69. package/dist/commands/session.d.ts.map +1 -0
  70. package/dist/commands/session.js +163 -0
  71. package/dist/commands/session.js.map +1 -0
  72. package/dist/commands/setup.d.ts.map +1 -1
  73. package/dist/commands/setup.js +254 -15
  74. package/dist/commands/setup.js.map +1 -1
  75. package/dist/commands/soul.d.ts.map +1 -1
  76. package/dist/commands/soul.js +7 -46
  77. package/dist/commands/soul.js.map +1 -1
  78. package/dist/commands/status.d.ts.map +1 -1
  79. package/dist/commands/status.js +14 -5
  80. package/dist/commands/status.js.map +1 -1
  81. package/dist/commands/watch.d.ts.map +1 -1
  82. package/dist/commands/watch.js +13 -4
  83. package/dist/commands/watch.js.map +1 -1
  84. package/dist/daemon/analyzer.d.ts.map +1 -1
  85. package/dist/daemon/analyzer.js +23 -7
  86. package/dist/daemon/analyzer.js.map +1 -1
  87. package/dist/daemon/client.d.ts.map +1 -1
  88. package/dist/daemon/client.js +32 -8
  89. package/dist/daemon/client.js.map +1 -1
  90. package/dist/daemon/routes/analyzer.d.ts +3 -0
  91. package/dist/daemon/routes/analyzer.d.ts.map +1 -0
  92. package/dist/daemon/routes/analyzer.js +27 -0
  93. package/dist/daemon/routes/analyzer.js.map +1 -0
  94. package/dist/daemon/routes/hooks.d.ts +14 -0
  95. package/dist/daemon/routes/hooks.d.ts.map +1 -0
  96. package/dist/daemon/routes/hooks.js +1212 -0
  97. package/dist/daemon/routes/hooks.js.map +1 -0
  98. package/dist/daemon/routes/memory.d.ts +4 -0
  99. package/dist/daemon/routes/memory.d.ts.map +1 -0
  100. package/dist/daemon/routes/memory.js +71 -0
  101. package/dist/daemon/routes/memory.js.map +1 -0
  102. package/dist/daemon/routes/reflection.d.ts +10 -0
  103. package/dist/daemon/routes/reflection.d.ts.map +1 -0
  104. package/dist/daemon/routes/reflection.js +397 -0
  105. package/dist/daemon/routes/reflection.js.map +1 -0
  106. package/dist/daemon/routes/search.d.ts +5 -0
  107. package/dist/daemon/routes/search.d.ts.map +1 -0
  108. package/dist/daemon/routes/search.js +93 -0
  109. package/dist/daemon/routes/search.js.map +1 -0
  110. package/dist/daemon/routes/sessions.d.ts +3 -0
  111. package/dist/daemon/routes/sessions.d.ts.map +1 -0
  112. package/dist/daemon/routes/sessions.js +160 -0
  113. package/dist/daemon/routes/sessions.js.map +1 -0
  114. package/dist/daemon/routes/skills.d.ts +3 -0
  115. package/dist/daemon/routes/skills.d.ts.map +1 -0
  116. package/dist/daemon/routes/skills.js +36 -0
  117. package/dist/daemon/routes/skills.js.map +1 -0
  118. package/dist/daemon/routes/status.d.ts +3 -0
  119. package/dist/daemon/routes/status.d.ts.map +1 -0
  120. package/dist/daemon/routes/status.js +47 -0
  121. package/dist/daemon/routes/status.js.map +1 -0
  122. package/dist/daemon/routes/types.d.ts +240 -0
  123. package/dist/daemon/routes/types.d.ts.map +1 -0
  124. package/dist/daemon/routes/types.js +97 -0
  125. package/dist/daemon/routes/types.js.map +1 -0
  126. package/dist/daemon/routes/versioning.d.ts +27 -0
  127. package/dist/daemon/routes/versioning.d.ts.map +1 -0
  128. package/dist/daemon/routes/versioning.js +44 -0
  129. package/dist/daemon/routes/versioning.js.map +1 -0
  130. package/dist/daemon/routes/watcher.d.ts +3 -0
  131. package/dist/daemon/routes/watcher.d.ts.map +1 -0
  132. package/dist/daemon/routes/watcher.js +28 -0
  133. package/dist/daemon/routes/watcher.js.map +1 -0
  134. package/dist/daemon/service.d.ts +5 -23
  135. package/dist/daemon/service.d.ts.map +1 -1
  136. package/dist/daemon/service.js +177 -934
  137. package/dist/daemon/service.js.map +1 -1
  138. package/dist/daemon/session-processor.d.ts +4 -8
  139. package/dist/daemon/session-processor.d.ts.map +1 -1
  140. package/dist/daemon/session-processor.js +49 -222
  141. package/dist/daemon/session-processor.js.map +1 -1
  142. package/dist/lib/ai-readiness.d.ts.map +1 -1
  143. package/dist/lib/ai-readiness.js +33 -8
  144. package/dist/lib/ai-readiness.js.map +1 -1
  145. package/dist/lib/analyze-state.d.ts.map +1 -1
  146. package/dist/lib/analyze-state.js +25 -3
  147. package/dist/lib/analyze-state.js.map +1 -1
  148. package/dist/lib/auto-memory/consolidation.d.ts +41 -0
  149. package/dist/lib/auto-memory/consolidation.d.ts.map +1 -0
  150. package/dist/lib/auto-memory/consolidation.js +151 -0
  151. package/dist/lib/auto-memory/consolidation.js.map +1 -0
  152. package/dist/lib/bpe.d.ts.map +1 -1
  153. package/dist/lib/bpe.js +9 -10
  154. package/dist/lib/bpe.js.map +1 -1
  155. package/dist/lib/brain-export.d.ts +65 -0
  156. package/dist/lib/brain-export.d.ts.map +1 -0
  157. package/dist/lib/brain-export.js +413 -0
  158. package/dist/lib/brain-export.js.map +1 -0
  159. package/dist/lib/checkpoint.d.ts.map +1 -1
  160. package/dist/lib/checkpoint.js +22 -6
  161. package/dist/lib/checkpoint.js.map +1 -1
  162. package/dist/lib/chunker.d.ts.map +1 -1
  163. package/dist/lib/chunker.js +6 -1
  164. package/dist/lib/chunker.js.map +1 -1
  165. package/dist/lib/claude-ws-transport.d.ts.map +1 -1
  166. package/dist/lib/claude-ws-transport.js +12 -4
  167. package/dist/lib/claude-ws-transport.js.map +1 -1
  168. package/dist/lib/command-safety.d.ts +64 -0
  169. package/dist/lib/command-safety.d.ts.map +1 -0
  170. package/dist/lib/command-safety.js +625 -0
  171. package/dist/lib/command-safety.js.map +1 -0
  172. package/dist/lib/compact-briefing.d.ts.map +1 -1
  173. package/dist/lib/compact-briefing.js +18 -17
  174. package/dist/lib/compact-briefing.js.map +1 -1
  175. package/dist/lib/config-defaults.d.ts.map +1 -1
  176. package/dist/lib/config-defaults.js +3 -0
  177. package/dist/lib/config-defaults.js.map +1 -1
  178. package/dist/lib/config-display.d.ts +4 -0
  179. package/dist/lib/config-display.d.ts.map +1 -1
  180. package/dist/lib/config-display.js +6 -1
  181. package/dist/lib/config-display.js.map +1 -1
  182. package/dist/lib/config-types.d.ts +157 -0
  183. package/dist/lib/config-types.d.ts.map +1 -1
  184. package/dist/lib/config-validation.d.ts.map +1 -1
  185. package/dist/lib/config-validation.js +6 -0
  186. package/dist/lib/config-validation.js.map +1 -1
  187. package/dist/lib/config.d.ts +8 -0
  188. package/dist/lib/config.d.ts.map +1 -1
  189. package/dist/lib/config.js +108 -9
  190. package/dist/lib/config.js.map +1 -1
  191. package/dist/lib/consolidate.d.ts.map +1 -1
  192. package/dist/lib/consolidate.js +73 -49
  193. package/dist/lib/consolidate.js.map +1 -1
  194. package/dist/lib/content-sanitizer.d.ts +29 -0
  195. package/dist/lib/content-sanitizer.d.ts.map +1 -0
  196. package/dist/lib/content-sanitizer.js +72 -0
  197. package/dist/lib/content-sanitizer.js.map +1 -0
  198. package/dist/lib/cross-repo.d.ts +44 -0
  199. package/dist/lib/cross-repo.d.ts.map +1 -0
  200. package/dist/lib/cross-repo.js +108 -0
  201. package/dist/lib/cross-repo.js.map +1 -0
  202. package/dist/lib/daemon-port.d.ts +12 -0
  203. package/dist/lib/daemon-port.d.ts.map +1 -0
  204. package/dist/lib/daemon-port.js +20 -0
  205. package/dist/lib/daemon-port.js.map +1 -0
  206. package/dist/lib/db/auto-memory.d.ts +40 -0
  207. package/dist/lib/db/auto-memory.d.ts.map +1 -0
  208. package/dist/lib/db/auto-memory.js +74 -0
  209. package/dist/lib/db/auto-memory.js.map +1 -0
  210. package/dist/lib/db/bm25-indexes.d.ts.map +1 -1
  211. package/dist/lib/db/bm25-indexes.js +16 -4
  212. package/dist/lib/db/bm25-indexes.js.map +1 -1
  213. package/dist/lib/db/connection.d.ts.map +1 -1
  214. package/dist/lib/db/connection.js +8 -1
  215. package/dist/lib/db/connection.js.map +1 -1
  216. package/dist/lib/db/documents.d.ts.map +1 -1
  217. package/dist/lib/db/documents.js +4 -1
  218. package/dist/lib/db/documents.js.map +1 -1
  219. package/dist/lib/db/global-memories.d.ts +2 -10
  220. package/dist/lib/db/global-memories.d.ts.map +1 -1
  221. package/dist/lib/db/global-memories.js +13 -6
  222. package/dist/lib/db/global-memories.js.map +1 -1
  223. package/dist/lib/db/graph.d.ts +5 -1
  224. package/dist/lib/db/graph.d.ts.map +1 -1
  225. package/dist/lib/db/graph.js +38 -8
  226. package/dist/lib/db/graph.js.map +1 -1
  227. package/dist/lib/db/hybrid-search.d.ts +4 -2
  228. package/dist/lib/db/hybrid-search.d.ts.map +1 -1
  229. package/dist/lib/db/hybrid-search.js +29 -11
  230. package/dist/lib/db/hybrid-search.js.map +1 -1
  231. package/dist/lib/db/index.d.ts +6 -1
  232. package/dist/lib/db/index.d.ts.map +1 -1
  233. package/dist/lib/db/index.js +5 -1
  234. package/dist/lib/db/index.js.map +1 -1
  235. package/dist/lib/db/memories.d.ts +19 -14
  236. package/dist/lib/db/memories.d.ts.map +1 -1
  237. package/dist/lib/db/memories.js +100 -37
  238. package/dist/lib/db/memories.js.map +1 -1
  239. package/dist/lib/db/parse-helpers.d.ts +14 -0
  240. package/dist/lib/db/parse-helpers.d.ts.map +1 -0
  241. package/dist/lib/db/parse-helpers.js +59 -0
  242. package/dist/lib/db/parse-helpers.js.map +1 -0
  243. package/dist/lib/db/recall-events.d.ts +49 -0
  244. package/dist/lib/db/recall-events.d.ts.map +1 -0
  245. package/dist/lib/db/recall-events.js +196 -0
  246. package/dist/lib/db/recall-events.js.map +1 -0
  247. package/dist/lib/db/retention.d.ts +4 -3
  248. package/dist/lib/db/retention.d.ts.map +1 -1
  249. package/dist/lib/db/retention.js +12 -1
  250. package/dist/lib/db/retention.js.map +1 -1
  251. package/dist/lib/db/schema.d.ts +2 -0
  252. package/dist/lib/db/schema.d.ts.map +1 -1
  253. package/dist/lib/db/schema.js +140 -80
  254. package/dist/lib/db/schema.js.map +1 -1
  255. package/dist/lib/db/skills.d.ts.map +1 -1
  256. package/dist/lib/db/skills.js +10 -6
  257. package/dist/lib/db/skills.js.map +1 -1
  258. package/dist/lib/diff-brain.d.ts +24 -0
  259. package/dist/lib/diff-brain.d.ts.map +1 -0
  260. package/dist/lib/diff-brain.js +114 -0
  261. package/dist/lib/diff-brain.js.map +1 -0
  262. package/dist/lib/diff-parser.d.ts +74 -0
  263. package/dist/lib/diff-parser.d.ts.map +1 -0
  264. package/dist/lib/diff-parser.js +200 -0
  265. package/dist/lib/diff-parser.js.map +1 -0
  266. package/dist/lib/embedding-pool.d.ts.map +1 -1
  267. package/dist/lib/embedding-pool.js +5 -1
  268. package/dist/lib/embedding-pool.js.map +1 -1
  269. package/dist/lib/embeddings.d.ts +12 -0
  270. package/dist/lib/embeddings.d.ts.map +1 -1
  271. package/dist/lib/embeddings.js +77 -19
  272. package/dist/lib/embeddings.js.map +1 -1
  273. package/dist/lib/errors.d.ts +2 -0
  274. package/dist/lib/errors.d.ts.map +1 -1
  275. package/dist/lib/errors.js +4 -0
  276. package/dist/lib/errors.js.map +1 -1
  277. package/dist/lib/fault-logger.d.ts.map +1 -1
  278. package/dist/lib/fault-logger.js +22 -7
  279. package/dist/lib/fault-logger.js.map +1 -1
  280. package/dist/lib/git/co-change.d.ts +39 -0
  281. package/dist/lib/git/co-change.d.ts.map +1 -0
  282. package/dist/lib/git/co-change.js +139 -0
  283. package/dist/lib/git/co-change.js.map +1 -0
  284. package/dist/lib/graph/bridge-edges.d.ts +93 -0
  285. package/dist/lib/graph/bridge-edges.d.ts.map +1 -0
  286. package/dist/lib/graph/bridge-edges.js +276 -0
  287. package/dist/lib/graph/bridge-edges.js.map +1 -0
  288. package/dist/lib/graph/centrality.d.ts +11 -0
  289. package/dist/lib/graph/centrality.d.ts.map +1 -1
  290. package/dist/lib/graph/centrality.js +51 -3
  291. package/dist/lib/graph/centrality.js.map +1 -1
  292. package/dist/lib/graph/cleanup.d.ts.map +1 -1
  293. package/dist/lib/graph/cleanup.js +2 -1
  294. package/dist/lib/graph/cleanup.js.map +1 -1
  295. package/dist/lib/graph/community-detection.d.ts +17 -2
  296. package/dist/lib/graph/community-detection.d.ts.map +1 -1
  297. package/dist/lib/graph/community-detection.js +147 -48
  298. package/dist/lib/graph/community-detection.js.map +1 -1
  299. package/dist/lib/graph/community-summaries.d.ts +26 -0
  300. package/dist/lib/graph/community-summaries.d.ts.map +1 -0
  301. package/dist/lib/graph/community-summaries.js +130 -0
  302. package/dist/lib/graph/community-summaries.js.map +1 -0
  303. package/dist/lib/graph/contextual-proximity.d.ts.map +1 -1
  304. package/dist/lib/graph/contextual-proximity.js +11 -4
  305. package/dist/lib/graph/contextual-proximity.js.map +1 -1
  306. package/dist/lib/graph/graphology-bridge.d.ts +101 -0
  307. package/dist/lib/graph/graphology-bridge.d.ts.map +1 -0
  308. package/dist/lib/graph/graphology-bridge.js +488 -0
  309. package/dist/lib/graph/graphology-bridge.js.map +1 -0
  310. package/dist/lib/graph/llm-relations.d.ts.map +1 -1
  311. package/dist/lib/graph/llm-relations.js +34 -45
  312. package/dist/lib/graph/llm-relations.js.map +1 -1
  313. package/dist/lib/graph-export.d.ts.map +1 -1
  314. package/dist/lib/graph-export.js +2 -2
  315. package/dist/lib/graph-export.js.map +1 -1
  316. package/dist/lib/graph-scheduler.d.ts +0 -5
  317. package/dist/lib/graph-scheduler.d.ts.map +1 -1
  318. package/dist/lib/graph-scheduler.js +5 -1
  319. package/dist/lib/graph-scheduler.js.map +1 -1
  320. package/dist/lib/guardrails.d.ts +50 -0
  321. package/dist/lib/guardrails.d.ts.map +1 -0
  322. package/dist/lib/guardrails.js +502 -0
  323. package/dist/lib/guardrails.js.map +1 -0
  324. package/dist/lib/hook-rules.d.ts +1 -1
  325. package/dist/lib/hook-rules.d.ts.map +1 -1
  326. package/dist/lib/hook-rules.js +8 -2
  327. package/dist/lib/hook-rules.js.map +1 -1
  328. package/dist/lib/ifc/file-labels.d.ts +35 -0
  329. package/dist/lib/ifc/file-labels.d.ts.map +1 -0
  330. package/dist/lib/ifc/file-labels.js +208 -0
  331. package/dist/lib/ifc/file-labels.js.map +1 -0
  332. package/dist/lib/ifc/label.d.ts +38 -0
  333. package/dist/lib/ifc/label.d.ts.map +1 -0
  334. package/dist/lib/ifc/label.js +80 -0
  335. package/dist/lib/ifc/label.js.map +1 -0
  336. package/dist/lib/ifc/session-ifc.d.ts +92 -0
  337. package/dist/lib/ifc/session-ifc.d.ts.map +1 -0
  338. package/dist/lib/ifc/session-ifc.js +222 -0
  339. package/dist/lib/ifc/session-ifc.js.map +1 -0
  340. package/dist/lib/indexer.js +2 -2
  341. package/dist/lib/indexer.js.map +1 -1
  342. package/dist/lib/injection-detector.d.ts +83 -0
  343. package/dist/lib/injection-detector.d.ts.map +1 -0
  344. package/dist/lib/injection-detector.js +586 -0
  345. package/dist/lib/injection-detector.js.map +1 -0
  346. package/dist/lib/injection-semantic.d.ts +31 -0
  347. package/dist/lib/injection-semantic.d.ts.map +1 -0
  348. package/dist/lib/injection-semantic.js +230 -0
  349. package/dist/lib/injection-semantic.js.map +1 -0
  350. package/dist/lib/llm.d.ts +14 -0
  351. package/dist/lib/llm.d.ts.map +1 -1
  352. package/dist/lib/llm.js +44 -8
  353. package/dist/lib/llm.js.map +1 -1
  354. package/dist/lib/lock.d.ts.map +1 -1
  355. package/dist/lib/lock.js +24 -3
  356. package/dist/lib/lock.js.map +1 -1
  357. package/dist/lib/md-fetch.d.ts.map +1 -1
  358. package/dist/lib/md-fetch.js +9 -2
  359. package/dist/lib/md-fetch.js.map +1 -1
  360. package/dist/lib/observability.d.ts +75 -0
  361. package/dist/lib/observability.d.ts.map +1 -0
  362. package/dist/lib/observability.js +201 -0
  363. package/dist/lib/observability.js.map +1 -0
  364. package/dist/lib/ort-session.d.ts +26 -0
  365. package/dist/lib/ort-session.d.ts.map +1 -1
  366. package/dist/lib/ort-session.js +107 -3
  367. package/dist/lib/ort-session.js.map +1 -1
  368. package/dist/lib/prd/codebase-context.d.ts.map +1 -1
  369. package/dist/lib/prd/codebase-context.js +9 -2
  370. package/dist/lib/prd/codebase-context.js.map +1 -1
  371. package/dist/lib/prd/context.d.ts.map +1 -1
  372. package/dist/lib/prd/context.js +11 -3
  373. package/dist/lib/prd/context.js.map +1 -1
  374. package/dist/lib/prd/export.js +1 -1
  375. package/dist/lib/prd/export.js.map +1 -1
  376. package/dist/lib/prd/generate.d.ts.map +1 -1
  377. package/dist/lib/prd/generate.js +19 -5
  378. package/dist/lib/prd/generate.js.map +1 -1
  379. package/dist/lib/prd/parse.d.ts.map +1 -1
  380. package/dist/lib/prd/parse.js +8 -2
  381. package/dist/lib/prd/parse.js.map +1 -1
  382. package/dist/lib/prd/prompt-builder.d.ts +9 -2
  383. package/dist/lib/prd/prompt-builder.d.ts.map +1 -1
  384. package/dist/lib/prd/prompt-builder.js +7 -8
  385. package/dist/lib/prd/prompt-builder.js.map +1 -1
  386. package/dist/lib/prd/runner.d.ts +1 -2
  387. package/dist/lib/prd/runner.d.ts.map +1 -1
  388. package/dist/lib/prd/runner.js +45 -33
  389. package/dist/lib/prd/runner.js.map +1 -1
  390. package/dist/lib/prd/team-runner.js +2 -1
  391. package/dist/lib/prd/team-runner.js.map +1 -1
  392. package/dist/lib/prd/worktree.d.ts +1 -2
  393. package/dist/lib/prd/worktree.d.ts.map +1 -1
  394. package/dist/lib/prd/worktree.js +62 -70
  395. package/dist/lib/prd/worktree.js.map +1 -1
  396. package/dist/lib/precompute-context.d.ts.map +1 -1
  397. package/dist/lib/precompute-context.js +22 -36
  398. package/dist/lib/precompute-context.js.map +1 -1
  399. package/dist/lib/pricing.d.ts.map +1 -1
  400. package/dist/lib/pricing.js +5 -1
  401. package/dist/lib/pricing.js.map +1 -1
  402. package/dist/lib/process-registry.js +3 -3
  403. package/dist/lib/process-registry.js.map +1 -1
  404. package/dist/lib/public-api.d.ts +54 -4
  405. package/dist/lib/public-api.d.ts.map +1 -1
  406. package/dist/lib/public-api.js +52 -2
  407. package/dist/lib/public-api.js.map +1 -1
  408. package/dist/lib/quality.d.ts.map +1 -1
  409. package/dist/lib/quality.js +15 -6
  410. package/dist/lib/quality.js.map +1 -1
  411. package/dist/lib/query-expansion.d.ts +32 -0
  412. package/dist/lib/query-expansion.d.ts.map +1 -1
  413. package/dist/lib/query-expansion.js +64 -13
  414. package/dist/lib/query-expansion.js.map +1 -1
  415. package/dist/lib/reference-embeddings.d.ts.map +1 -1
  416. package/dist/lib/reference-embeddings.js +17 -4
  417. package/dist/lib/reference-embeddings.js.map +1 -1
  418. package/dist/lib/reflection-synthesizer.d.ts.map +1 -1
  419. package/dist/lib/reflection-synthesizer.js +9 -17
  420. package/dist/lib/reflection-synthesizer.js.map +1 -1
  421. package/dist/lib/reranker.d.ts +41 -0
  422. package/dist/lib/reranker.d.ts.map +1 -0
  423. package/dist/lib/reranker.js +294 -0
  424. package/dist/lib/reranker.js.map +1 -0
  425. package/dist/lib/retrieval-feedback.d.ts +100 -0
  426. package/dist/lib/retrieval-feedback.d.ts.map +1 -0
  427. package/dist/lib/retrieval-feedback.js +174 -0
  428. package/dist/lib/retrieval-feedback.js.map +1 -0
  429. package/dist/lib/review/context-pack.d.ts +58 -0
  430. package/dist/lib/review/context-pack.d.ts.map +1 -0
  431. package/dist/lib/review/context-pack.js +300 -0
  432. package/dist/lib/review/context-pack.js.map +1 -0
  433. package/dist/lib/search/hierarchical-summaries.d.ts +65 -0
  434. package/dist/lib/search/hierarchical-summaries.d.ts.map +1 -0
  435. package/dist/lib/search/hierarchical-summaries.js +423 -0
  436. package/dist/lib/search/hierarchical-summaries.js.map +1 -0
  437. package/dist/lib/search/hyde.d.ts +27 -0
  438. package/dist/lib/search/hyde.d.ts.map +1 -0
  439. package/dist/lib/search/hyde.js +141 -0
  440. package/dist/lib/search/hyde.js.map +1 -0
  441. package/dist/lib/search/late-chunking.d.ts +53 -0
  442. package/dist/lib/search/late-chunking.d.ts.map +1 -0
  443. package/dist/lib/search/late-chunking.js +230 -0
  444. package/dist/lib/search/late-chunking.js.map +1 -0
  445. package/dist/lib/search/ppr-retrieval.d.ts +49 -0
  446. package/dist/lib/search/ppr-retrieval.d.ts.map +1 -0
  447. package/dist/lib/search/ppr-retrieval.js +135 -0
  448. package/dist/lib/search/ppr-retrieval.js.map +1 -0
  449. package/dist/lib/search/repo-map.d.ts +43 -0
  450. package/dist/lib/search/repo-map.d.ts.map +1 -0
  451. package/dist/lib/search/repo-map.js +165 -0
  452. package/dist/lib/search/repo-map.js.map +1 -0
  453. package/dist/lib/session-analyzer.d.ts +90 -0
  454. package/dist/lib/session-analyzer.d.ts.map +1 -0
  455. package/dist/lib/session-analyzer.js +467 -0
  456. package/dist/lib/session-analyzer.js.map +1 -0
  457. package/dist/lib/session-observations.d.ts.map +1 -1
  458. package/dist/lib/session-observations.js +13 -3
  459. package/dist/lib/session-observations.js.map +1 -1
  460. package/dist/lib/session-summary.d.ts.map +1 -1
  461. package/dist/lib/session-summary.js +64 -52
  462. package/dist/lib/session-summary.js.map +1 -1
  463. package/dist/lib/session-surgeon.d.ts +53 -0
  464. package/dist/lib/session-surgeon.d.ts.map +1 -0
  465. package/dist/lib/session-surgeon.js +501 -0
  466. package/dist/lib/session-surgeon.js.map +1 -0
  467. package/dist/lib/similarity-utils.d.ts +26 -0
  468. package/dist/lib/similarity-utils.d.ts.map +1 -0
  469. package/dist/lib/similarity-utils.js +66 -0
  470. package/dist/lib/similarity-utils.js.map +1 -0
  471. package/dist/lib/skills.d.ts.map +1 -1
  472. package/dist/lib/skills.js +16 -16
  473. package/dist/lib/skills.js.map +1 -1
  474. package/dist/lib/storage/backends/interface.d.ts +13 -3
  475. package/dist/lib/storage/backends/interface.d.ts.map +1 -1
  476. package/dist/lib/storage/backends/postgresql.d.ts +52 -3
  477. package/dist/lib/storage/backends/postgresql.d.ts.map +1 -1
  478. package/dist/lib/storage/backends/postgresql.js +694 -49
  479. package/dist/lib/storage/backends/postgresql.js.map +1 -1
  480. package/dist/lib/storage/benchmark.js +2 -2
  481. package/dist/lib/storage/benchmark.js.map +1 -1
  482. package/dist/lib/storage/dispatcher/base.d.ts +114 -0
  483. package/dist/lib/storage/dispatcher/base.d.ts.map +1 -0
  484. package/dist/lib/storage/dispatcher/base.js +160 -0
  485. package/dist/lib/storage/dispatcher/base.js.map +1 -0
  486. package/dist/lib/storage/dispatcher/documents.d.ts +25 -0
  487. package/dist/lib/storage/dispatcher/documents.d.ts.map +1 -0
  488. package/dist/lib/storage/dispatcher/documents.js +194 -0
  489. package/dist/lib/storage/dispatcher/documents.js.map +1 -0
  490. package/dist/lib/storage/dispatcher/embeddings.d.ts +34 -0
  491. package/dist/lib/storage/dispatcher/embeddings.d.ts.map +1 -0
  492. package/dist/lib/storage/dispatcher/embeddings.js +144 -0
  493. package/dist/lib/storage/dispatcher/embeddings.js.map +1 -0
  494. package/dist/lib/storage/dispatcher/export-import.d.ts +139 -0
  495. package/dist/lib/storage/dispatcher/export-import.d.ts.map +1 -0
  496. package/dist/lib/storage/dispatcher/export-import.js +191 -0
  497. package/dist/lib/storage/dispatcher/export-import.js.map +1 -0
  498. package/dist/lib/storage/dispatcher/file-hashes.d.ts +13 -0
  499. package/dist/lib/storage/dispatcher/file-hashes.d.ts.map +1 -0
  500. package/dist/lib/storage/dispatcher/file-hashes.js +36 -0
  501. package/dist/lib/storage/dispatcher/file-hashes.js.map +1 -0
  502. package/dist/lib/storage/dispatcher/global-memories.d.ts +28 -0
  503. package/dist/lib/storage/dispatcher/global-memories.d.ts.map +1 -0
  504. package/dist/lib/storage/dispatcher/global-memories.js +151 -0
  505. package/dist/lib/storage/dispatcher/global-memories.js.map +1 -0
  506. package/dist/lib/storage/dispatcher/graph.d.ts +32 -0
  507. package/dist/lib/storage/dispatcher/graph.d.ts.map +1 -0
  508. package/dist/lib/storage/dispatcher/graph.js +146 -0
  509. package/dist/lib/storage/dispatcher/graph.js.map +1 -0
  510. package/dist/lib/storage/dispatcher/index.d.ts +34 -0
  511. package/dist/lib/storage/dispatcher/index.d.ts.map +1 -0
  512. package/dist/lib/storage/dispatcher/index.js +139 -0
  513. package/dist/lib/storage/dispatcher/index.js.map +1 -0
  514. package/dist/lib/storage/dispatcher/memories.d.ts +65 -0
  515. package/dist/lib/storage/dispatcher/memories.d.ts.map +1 -0
  516. package/dist/lib/storage/dispatcher/memories.js +466 -0
  517. package/dist/lib/storage/dispatcher/memories.js.map +1 -0
  518. package/dist/lib/storage/dispatcher/mixin-helper.d.ts +6 -0
  519. package/dist/lib/storage/dispatcher/mixin-helper.d.ts.map +1 -0
  520. package/dist/lib/storage/dispatcher/mixin-helper.js +10 -0
  521. package/dist/lib/storage/dispatcher/mixin-helper.js.map +1 -0
  522. package/dist/lib/storage/dispatcher/retention.d.ts +20 -0
  523. package/dist/lib/storage/dispatcher/retention.d.ts.map +1 -0
  524. package/dist/lib/storage/dispatcher/retention.js +123 -0
  525. package/dist/lib/storage/dispatcher/retention.js.map +1 -0
  526. package/dist/lib/storage/dispatcher/search.d.ts +34 -0
  527. package/dist/lib/storage/dispatcher/search.d.ts.map +1 -0
  528. package/dist/lib/storage/dispatcher/search.js +222 -0
  529. package/dist/lib/storage/dispatcher/search.js.map +1 -0
  530. package/dist/lib/storage/dispatcher/skills.d.ts +53 -0
  531. package/dist/lib/storage/dispatcher/skills.d.ts.map +1 -0
  532. package/dist/lib/storage/dispatcher/skills.js +98 -0
  533. package/dist/lib/storage/dispatcher/skills.js.map +1 -0
  534. package/dist/lib/storage/dispatcher/token-stats.d.ts +23 -0
  535. package/dist/lib/storage/dispatcher/token-stats.d.ts.map +1 -0
  536. package/dist/lib/storage/dispatcher/token-stats.js +92 -0
  537. package/dist/lib/storage/dispatcher/token-stats.js.map +1 -0
  538. package/dist/lib/storage/dispatcher/web-search.d.ts +10 -0
  539. package/dist/lib/storage/dispatcher/web-search.d.ts.map +1 -0
  540. package/dist/lib/storage/dispatcher/web-search.js +39 -0
  541. package/dist/lib/storage/dispatcher/web-search.js.map +1 -0
  542. package/dist/lib/storage/dispatcher-export.d.ts.map +1 -1
  543. package/dist/lib/storage/dispatcher-export.js +48 -39
  544. package/dist/lib/storage/dispatcher-export.js.map +1 -1
  545. package/dist/lib/storage/dispatcher.d.ts +1 -468
  546. package/dist/lib/storage/dispatcher.d.ts.map +1 -1
  547. package/dist/lib/storage/dispatcher.js +1 -1931
  548. package/dist/lib/storage/dispatcher.js.map +1 -1
  549. package/dist/lib/storage/index.d.ts +20 -5
  550. package/dist/lib/storage/index.d.ts.map +1 -1
  551. package/dist/lib/storage/index.js +36 -7
  552. package/dist/lib/storage/index.js.map +1 -1
  553. package/dist/lib/storage/migration/export-import.d.ts.map +1 -1
  554. package/dist/lib/storage/migration/export-import.js +9 -2
  555. package/dist/lib/storage/migration/export-import.js.map +1 -1
  556. package/dist/lib/storage/types.d.ts +152 -10
  557. package/dist/lib/storage/types.d.ts.map +1 -1
  558. package/dist/lib/storage/types.js +13 -0
  559. package/dist/lib/storage/types.js.map +1 -1
  560. package/dist/lib/storage/vector/interface.d.ts +4 -0
  561. package/dist/lib/storage/vector/interface.d.ts.map +1 -1
  562. package/dist/lib/storage/vector/qdrant.d.ts +13 -2
  563. package/dist/lib/storage/vector/qdrant.d.ts.map +1 -1
  564. package/dist/lib/storage/vector/qdrant.js +147 -61
  565. package/dist/lib/storage/vector/qdrant.js.map +1 -1
  566. package/dist/lib/supersession.d.ts.map +1 -1
  567. package/dist/lib/supersession.js +2 -15
  568. package/dist/lib/supersession.js.map +1 -1
  569. package/dist/lib/token-budget.d.ts.map +1 -1
  570. package/dist/lib/token-budget.js +9 -2
  571. package/dist/lib/token-budget.js.map +1 -1
  572. package/dist/lib/transcript-utils.d.ts +60 -0
  573. package/dist/lib/transcript-utils.d.ts.map +1 -0
  574. package/dist/lib/transcript-utils.js +69 -0
  575. package/dist/lib/transcript-utils.js.map +1 -0
  576. package/dist/lib/tree-sitter/extractor.d.ts +1 -1
  577. package/dist/lib/tree-sitter/extractor.d.ts.map +1 -1
  578. package/dist/lib/tree-sitter/extractor.js +34 -9
  579. package/dist/lib/tree-sitter/extractor.js.map +1 -1
  580. package/dist/lib/tree-sitter/parser.d.ts.map +1 -1
  581. package/dist/lib/tree-sitter/parser.js +45 -11
  582. package/dist/lib/tree-sitter/parser.js.map +1 -1
  583. package/dist/lib/tree-sitter/public.d.ts +12 -0
  584. package/dist/lib/tree-sitter/public.d.ts.map +1 -1
  585. package/dist/lib/tree-sitter/public.js +33 -1
  586. package/dist/lib/tree-sitter/public.js.map +1 -1
  587. package/dist/lib/tree-sitter/queries.d.ts.map +1 -1
  588. package/dist/lib/tree-sitter/queries.js +8 -0
  589. package/dist/lib/tree-sitter/queries.js.map +1 -1
  590. package/dist/lib/working-memory-pipeline.d.ts.map +1 -1
  591. package/dist/lib/working-memory-pipeline.js +12 -3
  592. package/dist/lib/working-memory-pipeline.js.map +1 -1
  593. package/dist/lib/worktree-detect.d.ts +43 -0
  594. package/dist/lib/worktree-detect.d.ts.map +1 -0
  595. package/dist/lib/worktree-detect.js +154 -0
  596. package/dist/lib/worktree-detect.js.map +1 -0
  597. package/dist/lsp/client.d.ts +96 -0
  598. package/dist/lsp/client.d.ts.map +1 -0
  599. package/dist/lsp/client.js +435 -0
  600. package/dist/lsp/client.js.map +1 -0
  601. package/dist/lsp/installer.d.ts +39 -0
  602. package/dist/lsp/installer.d.ts.map +1 -0
  603. package/dist/lsp/installer.js +275 -0
  604. package/dist/lsp/installer.js.map +1 -0
  605. package/dist/lsp/manager.d.ts +62 -0
  606. package/dist/lsp/manager.d.ts.map +1 -0
  607. package/dist/lsp/manager.js +234 -0
  608. package/dist/lsp/manager.js.map +1 -0
  609. package/dist/lsp/servers.d.ts +52 -0
  610. package/dist/lsp/servers.d.ts.map +1 -0
  611. package/dist/lsp/servers.js +162 -0
  612. package/dist/lsp/servers.js.map +1 -0
  613. package/dist/mcp/helpers.d.ts +11 -0
  614. package/dist/mcp/helpers.d.ts.map +1 -1
  615. package/dist/mcp/helpers.js +43 -2
  616. package/dist/mcp/helpers.js.map +1 -1
  617. package/dist/mcp/profile.d.ts +16 -0
  618. package/dist/mcp/profile.d.ts.map +1 -0
  619. package/dist/mcp/profile.js +64 -0
  620. package/dist/mcp/profile.js.map +1 -0
  621. package/dist/mcp/server.d.ts +17 -15
  622. package/dist/mcp/server.d.ts.map +1 -1
  623. package/dist/mcp/server.js +135 -22
  624. package/dist/mcp/server.js.map +1 -1
  625. package/dist/mcp/tools/config.d.ts +1 -5
  626. package/dist/mcp/tools/config.d.ts.map +1 -1
  627. package/dist/mcp/tools/config.js +169 -215
  628. package/dist/mcp/tools/config.js.map +1 -1
  629. package/dist/mcp/tools/dead-end.d.ts.map +1 -1
  630. package/dist/mcp/tools/dead-end.js +24 -14
  631. package/dist/mcp/tools/dead-end.js.map +1 -1
  632. package/dist/mcp/tools/debug.d.ts.map +1 -1
  633. package/dist/mcp/tools/debug.js +103 -179
  634. package/dist/mcp/tools/debug.js.map +1 -1
  635. package/dist/mcp/tools/graph.d.ts +0 -1
  636. package/dist/mcp/tools/graph.d.ts.map +1 -1
  637. package/dist/mcp/tools/graph.js +225 -233
  638. package/dist/mcp/tools/graph.js.map +1 -1
  639. package/dist/mcp/tools/indexing.d.ts +1 -7
  640. package/dist/mcp/tools/indexing.d.ts.map +1 -1
  641. package/dist/mcp/tools/indexing.js +180 -268
  642. package/dist/mcp/tools/indexing.js.map +1 -1
  643. package/dist/mcp/tools/memory/forget.d.ts +3 -0
  644. package/dist/mcp/tools/memory/forget.d.ts.map +1 -0
  645. package/dist/mcp/tools/memory/forget.js +175 -0
  646. package/dist/mcp/tools/memory/forget.js.map +1 -0
  647. package/dist/mcp/tools/memory/memory-helpers.d.ts +45 -0
  648. package/dist/mcp/tools/memory/memory-helpers.d.ts.map +1 -0
  649. package/dist/mcp/tools/memory/memory-helpers.js +291 -0
  650. package/dist/mcp/tools/memory/memory-helpers.js.map +1 -0
  651. package/dist/mcp/tools/memory/recall.d.ts +3 -0
  652. package/dist/mcp/tools/memory/recall.d.ts.map +1 -0
  653. package/dist/mcp/tools/memory/recall.js +495 -0
  654. package/dist/mcp/tools/memory/recall.js.map +1 -0
  655. package/dist/mcp/tools/memory/remember.d.ts +3 -0
  656. package/dist/mcp/tools/memory/remember.d.ts.map +1 -0
  657. package/dist/mcp/tools/memory/remember.js +256 -0
  658. package/dist/mcp/tools/memory/remember.js.map +1 -0
  659. package/dist/mcp/tools/memory/temporal-query.d.ts +8 -0
  660. package/dist/mcp/tools/memory/temporal-query.d.ts.map +1 -0
  661. package/dist/mcp/tools/memory/temporal-query.js +68 -0
  662. package/dist/mcp/tools/memory/temporal-query.js.map +1 -0
  663. package/dist/mcp/tools/memory.d.ts +0 -11
  664. package/dist/mcp/tools/memory.d.ts.map +1 -1
  665. package/dist/mcp/tools/memory.js +6 -1184
  666. package/dist/mcp/tools/memory.js.map +1 -1
  667. package/dist/mcp/tools/prd.d.ts +1 -7
  668. package/dist/mcp/tools/prd.d.ts.map +1 -1
  669. package/dist/mcp/tools/prd.js +198 -255
  670. package/dist/mcp/tools/prd.js.map +1 -1
  671. package/dist/mcp/tools/review.d.ts +8 -0
  672. package/dist/mcp/tools/review.d.ts.map +1 -0
  673. package/dist/mcp/tools/review.js +133 -0
  674. package/dist/mcp/tools/review.js.map +1 -0
  675. package/dist/mcp/tools/search.d.ts.map +1 -1
  676. package/dist/mcp/tools/search.js +168 -47
  677. package/dist/mcp/tools/search.js.map +1 -1
  678. package/dist/mcp/tools/status.d.ts +1 -5
  679. package/dist/mcp/tools/status.d.ts.map +1 -1
  680. package/dist/mcp/tools/status.js +270 -273
  681. package/dist/mcp/tools/status.js.map +1 -1
  682. package/dist/mcp/tools/web-fetch.d.ts +2 -1
  683. package/dist/mcp/tools/web-fetch.d.ts.map +1 -1
  684. package/dist/mcp/tools/web-fetch.js +72 -43
  685. package/dist/mcp/tools/web-fetch.js.map +1 -1
  686. package/dist/mcp/tools/web-search.d.ts +1 -6
  687. package/dist/mcp/tools/web-search.d.ts.map +1 -1
  688. package/dist/mcp/tools/web-search.js +199 -276
  689. package/dist/mcp/tools/web-search.js.map +1 -1
  690. package/dist/prompts/briefing.d.ts +10 -4
  691. package/dist/prompts/briefing.d.ts.map +1 -1
  692. package/dist/prompts/briefing.js +33 -35
  693. package/dist/prompts/briefing.js.map +1 -1
  694. package/dist/prompts/daemon.d.ts +5 -10
  695. package/dist/prompts/daemon.d.ts.map +1 -1
  696. package/dist/prompts/daemon.js +9 -18
  697. package/dist/prompts/daemon.js.map +1 -1
  698. package/dist/prompts/extraction.d.ts +19 -3
  699. package/dist/prompts/extraction.d.ts.map +1 -1
  700. package/dist/prompts/extraction.js +33 -46
  701. package/dist/prompts/extraction.js.map +1 -1
  702. package/dist/prompts/graph.d.ts +9 -0
  703. package/dist/prompts/graph.d.ts.map +1 -0
  704. package/dist/prompts/graph.js +27 -0
  705. package/dist/prompts/graph.js.map +1 -0
  706. package/dist/prompts/guardrails.d.ts +14 -0
  707. package/dist/prompts/guardrails.d.ts.map +1 -0
  708. package/dist/prompts/guardrails.js +115 -0
  709. package/dist/prompts/guardrails.js.map +1 -0
  710. package/dist/prompts/index.d.ts +17 -7
  711. package/dist/prompts/index.d.ts.map +1 -1
  712. package/dist/prompts/index.js +23 -7
  713. package/dist/prompts/index.js.map +1 -1
  714. package/dist/prompts/memory.d.ts +6 -3
  715. package/dist/prompts/memory.d.ts.map +1 -1
  716. package/dist/prompts/memory.js +9 -8
  717. package/dist/prompts/memory.js.map +1 -1
  718. package/dist/prompts/onboarding.d.ts +1 -1
  719. package/dist/prompts/onboarding.d.ts.map +1 -1
  720. package/dist/prompts/onboarding.js +2 -3
  721. package/dist/prompts/onboarding.js.map +1 -1
  722. package/dist/prompts/prd.d.ts +13 -6
  723. package/dist/prompts/prd.d.ts.map +1 -1
  724. package/dist/prompts/prd.js +42 -38
  725. package/dist/prompts/prd.js.map +1 -1
  726. package/dist/prompts/query-expansion.d.ts +8 -0
  727. package/dist/prompts/query-expansion.d.ts.map +1 -0
  728. package/dist/prompts/query-expansion.js +17 -0
  729. package/dist/prompts/query-expansion.js.map +1 -0
  730. package/dist/prompts/skills.d.ts +5 -10
  731. package/dist/prompts/skills.d.ts.map +1 -1
  732. package/dist/prompts/skills.js +9 -17
  733. package/dist/prompts/skills.js.map +1 -1
  734. package/dist/prompts/soul.d.ts +9 -0
  735. package/dist/prompts/soul.d.ts.map +1 -0
  736. package/dist/prompts/soul.js +47 -0
  737. package/dist/prompts/soul.js.map +1 -0
  738. package/dist/prompts/supersession.d.ts +9 -0
  739. package/dist/prompts/supersession.d.ts.map +1 -0
  740. package/dist/prompts/supersession.js +21 -0
  741. package/dist/prompts/supersession.js.map +1 -0
  742. package/dist/prompts/synthesis.d.ts +9 -0
  743. package/dist/prompts/synthesis.d.ts.map +1 -0
  744. package/dist/prompts/synthesis.js +22 -0
  745. package/dist/prompts/synthesis.js.map +1 -0
  746. package/hooks/core/__tests__/adapter.test.cjs +340 -0
  747. package/hooks/core/adapter.cjs +463 -0
  748. package/hooks/core/config.cjs +83 -0
  749. package/hooks/core/daemon-boot.cjs +140 -0
  750. package/hooks/core/log.cjs +41 -0
  751. package/hooks/core/worktree.cjs +119 -0
  752. package/hooks/succ-post-tool.cjs +198 -134
  753. package/hooks/succ-pre-compact.cjs +262 -0
  754. package/hooks/succ-pre-tool.cjs +526 -182
  755. package/hooks/succ-session-end.cjs +40 -64
  756. package/hooks/succ-session-start.cjs +504 -450
  757. package/hooks/succ-stop-reflection.cjs +36 -62
  758. package/hooks/succ-user-prompt.cjs +137 -180
  759. package/package.json +18 -7
@@ -0,0 +1,275 @@
1
+ /**
2
+ * LSP Auto-Installer — installs LSP servers on demand via npm or runtime tools.
3
+ *
4
+ * Install location: ~/.succ/lsp-servers/<name>/
5
+ * Strategies: npm (Tier 1), runtime (Tier 2). Binary download (Tier 3) is defined but not yet implemented.
6
+ * Security: npm --ignore-scripts, server name validation.
7
+ */
8
+ import { execFileSync } from 'child_process';
9
+ import * as fs from 'fs';
10
+ import * as path from 'path';
11
+ import * as os from 'os';
12
+ import { logInfo, logWarn } from '../lib/fault-logger.js';
13
+ // ============================================================================
14
+ // Paths
15
+ // ============================================================================
16
+ /** Base directory for LSP server installations */
17
+ export function getServersDir() {
18
+ return path.join(os.homedir(), '.succ', 'lsp-servers');
19
+ }
20
+ /**
21
+ * Validate a server name to prevent path traversal.
22
+ * Allows only alphanumeric characters, hyphens, underscores, and dots.
23
+ * Rejects absolute paths, path separators, and `..` components.
24
+ */
25
+ export function validateServerName(serverName) {
26
+ if (!serverName || serverName.length === 0) {
27
+ throw new Error('Server name must not be empty');
28
+ }
29
+ if (!/^[a-zA-Z0-9._-]+$/.test(serverName)) {
30
+ throw new Error(`Invalid server name "${serverName}": only alphanumeric characters, hyphens, underscores, and dots are allowed`);
31
+ }
32
+ // Reject dot-only names and names containing '..' components
33
+ if (serverName === '.' || serverName === '..' || serverName.includes('..')) {
34
+ throw new Error(`Invalid server name "${serverName}": path traversal not allowed`);
35
+ }
36
+ }
37
+ /** Get install path for a specific server */
38
+ export function getServerPath(serverName) {
39
+ validateServerName(serverName);
40
+ const resolved = path.resolve(getServersDir(), serverName);
41
+ // Guard: ensure the resolved path stays inside the managed directory
42
+ if (!resolved.startsWith(path.resolve(getServersDir()) + path.sep) &&
43
+ resolved !== path.resolve(getServersDir())) {
44
+ throw new Error(`Server path "${resolved}" escapes the managed directory`);
45
+ }
46
+ return resolved;
47
+ }
48
+ /** Get the binary path for a server after installation */
49
+ export function getServerBinaryPath(serverName, command) {
50
+ if (!command) {
51
+ throw new Error('LSP command must not be empty');
52
+ }
53
+ // Validate command to prevent path traversal
54
+ const basename = path.basename(command);
55
+ if (basename !== command || command.includes('..')) {
56
+ throw new Error(`Invalid LSP command "${command}": path traversal not allowed`);
57
+ }
58
+ const serverDir = getServerPath(serverName);
59
+ const npmBin = path.join(serverDir, 'node_modules', '.bin', command);
60
+ if (fs.existsSync(npmBin))
61
+ return npmBin;
62
+ if (fs.existsSync(npmBin + '.cmd'))
63
+ return npmBin + '.cmd';
64
+ // Try direct path (for binary downloads or runtime installs)
65
+ const direct = path.join(serverDir, command);
66
+ if (fs.existsSync(direct))
67
+ return direct;
68
+ // Fall back to global command
69
+ return command;
70
+ }
71
+ // ============================================================================
72
+ // Installation
73
+ // ============================================================================
74
+ /**
75
+ * Check if a server is already installed.
76
+ */
77
+ export function isServerInstalled(serverName, command) {
78
+ const binaryPath = getServerBinaryPath(serverName, command);
79
+ // Check if it's in our managed directory (append sep to avoid matching siblings)
80
+ const serversDir = getServersDir() + path.sep;
81
+ if (binaryPath.startsWith(serversDir)) {
82
+ return fs.existsSync(binaryPath);
83
+ }
84
+ // Check if it's available globally
85
+ try {
86
+ execFileSync(command, ['--version'], {
87
+ stdio: 'pipe',
88
+ timeout: 5000,
89
+ });
90
+ return true;
91
+ }
92
+ catch (error) {
93
+ logWarn('lsp-installer', `Server ${command} not found globally`, {
94
+ error: error instanceof Error ? error.message : String(error),
95
+ });
96
+ return false;
97
+ }
98
+ }
99
+ /**
100
+ * Install an LSP server.
101
+ *
102
+ * @returns true if installation succeeded
103
+ */
104
+ export async function installServer(serverName, config) {
105
+ const serverDir = getServerPath(serverName);
106
+ try {
107
+ switch (config.install.type) {
108
+ case 'npm':
109
+ return installViaNpm(serverName, serverDir, config.install);
110
+ case 'runtime':
111
+ return installViaRuntime(serverName, config.install);
112
+ case 'binary':
113
+ logWarn('lsp-installer', `Binary download not yet implemented for ${serverName}`);
114
+ return false;
115
+ default:
116
+ return false;
117
+ }
118
+ }
119
+ catch (error) {
120
+ logWarn('lsp-installer', `Failed to install ${serverName}`, {
121
+ error: error instanceof Error ? error.message : String(error),
122
+ });
123
+ return false;
124
+ }
125
+ }
126
+ /**
127
+ * Install via npm (Tier 1 strategy).
128
+ */
129
+ function installViaNpm(serverName, serverDir, strategy) {
130
+ // Install into a temp directory first so a failed install cannot delete a
131
+ // previously working version of the server.
132
+ const tmpDir = `${serverDir}.tmp`;
133
+ // Clean up any leftover temp dir from a previous failed attempt
134
+ try {
135
+ fs.rmSync(tmpDir, { recursive: true, force: true });
136
+ }
137
+ catch (cleanupErr) {
138
+ logWarn('lsp-installer', `Failed to remove stale temp dir for ${serverName}`, {
139
+ error: cleanupErr instanceof Error ? cleanupErr.message : String(cleanupErr),
140
+ });
141
+ }
142
+ fs.mkdirSync(tmpDir, { recursive: true });
143
+ // Initialize package.json
144
+ const pkgJson = path.join(tmpDir, 'package.json');
145
+ fs.writeFileSync(pkgJson, JSON.stringify({ name: `succ-lsp-${serverName}`, private: true }));
146
+ // Install packages with --ignore-scripts for security
147
+ logInfo('lsp-installer', `Installing ${serverName} via npm: ${strategy.packages.join(', ')}`);
148
+ try {
149
+ execFileSync('npm', ['install', '--ignore-scripts', ...strategy.packages], {
150
+ cwd: tmpDir,
151
+ stdio: 'pipe',
152
+ timeout: 120000,
153
+ });
154
+ }
155
+ catch (error) {
156
+ // Clean up temp dir only — never touch serverDir so an existing working
157
+ // install is preserved.
158
+ try {
159
+ fs.rmSync(tmpDir, { recursive: true, force: true });
160
+ }
161
+ catch (cleanupErr) {
162
+ logWarn('lsp-installer', `Failed to clean up temp install dir for ${serverName}`, {
163
+ error: cleanupErr instanceof Error ? cleanupErr.message : String(cleanupErr),
164
+ });
165
+ }
166
+ throw error;
167
+ }
168
+ // Atomically replace the existing install (if any) with the new one.
169
+ // Must remove serverDir first — fs.renameSync fails on Windows if the
170
+ // destination exists. If removal fails, clean up tmpDir and rethrow so
171
+ // the caller sees a clean failure rather than a stranded temp directory.
172
+ if (fs.existsSync(serverDir)) {
173
+ try {
174
+ fs.rmSync(serverDir, { recursive: true, force: true });
175
+ }
176
+ catch (cleanupErr) {
177
+ const msg = cleanupErr instanceof Error ? cleanupErr.message : String(cleanupErr);
178
+ logWarn('lsp-installer', `Failed to remove old install dir for ${serverName}`, {
179
+ error: msg,
180
+ });
181
+ // Clean up temp dir so it doesn't accumulate on repeated failures
182
+ try {
183
+ fs.rmSync(tmpDir, { recursive: true, force: true });
184
+ }
185
+ catch (tmpCleanupErr) {
186
+ logWarn('lsp-installer', `Failed to clean up temp dir for ${serverName} after removal failure`, { error: tmpCleanupErr instanceof Error ? tmpCleanupErr.message : String(tmpCleanupErr) });
187
+ }
188
+ throw new Error(`Cannot replace existing install for ${serverName}: ${msg}`, {
189
+ cause: cleanupErr,
190
+ });
191
+ }
192
+ }
193
+ fs.renameSync(tmpDir, serverDir);
194
+ logInfo('lsp-installer', `Successfully installed ${serverName}`);
195
+ return true;
196
+ }
197
+ /**
198
+ * Install via runtime (Tier 2 strategy).
199
+ */
200
+ function installViaRuntime(serverName, strategy) {
201
+ // Check if runtime is available
202
+ const checkParts = strategy.check.split(/\s+/);
203
+ try {
204
+ execFileSync(checkParts[0], checkParts.slice(1), { stdio: 'pipe', timeout: 5000 });
205
+ }
206
+ catch (error) {
207
+ logWarn('lsp-installer', `Cannot install ${serverName}: ${strategy.hint}`, {
208
+ error: error instanceof Error ? error.message : String(error),
209
+ });
210
+ return false;
211
+ }
212
+ logInfo('lsp-installer', `Installing ${serverName}: ${strategy.installCmd.join(' ')}`);
213
+ execFileSync(strategy.installCmd[0], strategy.installCmd.slice(1), {
214
+ stdio: 'pipe',
215
+ timeout: 300000,
216
+ });
217
+ // Record runtime install in manifest so listInstalledServers() can find it
218
+ recordRuntimeInstall(serverName, strategy);
219
+ logInfo('lsp-installer', `Successfully installed ${serverName}`);
220
+ return true;
221
+ }
222
+ /**
223
+ * Record a runtime install in a manifest file under the server directory.
224
+ * This makes runtime installs visible to listInstalledServers() and
225
+ * allows uninstallServer() to know the install type.
226
+ */
227
+ function recordRuntimeInstall(serverName, strategy) {
228
+ const serverDir = getServerPath(serverName);
229
+ fs.mkdirSync(serverDir, { recursive: true });
230
+ const manifest = {
231
+ type: 'runtime',
232
+ installedAt: new Date().toISOString(),
233
+ check: strategy.check,
234
+ installCmd: strategy.installCmd,
235
+ };
236
+ fs.writeFileSync(path.join(serverDir, 'manifest.json'), JSON.stringify(manifest, null, 2));
237
+ }
238
+ /**
239
+ * Uninstall a server.
240
+ */
241
+ export function uninstallServer(serverName) {
242
+ const serverDir = getServerPath(serverName);
243
+ if (!fs.existsSync(serverDir))
244
+ return true;
245
+ try {
246
+ fs.rmSync(serverDir, { recursive: true, force: true });
247
+ logInfo('lsp-installer', `Uninstalled ${serverName}`);
248
+ return true;
249
+ }
250
+ catch (error) {
251
+ logWarn('lsp-installer', `Failed to uninstall ${serverName}`, {
252
+ error: error instanceof Error ? error.message : String(error),
253
+ });
254
+ return false;
255
+ }
256
+ }
257
+ /**
258
+ * List installed servers.
259
+ */
260
+ export function listInstalledServers() {
261
+ const dir = getServersDir();
262
+ if (!fs.existsSync(dir))
263
+ return [];
264
+ return fs.readdirSync(dir).filter((entry) => {
265
+ const full = path.join(dir, entry);
266
+ try {
267
+ return fs.statSync(full).isDirectory();
268
+ }
269
+ catch (e) {
270
+ logWarn('lsp-installer', `Skipping vanished entry ${entry}: ${e instanceof Error ? e.message : String(e)}`);
271
+ return false;
272
+ }
273
+ });
274
+ }
275
+ //# sourceMappingURL=installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/lsp/installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * LSP Manager — manages LSP server instances per language:root.
3
+ *
4
+ * Lifecycle:
5
+ * 1. Detect project language from marker files
6
+ * 2. Auto-install LSP server if missing (configurable)
7
+ * 3. Spawn server on first query (lazy)
8
+ * 4. Keep server alive across queries (singleton per language:root)
9
+ * 5. Idle timeout: kill after 10 min of inactivity
10
+ * 6. Graceful degradation: LSP unavailable → return null
11
+ */
12
+ import { LspClient, type LspLocation } from './client.js';
13
+ export interface LspQueryResult {
14
+ locations: LspLocation[];
15
+ /** Whether the result came from LSP (true) or null/empty (false = fallback needed) */
16
+ fromLsp: boolean;
17
+ /** Server name that handled the query */
18
+ server?: string;
19
+ }
20
+ /**
21
+ * Get or create an LSP client for a given language and project root.
22
+ *
23
+ * @param language - Language key (e.g. 'typescript', 'python')
24
+ * @param rootPath - Project root directory
25
+ * @param autoInstall - Whether to auto-install if server is missing (default: true)
26
+ */
27
+ export declare function getClient(language: string, rootPath: string, autoInstall?: boolean): Promise<LspClient | null>;
28
+ /**
29
+ * Find definition of a symbol.
30
+ *
31
+ * @param filePath - File containing the symbol
32
+ * @param line - 0-based line number
33
+ * @param character - 0-based character offset
34
+ * @param rootPath - Project root
35
+ */
36
+ export declare function findDefinition(filePath: string, line: number, character: number, rootPath: string): Promise<LspQueryResult>;
37
+ /**
38
+ * Find all references to a symbol.
39
+ */
40
+ export declare function findReferences(filePath: string, line: number, character: number, rootPath: string, includeDeclaration?: boolean): Promise<LspQueryResult>;
41
+ /**
42
+ * Get hover information.
43
+ */
44
+ export declare function getHover(filePath: string, line: number, character: number, rootPath: string): Promise<{
45
+ content: string | null;
46
+ fromLsp: boolean;
47
+ }>;
48
+ /**
49
+ * Shutdown all active LSP clients, including any still initializing.
50
+ *
51
+ * Clients whose `start()` is in-flight (present in `initializing`) are awaited
52
+ * first so that their process is never left running after this function returns.
53
+ */
54
+ export declare function shutdownAll(): Promise<void>;
55
+ /**
56
+ * Get status of all active LSP clients.
57
+ */
58
+ export declare function getStatus(): Array<{
59
+ key: string;
60
+ ready: boolean;
61
+ }>;
62
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/lsp/manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAS1D,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,sFAAsF;IACtF,OAAO,EAAE,OAAO,CAAC;IACjB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAYD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,OAAc,GAC1B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAuB3B;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,CAAC,CAgBzB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,kBAAkB,GAAE,OAAc,GACjC,OAAO,CAAC,cAAc,CAAC,CAgBzB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAgBvD;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAqCjD;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CAKlE"}
@@ -0,0 +1,234 @@
1
+ /**
2
+ * LSP Manager — manages LSP server instances per language:root.
3
+ *
4
+ * Lifecycle:
5
+ * 1. Detect project language from marker files
6
+ * 2. Auto-install LSP server if missing (configurable)
7
+ * 3. Spawn server on first query (lazy)
8
+ * 4. Keep server alive across queries (singleton per language:root)
9
+ * 5. Idle timeout: kill after 10 min of inactivity
10
+ * 6. Graceful degradation: LSP unavailable → return null
11
+ */
12
+ import * as path from 'path';
13
+ import { LspClient } from './client.js';
14
+ import { LSP_SERVERS } from './servers.js';
15
+ import { installServer, isServerInstalled, getServerBinaryPath } from './installer.js';
16
+ import { logInfo, logWarn } from '../lib/fault-logger.js';
17
+ const clients = new Map();
18
+ const initializing = new Map();
19
+ /**
20
+ * Get or create an LSP client for a given language and project root.
21
+ *
22
+ * @param language - Language key (e.g. 'typescript', 'python')
23
+ * @param rootPath - Project root directory
24
+ * @param autoInstall - Whether to auto-install if server is missing (default: true)
25
+ */
26
+ export async function getClient(language, rootPath, autoInstall = true) {
27
+ const key = `${language}:${rootPath}`;
28
+ // Return existing client if ready
29
+ const existing = clients.get(key);
30
+ if (existing?.isReady)
31
+ return existing;
32
+ // Prevent duplicate initialization
33
+ const pending = initializing.get(key);
34
+ if (pending)
35
+ return pending;
36
+ const promise = initializeClient(language, rootPath, autoInstall);
37
+ initializing.set(key, promise);
38
+ try {
39
+ const client = await promise;
40
+ if (client) {
41
+ clients.set(key, client);
42
+ }
43
+ return client;
44
+ }
45
+ finally {
46
+ initializing.delete(key);
47
+ }
48
+ }
49
+ /**
50
+ * Find definition of a symbol.
51
+ *
52
+ * @param filePath - File containing the symbol
53
+ * @param line - 0-based line number
54
+ * @param character - 0-based character offset
55
+ * @param rootPath - Project root
56
+ */
57
+ export async function findDefinition(filePath, line, character, rootPath) {
58
+ const language = detectLanguageFromFile(filePath);
59
+ if (!language)
60
+ return { locations: [], fromLsp: false };
61
+ const client = await getClient(language, rootPath);
62
+ if (!client)
63
+ return { locations: [], fromLsp: false };
64
+ try {
65
+ const locations = await client.definition(filePath, line, character);
66
+ return { locations, fromLsp: true, server: language };
67
+ }
68
+ catch (error) {
69
+ logWarn('lsp-manager', `Definition query failed for ${filePath}:${line}:${character}`, {
70
+ error: error instanceof Error ? error.message : String(error),
71
+ });
72
+ return { locations: [], fromLsp: false };
73
+ }
74
+ }
75
+ /**
76
+ * Find all references to a symbol.
77
+ */
78
+ export async function findReferences(filePath, line, character, rootPath, includeDeclaration = true) {
79
+ const language = detectLanguageFromFile(filePath);
80
+ if (!language)
81
+ return { locations: [], fromLsp: false };
82
+ const client = await getClient(language, rootPath);
83
+ if (!client)
84
+ return { locations: [], fromLsp: false };
85
+ try {
86
+ const locations = await client.references(filePath, line, character, includeDeclaration);
87
+ return { locations, fromLsp: true, server: language };
88
+ }
89
+ catch (error) {
90
+ logWarn('lsp-manager', `References query failed for ${filePath}:${line}:${character}`, {
91
+ error: error instanceof Error ? error.message : String(error),
92
+ });
93
+ return { locations: [], fromLsp: false };
94
+ }
95
+ }
96
+ /**
97
+ * Get hover information.
98
+ */
99
+ export async function getHover(filePath, line, character, rootPath) {
100
+ const language = detectLanguageFromFile(filePath);
101
+ if (!language)
102
+ return { content: null, fromLsp: false };
103
+ const client = await getClient(language, rootPath);
104
+ if (!client)
105
+ return { content: null, fromLsp: false };
106
+ try {
107
+ const content = await client.hover(filePath, line, character);
108
+ return { content, fromLsp: true };
109
+ }
110
+ catch (error) {
111
+ logWarn('lsp-manager', `Hover query failed for ${filePath}:${line}:${character}`, {
112
+ error: error instanceof Error ? error.message : String(error),
113
+ });
114
+ return { content: null, fromLsp: false };
115
+ }
116
+ }
117
+ /**
118
+ * Shutdown all active LSP clients, including any still initializing.
119
+ *
120
+ * Clients whose `start()` is in-flight (present in `initializing`) are awaited
121
+ * first so that their process is never left running after this function returns.
122
+ */
123
+ export async function shutdownAll() {
124
+ // Collect already-resolved clients
125
+ const clientShutdowns = Array.from(clients.entries()).map(async ([key, client]) => {
126
+ try {
127
+ await client.shutdown();
128
+ }
129
+ catch (error) {
130
+ logWarn('lsp-manager', `Failed to shutdown ${key}`, {
131
+ error: error instanceof Error ? error.message : String(error),
132
+ });
133
+ }
134
+ });
135
+ // Also await any in-flight initializations and shut down the resulting clients
136
+ const initializingShutdowns = Array.from(initializing.entries()).map(async ([key, promise]) => {
137
+ let initClient;
138
+ try {
139
+ initClient = await promise;
140
+ }
141
+ catch {
142
+ // Initialization failed — no client to shut down
143
+ return;
144
+ }
145
+ if (!initClient)
146
+ return;
147
+ try {
148
+ await initClient.shutdown();
149
+ }
150
+ catch (error) {
151
+ logWarn('lsp-manager', `Failed to shutdown in-flight client ${key}`, {
152
+ error: error instanceof Error ? error.message : String(error),
153
+ });
154
+ }
155
+ });
156
+ await Promise.all([...clientShutdowns, ...initializingShutdowns]);
157
+ clients.clear();
158
+ // initializing entries remove themselves in getClient's finally block;
159
+ // clearing here ensures no stale entries remain even if called out of order.
160
+ initializing.clear();
161
+ logInfo('lsp-manager', 'All LSP clients shut down');
162
+ }
163
+ /**
164
+ * Get status of all active LSP clients.
165
+ */
166
+ export function getStatus() {
167
+ return Array.from(clients.entries()).map(([key, client]) => ({
168
+ key,
169
+ ready: client.isReady,
170
+ }));
171
+ }
172
+ // ============================================================================
173
+ // Internal
174
+ // ============================================================================
175
+ async function initializeClient(language, rootPath, autoInstall) {
176
+ const config = LSP_SERVERS[language];
177
+ if (!config) {
178
+ logWarn('lsp-manager', `No LSP server config for language: ${language}`);
179
+ return null;
180
+ }
181
+ // Check if installed
182
+ if (!isServerInstalled(language, config.command)) {
183
+ if (!autoInstall) {
184
+ logInfo('lsp-manager', `${config.name} not installed and auto-install disabled`);
185
+ return null;
186
+ }
187
+ logInfo('lsp-manager', `Auto-installing ${config.name}...`);
188
+ const installed = await installServer(language, config);
189
+ if (!installed) {
190
+ logWarn('lsp-manager', `Failed to auto-install ${config.name}`);
191
+ return null;
192
+ }
193
+ }
194
+ // Get the actual command path
195
+ const command = getServerBinaryPath(language, config.command);
196
+ try {
197
+ const client = new LspClient({
198
+ command,
199
+ args: config.args,
200
+ rootPath,
201
+ initializationOptions: config.initializationOptions,
202
+ idleTimeoutMs: config.idleTimeoutMs,
203
+ });
204
+ await client.start();
205
+ logInfo('lsp-manager', `${config.name} started for ${rootPath}`);
206
+ return client;
207
+ }
208
+ catch (error) {
209
+ logWarn('lsp-manager', `Failed to start ${config.name}`, {
210
+ error: error instanceof Error ? error.message : String(error),
211
+ });
212
+ return null;
213
+ }
214
+ }
215
+ function detectLanguageFromFile(filePath) {
216
+ const ext = path.extname(filePath).slice(1).toLowerCase();
217
+ if (!ext)
218
+ return null;
219
+ const extMap = {
220
+ ts: 'typescript',
221
+ tsx: 'typescript',
222
+ js: 'typescript',
223
+ jsx: 'typescript',
224
+ py: 'python',
225
+ go: 'go',
226
+ rs: 'rust',
227
+ cs: 'csharp',
228
+ kt: 'kotlin',
229
+ kts: 'kotlin',
230
+ swift: 'swift',
231
+ };
232
+ return extMap[ext] ?? null;
233
+ }
234
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/lsp/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * LSP Server Definitions — per-language server configuration.
3
+ *
4
+ * Defines how to detect, install, and start LSP servers for each language.
5
+ * Three install strategies: npm, binary download, or runtime check.
6
+ */
7
+ export type InstallStrategy = {
8
+ type: 'npm';
9
+ packages: string[];
10
+ } | {
11
+ type: 'binary';
12
+ repo: string;
13
+ asset: string;
14
+ } | {
15
+ type: 'runtime';
16
+ check: string;
17
+ installCmd: string[];
18
+ hint: string;
19
+ };
20
+ export interface LspServerConfig {
21
+ /** Human-readable name */
22
+ name: string;
23
+ /** Language IDs this server handles */
24
+ languages: string[];
25
+ /** How to detect if project uses this language */
26
+ rootMarkers: string[];
27
+ /** How to install the server */
28
+ install: InstallStrategy;
29
+ /** Command to start the server */
30
+ command: string;
31
+ /** Arguments for the server command */
32
+ args: string[];
33
+ /** Additional initialization options for the LSP server */
34
+ initializationOptions?: Record<string, unknown>;
35
+ /** Server capabilities to request */
36
+ capabilities?: Record<string, unknown>;
37
+ /** Idle timeout before killing (default: 600000ms = 10min) */
38
+ idleTimeoutMs?: number;
39
+ /** Support tier: 1=auto-install, 2=needs runtime, 3=community */
40
+ tier: 1 | 2 | 3;
41
+ }
42
+ export declare const LSP_SERVERS: Record<string, LspServerConfig>;
43
+ /**
44
+ * Detect which LSP servers should be used for a project.
45
+ * Checks for root marker files (exact names) and glob-style markers (e.g. "*.csproj").
46
+ *
47
+ * @param rootPath - Absolute path to the project root directory
48
+ * @param existsSync - Predicate to test whether a path exists (injectable for tests)
49
+ * @param readdirSync - Read a directory and return its entry names (injectable for tests)
50
+ */
51
+ export declare function detectProjectLanguages(rootPath: string, existsSync: (path: string) => boolean, readdirSync?: (path: string) => string[]): string[];
52
+ //# sourceMappingURL=servers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../../src/lsp/servers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,MAAM,WAAW,eAAe;IAC9B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,kDAAkD;IAClD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gCAAgC;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,2DAA2D;IAC3D,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACjB;AAMD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CA+GvD,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,EACrC,WAAW,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAuB,GAC3D,MAAM,EAAE,CA2BV"}