@mc1global/opencode-jarvis 0.1.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 (415) hide show
  1. package/LICENSE +10 -0
  2. package/README.md +171 -0
  3. package/dist/application/context-memory/dtos.d.ts +100 -0
  4. package/dist/application/context-memory/dtos.d.ts.map +1 -0
  5. package/dist/application/context-memory/dtos.js +11 -0
  6. package/dist/application/context-memory/dtos.js.map +1 -0
  7. package/dist/application/context-memory/note-use-cases.d.ts +22 -0
  8. package/dist/application/context-memory/note-use-cases.d.ts.map +1 -0
  9. package/dist/application/context-memory/note-use-cases.js +76 -0
  10. package/dist/application/context-memory/note-use-cases.js.map +1 -0
  11. package/dist/application/context-memory/session-use-cases.d.ts +23 -0
  12. package/dist/application/context-memory/session-use-cases.d.ts.map +1 -0
  13. package/dist/application/context-memory/session-use-cases.js +63 -0
  14. package/dist/application/context-memory/session-use-cases.js.map +1 -0
  15. package/dist/application/context-memory/todo-use-cases.d.ts +25 -0
  16. package/dist/application/context-memory/todo-use-cases.d.ts.map +1 -0
  17. package/dist/application/context-memory/todo-use-cases.js +100 -0
  18. package/dist/application/context-memory/todo-use-cases.js.map +1 -0
  19. package/dist/application/domain-map/dtos.d.ts +58 -0
  20. package/dist/application/domain-map/dtos.d.ts.map +1 -0
  21. package/dist/application/domain-map/dtos.js +11 -0
  22. package/dist/application/domain-map/dtos.js.map +1 -0
  23. package/dist/application/domain-map/use-cases.d.ts +64 -0
  24. package/dist/application/domain-map/use-cases.d.ts.map +1 -0
  25. package/dist/application/domain-map/use-cases.js +217 -0
  26. package/dist/application/domain-map/use-cases.js.map +1 -0
  27. package/dist/application/environment/dtos.d.ts +74 -0
  28. package/dist/application/environment/dtos.d.ts.map +1 -0
  29. package/dist/application/environment/dtos.js +10 -0
  30. package/dist/application/environment/dtos.js.map +1 -0
  31. package/dist/application/environment/use-cases.d.ts +29 -0
  32. package/dist/application/environment/use-cases.d.ts.map +1 -0
  33. package/dist/application/environment/use-cases.js +232 -0
  34. package/dist/application/environment/use-cases.js.map +1 -0
  35. package/dist/application/governance/validation-use-cases.d.ts +45 -0
  36. package/dist/application/governance/validation-use-cases.d.ts.map +1 -0
  37. package/dist/application/governance/validation-use-cases.js +51 -0
  38. package/dist/application/governance/validation-use-cases.js.map +1 -0
  39. package/dist/application/kanban/board-use-cases.d.ts +45 -0
  40. package/dist/application/kanban/board-use-cases.d.ts.map +1 -0
  41. package/dist/application/kanban/board-use-cases.js +124 -0
  42. package/dist/application/kanban/board-use-cases.js.map +1 -0
  43. package/dist/application/kanban/card-use-cases.d.ts +32 -0
  44. package/dist/application/kanban/card-use-cases.d.ts.map +1 -0
  45. package/dist/application/kanban/card-use-cases.js +204 -0
  46. package/dist/application/kanban/card-use-cases.js.map +1 -0
  47. package/dist/application/kanban/dtos.d.ts +165 -0
  48. package/dist/application/kanban/dtos.d.ts.map +1 -0
  49. package/dist/application/kanban/dtos.js +11 -0
  50. package/dist/application/kanban/dtos.js.map +1 -0
  51. package/dist/application/kanban/sprint-use-cases.d.ts +34 -0
  52. package/dist/application/kanban/sprint-use-cases.d.ts.map +1 -0
  53. package/dist/application/kanban/sprint-use-cases.js +243 -0
  54. package/dist/application/kanban/sprint-use-cases.js.map +1 -0
  55. package/dist/application/rag/dtos.d.ts +113 -0
  56. package/dist/application/rag/dtos.d.ts.map +1 -0
  57. package/dist/application/rag/dtos.js +11 -0
  58. package/dist/application/rag/dtos.js.map +1 -0
  59. package/dist/application/rag/oracle-use-cases.d.ts +30 -0
  60. package/dist/application/rag/oracle-use-cases.d.ts.map +1 -0
  61. package/dist/application/rag/oracle-use-cases.js +91 -0
  62. package/dist/application/rag/oracle-use-cases.js.map +1 -0
  63. package/dist/application/rag/use-cases.d.ts +34 -0
  64. package/dist/application/rag/use-cases.d.ts.map +1 -0
  65. package/dist/application/rag/use-cases.js +234 -0
  66. package/dist/application/rag/use-cases.js.map +1 -0
  67. package/dist/application/token-metrics/dtos.d.ts +126 -0
  68. package/dist/application/token-metrics/dtos.d.ts.map +1 -0
  69. package/dist/application/token-metrics/dtos.js +11 -0
  70. package/dist/application/token-metrics/dtos.js.map +1 -0
  71. package/dist/application/token-metrics/tracking-use-cases.d.ts +33 -0
  72. package/dist/application/token-metrics/tracking-use-cases.d.ts.map +1 -0
  73. package/dist/application/token-metrics/tracking-use-cases.js +220 -0
  74. package/dist/application/token-metrics/tracking-use-cases.js.map +1 -0
  75. package/dist/application/vault/dtos.d.ts +91 -0
  76. package/dist/application/vault/dtos.d.ts.map +1 -0
  77. package/dist/application/vault/dtos.js +11 -0
  78. package/dist/application/vault/dtos.js.map +1 -0
  79. package/dist/application/vault/use-cases.d.ts +30 -0
  80. package/dist/application/vault/use-cases.d.ts.map +1 -0
  81. package/dist/application/vault/use-cases.js +307 -0
  82. package/dist/application/vault/use-cases.js.map +1 -0
  83. package/dist/application/vault/vault-manager.d.ts +47 -0
  84. package/dist/application/vault/vault-manager.d.ts.map +1 -0
  85. package/dist/application/vault/vault-manager.js +272 -0
  86. package/dist/application/vault/vault-manager.js.map +1 -0
  87. package/dist/application/workspace-registry/dtos.d.ts +91 -0
  88. package/dist/application/workspace-registry/dtos.d.ts.map +1 -0
  89. package/dist/application/workspace-registry/dtos.js +11 -0
  90. package/dist/application/workspace-registry/dtos.js.map +1 -0
  91. package/dist/application/workspace-registry/use-cases.d.ts +29 -0
  92. package/dist/application/workspace-registry/use-cases.d.ts.map +1 -0
  93. package/dist/application/workspace-registry/use-cases.js +249 -0
  94. package/dist/application/workspace-registry/use-cases.js.map +1 -0
  95. package/dist/domain/context-memory/entities.d.ts +123 -0
  96. package/dist/domain/context-memory/entities.d.ts.map +1 -0
  97. package/dist/domain/context-memory/entities.js +229 -0
  98. package/dist/domain/context-memory/entities.js.map +1 -0
  99. package/dist/domain/context-memory/repositories.d.ts +46 -0
  100. package/dist/domain/context-memory/repositories.d.ts.map +1 -0
  101. package/dist/domain/context-memory/repositories.js +2 -0
  102. package/dist/domain/context-memory/repositories.js.map +1 -0
  103. package/dist/domain/context-memory/services.d.ts +62 -0
  104. package/dist/domain/context-memory/services.d.ts.map +1 -0
  105. package/dist/domain/context-memory/services.js +162 -0
  106. package/dist/domain/context-memory/services.js.map +1 -0
  107. package/dist/domain/context-memory/value-objects.d.ts +65 -0
  108. package/dist/domain/context-memory/value-objects.d.ts.map +1 -0
  109. package/dist/domain/context-memory/value-objects.js +105 -0
  110. package/dist/domain/context-memory/value-objects.js.map +1 -0
  111. package/dist/domain/domain-map/repositories.d.ts +126 -0
  112. package/dist/domain/domain-map/repositories.d.ts.map +1 -0
  113. package/dist/domain/domain-map/repositories.js +2 -0
  114. package/dist/domain/domain-map/repositories.js.map +1 -0
  115. package/dist/domain/domain-map/services.d.ts +108 -0
  116. package/dist/domain/domain-map/services.d.ts.map +1 -0
  117. package/dist/domain/domain-map/services.js +335 -0
  118. package/dist/domain/domain-map/services.js.map +1 -0
  119. package/dist/domain/domain-map/value-objects.d.ts +186 -0
  120. package/dist/domain/domain-map/value-objects.d.ts.map +1 -0
  121. package/dist/domain/domain-map/value-objects.js +215 -0
  122. package/dist/domain/domain-map/value-objects.js.map +1 -0
  123. package/dist/domain/environment/entities.d.ts +93 -0
  124. package/dist/domain/environment/entities.d.ts.map +1 -0
  125. package/dist/domain/environment/entities.js +207 -0
  126. package/dist/domain/environment/entities.js.map +1 -0
  127. package/dist/domain/environment/renderers.d.ts +30 -0
  128. package/dist/domain/environment/renderers.d.ts.map +1 -0
  129. package/dist/domain/environment/renderers.js +139 -0
  130. package/dist/domain/environment/renderers.js.map +1 -0
  131. package/dist/domain/environment/repositories.d.ts +73 -0
  132. package/dist/domain/environment/repositories.d.ts.map +1 -0
  133. package/dist/domain/environment/repositories.js +16 -0
  134. package/dist/domain/environment/repositories.js.map +1 -0
  135. package/dist/domain/environment/services.d.ts +62 -0
  136. package/dist/domain/environment/services.d.ts.map +1 -0
  137. package/dist/domain/environment/services.js +282 -0
  138. package/dist/domain/environment/services.js.map +1 -0
  139. package/dist/domain/environment/value-objects.d.ts +127 -0
  140. package/dist/domain/environment/value-objects.d.ts.map +1 -0
  141. package/dist/domain/environment/value-objects.js +179 -0
  142. package/dist/domain/environment/value-objects.js.map +1 -0
  143. package/dist/domain/governance/policies.d.ts +42 -0
  144. package/dist/domain/governance/policies.d.ts.map +1 -0
  145. package/dist/domain/governance/policies.js +304 -0
  146. package/dist/domain/governance/policies.js.map +1 -0
  147. package/dist/domain/governance/services.d.ts +38 -0
  148. package/dist/domain/governance/services.d.ts.map +1 -0
  149. package/dist/domain/governance/services.js +42 -0
  150. package/dist/domain/governance/services.js.map +1 -0
  151. package/dist/domain/kanban/entities.d.ts +105 -0
  152. package/dist/domain/kanban/entities.d.ts.map +1 -0
  153. package/dist/domain/kanban/entities.js +211 -0
  154. package/dist/domain/kanban/entities.js.map +1 -0
  155. package/dist/domain/kanban/grooming.d.ts +40 -0
  156. package/dist/domain/kanban/grooming.d.ts.map +1 -0
  157. package/dist/domain/kanban/grooming.js +50 -0
  158. package/dist/domain/kanban/grooming.js.map +1 -0
  159. package/dist/domain/kanban/repositories.d.ts +41 -0
  160. package/dist/domain/kanban/repositories.d.ts.map +1 -0
  161. package/dist/domain/kanban/repositories.js +2 -0
  162. package/dist/domain/kanban/repositories.js.map +1 -0
  163. package/dist/domain/kanban/services.d.ts +49 -0
  164. package/dist/domain/kanban/services.d.ts.map +1 -0
  165. package/dist/domain/kanban/services.js +154 -0
  166. package/dist/domain/kanban/services.js.map +1 -0
  167. package/dist/domain/kanban/sprint.d.ts +103 -0
  168. package/dist/domain/kanban/sprint.d.ts.map +1 -0
  169. package/dist/domain/kanban/sprint.js +192 -0
  170. package/dist/domain/kanban/sprint.js.map +1 -0
  171. package/dist/domain/kanban/value-objects.d.ts +91 -0
  172. package/dist/domain/kanban/value-objects.d.ts.map +1 -0
  173. package/dist/domain/kanban/value-objects.js +167 -0
  174. package/dist/domain/kanban/value-objects.js.map +1 -0
  175. package/dist/domain/rag/repositories.d.ts +152 -0
  176. package/dist/domain/rag/repositories.d.ts.map +1 -0
  177. package/dist/domain/rag/repositories.js +2 -0
  178. package/dist/domain/rag/repositories.js.map +1 -0
  179. package/dist/domain/rag/services.d.ts +57 -0
  180. package/dist/domain/rag/services.d.ts.map +1 -0
  181. package/dist/domain/rag/services.js +224 -0
  182. package/dist/domain/rag/services.js.map +1 -0
  183. package/dist/domain/rag/value-objects.d.ts +118 -0
  184. package/dist/domain/rag/value-objects.d.ts.map +1 -0
  185. package/dist/domain/rag/value-objects.js +114 -0
  186. package/dist/domain/rag/value-objects.js.map +1 -0
  187. package/dist/domain/shared/value-objects.d.ts +56 -0
  188. package/dist/domain/shared/value-objects.d.ts.map +1 -0
  189. package/dist/domain/shared/value-objects.js +89 -0
  190. package/dist/domain/shared/value-objects.js.map +1 -0
  191. package/dist/domain/token-metrics/entities.d.ts +90 -0
  192. package/dist/domain/token-metrics/entities.d.ts.map +1 -0
  193. package/dist/domain/token-metrics/entities.js +115 -0
  194. package/dist/domain/token-metrics/entities.js.map +1 -0
  195. package/dist/domain/token-metrics/repositories.d.ts +93 -0
  196. package/dist/domain/token-metrics/repositories.d.ts.map +1 -0
  197. package/dist/domain/token-metrics/repositories.js +2 -0
  198. package/dist/domain/token-metrics/repositories.js.map +1 -0
  199. package/dist/domain/token-metrics/value-objects.d.ts +81 -0
  200. package/dist/domain/token-metrics/value-objects.d.ts.map +1 -0
  201. package/dist/domain/token-metrics/value-objects.js +144 -0
  202. package/dist/domain/token-metrics/value-objects.js.map +1 -0
  203. package/dist/domain/vault/canvas.d.ts +70 -0
  204. package/dist/domain/vault/canvas.d.ts.map +1 -0
  205. package/dist/domain/vault/canvas.js +70 -0
  206. package/dist/domain/vault/canvas.js.map +1 -0
  207. package/dist/domain/vault/document.d.ts +71 -0
  208. package/dist/domain/vault/document.d.ts.map +1 -0
  209. package/dist/domain/vault/document.js +244 -0
  210. package/dist/domain/vault/document.js.map +1 -0
  211. package/dist/domain/vault/repositories.d.ts +35 -0
  212. package/dist/domain/vault/repositories.d.ts.map +1 -0
  213. package/dist/domain/vault/repositories.js +2 -0
  214. package/dist/domain/vault/repositories.js.map +1 -0
  215. package/dist/domain/vault/section.d.ts +33 -0
  216. package/dist/domain/vault/section.d.ts.map +1 -0
  217. package/dist/domain/vault/section.js +39 -0
  218. package/dist/domain/vault/section.js.map +1 -0
  219. package/dist/domain/vault/services.d.ts +48 -0
  220. package/dist/domain/vault/services.d.ts.map +1 -0
  221. package/dist/domain/vault/services.js +249 -0
  222. package/dist/domain/vault/services.js.map +1 -0
  223. package/dist/domain/vault/table.d.ts +58 -0
  224. package/dist/domain/vault/table.d.ts.map +1 -0
  225. package/dist/domain/vault/table.js +204 -0
  226. package/dist/domain/vault/table.js.map +1 -0
  227. package/dist/domain/vault/timeline.d.ts +53 -0
  228. package/dist/domain/vault/timeline.d.ts.map +1 -0
  229. package/dist/domain/vault/timeline.js +214 -0
  230. package/dist/domain/vault/timeline.js.map +1 -0
  231. package/dist/domain/vault/value-objects.d.ts +45 -0
  232. package/dist/domain/vault/value-objects.d.ts.map +1 -0
  233. package/dist/domain/vault/value-objects.js +89 -0
  234. package/dist/domain/vault/value-objects.js.map +1 -0
  235. package/dist/domain/workspace-registry/entities.d.ts +57 -0
  236. package/dist/domain/workspace-registry/entities.d.ts.map +1 -0
  237. package/dist/domain/workspace-registry/entities.js +148 -0
  238. package/dist/domain/workspace-registry/entities.js.map +1 -0
  239. package/dist/domain/workspace-registry/repositories.d.ts +57 -0
  240. package/dist/domain/workspace-registry/repositories.d.ts.map +1 -0
  241. package/dist/domain/workspace-registry/repositories.js +12 -0
  242. package/dist/domain/workspace-registry/repositories.js.map +1 -0
  243. package/dist/domain/workspace-registry/services.d.ts +56 -0
  244. package/dist/domain/workspace-registry/services.d.ts.map +1 -0
  245. package/dist/domain/workspace-registry/services.js +283 -0
  246. package/dist/domain/workspace-registry/services.js.map +1 -0
  247. package/dist/domain/workspace-registry/value-objects.d.ts +113 -0
  248. package/dist/domain/workspace-registry/value-objects.d.ts.map +1 -0
  249. package/dist/domain/workspace-registry/value-objects.js +235 -0
  250. package/dist/domain/workspace-registry/value-objects.js.map +1 -0
  251. package/dist/hooks/context-compacting.d.ts +35 -0
  252. package/dist/hooks/context-compacting.d.ts.map +1 -0
  253. package/dist/hooks/context-compacting.js +48 -0
  254. package/dist/hooks/context-compacting.js.map +1 -0
  255. package/dist/hooks/event-handlers.d.ts +39 -0
  256. package/dist/hooks/event-handlers.d.ts.map +1 -0
  257. package/dist/hooks/event-handlers.js +75 -0
  258. package/dist/hooks/event-handlers.js.map +1 -0
  259. package/dist/hooks/guardrails.d.ts +33 -0
  260. package/dist/hooks/guardrails.d.ts.map +1 -0
  261. package/dist/hooks/guardrails.js +22 -0
  262. package/dist/hooks/guardrails.js.map +1 -0
  263. package/dist/hooks/shell-env.d.ts +28 -0
  264. package/dist/hooks/shell-env.d.ts.map +1 -0
  265. package/dist/hooks/shell-env.js +17 -0
  266. package/dist/hooks/shell-env.js.map +1 -0
  267. package/dist/index.d.ts +16 -0
  268. package/dist/index.d.ts.map +1 -0
  269. package/dist/index.js +349 -0
  270. package/dist/index.js.map +1 -0
  271. package/dist/infrastructure/context-memory/note-repository.d.ts +26 -0
  272. package/dist/infrastructure/context-memory/note-repository.d.ts.map +1 -0
  273. package/dist/infrastructure/context-memory/note-repository.js +87 -0
  274. package/dist/infrastructure/context-memory/note-repository.js.map +1 -0
  275. package/dist/infrastructure/context-memory/search-repository.d.ts +20 -0
  276. package/dist/infrastructure/context-memory/search-repository.d.ts.map +1 -0
  277. package/dist/infrastructure/context-memory/search-repository.js +44 -0
  278. package/dist/infrastructure/context-memory/search-repository.js.map +1 -0
  279. package/dist/infrastructure/context-memory/session-repository.d.ts +26 -0
  280. package/dist/infrastructure/context-memory/session-repository.d.ts.map +1 -0
  281. package/dist/infrastructure/context-memory/session-repository.js +79 -0
  282. package/dist/infrastructure/context-memory/session-repository.js.map +1 -0
  283. package/dist/infrastructure/context-memory/todo-repository.d.ts +26 -0
  284. package/dist/infrastructure/context-memory/todo-repository.d.ts.map +1 -0
  285. package/dist/infrastructure/context-memory/todo-repository.js +105 -0
  286. package/dist/infrastructure/context-memory/todo-repository.js.map +1 -0
  287. package/dist/infrastructure/database/sqlite-adapter.d.ts +60 -0
  288. package/dist/infrastructure/database/sqlite-adapter.d.ts.map +1 -0
  289. package/dist/infrastructure/database/sqlite-adapter.js +93 -0
  290. package/dist/infrastructure/database/sqlite-adapter.js.map +1 -0
  291. package/dist/infrastructure/domain-map/llm-analyzer.d.ts +60 -0
  292. package/dist/infrastructure/domain-map/llm-analyzer.d.ts.map +1 -0
  293. package/dist/infrastructure/domain-map/llm-analyzer.js +249 -0
  294. package/dist/infrastructure/domain-map/llm-analyzer.js.map +1 -0
  295. package/dist/infrastructure/domain-map/lsp-adapter.d.ts +61 -0
  296. package/dist/infrastructure/domain-map/lsp-adapter.d.ts.map +1 -0
  297. package/dist/infrastructure/domain-map/lsp-adapter.js +210 -0
  298. package/dist/infrastructure/domain-map/lsp-adapter.js.map +1 -0
  299. package/dist/infrastructure/domain-map/lsp-configs.d.ts +53 -0
  300. package/dist/infrastructure/domain-map/lsp-configs.d.ts.map +1 -0
  301. package/dist/infrastructure/domain-map/lsp-configs.js +274 -0
  302. package/dist/infrastructure/domain-map/lsp-configs.js.map +1 -0
  303. package/dist/infrastructure/domain-map/lsp-json-rpc.d.ts +132 -0
  304. package/dist/infrastructure/domain-map/lsp-json-rpc.d.ts.map +1 -0
  305. package/dist/infrastructure/domain-map/lsp-json-rpc.js +320 -0
  306. package/dist/infrastructure/domain-map/lsp-json-rpc.js.map +1 -0
  307. package/dist/infrastructure/domain-map/project-scanner.d.ts +43 -0
  308. package/dist/infrastructure/domain-map/project-scanner.d.ts.map +1 -0
  309. package/dist/infrastructure/domain-map/project-scanner.js +193 -0
  310. package/dist/infrastructure/domain-map/project-scanner.js.map +1 -0
  311. package/dist/infrastructure/environment/environment-repository.d.ts +33 -0
  312. package/dist/infrastructure/environment/environment-repository.d.ts.map +1 -0
  313. package/dist/infrastructure/environment/environment-repository.js +161 -0
  314. package/dist/infrastructure/environment/environment-repository.js.map +1 -0
  315. package/dist/infrastructure/environment/scanner-adapter.d.ts +23 -0
  316. package/dist/infrastructure/environment/scanner-adapter.d.ts.map +1 -0
  317. package/dist/infrastructure/environment/scanner-adapter.js +102 -0
  318. package/dist/infrastructure/environment/scanner-adapter.js.map +1 -0
  319. package/dist/infrastructure/kanban/card-repository.d.ts +41 -0
  320. package/dist/infrastructure/kanban/card-repository.d.ts.map +1 -0
  321. package/dist/infrastructure/kanban/card-repository.js +185 -0
  322. package/dist/infrastructure/kanban/card-repository.js.map +1 -0
  323. package/dist/infrastructure/kanban/sprint-repository.d.ts +40 -0
  324. package/dist/infrastructure/kanban/sprint-repository.d.ts.map +1 -0
  325. package/dist/infrastructure/kanban/sprint-repository.js +186 -0
  326. package/dist/infrastructure/kanban/sprint-repository.js.map +1 -0
  327. package/dist/infrastructure/rag/file-discovery.d.ts +19 -0
  328. package/dist/infrastructure/rag/file-discovery.d.ts.map +1 -0
  329. package/dist/infrastructure/rag/file-discovery.js +201 -0
  330. package/dist/infrastructure/rag/file-discovery.js.map +1 -0
  331. package/dist/infrastructure/rag/ollama-embeddings.d.ts +18 -0
  332. package/dist/infrastructure/rag/ollama-embeddings.d.ts.map +1 -0
  333. package/dist/infrastructure/rag/ollama-embeddings.js +54 -0
  334. package/dist/infrastructure/rag/ollama-embeddings.js.map +1 -0
  335. package/dist/infrastructure/rag/text-splitter.d.ts +19 -0
  336. package/dist/infrastructure/rag/text-splitter.d.ts.map +1 -0
  337. package/dist/infrastructure/rag/text-splitter.js +38 -0
  338. package/dist/infrastructure/rag/text-splitter.js.map +1 -0
  339. package/dist/infrastructure/rag/vectra-adapter.d.ts +38 -0
  340. package/dist/infrastructure/rag/vectra-adapter.d.ts.map +1 -0
  341. package/dist/infrastructure/rag/vectra-adapter.js +275 -0
  342. package/dist/infrastructure/rag/vectra-adapter.js.map +1 -0
  343. package/dist/infrastructure/token-metrics/token-metrics-repository.d.ts +29 -0
  344. package/dist/infrastructure/token-metrics/token-metrics-repository.d.ts.map +1 -0
  345. package/dist/infrastructure/token-metrics/token-metrics-repository.js +254 -0
  346. package/dist/infrastructure/token-metrics/token-metrics-repository.js.map +1 -0
  347. package/dist/infrastructure/vault/markdown-parser.d.ts +35 -0
  348. package/dist/infrastructure/vault/markdown-parser.d.ts.map +1 -0
  349. package/dist/infrastructure/vault/markdown-parser.js +145 -0
  350. package/dist/infrastructure/vault/markdown-parser.js.map +1 -0
  351. package/dist/infrastructure/vault/vault-fs-adapter.d.ts +17 -0
  352. package/dist/infrastructure/vault/vault-fs-adapter.d.ts.map +1 -0
  353. package/dist/infrastructure/vault/vault-fs-adapter.js +105 -0
  354. package/dist/infrastructure/vault/vault-fs-adapter.js.map +1 -0
  355. package/dist/infrastructure/workspace-registry/dependency-repository.d.ts +27 -0
  356. package/dist/infrastructure/workspace-registry/dependency-repository.d.ts.map +1 -0
  357. package/dist/infrastructure/workspace-registry/dependency-repository.js +89 -0
  358. package/dist/infrastructure/workspace-registry/dependency-repository.js.map +1 -0
  359. package/dist/infrastructure/workspace-registry/workspace-repository.d.ts +28 -0
  360. package/dist/infrastructure/workspace-registry/workspace-repository.d.ts.map +1 -0
  361. package/dist/infrastructure/workspace-registry/workspace-repository.js +108 -0
  362. package/dist/infrastructure/workspace-registry/workspace-repository.js.map +1 -0
  363. package/dist/tools/agent-tools.d.ts +14 -0
  364. package/dist/tools/agent-tools.d.ts.map +1 -0
  365. package/dist/tools/agent-tools.js +238 -0
  366. package/dist/tools/agent-tools.js.map +1 -0
  367. package/dist/tools/context-memory-tools.d.ts +16 -0
  368. package/dist/tools/context-memory-tools.d.ts.map +1 -0
  369. package/dist/tools/context-memory-tools.js +242 -0
  370. package/dist/tools/context-memory-tools.js.map +1 -0
  371. package/dist/tools/data-tools.d.ts +3 -0
  372. package/dist/tools/data-tools.d.ts.map +1 -0
  373. package/dist/tools/data-tools.js +383 -0
  374. package/dist/tools/data-tools.js.map +1 -0
  375. package/dist/tools/domain-map-tools.d.ts +41 -0
  376. package/dist/tools/domain-map-tools.d.ts.map +1 -0
  377. package/dist/tools/domain-map-tools.js +134 -0
  378. package/dist/tools/domain-map-tools.js.map +1 -0
  379. package/dist/tools/environment-tools.d.ts +85 -0
  380. package/dist/tools/environment-tools.d.ts.map +1 -0
  381. package/dist/tools/environment-tools.js +223 -0
  382. package/dist/tools/environment-tools.js.map +1 -0
  383. package/dist/tools/governance-tools.d.ts +7 -0
  384. package/dist/tools/governance-tools.d.ts.map +1 -0
  385. package/dist/tools/governance-tools.js +73 -0
  386. package/dist/tools/governance-tools.js.map +1 -0
  387. package/dist/tools/kanban-board-tools.d.ts +11 -0
  388. package/dist/tools/kanban-board-tools.d.ts.map +1 -0
  389. package/dist/tools/kanban-board-tools.js +354 -0
  390. package/dist/tools/kanban-board-tools.js.map +1 -0
  391. package/dist/tools/kanban-card-tools.d.ts +11 -0
  392. package/dist/tools/kanban-card-tools.d.ts.map +1 -0
  393. package/dist/tools/kanban-card-tools.js +407 -0
  394. package/dist/tools/kanban-card-tools.js.map +1 -0
  395. package/dist/tools/rag-tools.d.ts +10 -0
  396. package/dist/tools/rag-tools.d.ts.map +1 -0
  397. package/dist/tools/rag-tools.js +279 -0
  398. package/dist/tools/rag-tools.js.map +1 -0
  399. package/dist/tools/token-metrics-tools.d.ts +98 -0
  400. package/dist/tools/token-metrics-tools.d.ts.map +1 -0
  401. package/dist/tools/token-metrics-tools.js +287 -0
  402. package/dist/tools/token-metrics-tools.js.map +1 -0
  403. package/dist/tools/vault-manage-tool.d.ts +7 -0
  404. package/dist/tools/vault-manage-tool.d.ts.map +1 -0
  405. package/dist/tools/vault-manage-tool.js +193 -0
  406. package/dist/tools/vault-manage-tool.js.map +1 -0
  407. package/dist/tools/vault-tools.d.ts +7 -0
  408. package/dist/tools/vault-tools.d.ts.map +1 -0
  409. package/dist/tools/vault-tools.js +348 -0
  410. package/dist/tools/vault-tools.js.map +1 -0
  411. package/dist/tools/workspace-registry-tools.d.ts +93 -0
  412. package/dist/tools/workspace-registry-tools.d.ts.map +1 -0
  413. package/dist/tools/workspace-registry-tools.js +217 -0
  414. package/dist/tools/workspace-registry-tools.js.map +1 -0
  415. package/package.json +59 -0
@@ -0,0 +1,249 @@
1
+ // ── LLM Analyzer Implementation ──────────────────────────────────────
2
+ /**
3
+ * Implementation of LlmAnalysisPort using an injected prompt function.
4
+ * Builds a structured analysis prompt, sends it to the LLM, and
5
+ * parses the JSON response into domain value objects.
6
+ */
7
+ export class LlmSemanticAnalyzer {
8
+ promptFn;
9
+ constructor(promptFn) {
10
+ this.promptFn = promptFn;
11
+ }
12
+ async analyzeStructure(graph, codeSamples, modelPreference) {
13
+ const prompt = buildAnalysisPrompt(graph, codeSamples);
14
+ const response = await this.promptFn(prompt, modelPreference);
15
+ return parseAnalysisResponse(response);
16
+ }
17
+ }
18
+ // ── Prompt Building ───────────────────────────────────────────────────
19
+ /**
20
+ * Build the analysis prompt from structural graph and code samples.
21
+ * Instructs the LLM to produce a JSON response matching SemanticAnalysis.
22
+ *
23
+ * @param graph - Structural graph from LSP extraction
24
+ * @param codeSamples - Representative code samples
25
+ * @returns The prompt string to send to the LLM
26
+ */
27
+ export function buildAnalysisPrompt(graph, codeSamples) {
28
+ const lines = [];
29
+ lines.push("You are a Domain-Driven Design expert analyzing a codebase.");
30
+ lines.push("Based on the structural analysis and code samples below,");
31
+ lines.push("identify bounded contexts, SRP violations, and recommend a DDD structure.");
32
+ lines.push("");
33
+ lines.push("## Structural Analysis");
34
+ lines.push("");
35
+ lines.push(`Total files: ${graph.totalFiles}`);
36
+ lines.push(`Total symbols: ${graph.totalSymbols}`);
37
+ lines.push(`Cross-file references: ${graph.references.length}`);
38
+ lines.push("");
39
+ // File symbol summary (truncated to avoid token overflow)
40
+ lines.push("### File Symbols");
41
+ lines.push("");
42
+ let fileCount = 0;
43
+ for (const [filePath, symbols] of graph.fileSymbolMap) {
44
+ if (fileCount >= 50) {
45
+ lines.push(`... and ${graph.totalFiles - fileCount} more files`);
46
+ break;
47
+ }
48
+ lines.push(`**${filePath}**:`);
49
+ for (const sym of symbols) {
50
+ lines.push(formatSymbolSummary(sym, 1));
51
+ }
52
+ lines.push("");
53
+ fileCount++;
54
+ }
55
+ // Cross-file references summary
56
+ if (graph.references.length > 0) {
57
+ lines.push("### Cross-File References");
58
+ lines.push("");
59
+ const maxRefs = Math.min(graph.references.length, 100);
60
+ for (let i = 0; i < maxRefs; i++) {
61
+ const ref = graph.references[i];
62
+ lines.push(`- ${ref.fromFile}::${ref.fromSymbol} --${ref.type}--> ${ref.toFile}::${ref.toSymbol}`);
63
+ }
64
+ if (graph.references.length > 100) {
65
+ lines.push(`... and ${graph.references.length - 100} more references`);
66
+ }
67
+ lines.push("");
68
+ }
69
+ // Code samples
70
+ if (codeSamples.length > 0) {
71
+ lines.push("### Code Samples");
72
+ lines.push("");
73
+ for (const sample of codeSamples.slice(0, 10)) {
74
+ lines.push(`**${sample.filePath}** (${sample.lineCount} lines):`);
75
+ lines.push("```");
76
+ // Truncate very large samples
77
+ const truncated = sample.content.length > 3000
78
+ ? sample.content.slice(0, 3000) + "\n... (truncated)"
79
+ : sample.content;
80
+ lines.push(truncated);
81
+ lines.push("```");
82
+ lines.push("");
83
+ }
84
+ }
85
+ // Output format instructions
86
+ lines.push("## Instructions");
87
+ lines.push("");
88
+ lines.push("Respond with ONLY a JSON object (no markdown fences, no explanation) matching this schema:");
89
+ lines.push("");
90
+ lines.push("```json");
91
+ lines.push(JSON.stringify(RESPONSE_SCHEMA, null, 2));
92
+ lines.push("```");
93
+ lines.push("");
94
+ lines.push("Be specific about file assignments and entity identification.");
95
+ lines.push("If you detect SRP violations (files doing too many things),");
96
+ lines.push("list them with concrete suggested splits.");
97
+ return lines.join("\n");
98
+ }
99
+ /** Format a symbol summary line with indentation for hierarchy. */
100
+ function formatSymbolSummary(symbol, depth) {
101
+ const indent = " ".repeat(depth);
102
+ const childCount = symbol.children.length;
103
+ const childInfo = childCount > 0 ? ` (${childCount} children)` : "";
104
+ let line = `${indent}- ${symbol.kind}: ${symbol.name}${childInfo}`;
105
+ // Show immediate children but don't recurse too deep
106
+ if (depth < 3) {
107
+ for (const child of symbol.children) {
108
+ line += "\n" + formatSymbolSummary(child, depth + 1);
109
+ }
110
+ }
111
+ return line;
112
+ }
113
+ /** Expected JSON response schema for LLM output. */
114
+ const RESPONSE_SCHEMA = {
115
+ type: "object",
116
+ properties: {
117
+ boundedContexts: {
118
+ type: "array",
119
+ items: {
120
+ type: "object",
121
+ properties: {
122
+ name: { type: "string" },
123
+ responsibility: { type: "string" },
124
+ files: { type: "array", items: { type: "string" } },
125
+ entities: { type: "array", items: { type: "string" } },
126
+ aggregates: { type: "array", items: { type: "string" } },
127
+ dependencies: { type: "array", items: { type: "string" } },
128
+ },
129
+ required: [
130
+ "name",
131
+ "responsibility",
132
+ "files",
133
+ "entities",
134
+ "aggregates",
135
+ "dependencies",
136
+ ],
137
+ },
138
+ },
139
+ violations: {
140
+ type: "array",
141
+ items: {
142
+ type: "object",
143
+ properties: {
144
+ file: { type: "string" },
145
+ lines: { type: "number" },
146
+ issue: { type: "string" },
147
+ suggestedSplit: { type: "array", items: { type: "string" } },
148
+ },
149
+ required: ["file", "lines", "issue", "suggestedSplit"],
150
+ },
151
+ },
152
+ recommendedStructure: { type: "string" },
153
+ },
154
+ required: ["boundedContexts", "violations", "recommendedStructure"],
155
+ };
156
+ // ── Response Parsing ──────────────────────────────────────────────────
157
+ /**
158
+ * Parse and validate the LLM's JSON response into a SemanticAnalysis.
159
+ * Handles common LLM output quirks (markdown fences, extra text).
160
+ *
161
+ * @param response - Raw LLM response text
162
+ * @returns Validated SemanticAnalysis
163
+ * @throws Error if the response cannot be parsed
164
+ */
165
+ export function parseAnalysisResponse(response) {
166
+ const json = extractJson(response);
167
+ let parsed;
168
+ try {
169
+ parsed = JSON.parse(json);
170
+ }
171
+ catch {
172
+ throw new Error(`LLM response is not valid JSON. Raw response: ${response.slice(0, 200)}`);
173
+ }
174
+ if (typeof parsed !== "object" || parsed === null) {
175
+ throw new Error("LLM response is not a JSON object");
176
+ }
177
+ const obj = parsed;
178
+ // Validate and extract bounded contexts
179
+ const boundedContexts = validateBoundedContexts(obj.boundedContexts);
180
+ const violations = validateViolations(obj.violations);
181
+ const recommendedStructure = typeof obj.recommendedStructure === "string"
182
+ ? obj.recommendedStructure
183
+ : "";
184
+ return {
185
+ boundedContexts,
186
+ violations,
187
+ recommendedStructure,
188
+ };
189
+ }
190
+ /**
191
+ * Extract JSON from LLM response that may contain markdown fences or extra text.
192
+ * Looks for the first { and last } to extract the JSON object.
193
+ */
194
+ export function extractJson(text) {
195
+ // Try to find JSON within markdown code fences first
196
+ const fenceMatch = text.match(/```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/);
197
+ if (fenceMatch !== null) {
198
+ return fenceMatch[1].trim();
199
+ }
200
+ // Find the first { and last } for bare JSON
201
+ const firstBrace = text.indexOf("{");
202
+ const lastBrace = text.lastIndexOf("}");
203
+ if (firstBrace !== -1 && lastBrace > firstBrace) {
204
+ return text.slice(firstBrace, lastBrace + 1);
205
+ }
206
+ // Return as-is and let JSON.parse fail with a clear error
207
+ return text;
208
+ }
209
+ /** Validate and sanitize bounded contexts from LLM output. */
210
+ function validateBoundedContexts(raw) {
211
+ if (!Array.isArray(raw)) {
212
+ return [];
213
+ }
214
+ return raw
215
+ .filter((item) => typeof item === "object" && item !== null)
216
+ .map((item) => ({
217
+ name: typeof item.name === "string" ? item.name : "unknown",
218
+ responsibility: typeof item.responsibility === "string" ? item.responsibility : "",
219
+ files: Array.isArray(item.files)
220
+ ? item.files.filter((f) => typeof f === "string")
221
+ : [],
222
+ entities: Array.isArray(item.entities)
223
+ ? item.entities.filter((e) => typeof e === "string")
224
+ : [],
225
+ aggregates: Array.isArray(item.aggregates)
226
+ ? item.aggregates.filter((a) => typeof a === "string")
227
+ : [],
228
+ dependencies: Array.isArray(item.dependencies)
229
+ ? item.dependencies.filter((d) => typeof d === "string")
230
+ : [],
231
+ }));
232
+ }
233
+ /** Validate and sanitize violations from LLM output. */
234
+ function validateViolations(raw) {
235
+ if (!Array.isArray(raw)) {
236
+ return [];
237
+ }
238
+ return raw
239
+ .filter((item) => typeof item === "object" && item !== null)
240
+ .map((item) => ({
241
+ file: typeof item.file === "string" ? item.file : "unknown",
242
+ lines: typeof item.lines === "number" ? item.lines : 0,
243
+ issue: typeof item.issue === "string" ? item.issue : "",
244
+ suggestedSplit: Array.isArray(item.suggestedSplit)
245
+ ? item.suggestedSplit.filter((s) => typeof s === "string")
246
+ : [],
247
+ }));
248
+ }
249
+ //# sourceMappingURL=llm-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-analyzer.js","sourceRoot":"","sources":["../../../src/infrastructure/domain-map/llm-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import type { LspClientPort } from "../../domain/domain-map/repositories.js";
2
+ import type { CodeSymbol, LanguageId, SourceRange, SymbolKind, SymbolReference } from "../../domain/domain-map/value-objects.js";
3
+ /** LSP Position (0-based line/character). */
4
+ interface LspPosition {
5
+ readonly line: number;
6
+ readonly character: number;
7
+ }
8
+ /** LSP Range. */
9
+ interface LspRange {
10
+ readonly start: LspPosition;
11
+ readonly end: LspPosition;
12
+ }
13
+ /** LSP DocumentSymbol (hierarchical). */
14
+ interface LspDocumentSymbol {
15
+ readonly name: string;
16
+ readonly kind: number;
17
+ readonly range: LspRange;
18
+ readonly selectionRange: LspRange;
19
+ readonly children?: readonly LspDocumentSymbol[];
20
+ }
21
+ /**
22
+ * Map an LSP DocumentSymbol to a domain CodeSymbol.
23
+ * Recursively maps children.
24
+ */
25
+ export declare function mapLspSymbolToDomain(lspSymbol: LspDocumentSymbol, containerName?: string): CodeSymbol;
26
+ /**
27
+ * Map an LSP SymbolKind number to a domain SymbolKind string.
28
+ * Falls back to "variable" for unknown kinds.
29
+ */
30
+ export declare function mapSymbolKind(lspKind: number): SymbolKind;
31
+ /**
32
+ * Map an LSP Range to a domain SourceRange.
33
+ */
34
+ export declare function mapLspRange(lspRange: LspRange): SourceRange;
35
+ /**
36
+ * Extract a file path from a file:// URI.
37
+ * Handles URL-encoded characters.
38
+ */
39
+ export declare function fileUriToPath(uri: string): string;
40
+ /**
41
+ * Implementation of LspClientPort using GenericLspClient.
42
+ * Spawns one LSP server per analysis session.
43
+ */
44
+ export declare class LspClientAdapter implements LspClientPort {
45
+ private readonly timeoutMs;
46
+ private client;
47
+ private currentLanguage;
48
+ constructor(timeoutMs?: number);
49
+ initialize(rootUri: string, language: LanguageId): Promise<void>;
50
+ shutdown(): Promise<void>;
51
+ documentSymbols(fileUri: string): Promise<readonly CodeSymbol[]>;
52
+ references(fileUri: string, position: SourceRange): Promise<readonly SymbolReference[]>;
53
+ callHierarchy(fileUri: string, position: SourceRange): Promise<readonly SymbolReference[]>;
54
+ isAvailable(language: LanguageId): Promise<boolean>;
55
+ /** Throw if not connected. */
56
+ private ensureConnected;
57
+ /** Throw if the current language's config doesn't support a capability. */
58
+ private ensureCapability;
59
+ }
60
+ export {};
61
+ //# sourceMappingURL=lsp-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/domain-map/lsp-adapter.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,eAAe,EAChB,MAAM,0CAA0C,CAAC;AASlD,6CAA6C;AAC7C,UAAU,WAAW;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,iBAAiB;AACjB,UAAU,QAAQ;IAChB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;CAC3B;AAED,yCAAyC;AACzC,UAAU,iBAAiB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAClD;AA+BD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,iBAAiB,EAC5B,aAAa,CAAC,EAAE,MAAM,GACrB,UAAU,CAcZ;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAEzD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAO3D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKjD;AAID;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,aAAa;IAIxC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAHtC,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,eAAe,CAA2B;gBAErB,SAAS,GAAE,MAAe;IAEjD,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAchE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAQzB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC;IAqBhE,UAAU,CACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;IA6BhC,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;IA8DhC,WAAW,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAezD,8BAA8B;IAC9B,OAAO,CAAC,eAAe;IAQvB,2EAA2E;IAC3E,OAAO,CAAC,gBAAgB;CAczB"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Domain Map Infrastructure — LSP Client Adapter
3
+ *
4
+ * Implements LspClientPort from the domain layer using GenericLspClient.
5
+ * Maps LSP protocol responses to domain value objects.
6
+ *
7
+ * Responsibilities:
8
+ * - Look up LSP server config for a language
9
+ * - Spawn and initialize the LSP server via GenericLspClient
10
+ * - Map textDocument/documentSymbol responses to domain CodeSymbol[]
11
+ * - Map textDocument/references responses to domain SymbolReference[]
12
+ * - Map callHierarchy responses to domain SymbolReference[]
13
+ * - Check LSP server availability via PATH lookup
14
+ *
15
+ * SOLID: SRP — LSP-to-domain mapping only
16
+ * SOLID: DIP — implements domain LspClientPort interface
17
+ * DDD: Infrastructure adapter
18
+ */
19
+ import { execFile } from "node:child_process";
20
+ import { promisify } from "node:util";
21
+ import { LSP_SYMBOL_KIND_MAP } from "../../domain/domain-map/value-objects.js";
22
+ import { GenericLspClient } from "./lsp-json-rpc.js";
23
+ import { getLspConfig } from "./lsp-configs.js";
24
+ const execFileAsync = promisify(execFile);
25
+ // ── Mapping Functions (Pure, Exported for Testing) ────────────────────
26
+ /**
27
+ * Map an LSP DocumentSymbol to a domain CodeSymbol.
28
+ * Recursively maps children.
29
+ */
30
+ export function mapLspSymbolToDomain(lspSymbol, containerName) {
31
+ const kind = mapSymbolKind(lspSymbol.kind);
32
+ const range = mapLspRange(lspSymbol.range);
33
+ const children = (lspSymbol.children ?? []).map((child) => mapLspSymbolToDomain(child, lspSymbol.name));
34
+ return {
35
+ name: lspSymbol.name,
36
+ kind,
37
+ range,
38
+ children,
39
+ ...(containerName !== undefined ? { containerName } : {}),
40
+ };
41
+ }
42
+ /**
43
+ * Map an LSP SymbolKind number to a domain SymbolKind string.
44
+ * Falls back to "variable" for unknown kinds.
45
+ */
46
+ export function mapSymbolKind(lspKind) {
47
+ return LSP_SYMBOL_KIND_MAP.get(lspKind) ?? "variable";
48
+ }
49
+ /**
50
+ * Map an LSP Range to a domain SourceRange.
51
+ */
52
+ export function mapLspRange(lspRange) {
53
+ return {
54
+ startLine: lspRange.start.line,
55
+ startCharacter: lspRange.start.character,
56
+ endLine: lspRange.end.line,
57
+ endCharacter: lspRange.end.character,
58
+ };
59
+ }
60
+ /**
61
+ * Extract a file path from a file:// URI.
62
+ * Handles URL-encoded characters.
63
+ */
64
+ export function fileUriToPath(uri) {
65
+ if (uri.startsWith("file://")) {
66
+ return decodeURIComponent(uri.slice(7));
67
+ }
68
+ return uri;
69
+ }
70
+ // ── LSP Client Adapter ───────────────────────────────────────────────
71
+ /**
72
+ * Implementation of LspClientPort using GenericLspClient.
73
+ * Spawns one LSP server per analysis session.
74
+ */
75
+ export class LspClientAdapter {
76
+ timeoutMs;
77
+ client = null;
78
+ currentLanguage = null;
79
+ constructor(timeoutMs = 30_000) {
80
+ this.timeoutMs = timeoutMs;
81
+ }
82
+ async initialize(rootUri, language) {
83
+ const config = getLspConfig(language);
84
+ if (config === undefined) {
85
+ throw new Error(`No LSP configuration found for language: ${language}`);
86
+ }
87
+ this.client = new GenericLspClient(this.timeoutMs);
88
+ await this.client.start(config.command, config.args, rootUri, {
89
+ ...config.initializationOptions,
90
+ });
91
+ this.currentLanguage = language;
92
+ }
93
+ async shutdown() {
94
+ if (this.client !== null) {
95
+ await this.client.shutdown();
96
+ this.client = null;
97
+ this.currentLanguage = null;
98
+ }
99
+ }
100
+ async documentSymbols(fileUri) {
101
+ this.ensureConnected();
102
+ const result = await this.client.sendRequest("textDocument/documentSymbol", {
103
+ textDocument: { uri: fileUri },
104
+ });
105
+ if (!Array.isArray(result)) {
106
+ return [];
107
+ }
108
+ // LSP can return DocumentSymbol[] (hierarchical) or SymbolInformation[] (flat)
109
+ // We request hierarchical via capabilities, but handle both
110
+ return result.map((sym) => mapLspSymbolToDomain(sym));
111
+ }
112
+ async references(fileUri, position) {
113
+ this.ensureConnected();
114
+ this.ensureCapability("supportsReferences");
115
+ const result = await this.client.sendRequest("textDocument/references", {
116
+ textDocument: { uri: fileUri },
117
+ position: {
118
+ line: position.startLine,
119
+ character: position.startCharacter,
120
+ },
121
+ context: { includeDeclaration: false },
122
+ });
123
+ if (!Array.isArray(result)) {
124
+ return [];
125
+ }
126
+ const sourceFile = fileUriToPath(fileUri);
127
+ return result.map((loc) => ({
128
+ fromFile: sourceFile,
129
+ fromSymbol: "",
130
+ toFile: fileUriToPath(loc.uri),
131
+ toSymbol: "",
132
+ type: "uses",
133
+ }));
134
+ }
135
+ async callHierarchy(fileUri, position) {
136
+ this.ensureConnected();
137
+ this.ensureCapability("supportsCallHierarchy");
138
+ // Stage 1: Prepare call hierarchy item
139
+ const prepareResult = await this.client.sendRequest("callHierarchy/prepareCallHierarchy", {
140
+ textDocument: { uri: fileUri },
141
+ position: {
142
+ line: position.startLine,
143
+ character: position.startCharacter,
144
+ },
145
+ });
146
+ if (!Array.isArray(prepareResult) || prepareResult.length === 0) {
147
+ return [];
148
+ }
149
+ const item = prepareResult[0];
150
+ const references = [];
151
+ // Stage 2: Get incoming calls
152
+ const incomingResult = await this.client.sendRequest("callHierarchy/incomingCalls", { item });
153
+ if (Array.isArray(incomingResult)) {
154
+ for (const call of incomingResult) {
155
+ references.push({
156
+ fromFile: fileUriToPath(call.from.uri),
157
+ fromSymbol: call.from.name,
158
+ toFile: fileUriToPath(item.uri),
159
+ toSymbol: item.name,
160
+ type: "calls",
161
+ });
162
+ }
163
+ }
164
+ // Stage 3: Get outgoing calls
165
+ const outgoingResult = await this.client.sendRequest("callHierarchy/outgoingCalls", { item });
166
+ if (Array.isArray(outgoingResult)) {
167
+ for (const call of outgoingResult) {
168
+ references.push({
169
+ fromFile: fileUriToPath(item.uri),
170
+ fromSymbol: item.name,
171
+ toFile: fileUriToPath(call.to.uri),
172
+ toSymbol: call.to.name,
173
+ type: "calls",
174
+ });
175
+ }
176
+ }
177
+ return references;
178
+ }
179
+ async isAvailable(language) {
180
+ const config = getLspConfig(language);
181
+ if (config === undefined) {
182
+ return false;
183
+ }
184
+ try {
185
+ // Use 'which' on Unix/macOS to check if command exists in PATH
186
+ await execFileAsync("which", [config.command]);
187
+ return true;
188
+ }
189
+ catch {
190
+ return false;
191
+ }
192
+ }
193
+ /** Throw if not connected. */
194
+ ensureConnected() {
195
+ if (this.client === null || !this.client.isConnected) {
196
+ throw new Error("LspClientAdapter: not connected. Call initialize() first.");
197
+ }
198
+ }
199
+ /** Throw if the current language's config doesn't support a capability. */
200
+ ensureCapability(capability) {
201
+ if (this.currentLanguage === null) {
202
+ throw new Error("LspClientAdapter: no language set");
203
+ }
204
+ const config = getLspConfig(this.currentLanguage);
205
+ if (config === undefined || !config[capability]) {
206
+ throw new Error(`LSP server for ${this.currentLanguage} does not support ${capability}`);
207
+ }
208
+ }
209
+ }
210
+ //# sourceMappingURL=lsp-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-adapter.js","sourceRoot":"","sources":["../../../src/infrastructure/domain-map/lsp-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Domain Map Infrastructure — LSP Server Configurations
3
+ *
4
+ * Configuration for each supported LSP server. Maps LanguageId to
5
+ * the command, arguments, and capabilities needed to spawn and
6
+ * communicate with the appropriate language server.
7
+ *
8
+ * 16 distinct LSP server configurations covering 18 languages.
9
+ * TypeScript/JavaScript share one server, C/C++/Objective-C share another.
10
+ *
11
+ * SOLID: SRP — LSP server configuration only
12
+ * SOLID: OCP — new languages added by extending the config map
13
+ */
14
+ import type { LanguageId } from "../../domain/domain-map/value-objects.js";
15
+ /**
16
+ * Configuration for a single LSP server.
17
+ * Contains everything needed to spawn and initialize the server.
18
+ */
19
+ export interface LspLanguageConfig {
20
+ /** The command to spawn (e.g., "typescript-language-server"). */
21
+ readonly command: string;
22
+ /** Arguments to pass to the command (e.g., ["--stdio"]). */
23
+ readonly args: readonly string[];
24
+ /** LSP initialization options passed during handshake. */
25
+ readonly initializationOptions: Record<string, unknown>;
26
+ /** Root file patterns that indicate this language's project root. */
27
+ readonly rootPatterns: readonly string[];
28
+ /** Whether this server supports textDocument/documentSymbol. */
29
+ readonly supportsDocumentSymbols: boolean;
30
+ /** Whether this server supports textDocument/references. */
31
+ readonly supportsReferences: boolean;
32
+ /** Whether this server supports callHierarchy requests. */
33
+ readonly supportsCallHierarchy: boolean;
34
+ }
35
+ /**
36
+ * LSP server configurations indexed by LanguageId.
37
+ * Multiple languages may share the same server (e.g., TS/JS, C/C++/ObjC).
38
+ */
39
+ export declare const LSP_CONFIGS: ReadonlyMap<LanguageId, LspLanguageConfig>;
40
+ /**
41
+ * Get the LSP configuration for a language.
42
+ * @param language - The language ID
43
+ * @returns The configuration or undefined if not supported
44
+ */
45
+ export declare function getLspConfig(language: LanguageId): LspLanguageConfig | undefined;
46
+ /**
47
+ * Get all languages that share the same LSP server command.
48
+ * Useful for determining when a single server can handle multiple file types.
49
+ * @param command - The LSP server command (e.g., "clangd")
50
+ * @returns Array of language IDs using that server
51
+ */
52
+ export declare function getLanguagesByServer(command: string): readonly LanguageId[];
53
+ //# sourceMappingURL=lsp-configs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-configs.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/domain-map/lsp-configs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAI3E;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,0DAA0D;IAC1D,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxD,qEAAqE;IACrE,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,gEAAgE;IAChE,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAC1C,4DAA4D;IAC5D,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,2DAA2D;IAC3D,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;CACzC;AAID;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,UAAU,EAAE,iBAAiB,CAmQjE,CAAC;AAIH;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,UAAU,GACnB,iBAAiB,GAAG,SAAS,CAE/B;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,UAAU,EAAE,CAQ3E"}